mkdocs-1.6.1/0000775000175000017500000000000014664334534012675 5ustar carstencarstenmkdocs-1.6.1/CONTRIBUTING.md0000664000175000017500000001711014664334534015126 0ustar carstencarsten# Contributing to MkDocs An introduction to contributing to the MkDocs project. The MkDocs project welcomes contributions from developers and users in the open source community. Contributions can be made in a number of ways, a few examples are: - Code patches via pull requests - Documentation improvements - Bug reports and patch reviews For information about available communication channels please refer to the [README](https://github.com/mkdocs/mkdocs#readme) file in our GitHub repository. ## Reporting an Issue Please include as much detail as you can. Let us know your platform and MkDocs version. If the problem is visual (for example a theme or design issue), please add a screenshot. If you get an error, please include the full error message and traceback. It is particularly helpful if an issue report touches on all of these aspects: 1. What are you trying to achieve? 2. What is your `mkdocs.yml` configuration (+ other relevant files)? Preferably reduced to the minimal reproducible example. 3. What did you expect to happen when applying this setup? 4. What happened instead and how didn't it match your expectation? ## Trying out the Development Version If you want to just install and try out the latest development version of MkDocs (in case it already contains a fix for your issue), you can do so with the following command. This can be useful if you want to provide feedback for a new feature or want to confirm if a bug you have encountered is fixed in the git master. It is **strongly** recommended that you do this within a [virtualenv]. ```bash pip install git+https://github.com/mkdocs/mkdocs.git ``` ## Installing for Development Note that for development you can just use [Hatch] directly as described below. If you wish to install a local clone of MkDocs anyway, you can run `pip install --editable .`. It is **strongly** recommended that you do this within a [virtualenv]. ## Installing Hatch The main tool that is used for development is [Hatch]. It manages dependencies (in a virtualenv that is created on the fly) and is also the command runner. So first, [install it][install Hatch]. Ideally in an isolated way with **`pipx install hatch`** (after [installing `pipx`]), or just `pip install hatch` as a more well-known way. ## Running all checks To run **all** checks that are required for MkDocs, just run the following command in the cloned MkDocs repository: ```bash hatch run all ``` **This will encompass all of the checks mentioned below.** All checks need to pass. ### Running tests To run the test suite for MkDocs, run the following commands: ```bash hatch run test:test hatch run integration:test ``` It will attempt to run the tests against all of the Python versions we support. So don't be concerned if you are missing some. The rest will be verified by [GitHub Actions] when you submit a pull request. ### Python code style Python code within MkDocs' code base is formatted using [Black] and [Isort] and lint-checked using [Ruff], all of which are configured in `pyproject.toml`. You can automatically check and format the code according to these tools with the following command: ```bash hatch run style:fix ``` The code is also type-checked using [mypy] - also configured in `pyproject.toml`, it can be run like this: ```bash hatch run types:check ``` ### Other style checks There are several other checks, such as spelling and JS style. To run all of them, use this command: ```bash hatch run lint:check ``` ### Documentation of MkDocs itself After making edits to files under the `docs/` dir, you can preview the site locally using the following command: ```bash hatch run docs:serve ``` Note that any 'WARNING' should be resolved before submitting a contribution. Documentation files are also checked by markdownlint, so you should run this as well: ```bash hatch run lint:check ``` If you add a new plugin to mkdocs.yml, you don't need to add it to any "requirements" file, because that is managed automatically. > INFO: If you don't want to use Hatch, for documentation you can install requirements into a virtualenv, in one of these ways (with `.venv` being the virtualenv directory): > > ```bash > .venv/bin/pip install -r requirements/requirements-docs.txt # Exact versions of dependencies. > .venv/bin/pip install -r $(mkdocs get-deps) # Latest versions of all dependencies. > ``` ## Translating themes To localize a theme to your favorite language, follow the guide on [Translating Themes]. We welcome translation pull requests! ## Submitting Pull Requests If you're considering a large code contribution to MkDocs, please prefer to open an issue first to get early feedback on the idea. Once you think the code is ready to be reviewed, push it to your fork and send a pull request. For a change to be accepted it will most likely need to have tests and documentation if it is a new feature. When working with a pull request branch: Unless otherwise agreed, prefer `commit` over `amend`, and `merge` over `rebase`. Avoid force-pushes, otherwise review history is much harder to navigate. For the end result, the "unclean" history is fine because most pull requests are squash-merged on GitHub. Do *not* add to *release-notes.md*, this will be written later. ### Submitting changes to the builtin themes When installed with `i18n` support (`pip install 'mkdocs[i18n]'`), MkDocs allows themes to support being translated into various languages (referred to as locales) if they respect [Jinja's i18n extension] by wrapping text placeholders with `{% trans %}` and `{% endtrans %}` tags. Each time a translatable text placeholder is added, removed or changed in a theme template, the theme's Portable Object Template (`pot`) file needs to be updated by running the `extract_messages` command. To update the `pot` file for both built-in themes, run these commands: ```bash pybabel extract --project=MkDocs --copyright-holder=MkDocs --msgid-bugs-address='https://github.com/mkdocs/mkdocs/issues' --no-wrap --version="$(hatch version)" --mapping-file mkdocs/themes/babel.cfg --output-file mkdocs/themes/mkdocs/messages.pot mkdocs/themes/mkdocs pybabel extract --project=MkDocs --copyright-holder=MkDocs --msgid-bugs-address='https://github.com/mkdocs/mkdocs/issues' --no-wrap --version="$(hatch version)" --mapping-file mkdocs/themes/babel.cfg --output-file mkdocs/themes/readthedocs/messages.pot mkdocs/themes/readthedocs ``` The updated `pot` file should be included in a PR with the updated template. The updated `pot` file will allow translation contributors to propose the translations needed for their preferred language. See the guide on [Translating Themes] for details. NOTE: Contributors are not expected to provide translations with their changes to a theme's templates. However, they are expected to include an updated `pot` file so that everything is ready for translators to do their job. ## Code of Conduct Everyone interacting in the MkDocs project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [PyPA Code of Conduct]. [virtualenv]: https://virtualenv.pypa.io/en/latest/user_guide.html [Hatch]: https://hatch.pypa.io/ [install Hatch]: https://hatch.pypa.io/latest/install/#pip [installing `pipx`]: https://pypa.github.io/pipx/installation/ [GitHub Actions]: https://docs.github.com/actions [PyPA Code of Conduct]: https://www.pypa.io/en/latest/code-of-conduct/ [Translating Themes]: https://www.mkdocs.org/dev-guide/translations/ [Jinja's i18n extension]: https://jinja.palletsprojects.com/en/latest/extensions/#i18n-extension [Ruff]: https://docs.astral.sh/ruff/ [Black]: https://black.readthedocs.io/ [Isort]: https://pycqa.github.io/isort/ [mypy]: https://mypy-lang.org/ mkdocs-1.6.1/.markdownlint.yaml0000664000175000017500000001477614664334534016367 0ustar carstencarstendefault: false # MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md001.md MD001: true # MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md003.md MD003: style: "consistent" # MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md004.md MD004: style: "consistent" # MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md005.md MD005: true # MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md007.md MD007: indent: 4 # MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md009.md MD009: true # MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md010.md MD010: true # MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md011.md MD011: true # MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md012.md MD012: true # MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md014.md MD014: true # MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md018.md MD018: true # MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md019.md MD019: true # MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md020.md MD020: true # MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md021.md MD021: true # MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md022.md MD022: true # MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md023.md MD023: true # MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md024.md MD024: siblings_only: true # MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md025.md MD025: true # MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md026.md MD026: true # MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md027.md MD027: true # MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md028.md MD028: true # MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md MD029: style: "ordered" # MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md030.md MD030: ul_single: 1 ol_single: 1 ul_multi: 3 ol_multi: 2 # MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md031.md MD031: true # MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md032.md MD032: true # MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md034.md MD034: true # MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md035.md MD035: true # MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md036.md MD036: true # MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md037.md MD037: true # MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md038.md MD038: true # MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md039.md MD039: true # MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md040.md MD040: true # MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md042.md MD042: true # MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md045.md MD045: true # MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md046.md MD046: style: "fenced" # MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md047.md MD047: true # MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md048.md MD048: style: "backtick" # MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md049.md MD049: style: "asterisk" # MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md050.md MD050: style: "consistent" # MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md051.md MD051: true # MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md053.md MD053: true # MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md054.md MD054: true # MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md055.md MD055: style: "no_leading_or_trailing" # MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md056.md MD056: true mkdocs-1.6.1/.github/0000775000175000017500000000000014664334534014235 5ustar carstencarstenmkdocs-1.6.1/.github/workflows/0000775000175000017500000000000014664334534016272 5ustar carstencarstenmkdocs-1.6.1/.github/workflows/deploy-release.yml0000664000175000017500000000076514664334534021737 0ustar carstencarstenname: Deploy release on: push: tags: - '*' jobs: pypi: permissions: id-token: write runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: pip install -U build - name: Build package run: python -m build - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 mkdocs-1.6.1/.github/workflows/docs.yml0000664000175000017500000000073214664334534017747 0ustar carstencarstenname: Docs on: push: pull_request: schedule: - cron: '0 6 * * 6' jobs: build: runs-on: ubuntu-latest steps: - name: Download source uses: actions/checkout@v4 - name: Install Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: pip install --no-deps -r requirements/requirements-docs.txt - name: Build site run: mkdocs build --strict mkdocs-1.6.1/.github/workflows/autofix.yml0000664000175000017500000000124614664334534020477 0ustar carstencarstenname: Auto-fix on: push: pull_request: jobs: style: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install Python dependencies run: | python -m pip install --upgrade hatch - name: Fix code style run: hatch run style:fix --fix-only - name: Check if any edits are necessary run: git diff --color --exit-code - name: Apply automatic fixes using pre-commit-ci-lite if: failure() && github.event_name == 'pull_request' uses: pre-commit-ci/lite-action@v1.0.1 mkdocs-1.6.1/.github/workflows/ci.yml0000664000175000017500000000653314664334534017417 0ustar carstencarstenname: CI on: push: pull_request: schedule: - cron: '0 6 * * 6' jobs: test: strategy: fail-fast: false matrix: python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', 'pypy-3.9-v7.x'] os: [ubuntu-latest, windows-latest, macos-latest] include: - python-version: pypy-3.9-v7.x py: pypy3 # Just to slim down the test matrix: exclude: - python-version: '3.9' os: macos-latest - python-version: '3.9' os: windows-latest - python-version: '3.10' os: ubuntu-latest - python-version: '3.11' os: macos-latest - python-version: '3.11' os: windows-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - name: Setup Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade hatch - name: Run tests run: | hatch run +py=${{ matrix.py || matrix.python-version }} test:with-coverage - name: Run integration tests run: | hatch run +py=${{ matrix.py || matrix.python-version }} integration:test shell: bash - name: Upload Codecov Results if: success() uses: codecov/codecov-action@v3 with: file: ./coverage.xml flags: unittests name: ${{ matrix.os }}/${{ matrix.python-version }} fail_ci_if_error: false lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install Python dependencies run: | python -m pip install --upgrade hatch - name: Setup Node uses: actions/setup-node@v4 with: node-version: 20 - name: Check with ruff if: always() run: hatch run style:lint - name: Check with mypy if: always() run: hatch run types:check - name: Check Markdown style if: always() run: hatch run lint:markdown - name: Check JS style if: always() run: hatch run lint:js - name: Check spelling if: always() run: hatch run lint:spelling package: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: pip install -U build - name: Build package run: python -m build - name: Check packaged files shell: bash -e -x {0} run: | expected_wheel=(-emkdocs/{templates/sitemap.xml,config/base.py,py.typed,contrib/search/lunr-language/lunr.nl.js,themes/{mkdocs,readthedocs}/{base.html,locales/{de,es}/LC_MESSAGES/messages.mo}}) expected_sdist=("${expected_wheel[@]}" -e{pyproject.toml,hatch_build.py}) test "$(tar -ztf dist/mkdocs-*.tar.gz | grep -F "${expected_sdist[@]}" | tee /dev/stderr | wc -l)" -eq "${#expected_sdist[@]}" test "$(unzip -l dist/mkdocs-*any.whl | grep -F "${expected_wheel[@]}" | tee /dev/stderr | wc -l)" -eq "${#expected_wheel[@]}" mkdocs-1.6.1/.codecov.yml0000664000175000017500000000021414664334534015115 0ustar carstencarstencodecov: ci: - "!ci.appveyor.com" coverage: status: patch: false project: default: target: 90 comment: false mkdocs-1.6.1/.gitattributes0000664000175000017500000000103514664334534015567 0ustar carstencarstenmkdocs/contrib/search/lunr-language/** linguist-vendored mkdocs/themes/mkdocs/js/** linguist-vendored mkdocs/themes/mkdocs/js/base.js linguist-vendored=false mkdocs/themes/mkdocs/css/** linguist-vendored mkdocs/themes/mkdocs/css/base.css linguist-vendored=false mkdocs/themes/readthedocs/js/** linguist-vendored mkdocs/themes/readthedocs/js/theme.js linguist-vendored=false mkdocs/themes/readthedocs/css/** linguist-vendored mkdocs/themes/readthedocs/css/theme_extra.css linguist-vendored=false docs/img/plugin-events.svg linguist-generated mkdocs-1.6.1/mkdocs.yml0000664000175000017500000000336214664334534014704 0ustar carstencarstensite_name: MkDocs site_url: https://www.mkdocs.org/ site_description: Project documentation with Markdown. site_author: MkDocs Team repo_url: https://github.com/mkdocs/mkdocs/ edit_uri: blob/master/docs/ theme: name: mkdocs color_mode: auto user_color_mode_toggle: true locale: en analytics: {gtag: 'G-274394082'} highlightjs: true hljs_languages: - yaml - django nav: - Home: index.md - Getting Started: getting-started.md - User Guide: user-guide/ - Developer Guide: dev-guide/ - About: - Release Notes: about/release-notes.md - Contributing: about/contributing.md - License: about/license.md extra_css: - css/extra.css exclude_docs: | *.py markdown_extensions: - toc: permalink:  - attr_list - def_list - tables - pymdownx.highlight: use_pygments: false - pymdownx.snippets - pymdownx.superfences - callouts - mdx_gh_links: user: mkdocs repo: mkdocs - mkdocs-click copyright: Copyright © 2014 Tom Christie, Maintained by the MkDocs Team. hooks: - docs/hooks.py plugins: - search - redirects: redirect_maps: user-guide/plugins.md: dev-guide/plugins.md user-guide/custom-themes.md: dev-guide/themes.md user-guide/styling-your-docs.md: user-guide/choosing-your-theme.md - autorefs - literate-nav: nav_file: README.md implicit_index: true - mkdocstrings: handlers: python: options: docstring_section_style: list members_order: source show_root_heading: true show_source: false show_signature_annotations: true watch: - mkdocs mkdocs-1.6.1/LICENSE0000664000175000017500000000241414664334534013703 0ustar carstencarstenCopyright © 2014-present, Tom Christie. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. mkdocs-1.6.1/.coveragerc0000664000175000017500000000003514664334534015014 0ustar carstencarsten[report] show_missing = True mkdocs-1.6.1/.jshintignore0000664000175000017500000000061414664334534015402 0ustar carstencarstenmkdocs/themes/**/js/jquery-**.min.js mkdocs/themes/mkdocs/js/highlight.pack.js mkdocs/themes/mkdocs/js/bootstrap.bundle.min.js mkdocs/themes/mkdocs/js/modernizr-**.min.js mkdocs/themes/readthedocs/js/theme.js mkdocs/themes/readthedocs/js/html5shiv.min.js mkdocs/contrib/search/templates/search/lunr.js mkdocs/contrib/search/lunr-language/lunr.**.js mkdocs/contrib/search/lunr-language/tinyseg.js mkdocs-1.6.1/docs/0000775000175000017500000000000014664334534013625 5ustar carstencarstenmkdocs-1.6.1/docs/user-guide/0000775000175000017500000000000014664334534015676 5ustar carstencarstenmkdocs-1.6.1/docs/user-guide/configuration.md0000664000175000017500000012505514664334534021077 0ustar carstencarsten# Configuration Guide to all available configuration settings. --- ## Introduction Project settings are configured by default using a YAML configuration file in the project directory named `mkdocs.yml`. You can specify another path for it by using the `-f`/`--config-file` option (see `mkdocs build --help`). At a minimum, this configuration file must contain the `site_name`. All other settings are optional. ## Project information ### site_name This is a **required setting**, and should be a string that is used as the main title for the project documentation. For example: ```yaml site_name: Marshmallow Generator ``` When rendering the theme this setting will be passed as the `site_name` context variable. ### site_url Set the canonical URL of the site. This will add a `link` tag with the `canonical` URL to the `head` section of each HTML page. If the 'root' of the MkDocs site will be within a subdirectory of a domain, be sure to include that subdirectory in the setting (`https://example.com/foo/`). This setting is also used for `mkdocs serve`: the server will be mounted onto a path taken from the path component of the URL, e.g. `some/page.md` will be served from `http://127.0.0.1:8000/foo/some/page/` to mimic the expected remote layout. **default**: `null` ### repo_url When set, provides a link to your repository (GitHub, Bitbucket, GitLab, ...) on each page. ```yaml repo_url: https://github.com/example/repository/ ``` **default**: `null` ### repo_name When set, provides the name for the link to your repository on each page. **default**: `'GitHub'`, `'Bitbucket'` or `'GitLab'` if the `repo_url` matches those domains, otherwise the hostname from the `repo_url`. ### edit_uri The path from the base `repo_url` to the docs directory when directly viewing a page, accounting for specifics of the repository host (e.g. GitHub, Bitbucket, etc), the branch, and the docs directory itself. MkDocs concatenates `repo_url` and `edit_uri`, and appends the input path of the page. When set, and if your theme supports it, provides a link directly to the page in your source repository. This makes it easier to find and edit the source for the page. If `repo_url` is not set, this option is ignored. On some themes, setting this option may cause an edit link to be used in place of a repository link. Other themes may show both links. The `edit_uri` supports query ('?') and fragment ('#') characters. For repository hosts that use a query or a fragment to access the files, the `edit_uri` might be set as follows. (Note the `?` and `#` in the URI...) ```yaml # Query string example edit_uri: '?query=root/path/docs/' ``` ```yaml # Hash fragment example edit_uri: '#root/path/docs/' ``` For other repository hosts, simply specify the relative path to the docs directory. ```yaml # Query string example edit_uri: root/path/docs/ ``` For example, having this config: ```yaml repo_url: https://example.com/project/repo edit_uri: blob/main/docs/ ``` means that a page named 'foo/bar.md' will have its edit link lead to: `edit_uri` can actually be just an absolute URL, not necessarily relative to `repo_url`, so this can achieve the same result: ```yaml edit_uri: https://example.com/project/repo/blob/main/docs/ ``` For more flexibility, see [edit_uri_template](#edit_uri_template) below. > NOTE: > On a few known hosts (specifically GitHub, Bitbucket and GitLab), the > `edit_uri` is derived from the 'repo_url' and does not need to be set > manually. Simply defining a `repo_url` will automatically populate the > `edit_uri` configs setting. > > For example, for a GitHub- or GitLab-hosted repository, the `edit_uri` > would be automatically set as `edit/master/docs/` (Note the `edit` path > and `master` branch). > > For a Bitbucket-hosted repository, the equivalent `edit_uri` would be > automatically set as `src/default/docs/` (note the `src` path and `default` > branch). > > To use a different URI than the default (for example a different branch), > simply set the `edit_uri` to your desired string. If you do not want any > "edit URL link" displayed on your pages, then set `edit_uri` to an empty > string to disable the automatic setting. WARNING: On GitHub and GitLab, the default "edit" path (`edit/master/docs/`) opens the page in the online editor. This functionality requires that the user have and be logged in to a GitHub/GitLab account. Otherwise, the user will be redirected to a login/signup page. Alternatively, use the "blob" path (`blob/master/docs/`) to open a read-only view, which supports anonymous access. **default**: `edit/master/docs/` for GitHub and GitLab repos or `src/default/docs/` for a Bitbucket repo, if `repo_url` matches those domains, otherwise `null` ### edit_uri_template The more flexible variant of [edit_uri](#edit_uri). These two are equivalent: ```yaml edit_uri: 'blob/main/docs/' edit_uri_template: 'blob/main/docs/{path}' ``` (they are also mutually exclusive -- don't specify both). Starting from here, you can change the positioning or formatting of the path, in case the default behavior of appending the path isn't enough. The contents of `edit_uri_template` are normal [Python format strings](https://docs.python.org/3/library/string.html#formatstrings), with only these fields available: * `{path}`, e.g. `foo/bar.md` * `{path_noext}`, e.g. `foo/bar` And the conversion flag `!q` is available, to percent-encode the field: * `{path!q}`, e.g. `foo%2Fbar.md` >? NOTE: **Suggested useful configurations:** > > * GitHub Wiki: > (e.g. `https://github.com/project/repo/wiki/foo/bar/_edit`) > > ```yaml > repo_url: 'https://github.com/project/repo/wiki' > edit_uri_template: '{path_noext}/_edit' > ``` > > * BitBucket editor: > (e.g. `https://bitbucket.org/project/repo/src/master/docs/foo/bar.md?mode=edit`) > > ```yaml > repo_url: 'https://bitbucket.org/project/repo/' > edit_uri_template: 'src/master/docs/{path}?mode=edit' > ``` > > * GitLab Static Site Editor: > (e.g. `https://gitlab.com/project/repo/-/sse/master/docs%2Ffoo%2bar.md`) > > ```yaml > repo_url: 'https://gitlab.com/project/repo' > edit_uri_template: '-/sse/master/docs%2F{path!q}' > ``` > > * GitLab Web IDE: > (e.g. `https://gitlab.com/-/ide/project/repo/edit/master/-/docs/foo/bar.md`) > > ```yaml > edit_uri_template: 'https://gitlab.com/-/ide/project/repo/edit/master/-/docs/{path}' > ``` **default**: `null` ### site_description Set the site description. This will add a meta tag to the generated HTML header. **default**: `null` ### site_author Set the name of the author. This will add a meta tag to the generated HTML header. **default**: `null` ### copyright Set the copyright information to be included in the documentation by the theme. **default**: `null` ### remote_branch Set the remote branch to commit to when using `gh-deploy` to deploy to GitHub Pages. This option can be overridden by a command line option in `gh-deploy`. **default**: `gh-pages` ### remote_name Set the remote name to push to when using `gh-deploy` to deploy to GitHub Pages. This option can be overridden by a command line option in `gh-deploy`. **default**: `origin` ## Documentation layout ### nav This setting is used to determine the format and layout of the global navigation for the site. A minimal navigation configuration could look like this: ```yaml nav: - 'index.md' - 'about.md' ``` All paths in the navigation configuration must be relative to the [`docs_dir`](#docs_dir) configuration option. See the section on [configuring pages and navigation] for a more detailed breakdown, including how to create sub-sections. Navigation items may also include links to external sites. While titles are optional for internal links, they are required for external links. An external link may be a full URL or a relative URL. Any path which is not found in the files is assumed to be an external link. See the section about [Meta-Data] on how MkDocs determines the page title of a document. ```yaml nav: - Introduction: 'index.md' - 'about.md' - 'Issue Tracker': 'https://example.com/' ``` In the above example, the first two items point to local files while the third points to an external site. However, sometimes the MkDocs site is hosted in a subdirectory of a project's site and you may want to link to other parts of the same site without including the full domain. In that case, you may use an appropriate relative URL. ```yaml site_url: https://example.com/foo/ nav: - Home: '../' - 'User Guide': 'user-guide.md' - 'Bug Tracker': '/bugs/' ``` In the above example, two different styles of external links are used. First, note that the `site_url` indicates that the MkDocs site is hosted in the `/foo/` subdirectory of the domain. Therefore, the `Home` navigation item is a relative link that steps up one level to the server root and effectively points to `https://example.com/`. The `Bug Tracker` item uses an absolute path from the server root and effectively points to `https://example.com/bugs/`. Of course, the `User Guide` points to a local MkDocs page. **default**: By default `nav` will contain an alphanumerically sorted, nested list of all the Markdown files found within the `docs_dir` and its sub-directories. Index files will always be listed first within a sub-section. ### exclude_docs NEW: **New in version 1.5.** > DANGER: **Changed in version 1.6:** > > This config no longer applies the "drafts" functionality for `mkdocs serve`. If you have draft documents that you want available in "serve" and not "build", replace `exclude_docs` with the new [`draft_docs`](#draft_docs) config option. This config defines patterns of files (under [`docs_dir`](#docs_dir)) to not be picked up into the built site. Example: ```yaml exclude_docs: | api-config.json # A file with this name anywhere. /requirements.txt # Top-level "docs/requirements.txt". *.py # Any file with this extension anywhere. !/foo/example.py # But keep this particular file. ``` This follows the [.gitignore pattern format](https://git-scm.com/docs/gitignore#_pattern_format). The following defaults are always implicitly prepended - to exclude dot-files (and directories) as well as the top-level `templates` directory: ```yaml exclude_docs: | .* /templates/ ``` So, in order to really start this config fresh, you'd need to specify a negated version of these entries first. Otherwise you could for example opt only certain dot-files back into the site: ```yaml exclude_docs: | !.assets # Don't exclude '.assets' although all other '.*' are excluded ``` ### draft_docs NEW: **New in version 1.6.** This config defines patterns of files (under [`docs_dir`](#docs_dir)) to be treated as a draft. Draft files are available during `mkdocs serve` and include a "DRAFT" mark but will not be included in the build. To prevent this effect and make "serve" behave the same as "build", you can run `mkdocs serve --clean`. Example: ```yaml draft_docs: | drafts/ # A "drafts" directory anywhere. _unpublished.md # A md file ending in _unpublished.md !/foo_unpublished.md # But keep this particular file. ``` This follows the [.gitignore pattern format](https://git-scm.com/docs/gitignore#_pattern_format). ### not_in_nav NEW: **New in version 1.5.** > NEW: **New in version 1.6:** > > If the [`nav`](#nav) config is not specified at all, pages specified in this config will now be excluded from the inferred navigation. If you want to include some docs into the site but intentionally exclude them from the nav, normally MkDocs warns about this. Adding such patterns of files (relative to [`docs_dir`](#docs_dir)) into the `not_in_nav` config will prevent such warnings. Example: ```yaml nav: - Foo: foo.md - Bar: bar.md not_in_nav: | /private.md ``` As the previous option, this follows the .gitignore pattern format. NOTE: Adding a given file to [`exclude_docs`](#exclude_docs) takes precedence over and implies `not_in_nav`. ### validation NEW: **New in version 1.5.** Configure the strictness of MkDocs' diagnostic messages when validating links to documents. This is a tree of configs, and for each one the value can be one of the three: `warn`, `info`, `ignore`. Which cause a logging message of the corresponding severity to be produced. The `warn` level is, of course, intended for use with `mkdocs build --strict` (where it becomes an error), which you can employ in continuous testing. The config `validation.links.absolute_links` additionally has a special value `relative_to_docs`, for [validation of absolute links](#validation-of-absolute-links). >? EXAMPLE: **Defaults of this config as of MkDocs 1.6:** > > ```yaml > validation: > nav: > omitted_files: info > not_found: warn > absolute_links: info > links: > not_found: warn > anchors: info > absolute_links: info > unrecognized_links: info > ``` > > (Note: you shouldn't copy this whole example, because it only duplicates the defaults. Only individual items that differ should be set.) The defaults of some of the behaviors already differ from MkDocs 1.4 and below - they were ignored before. >? EXAMPLE: **Configure MkDocs 1.6 to behave like MkDocs 1.4 and below (reduce strictness):** > > ```yaml > validation: > absolute_links: ignore > unrecognized_links: ignore > anchors: ignore > ``` >! EXAMPLE: **Recommended settings for most sites (maximal strictness):** > > ```yaml > validation: > omitted_files: warn > absolute_links: warn # Or 'relative_to_docs' - new in MkDocs 1.6 > unrecognized_links: warn > anchors: warn # New in MkDocs 1.6 > ``` Note how in the above examples we omitted the 'nav' and 'links' keys. Here `absolute_links:` means setting both `nav: absolute_links:` and `links: absolute_links:`. Full list of values and examples of log messages that they can hide or make more prominent: * `validation.nav.omitted_files` * > The following pages exist in the docs directory, but are not included in the "nav" configuration: ... * `validation.nav.not_found` * > A reference to 'foo/bar.md' is included in the 'nav' configuration, which is not found in the documentation files. * > A reference to 'foo/bar.md' is included in the 'nav' configuration, but this file is excluded from the built site. * `validation.nav.absolute_links` * > An absolute path to '/foo/bar.html' is included in the 'nav' configuration, which presumably points to an external resource. * `validation.links.not_found` * > Doc file 'example.md' contains a link '../foo/bar.md', but the target is not found among documentation files. * > Doc file 'example.md' contains a link to 'foo/bar.md' which is excluded from the built site. * `validation.links.anchors` * > Doc file 'example.md' contains a link '../foo/bar.md#some-heading', but the doc 'foo/bar.md' does not contain an anchor '#some-heading'. * > Doc file 'example.md' contains a link '#some-heading', but there is no such anchor on this page. * `validation.links.absolute_links` * > Doc file 'example.md' contains an absolute link '/foo/bar.html', it was left as is. Did you mean 'foo/bar.md'? * `validation.links.unrecognized_links` * > Doc file 'example.md' contains an unrecognized relative link '../foo/bar/', it was left as is. Did you mean 'foo/bar.md'? * > Doc file 'example.md' contains an unrecognized relative link 'mail\@example.com', it was left as is. Did you mean 'mailto:mail\@example.com'? #### Validation of absolute links NEW: **New in version 1.6.** > Historically, within Markdown, MkDocs only recognized **relative** links that lead to another physical `*.md` document (or media file). This is a good convention to follow because then the source pages are also freely browsable without MkDocs, for example on GitHub. Whereas absolute links were left unmodified (making them often not work as expected) or, more recently, warned against. If you dislike having to always use relative links, now you can opt into absolute links and have them work correctly. If you set the setting `validation.links.absolute_links` to the new value `relative_to_docs`, all Markdown links starting with `/` will be understood as being relative to the `docs_dir` root. The links will then be validated for correctness according to all the other rules that were already working for relative links in prior versions of MkDocs. For the HTML output, these links will still be turned relative so that the site still works reliably. So, now any document (e.g. "dir1/foo.md") can link to the document "dir2/bar.md" as `[link](/dir2/bar.md)`, in addition to the previously only correct way `[link](../dir2/bar.md)`. You have to enable the setting, though. The default is still to just skip the link. > EXAMPLE: **Settings to recognize absolute links and validate them:** > > ```yaml > validation: > links: > absolute_links: relative_to_docs > anchors: warn > unrecognized_links: warn > ``` ## Build directories ### theme Sets the theme and theme specific configuration of your documentation site. May be either a string or a set of key/value pairs. If a string, it must be the string name of a known installed theme. For a list of available themes visit [Choosing Your Theme]. An example set of key/value pairs might look something like this: ```yaml theme: name: mkdocs locale: en custom_dir: my_theme_customizations/ static_templates: - sitemap.html include_sidebar: false ``` If a set of key/value pairs, the following nested keys can be defined: > BLOCK: > > #### name > > The string name of a known installed theme. For a list of available themes > visit [Choosing Your Theme]. > > #### locale > > A code representing the language of your site. See [Localizing your theme] > for details. > > #### custom_dir > > A directory containing a custom theme. This can either be a relative > directory, in which case it is resolved relative to the directory containing > your configuration file or it can be an absolute directory path from the > root of your local file system. > > See [Customizing Your Theme][theme_dir] for details if you would like to tweak an > existing theme. > > See the [Theme Developer Guide] if you would like to build your own theme > from the ground up. > > #### static_templates > > A list of templates to render as static pages. The templates must be located > in either the theme's template directory or in the `custom_dir` defined in > the theme configuration. > > #### (theme specific keywords) > > Any additional keywords supported by the theme can also be defined. See the > documentation for the theme you are using for details. **default**: `'mkdocs'` ### docs_dir The directory containing the documentation source markdown files. This can either be a relative directory, in which case it is resolved relative to the directory containing your configuration file, or it can be an absolute directory path from the root of your local file system. **default**: `'docs'` ### site_dir The directory where the output HTML and other files are created. This can either be a relative directory, in which case it is resolved relative to the directory containing your configuration file, or it can be an absolute directory path from the root of your local file system. **default**: `'site'` > NOTE: > If you are using source code control you will normally want to ensure that > your *build output* files are not committed into the repository, and only > keep the *source* files under version control. For example, if using `git` > you might add the following line to your `.gitignore` file: > > ```text > site/ > ``` > > If you're using another source code control tool, you'll want to check its > documentation on how to ignore specific directories. ### extra_css Set a list of CSS files (relative to `docs_dir`) to be included by the theme, typically as `` tags. Example: ```yaml extra_css: - css/extra.css - css/second_extra.css ``` **default**: `[]` (an empty list). ### extra_javascript Set a list of JavaScript files in your `docs_dir` to be included by the theme, as ` # New behavior in MkDocs 1.5: - implicitly_as_module.mjs # # Config keys only supported since MkDocs 1.5: - path: explicitly_as_module.mjs # type: module - path: deferred_plain.js # defer: true - path: scripts/async_module.mjs # type: module async: true ``` So, each item can be either: * a plain string, or * a mapping that has the required `path` key and 3 optional keys `type` (string), `async` (boolean), `defer` (boolean). Only the plain string variant detects the `.mjs` extension and adds `type="module"`, otherwise `type: module` must be written out regardless of extension. **default**: `[]` (an empty list). NOTE: `*.js` and `*.css` files, just like any other type of file, are always copied from `docs_dir` into the site's deployed copy, regardless if they're linked to the pages via the above configs or not. ### extra_templates Set a list of templates in your `docs_dir` to be built by MkDocs. To see more about writing templates for MkDocs read the documentation about [custom themes] and specifically the section about the [available variables] to templates. See the example in [extra_css] for usage. **default**: `[]` (an empty list). ### extra A set of key-value pairs, where the values can be any valid YAML construct, that will be passed to the template. This allows for great flexibility when creating custom themes. For example, if you are using a theme that supports displaying the project version, you can pass it to the theme like this: ```yaml extra: version: 1.0 ``` **default**: By default `extra` will be an empty key-value mapping. ## Preview controls ## Live Reloading ### watch Determines additional directories to watch when running `mkdocs serve`. Configuration is a YAML list. ```yaml watch: - directory_a - directory_b ``` Allows a custom default to be set without the need to pass it through the `-w`/`--watch` option every time the `mkdocs serve` command is called. > NOTE: > The paths provided via the configuration file are relative to the configuration file. > > The paths provided via the `-w`/`--watch` CLI parameters are not. ### use_directory_urls This setting controls the directory structure of the generated documentation, and thereby the URL format used for linking to pages. The following tables demonstrate how the directory structure and URLs used on the site differ when setting `use_directory_urls` to `true` or `false`. **`use_directory_urls: false`** This setting is needed when the documentation is hosted on systems that can't access the file `X/index.html` when given the URL `X`. When set to `false`, no additional `X` directory is created, and the file is simply stored as `X.html`. Links are created that point directly to the target *file* rather than a target *directory*. Source file | Generated File | URL Format ---------------- | ------------------ | ------------------- index.md | index.html | /index.html api-guide.md | api-guide.html | /api-guide.html about/license.md | about/license.html | /about/license.html For example, this needs to be set to `false` when: * opening pages directly from the file system * publishing the documentation to a static S3 website. **`use_directory_urls: true`** The default style of `use_directory_urls: true` creates more user friendly URLs, and is usually what you'll want to use. Source file | Generated File | URL Format ---------------- | ------------------------- | -------------- index.md | /index.html | / api-guide.md | /api-guide/index.html | /api-guide/ about/license.md | /about/license/index.html | /about/license **default**: `true` ### strict Determines how warnings are handled. Set to `true` to halt processing when a warning is raised. Set to `false` to print a warning and continue processing. This is also available as a command line flag: `--strict`. **default**: `false` ### dev_addr Determines the address used when running `mkdocs serve`. Must be of the format `IP:PORT`. Allows a custom default to be set without the need to pass it through the `--dev-addr` option every time the `mkdocs serve` command is called. **default**: `'127.0.0.1:8000'` See also: [site_url](#site_url). ## Formatting options ### markdown_extensions MkDocs uses the [Python Markdown][pymkd] library to translate Markdown files into HTML. Python Markdown supports a variety of [extensions][pymdk-extensions] that customize how pages are formatted. This setting lets you enable a list of extensions beyond the ones that MkDocs uses by default (`meta`, `toc`, `tables`, and `fenced_code`). For example, to enable the [SmartyPants typography extension][smarty], use: ```yaml markdown_extensions: - smarty ``` Some extensions provide configuration options of their own. If you would like to set any configuration options, then you can nest a key/value mapping (`option_name: option value`) of any options that a given extension supports. See the documentation for the extension you are using to determine what options they support. For example, to enable permalinks in the (included) `toc` extension, use: ```yaml markdown_extensions: - toc: permalink: true ``` Note that a colon (`:`) must follow the extension name (`toc`) and then on a new line the option name and value must be indented and separated by a colon. If you would like to define multiple options for a single extension, each option must be defined on a separate line: ```yaml markdown_extensions: - toc: permalink: true separator: "_" ``` Add an additional item to the list for each extension. If you have no configuration options to set for a specific extension, then simply omit options for that extension: ```yaml markdown_extensions: - smarty - toc: permalink: true - sane_lists ``` > NOTE: **Dynamic config values.** > > To dynamically configure the extensions, you can get the config values from [environment variables](#environment-variables) or [obtain paths](#paths-relative-to-the-current-file-or-site) of the currently rendered Markdown file or the overall MkDocs site. In the above examples, each extension is a list item (starts with a `-`). As an alternative, key/value pairs can be used instead. However, in that case an empty value must be provided for extensions for which no options are defined. Therefore, the last example above could also be defined as follows: ```yaml markdown_extensions: smarty: {} toc: permalink: true sane_lists: {} ``` This alternative syntax is required if you intend to override some options via [inheritance]. > NOTE: **More extensions.** > > The Python-Markdown documentation provides a [list of extensions][exts] > which are available out-of-the-box. For a list of configuration options > available for a given extension, see the documentation for that extension. > > You may also install and use various third party extensions ([Python-Markdown wiki], [MkDocs project catalog][catalog]). Consult > the documentation provided by those extensions for installation instructions > and available configuration options. **default**: `[]` (an empty list). ### hooks NEW: **New in version 1.4.** A list of paths to Python scripts (relative to `mkdocs.yml`) that are loaded and used as [plugin](#plugins) instances. For example: ```yaml hooks: - my_hooks.py ``` Then the file `my_hooks.py` can contain any [plugin event handlers](../dev-guide/plugins.md#events) (without `self`), e.g.: ```python def on_page_markdown(markdown, **kwargs): return markdown.replace('a', 'z') ``` >? EXAMPLE: **Advanced example:** > > This produces warnings based on the Markdown content (and warnings are fatal in [strict](#strict) mode): > > ```python > import logging, re > import mkdocs.plugins > > log = logging.getLogger('mkdocs') > > @mkdocs.plugins.event_priority(-50) > def on_page_markdown(markdown, page, **kwargs): > path = page.file.src_uri > for m in re.finditer(r'\bhttp://[^) ]+', markdown): > log.warning(f"Documentation file '{path}' contains a non-HTTPS link: {m[0]}") > ``` This does not enable any new abilities compared to [plugins][], it only simplifies one-off usages, as these don't need to be *installed* like plugins do. Note that for `mkdocs serve` the hook module will *not* be reloaded on each build. You might have seen this feature in the [mkdocs-simple-hooks plugin](https://github.com/aklajnert/mkdocs-simple-hooks). If using standard method names, it can be directly replaced, e.g.: ```diff -plugins: - - mkdocs-simple-hooks: - hooks: - on_page_markdown: 'my_hooks:on_page_markdown' +hooks: + - my_hooks.py ``` > NEW: **New in MkDocs 1.6.** > > If a hook file has a file `foo.py` adjacent to it, it can use the normal Python syntax `import foo` to access its functions. > > In older versions of MkDocs, a workaround was necessary to make this work - adding the path to `sys.path`. ### plugins A list of plugins (with optional configuration settings) to use when building the site. See the [Plugins] documentation for full details. **default**: `['search']` (the "search" plugin included with MkDocs). If the `plugins` config setting is defined in the `mkdocs.yml` config file, then any defaults (such as `search`) are ignored and you need to explicitly re-enable the defaults if you would like to continue using them: ```yaml plugins: - search - your_other_plugin ``` To define options for a given plugin, use a nested set of key/value pairs: ```yaml plugins: - search - your_other_plugin: option1: value option2: other value ``` To completely disable all plugins, including any defaults, set the `plugins` setting to an empty list: ```yaml plugins: [] ``` #### `enabled` option > NEW: **New in MkDocs 1.6.** > > Each plugin has its own options keys. However MkDocs also ensures that each plugin has the `enabled` boolean option. This can be used to conditionally enable a particular plugin, as in the following example: > > ```yaml > plugins: > - search > - code-validator: > enabled: !ENV [LINT, false] > ``` > > See: [Environment variables](#environment-variables) #### Alternate syntax In the above examples, each plugin is a list item (starts with a `-`). As an alternative, key/value pairs can be used instead. However, in that case an empty value must be provided for plugins for which no options are defined. Therefore, the last example above could also be defined as follows: ```yaml plugins: search: {} your_other_plugin: option1: value option2: other value ``` This alternative syntax is required if you intend to override some options via [inheritance]. #### Search A search plugin is provided by default with MkDocs which uses [lunr.js] as a search engine. The following config options are available to alter the behavior of the search plugin: ##### **separator** A regular expression which matches the characters used as word separators when building the index. By default whitespace and the hyphen (`-`) are used. To add the dot (`.`) as a word separator you might do this: ```yaml plugins: - search: separator: '[\s\-\.]+' ``` **default**: `'[\s\-]+'` ##### **min_search_length** An integer value that defines the minimum length for a search query. By default searches shorter than 3 chars in length are ignored as search result quality with short search terms are poor. However, for some use cases (such as documentation about Message Queues which might generate searches for 'MQ') it may be preferable to set a shorter limit. ```yaml plugins: - search: min_search_length: 2 ``` **default**: 3 ##### **lang** A list of languages to use when building the search index as identified by their [ISO 639-1] language codes. With [Lunr Languages], the following languages are supported: * `ar`: Arabic * `da`: Danish * `nl`: Dutch * `en`: English * `fi`: Finnish * `fr`: French * `de`: German * `hu`: Hungarian * `it`: Italian * `ja`: Japanese * `no`: Norwegian * `pt`: Portuguese * `ro`: Romanian * `ru`: Russian * `es`: Spanish * `sv`: Swedish * `th`: Thai * `tr`: Turkish * `vi`: Vietnamese You may [contribute additional languages]. WARNING: While search does support using multiple languages together, it is best not to add additional languages unless you really need them. Each additional language adds significant bandwidth requirements and uses more browser resources. Generally, it is best to keep each instance of MkDocs to a single language. NOTE: Lunr Languages does not currently include support for Chinese or other Asian languages. However, some users have reported decent results using Japanese. **default**: The value of `theme.locale` if set, otherwise `[en]`. ##### **prebuild_index** Optionally generates a pre-built index of all pages, which provides some performance improvements for larger sites. Before enabling, confirm that the theme you are using explicitly supports using a prebuilt index (the builtin themes do). Set to `true` to enable. WARNING: This option requires that [Node.js] be installed and the command `node` be on the system path. If the call to `node` fails for any reason, a warning is issued and the build continues uninterrupted. You may use the `--strict` flag when building to cause such a failure to raise an error instead. NOTE: On smaller sites, using a pre-built index is not recommended as it creates a significant increase is bandwidth requirements with little to no noticeable improvement to your users. However, for larger sites (hundreds of pages), the bandwidth increase is relatively small and your users will notice a significant improvement in search performance. **default**: `False` ##### **indexing** Configures what strategy the search indexer will use when building the index for your pages. This property is particularly useful if your project is large in scale, and the index takes up an enormous amount of disk space. ```yaml plugins: - search: indexing: 'full' ``` ###### Options Option | Description ------ | ----------- `full` | Indexes the title, section headings, and full text of each page. `sections` | Indexes the title and section headings of each page. `titles` | Indexes only the title of each page. **default**: `full` ## Special YAML tags ### Environment variables In most cases, the value of a configuration option is set directly in the configuration file. However, as an option, the value of a configuration option may be set to the value of an environment variable using the `!ENV` tag. For example, to set the value of the `site_name` option to the value of the variable `SITE_NAME` the YAML file may contain the following: ```yaml site_name: !ENV SITE_NAME ``` If the environment variable is not defined, then the configuration setting would be assigned a `null` (or `None` in Python) value. A default value can be defined as the last value in a list. Like this: ```yaml site_name: !ENV [SITE_NAME, 'My default site name'] ``` Multiple fallback variables can be used as well. Note that the last value is not an environment variable, but must be a value to use as a default if none of the specified environment variables are defined. ```yaml site_name: !ENV [SITE_NAME, OTHER_NAME, 'My default site name'] ``` Simple types defined within an environment variable such as string, bool, integer, float, datestamp and null are parsed as if they were defined directly in the YAML file, which means that the value will be converted to the appropriate type. However, complex types such as lists and key/value pairs cannot be defined within a single environment variable. For more details, see the [pyyaml_env_tag](https://github.com/waylan/pyyaml-env-tag) project. ### Paths relative to the current file or site NEW: **New in version 1.5.** Some Markdown extensions can benefit from knowing the path of the Markdown file that's currently being processed, or just the root path of the current site. For that, the special tag `!relative` can be used in most contexts within the config file, though the only known usecases are within [`markdown_extensions`](#markdown_extensions). Examples of the possible values are: ```yaml - !relative # Relative to the directory of the current Markdown file - !relative $docs_dir # Path of the docs_dir - !relative $config_dir # Path of the directory that contains the main mkdocs.yml - !relative $config_dir/some/child/dir # Some subdirectory of the root config directory ``` (Here, `$docs_dir` and `$config_dir` are currently the *only* special prefixes that are recognized.) Example: ```yaml markdown_extensions: - pymdownx.snippets: base_path: !relative # Relative to the current Markdown file ``` This allows the [pymdownx.snippets] extension to include files relative to the current Markdown file, which without this tag it would have no way of knowing. > NOTE: Even for the default case, any extension's base path is technically the *current working directory* although the assumption is that it's the *directory of mkdocs.yml*. So even if you don't want the paths to be relative, to improve the default behavior, always prefer to use this idiom: > > ```yaml > markdown_extensions: > - pymdownx.snippets: > base_path: !relative $config_dir # Relative to the root directory with mkdocs.yml > ``` ## Configuration Inheritance Generally, a single file would hold the entire configuration for a site. However, some organizations may maintain multiple sites which all share a common configuration across them. Rather than maintaining separate configurations for each, the common configuration options can be defined in a parent configuration file which each site's primary configuration file inherits. To define the parent for a configuration file, set the `INHERIT` (all caps) key to the path of the parent file. The path must be relative to the location of the primary file. For configuration options to be merged with a parent configuration, those options must be defined as key/value pairs. Specifically, the [markdown_extensions] and [plugins](#plugins) options must use the alternative syntax which does not use list items (lines which start with `-`). For example, suppose the common (parent) configuration is defined in `base.yml`: ```yaml theme: name: mkdocs locale: en highlightjs: true markdown_extensions: toc: permalink: true admonition: {} ``` Then, for the "foo" site, the primary configuration file would be defined at `foo/mkdocs.yml`: ```yml INHERIT: ../base.yml site_name: Foo Project site_url: https://example.com/foo ``` When running `mkdocs build`, the file at `foo/mkdocs.yml` would be passed in as the configuration file. MkDocs will then parse that file, retrieve and parse the parent file `base.yml` and deep merge the two. This would result in MkDocs receiving the following merged configuration: ```yaml site_name: Foo Project site_url: https://example.com/foo theme: name: mkdocs locale: en highlightjs: true markdown_extensions: toc: permalink: true admonition: {} ``` Deep merging allows you to add and/or override various values in your primary configuration file. For example, suppose for one site you wanted to add support for definition lists, use a different symbol for permalinks, and define a different separator. In that site's primary configuration file you could do: ```yaml INHERIT: ../base.yml site_name: Bar Project site_url: https://example.com/bar markdown_extensions: def_list: {} toc: permalink:  separator: "_" ``` In that case, the above configuration would be deep merged with `base.yml` and result in the following configuration: ```yaml site_name: Bar Project site_url: https://example.com/bar theme: name: mkdocs locale: en highlightjs: true markdown_extensions: def_list: {} toc: permalink:  separator: "_" admonition: {} ``` Notice that the `admonition` extension was retained from the parent configuration, the `def_list` extension was added, the value of `toc.permalink` was replaced, and the value of `toc.separator` was added. You can replace or merge the value of any key. However, any non-key is always replaced. Therefore, you cannot append items to a list. You must redefine the entire list. As the [nav] configuration is made up of nested lists, this means that you cannot merge navigation items. Of course, you can replace the entire `nav` configuration with a new one. However, it is generally expected that the entire navigation would be defined in the primary configuration file for a project. WARNING: As a reminder, all path based configuration options must be relative to the primary configuration file and MkDocs does not alter the paths when merging. Therefore, defining paths in a parent file which is inherited by multiple different sites may not work as expected. It is generally best to define path based options in the primary configuration file only. The inheritance can also be used as a quick way to override keys on the command line - by using stdin as the config file. For example: ```bash echo '{INHERIT: mkdocs.yml, site_name: "Renamed site"}' | mkdocs build -f - ``` [Theme Developer Guide]: ../dev-guide/themes.md [custom themes]: ../dev-guide/themes.md [available variables]: ../dev-guide/themes.md#template-variables [pymdk-extensions]: https://python-markdown.github.io/extensions/ [pymkd]: https://python-markdown.github.io/ [smarty]: https://python-markdown.github.io/extensions/smarty/ [exts]: https://python-markdown.github.io/extensions/ [Python-Markdown wiki]: https://github.com/Python-Markdown/markdown/wiki/Third-Party-Extensions [catalog]: https://github.com/mkdocs/catalog [configuring pages and navigation]: writing-your-docs.md#configure-pages-and-navigation [Meta-Data]: writing-your-docs.md#meta-data [theme_dir]: customizing-your-theme.md#using-the-theme-custom_dir [choosing your theme]: choosing-your-theme.md [Localizing your theme]: localizing-your-theme.md [extra_css]: #extra_css [Plugins]: ../dev-guide/plugins.md [lunr.js]: https://lunrjs.com/ [ISO 639-1]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes [Lunr Languages]: https://github.com/MihaiValentin/lunr-languages#lunr-languages----- [contribute additional languages]: https://github.com/MihaiValentin/lunr-languages/blob/master/CONTRIBUTING.md [Node.js]: https://nodejs.org/ [markdown_extensions]: #markdown_extensions [nav]: #nav [inheritance]: #configuration-inheritance [pymdownx.snippets]: https://facelessuser.github.io/pymdown-extensions/extensions/snippets/ mkdocs-1.6.1/docs/user-guide/localizing-your-theme.md0000664000175000017500000000371114664334534022451 0ustar carstencarsten# Localizing Your Theme Display your theme in your preferred language. --- NOTE: Theme localization only translates the text elements of the theme itself (such as "next" and "previous" links), not the actual content of your documentation. If you wish to create multilingual documentation, you need to combine theme localization as described here with a third-party internationalization/localization plugin. ## Installation For theme localization to work, you must use a theme which supports it and enable `i18n` (internationalization) support by installing `mkdocs[i18n]`: ```bash pip install 'mkdocs[i18n]' ``` ## Supported locales In most cases a locale is designated by the [ISO-639-1] (2-letter) abbreviation for your language. However, a locale may also include a territory (or region or county) code as well. The language and territory must be separated by an underscore. For example, some possible locales for English might include `en`, `en_AU`, `en_GB`, and `en_US`. For a list of locales supported by the theme you are using, see that theme's documentation. - [mkdocs](choosing-your-theme.md#mkdocs-locale) - [readthedocs](choosing-your-theme.md#readthedocs-locale) WARNING: If you configure a language locale which is not yet supported by the theme that you are using, MkDocs will fall back to the theme's default locale. ## Usage To specify the locale that MkDocs should use, set the [locale] parameter of the [theme] configuration option to the appropriate code. For example, to build the `mkdocs` theme in French you would use the following in your `mkdocs.yml` configuration file: ```yaml theme: name: mkdocs locale: fr ``` ## Contributing theme translations If a theme has not yet been translated into your language, feel free to contribute a translation using the [Translation Guide]. [Translation Guide]: ../dev-guide/translations.md [locale]: configuration.md#locale [theme]: configuration.md#theme [ISO-639-1]: https://en.wikipedia.org/wiki/ISO_639-1 mkdocs-1.6.1/docs/user-guide/writing-your-docs.md0000664000175000017500000004561614664334534021641 0ustar carstencarsten# Writing your docs How to layout and write your Markdown source files. --- ## File layout Your documentation source should be written as regular Markdown files (see [Writing with Markdown](#writing-with-markdown) below), and placed in the [documentation directory](configuration.md#docs_dir). By default, this directory will be named `docs` and will exist at the top level of your project, alongside the `mkdocs.yml` configuration file. The simplest project you can create will look something like this: ```text mkdocs.yml docs/ index.md ``` By convention your project homepage should be named `index.md` (see [Index pages](#index-pages) below for details). Any of the following file extensions may be used for your Markdown source files: `markdown`, `mdown`, `mkdn`, `mkd`, `md`. All Markdown files included in your documentation directory will be rendered in the built site regardless of any settings. NOTE: Files and directories with names which begin with a dot (for example: `.foo.md` or `.bar/baz.md`) are ignored by MkDocs. This can be overridden with the [`exclude_docs` config](configuration.md#exclude_docs). You can also create multi-page documentation, by creating several Markdown files: ```text mkdocs.yml docs/ index.md about.md license.md ``` The file layout you use determines the URLs that are used for the generated pages. Given the above layout, pages would be generated for the following URLs: ```text / /about/ /license/ ``` You can also include your Markdown files in nested directories if that better suits your documentation layout. ```text docs/ index.md user-guide/getting-started.md user-guide/configuration-options.md license.md ``` Source files inside nested directories will cause pages to be generated with nested URLs, like so: ```text / /user-guide/getting-started/ /user-guide/configuration-options/ /license/ ``` Any files which are not identified as Markdown files (by their file extension) within the [documentation directory](configuration.md#docs_dir) are copied by MkDocs to the built site unaltered. See [how to link to images and media](#linking-to-images-and-media) below for details. ### Index pages When a directory is requested, by default, most web servers will return an index file (usually named `index.html`) contained within that directory if one exists. For that reason, the homepage in all of the examples above has been named `index.md`, which MkDocs will render to `index.html` when building the site. Many repository hosting sites provide special treatment for README files by displaying the contents of the README file when browsing the contents of a directory. Therefore, MkDocs will allow you to name your index pages as `README.md` instead of `index.md`. In that way, when users are browsing your source code, the repository host can display the index page of that directory as it is a README file. However, when MkDocs renders your site, the file will be renamed to `index.html` so that the server will serve it as a proper index file. If both an `index.md` file and a `README.md` file are found in the same directory, then the `index.md` file is used and the `README.md` file is ignored. ### Configure Pages and Navigation The [nav](configuration.md#nav) configuration setting in your `mkdocs.yml` file defines which pages are included in the global site navigation menu as well as the structure of that menu. If not provided, the navigation will be automatically created by discovering all the Markdown files in the [documentation directory](configuration.md#docs_dir). An automatically created navigation configuration will always be sorted alphanumerically by file name (except that index files will always be listed first within a sub-section). You will need to manually define your navigation configuration if you would like your navigation menu sorted differently. A minimal navigation configuration could look like this: ```yaml nav: - index.md - about.md ``` All paths in the navigation configuration must be relative to the `docs_dir` configuration option. If that option is set to the default value, `docs`, the source files for the above configuration would be located at `docs/index.md` and `docs/about.md`. The above example will result in two navigation items being created at the top level and with their titles inferred from the contents of the Markdown file or, if no title is defined within the file, of the file name. To override the title in the `nav` setting add a title right before the filename. ```yaml nav: - Home: index.md - About: about.md ``` Note that if a title is defined for a page in the navigation, that title will be used throughout the site for that page and will override any title defined within the page itself. Navigation sub-sections can be created by listing related pages together under a section title. For example: ```yaml nav: - Home: index.md - User Guide: - Writing your docs: writing-your-docs.md - Styling your docs: styling-your-docs.md - About: - License: license.md - Release Notes: release-notes.md ``` With the above configuration we have three top level items: "Home", "User Guide" and "About." "Home" is a link to the homepage for the site. Under the "User Guide" section two pages are listed: "Writing your docs" and "Styling your docs." Under the "About" section two more pages are listed: "License" and "Release Notes." Note that a section cannot have a page assigned to it. Sections are only containers for child pages and sub-sections. You may nest sections as deeply as you like. However, be careful that you don't make it too difficult for your users to navigate through the site navigation by over-complicating the nesting. While sections may mirror your directory structure, they do not have to. Any pages not listed in your navigation configuration will still be rendered and included with the built site, however, they will not be linked from the global navigation and will not be included in the `previous` and `next` links. Such pages will be "hidden" unless linked to directly. ## Writing with Markdown MkDocs pages must be authored in [Markdown][md], a lightweight markup language which results in easy-to-read, easy-to-write plain text documents that can be converted to valid HTML documents in a predictable manner. MkDocs uses the [Python-Markdown] library to render Markdown documents to HTML. Python-Markdown is almost completely compliant with the [reference implementation][md], although there are a few very minor [differences]. In addition to the base Markdown [syntax] which is common across all Markdown implementations, MkDocs includes support for extending the Markdown syntax with Python-Markdown [extensions]. See the MkDocs' [markdown_extensions] configuration setting for details on how to enable extensions. MkDocs includes some extensions by default, which are highlighted below. [Python-Markdown]: https://python-markdown.github.io/ [md]: https://daringfireball.net/projects/markdown/ [differences]: https://python-markdown.github.io/#differences [syntax]: https://daringfireball.net/projects/markdown/syntax [extensions]: https://python-markdown.github.io/extensions/ [markdown_extensions]: configuration.md#markdown_extensions ### Internal links MkDocs allows you to interlink your documentation by using regular Markdown [links]. However, there are a few additional benefits to formatting those links specifically for MkDocs as outlined below. [links]: https://daringfireball.net/projects/markdown/syntax#link #### Linking to pages When linking between pages in the documentation you can simply use the regular Markdown [linking][links] syntax, including the *relative path* to the Markdown document you wish to link to. ```markdown Please see the [project license](license.md) for further details. ``` When the MkDocs build runs, these Markdown links will automatically be transformed into an HTML hyperlink to the appropriate HTML page. WARNING: Using absolute paths with links is not officially supported. Relative paths are adjusted by MkDocs to ensure they are always relative to the page. Absolute paths are not modified at all. This means that your links using absolute paths might work fine in your local environment but they might break once you deploy them to your production server. If the target documentation file is in another directory you'll need to make sure to include any relative directory path in the link. ```markdown Please see the [project license](../about/license.md) for further details. ``` The [toc] extension is used by MkDocs to generate an ID for every header in your Markdown documents. You can use that ID to link to a section within a target document by using an anchor link. The generated HTML will correctly transform the path portion of the link, and leave the anchor portion intact. ```markdown Please see the [project license](about.md#license) for further details. ``` Note that IDs are created from the text of a header. All text is converted to lowercase and any disallowed characters, including white-space, are converted to dashes. Consecutive dashes are then reduced to a single dash. There are a few configuration settings provided by the toc extension which you can set in your `mkdocs.yml` configuration file to alter the default behavior: * **`permalink`** Generate permanent links at the end of each header. Default: `False`. When set to True the paragraph symbol (¶ or `¶`) is used as the link text. When set to a string, the provided string is used as the link text. For example, to use the hash symbol (`#`) instead, do: ```yaml markdown_extensions: - toc: permalink: "#" ``` * **`baselevel`** Base level for headers. Default: `1`. This setting allows the header levels to be automatically adjusted to fit within the hierarchy of your HTML templates. For example, if the Markdown text for a page should not contain any headers higher than level 2 (`

`), do: ```yaml markdown_extensions: - toc: baselevel: 2 ``` Then any headers in your document would be increased by 1. For example, the header `# Header` would be rendered as a level 2 header (`

`) in the HTML output. * **`separator`** Word separator. Default: `-`. Character which replaces white-space in generated IDs. If you prefer underscores, then do: ```yaml markdown_extensions: - toc: separator: "_" ``` Note that if you would like to define multiple of the above settings, you must do so under a single `toc` entry in the `markdown_extensions` configuration option. ```yml markdown_extensions: - toc: permalink: "#" baselevel: 2 separator: "_" ``` [toc]: https://python-markdown.github.io/extensions/toc/ #### Linking to images and media As well as the Markdown source files, you can also include other file types in your documentation, which will be copied across when generating your documentation site. These might include images and other media. For example, if your project documentation needed to include a [GitHub Pages CNAME file] and a PNG formatted screenshot image then your file layout might look as follows: ```text mkdocs.yml docs/ CNAME index.md about.md license.md img/ screenshot.png ``` To include images in your documentation source files, simply use any of the regular Markdown image syntaxes: ```Markdown Cupcake indexer is a snazzy new project for indexing small cakes. ![Screenshot](img/screenshot.png) *Above: Cupcake indexer in progress* ``` Your image will now be embedded when you build the documentation, and should also be previewed if you're working on the documentation with a Markdown editor. [GitHub Pages CNAME file]: https://help.github.com/articles/using-a-custom-domain-with-github-pages/ #### Linking from raw HTML Markdown allows document authors to fall back to raw HTML when the Markdown syntax does not meets the author's needs. MkDocs does not limit Markdown in this regard. However, as all raw HTML is ignored by the Markdown parser, MkDocs is not able to validate or convert links contained in raw HTML. When including internal links within raw HTML, you will need to manually format the link appropriately for the rendered document. ### Meta-Data MkDocs includes support for both YAML and MultiMarkdown style meta-data (often called front-matter). Meta-data consists of a series of keywords and values defined at the beginning of a Markdown document, which are stripped from the document prior to it being processing by Python-Markdown. The key/value pairs are passed by MkDocs to the page template. Therefore, if a theme includes support, the values of any keys can be displayed on the page or used to control the page rendering. See your theme's documentation for information about which keys may be supported, if any. In addition to displaying information in a template, MkDocs includes support for a few predefined meta-data keys which can alter the behavior of MkDocs for that specific page. The following keys are supported: * **`template`** The template to use with the current page. By default, MkDocs uses the `main.html` template of a theme to render Markdown pages. You can use the `template` meta-data key to define a different template file for that specific page. The template file must be available on the path(s) defined in the theme's environment. * **`title`** The "title" to use for the document. MkDocs will attempt to determine the title of a document in the following ways, in order: 1. A title defined in the [nav] configuration setting for a document. 2. A title defined in the `title` meta-data key of a document. 3. A level 1 Markdown header on the first line of the document body. ([Setext-style] headers are supported *only since MkDocs 1.5*.) 4. The filename of a document. Upon finding a title for a page, MkDoc does not continue checking any additional sources in the above list. [Setext-style]: https://daringfireball.net/projects/markdown/syntax#header #### YAML Style Meta-Data YAML style meta-data consists of [YAML] key/value pairs wrapped in YAML style delimiters to mark the start and/or end of the meta-data. The first line of a document must be `---`. The meta-data ends at the first line containing an end deliminator (either `---` or `...`). The content between the delimiters is parsed as [YAML]. ```text --- title: My Document summary: A brief description of my document. authors: - Waylan Limberg - Tom Christie date: 2018-07-10 some_url: https://example.com --- This is the first paragraph of the document. ``` YAML is able to detect data types. Therefore, in the above example, the values of `title`, `summary` and `some_url` are strings, the value of `authors` is a list of strings and the value of `date` is a `datetime.date` object. Note that the YAML keys are case sensitive and MkDocs expects keys to be all lowercase. The top level of the YAML must be a collection of key/value pairs, which results in a Python `dict` being returned. If any other type is returned or the YAML parser encounters an error, then MkDocs does not recognize the section as meta-data, the page's `meta` attribute will be empty, and the section is not removed from the document. #### MultiMarkdown Style Meta-Data MultiMarkdown style meta-data uses a format first introduced by the [MultiMarkdown] project. The data consists of a series of keywords and values defined at the beginning of a Markdown document, like this: ```text Title: My Document Summary: A brief description of my document. Authors: Waylan Limberg Tom Christie Date: January 23, 2018 blank-value: some_url: https://example.com This is the first paragraph of the document. ``` The keywords are case-insensitive and may consist of letters, numbers, underscores and dashes and must end with a colon. The values consist of anything following the colon on the line and may even be blank. If a line is indented by 4 or more spaces, that line is assumed to be an additional line of the value for the previous keyword. A keyword may have as many lines as desired. All lines are joined into a single string. The first blank line ends all meta-data for the document. Therefore, the first line of a document must not be blank. NOTE: MkDocs does not support YAML style delimiters (`---` or `...`) for MultiMarkdown style meta-data. In fact, MkDocs relies on the the presence or absence of the delimiters to determine whether YAML style meta-data or MultiMarkdown style meta-data is being used. If the delimiters are detected, but the content between the delimiters is not valid YAML meta-data, MkDocs does not attempt to parse the content as MultiMarkdown style meta-data. [YAML]: https://yaml.org [MultiMarkdown]: https://fletcherpenney.net/MultiMarkdown_Syntax_Guide#metadata [nav]: configuration.md#nav ### Tables The [tables] extension adds a basic table syntax to Markdown which is popular across multiple implementations. The syntax is rather simple and is generally only useful for simple tabular data. A simple table looks like this: ```markdown First Header | Second Header | Third Header ------------ | ------------- | ------------ Content Cell | Content Cell | Content Cell Content Cell | Content Cell | Content Cell ``` If you wish, you can add a leading and tailing pipe to each line of the table: ```markdown | First Header | Second Header | Third Header | | ------------ | ------------- | ------------ | | Content Cell | Content Cell | Content Cell | | Content Cell | Content Cell | Content Cell | ``` Specify alignment for each column by adding colons to separator lines: ```markdown First Header | Second Header | Third Header :----------- |:-------------:| -----------: Left | Center | Right Left | Center | Right ``` Note that table cells cannot contain any block level elements and cannot contain multiple lines of text. They can, however, include inline Markdown as defined in Markdown's [syntax] rules. Additionally, a table must be surrounded by blank lines. There must be a blank line before and after the table. [tables]: https://python-markdown.github.io/extensions/tables/ ### Fenced code blocks The [fenced code blocks] extension adds an alternate method of defining code blocks without indentation. The first line should contain 3 or more backtick (`` ` ``) characters, and the last line should contain the same number of backtick characters (`` ` ``): ````markdown ``` Fenced code blocks are like Standard Markdown’s regular code blocks, except that they’re not indented and instead rely on start and end fence lines to delimit the code block. ``` ```` With this approach, the language can optionally be specified on the first line after the backticks which informs any syntax highlighters of the language used: ````markdown ```python def fn(): pass ``` ```` Note that fenced code blocks can not be indented. Therefore, they cannot be nested inside list items, blockquotes, etc. [fenced code blocks]: https://python-markdown.github.io/extensions/fenced_code_blocks/ mkdocs-1.6.1/docs/user-guide/cli.md0000664000175000017500000000023714664334534016771 0ustar carstencarsten# Command Line Interface ::: mkdocs-click :module: mkdocs.__main__ :command: cli :prog_name: mkdocs :style: table :list_subcommands: true mkdocs-1.6.1/docs/user-guide/customizing-your-theme.md0000664000175000017500000002016414664334534022672 0ustar carstencarsten# Customizing Your Theme Altering a theme to suit your needs. --- If you would like to make a few tweaks to an existing theme, there is no need to create your own theme from scratch. For minor tweaks which only require some CSS and/or JavaScript, you can [use the docs_dir](#using-the-docs_dir). However, for more complex customizations, including overriding templates, you will need to [use the theme custom_dir](#using-the-theme-custom_dir) setting. ## Using the docs_dir The [extra_css] and [extra_javascript] configuration options can be used to make tweaks and customizations to existing themes. To use these, you simply need to include either CSS or JavaScript files within your [documentation directory]. For example, to change the color of the headers in your documentation, create a file called (for example) `style.css` and place it next to the documentation Markdown. In that file add the following CSS. ```css h1 { color: red; } ``` Then you need to add it to `mkdocs.yml`: ```yaml extra_css: - style.css ``` After making these changes, they should be visible when you run `mkdocs serve` - if you already had this running, you should see that the CSS changes were automatically picked up and the documentation will be updated. NOTE: Any extra CSS or JavaScript files will be added to the generated HTML document after the page content. If you desire to include a JavaScript library, you may have better success including the library by using the theme [custom_dir]. ## Using the theme custom_dir The [`theme.custom_dir`][custom_dir] configuration option can be used to point to a directory of files which override the files in a parent theme. The parent theme would be the theme defined in the [`theme.name`][name] configuration option. Any file in the `custom_dir` with the same name as a file in the parent theme will replace the file of the same name in the parent theme. Any additional files in the `custom_dir` will be added to the parent theme. The contents of the `custom_dir` should mirror the directory structure of the parent theme. You may include templates, JavaScript files, CSS files, images, fonts, or any other media included in a theme. NOTE: For this to work, the `theme.name` setting must be set to a known installed theme. If the `name` setting is instead set to `null` (or not defined), then there is no theme to override and the contents of the `custom_dir` must be a complete, standalone theme. See the [Theme Developer Guide][custom theme] for more information. For example, the [mkdocs] theme ([browse source]), contains the following directory structure (in part): ```text - css\ - fonts\ - img\ - favicon.ico - grid.png - js\ - 404.html - base.html - content.html - nav-sub.html - nav.html - toc.html ``` To override any of the files contained in that theme, create a new directory next to your `docs_dir`: ```bash mkdir custom_theme ``` And then point your `mkdocs.yml` configuration file at the new directory: ```yaml theme: name: mkdocs custom_dir: custom_theme/ ``` To override the 404 error page ("file not found"), add a new template file named `404.html` to the `custom_theme` directory. For information on what can be included in a template, review the [Theme Developer Guide][custom theme]. To override the favicon, you can add a new icon file at `custom_theme/img/favicon.ico`. To include a JavaScript library, copy the library to the `custom_theme/js/` directory. Your directory structure should now look like this: ```text - docs/ - index.html - custom_theme/ - img/ - favicon.ico - js/ - somelib.js - 404.html - config.yml ``` NOTE: Any files included in the parent theme (defined in `name`) but not included in the `custom_dir` will still be utilized. The `custom_dir` will only override/replace files in the parent theme. If you want to remove files, or build a theme from scratch, then you should review the [Theme Developer Guide][custom theme]. ### Overriding Template Blocks The built-in themes implement many of their parts inside template blocks which can be individually overridden in the `main.html` template. Simply create a `main.html` template file in your `custom_dir` and define replacement blocks within that file. Just make sure that the `main.html` extends `base.html`. For example, to alter the title of the MkDocs theme, your replacement `main.html` template would contain the following: ```django {% extends "base.html" %} {% block htmltitle %} Custom title goes here {% endblock %} ``` In the above example, the `htmltitle` block defined in your custom `main.html` file will be used in place of the default `htmltitle` block defined in the parent theme. You may re-define as many blocks as you desire, as long as those blocks are defined in the parent. For example, you could replace the Google Analytics script with one for a different service or replace the search feature with your own. You will need to consult the parent theme you are using to determine what blocks are available to override. The MkDocs and ReadTheDocs themes provide the following blocks: * `site_meta`: Contains meta tags in the document head. * `htmltitle`: Contains the page title in the document head. * `styles`: Contains the link tags for stylesheets. * `libs`: Contains the JavaScript libraries (jQuery, etc) included in the page header. * `scripts`: Contains JavaScript scripts which should execute after a page loads. * `analytics`: Contains the analytics script. * `extrahead`: An empty block in the `` to insert custom tags/scripts/etc. * `site_name`: Contains the site name in the navigation bar. * `site_nav`: Contains the site navigation in the navigation bar. * `search_button`: Contains the search box in the navigation bar. * `next_prev`: Contains the next and previous buttons in the navigation bar. * `repo`: Contains the repository link in the navigation bar. * `content`: Contains the page content and table of contents for the page. * `footer`: Contains the page footer. You may need to view the source template files to ensure your modifications will work with the structure of the site. See [Template Variables] for a list of variables you can use within your custom blocks. For a more complete explanation of blocks, consult the [Jinja documentation]. ### Combining the custom_dir and Template Blocks Adding a JavaScript library to the `custom_dir` will make it available, but won't include it in the pages generated by MkDocs. Therefore, a link needs to be added to the library from the HTML. Starting the with directory structure above (truncated): ```text - docs/ - custom_theme/ - js/ - somelib.js - config.yml ``` A link to the `custom_theme/js/somelib.js` file needs to be added to the template. As `somelib.js` is a JavaScript library, it would logically go in the `libs` block. However, a new `libs` block that only includes the new script will replace the block defined in the parent template and any links to libraries in the parent template will be removed. To avoid breaking the template, a [super block] can be used with a call to `super` from within the block: ```django {% extends "base.html" %} {% block libs %} {{ super() }} {% endblock %} ``` Note that the [base_url] template variable was used to ensure that the link is always relative to the current page. Now the generated pages will include links to the template provided libraries as well as the library included in the `custom_dir`. The same would be required for any additional CSS files included in the `custom_dir`. [custom theme]: ../dev-guide/themes.md [extra_css]: ./configuration.md#extra_css [extra_javascript]: ./configuration.md#extra_javascript [documentation directory]: ./configuration.md#docs_dir [custom_dir]: ./configuration.md#custom_dir [name]: ./configuration.md#name [mkdocs]: ./choosing-your-theme.md#mkdocs [browse source]: https://github.com/mkdocs/mkdocs/tree/master/mkdocs/themes/mkdocs [Template Variables]: ../dev-guide/themes.md#template-variables [Jinja documentation]: https://jinja.palletsprojects.com/en/latest/templates/#template-inheritance [super block]: https://jinja.palletsprojects.com/en/latest/templates/#super-blocks [base_url]: ../dev-guide/themes.md#base_url mkdocs-1.6.1/docs/user-guide/README.md0000664000175000017500000000134714664334534017162 0ustar carstencarsten# User Guide Building Documentation with MkDocs --- The MkDocs User Guide provides documentation for users of MkDocs. See [Getting Started] for an introductory tutorial. You can jump directly to a page listed below, or use the *next* and *previous* buttons in the navigation bar at the top of the page to move through the documentation in order. - [Installation](installation.md) - [Writing Your Docs](writing-your-docs.md) - [Choosing Your Theme](choosing-your-theme.md) - [Customizing Your Theme](customizing-your-theme.md) - [Localizing Your Theme](localizing-your-theme.md) - [Configuration](configuration.md) - [Command Line Interface](cli.md) - [Deploying Your Docs](deploying-your-docs.md) [Getting Started]: ../getting-started.md mkdocs-1.6.1/docs/user-guide/installation.md0000664000175000017500000000623514664334534020727 0ustar carstencarsten# MkDocs Installation A detailed guide. --- ## Requirements MkDocs requires a recent version of [Python] and the Python package manager, [pip], to be installed on your system. You can check if you already have these installed from the command line: ```console $ python --version Python 3.8.2 $ pip --version pip 20.0.2 from /usr/local/lib/python3.8/site-packages/pip (python 3.8) ``` If you already have those packages installed, you may skip down to [Installing MkDocs](#installing-mkdocs). ### Installing Python Install [Python] using your package manager of choice, or by downloading an installer appropriate for your system from [python.org] and running it. > NOTE: > If you are installing Python on Windows, be sure to check the box to have > Python added to your PATH if the installer offers such an option (it's > normally off by default). > > ![Add Python to PATH](../img/win-py-install.png) ### Installing pip If you're using a recent version of Python, the Python package manager, [pip], is most likely installed by default. However, you may need to upgrade pip to the lasted version: ```bash pip install --upgrade pip ``` If you need to install pip for the first time, download [get-pip.py]. Then run the following command to install it: ```bash python get-pip.py ``` ## Installing MkDocs Install the `mkdocs` package using pip: ```bash pip install mkdocs ``` You should now have the `mkdocs` command installed on your system. Run `mkdocs --version` to check that everything worked okay. ```console $ mkdocs --version mkdocs, version 1.2.0 from /usr/local/lib/python3.8/site-packages/mkdocs (Python 3.8) ``` > NOTE: > If you would like manpages installed for MkDocs, the [click-man] tool can > generate and install them for you. Simply run the following two commands: > > ```bash > pip install click-man > click-man --target path/to/man/pages mkdocs > ``` > > See the [click-man documentation] for an explanation of why manpages are > not automatically generated and installed by pip. > NOTE: > If you are using Windows, some of the above commands may not work > out-of-the-box. > > A quick solution may be to preface every Python command with `python -m` > like this: > > ```bash > python -m pip install mkdocs > python -m mkdocs > ``` > > For a more permanent solution, you may need to edit your `PATH` environment > variable to include the `Scripts` directory of your Python installation. > Recent versions of Python include a script to do this for you. Navigate to > your Python installation directory (for example `C:\Python38\`), open the > `Tools`, then `Scripts` folder, and run the `win_add2path.py` file by double > clicking on it. Alternatively, you can download the [script][a2p] and run it > (`python win_add2path.py`). [Python]: https://www.python.org/ [python.org]: https://www.python.org/downloads/ [pip]: https://pip.readthedocs.io/en/stable/installing/ [get-pip.py]: https://bootstrap.pypa.io/get-pip.py [click-man]: https://github.com/click-contrib/click-man [click-man documentation]: https://github.com/click-contrib/click-man#automatic-man-page-installation-with-setuptools-and-pip [a2p]: https://github.com/python/cpython/blob/master/Tools/scripts/win_add2path.py mkdocs-1.6.1/docs/user-guide/deploying-your-docs.md0000664000175000017500000002233214664334534022136 0ustar carstencarsten# Deploying your docs A basic guide to deploying your docs to various hosting providers --- ## GitHub Pages If you host the source code for a project on [GitHub], you can easily use [GitHub Pages] to host the documentation for your project. There are two basic [types of GitHub Pages sites]: Project Pages sites, and User and Organization Pages sites. They are nearly identical but have some important differences, which require a different work flow when deploying. ### Project Pages Project Pages sites are simpler as the site files get deployed to a branch within the project repository (`gh-pages` by default). After you `checkout` the primary working branch (usually `master`) of the git repository where you maintain the source documentation for your project, run the following command: ```sh mkdocs gh-deploy ``` That's it! Behind the scenes, MkDocs will build your docs and use the [ghp-import] tool to commit them to the `gh-pages` branch and push the `gh-pages` branch to GitHub. Use `mkdocs gh-deploy --help` to get a full list of options available for the `gh-deploy` command. Be aware that you will not be able to review the built site before it is pushed to GitHub. Therefore, you may want to verify any changes you make to the docs beforehand by using the `build` or `serve` commands and reviewing the built files locally. WARNING: You should never edit files in your pages repository by hand if you're using the `gh-deploy` command because you will lose your work the next time you run the command. WARNING: If there are untracked files or uncommitted work in the local repository where `mkdocs gh-deploy` is run, these will be included in the pages that are deployed. ### Organization and User Pages User and Organization Pages sites are not tied to a specific project, and the site files are deployed to the `master` branch in a dedicated repository named with the GitHub account name. Therefore, you need working copies of two repositories on our local system. For example, consider the following file structure: ```text my-project/ mkdocs.yml docs/ orgname.github.io/ ``` After making and verifying updates to your project you need to change directories to the `orgname.github.io` repository and call the `mkdocs gh-deploy` command from there: ```sh cd ../orgname.github.io/ mkdocs gh-deploy --config-file ../my-project/mkdocs.yml --remote-branch master ``` Note that you need to explicitly point to the `mkdocs.yml` configuration file as it is no longer in the current working directory. You also need to inform the deploy script to commit to the `master` branch. You may override the default with the [remote_branch] configuration setting, but if you forget to change directories before running the deploy script, it will commit to the `master` branch of your project, which you probably don't want. ### Custom Domains GitHub Pages includes support for using a [Custom Domain] for your site. In addition to the steps documented by GitHub, you need to take one additional step so that MkDocs will work with your custom domain. You need to add a `CNAME` file to the root of your [docs_dir]. The file must contain a single bare domain or subdomain on a single line (see MkDocs' own [CNAME file] as an example). You may create the file manually, or use GitHub's web interface to set up the custom domain (under Settings / Custom Domain). If you use the web interface, GitHub will create the `CNAME` file for you and save it to the root of your "pages" branch. So that the file does not get removed the next time you deploy, you need to copy the file to your `docs_dir`. With the file properly included in your `docs_dir`, MkDocs will include the file in your built site and push it to your "pages" branch each time you run the `gh-deploy` command. If you are having problems getting a custom domain to work, see GitHub's documentation on [Troubleshooting custom domains]. [GitHub]: https://github.com/ [GitHub Pages]: https://pages.github.com/ [types of GitHub Pages sites]: https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#types-of-github-pages-sites [ghp-import]: https://github.com/davisp/ghp-import [remote_branch]: ./configuration.md#remote_branch [Custom Domain]: https://help.github.com/articles/adding-or-removing-a-custom-domain-for-your-github-pages-site [docs_dir]: ./configuration.md#docs_dir [CNAME file]: https://github.com/mkdocs/mkdocs/blob/master/docs/CNAME [Troubleshooting custom domains]: https://help.github.com/articles/troubleshooting-custom-domains/ ## Read the Docs [Read the Docs][rtd] offers free documentation hosting. You can import your docs using the Git version control system. Read the Docs supports MkDocs out-of-the-box. Follow the [instructions] on their site to arrange the files in your repository properly, create an account and point it at your publicly hosted repository. If properly configured, your documentation will update each time you push commits to your public repository. [rtd]: https://readthedocs.org/ [instructions]: https://docs.readthedocs.io/en/stable/intro/getting-started-with-mkdocs.html ## Other Providers Any hosting provider which can serve static files can be used to serve documentation generated by MkDocs. While it would be impossible to document how to upload the docs to every hosting provider out there, the following guidelines should provide some general assistance. When you build your site (using the `mkdocs build` command), all of the files are written to the directory assigned to the [site_dir] configuration option (defaults to `"site"`) in your `mkdocs.yaml` config file. Generally, you will simply need to copy the contents of that directory to the root directory of your hosting provider's server. Depending on your hosting provider's setup, you may need to use a graphical or command line [ftp], [ssh] or [scp] client to transfer the files. For example, a typical set of commands from the command line might look something like this: ```sh mkdocs build scp -r ./site user@host:/path/to/server/root ``` Of course, you will need to replace `user` with the username you have with your hosting provider and `host` with the appropriate domain name. Additionally, you will need to adjust the `/path/to/server/root` to match the configuration of your hosts' file system. [ftp]: https://en.wikipedia.org/wiki/File_Transfer_Protocol [ssh]: https://en.wikipedia.org/wiki/Secure_Shell [scp]: https://en.wikipedia.org/wiki/Secure_copy See your host's documentation for specifics. You will likely want to search their documentation for "ftp" or "uploading site". ## Local Files Rather than hosting your documentation on a server, you may instead distribute the files directly, which can then be viewed in a browser using the `file://` scheme. Note that, due to the security settings of all modern browsers, some things will not work the same and some features may not work at all. In fact, a few settings will need to be customized in very specific ways. - [site_url]: The `site_url` must be set to an empty string, which instructs MkDocs to build your site so that it will work with the `file://` scheme. ```yaml site_url: "" ``` - [use_directory_urls]: Set `use_directory_urls` to `false`. Otherwise, internal links between pages will not work properly. ```yaml use_directory_urls: false ``` - [search]: You will need to either disable the search plugin, or use a third-party search plugin which is specifically designed to work with the `file://` scheme. To disable all plugins, set the `plugins` setting to an empty list. ```yaml plugins: [] ``` If you have other plugins enabled, simply ensure that `search` is not included in the list. When writing your documentation, it is imperative that all internal links use relative URLs as [documented][internal links]. Remember, each reader of your documentation will be using a different device and the files will likely be in a different location on that device. If you expect your documentation to be viewed off-line, you may also need to be careful about which themes you choose. Many themes make use of CDNs for various support files, which require a live Internet connection. You will need to choose a theme which includes all support files directly in the theme. When you build your site (using the `mkdocs build` command), all of the files are written to the directory assigned to the [site_dir] configuration option (defaults to `"site"`) in your `mkdocs.yaml` config file. Generally, you will simply need to copy the contents of that directory and distribute it to your readers. Alternatively, you may choose to use a third party tool to convert the HTML files to some other documentation format. ## 404 Pages When MkDocs builds the documentation it will include a 404.html file in the [build directory][site_dir]. This file will be automatically used when deploying to [GitHub](#github-pages) but only on a custom domain. Other web servers may be configured to use it but the feature won't always be available. See the documentation for your server of choice for more information. [site_dir]: ./configuration.md#site_dir [site_url]: ./configuration.md#site_url [use_directory_urls]: ./configuration.md#use_directory_urls [search]: ./configuration.md#search [internal links]: ./writing-your-docs.md#internal-links mkdocs-1.6.1/docs/user-guide/choosing-your-theme.md0000664000175000017500000002075014664334534022131 0ustar carstencarsten# Choosing your Theme Selecting and configuring a theme. --- MkDocs includes two built-in themes ([mkdocs](#mkdocs) and [readthedocs](#readthedocs)), as documented below. However, many [third party themes] are available to choose from as well. To choose a theme, set the [theme] configuration option in your `mkdocs.yml` config file. ```yaml theme: name: readthedocs ``` ## mkdocs The default theme, which was built as a custom [Bootstrap] theme, supports almost every feature of MkDocs. In addition to the default [theme configuration options][theme], the `mkdocs` theme supports the following options: * **`color_mode`**: Set the default color mode for the theme to one of `light`, `dark`, or `auto`. The `auto` mode will switch to `light` or `dark` based on the system configuration of the user's device. Default: `light`. * **`user_color_mode_toggle`**: Enable a toggle menu in the navigation bar which allows users to select their preferred `color_mode` (light, dark, auto) from within the browser and save their preference for future page loads. The default selection of the toggle menu on first page load is the value set to `color_mode`. Default: `false`. ![color mode toggle menu](../img/color_mode_toggle_menu.png) * **`nav_style`**: Adjust the visual style of the top navigation bar. Set to one of `primary`, `dark` or `light`. Default: `primary`. This option is independent of the `color_mode` option and must be defined separately. * **`highlightjs`**: Enables highlighting of source code in code blocks using the [highlight.js] JavaScript library. Default: `True`. * **`hljs_style`**: The highlight.js library provides many different [styles] (color variations) for highlighting source code in code blocks. Set this to the name of the desired style when in `light` mode. Default: `github`. * **`hljs_style_dark`**: Set this to the name of the desired highlight.js style when in `dark` mode. Default: `github_dark`. * **`hljs_languages`**: By default, highlight.js only supports 23 common languages. List additional languages here to include support for them. ```yaml theme: name: mkdocs highlightjs: true hljs_languages: - yaml - rust ``` * **`analytics`**: Defines configuration options for an analytics service. Currently, only Google Analytics v4 is supported via the `gtag` option. * **`gtag`**: To enable Google Analytics, set to a Google Analytics v4 tracking ID, which uses the `G-` format. See Google's documentation to [Set up Analytics for a website and/or app (GA4)][setup-GA4] or to [Upgrade to a Google Analytics 4 property][upgrade-GA4]. ```yaml theme: name: mkdocs analytics: gtag: G-ABC123 ``` When set to the default (`null`) Google Analytics is disabled for the site. * **`shortcuts`**: Defines keyboard shortcut keys. ```yaml theme: name: mkdocs shortcuts: help: 191 # ? next: 78 # n previous: 80 # p search: 83 # s ``` All values must be numeric key codes. It is best to use keys that are available on all keyboards. You may use to determine the key code for a given key. * **`help`**: Display a help modal that lists the keyboard shortcuts. Default: `191` (?) * **`next`**: Navigate to the "next" page. Default: `78` (n) * **`previous`**: Navigate to the "previous" page. Default: `80` (p) * **`search`**: Display the search modal. Default: `83` (s) * **`navigation_depth`**: The maximum depth of the navigation tree in the sidebar. Default: `2`. * **`locale`**{ #mkdocs-locale }: The locale (language/location) used to build the theme. If your locale is not yet supported, it will fall back to the default. The following locales are supported by this theme: * `en`: English (default) * (see the list of existing directories `mkdocs/themes/mkdocs/locales/*/`) See the guide on [localizing your theme] for more information. ## readthedocs A clone of the default theme used by the [Read the Docs] service, which offers the same restricted feature set as its parent theme. Like its parent theme, only two levels of navigation are supported. ![ReadTheDocs](../img/readthedocs.png) In addition to the default [theme configuration options][theme], the `readthedocs` theme supports the following options: * **`highlightjs`**: Enables highlighting of source code in code blocks using the [highlight.js] JavaScript library. Default: `True`. * **`hljs_languages`**: By default, highlight.js only supports 23 common languages. List additional languages here to include support for them. ```yaml theme: name: readthedocs highlightjs: true hljs_languages: - yaml - rust ``` * **`analytics`**: Defines configuration options for an analytics service. * **`gtag`**: To enable Google Analytics, set to a Google Analytics v4 tracking ID, which uses the `G-` format. See Google's documentation to [Set up Analytics for a website and/or app (GA4)][setup-GA4] or to [Upgrade to a Google Analytics 4 property][upgrade-GA4]. ```yaml theme: name: readthedocs analytics: gtag: G-ABC123 ``` When set to the default (`null`) Google Analytics is disabled for the * **`anonymize_ip`**: To enable anonymous IP address for Google Analytics, set this to `True`. Default: `False`. * **`include_homepage_in_sidebar`**: Lists the homepage in the sidebar menu. As MkDocs requires that the homepage be listed in the `nav` configuration option, this setting allows the homepage to be included or excluded from the sidebar. Note that the site name/logo always links to the homepage. Default: `True`. * **`prev_next_buttons_location`**: One of `bottom`, `top`, `both` , or `none`. Displays the “Next” and “Previous” buttons accordingly. Default: `bottom`. * **`navigation_depth`**: The maximum depth of the navigation tree in the sidebar. Default: `4`. * **`collapse_navigation`**: Only include the page section headers in the sidebar for the current page. Default: `True`. * **`titles_only`**: Only include page titles in the sidebar, excluding all section headers for all pages. Default: `False`. * **`sticky_navigation`**: If True, causes the sidebar to scroll with the main page content as you scroll the page. Default: `True`. * **`locale`**{ #readthedocs-locale }: The locale (language/location) used to build the theme. If your locale is not yet supported, it will fall back to the default. The following locales are supported by this theme: * `en`: English (default) * (see the list of existing directories `mkdocs/themes/readthedocs/locales/*/`) See the guide on [localizing your theme] for more information. * **`logo`**: To set a logo on your project instead of the plain text `site_name`, set this variable to be the location of your image. Default: `null`. ## Third Party Themes A list of third party themes can be found at the [community wiki] page and [the ranked catalog][catalog]. If you have created your own, please add them there. WARNING: Installing an MkDocs theme means installing a Python package and executing any code that the author has put in there. So, exercise the usual caution; there's no attempt at sandboxing. [third party themes]: #third-party-themes [theme]: configuration.md#theme [Bootstrap]: https://getbootstrap.com/ [highlight.js]: https://highlightjs.org/ [styles]: https://highlightjs.org/static/demo/ [setup-GA4]: https://support.google.com/analytics/answer/9304153?hl=en&ref_topic=9303319 [upgrade-GA4]: https://support.google.com/analytics/answer/9744165?hl=en&ref_topic=9303319 [Read the Docs]: https://readthedocs.org/ [community wiki]: https://github.com/mkdocs/mkdocs/wiki/MkDocs-Themes [catalog]: https://github.com/mkdocs/catalog#-theming [localizing your theme]: localizing-your-theme.md mkdocs-1.6.1/docs/CNAME0000664000175000017500000000001714664334534014371 0ustar carstencarstenwww.mkdocs.org mkdocs-1.6.1/docs/img/0000775000175000017500000000000014664334534014401 5ustar carstencarstenmkdocs-1.6.1/docs/img/win-py-install.png0000664000175000017500000010010414664334534017772 0ustar carstencarstenPNG  IHDRP IDATx]&pSX!` 6^nm^V?7޼[k{ƞw۫m^?v R%U79޺u+ ﲸuɷwOGS0,˲s,dҙT*Juvt~gޱͣgrϊo}[9iJR e2t:c1qV&4-ޑhfluu]w]ljXYD4,c94 gE.\7WȞ96A"gٲN0,+Ҥv M3R9:^wq՚ίuLty`(-:ҍaoaM7ÙEc`EkbY'ud2N{UwͱS}⵻^yKJ;7-FېV۟k'8yV}sӗ뭩-7_6b?zZϤU'E;k"U4^^}JN{C\hMƽo%O^] Ü6v5;w% :~\7-547Wpa5,esأ,'4 |$bjA@!^ݔ*fT hMH$PwPa3h0EeDp K]tL#f ņ@ɳ/AOy-2j&&oau<[g:F|.DB>2y<Ħty㣤]ͩ{e2xbMa]/bK~Nu_ݒykԱ]5/pيj݂eKG?v<4ۉ3)XcVu1NyXċ\Tnaܻ5ǻoOYjת5}K?u q7l/LHh! _ZrMbO 4upGl&XY"|kYQ"AGM ^s% jr lS-S|+pPSt!n+-DO0]^(y+)o4PC9/<<[uxs-Ζ ?sT^71|O=NnoSxumjSmfswg9&pQomn~IGc_C/|B/) Fe'BR(D[]7B /a1M ؉@+4֠6X oKً̅sgBay{@Cd5m:_H@f$mB{NN|:.aZ!>`girC&:QǚnEܭ,ϬVRsxU؃+Lܻ~˖ ֫Wy0R;G-\q6 `sQmG^G' ݷgèHq_KģyQF[ ,% ^(ůg I82`VfER+WPOArY+E8(W YS1{bOz >~Q^j&m9+O.&d?o߾#G/j=~q/gI5ޕ.y^ꗛ,ĔÏ0a\1xk[Hqb¿WMnĵ8M˅[yx'+yNJ>X 'qLqMIQ>CLC]{ߦ'.ku- _C{Vէù\6K^ Mz{;۹`;9 ҆ɷQA6Țh>:嗎v4!* jx'NG,D_!{`84iXnrӦ''_EuMd K5RI06/N5-3JLbU)c< R|C12ǮU[t%ug]ƒs,n9[h1.K,o u 'NM+L2l8s`ap|J06 pV/ ]5(+ 6 <:#AueeS $M|^dqx2 >5'rD^ 8P֋EWpab)(~~3qAV$ Px4OV wz14\.(,/+ G8N%$suAm(l6) DE0v.<Ϟp#jJ6TqN R<+ X >vbd8v}-9 :(k@yN/Fqr~Z70TG,j##qg5_/`ۍ"eq.Bˉ]Ӱ{o=`N}bU1sq찯g5C*4h"-D,QdQIVN u#uN&v^Wt![4᨝vܜlӱt'A5"+9gx!O*ub[ΠaRK g7.WVICLhz(@TԼd5,"K4˘br^Rc"ysa0ٚjnw+˵zGvVfiVʵknrZtN#I l=f;l<:}]7qnMU%}!K|95|Į Z(6}-OuP{ N1|ϣ-Fx+ꉞ|5=p}y I4VMjþHv,o5@Dlے:uY(9W^!8,@^Q8-V|IXzY` zuUppQXrf 'MtKl );'{zs.u߹~-Kps@0wݽM>Eu#z"'?⃸SO }CXc-F$\4OYe'u{}Pΐ (0+ʃw6|!pXD5|,uO>_6/G!kj>FI!²i<@pJZ[n)wB=i8Dmj}BHϚIP"t$@`"[ P<@f_ B^ d$V9.[(>(?珐7"@:+C~Ь bTuivi-sFNkuT4#P#,S )WJ~QL7" ?܍Vʒ?_ܯ O7lhL%v %t;c`Imw==Ƿ<9MX&`J\&â|ij47`uםA6Ƙ(x| [P3()P+:ߠVQwE޺9]tN^DpKr0ӘȢ-(cϴ2MCWo@#/Ot%Z (Ԃ@k'5AJ9Ke[;',P!=(%))xV*Yq_6b<zcI2ط0?;F)\^Ǘ.Ur @!l>_CNNآ֌ W6ΤW|Ż3ovη?<Fl{M¹s`Q"Pjkܪ={+ߒ?V [eM!y d#pg20B׊^ 8kJ 6Ƞ@Y} \?-2>Ҝ^ )3\kTEM:U`FtPmzOgYR ًp#mT^wiJ{EkTx bq *9OiJb YZ0J [-ͤ9] q?V`sbraWBld Ĕ@Iirrsڽۅ{5"DhQ7jxYnKP<1bz0pW8hX5逤@C`N#>+ l2*K( C>\", 2vFzp< cܕ@DVlDdR3(:F$ P7\5PkNPBG cۑ좲0FTEëxkZ2 O dfyϞH$}+*1J0CN,!pt*!eP(-`o+ Wԅ%XAnFPXil-P C@|[̂B$ F]AnE W;V!7j 7z"Ǩ$QȆl8qlOOoyykY@l,*/x.oP :濅D,d.H, u3ËFKd20E:ԽDXj"*i+)Wa!u pӺs\a!լeƸ\Z+EԗϊxPDK!# VTT`#^)V3ғ0A?]"U2W:$7'!M4*1,Qȕ3H:[osȶA8eOԌT?6}HUZ  ۇN! M(ͅ`5#.ً.NQFHڄ熮b+g+7Y;dp(P*,@^БlC*P4+@E2T,L.~+l+(]1μ8sCZY$<0v?, G .Oe[V/x`kv{4. (ŧ j"MG@(p,yS/:jjZcp\8;BJ +º nRE l ()i%@nH%)Xd-av9Dƹy!%ë4#f6g>%luу -t -ۊ:č3qK^uWqq9zT[x*,{p8qdz sH̀FBX]Sa%D`]rKWlK X,z`0*_0AZl-2}J >h_ k jvn-Ħ@Ӎkn55](bf]D |#r"!K9tyi.dRN[]񕼍O6(pvH`#Jǥ*ZM,eo@.HET T1’L6+!SS]hS$k0;<( #nWb/:@mh (>ZYWGY83R0XBX&ZG^i& 3O6Hq&@ISuFcJX,M܂Xh(JF<Ne9jFs=̠rHsScs)lř8=­hoIM|fEZnʲL#J2DPd (oA %yS8&x b1DG8.X-f& ĢdDRӢAos7)zs(dBZ+g9bsvA|ʭᠬ^|op:0k*JGńKQ_hYӋg=6$~ ,7k8q;j-Gpҡs@JxHP bcQ$eIyEijjfgK:? %\b%"QadoR9>7jpo )M_īQ)k0I|eTDrŕt,8 h.{"@XW$脧b3ĺRuXOņ p\8 }FN@'T΀E4HJgjEꈊ - LH,"U_DJ3oNL-{0ZV`ݨwp:l!rE,|4[E@$HȐǭA}E4哰^3xy ` gO -VSe<:5莕&FB=P`J.K2抻0l+}bwn#= l 6N6=$c!.0kb!%Y%uJJU\KpEV`B*6ḐqVfnK#k.,6v@K\ޡ!& LE,qzx+vE5bX`0Katj\ZK ,DT4˱a?K5N7a :Nb`%j r@6Zqղ,yX7h ɂp" w V߄ H>mӓl4!du_ޛ04ak T1ފms~M~qQyQ+ +5…TBmFHvugu 5JjjP(uk f" 2ݠZ.U6d g'54 -PSM@!JLr`Sz$E^,dsϢҋ#ZdZzb YQ_$S,\ 3REl*d᭛?jYb F!Yi$#M5h YD4lUQY97Z`Kq]E05R˹6䗠{<{_qH6qvP dș)t),M0JA@%G@ Đ+GIX+++`]4,ᒯg)DICQUM Ul@Fj#*@i"DZ6YbcqzrR )7q.UZ(RfSi ǞEtqz9fr04Im6MV^r&85&2A` eLˆ`p8;.[Si %"f@$yr݂=@A+JO%؁FVx )H*D0쯈P7b+l2c`ew4]mw“wj_3M 7%&2V60'^83\hҺsl8fj̊TPSj 0벬p b+hz:-5+(m8iƦ L=DXbˠ87m^:(0a J4:ʆYtE2+ѬE6$gg'F J [N̲T=#(f cZl lq)u3< i0zB\>sFx뭷^{ٳg3YŽҀZ lHƸ F^.W ty> A6qvxT'ɠi8En "Me (5IfB"(İǒ")E[mBVN\6W w[QT+ W_uDj "TtGn+x,Hx.zX. G8$J%< `Ԗġ \YU^)|nN֠Q /t V#ݷ": B%2j{m 6Y(YacUiȈ&)-[PpJ[娄td2԰jbHxn8|.O8gIS@_;CЕFa1acuu]IͳX& C$F7š&$29uP6krjPf6M$"uF+tK g!0׿3(ɝw!#!Ύa\;t쬔s!4;u^ucs$sR9/B+-i%.Z Dz ?` δae[S l Β-*Tj#N&sѮX}$m4siXlp\8?(%1XDr+5 K 4]O19+%_5WjS٩#m%%!p ɒ#1XRr!ZQIh ,&z"u9Pm^ºRV@3tcN ..@XZ40^$Am؍pg_1<D:4V4RP _2T ؉cɡbK.M`4J(] CSZwHE;1L644ס̙3=Z[ HCcC.FɟԄs(Jq8j!ŢS:& ΋*d>e}gsmg2pEU咕+B (qȥfϸ &d(y T;; -"Bbm۶xHA,omEu˖-M^T>ŭg:̻ᄃGdZb̙g[Efǎ#GC5뮾nԘeGlə+l2ڙ.{(._峖V9W$(n5zGL&x`;f\N.G8.xv2@m(+U$%dr7im=5~M7IYキZ/2XOzk4Fl.83ۺ,a تKlŰˆgϹG[n֢7 P={=q민򇍷߶pQF&=/VC_47su`{7of&4;{#u'vܻ.[5)"бlkIgׄvGǢTnͭi KK.p:tk?>w\B=9sϢY__e󛛹sq||>AK]V>cXK.,RC2K͠}6/Z'xo][pQӢEd667"^k;7H5qr`HEO G8fgyziT=W.˲U܈Jl%h0@4P^tCHM6XY@]x -}֬U% В -c]1+(ƻeeښ*vcLzbeѓ+T!g ,…kg@WwRuE[15S$޹kwRlj#Ϙ@AI.mNx"q"M-b ͸dLX+n h QNJ:/_ @mm {8-y[[u!"c&٪"C?r=FF·/N˯ȤvZ3=ye*E OkO8Iߛ~0WC^4Yt|E@recǏBj ں:Ĺ}fV W#V-/jWWWBP7@ iFZ[O:uD)!:K|AxqH oo}k*=Uv=r8y7\=mqVG8.V`Ze.U`@V w+V^ H| ț!-<ırʣGg/lZt) H~?׭?yYͳQ zw=ЊommFi@(0dw˝Hb%/qvırӁFСIp s}]yh:rSO[M+|S|`dwq oZgδ VT-]8gpe!GG/ɟ7oK Etg"Q4*FL~8z؆ipc|@ :p7:i. %=E[g!AtaH/.@(,RSyCaw m?K/_|hha@e ɱ;"a3O`ƒý))Ε0pSda++8 iuuX6+/gi(Ovr] u ,h7ζdkkwuM-mNdX3x5NW<#;904 YqV\VD@ +P2+(.'@I ɕ! &YCCi cpL"-2atl0RQ+v^b+k/Ŕ_^ Sq$R {55 ۭF^4fOnQc˖-vrdz:L/͸'mb]2]t/ű( s=jQ$4|ԩ& dB6BkQElJ@kl>7f"ed۷gl?{+Wq-"7to6d,H>059tŢXBnu`p& ,TL;"tA)}O73Ҙ\y"QF[. `ʏiFt.P%V.),gVUU %řs2TsZ^&}Vضy>Debf"ñNz~p^FxW>PvAР;eQm,Ҍ1 !@OENgY2*9Ht/"&2%z(i.;meW^zȕ~z/g>4xQ{pvEwhv7ޝ]]c=J ,ĸj*ˁ![v7k3-[3HUv ;oՎ[*G^WOMtbI8Bre-J i&!G UyIGB1ºjO3wȈ1jo \s7^kQ/IcSwMzpW6}}Bҭ}cR?#b zɖ%; Kjۅv/|3 : $!V7ou, N?l2&6nP~[ ~(aDi"e5TWKҴ9:mZTC@Ӵ׎8@ώ%αbv*d-0#-6}3)N,Cw)v16[}*0HݵF b x "<5vDym.q ĽX1 A6PqfG'>u\@w8*8% |x}αȏxHǮ_mX xLObۖ:CpƇe1Tw@:ޖK8JÎ`Q7?;3b &z-v|0oXr#X:{/Tw5:^cGp@ ~ֲ vs>Q<^w H )3@"*%=QUרceՑ"uPP#YC?b#KbfBygEʹ$e`k-MFtlb1?q dw֨cʈdNk|9xN$KjKQ ʘU #IGjSv ǛF]kͧFƽ|v]Eɝ]XdFk,g-PeB~E%0RrGd;/{B4@Ky2R (nATȡ>Wx\QNU}eHQ)q>hNQJ4bgА,Ubf*՗ܛ(ovzd)o;EDf2^T}^Oa"2gl1h7lq& ^25xfzנϠb>Ez. A5?nHIGm%Łxģ&KPσ։9ASۀQzwfk)LZ0?FS'_>U)hK*D{>B38숱lղS'wu n/kWƢO) u.^P ix%gAcO([$? iIu,֩bMasƒ dCJ(1fg9pj?5W-ZpΜ U(/#'ȧSk>C )Sw˦WԦ' ^%eo8-j֜d{"CIQ6[><;3ʵ&p-%?cݹcFϓ'qQ{P|ɼB( N2`_[:ZzᙷwuS`?<[ua ܐ{_7Zmw_~,2H=͋.YGf|vsεK`u-|T*1ϸDP@4+Jmktb BJ"T@$JVV41 Tg M~8QQYqhgc҃ShS9]hM<"W7~޶VnhfU9*?}2+qIZ圣DHH"E Q\ġEr1+Ji a9u-e׈0f x۠Ƌe!cEף% ?Bl Cz0L5iEJ"bZ QKUuR}P'rf I %vDA5 d?CpY!]l+2iXhPUCM.Vͺ!,b8i_sq>jV_~oWV6Y,p*nЍD4RiQ[!8yB sj#Q4RN -PsG ȱQUD{:*#Ӎ̗;v3gΕW\!N Ge[xZ`nі$˱6zYn]DocJЕ"2Qb-=:ʖf#}"Bk3e~_׿n=}-#t8N "D+AVGQ)DL|+QɺX8Tyg;6UR Ў[Щ4U/D2-q*Awunb=]z¦L@ww߹Ko?xxAjpZkX3sL-JnV)u4(Vs|#lU뻌` ):t h \V.Il&\A˅bք#hyѳD3Owtv:}Ն l6ט4|70hPi%),2D\DYa k`Qep- lDX^׀sc7 &ڏY ,HA_i_Z8qF^nJ,Ro(bMd͠MwXb j UK4C'FUZę;]X1o4E/*E 79%`sI0 C7ų%g566}='O;wNugG,rK[\FbL!-"*ԯ]%P 09)ҠuB8-ju!m8X%;cjL@r2a0 G87ЦNgxᲥʇ5Վv)+p Dh܃j4Rp4N`V"y"l]f8bֳ̉I pcpvrSDY$F5[[97ڬ[="IUx…Ɔ="A%cJ1X^c[RFgBo+QL#98AӄAIZ,h!4t7h-i:YZ r VCX4F].uYA*In [s,G8J4=8tie/'`-l^!\MMM%y%o آJpE1@vJ3;/q1ցwmm )emܠ>-oH1JM`*\)CT¦3T\: R*$t 'S哈eeZh֘ mrMqUP!k3̈́PNbi)PE,=Ҥ|VY DµyE6 g,wZ^eY/q[!x̙ZVAɞm^?yW\q׺+mp`gb~3>~5M @ѣlm=588@t˪o.ؑJFяw^2:7_:AP3j;.+ٍSj 5{q]y=@@w|xu0Arip+/h];˻,~d'Ozۺ6ԘfmذzD>|UǕ@cS$<3xDyy$|tE;+˵䗴ԩm`o W$_9V.= `NMϤSؾLi;lk𼨭-BZ24|E!W&GXPe0͌3RL1.SgPW7w-n_jtďoL|Hu(z!DGuEaoł}饗gt==HZzܹeCp=- ?Hy!cυB DJ DC ~zaOHaоoWڌi!lcɲk,ko{ p!9jAw5 Ar@< 50ow#\>848zFȰi~j0.[1^P|¹qɿ %/M | ̞3v\kr,noohGlP;2F5R\ulvttXdj`h;u MR}}ɽZڲ%Z{GWǙ.Z6t:vRۻZE8wi57ωVr+4֗>˯L/M`<+qj$ _r!tE0JD~ c5ax:e8b qF,GȄ(~E@YG؆la .65AɁ3ojjLWwTc]CskojI0[dNM r ]{o31+Dٶѭ76B?dxb,慁}FK.yh+(LW@ UKaYyq>܇1oUh Ϊ7_rǫk-[*Tqy)7lذvZ`JZHر(xB l0SEcl( iuXєR07cF:,$-[X'u4 {:zj.]tٌ˵NV%Z{?׃lko UՌ+fّ_.(< e(HLB+%@vkh0+RzLA֮(&Ǻ\[fHjg2ޘ3O_8:f7yF* ޲Tj8Zm7IW}ȰXhTjA}z}p)g0m-0~Y^q &AJkyY ,gN7ZWWri(c[g,o{ @fS8_/k24Gq,ōٹ ty~]jɒfl4`q\_WGgOOߒų3@+Xկ|ry[NmOċmA#,n\ sp +uqt!Jɚ\>frCCiDD9Ue-`t[A9d4@9#*\YƸsJM!YE NnOLGsLoS}-ǧ 7ңq{- '1}q8#JyݸY݇o{8>xU vh{Kу'Nڒf Zj%i{[[O`޼y4guLջ0"4dxgx(ry~zPuźH>ҖL 䳛Xu}'pu-{'qpͬg~ǎjCV86"[9(.[šH8[k RI$7a1)r)Q{&qsIV1p|R Tl\zO^,P>lL)-gh0Jk'} ϝn}Ny,aU gu>p|]cX@HL~?>O#,A]-@ᄏ=g}<+a wHA|@Y耒3EtC`V/yn 2Z}<6ͪOVYmf5VTδW dˮ\v篽5i?zKx6 %\Qk@Os2JjM9EhHJh gPm kR,@w%aR}bxʟ1^L-Z&^Ǻ5[$ꙑ5(WvyN|Ƽ0oRd^ohhG +W!9#@>K/]`VM%K ۷7؊AQ+!a p5G9ݰV+0[ɓ'{qsvcUu]CrpNv=9uG7GMM u}~{u8K2a29=_fNw3AeHHMF_"1FʥЅYSEfQ D[!&"&RRw dMtLrCͿ[~cc19_agZJQ[3.xbE'P|ƿRۍ/v ƯuL˖.E\ى60DW~5]s{etNץ.gcǎvuuIꫮn?=sؑ'V̍ç?ẫ"HYٗ>lbтyՊik~iȭ^\YTeB )u啉 feGhlWQ2ũ-i9gܠ`(Sl"VWV$č 2|3&AA9/'2Բ,DpL+jpV uYqiw|}/]z{,7e(ŗ\ѝ@ A"`IIâwv%s!\eу\OwK/$/ZFUQҵvm=m4ryY<FeOP["^qk/zrWVuTSP.`nb˯ǤAĨ7&bk{͙uESnۃ^[nZr펦[ n8uÌL:Q'j"![\ʸ@TUjQDL:K&R r9,ª~J}ہVd֩!̆cxYDhm[Vڳ{Ooo… JKWUݷ&^&*L)ijH%E&W]>[9|g5i9t/6lo),b5ps8=~Ksfbή֎lҮ哗}K\Iޝ+9泹yNe]C"TY`$QeZ ? }:ugz dOo/]nS礭HH@CZ.3s7#"+jQFD-Ϟ=P Ty/*Qo;޼zIGs7~ׯAYx}uÏvtt XwW +ys͑)+\_?[me+[9g$) VuAM i:{ʕJ!Vڿǥ/a=uYkTX2jAڑCw1>o uӱ ,@8R.ܚg{gȮlc7>__.bg bk6X0z [ۆ=)\;,VG6sx4G!lE>(6:@-rشa;Z{ É94eIg\nhw]ީy^[3Q_ٵ`leY/E?J QOj87XxKc3n9'Y>^%C\1)3U}%RM_ԝPw ٿ)TwP04iL~Oq`|n YE އ|##kpws|W[8) "ķY$#b=aX9j,p+/+v6VqVQpF*CƔ!I[EN-=eY[7g@}l-> ;Z @d97d$U^ه@J_P#Vr ĽiZ`UK̷}v5MuGXUh c͋Έ~;5x!>HP;SZm#Fz7~O/2{c׆4c5:q ;>$v~W Cb_bBF7 IBw)]f$Qp[tw"'q {A-6;3J¹O?^߹W^ k,W:ZA]M>fy:(&AX!HHJGĘS`V!d@uJD郢& u\k J§704OdH Qe<{F˨<Ԛ2QX҃O<eM]tD]ҫE/c&46#ϴqt{EC=O𸟩Vt\]\gpӁ7?w?BxMr;$X{8M~i*I8v5r1}qOiTv(YsHӟtH# .k!JibjvUg~Z!Oĥ^3n9?gQR+4I\IR]}`JE*OAJ6đRTR_(~sA9GٝGٛo}cϾ́'Pª?"kt }4,&\U=A^t{uk #"`;9{4C8.y'rCI>.)/aGI KXdDh索s)ZG8C(,-~GiО eH|clv\+qڭ[cm%XzYw릠Eޠ+&ր$x reł4ϪnL+uS_Yge~.h1KkWC9eEoϿ3 W`k<#7@65T;;csl6S a$GcYLh#js <;d]K:EV^Iy-i֘"̰+^Y2Ԭ0JNa/VWgi|]G3Ѓn1bD{6CRl9~PmJ}JA  p}8 m@N5J5iPph!j >.63874lgO 0\{|VtsO }`Offς97|C~ ɾJFf9km೅>[FvN ZXvUD7X'Y&t5[jkj-q63䀠B# jיdhjc[ lZh)UV+u|.'8(thsT}<>|k{v;^i snF `[G>kmjfu|iza|6sѐ'0hkqV A.eݠ%X$|6=CU$,\ ;2=y}:`{YH8{>鐝7 ?Ou!Ā,ډjBta) Bh=j⬩Z8[r0b gή%B;v#IIpVXs$%DgQ8hP..E ىҪV,V5,xQ쎻P]Jatb>; gwmg'Uy`}ַ7m$*U]W>p'م ti?X8FXOR7c,TðnQȠ4F8J6p6B<2=(ت,gjEuyiLv:ݛ. N32Ι%2[lspps4kӀҔ,.ptC`;T8{ɺtl(/K64ϖ'$$'Tp΢a G9䳒[ϢRf"u2EHLS|,`+w_ s!RI'2rKoPF($7϶B'dss5{Z54@;8/u`L9LӮKYTJQhh'i6ˮߏqWJΨ  $E@XepH@Ig;Uy9kVYxh]pY;Ыe+%+p[e&.z"I=1ARf-OJB.TztɨLx@lЛ;QJT'%bl>_yNH~@<ov֙kޅQaL2Zp<#, fQNRVvًi'G)5q6529{d̶qVGͥk'j)2*٠IIgdp6Tź@p룑\W:y1i{k fgd՚{,DA~44yEKK'^%E4 lHBoQ`G=QP H'gr8N;.ٰ8>oi㬩x./ިzƲPCN*®JY5<53bgیa{٪L.H,C*d8#WXSR'f}oF8x*,ʃSȃml%`qe CDRu[VZdH',w![̣SY}ugc(b!LÁ,dEz)D$@agD,=qqnvgJ_ šO~ºO霶*pvE?l[n&^e">#dT4a{T:Ven8{$$y^:y?&^{u"v8K'~K?-طC=g۸2;"Š ɷ c=g ~A-|gѰx?J8 *O/2WfX?nBIENDB`mkdocs-1.6.1/docs/img/initial-layout.png0000664000175000017500000001720514664334534020060 0ustar carstencarstenPNG  IHDRZi|LIDATx] TTG;g͙7orI2ef,ɘ[,(./A(**&(,;" 4BuC\Eg[nK__Uu6C &ܯj41'T,ABL,8_ /@9bQ +w=x?ȲQ\v9W:ݛkqO@Œq2{B\cӢRdxIT*eCTHqi݋d^/d:2~R3)9L!,.WTg_YD~1Xwt!S*x ɗmRgf9+Wlrz}<>0 V\$ K*I=,%۵Jaŭw:_vH~KȪP64Sܶ;{ y>*ˎHёLПGtrV tZ ߃`lMe"53HJ=+/d;3bI̡m&Bl(0p9btA0~!Gk+IDF۾[L siLdqdË/{ATV [6[ ~!IVOARDƶU,L='5KrpeF`m;DŒW;>J֤qE~{[3W^T-uΛo 'AŎ[9<ډ?a}I6̎m0  |9JoodNa?zNݽX&d~bSӛi|7Mc4?&+FC$ Ü{YVq55w+vvihY`.3a]tS[D9S|9P[mVz&ToCYyzLm>94 >Fm3k#ϛb/Ekdn"dTlSWkSr0~ ??ogs6{ .Ơ@ ܚC~HȀYw}vsssܲeKJJʒ%Ks0z mg4;튫C;LB1AO{y-_Zؘ_r6ѦĦDNzoG A|Жrי~z cwfꃖ@ ń3ffhfP3o=I7xO[,FUti7\z 3:Rԅ>r02ӻ;M[.[ Èr$k-}Bi^0ot٪"9̞( Г'\vθH7G%?BNх4"9La'K+p7ת,QS C93s=,m)݅V9K)bJxݣ9P~$.B9iiilprIaD9/{KޞD#cxԃ(f^h?Fՙm6xhž:s Jy,D1X@AGH h.!}}5Wj.ԴTxѣG7nD Fl9m-3?޿7`:Lw("7p]:<͸fG`ߠ1 qiN\Xa#z-eQQdPwIeb6mM׏qAzo,y7AE/c PF UVVVH @^/~E@ovnR]Jt3CRV&x#&|g5REm۲Wh^;7T ;uqkH [Cr^I_.wc=5E99%e-g<3ZPƟ| O~9I<נ$@!=ma,ul[UJfB}89t7EmtS(X ZLlǮϩQJl LOsSt?j HR30@rlGgaCiK=ieϼBN;W6;'ܻwI2T1߮mI>4~O]AlNjO=´(vi.^M4.y(܁$ Fmhx 3$wp1r# x)7r@H%ol|(k7`="gZr𰴼Q=TF)mnm=[igcU]f+I*sƍ+Wsʞ,  IṯY0Y{ 13K!@L>tkn@9@ WZ:H$rD"QH$|Fr{6G8|[nkLV`k!7v.Zr:nRHWJ%Г',M ^k1(1XXAV$z?KZp muϫM)򖎡8Lq6^?C1}HQ=>b}ȏ[y6w#]'ME̙' au.4=%=-%JTG?E7ݾvIv=r`YjCr AIhx9-{te=|5DEʫ TdV_Ψ ow Qʅe'vyyκuht7}c\Bho Nd(q2J"^ԆdRɁMVvIjLY`9&EɾZ]t_n=cOa^k_cYmRiܵkм,sksY5W2. !Ϩ!IqBjj=zz ѹ9Jc;;mKmV)no6U+f˹3fqB9쳃Gz>kA90&1;}y8Yx|8{Rϼ + _ +y` ̪ _2A|ӫ.WDGjłR-cηLEcj/pUGT"WY}{Zemvr`o 隼$LYvҙ?T)_`F";x5`cMKOݥq"<)1Wŗ o&Pf{]?5&+Q7;?0 eT4V1F)৘r"ַ<Yt(>Vaet:'V9*R$[?#h/:w$V g5l'-f\j)@P)@>08r2Ɂֻl]9ξ\`|9&K?+@Y0r_*qS[oYV=a@x /Y3|9 Onyq.-=~1iw\Cx_SfSP o9 3V"vɼ~(jZ{/GkQt9`ga$?@cx$ F=o0IB  N;3f}=uC<^F7iPw|¹Ǹ5|*DC~*FnqnV'wo`X|>,@1ZPKFIXƹ/wV6`# )JRXS0.@BQ'JGʤMZIV4356cAf*:IctIu%҇ ~ლJqRQrQQD/*)_VXD$FsD"o4"H$rD"QHs%ny?@ PD9Y>q@L:9^PBi+Bo_=-Yh_p\yjq) w+6񙔔I#^]_L^" H-M8L/lկîBKn)Uǩ77LNN4Fh;>D."?#2Ǔ[r0koLX#`4x;͍n>S\Y5Mr0Vr@L”.<9@83.S)C)`iii!׮ pc] Q9.d4J&؋< ]#`/4[<RYeݨ&˖])l =ĉnآ>+( \GHDc-![`.LhD1>Ρo/9h f/H6P@\]6ϛܫͨFT[{+=itC_ͲJisz˃bΒ|0.%[/g'*2Lߢڅ )D{6` 6B#ueAr|6NC?~qlޗw`H D.9SYeie؁7>kwFPǙz.Fօz>ęץ-G͠|g9vB|/(GcWw LUiG3E-jT ;شӎUtRg}m4C#]ϣiR0kO`,k5LOeG&ēoE[-ǁp C-ݒK6(v TB=k L=Nw|KǓޔ(7;7A^\ğ+R"lSǵ AZ,҆mDM5^ݞkjfjƍ+]t:$%ꌠTfS:W=~v}۷C. 6)$AɁ@ϩ֩zkr.3L:uq3l037硌6}u:9Z&nёf$>n OuJr˭' a@DWe`arx9H7AE/͆vTi?e3䀳"}%! ?d#UܰRi2XQS*3q.n$/YoȁkT%u3%! F%\WkәC83{tS5ĭ'an $rT`K > F4T˜&\Sa䙙1ZSF gc#ڕ^Xq9?3z$$d')&yY|=@2P>"9rxB_]P#N^SSPRyx29Sq˗j6Qw #4-Ӈi Mٟ#Jocx<)N%JF LF@2<D}ᐉ=ZRCqBaRDSav]]mpMik,>E ǖuCȷx\9ؖʼ;P%ĨϔW*ycCY;V*t?@6;O߂ PЈmS] Q5hxjˁ΄ϯ `ik͝Cehkd2E[3o tQdͺjog55_8bxÁw^קlC$Ȁ@L 9@ (@ q$ny$?D"QH$D9@"(H$D H$rD"QH$D9@"(H$D H$rD"QH$G2?>kwIENDB`mkdocs-1.6.1/docs/img/plugin-events.svg0000664000175000017500000011132414664334534017724 0ustar carstencarsten MkDocs cluster_on_startup on_startup cluster_build build cluster_on_config on_config cluster_on_pre_build on_pre_build cluster_on_files on_files cluster_on_nav on_nav cluster_populate_page populate_page cluster_on_pre_page on_pre_page cluster_on_page_read_source on_page_read_source cluster_on_page_markdown on_page_markdown cluster_on_page_content on_page_content cluster_on_env on_env cluster_populate_page_2 populate_page cluster_populate_page_3 populate_page cluster_build_page build_page cluster_on_page_context on_page_context cluster_on_post_page on_post_page cluster_build_page_2 build_page cluster_build_page_3 build_page cluster_on_post_build on_post_build cluster_on_serve on_serve cluster_on_shutdown on_shutdown on_startup command dirty load_config load_config on_config config on_pre_build config on_config:s->on_pre_build:n get_files get_files on_config:s->get_files on_files files config on_nav nav config files on_files:s->on_nav:n get_nav get_nav on_files:s->get_nav render_p render pages_point_a on_nav:s->pages_point_a get_context get_context on_nav:s->get_context load_config->on_config:n get_files->on_files:n get_nav->on_nav:n on_pre_page page config files on_page_read_source page config on_pre_page:s->on_page_read_source:n on_page_markdown markdown page config files on_page_read_source:s->on_page_markdown:n on_page_markdown:s->render_p on_page_content html page config files pages_point_b on_page_content:s->pages_point_b on_env env config files render_p->on_page_content:n pages_point_a->on_pre_page:n pages_point_a->render_p placeholder_cluster_populate_page_2 ... pages_point_a->placeholder_cluster_populate_page_2:n placeholder_cluster_populate_page_3 ... pages_point_a->placeholder_cluster_populate_page_3:n placeholder_cluster_populate_page_2:s->pages_point_b pages_point_b->on_env:n pages_point_c pages_point_b->pages_point_c placeholder_cluster_populate_page_3:s->pages_point_b on_env:s->get_context on_page_context context page config nav pages_point_c->on_page_context:n placeholder_cluster_build_page_2 ... pages_point_c->placeholder_cluster_build_page_2:n placeholder_cluster_build_page_3 ... pages_point_c->placeholder_cluster_build_page_3:n render render on_page_context:s->render on_post_page output page config write_file write_file on_post_page:s->write_file get_context->on_page_context:n render->on_post_page:n get_template get_template get_template->render on_post_build config on_serve server config on_shutdown mkdocs-1.6.1/docs/img/readthedocs.png0000664000175000017500000011250414664334534017377 0ustar carstencarstenPNG  IHDRUIsRGBPLTE׿жͽֻƴְȭ¶νǷ۷Ţϻۊׇ̞ɲm¯w~w{Gk`k_g\lbSiztTuzS~vcN|rMG6ussctM?Exek}rfXOaZ]jmZ>VUU=NkdITG:ADO=97N4#9].3D3001//-++1*!('(<%##"I,  .orIDATxko6EںXT\ Uulp5I7찊A!sQkPAm{2?.!?M1_fQO4x~+8@2 -mV[vPiۓWǐWdm+ڱ]lvԂ6onZx^{4yLxJ)UΫUz&AC}QJ)罿RUz ^3=枷V*uZlZp!\pUw+)jgy"ꚇYmJc:|\խCE)xJxQ#8XQEԥ풠x}?i҄%2 0*Zx뒄&B_Yo-Ș$<͆ZEW;_F8WpX0MeG$izꜷ{ަe y-RxK{%&$݂2Fyy*=QDh8d-|̧"]QɎH1I&m|l0g(=X )BB3ʫ }%'r+Du|kdKdS{9K9iYz0snrο+ HSe>HZ ѡp \ȷebdmja=[LJWKXQnf/R_/C'pO/^}pU]g1jxD BH>pKXA07ukA$0|/lw3긗,pLl:-:\zea4 k/t+q:>M%1xDIEhbE4FeYbM<'r1P65<`dT~!*.uE෽uzo?׿޻:ƺ?:PM 9@nA rV̋eaMǬGU<,N9#HDy sX@^)r.N18n/E&غNx!@&+I(Nh3p^QUް <,Y8Yh0Ge?y18ol4˗iۑwe曛䦯}>Wퟪ˿;ߴ09}uMcJ%E21TҊ[_0mڤnR=gЖƽXy $1d2o{4zJ伪7*+:m!//(&ysCLu6ndZ"VB蠊E|"a'zVG-p9 8 :%NWlx[D ށ"bkX%l ^M%oN9BX mXEX}VqG\Twrچ)OxǪw2UY_/$˪=py3}CdD(p9" oXqҖAdDb+ۗc.ޜژwSvR# !TXg`?JMxsJ6Ǯ|$yât ZXLsPѝrhQhZ AF#Oܦ8m{udP:v]f<+y EHkt ڮyo( ѭvG@m/M"l<s~uey)/pJumo-CϊĻ1ֆЌJΛ4j,:/y] V)zi8Q7=bKA9մtH5l:Ǽ9Z<4EIżJNY1Dm2UJ)]R~y2DK&?9Z,6sxtt<ūs{0~ZhCW{NfplQQ˻ <3tO%y}>$wzf?$35>I. F&6v&x-/jtm-jkx ޟdɓL$Dh^u,~JYfm -ar%#6{7P"2LQ~ldҩ%z옫%EBlbO>rO܎{vW(pλ>{r#9b^9pyڼxS%bEn3Mթ$3-%=*n 2zbH&3G2bF[]~ܷ{zSͱ 2BU.Qe*ljn05*[ӻu9mE=?'9 ycwrδ0fbb&  Œ(P ,Θ((ў"İiߦa/oi~b/J"I^a2|oF.xCC.Z{a@ZHB߃@ـf[bؗ߅^w߆,n4})C޼Z"#4{W㓸ŇUPU \"!G.F!"meY3|^f~;9=L; Xg`@n&PM'[$/er?ZWe{-&oROϷ6ݹ8Z] ݁fҶ #kri5_ /XQà qs?7ۻc|;O o>SG>qëaucG##ugJQA ݽDɀ[߸qIl ?ky'`$&"0!n4Jϻ&,;c76yvuw攼FN!Ì[ftl_jip{/!=E>gaiW%YE(2/5m f'uUlhmа7&3h"OȸbӜѭQ?CexsD/Vo0ȋp*n~Wg~{^?5x\#=r/GUr{fK.}\$ڰOYyZyK}^Q ey\oqe(FQs54Mi?]yz2 #p DEi%s-ʍҲ%Qi( C&/lˠh)8Aຒ}ꔥA0T9yO}5_ΠGa49*+heJh&[t']mZn+E.p\(?[~T"HUbP.`Źܒ xwbe[\WƵ;nFYHYϫ˻6 \CQUʁ5"X,oS@Kő^Q" 5T(+-+8; ʊ eg(uyqu߹m}?gLpT/|]l2'UFQ}#2c5y -* }- Ւ,$}Sx^\Gx2U_}'i ~_Si܆a$үEBej,~z=@i~ i偬 @/-!/:Q;s X*{kw^xQz;F_( ]^B^OX9\t+_<|:UJ\ҵdm-wqJc9y/+TK7x=MåBƹtO@-숀8X[ 5!| 3dX vmϨ|'{ _bXSv3Py)ќ6F+Vcg-ᦖ`4B=mvO-%^B:sjV2Ŗ{ j /:Yvm3h%;=ei_݄~by*(IX@]>D6 6:ʮ4'Au?=@6ɭeb( pH@RdQ¹F@g.wTA1b+v6:mX&-F6o7b[:`ndV#pBKnZKFt=Z4eڲS n fv{3n@^>lmhq[=6&] Vp#|1:W -D~]ƕ*)V7B._Y"2gO*ERHئERgUƗ=M6w~"*_ֶ>z[P?v޾z}xO{b8PT>.$# {YN} rHy[L=iWxKj;G@Hj/ v~}{tvb< Jh&J1~}3W6 j$C/Gm_l{~r=r&8E4sۡ+%WCs'Ai,ۄ%H K$V%fbe#=Xe)?<9? cP^(&Y2uXNk~nF&a-]#d>wHDpf6݆{~X0悴F3H_Z.Md_WvM7fW1$;:0V\sĮ= B^ey!"te̞ F^ SWcNv=E0&繆C+*& BȬ/ yW|5vοln돀F hf!ɦծP$Uj(BuKYAh .@ɛU[b7(.5(yu=׮\\&DbOaQȻ U>غڗN>=ZB)P[qIc*؞#/mm{@^T:JU^9ɵ[b;’aY ʜ~R,YPbS ui@kSX.2ܰ]G\ (Ad aY߷Em{O׏aA\"< aQ`kaI #/3vFwHhR !N vpqPBvo@ 4 6سHhjF^[5oĿE2b9!k'7qL0"L/B=ceO1̜+ڑ;=n]6unC^-ULj5zs@J8T@WVGa k;O.tj7U%ceeQ+ia/,8:lR+|'Wm|Sys6H{Sdf,8z3"HEa€R1%7.6d§,4264kML[jy9]OB? %6*V(皼zǙN9ͼeVGg:%fU*F! KV\h~A^Lyʫ y="&@Y 7md ؀C11H|! B۰Bl_g&tIfjU&x V0Ж/ /iöDL!W3g@̧r_뿡e;mؐ?)x_~ޟ/#x8V $ |10AZɶ&ɭ4T,LkᇦWRDyh" k 8m{Z!uw4 fFޝ STUō^bD]6C_HyvqUB0G41o ^ 07 V[Tć?ќi#K.`֊@08&8#fv)TmE!b0`T)r88.A͆02K[Z$0 Y HT`D Y1H9ߑ7Jy.T KlBL %o nݮs)-YWxMŝlm%GDm\7kF):~ E;XѲ*!FT%;pe*<DD0yӄ^-+<ˆFUdyU39kv_Q%ZhQdMb$),V KQ4uhMIvY^R}fU mɪ;h*ˊ$N؊XYuTP,c# <8m8,Q2+o*r"xUbX\YLG@ o_xn^9|M7,|9ދ>H߯b Ց*qAVZTjaa+& YYh2+}K}J.rW-p%`kLcyu;*tmYՇӘKvہƩB [Ա@cBQ`!ώ}RF4V:b [@mn;pz1]. &Wt0&癫pڛ\_}7] Rvy0fWwyQ { 􎪵xA.WU2: t0xB\DI]I%c4/{vH"L(P8}n~5n}vI+D{SGTdTȴv;ͬ<,D7JZRď`Κ9#͝ZT !FŲSK%!1tEń!9wۑGl+*֢ށ5/ 4+uӲ;FhU)Ԕ|"j>..&# NlSrV0vBI/_3Uh87I/Y+efz65sgm$k Ot3}Y/Ly8iU=DA4# M+RuY 5] Kex-栤 .a-YvYBb0HxuUCQ -*M az!0D=dKjt+*@,D]hD]Uw . K^j ȭ](XR4V\&[!rc{& tJlxk7o? @!3xoKmƘF<)@u%,R}s]ZL X;Mcc˰bE'"@5kUBNs~Ieۨ98g[ o 63ڸoOƜJ%7<\@x4U1u?/؞>h2{´'wF盠ozx&',[sg+ݧEilkHtOn6[%bg9q}zc> &7aevҭ䇑PyEXcz'j#gC#@^˲lkǐǹNv'ç+WNZCY:"Z4/{›6@xcL oLt ¬A )U"]Q)inU f,&6gqpfGM,!53)>7x]f i.ePC-K܌AAbo<#Vlփktg 8V(U2Y.<6@&Vޘ5<}5қ){ȌDsǘ<:Rvp17Rr+Kҳ'n_8G`bf^9_a,|Ls3N]Jy_J'ĜZnX} ˗5\.]u\p\x}B9JmaY8X(kċ/ +L--Z('Q$j p|O|8"l8@B%Uh#QKAX}8AƱPJߡa@J0cc^L+ȅr \lTQT´1h0C;n|jVt߃JvTlIuΏzPȷۀ>}ȷKnX'u+:Q&%Vl\qb7dGHfU؋J5SgvI&%qj'#+r?qRWljb/pvpғ0H0"%gFJk%q5QNJLkXʜ* ?eHHE͜:V]uI扢@1 ف-?*fEIh# q[ӟØUPIz0%yZl>'#E':侖3MAYbrbLz7t^6FnzmNN%sĦEb.O[+voeC6ro/s/f|d#7\/q~~KjE/^u3;bs|ӻj뼙{+5TS Q!u*_hq^gf2ihQ^nw!jO";"lUZ b^;'r H/:iV4|&>) C)Do?;+7zjύbC!jk5^˨iON.-ƞ1cSKԼ'x5jq n}׼@Ak3𦏹]72z"Gx`^gluQ&+uSO^竕]k^Ȅ,#̋_lJ0`_ nw :QibA HU͢9}IޱGPXy_i"sI<ZNӏx Dw%d:SxMuEM c~wG.\X0G.oGf[59u(  cU (n,ohXBv+7ws>(33VWE ^DL ]l@l6͒LK+H|ڬ+i:8b^y/ -v@UxȮpaxaUnFbxyxc 5q);/L.@◉yֵ/r3F\o$x`yfJDhZ%|_7%=/F"ot߾'lly=f$ʹF|q3۶/g2(LRjH{"_ DD]L~?uK5lAH0cSjq%&)aL8 n9IuQ(-D>{32;gTfƁGm1CA kY8\m+,&Q 8Y\LRMV':DJ,M멥q; C^³[k0ד`x1YߘG]2&7W_~{Q/=|[{ng^X!Jיyo[ZxqV|{j=jjyU{sګ%E_|}:j˗o`ڴ3휏̋Uk2:&7|+yUOb04suy=}5W$_z#y6Ctܣx<4ppzPEq,`D{"}D&8Q Mߒ5YcMO\lhUYOD.0΋Grqw%]#OicٮBF싛;?|\l}2jVJ"^`M9;>|\Y'%N]D!Aֈ$]q5NDdIq^3]D+ h+u8۽Wok^#? X8(t'aqh|c{YW6`6EٰuC*,['J(FS577'p ID@7 8 &؄al FuEbidmA7ҏ!(n\7G"WY)y'&|.E/}ϋ Œȩ#풃%x|b Ժ' XbtW`?ֿKxI0rޚ 1ӟڝj@7 ֌l07 4@BM_/^TIS>91ˇROJ\(ʕG;Z%rS_7md c~? 0M`t##E%QUTٶiRmfnʦ]5M[&0y}:>(i]1ѧEۘ楧)zyD1EeK5Ê_ӟ}D1% \iW{O{KuN@,)`}stHN5n _ImGuBʮ \ӵ-xcECp7lH<=,VEfN ! ;{BJ~/^3CZ@+,8wa(2 C{AL. /Q^-a5MbB yP54Fl%\e`l8$yRtnfŵuj8h"O9OMfk79{_+6hfy/O\EKs\sk^;pFJوb ^kee!Q'UL`X[&'l-JTZݷ#!&0|)I߻),#.  $儏V$I.C5 ު[@PYYdI: kyhu>| g4Z! 0ʕ$z:B 9}Ex"0Ɠ!Z 5Lf SP+fB/gkr*-2ٌӌM&HKĉlN4;W%(uFv-Ÿ0eCw5ՄkuZi~6 ,4)%ÕrBlB3SW@PCuwCj^Hٕ-^yCp/-L̜x18 5/OxH(snQ) 9}e^P\+qpkE#-x 慮5C8Mf*Dގ?lk&G/Q7ka"]9큑E$6T5Vxo=܃hՁʢ7z2lef2a@ؼz[2doޚ@h0e⒧­wSCNnjنhkMa7x$٫1JEhKà 63~R`JxM IDӢH,F"" ?{K&v Wiau.6sqTLOglmzO̼@)+.l-:QZ6::ͷM3џ m]볤&{Ƅ*A H,y9@>~K?@3,J9IƆ$MQatE2SvS)ۈ_Xdxl&sFlrRrSA"I5/Խw<*s?j/mB1rr~v5CzvO&>fS$e&:{>{3~{s'<5YsC0f^jǵ>;R!m 6{'$;>X `)4 6U' URJ0n br 2(FU7( ;)#8!wx1 wBM4K197'W"B_}@nXebF>΁"^ze,n*=imG4鸃Up1pp&[4X$T'R7n )a,-Hԡ9. "AuI,-$GA~ Zƅu3ٰٕI/mw߅ -_,fC ?lX ÆUa÷/c]=Vy7T\e'tU>]J7_!z޻N<E%scwxW{k^ʞ}8;<:<9:xW^A/O&'ɥ.2W+w׼?޾I~jyI|P.Md&0?[V\w[ʻk#θ6QSW~qO?) x^ mٰ5՞ÝKW> x_DN h)n5Ye0ʻݑ{Z=:ۧKcƒx7RS[iJFErĊzY,"Ҡcqd-T|) pܙz(y3_> ͔jô!ۀ䝞e۶s{9m>arnmҭ_ra[0m$m@vM+Mz*7`"3 !xȻ]t{ q+?&Ex7zJyݛk KO{8󣧏ٗB`[}~*<V_R;^\a &%r9&LJs†*F^eNwf0g2%EuUX"UHC:U? c}29+*G׀06^?*nCf}ֈ' IgT R []ShkIv[kY1֢V-w^p4zow@9/F"x,Cï.({ Jڌ2ɫ*$:`FVui gUb,jos J@tbq/0jI:5SNf8Kn~Qd9Ogk'U'ȫl2Nb(ί%fB ŵ/]!"G"s69I9"o2B'\B| Rw(⫼*f-/9o7)ZM*BfWVm/+w;Eʏ zc~acy}J+d#/ݏ[o>%h^R\IdCUI\{BVȫ/ /"Y".F$OB"zyyYΕ~=2R]J_T+ٻ\?M-/A,UruiBFoLs[b ]xWZ2ޝ\l;J6M(xw(0 b@iݣb˚WՔq;ur|6!_{h񜶤0j~ 9/[1 $v6XW8Ncds]hZqB弪dF^^AL؋& y9cv?%i I5kbkpS{g^[Vhfk4UY(=u`P/;}^9IH<~Z%*F $GDTɑ2D9A+AKGu}6Xap"j{[`YB[ۇ= B@Go> $Qfexc`&TaNqjoKU񵾇+l%}ryj=Cɍox4ZG1A< 7>቞<^@+>b絬!ş8aF&q q}(c.Qw~/$w:E9xlCx0gA3/!xHxg^Nw&KO# ޏ3{?/?,&#&go")onw|h͍⏗Vf-jma{<ô"KK!0mmxئemE2<=00WY(-cmX^bpߤڍF˺mZVnY!t+uxAg3EO}->X4䵯e֌rYkW%%ǮiPw5ārV0m m׬UUذ}~`tdtŏOCZ,{ҠմeծV7Ksemok ~]YjU{Y5&,荷"z4W|7TiQ +t LA[ixVӌNͨ8h4Jnر˪o'qŖK^ z]j%MD#`@Bn P  ">лxw̙Grys5)Ao e!wD؜m,5]y`H .(ƙ`#e_u P}mU|XX5HiM(o[] -̈4o[iNiVSl^+[ԧKr7c|7y+yЪXOwffqaq?xɞ"ooc PH(btr`jà'r_ yN^ 2\}p1'/OFSxnKJI1@mQF yq % vd2kגTzh#RkUa^ɫmeFs, br;&/6`6 R'&)廿杁}c%5|n~BƘ|1PuN܍aiʂd+Ő%Ň !o0a8^ۤ 67;mLb?Aȫ]hɳn'Ωfø] 5.<:Gj7w"X +x6TYLi-Ψ:6ӬB^wWMї&Ũ'vF}|pɍlu %AUTey݇}Tq8-f Z;!2f*鵘1;-dN'@4;,fj䵠ټilKmpZ1%pDRDQeQ(Mm)%Rƛu.YVya3ݮ(}/IZ3drSYmR5֞cWo`QB__.yQ! Υ \jn-yh05Wn/fþcY_{O?=Kv͉1[ Ah4BF_[%ٷdݵy^ܭ0yܳcRm^}0ၐ+BZN+Rx{uKdKy.tn?~B%no\%eDNztN#|D^*uW6oa,R/>lQ,6 t>~?a.Al䁼>Zssou<ƚ#k vU{-.,6Z'1&~%gլBKL:ejËe簍KX+ !])qVC+mstp?B훗\eмl} ymu/1 yAœ؋_`Vgb+oTF~1k~9quߧ`6ےygnoyi<D b"ejo~bVsmQ,BCC*}IJݻv $1.>VfS[O,QIl#ѻnWDX$~V(ʕE鋧.h^ lc/r4$Gx!-Ďy9v r;tFWwn5 X  f^3cxX~`Q7}jh2APџFr!F4osjl".E":_&ȋv(ƛ8ϰ Ųb$`A(AQ%:A pឺ14B0lRh% Qьjբ ^"C&@^?8'ܻp$/`}It^8*f0S'<_$W9t{b ݦ᪇V=F&yѪ8w&S9T-HmTKpAkL *\<}ڗ?^{?|r?G.pc<m1uE>Vh^΍4q5x|O52>䭦H|M>7KK0 %.Hu;2j8'"_DZ#/24s($Yaib)P #PoORyEdQ4T}:ԉm?&tS?[CPO,{6pA[q0ynzA1͇Hƶ#!ܽ H^Yk^R0B&5=[f?@Nm Fb"] <Ϥ ɸ?g+|au %φ0^^E^p+V%zPָfzD}JSܫ 8@Zf17r%]¹0mfV"w$#Y2rxcskלG!4pb7!jAwBu64E?³ú."TD*VYm}޻MU}fDm{n^x<>3<9=?.> 3\Hb:Sv'lJfЦ@ɰ~`K7  GӔ:0Vj86qS6pWl,I2{qvgO;s~-_7ϋ'>b2ì^1ݒBW3 Zř5 *BVtSKE`a` J>3auF 0%^5sȅdjNSs21r@ZEBFQAtPc ,,+"TS˰;gvr0iEH;Gb}?#-+'92tZ~\4 ‡js\,,epT)q!%V9;5TSԐnZtrCXPĠ01R6'l ?]\\k]-l..?~:'s!7acf"[<6'h' M,.,]y5cC=EwfdM̦\|,w8wZ%o-=\ۚIOZ .j!G=3q>'2 }.3L~i`f#|\vBc7UϏ|{gEI m2&l#5Kl%32Z%tGgJ89xYns,zсd ;vf9+0bD-݁ͤE2tsRR': atsl3;NjtjiNA%· ߝ}{l.\jHohP.`\MxRkN3s 'xOkF0*]<ӬxLpxbP ^_)x Smf x 3?{۩EZqXx@}9HbCZq/a2 ^HxCcbjbTⓢFN&_5"h*QZхO0Fz:쉊s]+*:7U rdQ#d|DuYÄ d0c#c+h%thDxrBjA K1F'K&C*E&i :Abo`:w7/EeT@앂':lwlOˈޒyKNs:v Cro4!{`:gi@t 9dՀx95zCC4#5yӌ6xekD8=˃ϕ bȻ{&}UU̝$pz+xͣ;FɶZmP}am&on ohjwu4qd?ka˸ !]7KnI;7s<XF~xWÃ[_4U* ־XYxWm}_qa7yw/߾9|?]sHY?̒>oy?ir//./}_/qKi-]6.Y{]W"kYO#֊U'Vs^%RRXir֐S:sulS[ʴkQ0\?ʨ=k0u(~- _WȂ_s#Za2\ Rɉs֒Sə9:zFF?EP]fxxc7o_{{M_=;}/j=˱$1~LZiU?E ^n3ROVJf0 c|CtC/#N7pILEi\Ie7R2T8>j e23u3X RN3sxxǀ~fd/gz,(D kd\r\ЁvYv&T}H'ߺϦ~֝,jX LM;tqF~喢kýdm9]mkl\,[DM뎴~DGwdCuD-|Z*cvaXwj*ixkޖ|vMė.̳S+;e@Jii>AA-ep0i1[?p23\Jvj;ОxSl=x8چ&)?L6񂌡zv^=_*kVd^q"yg̞>Ê?\18R|( nq| m-:rH/=0' ^|D୕ikW7wJ)OWh+K* \nl-OgS//풪E?B)X؏l+vi)#H;qb9.{P*Ј9Ҏ& ۚkfgdc9 8@%ΤcAU{ġ֩-# *8> e~!`kv_b,b3LOvׇ!&a[>sШ~h%"lws ݶkiFoTw@y-zxNDc~ʳ.m" /$l SYS^zxgI}4m0XI d"_L}eQ3o`ŧbM 6Gv=jq)x#J)(L^F%zbz92NPU*pNDөov\|x9x=ON6~1Lޭ{^W獴4_nivPbAAIss+3xYRl}_c#QeolF}e@JQ|Bh@ȇAļ{$D^_ ^p|A / Ffıo[c}&K_8 B:P ^.͂*)d D!VPr1+^%MMʙ>xA&NկD` ^L+:L6]F2,S8(,\6KfaŻxXΩ훇&|v;wbẆA5z G'C싕]#"eFl7Pʈ2ǷSաԴ&펜kIaej\ACn74 0H-l ( u;g 9a#YW!s؛էAW:a&2P48 fNu2"IZG9|;D $>Bp!}BH<9c)B*'T|"$TބD2zjU hZXc(nX#QDs!F8z4 TȕZA KBmLZe?>[lr[ QhQey8PCrO׎\Y261^SJ%/h7ø{+=z:;+|v:A~c-ߝ=*/g&-+c+n%z^C* c9B6eSOʴtM(*IuZū'N^~>zCݛvjbZSih4N2j8+T1oEQ4M:7A(X2ke;|BϏyA$;]z<;yxuI+c{;H aոK3o&|Yek($Gm 8l8??y ^?_Axvn7>Ssԫ" %J>#IiR4V}<ן&ODv~x xӷ\/8[gۓgޞ6@ea-^\̚.Ʒ&}kV&΋iw}|az|^ 4yٞcGOgj|Gx[" TT"6MD$Mx,|@ +t#w[XwG{M 2pOJ!>!X!T嘡ϩf0[d˒D]+t&$V!_S?.4b]̝ "NIMҬtVhHDw;%s'$T(+xM#y6#g#odavvW dzPnAˏc=YUd4ֆ@C<}L{ܓđTv^CG{bɞf /K1d ^~T yHݒb@BL%g:G  >:WB:/ᖏ0̱f |p=gXterE d3W?Yay/aVEW|r}5 i!`q&~ zV=}B(}-?ox田Jn<7|d;!O*])"]& 34|pqe@j/B^Kym{{Ƒ&eL%u!ZݘJ8-Y<@ޔ;o{qgJ[#,psl{j_h?H!Kx`3' +cO29&<bvV;"3u\o#bГfo1 nqF#gj1K>{bJhK;flAL4r.= j163uΊhY+ f|&MPXb;ݹȱ Xsk;pVZ67ܷyc;T?l};z=alvdm ɧ[jy̗.ZA$VģՐ{o׸̐ۮ̰QBjr"yM<=jڪijJhE+a_C-0hVCP"VB>Ie[ m)>?pm# MV.Q^Oux'u}eWFGnӝ@k;fr\F#Z F> -(mwU ۰omV@ !̷0\z sQT35ހ۩u[.*J,uxMΕkj]]6hjʒ$+:J^-/e+Dn=Gl:%{p.g2YnʔBp;EHԙ/A^1:P{MҧWkvcP҃SBRHO5)y'@>Id5S 2Uiț)yVW OC#D MeC4u%jjFR(@$c{rBNDE;!a'wbzvn\%IQ3UA$˲$Ժ$H:/R~#T 6$Zr/gs6 <>輅q`3,z݇"/Z9VVZR/6L6Ϻ9VVl[YSoe'?q?K$&‚.]EExH} ?m*C;`"i9S/!@038>lPnAcz:0]/=IKb+5R`>h׼eA-vunĊ}bcn_[K$k3MR (isE#wkڰikIy2\כPTESh1~޵(\kW`c08yX@QxԌ@mjER&lr{箮Cv̽GF6szqu |gUh̽I:A\M`lhz/pUqyIf4IYZ+oeP#\qV-rD9)toNin Y :9#Y &pTE/#IP%pIW_w߱e^k41R1K]ӊ(*2MIY)kiNXxS픨T,JyV#Xd0%)% #,*l( &;J"* )cE75t QP4%-,ZaȀI SvrfYMX](8рT kA DC+/TIDQ$"f5)HZД"*eJH--1!ΪH)<>dDHQ2΁BekMTXHAQA{W~~_^^OKDe_}>iifjkH g˽[/|F..J{qwuwgr!W֗ay%hy5ŕ]_ОLOv?3Bf7- 7~/J&B6+KAPEy˽\L, oZq+{=ZgCZ 2 U{Cn4Y ZȪ\=~Σ~E^4ս T:t=O5 9n~*Y?WMsN6NOƞ*blv}߽ZF9ydv2zo2dr﷠S_OƮVσ 0vri=q)ǭTni~>tv23A:7Byߩڍ}{=bܪ;9sp6)holAՕ\)ዳ(Lgyk@mWθO1g} ڋ㠼hivy޳ZOdM4欟$ōl,r]> sYiqޔfTExzSef3=*ff׬710YnFUƔ&cMZΛ6͙K`˻Fl̃a?;!7M >7O?{'._߂l}j_7t嶱<3he=q̾ʋJN=lQ.ou+JÍNM˯Uu ct׾ R1x!_9`C nhbAi{j-vRL^ٍ̎UV!WEӸ^\lHUc𖯎cqhbO)bJYpp*0^EzuHfT(rS4cJ1Sxw8lket NxK98q.}7?/^xzpuX^gnyS|x{prGV<ԫ[`}SayW *`q6^%w{kXךּf8xoBCkK{3-A06mǍt<[G*}ώ8^ "W-hVo@bi~g)"7nP9^97L2;l4ojO5{S 2kRf:[ u_M7j=]o+:/Fz:j5j;s%ٱK>ŞKlGbc? {2>{Ծ|ZqnǜNήZl y;r) gjr :W&l\j4L].B\:j]' PʨRK*_DRƨ1hu!ڋZ߸Nˉ˾0pb:UBP[-#u- &/̅hYeSZu2KcHFQhd0@,((i_|︄EMxQdMr ipg5-Fn_3u*#UNM}A9y/?~W/x+>p78IR$4zQbt YLG//t iH@H% #pDvƹ -I\i]k e+ r'JAP_kg}a,C|ދB.@TUF4@1v!h)`)^632YcQ\Eː3hRq,Hq)>KGW?3Bm闇S'$Bi(.#r~'@ͩi\OiO8iI}74͕9%I1'm|se}Ge~col)\H|x_֙˨$`}$(5syɒm)4:-^e_fGȷԡ al{{%w~['9RuRqY! ~s5N&ʐ`Ӻ{<`=uגGatJJc9Oz7c)GWqO̜ HKbAMcqbUtۺ|Z'^5j8Ҧ̮"i_b!qt;}c&H;7d9V:a{6|qW/}rq4w.nt6+]Ɉ%{[NV#GzF>B2CvJp8P?~*<)ڙf2Lc*.GQNJ*2Ş`ue:|"g_2brr!i`1@`|ed4 ʈPr=!A ^e+pFO$zX(S~qqE4=9{Lؗ9aKV4=GxVy(voTLӈ9&e!ȬٞJ@13}EU,j㘚fMǒ"CK@mh^wLSեl~x57mgndxm,8{3i|f\+#Q3yB"rz,' #(E8tZq4ǙYS2a@(ET􋄖eM^Xrq@)("#ejteL 6;j75㲾xBugwFMX6neDܪYjCk~y=oʟo /jY Xb+i2_/pnUF>|QJ~S+MVv.g-*¦uw5߸ViuxQ/C׾i:b*0f0\aOI͙fB'5ճkLizt|1uΣҳpopz|z0\7hl}^/D 7\툃P/en ^/mߴ[Ae2t9o=57)4~H}d8~̝Y1tt@%Նي"wFTYK|K$xigtӴ{4jެ5s} p;h.c3_6 vsn{޳֗XJ)47 ~g;X &*MS𪃫xپ}PȊ^Y69bnEGpEY;-ƏG[[x7VcUW ",BP2GB1$;lV ~bVuot*Tl}l?x#xuocoq7;}f}+SMSPI=x;9R>uklJGn XهKm~[|ed6<:{K Ԧ١U9+_fax'lV#Vֹ 2Y)/T l7]Ox٢o ߻1x}.Jݕq;e ɠT~ƕwLT(~o ݱ_&X Y 7a¦t:6`0 Th}%3!7SE&L?oas5}Ն7Uczfm&T~nlywBە^[34bhF&KZ75G308YGȘYU um9F1A׈}܎M^}p(L 4lM$?kl!fȢvD^cS * NӐfPWSl$vb2"ٙI 4Ѩ Xl9fu1mV%)`fH}3Dj.9ٞjD{6?TBD:AʧÆGs_!u‡](i5+<׉o{b!`y)-DdAɫ.-HXbb$S7mZk)_I2D'p{z{,|= u5 0/:F+h OEu2H}r"Z ȊJ@?vh`%4BP%iS!)PQ#A1+M@ܗYJJ*TTQpB{-м1ZNz:2-4[(ADs ]Q}rN棁Ra˫QFdۀ*oP =&"Uu) =5OJ.BWB}e) "TNb#eګ24fq(R0WfRÚPތԲwIA]X.Kr,-3ƜE^vRP'|yЀ$)-7L2_bPN\QT ^Ů0)hዼl^ʃ%!xg ?\n;\P2YӶe / bk1pfBӓHn_S`\". *:My76cW@yId5ٕ@`7sf$ʽ7S@$8BڃG!\&Fu? oTZvȫ!\#+zwK%^*zö,Vwi j]I髬r:YךyWXm}]5s+ `0==eNl,DX2]N3l(ǻC 0p+΀Fx@ژ'2~&4L] AeL&ʆ J1ltC{zͅiZ!t`Y^q82"w4+/?ACۥJ63@I1Ay  8>9/ 7[gFMn~dt=iA!׮ $4.rW@ޓ+&M[r(1-1ɯ;ǻ Q QåPOwP^WNB;q6܄,7Jx5ecQkdA/2蟙L#jse=#r~h!3W pە˭'BCo V5~W|p%˵to}-_ا-t0.Ճ{ȴ#ޥ@ǫG^=c(d+X/\_^HޚОM6Zɝ P3=}.[ Na孠uvG򢶣&o};ֈ+|:-k<$^aUvڼWګ׼zܩ+bc} ylCdG'ۇyL3:nGqs*{ݷ~^Ýc0S筼cEQSg{z6Pw,x>vFѠI6˾S ( ?{wbw&}?ewIENDB`mkdocs-1.6.1/docs/img/color_mode_toggle_menu.png0000664000175000017500000002151214664334534021617 0ustar carstencarstenPNG  IHDR`sRGB IDATx^w?{W r Ż^$RTDR~ bX҂%H4DR1HIDQ E9^͖gY|<>mGB"Áw EF(^b!H0fYVЇ ˜ r:rа8FذLE\ s5¨ꀪX#QyL r&> Pez]R + 'y*+CTQ) Xa?h3MѪȆ*7+ }[oJ;TOF%麬?jKÈ! yGy0[NI*LJ0y^Z/ w_.{X[ZʏQ I}^Z(afe Qt]_G!$g2fjf ,yxKpzDQj+}>Nɍ|1'x*ۅ{a 8C^4XJMtofx:7Vߠ wV&US"{ @߳0<NJIfFi`q'kW5/&o HD+0gqɨ#r) xԦkVfyr|nNjXE'ΐϵco['8?F|` r*}yoc`DEu|]iS=Rm =h)kxEt6",}UyD8|͓pw`WM* IA |3qg VmŪw`v0R,d〫&؁!3' h=8U}zUK,Mu=5rQ ) l'Su[6y1w:~+[!V'=]XBk$~٩G3ݜ8|n뮛mB|5x~hGVo`yì@A f{ f$⩞)Q&7CSmUQ5[m:MdHI/ɘ7ԊV"%w~Z~bSwUj~TY2ZuRQZ&xD Lf^/+*]x;؇0P8lX26}l[*k{%#$=I]剧Ql*#\j)n\^_#kgMmk3 zaR/@̴`v;?JP]Xx& s;[kFn螁G.eD%_G? RO?~͔k";Z薎W[;6bҫ+9rᵭeب9ix91vUEUw7G~ BYXtտHC{[9q o}^^.᭝gy0% @Y9tk2nK0M^ wYxW2ȝNlQ$jX1cPpd)fxv,$3_20Sqۊ$$orSbo IRi]Xؾop L†]k5U6ҳL a`rkt+$9>TȭyFjNMܺ65O |]́ VZb]+A,${| ^ :見 `i' `HI{< ;%ԃ౽NHz9-*>jZo&*A2YߤӤn)x |UUa>J]@a8GJ8mHĕo+mT wcqQLbZ v9vQj%w-햆RW% ͚2qum^ͳx$!kMVN*^였ffhͼl뷖, V^]2hP ,l:Ia޵vyp{-Śf'WoXBlH;zZtkhS)$,~yJ{R-1[*ƪbk͸S??;/u"& jenlUWJY+ 4In55I5zϟ}DұJ1/}ewp 8]i` p0I%oE1/O_f !w?dI+]쭰dMD{Z)x]yN9Re:iAlR[ٳXeJ (QyF_[RXHmvAt;!x+Lf3LWiz֜Y_k(+2ΖcҞ d ؾD 23k0Y?VI¬l08e ^`z(gQc+)GniXFJ_}SEտÜ|]&|3`%0, *}RhE*<ִ l k1Zތa8K0RkDzfS3&]Y5&qԎ.'NSnmV7;ֶ5aRoz1Wg~T^R_$a$dWc笂H¬aIbQ_E'˂d7z^nuJU`n)\S"*R<;nLCW˛".vNQ/D0kHBhD-b :Ӆ7 g4KYXL N XnUfDžm8pMD,A'=7L 5}ͥBU[`zwP^Vi5serkR,eP/,5in ﺖbtϑ6U -% O.7Q`vg1sO9pKbczT(`Dg%D/0ZUrh_F}DXa}[-צcDXgaJ_t^;aIE f4LtW@-B ָ $zG%gu;qx5dmZw <. I0YXՆ 49\iҩX[ ќ"`j×3B2t>4`JL\52}K/?CH`ՀRѦ#/7_R9T&w[ꔿgj)(]({NԍaNeX0g68RyӘݫgX7bOz1#ú.LCX˞ӼgQV^4Ϝ;DՆ7a_cƔ`}3(єHxzOvԩ|n)f]:u ?=e+Ww f3ڶm/nS@ /$>p=/K+^3O?HEx7N! !Z2XW 5Yý&c: c: ` (;K0!xQ)m䴇JKFz^s܅8z8 =_~o:ͯ~^=9 p:Ѿ]._,t0P.)}YII))/qY3j{d>>pt޽|M%KW~g.kӚ/vw7F z){S:==G >୫ߢ5}p V o]z/iOFNvpMSt TcDQۭkgLA4̈DV=y999,ڳuc<5X<|-e@6l;f$ p"/Gz;5^ڲy-sĖ٬ܡݓmq@ɄҔ5>O}g*=%"ĺ **+uQZ,`U]9c_\,c~._3YU<٬>a0=jw"Ew߁x\E nK;iT0_$@j<𲸍9LjJtTf3k<,4ԙƼpKjmVx#55a=xuFVFi6Hf3~"@̢`&Q(blfQ[*[?wSZo OoqnrB`>/J9G.)ˡc,U}1޶Mk t=Fq9KqˑA^iSpC,25\CbC,25\CbC,25\CbC,25\CbC,25\CbC,25\CbC,25\CbC,25\CbC,25\CbC,25\CbC,25\nxs.('5STmbM ;9y2l p{^mY ^ >/Xdj//Xdj/ıi3>l7xV)ۀ. ~5fLyv[@rh$55̟o=z8f>1W\=$-O].<{"PVU{SQ&ee{j7w=Fi aG u x9 ˫Z ϫl}JC@y}iŎ+*=M:ˑ ^-zǖD җfYΑ dU( Ff3fމ*wTÆ:#;)QE#Vz)R#x9 HM ^7VSEF\%Gf)!jF~DxOvh^=4K7h*ysq(wLͽSȝ IDAT4 yA8NyGX,dP;pėy6n^lԛWR᫞*RVR_hM469a4}= z1!hVܞv҈NJ`S3x ^+%2m OrE+@rHLrE+@rHLrE+@rHLrE+@rHLrE+@rHLrE+@rHLrE+@rHLrE+@rHLrE+@rHLrE+@rH Crr2GHdJ \UUUХ;Uz:yu%pC)p l߱15pm[Eb I U`¤Ѷ\dxY&0c#]h@HXsy]@;iז5].'C~}2ȀW s^mێ G,P#rH|֑Bʍ%x ^7VgT8l^U~y wt-UDKoh"aj[|Ks.L# "-ycy#K-Қ<sl"ՙ  * P@(<wGcSړR0 `0Xҳg67_`L3J!?r?FKF[2Z|#_0PH `01NkjNP:D0JSǽTnZ^>>9 VȐ-Wf)P6/L~ȫ5jDP8a0 `S(F>A3NK@╄ _$-U,h m! K -@he@@eTq©S8a0 `SNgL3U eDz1,K [;z TBO5VՈN`0 `o=Q&shhZp"1F@sOf/y6>ur&4 -Ң~6CdV6)痷PJVwܷ~G/O55U>_=͎+'E:rY`0 aҷ~p|g_'_nj9ȟs ,U%ȳP(۷ )FY1İ Ecuuu{g;VpE5U3Zo]w~… |;s.O>X P ڟs,m / ֊ԗΙ .`Wŏٲ?gRuVuxΌ(QFضtT֜vGݱ1g Qr8k{Fnl7hQYpzR `ǎ94sѼkpB]ş#?m&Ď3((_r, F6` 1X1T?"mʢC ?# kw4\)4o;}هz(%%Ox 4O) ?XS$tNzir'P ~Ϝp;f/-~k]~NqOWxH8󨈟obƌzmGqqn3l~^5n#Ux k--*v:JC[)QVwE_w=a) `0Me;v7mҌfGw=hG )}?۞{e˖IcE b%D3iF^筷̛7_ҿk&(+RI>Q)X.Y~J2دk-3gΟo:L aмu\=#ǎ'Tcǎ'`<+_;iDeRKK]/L2Z4H][glOXAx!==8-˷ C];f/'y*DPW7h{ ePڸ1ШlS~/R `(| NS5- Q94SCAk%*oFc ?Miްg Ked|Ewhqc&{-hgZ[[445*T$HOP:}}}~JF7$ͫJ !%>}:ܹs0΅mh5G!f:V4IhNJ?]h<^Nm'&az𿽁sB5_O220 `S*++7oG*gui}GMRrU5i a M-k0 #"gPLrIIqO?4qV1 8aժU=A+2y0﯏ _a 秝NlQ'ZJM<~4G=Q0A u+V 3XkVQUYo߸q+cͮ6^Kʶ56⊯,`0 F7wߍ}w}K 49VxԝGf&jSmmԫMH+)' b+W.ZA oqŔ9DIEEjhAjN4_H-zPo}K+x"=I%)%z ԧq!4BCwNq7vʠwWG3JgXS֚ba,ń*"zĸ2?֧;>بؖHjl*lĴ%Md) `06j)*ǘow)℺4v jxLq/1ц1?J#srr}J:F u+~a)Sxx??L%Q60¨%9'~D{+Vx[*ԣ)n4H|bM V/o兯a҉rBP:H`ΎV  6{ ePSH|j4`0j---|HGF}>B 4pW᱌cG4`psxgǭeO>^~ez嗋`ezUL[n fo!Efb ,'S mzjړgykjjR<,Z"b;ڱ#x@l6Q:-'[!c 1vgtG$Q84D.w },k) `0ؔ7 ?rB 4?##:-bx:jxL- uƞ3jR$+~Q? Xg-Zdwh٬;D4Da}U qR,F;n*'|oD4~N`;.VG7_mD3?Y 5 Y+ c`0 C7JiGW\h۶Q1H j4&8j䯆3N`k4*H>c̱{LIlߨQ^`zjOGi%[;VIgS,YORsIx3ڮQ8>'('JqrBe_.A׊{Q=lz4P|A:S`0ܨ ̇nҾH2JI42!Z)"XᱶM@qkc;3Kr2stIADO#e6mҝ2SY)eW Ir9KMJEPˈ-;-PLOíDi5i[,s͊LJ;zꩧhuo3SV%;;ZИw3Q)åԜ?ja؜`_K u3[|eOK;4_S+x}-g7 CuϥymSM(hU ch1shzhB/ſ`0fChuё#ՙQQJpn߶GbcVȟ48aO`?C@OA*R;pF5Gy uN]L#+La/ǡ$/t_[S9s} ^D):7|fԪ)%:"z@՟ ~xp('fIZk?l 6!Z%(+ԅ3缤2VR8Зڞ*-;rka#Y-_7X&`0lj5w S y>(++^"?Q9"ը1q1`>JO=A-l!92t84ɓi^ u@ LNuP9jqJ]i&< 5p477f gG.QnXA  4JIIF$S_VM.=yR?V{֭|h5`0 ~FOvMv=J)[nX,FH(RӓwDZv9JOa 7_vϲyly )T^ӡ.rh VK֡^VC^AʗKpRJb0+gE/%rJ;0j>JG)hDTN}&l8`0 6UWݷo}!--wR7J2>>@: g@X1Ӈoy3N.Hvl6Mn[ȌKߴHG,D#~srcQTN eULJa0 `?p.e'NV" )w̖-[HQ98㰟 d!%Hj)5Rr(sj v/;gW} F_C CCC b-<8a0 `a|⤆.4ϠHӇiVKK 6Ry _(Ld9kJWsI!jF!bqT`0 `rEW fP7$!lB,EdFX6Rh/v6- Z~`0 KQtJ(R>J8*X߭4GrJ lV)*9Ҽ<+*A(jU  MҬR\J1V_UwEF`0 "py6Ljxt~ hXVy,yHqi׶r,kRE>5 [4 R!:c$Nj;}ך0 `0XRAdǍM3h8YJ7|2R<#ϳ%f9ݬfW ߬H5|ͦ)rjjj#eK&4MW劘-/eY-j~$ueyF[3oAP5T UCP5T UCP5TmU BBp}~p&<<<<<<<qR;|bMxxxxxxx)GK쏖 'hOAFGJ>MNĄ &L0aSTH,&'/X?m8G~ XTN?\lO6 ?(0dNWdWlO6 ?}<*?TdO6 ?}<> 'hOA'ևO6 ?}<^Oӆp(1a„ &L$kY'kÔip%&L0a„ 96i 8S 7us^9b>WI/{}p ⾑8>PߖLONI>N@oh8a=b,2g>u?YC n.%.ӆnR᧷)ݓ/$7(*s×.iE,)ЙG zY.1TH\]&Zt4H-4rj>28pw×oOT:ߧGm7?'v^w;G_,882&i ]tnr$L"sj]φ2!VzuyCs'݇uu/-g}uBryM{@ӳbyX{`('ܝ/mg0p|Z>,,-t . \q #˱sNWLԏ=ᜰ@ʗpNOG ^41m ]Em ܀14<.~r(]NAų]׳^gE֝O}[Gbחcc\gǾ_.%t}GgRD>}}T?Nb155|mqZ΋[w˦qqIm=Y։5<g /otx[|F-}2Kyϣ6`ew㡃"jwt߸՘6ߙמvpδׁ:{sxxxxl,p[/-ϻxWJNjYahxjVYvw߹ӴIv8pN8H>*$wuo1Nؾ*djY&=vwOsWen F/kzZ/=o5ҜpϖVFNqq9Ӗw2j3;VecCou4&ٜ6әStYtJwaoQu&( ;+q{& =J/̫v}k2{79Eg'gx~ GRkqh꽗{2BBTkY?{ld#mҼ>'ʤl1@a?kHS*T&sc|~Ox'UF)ƧF o~:A8 aϔizmZ~8apW.oHg3ÞٟO&t:}P{bu6Oy\!c {+JΫnH{ӟhʰG|*s)p9txxxx}`o\;Xbߴ6|R'ݭtnrwG(}<[tmփ8{1|Vn==4k9wL& tk٪Pw߼s.Iom&_gaϙ{<5B\sH-&q‡EQ ㄣ6}I M'm:'xO)Ks]T*9'<ʖ:9'P9aqԈk|>+p'ℋ '\&K #9C^>9=}Ii8Z!mkBJ>Dt7xc8M-a ;^ya)|\2Np9쀶*7ϳ򁂭͎EDŽ{ZM9(R^&]cl>\so9l{?!NS)wvgOޞpWJ|jowjci3ي%>J͓ʱo8a_Wgm -tNrR}VM)4vL#| $N8iSʷoBԸAc ~Gr'YgV6P9 8~G<kG޷){;8J}'8EQkv۟wr8cwxK/wH鏰V)h){sxxxx[۽Jmwڞ=.K-E7#HoP#}뗀AJf {WݿLP'SlᏮu<<`|߹󐯏qj̋!Thoߜ/sխ?'|ZlRZ <|mGd{϶wn;MC)?ZfeZ RzcRΎY%˜jίh3Z6twu ]( zyw_>zIhtgzjSݥtә7x{}+_{f|B ɶj/92I]CM< <9>ZeC,VME^s ?5sbA񯔒8\ei WJ? j{ 9O9SM]~P@V4F|@xᓳ愴swWzCէ3Z7×rڷ{q$Mjl԰fs\yFKy`ϧ]ϔ6Wh_Oa5 nv- P+9>Y9ᯫi|B0ZQ==e>6p[Oy?mwc(fMb{~t(a'h2S*=XfuᯜK+u<]-ȕ9Atef~sq ƮJ,r9bK{'TQ~{OW$9se&iݻY{TSGN.knpPE;Ϩ[wy6(87Rc^r[;OLwLVw#H]-,ڤr jO6_(sBCosi|ۖoJaإ{bl(fvNۿ'o'.NcmMpNXSrRKg l |ދ:68ߋ:Z?ESÛLŃ}WD㡚Swyv ?Afy|/;x`~s(>>,w~bsxxxxwzY |5rv*t]#Al5ݏ햗ޖwXދ}jVA+MF X9 '%NږӺ.mJ e7BGGy{ "K9}U{ [J;.>KoYʒSϡyhҫN;r6)iպTG /7sNuOAKEy\|IUoOF66⨠&Y庮GƗyz!O'Wsm{4>׉ۉ=[ !NR}IRfg1N9at,4{Β8!rv^㑎~98!o7.x#Ѡ}cjt3N*'Hg'4z?v3Nx~~^?o Oܤ :M?o ^OޠIhj~O~iY9u>kuDM_}zkz뭟5r{;5yv޲Wк]Nk}uZ׼5_Bwt蚳_F_h;)]taۛnkD[|aw{t Kw1M_RPݸ"?Vή[k%|taeCx~$v׎\˰bޤOJ8J3JM(ER)}[Ŏ3C2$vʉM)04ݲSu ;HRv¥k_*Koe1өSUJKv*u7RfOG㔰s >Nr_kU[v5o8FfXcqgao Wp­Y_St P?m8G>+zZj΄q6ұ:'XomO6 ?}~p&<<<<<<<q ӆp4᧠~i 8S @?m8G~ x8v5'hO5' 'hOA']X?m8G~ 8vZ 'hOA'N'ONф>N;-s>~p&<<<<<<<p?v 'hOA'X~N+'ONф>NYg_ 'hOA'|m2|Mxxxxxxx)ib„ &L0a„)'y<rNclf6㷩 2-5ԀPj@ 5~PjP`O='PhA2׵joSiY/5ԀPj@ QC ) B}Q*+{f6;~kQʴԀPj@ 5A!SA$p*[|-DPj@ Pj@ 1uP{!N X` F ߦZԺ2-5ԀPj@ 5~8jhcnpnrQo_KW/5ԀPj@ T#X<@ qy ߦZ*5A 5ԀPj@ 1 ?'hiԀPj@ 5ԀO pT5ԀPj@ 5 8SԀPj@ 5'LPj@ 5ԀP3j@ 5ԀPj@ pT5ԀPj@ 5 8SԀPj@ 5'LPj@ 5ԀPc5ԀPj@ 58j@ 5ԀPj@ p ԀPj@ 5Ԁ5ԀPj@ 5 86Pj@ 5ԀPjplԀPj@ 5'pNPj@ 5ԀPc-ԀPj@ 5ԀnO 5ԀPj@ 5 Pj@ 5ԀPN 5ԀPj@ 5 Pj@ 5ԀPjpB 5ԀPj@ N 5ԀPj@ 5t儁mXza7:|W1\ӡԀPj@ p (nlNl4:z5ԀPj('Г] (bEMљF盝bC 5Ԁ) f~FotѹPj@ 58ar终\a7謣sW1\ӡԀPj@ p v:pPj@ 58pMPj@ 5  k:ԀPj@ 5 08t5ԀPj`0pPj@ 5Ը!K` 8DLMPj@ 5ͨ`63ۊ<Pj@ 5ОN C 5Ԁp N5j@ 5Ԁ k:ԀPj@ 5 08t5ԀPj`0pPj@ 5'`ӖԅwjX^FJ1|-1-9rxņw櫥/;`5w85Ԁp pC9!:(e-ppPj@ 58nF ԀPj@ pP-yaWIgئfJ6eɼ SIͪ%heYc_[^J)K[uVӊbh;(νζVpPj@ pB8I9," d+_.5p'{kqr#ۖFѴ. :8s8 0֜'Xu)ZHHotN^{!kMʃYֱps`ȑˊz&DC;1=%J^ܐNrlKbTw85ԀzWh2=?su*'Q9A^Q +M'8  pNt^60˯WQ9Np֦iB+v5gc+_uYˢ)a$pB.}5:eA:xl˲~5Ԁ7''a׍P)wrN ɾ0J#G~G%QJ!XpsqBguKq4|@<ʳT6?bfV%\~岔P>1Zj7/(rԮKKTѸkiXx%a16֖|~q.:bW|s B;sRߣGܮ헦z#:D̂?/mhll8VkcN/~so[ \{>\@KAoVY|?K=j@ 5X֞ W#9F9Km4@P(S q4C J!)Xš#Z"D@0uW{a _77Y4/1r[K>ac'(iUF%ӠRL]O;√gmjh׵ExPj@ ~G7&; s5b N`-%𫜠l1ߋ*׵tnxNBW(F„88, 9$NV &EQΆ4 ^U19a{F=O 'yCŸkF,nվjw8ԀPpc8 BJFmkB'!rhv놳 rBJV염N'D@Kz4m%0lK 0bpPj@ 5 8aN09by'884di/\ޑfR8A}{jWy'$E}?i:c {5'`p{ ڵĆ|$=fNX潰73#*FnhP5KEԮ 4K eԀPNY+ aa9! R ?yAuè-' (C q:pPj@ p8N NZL' 0Խ}>FO~蜠% GCpPj@ p8N ePrq{!kITRz;ԀPj@ pV8!"0!9-88!*a4P^U:5 C*3);pPj@ N'`S@+aš13fNЮ)jөǬyP q*XpPj@ N'`SA3 FDq}/ #jEm{QVQ.4-ԀPN8'B3 Q^''D~jZx>vN42)5ʘA%pPj@ N'`講]>*Gƫqs#778&UHCDn88^ 88A34DFYh?'Nj@ 5 lsBxߙ= )&e8a<6L ۖq%ihWжdpPj@ N'`7'D~#-&LXz R~0;l{e諽^#ƈ LƬ5?F&Nj@ 5 rBB K '$7z7q=SCSj b!zQݥ/P#j̐&~6피GkㄧRWal(H] O ^싯nH==d ijUJU*x] omS/!m)}^4DHA=DfĔ| 12܏/^x`0 vc 0nO5ԀPj\ 8W15ԀPj 0pbC 5Ԁi .N}^>;3߶{iʇ%eֹ'|n\ŠԀPj@ NNXg >/:W 0pPj@ 5r Y/)Kla9NpMPj@ 5\lk!QnA^e 훌Pze D,#EޢsS v2c*ۚ\{ÃpPj@ 58abv]Wh]&|*%)Y ϱw_z5@JWxpt6;mq@[ˬIej!)5k(W|[X^<^WB0N^^oWCNU j@ 5Ԁqٲї m{KLP3P~I 1:['u ꄙ%\eXm]8B*dDq:fJ\:c 6kѷPsO^۟ A 5ԀP0ANe B)c}Mȓ",6ɭzJ rrB#s 1@\N8Xjb /5f: ]~ t4ۥKɕtO@NU j@ 5Ԁ O,2>ܶMGu 'l 1'xGї^Ɔ.>6xX{ [FpBA'T~u|M|j/PԀPj@ 5 #{Ѧ;~GׇxGPSh ;Ruvb@pYrF;\#"'5ԀPj@ p 'lifO(U@ir%jl0QIqnO\ѸdI ~ f?Ϋ|'mI8frW ^|;+,'5ԀPj@ p-xR/1ӢB3sN(> K.42\Ym j0:V:5E^TDN5j@ 5Ԁ ԀPj@ 5 8W15ԀPj 0pbPj@ 5Ը99' qK5ԀPj@Q '`hO5ԀPjL='*5ԀPj@ p8NU t5ԀPN C 5Ԁp N5j@ 5ԀljsؖtQ-Nkr3V/fhkԔ2nbmE*h5]<:tU.6sfCu/P늾x&eh ߖK_sOMEVqPj@ p 68aqZyMxՋͬ7G?9wkG=*2 k{'.fVbq$[^[jъB8{5'`1sŠL-\hUIo쵦'~M'~5Ԁp p8\#Z3,9/dX!s_4M/-xDjMNMk f~ QD^m9鋡\lޱtZ RVenQ**WVå/7xUjI]GxijaƆvJXEB]d/(e ,)zAyxTڢkUnHYP=m>MN֝+K3\~GmڋN+icIJ#WZp9T8{T{!!):31;mGŸ0N.ؓmv1{,ff[g:ӎ '͝hu*f_95nr&w m6ۖuns}`8pё2$9gi k9֙N5]5g~j@ N' ׇ\b?)VlқLͺl'P,BԞis+*4rˊE) ϴP{.^4Domc)t(@ŭΤd5 6DWs&zIjPzJڌf*67@pN`#.ʩ%/fU[c.Y*&SoJBUv|KEDZm3%TZsԊm:VB^f恌jm e lf|z;bd ~!뎱hcVdtζ}c*0`6:f oy .o[ sN S@E֔ <ݝSz#,|dhmQ_1 3Kf %/[56+fiFQpz͞g@ 5 8zqBSjqD;K)urNc((.Ny(oEV=YTK^̌gԍ36YUs\MzR{Sg'~`5;-)j6Z wrs+'ɛ"/2(pL`wզcL4㘣;P䖒}!ζ; q»W/hOq=*q͔~)~>C~]+}ei^mo  xt@=:9a1/ڞ ~Ԁp p8aiZ^6kM8}9A(_ ־5ƞ1b4Nd~Gf5?%)HHn^pu0 ZоU)jr#"G#D?Pj@ p8N\N`%=$_da«SXy59Glssj۪}G_ [$~NmOqzu1uwYG\[EcWϢiU8f>\4J{ _LGظ %͂e:S{Bxq/8fkҗ.F 6*a@C lQX{f1 BdC '. 'ptPX, Ԍ@#{]l0ه4zls:bcx8怄(rw8=q ;=fd`i0 c[8S6;FᜠQ-mQbEFy {D?Pj@ pTѻ:GΫL^aF;>n8`hs׸5U֤*{c\S@?8!5Mw.^^Tzh^.i˥7J1bZbCfU᪔1sv ? 'lIc7V1&`A>dhb*&{Q[˯?MaEmCdpmN@!JԾU.61Vm)^N 鰏Z |v߻eH<-Ot{QE]R%,ޒD# r 8s7NFNEpPj@ p”y'<&/$̺02݂{Kc۵҅DpThM1&\ŠM;ku|¹5ƴ_"pBr9@.,f'q&/ejaqA_{Enzζ:˱>5Ը'ss9D5~ݳ :qD#wKed/\+Ku>ǻDk8A+ND+}- 9j}d-* ty {@⁍pR?c[Sy:8=O;Ь5pSfK  5=ǚDA ŀJ9pNٖ6t*l.ϒJT_u I}gl)gTS , C 5ԀP0qH7pN{'B^R%m' ae(q'X=^V;{w0\;~u'(e`̱DruJQ%crpMPj@ 58aLOzj}4:<m?~K_ WvyR ':BodMbE5zDkOt'+mf$F43;Q#*@ U):N'5ԀPj@ pu67Y*< 4`gNGBhD\VlaΙP{ R3JHX[蜐rܾN'5ԀPj@ puh[H(]+5Q:HRH]DꦥEˍ9O5p.6J@([wD^ N'5ԀPj@ pz._l0WS@9,s㘓8:.7qSW5|i[R-1j[hSAysa8|v&i0i.TFr7xjwN5j@ 5Ԁ rgc 4Dj_Xƣ\|tAzѐXPŊJ֋Q'&BJ!Jջu%r+;F2/ԗɟJW55x6Iط\9' KݯpMPj@ 58a2LhpcEkRa\ŠԀPj@ Nz_Ϊ~0iѳZH*a[pMPj@ 58avo 75Ao߉pbPj@ 5'LUNp5j@ 5'`0pPj@ 58pMPj@ 58'5ԀPj@ p N5j@ 5Ԁ k:ԀPj@ 5n4'aX9!36Q)SӠԀPj@ q3 x5ԀPj@ '`\ŠԀPj@ N' 5ԀPjbr~S(XyIENDB`mkdocs-1.6.1/docs/img/search.png0000664000175000017500000020303514664334534016357 0ustar carstencarstenPNG  IHDRZIDATx{xTս}s=*(J(^)Ver\&I~\&_I|c۴9ZAmF1X ŀ>k%I&z={{5^{g940x G7xW`\+}zby"Xk=Qpj85N Sé"Nq t``?ov_O8@ݾwB{+P`Lag(0}?5xU'&?! _0oh͛~}3o[sOaaƍ){{U?sEt_|*b|Glmmݵݱ h˗?8^{~Kq 7vmiiid^|~e˖x"7;vcKV\r! ;>Ŝvss|kuvWXyNZ]f/9_keEظW ~s6<ܱ]@~z}wȳ-[Ѓ^z'H~_lذؐ$]u](;H;;;{z^~rrr֬Yj m642׏mGzW'E2xZBGU=wiiםZrηչ[!>8vG]uFwsu::7=^XʣB`?Wzw~w6&O~?k}qw$< 0Ia@1xO8@˒>u|Gs_׶?t޻;d%+CʣB'~hѠv3@Ru_{䄟H?3O~{o_{1Q>5xtW|: \U}4< ;vhn{mo={II})?zo{o&I<ܹ3mk"(v0 d&i<}=1 d_A;v\>;o߿DR ~cڎ(!ǻ)ee[HA{)LJ'pH~ Ũ=~mGsAϻfOYv񫯾&g``@=>q<N[SShnzU(\,t3O?qG}q_^owKGH2ai_^Ș{{-?/i^/AYZg?]w>끏k=- MGvz.i0Bi|C2=8d̬gA6y !Wz{L7 *K^f}$+5}G6oWt]tP233_@de3}ߵk߹SNQ1/w[UUU+-dGD&ZNN{9ʇ #:Ӷǔ3hEs;w0$GŀS<w)ȟxw4(Q̋/::G7dяb6"v\PJeCN'N2;y,vv$;;ԩShz#S#ӳ2[V_wo|]`MԁJ$Lq2 = 0(L3G]-/I'~:4{Tz'nq{&11OG]z$I&s')<)ږ愡o (駞Dv_YOT((**ڴi},S?ω|k/LMnced6a/z%;ɼ7?*&lЬMM?R3#%fCɅ 9I)z~%(f|-z@Nh>G&##FP`.N14*wժU>n'bo6%,ر:ڣ>?׿utc4HP dmmF&xy]QR۷o^}~|> X+Wx;7pMCKhI~^~2E&ZN4xu"|7UO.M-J4M[r.Ƿ殬P>G;$I>b&=+DG{c>< (N󾋨 ?sϣ>*=zݛ8?g4)#Yxp:dV__l{E,d=uV*zLK|'V|KϾ =;f g?糇o~C'/-iii׿E+Ps=7N{T1um60EN~+p~XK1 >]9LM@ Oz駟W<񴐆D17oIiq"|/(~y~jMlϑF4M-~ |dӖCQTEss_W?EGwMV3? ssMLqIkpIcC:3 aIweu7'N<8"gh_,?+6xJ)=:)'НEki|<'5%N/*RPO|RJFD,W t{^4r_!Nߚv)yI1iq_z'rxk |駟Bw?$;aGG׏ _92ʟPu\[a/7NMĚ95 OOR;#x㍐?zgLސ77TDZi7>Ѓx#F9(N Sépj85DNooI(=z;oK}$nHK_%,X(vĎUUwl%XY3dG|m6t85N Sépj85Z*۽д-C ;!ˉ-9p@x|= CiXr@Z*{՞Ȼ:<Cyu~(pj85N Sépj)sjOx#!!!!!!!!!!M[o300z79_@tep)&+=q&N3yֵ(υ<H9rȑ#G>Y$^6x3x)H)cHHHHHHHH1k]HSRq)&+%n s]ȓj"G9rȑOVHSR&%%b;:/u!MAJǥDBBBBBBBU}Q< tv2 yi'd)cȑ#G9r䓕H19 y2x\Mȑ#G9G0u8';OD9rȑ#Yy" >yqy1x\Mȑ#G94.Sq5#G9r''Og; R"!!!!!!!MVv籀aHHHHHHHHg_k뜗D2K4Y)A7NF~=F<{yy=ҟUȖ\gV짘g\㜚< ȑ#G9r*O.7]?נ)`K.גWFOۏ8i:)e ~|UJ௱u8d9/_O+ }6[@.<-Y +~$wOqNM%_PP[NpQS謬9L|b%]lG{<۝ShtMl7Wzgu9rȑ9UzS;uwZhmrul rX,Y*_sǍULr sIcלE,paV v׷(--ݬֹn˩p/1'niȅ;f<ճ7Q66drD|I?/995y|kl|Yq >pqkeY,wNm5ku9rȑ^pPfe1ZQW.hsř}pfǒbK 2=94 rͩ&S-_%tb֓lI{9 9zZ^^NSR[!(+K0Uh4ջy;ldOA8^QZ}krW-ipX7TZh'EZ2Kg\Z⼬b6Z]@˲wPMU_k+3[n{`Xj1خ`?W6X ,dXYLp2X }X!ϓ8M8VgK5cXrMA7֨j`<)Q'!W |Hcr3*2z<~Fa&njg_Uj(:{uvi +[Q2x2z6}H_܃dE*.d霝i+`!#4*ԗ]q|g箕A?7ek*n/)p9bùd5,*IW?,U)fު θXN+fcy |\t\鼆oߔ-3gBoYc͠u͓)^u\ӒBw=vx/䗩ZƵo2M$k7f'&#G9]?pq-. {6VZ6vamV A/6n-v_ >˅re:&gmX6^eYg ˺])ǻ*zsZ vu醪ZחT%tm1[XJrɄM︎2 E8g9.Ϸiru{ЛeW_q\[n6טVfU_Q=.eEgҙ͛bo7U ejsI-d[ݚ]}EfJVXf3=Cr{%2 dTm%46VX5)GeN6sMqeG='5v'tkF{d9Rڛ"$>cN;:ϑ *Py=u c5<&#?|T9tkp?ω|rrrŸ 3XjS] |pl#׸mwFZIJFnKM~*֋n+e+*f>ץk{nc{v6 ]κF.9޺|pxko[,l>>/[.2ndk^.-(OW ߃e.ۤ<nd=sgU.hp9rȑ#?sZ"gdZo(4; 2lR07D4}nZmyymb0r%i_mݍ6&ۆZv;W^ẚ>Lynap_%X' 3x'ȑ#G/>P_"'d^ޫ5[Ֆk[nMQg^3xRiLz36KMu%k{V \; =y%l$rݡ[:Si>lR)Hֹ& ~ |M4՗n4(MbM#iv0Z.dFd_Wm.._`iג/ ^~!{l۪Ź5wY}u&"ҰN˗lyȵ)zgyn6bq<9l4{v]$S2k*< f:_(<]f9y@rgo?ZgO8Bw?`S5Ƶ\N7]uENYaʒ%Cיƕ ~IE>/4&o$k2umEchl_ys[dt,wgqցZ 0/6tCDžB٩zHW[EneV]oŝ[ϫ%cL^MF9rSg4B|uݗd:Wżvȶ{BiIe.$qo`V\ikFؐM-6 7_C,%;jPs0xiMjl4.TI<ϽpU+yzmsm3xe[(=@q*ֵZ_r}ܚo2ݕ#w|7DrQ+oe7hJ˯)g}e:_d]O/A|M5dw&. W붳AȬi4c=ݐ/1?i^ h!%`O!&f[-%Ҩ ~wԛsBYnMl]mst5&ܶgSwY]~kc[H^eFBBBBd9iWS?v{uyկxu:q"{]c:_K༉)(PחgXS1ȧ( ~$pCY&i0WcpM\U(H"GѰN7ܬbk3Tn`nt7I+TnOf))\4Ϻm9N7vu,3 z|@D-%p}O2x 379+XKwFZHٍV%%M]{=oy%Ĩ/3خL(> s:imD`O/4xD郏4UE(lW)ҟ~X\HK~_Y ؆䇥 S\g}lXfYΣuWZ:x^jyUx^UֳO$dȑ#G>Jj 6XXfEx/~X_;CզP b9^-[(՞-۲V,Q[$ %/yb;,,GH[L%ҦZ^UQV c< ^JW^=x֊c݃ELŚ:A ?ecs%\%FV=JJi1?0A.v*/aUK?oNVJZmA9rcOXw[L-t95礡>|yy[Sdpb"_jaτy1x\Mȑ#G~skΛfNjB\ ^R&%a0x$$$$$$$`@2K4YiсIy"}JwWy1x\Mȑ#G9'bHIO)dHHHHHHHH4Lwgy1x\Mȑ#G96xT)dȑ#G9r䓓'b;Wّ';OD9rȑ#j(X߀}QXi;#f0ҀM+j}ou:}q3 j(8BďҀ%4vSBÜľP󗕕EMxj @iQ#;[&ICdӦM( @iQ:3:##f&RHbnx :t ^tyJ03IKKDK#a/<42J~'8Ɇ )솇þ`Cg4AJP^^~]w;臘D OMH3J(<|G W^ `frwPSH "57P`^ Cu. >pwl6^_TTn:|P#HM!5"Hj(S)] W,i)ڏ1(--|~RH"5bbxþE:4] >l/))Y~=>XP0+|G:/摤b<lR(攄þ`Ci}l!eڵR}Q+DX `<5S }Q+HWþ`CdMȩS–|Ilʔ0xYoTk)YCG4-u-Lb+͜򲳳oD>>}WᩫY} ?8_ O]uР ڵO>Q{={5kafTeݕ5g.]AqFL4Uy ^Hmoh&qj/Ya^Ȟ}_$w}o?}' K'~ ?*~UH2|AA}~wGNxl+-4:ޯN|+^n˞߿zݴK?,<;O ; O#h Uݻw?#< =oz)xE|}lΐ%?}}j=Зcؒ#A:{^WvNm=Xg'$W}!pB:-|%&1a`ϿnPa~kN8x9sR~`[i6T yJ@΁]|oê ;&߳ee䧈Dwz@3GU$^Na0qlxdz/ u>ĞдսW{`{7=rϯ[~~+/ ^58WhυQ^7H#0ߵ"}bIo_a0x< >G>Wފ 4?QҎc ~ut`/mᱝ?ˇq=a *yϲ;v,]agIf,\.xf/;WSzH#Ҟ'ij+ Uj"FYW/80QgI?g =( "Gؼ?Zzpϛy,֧~+;I?v-a~clUGTFEy$+ @>x#̌8#n1e?7/~NR6bB1_l^رG|qE3l埾hZM^Ϧ_zQ4`0x< ?N}W$q$y^;C'g V妷A52H>[?yxS4X*oqa0x a0x`0x< a0x<0x< ` D,upP]uE2dVsӻ&=NwL 0x< ~ ~Uw㱹a ,`0xt4,_\Cj/ˊfNRfFooԊ"O/uyђ\<[Y,[[f h<}!\^-t-䯾c< ? ~E<$һ,9ǽ&7mU9\˼Q=69΅Z7;ύ|Qs7HK娞L { a3Wyn$3rYɛ<0w,fN_䵍E]*%/7duثn.ۅw8nJvK<gxv;o.5zs# ^%:2xZκɝrXϜ[|7>q'2-V6a0mt/k 3TjWD3g+cPm0x< ~j ޛ4&Hi%# ˟SgEEchT_rǹa@UUUFxj1tN S^ҐI>x凜O;E1x6Ga;fg9()ǕuZ\Gɪ2x5[B" }拪sJF/.8eM(Uɽ<78dz6I*,a 0x a0x< aa0x<0x< i  a0x< aa0x<0x< 0x< < 0xa0x?cJ0x<¬^ZRkXZZZ^^n0FlTM'@l`(< a0x`0xFj|M{ycvcVcA;>ݭcspa q++u/-[%F-Zxg`0x3xͽ ñFwUcv 0x< ~|YcV2tNWgyD}kEqmH ݫ ,F] x2/SgQsMBwsc.O+%GTg<>\'<ӹ둴ݻPzz}ee2` ΊHaeUxcuȘ+5Non 8%&c^^CqG/}f#kCO.qzn8ӵS}!rX5|F΢j_p^)>p;>_ncV+42eg/:Wh'| ta H]ߐS$wr?iLsf3nqgn/DysVz=_1$|t 3LWXm5.aNkv+.pk< }}\e gTP&$;O gyMeMp;WIss ʤ;22xIНNoF{Ekqw||H>R밟|wd?=U"8'ycGE 4R9"O"ੇ{QcD05l m|03gųD;7a Hha]춨Q4pNY삠kCt" >,pYܷWEXX0x+rHVzd-eZ䑬6x]!Mw.1L6Ak}:~Wc,ϒF:-ol>a ҨOdeSF*:&DqNnluG)#zL2|k g3t9|\Ri}-:gmN_!uu T|"Vg2kU|ZH6i;zaq[TZ觿|ijz Zzv#=~aKt::|U<9Z '?) Pux{ۛQS2"$v!/&3x:Vq swʧV*K:w$Ǹ4|wrQɴZ|v4![;*;yY2.oJ>D&6;qN;]zhttJBPQc;Q-mj|ز (E'_n1k_gnEMKDEZ%J]2ii5cK@o_/^X]dS(h+XUQm\飆k= UUUFxj1tN S^ҐA<8{ ~`$DU҈ޡpwVo;08ǭ9ͫyuF 5x 7@{ՅAt  u65B{{{OZ_[O@O="(xrN:\CkW`ڥߐm|))^`/;iǶAj$[ Bh` ݤ#|jRR;;u̘R*Y- `o_GZ:Ge;(-'pZ?ZW UjiD'3x +ށm?QuM4ul3;I:y:XV"}ihCFha`7 vĨWQK>g?v@`FQBN/Cq.VWwt I閉]:ntG7~Iz;6z/wAvRBc;1$2~dG"Zاp/?١ K_ioxQЁT$:[豏"ʇo[}7P+7Jc*ܸO>%v.؟DNHkiamoYH?zd3d/\w0ڃɒ9tGL:/ y=|`KdK{қK!~'u \K7P϶VWʄ!UlQȣF;S3!S&eo1OuiزIgUh/O ksBfk*lcQ u$(NQni: Tb }'m\ITCxwoS.nzfQw I,WFު1$ʛ,ꪺ1e }J'"X]ReO6ã]#^;<s&Pa0x< ~oS]iJۧA@w!۶mQ '%]cb;x?H_vs OaO]RZOp8 G[m[Zeb찫I|hjA4/‘hg`e"<70z!n %_6(vA#lCqiU QٟUc*F|Bj$mfkkn jׯF ):xJ2#}zs{A[56y< On4-b3x3{6SKarmS׀zP?~ U7NbZm]=}j셆ItZx.^^v<:pi2}=txAd%g^E o 9!y(ѱC>q\ߢE7xø ]eJ6( tDG2=^>f1_HwD1x-;Zg1,\$[5֛B WWU-C^(t ~ ^.}345_*2x^{ 4B׋B("Ia0x| >b(E;h(<  kkj}k^ui-M[+doUGY}(eEt]ad C EQPq<?mv |>dCfvC4W a}ɬ`wk nߢqTbUc)bhu jZ-6/+^{]]#UpWrXNDaN&?9=毁a0x|2 ^qFyÑӓcԞ3-͂B;-54u1d|Dj^xҩ6Fؚ9Q/z,~hIɪb#O9]LCwGFP>PqC}l(W!6ޒr JCy0sN[? -7;2CͭhCihXEdK7ďn5>8ȓn!)zfcEQd WJҙы![|BeilQ:3:a=)jfikmA1i~a 5P܅x014 a0x`0x< aa0x<0x< >orpӂӕn,^ɛ_^嘕.}Jw--9fw42 a ޛ4&Cucqp'W[a0x`_PPP\\\VVVUUe4IŤvv{8aDOyJC& 暟LwvkU! Y}eEiC7X|Q4UX|JMVs~&)pk+rNXg6Zl|+*˱ xB^wqXr%^OD3 >xQ4:wWKoݻFK*jr")qh7rE+RVЕ|>05<:fxlx}nLO%ͳ"mE+Kr5=vzXT)szK] ~=8r< #Yge:E97xg[Ggz9E^O}!+d cv{f8#=lQ4noFF>2&lݽ@s]G2rӶ Q4 ?੃R/27,qyg:o<6br2\{U[\Ksy,ې#i؃EK/ ggt<4Rcl{4e^Ln⒈<ٹ[,'G 1WǕ9rՎf} ѡ <  >j.$:Y\B~k-w^p/e>骣bq2J˽(yKscS+Q44it %ߒ5s >={o>_S5:P4Aa1\斲Qkl!#YX^qlTUɚʰ/d-.Wo#e->WVfehYb9L RFyb&ác;k^o0j [zGҮ-A uo=}]v$~ 5۷Vkh{-[|z0V`pV< 8'v zos0uFms/IrUѷt :aɲ5m==CC~ 0Vf;mi:y ==ۚt]3m qoc+:gdϖv li5a4a`84IB=2?"oͺinBO(-fI'jz-G+]|rN7C۵nmf/a2Wϗu gEi2x}]a flɗ{;۷4ՙ_pf=i-l soPg? |=z]sj~Z/4``&" hMm}}PYǣigpp!< }C0wcǎ-05PCM5@ a_3rP x1L P3A}'֮];eJҀa_0x!<}aC0xa G0x :`/< a_0x!<}aC0xa G0x ~ .t86>L&SuuuEEEiiN˻ `fB 5 RH#5PRsI&5ԀFF} D<>xhP`0x<|G0x u`/< 7P0x!<}Q`0x<|G0x u`/< >I;O7: }cGćfþ`C0xAXc#Ouul=6 Gs3f~v+^:6 ؗ``/< ^?~9 }aC{w#``/< >~CiKcj oq5|/ =:C?;M r_6pf4ͻO'~()9E=%u9{yYڃ~ ` <|1 2r;N&`0Ї| șu;?o~ĉi\}ɂ>|e\SCjK|籸 Wm?p-x}'~G߄t?v;z?B+ۿ)7G>=R;pd_/v(胇}Ͱ(SCgEiLΫ#{eR^:p*SQ?T7UX2< @Eݜ:΃?4K6ORKlTC /KeS$ Z=Ωq~}cE$ P#}Mp3_piLsf,||Jmԃ>ё`(q/Az?0 G: ^RmiBٕOK1cEs >ō`u/Ww˳[ >pLGfþ`C3)#.H䁧L c%I޻`j>c9x"i恓'M>i0N.a_0xԡg9$~)JKX'~ Enk֓r_~*ff9OkNSR>POA\)ӔMa"ua5!I:mݲ3,~|4IwY55C95PBg<5w^ev!?NV:_S}]MkVF彍H+ @ x>q~rt.ٖSi"d\4/ܝ/W%}}bno}Þ]xzG!xyq,O1tAA/<|AA xCAAA}C x @ x @/<|  <{?X9F~n׿~_>? OC! 4,HC$ 4\ OFRkI&"5<A  <! ÇC x @!<AA?$هޱ5@A$x׻ƇNkC x :! Ç@ x @!<A>  < :vokdqZZՎJ6; &ZS8GhS4:D;tunz;+}5^uQkOOo$xN8*sB&ċNu"[Urk`+.ˇ7{r'{̟N,d]"gPu匲`Wk|Ɂ+o8'E X ҇>bk5е\&km^8^f8XFSjJg82-2G6՝;D~#}'JD7N lN p"Uk]F6p+.壘=9r |^V;VZ13 ,C,%4F𠯏 x#Z</3cЧ)~2SK'hw9 l8Z⏻s@ x>  ~J= y+x3L %*ͮf%ZW|hC}VVsh ; #O<մNB TD8BDD) QDxAGh?Q~G((plWXfZ[z aa]U2T9( w>k(@54]sФ>̍g_JpF  cDS]Kk#6{=g2!4:|8 d[\ʠYcL9c^ִ*ި5c={6V D4ѧjk*NTao-'Kr1:QƩsc HzodL fz+h>שW{f^3srOhy6)!T|Jk8q<^43 k8A pXQ a&˙V_QE>_ )VtE/[OM^gA3:XEuӊʗ_q~ZNȯe'& d&kjMݰ=n".3Y/Y) g(uu=rv!.*Q>]s6l'9/JlC}_\5sXYuͧ8 xGO1W1b5k&qv맟~O>|r^?챑nd8d h0 >ȧF:pG!66cro /MS5 &8@m1Uhv2]^cER1Y^J'#i'2iҥxh/!_2 ̮2b<'OIw|`+y꡼ߓ ,eإ|:a() z*竽4底a1;9>~rEcId8^uyQ44Ҁ(jo%FRk5YGH{6b U:[UJ>=2KHj)Vp1 gȖ9cڠt6a٧7SCUj(#q־y'B ,)%mx,Կ8%+GoO4*: ڲ=Ud njAj31CԘ3GjOH`WV`W{u'ի9kcy&&5Db1AWvWRg-PuVyt:Y3Wf'=B SnTz ԔɨL(3 y .CÕ >̀5sJ#Vo 2?Yq/DpE}O)BÞ>XT_n Lp&0#rG25=YDF p^ݩmP MΕ-z꯴zMCj)囪7GëDe"ŠWYSZ# H6zlMIj %ߜqE'ە)|y5 ,K)w3_V>_YY V>w*_z^'Mc&nTZa<.ۘp?vͪYO@ʋlX\ W|@/<|WAlq5Kx6_fNOȟ|bp& mxt3Tl+kfm/KX/O^'7iҾ zd.c^3O챥R<6UmmS/|{ԕ+z~ϺǶK:U>c6|ڮckϙ[BĒKMU'ޝ }fʋ!%SDvBɿ/5Nu>OmֈCTM䊥$yJSS|  < AAwG>4X#k <A;7` <|AA x>k! Ç@Ao x)'hڕ>JY}@0??O3${o%xDhx}>vOB&qԉanwl$M/+}=>8<ߡWxO8A/<|A5>.w}w޳ x{#b%W$!D?g}j |r^?9zH:D#[7TߢϛpN4:Cӏ$.(-fo专~ONݧ2 OVo-wwFW"ؙ4H'ҺTgF7QIkCg:+0r Da(w5tBUafĊ PH,^/&՛:oFW# Ͷȁ1&Mi`nֻ}aMQ4FNO#of Q-O2U6S{9SK*Cz9cX ~k9ZNM^qN{zddPJT<sHŴtCt$F=6/ =`eœ kw`vVI5i 'YvjtUflu#FxQla["'=N)5wwPyvƺu8ki:1SKr/G-,66*Gcy0aLmV+waG]>.Ğ%bsU'}N.PY\JZU~EnKg'SKL2u t酹~)^6hm= 2C;; c5}O,n`&t],-g{6< Q4!Q?R%NM'5ȳ ObCZ 9vE=ű *| 40\Aеmo9ڪ0xy*b- bSO˾!;ey\+~8GE_p!C]ܿ_pm67E>OUd-(*nٞ=pQ3A/ |pX}[<螉`M#)#*bc&&A>fJh+Gۈgcڠx x`Ț"ƬG!O>7<7.Ö}iPAx\7fC๹d 0^t}TX?Sf)%ms|w. fPM5g>Y,,%FYi3qFzoPu)֛u|ɨ8* >&P$[6:8OV|X0zMv!Ҩ!SgY$`uI +W?v+sgB~EPJ_T*-"w##x@6_}|<-#FZ>τ-UKnuCʯ |z(!U2_Mrճ<{&nBawUnsI/r)/̏A_5@-&"ܽݝp$2[ =fd:[('x9LZAo0 n(6hZ2f!U=\DI9ёl."JnZQ4NxcI=%eja{i9W'Nk5 QcpM}^--VIN>ӓ \D SclAUiX6&=Lʑ M4-p+i"u;4WU!w2_^bMOv^[/F[wٽm׉{|nESq_vQU2_L< iMS;?(9*+]}+Ǿ-K!!=j *Et?K勶bVm9k->oVO~ x(ڮcFp/DX϶퉽bLt661ۊ+de]Ct*t=Rkg!jZ0p')V`a9O0tgi<pl4<͖ӑ~NVF mM|;YنK/p|2"NmdglXq'kk`:ɎAh6߯u2nM6҇,ێ;Y;lrnN1Hqɠ_ݘSL` Ttfnb %ʯxmbnm9^y8KM^r\ۚ?3;YY+Rv^Ul&q }C C|!4R<ϤrIޱ>3X] 쨚X%H5D&tSW-VV<5ZQElje5Đa+<9(Oc M/* ;yMU#l~-pP~¢)%MvIO^8>E!ckԎI62^?&A)A|<%"P8dē*qp" ,fke$yF2ӯP-+-&e\a7%!uDѤ_L'kؓ[ӜɕEls2e ^V7+ET]qk*GєVQ^ tw|Q49ؾMvŔ{BKEє]lIm&?ۚ&)BNqҍS='|۲ӌ,R(I8}@!  < :С  0l|da@A xF$(5Tɪt8ϳ@IMNtm\X%*I9;5GuuaYZG-%2W#'C:A_Qe e;g-wLC  <@G&J1^h'jbգ5wIHk/RECEydZ1 Nhm"Sr'[oG%n|7 '(A!<?p?qACA!<@A x<@A@  <@AC xAA xA x C xAA x<@A@  <@AC xAA xA x C xAA x<@A@  <@AC xAA xA x C xAA x<@A@  <@AC xAA xA x C xAA x<@A@~ ~*_X{j{[X[Oꆾ"ڜ[fpp3xZ A xC)?~xs:~|u[G{g~` A@>%_nD?o ߸~LR~c"3T[<AC lQ{o8įAA x<>#O!@ x `mexϛG v\퟉K8kl^hyl~_>9NZv8v=ڽ|}Mao C x^hWk_PutoV1'A|_邃|=K;<ş^(M%ym9b./m~u$]\?e~'p' C xDEWLk;9&\?!"9R$'ZNe*yh"ziz#vx Sץ7)A@D ~k%q5A,G6wlz<~<9ˀlޛE:'\w9[ 7WKR?r{ !9X+EwF7-2Oka|Q~=^.TYY]9!i哊'C:'}2  C x_'qUc7{1RuRI.{k"mc)^}j$LHo\uRsE2]59"_,LK}vя[ G_oS0`C!<?Ͽ^4y{'Kdiٗҩ$dq5}u.~dEʯ56/ipۍlD? q LƯmgn?A x<@!x;zcZ*gԻ4;hv}g/LBK*ŵx<]_@4x݃u,ō2^U:IXl9!;LLټfI'ASx pc&X @߭*If @l/׿f}l-A@c#??A8wO!lZѓB! <A@Go${Lg nd @>B}[_l?t?T=@dҽCA xAi<A!<  <C x C x<  <@AC xAA?'ҥs_?5駟^_o7Ɵkw!<A}$?ϟ|_V%?s:itOtz?g' xAA x8ZC x Cf%i@ @Щă!<A!<CAC x<AA xAA x>^]wyZcF =4;‘3lt~ NksFL[&{jTldMBל8*8N&a9ט#[UB٨u魦uȑ^B14k%T1Ha3߬z/*McLYkK|?X ؓӅZڂ[L\!<~f*F0,G3F]O_S'33utv#;8!a$D!m7,C?L'h\ >~C44,LlצFal/ &1ԄZ= !<όˍPގg^ 7ZIɏ?6,$6zGBQKLGW  +h˹(C y-}4{#ǝ[V>0 ZT5E94T]k%:#ӧ1Fdi(c[DjLn}T2Uu \³O#FY@9|oW+ zK9eőADm!Vr5tm2H~c+U|ۓ[SlZ̏ zO4?nQ&x ͡Fg b (al:ދf$v(%5mx5ꝁޫǽWZ=]qm1ճ2&.iMuKK/YP$J v1tqx#b_J :|[k6TiSǵ4Qă_t4ˡfYޝ3q fO߬)3*D5Ґ"kfٮkD0ր5~xaJ1uğ=Q[NGu!  LV:V: F ΀+5;5xUQ=Z&whk{6[gTcZ=5yax_Rh3x5z_SϨq'>T17>5{~%V1k{l{O8خkTqT(}q}.?&>r&IO^Jv]s]#7$7v.!o:fĮNlq+Qu\ξK'XtO.(L: ̞9eשƀݱdit]{$uV8K?uq邧F̿ɍhͤWh&oQ/^=T~L#VpQ<@ ^)&-vu#T"bdVlddM73,M7}64Uy%%:]FlT"VSsE*>/`A-Q`A8'LNLB2M@.(;N+f >&~3U4=uu,T~aLK(C ߈S!$Q8Q'me|1ɟg9F;2sS/)f$Vg.]g6<՚;O YYf_~dɛ1 eż(35 c&,Cs+]4dRE:;O츃L*i_md/fo XDT~l!<O-7& > ͝~bQwÊ.[8vYm{v &}|*} k<_PI"vա>D1֠ 3\oU|ehHUoAE?ll궗mVŃXJ8c1lVdM~^ f>(q4SH~e>tXHK׌9u&5o&9T|ZM||foN1W~H~Q4N6GGlrONSB4KAU\!<0(RrחNV{h*}.VWNVNnZ4>ZLԆĹii;8fVbQ%wN_k ^i`X:an'+mmmHm%#||Ҩݔ͒NֲI;Yv8Yؠ7fہ[u)$㝬JW{hE/ۜ@n oZg,Lts7.KU-[XoQdee/EQE1fŐo:/^ke^hPqh_"ģ핞+Y" Mʒ?Ħzd OVor-u] QU3-XNpĉgSFe/;!\!q.P5df;ϒl lqL24eOR'#hٲ;!|.q{n ^,TrAi6 ;G1Eni Yɤu&F%CGքu07Y^쉲7C|xLYm R$,Tle'I&e ;X_߻೦ u5iSkҼE &f/{]yƌպpnF宂EI,-QLK\-Mr`Q[2=16<;Jch8M!d&ұ5jKiOڅlM,M}`&+dUdhmSdkyi"r62{f/WwQ<@X +f lk$Y ^E[-;IQ_^!69SsLeM3]%~pԆJ)S]T=y IEٌ 0_Cci MNDU4ڃv>CⷦR]㖫Akn$#f_qZ]aOh"_oُwT{hS`4,9tF6> ̘}SljGG^j0y{UeHV$v6>j ]$ @C-NTڤvThu怜팒EӞ"ˬF~l}$VO !!q|eT YH3Mua3Fdѭvy1VԚ.ny6/= &eLETPXw# Ԥ:]8F.Hm:g{g ›I,:jqtJ]490BwQfg;YY!聆(ba58c._J-sY5X,2ki{MeX؉ _Uƨ3oEIeG/J c+pKXkY #HЦVfauJ$gLlOְsO&=RkSםq;)'zϘT 5Z|בGO-;Ol >2|ۇDJ`+Nҷ#0!<?VG!& O͎@#Ijfeǭj7)9AV9Lc4 2%Wp|[##Y Ȑa1y"xiF4Dڶ.KbrŬ=[{lL(xt@NpA8|Aҁ*.7O'(w™ES9dhf :mX <@L>e 5<+qP 7HԱBpdp ;'!"!퉡 ^GL$h)Z+O9LUp-8\V-ݢ?fH^-"?nrLM7Fe0FԂ>GyZD3+MOz"Ҥ||G*gۮq[#}u<3,[Զhwf=I"c)%xLJAEv=՛ 'S zF(8@%}wOyKUc`ԗQ4及|ӱL" <@ǛF-E#` a0)R`s2DW}ǮG^EKXLM6zMX8Q`iP/C8ZJ1:b~FG,Փ&! =yMK57G xS9$EÖEWe*軅Q4v4'd2)ȝQ7MٱGA xO&< [S{j:S&'vO۴-}Sz,("tzKII&i("dXv,C/I>OK-KfQԊ* T>zdwQI$3+%Va)-(el7HtZ+m9VefZ9#Gco"c xV{KP*@&rϺ @@zwZAmM-sf9 \S;>] d,[ C x<V%~? :}|= ~ɺ _${~~J7X /!<@H_m ջ׿ sC C x<ೋx8XA@$׷{]qSFld}_DX7B+Aao38K O6?_Cl|gbqo qk_^bW? ca_xXa73=CuJM:GIZu5+s/QS5%>:Ubs|u}1yb-e%_.R%qMV%>:D𜧷ؗ= b^Q4DO|?zζ9.|^!&xVv|w=!o|/}`(A @֟YM2yo^WQΉ|`.*y[,oBo iy7]ъl_YۺJO,ŗ?/# uKHkT_:C!ɛGؗ͟!wywWZ(Yx鍭y4r۷fsd_X ?g}TvYXD _cGbz毾26C x="~'Xs##I68{o@rխr'kfίeyi_u)_]]AOuߕ3RLs%;)%~~kj/EކVv;gMw5_ۿά6>OrQ[|7?Wl\yr_q9\w)$'rrw Pȹ;.C x'ː3rӳL΍G1"؀ zm/7)SC[<^*i]s֪ߦ9J z6%<(l5sG"7f66ln6,1N_oB'!q_~[ͮkx3iAIL|]{Os5߮?Iw&/oowd,/7}SOE{Kf#쵗{4}t8;D/m^4d~kⅵJvTzui+:e[-W ?Fq]?. f 3>̮3kXۉ|:_f:{wLb?wpG_%uI;ɛ}5}^極_B=YJw!W? <@G#s]{{1HdPuA?Y,,Iv[<}ΒLno}=B.l_ q1{[_L@bwz`R=oom.^Th_v ߡfhh!퍄Ү1DL?im?4g [-U390Ir/Nr~v}{)8$5|뇭$GЙCd8ڋ-iϛܞl]&)6>?[9H@Z(k@AN>w<  NJD1۵Ѝ>DtbG4٩laY;8uZ{<1v{˸%~.Xל8|8'' p!=x C xJu ,s{nubvث#6 >rF=yS#J_N/w+|!d{6@<@ x<Zq1a\|'}= @>?O^S-u$FZoZE75"3;HitI\PZoq'՟ם"OeZZT6?egE3ui aNuJ\O >0Zo**MUZ H%RuV` -&P0n+jMkjjg ̈9/e;x$:X_L7u8.ZՍ;$;ZG9V5:'mёc zMœܬwѷț :xr}B |Uv[gĽچ0b=i-EChZ77҅r(O9ս!ݘg?,S._IJb3E;򲣋NQzӸEӞcUiv5+00ou/g7P d >[7*$v.U~ŮiE\`R/C]^zg(l2e"ү/qύ9swzzMpǬoڹ^.;pWwKh/rg(EC x,۸Lq~}t 5pJmϧT>iݡA6 Ei4_T`~54uCeS=gLSv54S A1=1v2ΩvO]ϙ 8P gb{cR{DبӐAT,VDQ` !@6Њ10&!N.١bZ"Dj㩌gq_^UQ4'3z\6PZ9??*{omLh2/~Hz Cә;dL=63. pc`j.|."xL`PI꟰ZV$nszĵ櫯9PY'x%~H癰ʏO2SB~؀qx\ m 4CA=%T&E(MRS D&hjk%Q֫z>s4{?mŇ{j#hZ2uA->ՠz^%F ~x}IUO@ofG {?(|ը7:@{e6I1uY59 0x("wk=_p&2[.>k3hL ^wc7Hlp2&tyAkwhY|]n(Y h6:!Ml\D4܉hD$uV#:m| xo"\d(Nٛ5)j-.yI8˯t hGz<$G#_DI蔠*y֍i%I=LΎ̷EjqhQ4>^{T cNy)y ֟.Wj|tzYﰗ&fb?vRS10x0{¨%-uN2T?^E Ӊ|*co&EzsX& vOu))_ܭ&S62HɌ~>dZ558a29q~+3qBt9mOZ钓~Wǩ:E"RLW*zYc[)x5 eYQ$*s=PEЖPn9QWȜ4gwVqg7F[;W0o9 <  R>\zk+ T6P}%) < <0x<<0x<0x0x0x B?P!4k&"zQ_)eWx5/REMVs_r:m_>^|zsj}Թ_?xwoTQ+ x ^f$³i,V_%slzR؟u˺U{o5(BY 5koMSb4on ~ܗ׾ad~Dž9ƻώ blgd 34'b7QS|6ox`8 ls͏ZQBUC~w %1]/Mȟcc抟E<4uA$)^zXD:]iZ9I,el~>]6P uӉ/vW>0uTOHv=4#Uv+U)UO[&^ջ6m~${qH·P;ڨIeq stȪ`˜Fs~ΪCz%&xO=mo|}eOt8Teq'{E}r՟U k qQE.Wi=iR*jZ%>F^6GuhՇŘ&o}jMdh8$:F[H?8dB_crܮλEm}T@2fn{q\g>9osg埩Yo}dǣhh- bsr,:;{y)潳WrƬ>)n2TvaX͍k xAnMZ(ͳ?_ǫM_4:9Igk.pcQ%u+bpB?ꍳ\bt]"`rokxij0Bw3_*)tU&Ά[&"<#krmPt}h?h;RF/DggsI*û6Q|QNRLyth"FuezDž(QKC}ݼZUJ;il hg˵m@23beq#(rb W*k%b&Sռ'4nF?2b?-K˕tδ[R\iBuIK۲ 1FA0J4th+#7޹"[nw!=v'}G.wV{N]|\r[ecO*YyL+zѾ/jT\'T5N\pi7 SnpUfxMJR0x^Wm֕t>3F 8=KQ\z>ލó4cb5u9"!(] O>m敷}A27]TWeD^( NUGF.I-P{y>"88߮Cq֮xwGo5'z<^j;T+ t"E'\ . cz7 z7< dewYl%_RRTfNM;s2Ys4tRJISiW ΙeYd-G֧[/6sRʃs auek{gڨJԎ! jeKQrNv, J[aQ ˣt_\7/Yyi~ #T,jCkkՕ#)N3o%/FX)]|u!9KRIz@&_-e:CSMg{(V'ikoEh<5;udCӶetb~x )6OۺvǛ} ~B]c3YCG2Y˧HDj3%>nR蹯2Y7 i23sjUvbqyISovj[n{EѴk&4$ϣ=` lXi~'clf4[&t( o1]lQ47;^;2fn;^Ӱ95mZGf؛kWQkĥx0/Mk [x9'= Iv!r;lii`U <4dkz9an{  _ނ<< ` `   < <0xI%>w1V[nA7:QYYKn] Iw0(*a< c4"\1Av\1^q]G`Ĕ 5bVLYQɈTbe^IQ_ro׌{(2 _t  rx麴<nTp|7n71\ll+LI`0x59<;JJc7;1sUyȆY7:0\vP1\-eyTA%,4M/]1˽c+ cc" \x6~ة^`< 4Gur~Gκk-?lypxN4x΅O$wˑ³SoBǀoC/٢|0u>/ qa)S+ {5XM@fȻE<̓qm~ƶOl<2#OyqeCֱRVЖd]wGo읬RK5 ֗omDHcz_( `<0x<0x0x<0x`0x``` a a  < << <0x<0x0x0x`0x``0x` `   < <<<0x<0x0x<0x`?y>?_ko < <a`- `  GO?/~o?}7ۼw>|e7,WUΏ??x _ÿ?Gkwͷϟ_կɏQ~睏??7~=}J7`>蓑O>́W?~|ol?T}zso׃,?*畯ya{Ou `1~n[z8='%Y{N۵U"[yo4o~  `Q<0x<0x0x<0x`0x``` a a  < << <0x<0x0x0x`0x``0x` ^X,VvZu?.>5>-#X\lKnWEv풾=[ -GYݫ[blW(^~uQ:kWcЏ{l!s֋wUrZ-vAZKf)'rüzKWcU/vX59T=*vqamvDfj4۪K- c6i>Q^Ö9adϼa/vUJ=|/)ؾNH4Q;qÆ׽_҅Ϩ /jrGuU)pY!u 0x%\n:A%w77véֳձ+Nʺ ]=O_bjv0x%l`Znlw{iE@CP\129[HY?U^Α#UVG='k|GGHc:qZfE::'e=Æ>_QC'$2x>H 98JjI-N˫ܺUsKVB+S`e=EEö6Uϓ6ϩǭcCfBGkVHމW *< L^Zc|D;FiNۇőu}cezBEYK.UIy\*uKm_tLh'4KCV:(ttN֠CRkI[XFO@a'ǴgS97p3Z6Lz}J;o HtBڹLS(=m;=g#4&kR*~9|SɭSb,J+ssyFc+9lbsÕ'56S-㑀[>Jܪ*jndߓå΄.uI+?6̠]67VG.O2y%D*WG%v5)I_?ɥR\4 zT+\. lQIN`.J+2"命f$|ॏԳr'+qwZ$4d k84*CL*n~4Es/H-2KoMWQ2kW .֛q^;sVd!FUO(XsxdNayllLUL䪼H|euW-TI, CEwx<>{G!scT?푓FkmO"uO 2WyE5F ̽^+džկM͕ѭ弯o* ۍF=oNE>AdA{PJ㵴@nqZ^s(uI{}dY|K\L*Ot/AItUP-Q$ZZX&kΡq>]k?0qPR\e=%fOohғkD%uF)i3gu&ud&͋s&i~WؼhwY ^n1)ANg{7u)4 9k\e0x^K*VAuL9\}z6MrՓmum=s`ߟn{haSe9dޙ'lf,J_mjIOFzREZ˹ߛ񐧄T!SREGJP;zyզJ!Vp%缳kEpXє %6ɱq^:čF4Ba2*!Pk|EaR<[aihϦtAbPsy<~/+,#5B\F3-ŞEi8S{7yG22u4?ŧbf+/yYba +I/z2K2RގvY'Ƒ1"-nN>UC[ݏi&Iv0QIݙ.?pP$66PI4rFiY1j/P-7DaD͏cY9[Sh`QIN.dsqLأq+9z`sVUV;'(-**f$$y]9ys#Tbi릛UU.c֗fR7 -à'fַ>/0q.(73Y4,PZRFR9m3xQ4 ] et&{=) e3玌Ɗs;ԄmtAZTudYmŞ7=wʼn7c!6穕KGYͭ 0dmPaIw{t;Dڝ!+ۡ7_h\zp>iO]&?Z<.CUǃgzbi!5ktTHNEg#D~0RkEu.+x=܍h`͋icrW}n\K+c'[o~rUm z񦤓eRyW'om;@v<@R%cmS6X]*I]R^σϧ L](zW;O1՛gj ]xXԒsݢ2x98D)_?oa`I}} 1[5GE'žkN=tC,4<;cQ߅e @O\h_H*XIxً5tw:zo;2А]Xw 澿џCҝ r&lW,ȿNѨZ=|7A4F=Yepʼn;-'|OUW\ B jCGz@EXoZ*6{9}v\3x8* b9XUo%-E{#1ZZН-re#'[w:!4w"=US1Y- }9䅢wS7o>I~wڶaz1$׽^lWy'x?}P F>倚x+_E^L- G.;s >0xzB5Bka_ 5p/WWW~K_/| ˿L׬__z7~~ٮ~SsHqx}1=e攠 HsH&[nc瑯֜DKߎrxrgVE#"8^&]' 7ki1LQ\'sJMO0Dh~8&MX#E䞚Gs@ ײ8{҉u Gቪ-ͨA ":͝j` ~y'Ύ)%sV5|0Y(^,[HMk3 ^"׺4E#轻r3^.0u`8`vu-~!,o^v3@FtKNB[ΑH(NN@UO W0Cޯ}Ke*NʲBP"rBHS8.⧭6,D%E '0++e /UMrhMvw?< 'e,j3Y"U6eW$3Οi3ѩ~^Lsuݗ&ucœۺ)Lb+u}b+:%G 6QusgIUa02JSey9S7N8q8;f|:n"@hLVΌ:u<Ź8yLr 28F-u-w:Zh>\|:ągϞ,6uYBjI#e p/itj2Y'BׇcJl~CxBp2gRSy!u1m5+7d3P&9uJش ^Iz4kKӝ::aK>{߳MeG}7.ǤҖQ4 3K䮊Q󚠜Y/6nʿ!0x<ϼo0wB\7*9Y2wm4"N`78  | gUr\.Vq972Yk/-i֒Eo`<8מ[LERl60xI?6U-:cC`0xyC=!XEClȔ6:q.LfE},h),˘B3Y7ޓU< g,)9N;qm:~2:$ @s O<2x9rCִÑYoo `3l a a  < << <0x<0x0x 0x^1)}<hͨ W#{p}" for p in parameters.split()) node(c, name, shape="record" if parameters else "point", label=label, fillcolor="#ffffff55") def placeholder_cluster(g, name): with cluster(g, name) as c: node(c, f"placeholder_{name}", label="...", fillcolor="transparent", color="transparent") event(graph, "on_startup", "command dirty") with cluster(graph, "cluster_build", bgcolor="#dddddd11") as g: event(g, "on_config", "config") event(g, "on_pre_build", "config") event(g, "on_files", "files config") event(g, "on_nav", "nav config files") edge(g, "load_config", "on_config:config") edge(g, "on_config:config", "on_pre_build:config") edge(g, "on_config:config", "get_files") edge(g, "get_files", "on_files:files") edge(g, "on_files:files", "get_nav") edge(g, "get_nav", "on_nav:nav") edge(g, "on_files:files", "on_nav:files") with cluster(g, "cluster_populate_page") as c: event(c, "on_pre_page", "page config files") event(c, "on_page_read_source", "page config") event(c, "on_page_markdown", "markdown page config files") event(c, "on_page_content", "html page config files") edge(c, "on_pre_page:page", "on_page_read_source:page", style="dashed") edge(c, "cluster_on_page_read_source", "on_page_markdown:markdown", style="dashed") edge(c, "on_page_markdown:markdown", "render_p", style="dashed") edge(c, "render_p", "on_page_content:html", style="dashed") edge(g, "on_nav:files", "pages_point_a", arrowhead="none") edge(g, "pages_point_a", "on_pre_page:page", style="dashed") edge(g, "pages_point_a", "cluster_populate_page") for i in 2, 3: placeholder_cluster(g, f"cluster_populate_page_{i}") edge(g, "pages_point_a", f"cluster_populate_page_{i}", style="dashed") edge(g, f"cluster_populate_page_{i}", "pages_point_b", style="dashed") event(g, "on_env", "env config files") edge(g, "on_page_content:html", "pages_point_b", style="dashed") edge(g, "pages_point_b", "on_env:files") edge(g, "pages_point_b", "pages_point_c", arrowhead="none") edge(g, "pages_point_c", "on_page_context:page", style="dashed") with cluster(g, "cluster_build_page") as c: event(c, "on_page_context", "context page config nav") event(c, "on_post_page", "output page config") edge(c, "get_context", "on_page_context:context") edge(c, "on_page_context:context", "render") edge(c, "get_template", "render") edge(c, "render", "on_post_page:output") edge(c, "on_post_page:output", "write_file") edge(g, "on_nav:nav", "cluster_build_page") edge(g, "on_env:env", "cluster_build_page") for i in 2, 3: placeholder_cluster(g, f"cluster_build_page_{i}") edge(g, "pages_point_c", f"cluster_build_page_{i}", style="dashed") event(g, "on_post_build", "config") event(graph, "on_serve", "server config") event(graph, "on_shutdown", "") ensure_order("on_startup", "cluster_build") ensure_order("on_pre_build", "on_files") ensure_order("on_nav", "cluster_populate_page") ensure_order("cluster_populate_page_2", "cluster_populate_page_3") ensure_order("on_page_content", "on_env") ensure_order("pages_point_c", "cluster_build_page") ensure_order("cluster_build_page_2", "cluster_build_page_3") ensure_order("cluster_build_page", "on_post_build") ensure_order("on_post_build", "on_serve") ensure_order("on_serve", "on_shutdown") data = graph.pipe() data = data[data.index(b"|�08P&LJ'*!D"@� D"@� D #ck"@� D"@� D" Mָ7KUrʿS�u:@P�u:@HʤlQ I�u:@P�u:@P42 !&^ZJ-u:@P�u:@Pg7ZFMH#LJp|#G,_^ɦt<"@� D"@� D#٬*PBKu:@P�u:@P{: +"@� D"@� DLPZTqEn-�u:@P�u:@P2i%RQk'Y1>#�G9>r|U~2ߦ5P5[^6'>G;Px>P9>pd`z!̟?3flx8>p|zX;K̉hH~H4Rf]>h|>P8>r|^8>r|aOqLr5Z/s:@P�u:@PXKC)R5%!> ?H}L�8>p|=9>r|J|{!Fp(-ż<}*@}0?b~8?Ř R@4kq.}̿CYm=Kt/Kgҙ'T/K1c~]0?b~ϏF+}\1M(]Yk &?y:+=)*֒)ʿd{yzQP ~^)P PnhS_bkHb1o[RY^ 0ЍBGQç[[ʺ0㚺Ř=ʋXZmQ~�~4ִ+2^^m.~lƊϺ}hva>%UP??gGoS/fM߂MxFl+06~ۏuAlQdl (g; ?-1o0ç + c-ϐr<��>b^ex~P-sx{+>d-ΗuTEC(65˛`4x"cj6VU&)#7}V;qjwS~ց8\?#~xk.ux9խFc?/: C-MW xs{=+0q A@q!؊PA^9}7_C9J=SƧOrMI^ a|ѴCzOZ `O%Wb.@!.Px'X7}v#Or/3Ÿצfz}eF#^NuOydŏ'빼^&fvyًSdCJq�N?ݎۿ6h=v.M{P__?ӵDo[01xV9}zJtח{zUA7>mOv@=<#1_b{PA+|aɫ5xЊ2f7vup١SL#1,\UǶ:g!1vt|bQge A}~}`fg[ .|Լ%#~7ϟRa=4ܣhj5GoF*Q|] z[u{K[q" hf|> Ţj>/kR;<!neB5Wa|' >by`\F=Q\B3bF.?18Uh𒮇-Ս9gIȇZCR_FTZܰ&#~WJgjΪT+5}?>`[+{з 'RI~}=qu(>JXX{W7K|q$u=/ٍp̛Ζ%WGkYۙn.Ws5Q1P=3LPje=Al2nڻ  rKqxȿV}9LyxER?mj߃Nil1)k</_Ua^&L4a-KAfi1JCس 'JKzeRC c?_uO7o }H9^QA'WDm{цAƹ&[1 5{=+N*T ^ZU"_#_`wSj1d,oUq1^d`c`M=.X!ڵm1l%8$q4mg*}L2[ֿ?ܨ]{z:J1xk*42YO1R8WjڦߌvcBmB~kFߙ�gx:0ޚk,<>7_I `Q"(7_54"jR+t_[D3K~vcSk+IrI']ꍛj-|5jJ#dbHH -a_4{O.--aӋ{+pGcx|`nQ|Xc,)01O۷.~ MI !|Ѥߏ/ŰakvcX/7$ߒ#LiOQoذ }SF{jiKz8!yP6q Wq1]zYe{fn՟ :Osn =r-ϭ-3UYKAj6G|bX[%eoV`WS~e̯3/pܘ2Ņ&\EV+w]?~*cubuiaw^,׏Ц:Lz#s@9Ѕ>v-efm ,~A<_�# XfsF!eW2k&b;npA)kl[!0{q:m#qAWPÏm[q27.9ʁ[W;Ge5̧ho];7/ ?2=c_/}L)%7_}pX}W8i78x+izᒲVy<&0/o6e{酸RLHkqIQsaa \VV-b-^\5jkq;P �ߌQ�(+XeRp_ cދE�+N= {Wێtkl_|&S+>!"n$^IASTkKr"~|;\/E.{}v.=qH ٕ\* 1�X;py  'k !ʐz^b=|޶r~ZEۄ +q"{NB؅߭+ 5E]C]Sߦ+o8R0-v$QJ~i3m\gGsIhxx¼EMx b|54 >8+M6Ԟ&BxS_:J=ƢYf=dx#nɏ" %~8ӴKlJ?=?P\hjoMgm1 ?{caފ퉉T1H$w,&\|v9nm3دvjc4bX|.0L55~E̴pNQ<7O3NOo|'"7oPiGo[q La9^\P\i~ kbl.5PM{eh_0_|Xۣ `pWƒIneX4և5πk')بX!< cmhu=&Ȫ5ۖmįK9?~4c싵\SC5cMTo\mB:`kJn[ 8cp30nÊ=w;qC{aoifh{Nܿ?0UU5o!bx%݃o*YmbkT(V.] z&%_lDu@Y`e>MT 0>jhޯ ! 7J[Za-GOQ0ȋ֖(>C*A&hF3D{f1-s==>_`X+/oЍ5a ^-LAq^'s#j�@FShk1h>/G{<ŬujB!y7M9ůh= Uc&>J}U9҈i/32Cg4ִceD8w_`*\!rf'j UƵZdOFQQRnam3Dҗ^+F:j0gӏ"E[6+,gv$^v84&ڂhXw_EXkЪNJu"leP1Oē񺬎8unګҩJTוdiE$}e"da:NT:؊b>8a\X۾u鸹 %JUD1Jֵ$i<q.o~V[qFK Hz6jfs`_L+Fm4LSkl]sB؉e\=_Ѐ{hA^zbƁh1* ˘ui9nt2lS@{f@Qdo<=!nojq6/N94IJ�vA%ǼFcܗº5ue3r k#yeѳHA_֖0> ])qUOSo]kn\0hŪ&:[3Q7>U{EAY`xaªf (Ƈ5Q ޅ-z1$kZ{&"oO|aMc-n9%v*0M, }[1fu 37s{P]F!)xZˇ˼8^@˗UO\V,l`h7S%7XkMڷe /-ޢubglA0b/.Ĩ2FqG,5-xeMy |v!hiiK$iH=4q\ݿGmYĻ{yQm5Z"(8cBOi-ƚ޾4PG&\oY|IS);pK؀ ڶzdqI%Xk2yMu_oq"-jtɋJa췄WXMuiƚ|E뤠X{*=ʰxy+_cxC,]V"}R{VW%̶6j1V|=~ny9{̙k-c`1Սx%ir2?>\k-c}EŚX 90]%7^}vX1/(J38_k <_<}h;T]I'bP] ΓKA6#* _";+_0kmJT+>6}?s*X%|yA~~t!ʪqxljorL-MX #*5咰iK $׳65E}}HWM8J~N~9fc5?Dalgo'{+M2<7Ep[{r6TœLՋ&|[(LV$gTJW1n? |WE%XxVq2ib).fMsuB$[4iEQ<._酨=ox o_a[ /nD V|\H'}])zM/6\ʃcJ0T诂Ic08=!qz*5ZS#Ed#~v|RY"ZUAX}J8?ż-'>o|B }ڄV(B-S|©2kߔ%ɯڿ .,}C s`s-2%hG/۫LZ<\-&/C}( v7�Qn +8ht)~%*[|Z0N'[<(!_ca||еB)lS^$SޟtqAdU( ♐>z?jƚ)|1~~zE'\[ym^uXQQ1Qa\n^@V:l/Qubmh9+}]0 6IpJi+| ol9^nF ]XlBZCΗ`9pqei˾ σ+҂eK?G/h ѣkSbԨ L腫zQqkLӌߵ6='wcㄲ3w^YV{NbzAV^N8MB[ŚhgϪ:/ qD6q6ׯF0iLˍme}{tb<b߫qJpG0.[M|+ঙ+㾡x; Dk\ *Gk{] a~2hhŴsu!eS~\sÚ1m1L�[pai{3Εf 3mږ�W^.^:9/, WiZ|)f67;ɲl-ϴ7{Q"O-|VYⵦA*l}Bݳ#=ՎJb'Q^m{Ula'Ź0jKMFo-׮C*1(O>ނ[7 (}| 1!Eqpc8 `cQXe)pf2iCoMZ3拡AƳx#0 F=7M\;w@F=(asGk&i=X%6֎\L!,ܾQ,^Ѐ+}ry] q(i7п1iOh\jt1!寉�U݂8v|.x|IESkkZ/~=*} H |T$o4y!m1_I7ϕ4KA](l C`I^K:Fh5Nj>W;X{og. )ڶ~_P(O FT|_~E"7<ڌM۽l>^`XT_~*V/b߂f+ T tv%n(vcH9JpOK~.Dś=H:8*yn$44<"m~T;&lK=Yтcemyx|5q1 ++kp֕jmen [U+*>6*n 楽Q|Q5ؔh51׳\<\6JQv1|CvDZA14s6I[#߅/琉9'yo!odڹ./[]n傶y=TD715z. ?ym3My&ca؂V)^8\&թ33ϧW1̅MU8Rp}m58].nyD%~[OO])yǟV܎V'[{0/c= EWՈQi 9'HӱvRPtK oN,k;wm8VoЍQ&cM#LoFmf9 .*ޜinQE:\Y$^'Lo` 5OkfF�bۧM8G`jK�bW{u2Q:0D;A<0Rk_|⽂ +X;ド`5mw#ьy,mãi[# j/f0kDU[;c}[Xƻpr /hGӶ:X֞DpatĕEUMlo#zAVcXѷ۶nj뽘Fƴ<(Drlt^c*0ܺl]=N[blʯpol@*؄K{7%XFMK5;f ͮb,m&F˫VmíMS̏;&ѯI3H<_Lo'i?o * âo?x w u)qԖ{,,(V} _5G`OG 5暌55ۊϴq UA"WG5x0&&zX&qU|m܆@Әn~ jVs6`}\ Is)7 c7|b}d_l;͉~yJM I|Csw=-OEB-s$mż戠/5cBJ)AlG\oQo|gc"˅<'*bqK5f,]vi#9Nэm;+2Ooat){b],B?DqZQ5v7iS n' sN3Զ`vԃ~E*6|[,j.1|wR+BX=>WPi;Ny5Qڧώ+.n۶L|Qb\T+-.їdMO_xǴ'Lf^?\nd|CƏ/H3>҆Q`+1E[<׫Mhx@~ӧdMF,*OXLkNs'ŵRoBC,jǂ_QmCIOzz?3P .g-]om+K`dULۿG++Lfz{uɛ֚O"2on>Z�U*dn~"b-DQXDU:+߬|Q1wM[˗qG[zzḋ}F./οjwU~fdʉ;TcͰҗ$yX;ڊ8SݨIlT_ވ ol ǰm{毩?ֹxt#/ޟ\up0G)ojpò6 #.~|}Qد쿊0^p;n&qx FAhk*ߪmKM?N\%v+.d؍3x8r-#Kݢn1W]1庹0.Nje|-0n^χ7 aqz&,ZVgM^ȚDzOr9f s,cDxWcP#-H;VezCB\ Et")1~h≿xzUAPk0ŠP.Q._Fo ⑸I9HwE}揞Jic�� �IDATL}>>3G#~#ߪ S!6Cxƃz@=PZ�zH=R82CMKAŞcb0Ӣ^rć`|P 8>p|ヾG{0?`~6c,e-Ko\ʮ#ǥ\JťT1c>|�r(#Z2w} @{9rC0`>Zg_D"@� D"@� Dt24H"@� D"@� D"!Xcij,f)6` @=P !zH=R9p<PFk<"@� D"@� D(#|*PO"U࿉Dz=RC!C02UiCEۇ&@z@=PC!zH=r|�R]P].W+H.Neb1p8L OC}M\gܝ|&gλ3�u)gw6km�n='gܝ|&0M\gܝ|&kXM|˥TV6&sLS3u%u/L35kZÉ[nL|Onn8c3L>wqoySnP7vnXˑ1�g�VnxHsww|&#.7qAsw|&QLcZ6͊ǩS01`bp8C!g&|Uڡ>S3cpNЩvg|#R ) )'n۩թv̉[&x9uItUT\3yJn$"FcZ1pSS0dChxT;3L>3͔ F1T;3L>s̔ FqbFc-q)hTT;8`e#NЩvg|-SP7rƉsCLS]gk92Fu gܝ>|&idu#S𱏘S|kAݰ?.35kk9 ę8g#Ɵ|q&Ig|#Fn874rd01M g XnP72 +|#oCݠn؏g|8ujrF"ghXFGY#8%NC!ep8C!gL9@ݠndsj|Ϸv Q2Lc-#>;%$4#YvNC>s' 97,3q 9 Ls@nB>'1\.W;lwm.Pdd3L>w]@ŻSnP7ԍL9@ݠndN_NC>s4 )@L@C>s{8M\gܝ|&kDXsn8w 4he3^q)t&]#V3qFw!gL9@ݠndN_NC>siRH)WH-3v;:vNC>3L9@ݠndsj|ϷvFc;*$98l5oab"Ĺ;L>403�u)gh`GlG/hXVkcaĀA`SbNua? \&5k7Xf &9A7[&3qN:F>s,7r9q#cAn8g&`L2�u)gXyb|8u~L>sǩSSP7Xnxh3q(0-;ş|kVn8?3L>s)ԍL9L˷SnXcKI<X/ύ#|&9q˔ F>bNMu~L>sigA.MkmBJ!v_!^u#7NswU|aqAsw||Fc-9V En8l)[;Lrę8w'!gL3�u)g3 :35k7JM{"g@iq&Ι)rԍ8s~Z&` L�J>3+"2�u)gXa|:u~L>;4heûRH!S S3 ST; u)ԍL9CC>bNu#4hW$G2s3gM?L r_ę8w'#gfnP72 L5kJc-cvt[;T018L?pNC>3'șrAȔ3 G̩=ڡnP7GAs=ƚ(cN S!ιę8ܜ|&ιA 7g!snYgrs8ܜ|Nb\w ]>&-.g|'ԍ)q&Ig|sn8c\ u 8|GsnxHsw)Ǝ罥K_V:S0ȍg✍x8NC>sNiCH 5k('947 q&b' ؍_N"o3>~s6ƚ N'lߩʷvsneLmyCqoiပ@ ęeƏG7hُ|K?ԍnn8? h||NG4he߬XНjB pNC>O=zp89>;;#8Y裏x{K/H۟\ks~tkK+B0nۆ }~7V3NlT[;9n8r4L FnCswZ&Lsl>}3Lq.lwI>rAM7BkFؼy36|_lN1ՊEC϶/ɁsnCswS9LcZ6zÊBBU@Nrs߉szZKK ~̙1Ij`<ߍFlظC~?***d^aaoOKs /ys_RIie9n8Lm2403*NA8L?,ia3wD )q&|㏓kz_gO?wj9rfϺ;ߍ5ğ!Vu!C;M}MM ~Q,q g'o!l ʷxw? FyJfw6iXˌi;K<xf ę8gGO2c 俞SK.g1 [kfP{;. 7>,)!B;972q&ζ囎35k.*4(l 7!?<k*,y R[a>0۟0hsvNJd\|хrq[|D<{.8vGC)!ι1Lm 04|:SzoP7 G35kZ�vϩv8`qF8Sl6jJKJPWWƂ/8Ϙ~6?|>l޼E_//RЎ�?0\yeةN0Q6Khh\v40L>'IG8'8u#}L;5XZ�snblϿ%ǀW^} _qU`6Zs{CNW~9R=cX3g&V{qK8cdUtl|Oo.~@^I'5t Z=gÆ ʫ'mw8u]7{%1%QNŻS3uSqvhX&.+BwVHt|>p8G { |\w]j=8>3zw^~elٺ ӦX3aٿ&/u7t|/)Pv(13L>w_ÇY}Fc-3Y,NsgYd&oq?VcM,9  qکʷsnڸ _u5>f3q4i" Q[WY3g'?'0EǸ�Z,οɥc^ṓqbI`'>Ϸʷ܌ę8hw|UCH5kSWNS0dChxT;3/|Nf۸}LGnOc֬ۻXC9X撷p_GcMG{iʷ~D"<\oφ>8bpcQYQ)^u^dÇ1'a؞CQRZ=zq om@CtX>;yDٳlRoѢ)8SXqa۩vg|nS]ۡnXH7 VFijj|&WX_sU8g'׮[/-֭_Ս'ǵ\ri/3'ƚ 7`qriCC`|a@,[A�=Cu]W\q`{ ibSk+oj~:39g٘7kvlH: 0̍ gp*!̇k>w'&>7t#*++Rߒ6Ygv+&}4Watoz/}e8_oy9xF 뮽>Jjͨ?(ޔ7Kk'xsun?ri͸k$^v?_VCMT#7E |g۶SO=e=1l?Pk l޲^{\3~8bw-x"+ǥ+%uY#1qM'97,3q gR4;|B197g@sHU&~9{-8Z7>]8WOOgpkϓG.rMr٠0 #ZLˊ5K/\*_'|2mȋ%͢Y܂>yK,x17dͬ#y|ޓ P3Vm6ޞ/hWf,<#ZkK-ow7.?a?bOL,߸7kqNN83|Nv32]!ى LoC>;4he;4Gပ8l1d:2K5Ee=ޏ<舱f^jjv95nrd|1'+LTw Kٟ+&w+_Ïl-<-v\Ue:?bҬ1 ;#rQvU)SF=cM癧M| ;?sPdc떛an sMzi[.8qHX;qD0V/l)ɔϩ:]!ιO3qFMgyGlxg+asBJ!÷|&錵I&+@IIb?x_{meK.g1 '2.bL=M5qX{%m>cAJ M~?O%\{ 3v۰{6V^Fa.B0XNkgģMo&o3ewug*gܝⴳ|Fc-8#t6s&@3qFw;kιɄbޜÞC/Ee0֬Tb߰L_ʐ=6s.Lg 0lnX'%6ʰ31/ b/T{@h 37]=:#~ Q͝?%v.>w^6enC9ډǮ6x/|&#T|vhRH)WHi`f=Y{K}N*D dҋPWWN>gL?w۴q.jXꪥY)'*ȎL5gEqGk_|%N:Ԥ7׌om]f͜ i,>]SNXLxgt1fߝwmg iun^uVǘe97qJgk42SN p&ћ|&3cL'cXGw7{*{%A;A6#~履ŭ3gʊ:̘bi%ˮhcM&K%K¯/;`a|Lk7W%&vqFŚ~7:heRgc=]HU]!ι3qNU}oC>'-k4ֲo.(3qF?Nǎ&3WBm^oonf|!*cmiwԪ(ǟM Ǽi~3 x�h)h`Y%ݘ`^*[f^*H^:P1oyRDR~e睵Z]ݟZ3>y>3Y:8̦[o:ɹHùڟ$ţwɓϤmF.]ҌfqAjaəii[/Mߠy{}xyg>~oZvq+,\f٭Zp3.gU0|#}_Z$cV~o|}Q mWcB8;;e9a~y0}L5}lc-G| t„h 7~YFL#{ 'Nl2qFݺu40M3ZǗ /g828§`8C0|#Ԫ݀nAk0kS2>OH]5~2kh.f56Վ;oodXϬ{3ū^N?� Zesܢ-t^�� �IDAT7Acgy|Yo_c6In\˴>=8SL~٥ϥ g:aDGU |3.g\\}>P:># c-1AH!V-ݨnki.23\|ϥ#K̏BkzOt„Y~6;{59ছnNWꟳ|ЁYq/ow=uM@p?Ρ6i3/nmW.|v)sXsAZg7"~U|gk0Ļ#&*RiBcb?c6=> /@'8y/ɶמt?M7Co~tT775\j+蜹siv7+lePr6Π~}ҪU3?jH3kx�}۾Сt޹g'د\>\s+ntIhA;־Tʆ*lW_sMnL01߈c8c^׈@=, \ F3t2?P`€UF8B0T9s>}560?V^M(28< i츯ZX3L/S53K9y94{N8`PiqrG_c Tng BB>s0"#R)uT?&`q8X}SC?e<,cqM_vO'U_}{쌵3N>rAI&_c_ƚo ׿J|ro` 6- 1ٗ /g닮/`X+;dEO�w]��,_΄g?CFc_b'?3~n}IOGAݻw??;VSo 25I5Py*de}UcmMm(cQClI .ܹwYgc"A~\uH}Ff`zO�8q s+aQ>Xd`Gp3pn%a𹈱mṓiԨQh`R;`3'?"9,'vƙgoAO΃+bUXO86ܰ'ty?o x}fow̞MΩN,gJ:vooɤ{lN?u[DNOk\}c(;ZW}=g/\ yeXǑNt}!r&:11CF)~mi;+颋.n8C~9j-NC|5C3̵*kfÏ󟟤#xTCWAg*%VbےOp<qwi ߂1B35kYwi8Z9X\sb F��@�>l}Y͒+ϤK./x*'k3+8Kh+hWES9{O&>Cկ{yon-3k=̵̺[n~pZȏY_{>Ê{gtS<l@/-y&~;rϥόr= '6/a>;邏}Oz-}>󙑉Yg{.͚eƠp ���@ c-B9ptq̨?U+E3ָ zwh?ذMqܸ1~%1y,YB'z=c T*c3{=Fᕹ̌5>Ρ6ɬ⯛~od~}"'o%1)տI։ ]z }z)ߦvX֬-ȍEۣ+v-GS#H7JΈn21raޘ|ZC0T93 >XVw'E'yBH8AqBMxVt#_7k\?KtspMt95M;s,c ۉ K_3ϚL35wnwI9܋!D$ի@7 ,Y|ЁI|h}֞0` zE݀n /C>&vxq8Vhg\XK+p<ܰgbal vکk0i gup.l?>=Ê?p7ӹofkƳ>nŗе0|]wsGͣB0T9.†Pirs k8eěb(OЍbqQX|kӓO=qz=tw:=nGn5j4/u;i*avmCg9tW?8k_R+Ǘ?ج*1gӎ;+Ym 1VnV+Z djΘo\{@79c-'F@8 pŇB783j|a fθv=Z*G[�55hYg},u[hGkl> 0rJ_ҏ/"啷ri'jw!I^~y)}C[>tYg7|§=& %313rz_:&& 8;ӂ< Up3gӝIg|c 'y`G�3p΋4q9O@#{I~{9袩tonrfLcŦљg j;s#5r{Am(ma>\sWjr!7泠0̸tϽoO1 !qci7鴋/__Awqߤ/${8snNk۞{uWP[>~>.Lwim}mUo+*9>iq 8XL\[0`okj)&e#C>9[Mv!mI̟Oc}ՋN51=nm5cmŊ䥗2s>҆nKAGnIǗ82/_N? ɶ- 9nZ{CS/~[ 1Ʊʙ&_{fͺf~GǙ| 4 iv6ڈzXfɜet=7ߜ\o00(dM?mO9CXZ:FU |8)3H4N �gmab_@7u#֭[7:ol:>ψȏ]|.o;[\+K|gq_]jIE&{* o-kL~ZzuY2c'i?!'9د=قkɶj?h͚mkmčSO?C{9Ωe]? tSbm<'GZp2peƩ >70`2"V82X5lOHcٝ9[oѸk5nGvi 5ָ?h{+B׿?B$k̂b=;`BK,_UW[C6 |SԻ&67x3zO~jŊ97_Il6#.3I]ep6'ݭZp3.gfZ$c�oF-H˴2|zw}iJ[ld7J -{^6=[L>^ߧOZer zfřyp�מ>L{7m=4nY/thDLw݀nnXV&?U`bA�8VS|;nAy]t |MkB ! a\݀n@7n@7|9SL!|1r�Lq2CZ$2jB VP3/ _΄X:1!pέsZ$c!.8Vg|t×30| Z9 {T\f2CZ$`g� V?Uk&q 8V1|oda'Nsq N �g &`n@7|9 wĪt= ?.3\8 5~*QϙXkkk+KPvK_t?pqS 8A N-3p@Zg8c[nlGoY|g�tzqs+) >7_żƚW|d/gP|;nB*NVt݀nr� ^|#VyB@7`GQA< X^ăWj@7^�j= W @7 U+ \UPnXkJ x PDʁn@7W=T{ @nx*NVt /݀֔@�0`y\݀nxt {@7^�+TVt+^pU-Cc)�a",/B U+ \UPn@7W8Z9 W @7ZjtZSÀE< X^p Vt /݀nxt PqZr @nxUxˋx 5@Tt+^pU-C \j@7^�j= kM 0`yjZ9 W @7Zjt /Biʁn@7W=T{0֚ ,/a+�Qr @nxUxt+^pӪ݀nxt {@7`5%@< X^ÀWj@7^�j= W @7 U+ \UPnXkJ x PDʁn@7W=T{ @nx*NVt /݀֔@�0`y\݀nxt {@7^�+TVt+^pU-Cc)�a",/B U+ \UPn@7W8Z9 W @7ZjtZSÀE< X^p Vt /݀nxt PqZr @nxUxˋx 5@Tt+^pU-C \j@7^�j= kM 0`yjZ9 W @7Zjt /Biʁn@7W=T{c͋Pk7pqSKyر4zh={_̔Z-z(p4cƌ3Vӗ17"P$N>r˺tqe N3fLbacmJ{<"̙3 o ўVO_!C֌4r#FЄL6fϞM4tP}N&vc#8@>Ϯ|eL8-aXsC?TcmXX㌵UWӪUsϣ u.{g?N/2֠n au÷mڃr�7a#Jc ƚ;[-W%.*T90`!t(*|n}>ی53kVW.'33G263jtuבle{^]u>oM'h됬wfܮyѐ3֤}fl+vǿݧO]f~fZp! 6,F#]wZ;Ӹmz8ˤϟdݻ0>xgVG2in 0a+mZO>x'i1NRϥfldn}]_&'g=c'Nm{x&ȳeq qG[jܑr;V,_ƟW343Føppz+*Scα!?V4:#3e'1ԸSr08h{ª0T{gFBWˁcL|W Xق>>2^}uYb\dӌM{͐l~M&VNW^5sݿ_x4a„T1Rz=zԞUj1&rni=S5,ͷآ>LުUtԩt]w%Ɉ#jϘ6ydzgk&VPݗ6g͚5m泚Qfr^ l.ஹskY[A2MfCD=k?X6m*zmVZ}kYf4v^xab"jJ3g79;N(Lm}`cƯP8 5kjr ZwGѸc `EO� U, Xe#CL>kcM&içn^1yFkibW'2dpf{3l&bqfl|^:CJc+Tht5_v`(0[+FL3R&Wx$+Mw^v+2Lז5Ҳז%:%Í$kXe;#In`<;hN0j񂴳m{&ykR'Vf3 jZ{g̟EuZ$cB ! 8u'N:m_5vW�:uwٞ2ƚ64J%3|3f$kz ot5$*ͲMx6dLl^uԑ1g6^iyi&~,71?|bs>/_aY?_c33cHǬÇ=0ֹwo1|`X+X XjS4Ň-'&Y26>]X�>cM"ӸXhc4 ?މх5g$KLk~iJ$cڴ,g5Ɔꊕ+G _e iZѰjNq֣U'T{s}Mǐ'Rsjg* 4Cv.iJ򺫡ϘoW5T=00p1k8 5�gP ]@73P3\q0T*݀nnXV&+f 25q U >ĉh}>posgU6g|nD�8qs32?&parZϮ硹#p8c5SrZQsP>w 1Xd p]'&qxs<<Y18'.3pBcC [)g32H 5Є* 8pe:T*|FBW݀n@7n@7|9c^_t<A#΢Bg]_@7 18zyBr ?_guωVq١.} p8A N-3p@Zg89qjs>㌌ޅ" P E P3ܺoA7;pέ3 >7"s�c ZጵH 5A U, Xe#C>3b_@715~*|gn#c-1a+L 5Z9 {TB>s`8|g"k02"2Z5T=0|pέc3 >(�t$Z#HB. ՟3\8mC#݀n@7n@7|9#Bpp25kexH 5Є*2g9R*NVt݀nr� bwĚ=OBHe|͞`h t× /g`D#VyB@7Qn\c ?P`€UF8B0T93 >XBiʁn@7 _@7QX 0"#R,T>s t݀nr� wĪ6Ot= 0`2"'@ XG(*|pK]R8Z9 tt×30k<Z$cB !uOTg|~6{n@7 _@7X ݀nGAq2CZ$hB VP3nbK U+݀n@7|9�݀nrF;b͞'Xd@H!P >ՏfO04B tt×30"s뎃Vq١.} p8A N-3p@Zg89qjs>㌌ޅ" P E P3ܺoA7;pέ3 >7"s�c Z* XLO,N\�gJ>3^0r�y=qSgk07H)<7p>ό@j-gWC78VS|,N �gJ( >Ȉ�tdD#Vm@7QPq|gk0rRiB*|OC{r t× /g`Ȼ#j|Z9ЍzX +qb jS`b'3pn%g/ _tG k0 cfnp`bw07arg|ٗ /g@vG,^r ( >5ke#81pejZ{0_83\}8q 3H&q8gL0�td#V@@7QPq|i+T9 dyg+0šSr0`ʼn [Ig|ٗ /g/Bc= mu0`y >Xr� nZ(Ut= ?.3\8-:b+hBH!+ɠq8VU|9N\�gJ>35kex, 8sş X�|g0�tz̟(0`okS4IGo\ |iڃ[O믆npέs c-1 X@�P|t×3ȈpGj Pn@7ܣ2 >70`]2 25A U >՟P@7 / _wG,^rc],W" 8 Ԫj N|gJ:>3 L_@7Xܶ `f`݉ݱ*s%p.2W2 ݱ*s%p.2W2 ݱ*s%p.2Wg7S(o(qmh_?U+'.3pn%gUkth]݀cL|㌵H @ sA,(pέc3 >,Լhnm״uVPPr&MD):m͙3551cѣi9tAV~i^1&O`u۩}J{ny]!CɧLӤI:&.Rg3g~gvtÍ7̙3뚗ӧV[nI.[F{-X0?њ\fciСΟ>Kݻwr:sU@7L=E ά#F뮻!lrG4gŊtqgW}\q+,Gŋ1#S¤ɺǎS0.Գ=<ի6gر㗞fi[+gW\>kё"2^ۮgq 4͵m0~yaUezàoGF q0|> e5YPgb~,_64 0 ʕf\+Mkf瓅nG0ֲqqP={6 К_nc-s+<Hc }|x/3pK{ƚ ̅mu,ceQ>Vl#{R:Skr,kߞ4BkV ]捋f h]weDr-7F9_&i{V5y0>Xk䓱&|. o*0-ƭC 1g"Ɣ /ͷ"7nÎhO N0*p{)gPԛZ?o.[74^5"k.y*'JzuřaYck9y}RN|L˜8qӋĹe^d'&lCҥKiA:qY^d=3adGsGI';*_mg%ϕL/6јʼnP3>>ks,鉓Vq׸$h⬵0J΂ ޛ*W ނg:Ro:.oSEy:餓c kfێc֙h!gdjN]s,[ɴ# H;SH_h"ڬk+p_3vÆ 76;t\dig[O>Tl<]zeYYne* m{!ɧR̿fq޵{d3oм:Gg)24@GR;?6abEOYc%p@h36#Lnj3664 tƈiZ[fGt)\3jH{X;y-s>+xaS/ۚu>kp0d}LT=v14vhH{6q]i d8cf60&Gud-Nm߳q$M а.K^[˵9G=%kM2tkK~gE7luyc믧E[f 2nb (̯'tB}gZƚ Yr[:@?~B#isjԴ^aԨQG0e5ek\//da)-6fd6;^\ϫ_dIgha6mTے>,?Z1rJ,b@>^ F6:mҟ EH8!8XĐɿΪ_AkӨuy&'icfFر-6 v~fۀ RqȪ#Fk6]vح^hr|iZR߲$m+^Z1%Z5=I65Ti[AsJڲ{}Fرc4ʕz>{bC"O@yQֱD)Mوg߯_0/>z&6Y<>vѸk>m/7ΐIHV~Xyp;l,3ĜHd2eJ1/&yfmNKBD?3.u+6˛qٹYƚnMT�w%qcZb-z qq/[ƚm.k紵/ Xc5>ښEKc\jd5?I78bdKY똯g:S=;ktyc؜bMuWBW^q`&YL00i,36DBD_ "Dsꛪkm sAe` f^4[,Ži|`;bJɛ;{c͆mѐO&Z6dr,1&pH0Oxp niƋf6d�d5ֿe2jÇgS2lƚwbna+?ɔ3^+ѓ,K lrDs+qZ=iY\巿9©_m}4Y[%ZBڤ[/e'.ƚb[^|0uI\dRKf;ͯOڌ5ֺ\1bn0p NeF }q4oqgeExJWfG=M[T붚)?L1n$?V.ocv;\2ҞUMxmlE@26!G;eombż9knh3k<}Xv-x4s5֤l{.Rk]u4fN2Tx:g se5lG\tfkY:xkiq(*}hNhcwYi_.kx$z>/]2޸YZ8j}/RZ5kGދ.sM|ESk%WcM*?k7Rks>g>VsKʁ?Dm]sY+ e94 }3֤;&Fk^FE3lY8 \&zOc`LfkzfjZ֟% [ZGkglD3l5{}$[i5,yꩧ3|43|5mmYX,E󌵲ƚėgmvnX-Tih l+&Kk5)->v$ ۛü8cM8qjL W;k1(mkbD4ƚizjFҡVgñ%&L3Zzj@4dm}'_v#$8q& h$�� �IDAT~)Yve5s'%WZ3/I s 'I Y!smka1X1iCo\n4Bq8o&3E:XVE43Wwm'5k f'޺fR،5~5??<)ڲ]1X%6k+&}^*jfNmN6-jWG\5czm/}K%1` lf^`n 6rп6V~J: mir3ekpǬTq)+aXsG6Ҿi޴3+miY9@'rz˄P k|ػg1R>^&)k^3elFSc 3.eL\WV.o4Y7mk?(g~8(/ЇkC.[AWb5XK&w}vȶ6gk֭[l|U^'YȘp\6c--S10 l=s|2Ϭ,OSl{.>v츱4c?""yjgp i|,4f3ff̘qg{z <]ڟמ)gڒ;kX3tZ4Ceۗd?#tI'5pS)i[m.<\"@ s(\hmֿ?' y“Oo-cM>^`2_@{||w!2ɮrm;!3ָ]K. J4OsAf|k2ɹQ\'a̷>iƚ.ovxuÍ76|e6$~4yƜ4fFd}d&y[AM#dvL̾,cfrZiK]wݵ;::Mc͜piʔEiof +[Iu&6&G-D38acʭ6RlZbmfNhvG;YW]&;l=^d:<kڐd0:#Lc 6^Vƚgxlm3󚴌Gͥ}wbڲQ1= ;s…4dLc4u;Ҟˆ+>:Kڡ c])Txbƈ}PM}w}U<mJfE㩋1\ڌ1^*:6H)C}Z&듯pȑ Cmcߌ =qf.%G<_}хu/^m:o>+n9;._Xw׵g'/>͹k:N&fEw}iqDGŎ-̹m'~띬umtrpfZ(ka[}fiٜZ^<75aգe55jF6R| ͵:7fL2`)\,f6-ըhyepМ@Ҧet楾CV{| \Aun)/~{㜇c]qNˮ*|18>gfhjc-,n{qjϙ!?8 .P>r#0סBo ^˵7A%4+LXsG a}\1+l{U\++{m2Tel]ض8.i 8Nt2v/kW>gX;3f8*C=ܡS3F9UEyض6ۯikknOLC 4t%.q͚% ukZщAiڢc_e kkOu#_^wQ_܁s6bi Ї??}8ssA7By.|l^OCEkЍ{G_~- l:z0ykD8Ekݳso>|hyz?ǹ#0S3>3VƬfu̧I&:|+gica)3^92 9Nt-ۧ$gc?.cd_--ӈ|&exWs(8A`!*czs-Ao6zz7Aq 8g8X=>'* }.agsq@N1͎wlaL�35kY`oZ!gÈC [)g|ǁp̟p~1^,svXVWq8Vb|cxXŮz bB8q‚"� s̤^P=gF/>_* Ƽ.xg: U3FMsfϡ /*וӧS^sϣ w 0z(p4s6|g埣Ǎ~V n|.ܒ^]_@͞=LiX>i$gOihΜ9LÙ1r]wu\6mƌMэvO,]=RG3dP:_߾矧'=A#sl+Vpe"ۧS/۞нG~ ͻb"(泦}IWZ'0ִp kMd U 0/,q챴zk823'`5'JZڛ*9kE&*`kv&iOͫ]-avee_he)\U5ۛ%*g&L )?}[wEZd+HYl vidlfp` 餓3qlO-)\bq:`=hΦya[BkYWeG8CpOB'Y\ki2w:*ck&J2j㗵GHɬs|t#oAPH=,CrZ>dqhv0hMUWӪU ,\{gRNV]vvc8q,c*8Y|3،GײS>}[p1ú%4YZ3qJZ0m[P28wĽj ZqD]5[0֊crg] U3fofPlKs||([&aŧQ(|e5nسg;+W֝$`B6lXrdȹ*|_־jv~/x 6d.ϑm?xl0=|ϣ984Qfȥ7/@yۦ S]cc܊*g_i^0Vc.e6pLR9~rtlȹyy}(oi6c|Fp,2Ck6(O'L1z5 FiF6適?]cU'4-Zhd0sviϸciȑt3 {ӥ]VwNq,]J6ڨx}xv[13x37+z~F~qDʰm5俭!}y:u^L3Gwߝ[#f qMNZ"k܆L<^WN ޮZfv9npyZڹi&O^_}61l<7@vXne]dr<'ϒYc`[<̬134˦=9naF5~%ۮ;d]1l%{qhˏK\%F\%s35=t>cMΛ[˒[uoIqM;Dv}"|dOͳ~E+\\?edhtjuZA2z2dz*mߧeMlч鉯LX:ΜT;b艧\A瓱z mL؞|C3m&.IcW k3֦MJz[5뒁/ &0k󹥿DLp-�L[ga \@m > c�L8<(_ Ƅ;i gw_-021ֶҼqWƜ6cѶ ڡm{6lO#Obk=kϘ Yz%mF;u$[igơ%sY~7M1,gv;O&r۶_믧ņb&ߌ5~髯t:O`qMOy+6>kMofgnqd5om[Aumx {IwHdXudMPm/vee fl:MNۋ<ؖ5"ud1E{Ux+zhlh=~eiCR 15`kl"" FTzW~kn8Oί]#YYk|߀]w|GH^mI~^{> Ĭ3MQedkQ̶Ho.h38d[,NIwpos==t41yk3s^և.c`VŌ Ͻms.u|5{4yg}{Md~0'!wD=Ks기eR1ym}60 khGD!!mV{]X$Ml茅}&|+hժՋ|b&:6W5LzAiXoӳ&bxkA;wX,gqIa0jRYӶߛAޫ˸.3GL<mJYgvJfl=f8Ʉf[Q14R>;ۗgb,Wڗ>ƚ5!5.ַ9\RfV5%у?/z"b>X˚2aݔ;>ZvIMίxUڲvmQ\$c͖55i_{y6sykcF߮kT[Zܕ'n˼6ӿ UK]yM6t9QMMXw\|9q|i~Ç'[b6A+jRb!d-lokwD/4?$Lkgu:'c~O77|6b&~ N; ڑxQGudmopM0km` Ҷ4L^9믽dd"ZڂCcMsH+} [nڷaioYX@y:jɂqƌIJ FD3,j=wNXϛ;X+}5a0L-ʹih›V4cLmXq6[Bkzqt\eGbv;Ht٢|M_ɻZx6>|8`b#mMcG8Ҍީd۳k"OSkl pܴr[s5\aY/M|uѶEe5j(e*uQ3:QiLVs!3 S5^ M<3@Ydqt0aC'fQ&d.mYzPV\I=wo8ŔqNsɽNL.L͙;7ɘ)faVXw&c-kBC:WX2}z',} XGD2So]lgy&9q=^zwEǼ-j|ogϞ\L:F,rm7 &L )enLռ6>۶a֢L ~yY-i[+oZ?|tbҤ37.e1t6\!~>jn޽k/lq6ڴ݌qg\͝SH[Yg%&UX5y _pG#C i/xF_�ԓ/fmMvm7?N?׺ Uy|:19>УGV;iQy5Lӊ""יMAiQgHkMst|q: Z-O{:9ul]68Vό.i1Bh]p! <8X3'Y)i{jۄ9-&_r>YLyq<o. d z'YYfmK<'&+Kf Oc-mgo6qA֥\R0,= ganrgv,&l7{*Iv=h'qأa)6sbK>opԓ'G[xYhmtj1&kf}8ڌ~K]&fUO2B]"|ͣoA|5X٦u͜Wyq%7f紏m]?~;mtx>kRo)稙ŗ >kRgS5[r6gK6ͱ=u]ָyôC_jq9ymHk.y0{kYaG TlUy0MI�SKgu F#:_ֲ6~V"p.K U9Duy^sGkVU1vUyAuij,ӆs1診z pi/쭊e_N>@m[Y4kL8ell;[G/ʁs;>k�qv)8٪tMY>8:bA܂k f|ɿ3>w-_pJ=[fN|v= ^=z65g@8@箍3/f'cTsTgNQ/Jvfڶ++\?mΤˠ~op/7PYlWVϲRu~T 8"s^9X:<kTb4άVZ"A>8;"e0g&rYs(r{gC?isY}7rV>-. _[q'F 9N?�gk[`"!4pqS 8A N-3p@Zg800MŁ88ĩ|qS 8A N-3p@ZgkkP88ĩ|qS 8A N-3p@Zgkqjs>8ĩ|qS 8A N-3p�fHCH� s>8ĩ|qS 8A N-38LSxq`9qjs>8ĩ|qS 8A�Z3pFZ$!q9qjs>8ĩ|qS ZZ@8g89qjs>8ĩ|qS �c-AөW^t޹т3f =wNϺڧ;�4q9:9sS;Eƹ3bVj�g̊pǬj�g̊pǬj�g̊a6FAƏ{PM<kE!l>wqz88ĩ|qS 8A N-3Ll=nFאָkooͷ;001&zMq 9qjs>8ĩ|qS �c00 CFi3p@Zg89qjs>8ĩ| g_C&{gJ:m͙38 L~,?`.[V-gOт iذa$?~{rϟOW_} |ԯo&MT<)o |,:#eNt`ڴt뭷%bFa^{oժgGqB88ĩ|qS 8A N-3p@Zgk 6cM%TQXK}ڇtl&ŋҞ8l} 8A N-3p@Zg89qjakgtӥ]d?lR6t9r]fhiFdIY8XƚddIX֌Pk:1`O 8A N-3p@Zg890ւk>[AE2lhCnfΜfiĀO3p@Zg89qjs>8X fqAi/0k Զ=uƛo־Djf]~6R'48A N-3p@Zg89qjs>X j6t!5<_V{eRڬ&Ye%9{mIgͱ)nkqD3!k8A N-3p@Zg89qjs`5gBǁ88ĩ|qS 8A N-3p@ZgkZ$!q9qjs>8ĩ|qS ZZ@8g89qjs>8ĩ|qS �c8#c-8@g89qjs>8ĩ|qS c-T- ^؁3p@Zg89qjs>8ĩ|q  ui3p@Zg89qjs>8ĩ|i/8A N-3p@Zg89qjs>8XkX:48A N-3p@Zg89qjs>X4U v 8A N-3p@Zg89qjs`5gdEBBh 8A N-3p@Zg89qjaaċ;pqS 8A N-3p@Zg89XmwXӌQ'�@�� ���@�� ��X݇ ���@�� ���@�4 kB ���@�� ���@�tj`uC��@�� ���@�� ��f!z��@�� ���@�� �:50:u@�� ���@�� ���B�ZG@�� ���@�� ���kx ���@�� ���@��f!�cYȣ^ ���@�� ���@��N�N}h<�@�� ���@�� �@,Q/�@�� ���@�� �@F�Z>4� �: M>Dm>�h�kOZ÷?+'O`ꐋW4 ��� J��@90}i}6�nFkmi?jz7+5oJD_Q ��@�"�c1\��@bl<i_ڸG ͉[Eoj?Z-x7p�@�� P`U ���m}Q Z WWӆmI5{w6W5[V ���6`@�� �:1#~rou Ek/@/RD85zIzE ��@b@���&{a} vҕvcm-O| _lյT O ��@s#�csZ��]663L8 x|z%XOI[Uh�@�� `C�x��@#Z u'@C#Y'S”R��@��X2�@�� A|Ook5k$\Ct:uy]f_W@�� �:�k�*@��  6zomk:h:kqa_� ���VC���@i ڴ`okI;lU͖U@�� � k�@��N�kFkh &$UGڈ8'tު|{'ctv=Wҕ{[XX۸0/FmJF;ee#/mՉ% M@��  ���kL; Շڸ{,/[+îLGIGEw˃־#&f A=_?XһWٷU$8/zw]?H=Wn˟^YE's{{6mzUG^4 ��@=@��F^՛ 6^MB>!Mܣ]Jw޴qsӧ؀<ֺr]j[o}j^rO翖!}hww 3ۘ~]:wd-dY_ԋ]OlnЊkEx"k'oލ[t?,}YQ]{{F!�-@p)-P\[  x[x$! \N朙39gf˻^h[3ܰmQ۱sQ] W5@�@@X+[@�@$uXp஠ {sgoN7h5C[mN-ie4syWoz;Eջ1m\ݙymoٕ2~{lz;nѵjlA] z_ϳޚٮl7P<{ŊkG_'agoNCqvWhl q>nv3S8ߟ6jS1ٞjjj VӱS^^{D/^9?�� �@X+z*� �.u^,[ꤤWmP6i䆅927kto]R9nFܡ]@AHm?EI<lj̶?mgl˶Ş0 ]ޒǾk9 bmԫu%\߿}?ѱ;~~U.+vmc�y3__ ntS'l=FlKm뛚O؍lm>>Nv؍^3=.x+[ij}!~)-m#iӲ[sߘn|%vC8ro~J̏aj^ O^DLpvw~}c}}k>9%'{dr'%@�� HS �@�$un#DZhtv#sxvonvmԻ?Ku7_f54>_^-yy3Eb6l6)9Vױ6npjun6yN ufni[!N�� �IDATyD {GSQO;jel]lz ;{][Qme;1flu+vVjs}vJtxސ^ֻK ɶٕY6⟓sW3j >vXYNYߎ63mUzC[:;?֢ZAXu kㄵ(g:?m2j:uںm2}ζ#ryvzM[3[˹6|쌖vQCTNa*"!�@�(X@�@$)E8le;.ȅ?Z61P϶>e9v"jjgn,Fݲ/`t{zמF]L{b\',vwvfۍ̶37e;np\'|g\oΰQkhoMnt75C; p>ODL$X,s5Ϸw]V7Vv\2ѦFt6mg4+yCY m'~Pg;}^ pr{؞t+ߞfONhbM7kvTUߚ\T (b-764Y讠n%hd{??7ok7Wׇs\-1>jힶ*]ʷړ["k4{`֣c4{gRc=ZyջO\{q0हvtlvvCeaZ8]`8k,{ĹrƳ: �@�p@�@QHXM;qHk v ?i a~_g'C{ـnn40.y{*~v3`qO6;B$xkj=GiuQOㄵlʜ;EJвLqo'eׯGw1 G_QoNoǼ0 khc^=< kflvԷN̰'iգ}F9a-]Y—:NT km779V|`{(⚭\~)햶Auo,!$yP9qWG#f.קX*!lȷfq\(ia0ٸ)MB;}p/{yvNl&;ꅩmuZk77.^VɵSѴs蘯mvQ"\>z;%lΒ6%bM'9aZDVn^aHXD* ^GZW["/Fl%Mڼ#[i,.~kG7mVS[D6 v?.oǎ6K T{$"9g6kXės\ { qŮvG8_ń kmkx7Z=s7ێolǶ]n`ZAc[6+13.fQb[ǂ<޸p JXSn3[6AN-ZxcɍƵG!xW>nh �@�!� �2& aMQ^ו77M[!Kw}>(C1hB>6$FJwyoDnO[O;ũߊNv6˖\iX+G’_\OBEoNw9t8amٯȤcfޝ|Gw΍[!Kv/;/wllNk{H$۴\d?>]?bN4sB^w]"gw kzoІ.,[Y+_R䙯Ms۷g}6Ǟb=dv[ӝӊNuf}(aEBӝ\S.0#ny;lg miaˉv?[?߶0ߜn4r8iNU~HoXMN}.kq).wv-.{ WntCm6x@G}l@ 9^og ;ω ZT8s?t?؋g �@�C�a|lEK!�@�֬],G0d&T?߬}UӡEС:Dvܒp;~57[M]G̚Ym M C'ږr[~R̷r̅ p斾}miw|Rh;j:v_5ZMMm ɬ:@ԵdTӱԵ]K+:C~=FGm'5[mNN =W–'qG}PTNhjcl㣥f5b!J @(\⺅cu6]f|׳GA=1! _!�@�(Ekh@�IEI2d5ogvT[Caaae5B4@��J�Z &@��pk%[z|v2]l;L/3^boM{"B#FٞWA�� >S# �@ osg;حM34x{{k昃גZ厓ra �@�(8#@�@HXs9*hS.9;s8!|uaZŏ2 a*Ӯl@�@U@XJi@�.bMP۱Kx$0{U~@���Z5X>B�@pkڭ3#nuxvյxU,:@�@khT@�CcaA%X+YEkwMN6amnI W<) �@  �T1e֣575.Ò)?$>V[g6uAmqo G]� �3 � �DX_j @wd[T&0[mkM~' 2_n?xA�� P>V� JIuٲ$j Hy3m֕{3N`D٫ @!�@�ЧVYC,9 �@�(S5}\m5]{YscYS5ӻf558-~o +{>uVSΰٷhS mIC577ʾ6cګLG4� Pu֪t�*up'齤MO@MwF/3S'IUR3 �@�q š9� �@�� �@�@XcH@�� �@�� �@ и� �@�� �@�k@�� �@�� �$ �@�� �@�� �@�a1�@�� �@�� �@@�� �@�� � 1 �@�� �@�� �Zh\@�� �@�� �5� �@�� �@��@XK�K �@�� �@�� � �@�� �@�@k q  �@�� �@��� �@�� �@�H@�a-4.� �@�� �@��c�� �@�� �@�  %%� �@�� �@�@Xc @�� �@�� �@ и� �@�� �@�k@�� �@�� �$ �@�� �@�� �@�a1�@�� �@�� �@@�� �@�� � 1 �@�� �@�� �šY]55 0r  �@�� �@�|Mh ~T֩sgСc@�� �@��r"Po J;]X]]J)� �@�� �@�hllRW)VRj8i �@�� �@�F#תRXS.]8� �@�� �@$ ̟7*sUFZIރ4 � �@�� �2%PQkU)u֍?F� �@�� �:wΜkX[TZ= !�@�� �@�@u3{Vuu֪t� �@�� ��ZdDYh �@�� �@�eL�aKrŹ� �@�� �@ �Z48a"H' �@�� �@�(!k%dB6at)� �@�� �j$V%VGXCM@�� �@��R#VV\@�� �@�@@X<aJ M7!�@�� �@�H�Zj[ZqS; �@�� �@�G�al#*14݄� �@�� �@ 5k.nEkO� �@�� �Tʳih֪t� �@�� � !?C�� �@�� Py*Ϧ=BXCM@�� �@��R#VV\@�� �@�@@X<aJ M7!�@�� �@�H�Zj[ZqS; �'uY:uhwO`|iˡ�@�� �!V:(hK !�@B l6vɿnݺ~.yYˡ�@�� �!V:(hK !�@B Ua �@�<,bJB�J_Xn3q3Y B�� �%Vo˓ �@:q\/@/wa;cle~nB� �@ ]k.ZmkECO� Pg3N?viGa-h) � �"@X+"4FXK6uA�@@X˟%ǒ �@�(kcax)�*�Z ?@�@@X+[%kK� PgX$@��J�Zآ-AX+(^ � � %?"%%A�� P:Jm ZAR8 �T(a-,) � �!V:(hK !�@B [X֭m0p leGپ7λό9s,n ٚRKo_˯Ӟ\*QX[a 6l+ǫO쿟}nc ;g5wHYf[o"Ѵ40xl/쐃UWY 1^9w5VAm_DG?i~Q&MbnJ%b˯k˯jvg{͞5;4.-]옣=z8>Ǝ}k b x}7q"Z^ @�@�alfkUbh @�y%COڨn\ީl}߉qxE;"9~ءvk^zUQ6iIyn)ĵ?gړcT_}ezWgz=#Ҳ喳Fg+՞yv?vj& ͺ5N� �T!*1:ZnB�@^ %mvHL{EYfu`lt%rƛnv=)wܲZCCv"//wa_~ߖ\b ۷OIӾ9�!uNg# � �d$V%aJ M7!�@ ."lM\ؘ瞷sϿ0~Hnm\rYP}-Lm쵧)&cOlo k'~owS#?!M^p9V[v|ࡇ، 'cq2 �@ Gk9+r�I ama[)'h={oΆ{}9w[:tQSmE#Cs\p?lSPMnyιnlG kZV9{lʫ1Ƙ}]ON@�@FkU28֪t�J/)Hr=[Kqݡ.HjZyWZE_:6t Δ+Xxrz mƌveWn,oqҶ/Z{G7C��r#=alMG!�@Zfd{kK-M:.yגVe%=;{ˊk 7X-%?/#֒,,}$xsBO>e^|i)�4�� �IDAT �v@XkraE[!�@T:bm=vc>ҺvbChWwq;[׮]>#>]e؋aM.⪜þvֹsg~$‘;lP0 �@ U@XCM@�+BXwƃ7ƍoxp^y0 暫 VYe媉XK2]Ej.j/K/"Q޾ � �T  4jX֪t�JšǧȢzo:k&M]zHFڪڠA2,mݺYǎW-kIbWY~)_u(n%.·� �T*6ZnB�@^ ZXS ^9 �@�h?3,L4�J@ kԎ>#1-x455P%LM0>?696pY Znšl)wѶ?N:w̙˯Ğ94�ʏ�Z,Qa"@�ri k9Oڇ~7ϳoqvs\PMӦMs9$"}'YݪmkŰ 2;[mU,%,mGA� P֪kUbh @�y%v=ͷܚg*̟KQi~{_]?Z4*4훩e6d֥Kw>ܮ/{g@�� І�Z *14݄� �(%rϽۍ75+lrو εUV^,X`~®EXFV FliG;VWW.Qε^n16N@�BkU2֪t�J'hzW'z.pd^Vv !u9Cɧ%)k 7X?kx }ǭJ+jIþ w;`ӧϿ>&|u.p. �@ U֪t�Jځ焍Ν;|hG}\^V؟-lDE]qH[veb Tjj;cz=aM)rv=%k+þQ?xE0;λɵ·� �T-*1=ZnB�@^ ZXf:IC'OF\uÀ|t޻o YfeW\eώy.br҉ֳgT{[/3^Wݺu[o_~͘1.J /dw%KTva;\{6avș^4<_-n!iߜ ;a-)9� �!U(@XCM@�+45-˼d[nembpŗn&[mUӺ쒋lMܹsЕ>>i'RbwlyvÍ7ۃ=;sw'`)mߜ,<R$��ZXaJ M7!�@ `m`pЁ:쎻N_d}}5ky,iۻ|Z k>}M8-a+zo&YΩ"ҶD\vTUW\j묽Vb57A��ʌ�Z,is֒:@�fi k7F^tmNXok,#zn~.yY[l _&(zg#.ZÉٶ fg?[ӵ78 F nI\[b�^~F\42R\}]pٻwok[.]b;_Z7|cW]}M49rhN-Rp �@ ђ4a- 5� �j'&,ng'p&k=nx*T@dCnl[̙K;g>\|Z.vwڻ5׶;K-*]pH+c T^r:o/Ï>v?{u-X/BT_~F/rH_|a N ۝/a-MzJNd}|{OGQfͲoUmO!�@�9@X WV� P<i k$KQe;mYݟvjΝ;;No'd;$bzl[֣(0?XSsDϷ®5IvN8hٳ+CաzJ=wiG'yʘ.-q޽[@'ڈ.q| ki;nmݠͳSA>:g̙v&Z~\!�@�A�a4PV 1@�@H[Xӎ{ڠA˻l)T{≧ ^nYhCgnnƎ}$š.vԑ9a0x_z<{x~Ag.Lvc7tKk_.η}gC6v^l?#뭷/@d@�@@X#U& �T5Xݶfk[}\w475K/+V&0^naNYj%[O?}SϘ"yxunܲ؜sǞy2_rs[uUDM:-Q-,գbE>h6v 1cwQ|� �$']Y]VV梱� �@�� �20R>@�� �@��~"V%aJ M7!�@�� �@�H�Zj[ZqS; �@�� �@�G�al#*14݄� �@�� �@ 5k.nEkO� �@�� �Tʳih֪t� �@�� � !?C�� �@�� Py*Ϧ=BXCM@�� �@��R#VV\@�� �@�@@X<aJ M7!�@�� �@�H�Zj[ZqS; �@�� �@�G�al#*14݄� �@�� �@ 5k.nEkO� �@�� �Tʳih֪t� �@�� � !?C�� �@�� Py*Ϧ=BXCM@�� �@��R#VV\@�� �@�@@X<(Ma{ֹsgСT _ @�Y544mEART @�(:b!kE7}: HCXz6m4oht:H-� �@mmuzc;v3fZccc*I3@��J@mXZ>mԩmd(Rz6E�HAXKj25/?}s9#iD cQ*z(;ZؚB "%Hlr!ZkYǎ]wkxk[׮]ݟΝk|}ݡ_N'dueu,477ԩSWߡQxaGCCK|gD8|כvTc555O~>ꗮկ~宫zg<=Sm,묳h&L￿5{ق ܦwy["v&⋛2mn+_m=PNr^R{oK 7ܐѦsguM4~߷q.b6Flš(̦njK.'ˮ;{=g*̎Qo].�R%C[*Zp"3PTFͫgq3~CW{ϻ[MSLq;J{mw[oֹIOL%=4Oh^<ӥK9!^|EW?<3}}ה_|)Rx㍮\ <͇ʁ͇^=X}$U.6Hv]TolWN:Va>l?ls6曭N%\@C a,\5m]/GuM{e^Qo9TѣNIK-TkOW^yʼnz:tpDYf :6xc甏1b:KQtv<+mַo_'JNbjgy9+ z[n;og}mmģ+ gՑMr%"g?c^qW3'Wng7|w#Tm׿-*jW^`q([Ivmmeq/#_4d[_R [K \~mMr2'A�%C $pɚw?ȗ| X!6۸c3 On p h҇4='Nƌ>H,/}Ӈ*:7P~uٟ&Rj>ioIWthVTᮻrk/4I`XM3.5|&85\f.O/$1{⯏]o&|+]o3 k^2=E$>XtA?qT@ O|9 Q-ChN^}]LZ6_(Q .heC~� 64ZEX˻ 9Nhy/*DVY'dG$ +QG_տ0Jp^wM7OL"Y6SnᆦrKߢug Xr2|Yg9Z鏠 ^rӦMN8թ߂9]9珆K&E!nn_0[{q2ђD4Fկ12ˤhɏM1#h9N=RXw1oc!(K 6š$ E:/J( TX-E}V/ը0fʙV;C<- _Һ#aM>"=&&}P �hi!kv3EXlKA|c~K kZ g6xz9¾ʉ!Ap饗~9S_2LZߠMKydeJ^L_%ʕ哞hԞ6y_`U6[֙H{_&/m/|wSZ"e#Jڜ/aM9W$ j*rh*OZpC /,˟ kؑk �t [Xȗ`.pHFʸ 2J҇G6)sګ+,*S;Iќ\>5mwWLĿl\^Ci8E0"4؄1a[6=>Xܱy�"5\OkrVLH NJq/?LX K9$R8(ɼO AԮCXgAas˴CW&a=mR_%&ZI$=휪\:ަ^ Zbƥ6ИRcR^aM\[ QƮ$6xEwS r2xnI5@qЖ.hOXz&k3#-W̔gVu%mfl~| Nw.,E=F| ZJ_rf~kM7ϥy=SƎYo֔M|[ ړ �A ?a- K@"id%aL*IїK9vQ$o٤.K8OҸ`2LK6rF!8X6'O_O#$k/k^6t*"W|aHjk]ES[osESXj-CU>Pݩ> ILQ~I@iHá-YJnD3}&,ɌE%Ufʫ`55q$š9ԗk m~)6QNPs5}<ǵԄlyxK]3EEE1F݋4b kIaw}]}E_y._*MQqCfCiZ?pVNsղ`4#b͟WM;gLFc@C֊m/aM8Jї8[$š'~eWH2S旃~gx%Ec%mSv+/2 qfk̇J4e/"!M#MQM@}QI6/]q:gU}|V}ےK.fn%&:m^P a-[^`ű/@�(4BX,'a[NK=+ZaIһw6T+1MEZ&SkSTNy儽�HTޭ|08utx"k6eaXt~T߲+TIMGX2w={v5 gԒ0aMth9NgJ~*nw8혦#c/w@ЖZ"6ڡ{v%JVq!5lH? ~6-ЇԿ?wa avUW cڌIik>l k6.mRhAQs=:DE*' d#B7 !_ː@ Ei!k)U&N^^zE$'JەkD.rI 9rCt[Fb%׮oFa-.X؉>#D c.]\>{.aU /SgRa-iZ_ r*$Kn=x^>O?xMrx&+F sM>4b{P/}TjWRP_hd&I/(o9s2$_1 $#C[la-3\QaʣX!J]V>F:m>ކ:Z%!HhD`NY(g=5G)h/6C6ҦU ڱZrsaΟ+KA]w]kll?MGE#碸x42AL[m\ a-N^ >Xq5� I ?a,MX:9AJ+;g>sKh,E7(gI/#s/W^1-yСCui')PB{ Lr#GtXNvk܄AN"tok[?q):s4C % Λ7@Μ99MG: k~=6yQSzx]$vpPXΚLk{l합Utd`h3+Z-՗dS }jJ+d>˕^2m^ AU/ZکTƾƇ\i\;Kb1+G+M�bHáͷ(-Ei ;)ut?d3 Uއ HDIQI/KWy@ѣ[g#Rչ6J*Csu]H>6i;L!Kȧ4w#X$N!SLtvT?(OK?jrᇻh?'6r7|sG^zi1ma͋&NUKP39C�H@~ZV-R}(yvqG\9555lc$@փIq+HuI7n˅%!x(;lZ[[#ve~šo%]}uruv}>g[v(gRKoQ'N^{mql&&I^$H5ζl#ImEnZOT:c]v5)wK3+!}i˄t̚5Ǝ6uXo"w - ۺvF$_{s � CoaMs`CJpag>TyxA&%wYgvNz \qmzk92&!JsDK4)J.<&?I uUtS~F$}܌E6Oy~'i֎=XF?`Qu; � m"WZQ- �@�y COa-].xR)*� �pi!kU2֪t� PbphMXSZ]Ufr@�� Ya5ӬBX++@�@@X˯͵NsK5 �@� V%#aJ M7!�@�%F "ִv+a9`K4� PTi!kE5qz#ǚ �@�@m kJ |_vv%0 �@� V%aJ M7!�@�%F ҅5Eik~aAp3;́� �40uVx�@�ph+]Xc\A�� @~Z2۔Ukeg2 @�i8k1T �@ Cn,a4B �@�N aG� �$#6ewZٙC��*@-ZE :@�;44 DX+M*@�@HáEXQD �@� %M]Vv&� � CVCN@��N ?a-f+J. � Pph*}?@�@2i!klSvW!h0 �@""UP� �HAX˻J@Ҵ � �T:4ZJE� @~Z2۔Ukeg2 @�i8k1T �@ Cn,a4B �@�N aG� �$#6ewZٙC��*@-ZE :@�;44 DX+M*@�@HáEXQD �@� %M]Vv&� � CVCN@��N ?a-f++EX;m=Gyn҄]ZO &ةz뭶۔)Slȑ{彎Cmoum}1c_׺{m)Wڏ>ӆr9SNaÆ}Q[la\s_8c5ӿꫯ>!BgIu'C~;UB4?ߴk=i2cԜ>{ϓibŽEr~qzu)#sCҴh*a_0544Uּ[oUqç.X5BG9/v}$j<N8&*SO=\jwM*$1qfm5o w֭}݂|bikmia-vSRo )kZ~8|) !fc/%a-EQ) zINZnàP})r\f!.u5g-{5qjTQF:$J}ֱcG{饗B?F#rւbWV޽[{zMX |=AhСvQGłsXpR$p.7y:!?&S(d_Uv{#m5^*ĵqroCJekaĨd|U P})%a-#+s1qjT/QF5E/X 4bU}tM]1ZNk`uv޽#dSi+b-=>I_jy-ùߴ{#I_ URI5q -N}q폰{ cɗRiš*oD#4#߲@{[b%Lh /CΦQKWQA\$Wsi]jw/c++[%-&[|Tܮmej0Xu|?#7 ԕtYf6Ks; [k >{ytk~˯Ι5e$͗2y߼+c»;r迤Y r ~z^t8gsvz+=^=}Qc5_Wοo[s5[$/8Κ5w%̻ǼGa6ڝْY\"K)a- vp%o}ͧĂ8Y&T~}&d{s(̗ܧa9Yۏ?8giIly}yϛLcOdž޳5+蟨 QgO7^/q}0&ffJ7⌥`=ޜyE6W_3l>mM?[vm˳=ǵ {- ߔ}ty﮹A~SR93g'4?g{fڸ[K~Z,:*IX oR >y̡D%C^T0We%Wvi';hIr!mg+Ygeɭt&0\u`}^;uԺam_|Qx'&l_pBΥlcONƧ?Inplzs|駭lq5 W7ZE0O8{߸"nmj<+/FHT;pVom=>y!'l z^ gϢ#F*2#{yMQϼ0(sO]ro]v^k2 kLkAql񞍺y- >K`z/&#b-襠[D ?U:fsp=_> ŝKf`8 kۓ~1ʳ<\ g~ nƓ?f4�a} >܂k"v0? ]a ㌥l#qLQ{rsWѣPw\#ǷcL"I\#)/dfzJG廆9>V>4|X ʨ4aͿ;b؄mpMϤ۳,0gkĔ-#! Lt}43Ma_^W-ebL6S7<.5O?mZר WԸ&͟=<,(x-`[g+7g|0!-(y ^wʼ^unv, {~_Zm:'aLoWQo ǹ7W/c瞎'mԨQ;:$/ak^$J0'γ+/Nr+)䚘C/a-8V7K^G0sq_j^;^L9>NZ%8`m 5*Gu58Ta5㌹y.%|>4d{LQNl>X&1ސ0ͯ &EQc=̗GYW__ߺb M=9!|" -3׷Ow]4#>[X3?9wRGS(ʁIAX+JJւUp z)zš?ۯM\9/w%8Sa,*:Ja_3=6yjR"ԾML~GlP&PO^šԋJ E6HZ z{ռ>}vG.9dl"H=Lڏ>kz k^tZ]V?|_'yo ̲;U(p.GkG8c) ?vj\}Hq-?zQZٞAag8V&y'a5~zk{M 1&{]X*Lvlg!4BZʮ6a-KRCAɜޒ ~๞\qD*R0դ'q5j^f}p k~RKGq*OLInjViHT(zo޼ K|Mʗ�뿷=JFVYe[}1߶[=gV'XeMΏۇ+x]ԦM}mTVΝ-J!b-؄oi:.i!kiZuU 5H=h2zg~AIeML3P|af2- L/ZJ/a,7sؤG"TH-obyQ&& 3ZwScגkaz.ےRL7o)O N{$šu=_2Ooo?|ˆ{Unw(!.ν1/j:g^Dy\7c & 0'?(@y[3+Xmї磎:5+L8U[gg7Q3ES}VC/a^ F_s O�~^;0:u͜9�a%Fðy4a-7sasZ3,O7D!} 370-Qc. ~&x]Vv[}LEH:?{lO97jՀW7o<[S癰}$3(ms;DseQoea?1mڴ6iStz>eoyV7}֟$# C21zG7Q[ZK~ZZ,r=$_Hl̕)#&x_>r_U2 qD?ܟE!û6,WJ&n;[[~Wyϴ_ M/mQ2 d%c->塈Gp^A@pNOWӿ k޵_\/ZXac-氇1 gQ_k4A/I7d.gXpe[B3=j\'=kk%AGTWm=@'3=3=Wvk W)Oá͗ {8 7rD#[%8"%yym2}8 �@�aph{� �AXV%� �#Vb9� �*"V% aJ M7!�@�%F 3:́� �41vVh”@�@4Z5 �@�C֪d!U& �@ Ah �@ Uɀ4a[ou;C΂rmv5ؘ1cʮjl{챇=#v筚|駟ngv SO^gsc_DV[J;V.ug7v[Goy 5rR]F=vo2",=RugQ}Iá%bmQ^fEvʕ6w{٘Oi|)ɺ*^zh6lw}y s!.6ҟR:P=>y!{kJykKП }ۿꫯ9o, ?a-+MXDz 'XnZΙ3UBX+i\-eIB 9EDFXkZl_\X"!2&㜛dSn.بQD+޷UTg&I" !&!DbhEE`QJX ҢrQ($"$!\$wu\f>g9!9{;וּ[+vꩧٳg;#x.ZeO97My8s khO&Yf:nԪ'6uӋ* 7вڪK�떰fӵD3F<d6@si֍i-|hC'=瞺CMr~֦v~ykIs:mٌz2GttlN�'_|y%NpN9Ο>>sLOO?+>nٲe]b{<<ڐ~R= kͳ>2(UA,8퐶n 9wsA:魚KQXs PX=Oa-uٜ�>7w\7o޼kv@ kVV=!: =^&L@aM!5nlAXBEX oѮ߾vvQr6nߏFŽXb)&>bsEuRwCgF`ҤI-_{1a iJY0X"_w\|JHUW]vm7X6C-Y-X6vVB&/ % `{Y`KKI^ )]w̙SGֶn[[Yx'4;⦿a7f8fEMm󶃋2wO͒6qxfU6S޵xϹz{v&q&n<վQ'Oʂ^h>s$#}` 7;&u_:NІhSa*ϯyNq =(:'x,mW`͋wAZUY>>@JvיZ?G#ozӛ2|.b-4g춯 {je?c;E{2V0~G/zlH_]b<<$/-vw'Lʳݱ%y2ؼw߻`\ÓKqOٴGƼg7X=ώ{v_G>혳Ps U98Δ)S/唾rB3֬Y]|n1c9pg?ᨖä­CNn`,ml95瑲 NEO8|l^8VG[b{׏V>;y;%Ft/]M8qT,3q{݌3Fk>Nz\+ӦM'o~6hQwH_emgs k#:(k?kU\e |.xoɭEᄏe. Ll\?w_w1BbiFQv"!k!WkgE2K8|NBjb%,\0kB' pD%�+Љk Ra)1I4ߎkʕXȖ|'9tzk1'Btn-`=p~K9:s"1仧[Jy}눴ڱ|vns?](~=^aM".}RƉ|ٱ%6~ 0mv?E}؃l hAȇq2$l 6(QkWXd3x%6O:#Qozc]1vakQ.a =4S5;^`XC|MZslL\$ >ZlY}zM[oĬd.wkm807;X Zvݰx{aDWʼ;[n;|1# ,|?~*[xF(ޔOX}'t{ k:ZʚK+3`m_ T}pn>WPZ^Sbv B']vV_/.t3" } ~;I mpm^ ݄Mhr0nRlc}c en؍l^CZ[Ex'E툼|7Z!/tK>G'nĝ32'jh7(\5gbkeMweo kFQ=6fNزso^Aޫ/mY 7T[QCb*QۆRO=խi:eBy浔[-)8ijO(Ї>e2su44wb|ZUXKa Å!N.XI,gM};N'0k;[) X k/w-8&=}Q򒓫XNoWX1>DF)"c+hškei wXXP„'tu_%)97CšJd$-2u7}3N\G{-6M}l|iM\DhŰxN0g8-6>.6.KxNNC kVbF*e7 M%:-DLl}'VE֍/;HuH獴Uv;{B[{l,DŽ53|5XwkTHX[#.jn-@,|sqhXB[ʼ4S5QƬdmxWpi[wv+/f結fx, Z8e҂>|@֬XO;VȉPxXTuNwTC ;Sy~_UXbBo,ckKZ̲B@ڶRdžo~3յCh=BAXK951Q l|BbYӄN̬tc0[o:II9/D)pSXr4k|xD\|"m8MeukK m}V">!E֤~L`8&#n keBz;OaXV&vR/"A ;\ l3/06SX- v)kY:N_S.aMc ey}߄5Ji_! Kp6ٰbAU5<*tSX|d-[HXB5š^q@*[* kD}? kev=!a<{km"=LnaMn۲8SXN+b qRbⓥ kx.WP @KoOzb5-t~"HL(;!3&RpI֬/6 X477U-֮he(_Eiwc"ɭ_;>"9|"hןN]Am\|]aͺ)uX5G}šwŧPL<6uo6VKP jۺϪ3)}D-6eq�y%.4}U-e;k)cNjG^r׷.Y v][5͋~Uko\gDXSu6+T\ Z?Vvܺ=O;<~lqgǂpZX!|5]*p+D[lrk)8Js)(+ō7XOw1ֺRֺk]š,r\/z뭅XF?^^'1LB@S\nZt;=1>3W\Q\"&e[x/s@:Ы׮2Q{eX̥:ػ^VԕN9 k7&Z)+#n1+2_ZI$q;k+n8@=smU]i| ut(9 }ln*qvb=ـxO_`7b&KyS5_B_ xy'E ڵXӯZMbkwٟ*o{Ht΄榲yҮHC./�N˪P.RvyJ[,63=?Fb,typ (H[V֊5C =B}X/n>[~٥1z޵'y'8ʼnem8\Ю,>^%ڕRLhK _]8YZVs,N RUX01+M57bVB){v5Y yѷe|عч0a>V|&S.R>TaMb= ^2We}gsKo谜 (I)"oظz;vlD04|׆edbbzesGeZ,&oIQnկ]aMpxi;p kx/oo`K;[,m X|`6EXӱMBqb ,J,'qrk5ۦv,v,R6Aql)ױkqӮ]ɦNo=*ހ٩CÂ[w( :`'#/;PIx?eՖ,ݭ?eSOm6`K$DͲM߶&-ŭ;պt|n?4}qEPvd)dY{\fPwB[zƲC?ЃxY;ĂIӷ u*"i3U5-_G\ʼkJaMCnr煸&=|Qh|wTWP9@я �� �IDAT~#׾3;xe5rk{,pOl͍qaǗ,vضŐޮ 2\HA]r4;`^BkmkeoUaM׆|{>*I[Zzޯ!wT,w klj� D4lxE'AhֆstJβ0zqD7L.B]G9TCnj\z kPA"@� DFrZ k56"D"0@!ÔUڐ44I� Da , D PXkHcwֺ0'D"@| � D^ kC( ICD"@�5C� D`C( I6$ j"@�h9--, D PXkHcwֺ0'D"@| � D^ kC( ICD"@�5C� D`C( I6$ j"@�h9--, D PXkHcwEsuӧOw˖-sr?~4;3t\sMN8C.Rw{~ 'VZ?J٥_)>6Ƨ*6 Jϋ$}mѢEyyPNZQy'婳[o|Wݽ?VI7:-;汃:O;F׭ Z3kp]'1a„dW5Sy[LRzujN1>՗/>|9xZ7O=TfU&XuȔT/%r6~ U륈8C?;;7~W?>n/n&NuZ1FrO*o=_7*~v^v|%a={;{キ;ի+sۆ5MYQϝ}ٕ DWu zZO_VO1qxui[FpלarDzN*^[AedRg?hBZwM[!SX9s{'駟Hڳ>TZY;kMSa֚:/Cam$js:ڽs9w\7n857xcGaZwC(}La>SH0.KZΝl~rS5X=ܚ?-I@V_[?'WUXVHVcNXߛ_U:yZ9z:]-:^7am]{` Aaψ_w-�5 k~#rڵn͚5^`pw޹xoZ;pC( I'aMNil3!8@̲Z xhL_|qI5)?\E`μEرcGiKr[$=10Lp뮻ܜ9sM̰oOY 7{キ84WG+piP/[�'`M˗//܂146=m/][~xD7NPI&x_00C+!!^zjq]͝?q/{w.eE٧pO=š~.&ww! m,댟XU2U{d;eF+>Kn-Se񼸟" ~;jHoܢ/ÚHϠ^tE~X~M/'C~u*bqo1i߸w9m=,]M8qTM96cƌ~Zc>WԔ5lN .lCiӦEy+v*]21WB\N"Y7캐V?a?:m{vlIT;׺ъb3oWTF!|t|TAlY3a2ZXt0iJkKY-RS-i]8D>ߚOVN l[I|\ c6s/mWm25mٱeK'nZSMAf㽅6#HVo>p{gEB }k!#DV33,"Vpȇm~?9uu@O1&;_~bCu}OXsYG+S&_.Bc9G_bcIDrںK.|6v"Bx!\`:7祬tߺ$Cg1ova+u"WhB>"z(✊'[]Kus{qX“"i ix&NGbQk obT_Y,~V8}u(C.쀛inw~ho"Z�^c˝i_JGgPXx#q\ۻxBuyu@Ba6꛷AXm$ nG|:1$&yNִ[;.mw I KO�|}mݐZ&Y7G{'C6nMp(|]a]LX7AcDU+"M_Lp|g?+NrxLXb).BWKY\bšK2EOԗz6L6]3u;gBz,~ GmaSD>&6t߼m`@hٹj1=[X@K%X7\=#9SXm&BykpʜnX2Xv[sxN S5WCd.AW]f" !u)N`&BGKukՊF|1NMD@|gVD Y֕>AҖuncYB~kDP&i%=aM">b}sƅpo_Vȴ!PXמ=ͩ5AҮv�Β=} -ِS zȵg#i܉Ś}m|/F|G ŭel:[l0BDַqBmfTSMod+'!a,Uҕ}Ǭ}šOCZ}m۬ k"H}j=l 6 gOE5@pi5rYg]UkrӖ(o=ns?]hҭ)'Unο-X+nn!aM6#(M׺:h>2'âHNCsvĄl 7kP[F)撲4rš&˷/[22 ֝{[nVX}J<)<0).ǡDc"unRNo-vU#ckeb~>JaXdHK.B^zqKܖŻ]Ӕ6\d?!N{bp&#ٰ e>0,OEu^ g- keה-x&$UʪcMaN` c3ơoΕ\9RϹ%ỏ79x#ɥa+hL4 Et*�YJ/Xk֬+ 2]fX|š,w[DwB7֚*� Y]."WSFUsT6Mv-`P&rZ(ȲuS_[xeVHXC}roŵh#ںkeW;kUozU_ǦS%KlӉxX|]ryvŋĺƬl}l.hg}I&sn k [l1"֗>)qBm,=DZ\ 58C0}ٖ;56+Vh}Zb}LwVwZ-G O|y- j9oFn&Ec{򝏯v֒TaMB@qPvh,nwr/}նsO.D<_X33U\AC#vʪƺlVqYzyCb?Er"d\e?cǩ#>zkMd:C(oמAXW)BF5Ad=ۆRDTKP,*%5_2W E<x7 "\Qfצ1.{ SS]͊� 3pW\qE!06:>kLiC_kc/N6z3t*u]m^8WR&w`N~Կć?U7v"ʬk6pXIp 6ټr]};v*iSZw8=Yɦ+eߎOISZ֥F,N\~�r)dX0[Swa'{G$Qa;FSElME@ fZl1 [qm+#(ln>/uv噕[e^BZ7"w|VdݶZQY%>hC:RVX}3 k>"e)yB q_Uq>aM֟i%a&i(#GXd6^>>*E8 91F-}yK=4([S a |,O %Oku>d++zЂ86S wPэuiE Z6Yn$ $fRȺ3uFu4*Ӽ>bֳ֠Wscn.a"@� Bv[<ڐ/ kC f/67" "·}ߚ 'Qts qAh)5j0}9m}TbXu_l>oat?xs kv'( D3e%z!qQUb}ٹXh"E0vqQaPtOUy9-73 @�kZ-|Bam@;!iV3Vb"""6xg7֋eD@wQ`Ԍ�9x!kֆYM"@�  C ְFgq� D4 D"C ƾG� DPXGamH$D"0(5AX"@� C@BamH:!ihV"@@AhiְFgq� D4 D"C ƾG� DPXGamH$D"0(5AX"@� C@BamH:!ihV"@@AhiְFgq� D4 D"C ƾG� DPX7ڹ[~{w 'E?'-߄2؊w׊`үn8m qw+BoS-˾F0zvՓEJŌ}m"h$2砣6o;=9ઋ;|ȆtΡ[@oЄ R]'8 )ϟ4O)_zݥ^?d  D!ֆQXlamkwpog>6oCfE,Mp5F3~bkV?]EC?U$HA䮹wiU})#!DAhbγ gĨAK &@<ڐ= k5uZ, ,O1qx^K4[HčV6l,pRO!Mr_uڤuBn ksᄏ;3 -.a͖;؛G@g &AyPg'봦1 ˤC M<-k E<ڐ2 k/biL8+wykJk!2 d {1"Mֺ% T ) RZ3urֺkY)B0"PXš]E\XjU# ͝;͛7>h7~e˖b;1lzWa5$ex㍋֮]. �� �IDATQqĝoرvw.mҤInrKP>C'e, =n)~z}PXEwT+#>ƺe"vŢ➊4_1c?=Qpj4lĸSź &x֗Yt:]Ow/n1N=Tfϱ nO1;rsqk֬ZI"ό`刏v+I״ȇm!_ܿg7~7#X%/o=٠uIKc V7gc )uAC I_5j-| :wۅw;Qq;X0aXO/<)#b練M\omedFY[)O;YY[�;KmG͕۾/.?ÎK-sҥnʔ)+,BE8o VR^s9Ȗۿ92,l?pkД9 D!zra.PͿ~aZ;XtIh exyݠe>bp֥ P>O G OKg㽅6#š/H" -V@!B*坧[|s[+N\2Aw8C rCXU>3mgyۻ?˫/)p"^xN}kS$YgdUwPYf#G'Ong2V\Y*IQoEm$GoC1B|~*??ryUfJ[Oʨ:l^lx4<nj@B[f uhF5J_v]uvNmv.I[>z(~Zh.+[C]l>z�&/Ik ]^k}o뒒_J],o#m<3W\Q~n8b}Q-ҝxO[.^xyTȖ˖S5~Z koߡ|#&A"PXi˼5k&dƍkY;XzM[ lU5"Z b[E˄5m ,#XQpո;b-Y,ƚŬȗk"WjkE U4S#9AhbaRz1Q{̎TTa-&bܱ2~̷g߇. u]^lְؘӜς{xc9P,ޫ=�YX|{-˗NՃNG $  ,zkES(oB͚ la ٳ[jSwqFry&{w>6I?QYRj HK+S>!bdnn͇Onb&܈*}#Qqi\K B򉁾XlhZ1Vҙ*օ?䡎5Oub+iL6ZذVAP7*wP%48rGoejF³wRxzM; @BampKiMAXCD`K܁9 .ăD'-*ša1>SN5WʐE}'3x̏9ؼ#0(švmBQ* kH_҄eS,DYl(m1J\1antD.^na V;_.\o>dxE{n,MS6o)s!M@ VSbiaMğ `& !nX]pŔx>E8XM>N5&q:C.]|{/VF+aMuj$ !`U+h,|kU/8wf<\p2a-Vϐ iyL՛G{8 2k"@z@Ba 3~bӮruwN�c)"Y!Cssg7va+bšbHעj i}+e6}'"./ć?U7&I}i]\ɯ_vm&?wRDB` B zy/ &LGb/8oXaS0+Øopٍ#=>٭zwn݉/ Zj?S5̙37\_!!Ǧڱuq ƨ\SvyAbv5X[͒oMI9`e-y(g>duGͭAJ~)u] !r!5`c+k#7=`zs4ʦh&HO釺Vؘ"UXaj{kmw}Hټq0$ �T3KX1=RRzS^uy/nua]Rf5iZi?b!?z%4 yܮ)Y{"uzoi%c/b҇o%_J]l:vںc8]t2eJq(Oo喂E$1,G k.3|l=~lqMʩ:9� @j@ VCCC$,#Kɲ # +?Bb bD@sAh֚,\nxtUI�,r kg6 ][y8J x_WvwtGyd]ϧ 8[;Iޝ9>'9mZY/t&7GO&VXk2&מ~{Ο䀆y"@B 6$]ڐ44x$.ƂW XviO H+^!|@ur:58<-?ֿ;{%iv\ >, D !֚@a-̂$ ` &!}$tŠ>@ 4a jcu7nЕ"RX L"0P!˄+CamH$D"0rA֌, DD ֗]z)Unjo"@� #RX뼝 DAD 6=S' kCЬ& D!RXkX8D"@@Ba!bPX6L"@�!RXc#D"@zC( Iߣ6$ j"@�h , D!B 6$ڐ44I� Da XkX8D"@@Ba!bPX6L"@�!RXc#D"@zC( Iߣ6$ j"@�h , D!B 6$ڐ44I� Da XkX8D"@@Ba!bPX6L"@�!RXc#D"@zC( Iߣ6$ j"@�h , D!B 6$ڐ44I� Da XkX8D"@@Ba!bPX6L"@�!RXc#D"@zC( I붰Gy=C(I� D3ftM[{C:/"@�Hr k}FWF/-_=3C(I� DXoܤI܊WwD"@\<@vڄ1c^}t j"@� 1NZXZ݃7XKw"@� Ç@.BamHV-�#NW^VX1$D"@@Im?j?y" D" !ֆ࿼/v=ē[ڵkaV"@�7v{z 6X9ēOeJG� D`6$.&Pcuucǎu/|YM"@� D�Gk8T{g›<="@p"+BamH[NamH e5� D"@� D!Gڐt� kCЬ& D"@� D"  k٠mFz?s'D"@� D"@ kצQXf5� D"@� DlPXuo3[; D"@� D"0xPX6ֈڐ44I� D"@� DdCZ6{܉� D"@� DC൩FֆYM"@� D"@� D ֲAی(N� D"@� D M56$ j"@� D"@�  fDa3w"@� D"@� D`6xm!ihV"@� D"@�Ȇ�lP6# kş"@� D"@� �kSo( ICD"@� D"@@6(eQX-̝"@� D"@�<( ^zkDamH$D"@� D"@!@a-Խ͈ZogD"@� D"@!@am[# kCЬ& D"@� D"  k٠mFz?s'D"@� D"@ kצQXf5� D"@� DlPXuo3[; D"@� D"0xPX6ֈڐ44I� D"@� DdCZ6{܉� D"@� DC൩FֆYM"@� D"@� D ֲAیr kƯ]w]7vXV"@� snڵguV?1?gEؙ) D#+BaM�91cƸ {5n+sk׺?y*\� D#Ѝ;mqƹ'|=YEffB� DPXkl`9^[j["@� }FmƏV<2KCL� D9y.Ǝ~裝)"@� ԩSn!]X "@� "PXٚX5/_= KF� DdE`s&MyHfefD"@\?k24 k~wډ((>[79mӅvFChHwG%O 0_ac=Zk8+Ĵ\0s=b(֡vwZkk׿.Q~N;noy[߻뮻 k _җo|׾5O*:s܎;Xo  p@|]Moz{K^R+K/їw=0="@@!:m>yЄ5lb\kH6{~nVu6>򑏸Yfo aP=$nS@`W_}lqW,A) a#=Hٳ 駟.B:N2ŝr)n#�!__ݤIOt 'J{5yM6~z4to~GE �'`΢ ;%K]w얰vGo^Fx/g?[s"g5[ne/.B`v VR沐+!#jѮ@BTa s`ky7cv۹m]uUG?Q1@x9C  cYh69ֲ?@zB{gq3FU(`9C8!:܉C'b ^;{1b Z5kbGzWxO k s5p8 |P^g}nVC"@@B0K^Wt Β4A~!*$ !dŊEvӋM1,ヨ+B2 :E- 0\Cw!Ap" " Bl~Sa Ħj=i_jժŚ�smS&lxVT?l# X`]veޙ0a(K1_Yc }Si�Ai=6D햰9@?G! cCO~~Zo}-6Q^xaaWe. kRF ɍ@BTa1Ypoa af?6l/”0B]q�x�Br'|8DZ�Nd?X_^W!q kte͆ se1كɪ\O,bs}.RwD [XAQ!Ck#8g|eDX0z �+[w,0­Rm89⡇*bBB ,Ql<ِ 옿q9U4咒',{wݗrk ,wlXw"@0#PXoN@t,;:WXT[N'M u{ݨW @@d-'l>aM\2-E FM|裏H_N1p 8 i}*x1X`1("Dcq:!L Fk{ WF?t(VM|a NY[WiH 6XKF [X<  �aG kX*e린 V2sĮ5Ba@=.FIsψCHtナ0P|Z;J v\RDLV!!@V\[L"o!WY~ICA`=M*l M\4?"]99Dwmpp RNb@`E,mq46pW ~Gw+ĺQ(ؼVzUq>N5Dp;];lNzm lGXݫѰA,;O"W}" AA0jOje*6ڒ;?#)_kEMa !$G-^r V7Ɵ"cB 8 W\7|p 8�naM.qM}nLQ\�OY}Q'ኹ{2U-YW!Qb}(NVL\ RrIs5zZ3`3K"@@cC(5[~֪Z\&@N@\D @&κ$ۻlkX<"A܂B>%56ZXV\Z@Cowp!G; 鶊 H@8%LZ'R,K^`lv VDnHA6Mrc+\.\C&eeYvLwSX+�֪p?l0 }:qk5oeûN{"P79mNF|p;q0:\TX-pa#ӱk Z\x`'VfH(ʅr u̐Hg0].S~srHI"@<ڠS/ kd;@`X|͐7HX!p{$>XSg ! 77(n.(ڃQp+juN5Az__Ҋk_WFXc&{`mqc* ~aK->[Q!V` K) R Rp\j|h=btDy1a]q\b&cMI0܉-q{@BTaQ 0` k_.` l-:엿eaocF9BqDSnI5P7s2baKk:\"D]\zͲwrX;t*lâDaC 6$ڟ5 xX+6@{AU) .�$cDK~b|eqa~lzn' pkHԁ7MBBW\ 7y"X1.EډnROI1pw%bxZWiz 6X2wO?ѷiu˴⵵F뎈Xŝ\AcV 1npŵXO@ mkw]8,>ϏU]aM qIݸt.5[k8x,S=Z 1+&%cy~eDA@ 6=%RFG,Ħ)XOX+3 pˊx"ڒ뛯`k$X\G\`ANbbZdR7gﶰ&!3gΈk{OY.6D3\ft�&\h>,Ͳe||[\źWUaM6p{+F({nV#zgʂrwyA#Hr ֋ 6QXtm ,˰]= keeR i�7:*\e�Ek(\Z횖*bvdJ۩2Y"@@?"PXǞF) 4l$VW).Zj7 1`9{>*Ýi )&V?&zqQNRXAH#|BpD ^M4AAtQv.L'X(:!3b|ULXC:t!bVժS.1-emzYgDDCl|uDc=H@\ ϴ3  ^[]p(,Ƭx/,0&1XFWپkRg:>mr& kv 4aV5CLXVpQSXCSA\5\W׀Cx\x޷%SDRLE,aX-'D 9xA-zPX@ '|rᢆ[$u "{Bxf? o}[݂ + U9iF\;ocb]ExU pæ׵_}#W9la B V0 yU҃P 5n�qb4aq0^Lj? 'u k# Dz뭣vyk2I&M%}铟8+LjvXlH~_T+8DXA_0(vE:D/.@_hGX&o}u !ܢqaơ9g M n=Xnx&Q>kxi<ȗZَv0dm\XCK޶k$^s BXc[X5z;f̘QsǨQ^ki"r!/ߚ.Ls8ߋ^7 zKL"Я!wT,7?� ӦM+tM$cC~op;e'^ ,#t@-ؔH{æGt nq ex $BD8". rK= }~ !x2> 7Bo@SXC;!Vb`2ân]w-ShƲn'6{J.n[q:iPBv>1vf ]=X=^j as|>CW}8F o,5 {>]a R\K|.9mSNF'N,G֘vء5GϏXcs"x{h/\b5 sz/0O�2W,PTg؂Q.�wؕ"r!КL1Oq LX>["SC\"@)ղ| N2ktdS+9mS5pzw\|uu{]S`ݵE Wr/-0C" O8ᄮ kU4 2`B²  \elU.'ʊ9(qUG}|Eu21"@�!PXSV~ֆI,h6nVfD@Ah\cU$D .p$V`Z[uCqcw"@Zrm;"!'PF k58IH0/}KnwB8X$4Cq  É@BKaFKN�r kj(#@$ps$.+x ڵk q  k@Has 5Թ orwlMHu~tsںSO=͞=qA1^G}[zu! A mǎ;"^mY瘦65bӶsiy;ʸ+I=ŋqO9+lšPXg=rBamR􃰦A"fV'ukҳmU)zmp nN-nÉvn`nᆡNam̙'p~z!}-[;L55흦�� �IDATSM8XqKIjR1:o޼Qqh3oa!ej> c,!mvDK_q.m|p˅G̖IRFߘHgBυO9&(Xbq�W' [ېg{E}<SXҥKĉG!Eoܽf̘X~r曛c}"6;ꆒvUWvۭ^R=6{Ob]Z |dK]vں9)3ғ1~EPsk^C\ls'QggVl t̓l=zֹ2d'- m..?nʔ)'xWuUePkCgQ֥뮻l)vOBsBh?%oA*/:,cy>r<э7Xi˧zFBa-ؠIX8EH=Yb:D\BTXVD'܀ymm<.\؊#dHfKtm*jУ '!>}[6&!e,v't{ZG|QYf|iLq kvo] sxr5|뚲Ή �H/69k{׶kз6}s1Eќ6 x 醰 I|6"C`=|s`Z%e |C38]q5o:eC_-oMD ?a[1yO栲~ߺO|ڭgi!ֺr LsЄ5}Lf'Y%i(PZ8 sߢϣEiӦ=/$J9}٭^m wlZP&G@sϵt}G>ҡFhgog<ɆOILöAH<4/k }],"H,y:f_QaMo}}?f>⋉u+[#> O;39#2k9ZӾ5*=ŗ9m N08w9V>aM,P[ϵ)}lLWٲ7,aln)B]S׹ВukA[+1k;{=v_v "Ι>J Jke$aQh#)KʂYfJ|JKF\]>ݐw = 3w] I0ZN^|CN,R~q3|ڧĆ[#H6l֒GwHVA٭kn!+u kxv Xjޔ`2cYrЖhSl}WN]lPy-4XQnZtSYHXkwy&u(,4Gk)YWO>QSccsݔ%톰u_[O*'X>ZQ xVXKXƔW)"RTѾLX ;u.d"7u kZH&9,7âRWߚ,vͱzza+ҳeWe 4ub VvzinUwm}B{W ,S{f'}V,ĉ-CX>АuIuޱB u7~txK3kese7ԝ^BaVkhz&&䲦饰V\e kz&26ʩ\Na-k5/E|DccnXiKPωH2g"_uJlY)<“Ծ~VEX:h!RǣO v5m#[ۓHu4Gz!_S]šX8CC(a &aSB3IX'Ėr| b`Gw˖MDmQ~$X|b$D5k q'Y,1BTR].B YdɈl{C6O 'oa \Pȡf@J)V5>4WDXsK{|SvV#RC_|*XH&ԩ%_gG¡>X2wV[>^)e>XGtu^jXõ]a 6J? 9T!RК>?))V}:Ϙ&֒>Zl*{|$fP"zk +9HkЉĤɸ5r"O՗ 6ر(c/uJ2aD65K(MJF#eyK#]}qF }X( DC]nI$J6+ࠃNl6'סTYze&54f;_aɎ`%A$\Ӯ&267vM#R6I)DPb'XuҖ[p_޺&$a}7%=W=v@y h)yf~! ֔S0Wr&gl2FR `1Mr fB\ ?}}ڟ|9sy~Qg{9<~jd1!eGSs9S$]hq~GԹ-qhcma眯i^`?k}s[iε|zIx{>s_ XsmX,xIs.,Cܰm[=)h48/Qf-͞=;6X25=xc?#iOdfM~ǯ׽uCm9ot)+07C/"Q/sz,*zd6)Xz-A*=> YO"R\ʇ.I3ER7w;l|'dIJڐH!ە Xu ]pemMɬQ>xvL?IR/r6XsːL}3|q Iޓ?>2&}}> ɾU{d֝+.SէIcAq'=1} Y3b,*ob:$ oF^|KotЧ9Dbz>w#mg]鉮{/~3+L'ykڇ2`M pXʱ?}m4&}Jh{[z1,Wi+JslI!ɓV>dis!iwu:O{_1=9s/m?2N6l>%1}.ǟ5_q{yys4:u=]s{ J;t۳sݱ{⻔;z99>q퓲 l=Ǿq?2Z,,<{DeW-X+UAI\qQew7zuv[O"Nh *k|6J"k#C NmH"Э@!kREOVd,̤7IqUxɤ.}eCZz M|ISzvrOfJ,8!Xˢ*PZ:*"@N\6${ێ @'kUyUYͨ3o3L,<`L=c]rĥhJ({ B X*\$6" g)$P -ZT Z&(J@F>fI ,8!X˲J\Z;!� Pc"Nh j}=ڙ_{ur|:C޽{s7vןk~og2c_zg'pڟ0PV(<`7zIFհ$!XJr:η"î"E׈\|g'Yk3IWBVg?n+l,NʒlڴifѢEoPNڜ{ֲͧ*Ԭ8!X˺JZ^5wQ$+Mok׮mY7;J߳uV3rH3|[wj}ܽ|'c9^R;v[n%痻]iO MtDKy.]Hn{NoA튪O}UVg-aÆcCc_:c!jց} ~K#бG}{h,}9LIN+n ^#Xv^Ǭ_[5y2(c9lܛ?}qxowY\oIn#n]q#i? V;;%xMy8!X+OZ*km�-#FzhGڿo"; ܋N>0AfwS'^2uW_ DrR%uu&Ȋ 진'Q|\-M}f'i^p7 5Lyξ]G=4/pOD3fL;CBʵq&Qcwr&OM莩176\\Vi@+}oVi]Q} H*KgD erL9LG}ERF|Zo|mM3ϴ|^<0!}t-ߋ8*XsZH1Dg&a=݌}1Vg@}]s~t$`7O $y$//6|3hpl,]of ni/v%v $hJ:I@!k׶ 4>~ͽp`Ag% 6d, ]Rf>IK{G @j/Yn 'D\n@wY$ vB,7:3/~ #N7]v5mr/z|՞rr ֒)ҝ6evNd�7>jiE: ^#ыCRd_pOr}~4D�� �IDAT'}eӲtoɗD>Gle f_g}#|9K3IWʲiߒzRǽ"Nh ֢m9=C)mRP/i݀P~~|~ ^Ν Pw]qu/}W>\K;?7 Ckʶ3$,9ǖI_uiIAȝei={MB1 +s[jvjޢ`iSI+Cf?jӥU^g}7/ޒI5'#8EzD9Oyn#u^WyZ=U%XOL)AW_mdC5_A ijr)R7^`]ղ$jlGM'zkinv={ݮ4!r$˝u_ofyEkIkJO*r/>FjQaX@uvf7eI9`_h'F V_I}|RzfƌC5kք_^hIzlkS8`-)p*kQ7Oi'XKsd}igWA{4hiyw_d&Hω4i5 $HfK9}_=v_6RmיΟm~fqo{yb s̔6 k\s͢qqrv>;|V5L\.)|xǾO-*ȅ)Y'ojVԇWp'x}e[~;}?jݦޜᥗ^2C5wuWp1wΌ4' =]0'}I |TҘog`ڱ7,-wYFDNv-uзԝ,-;I˸]~0hؤ%3Xv u|lܶ̑^ѣe_|{fZ,5=fسu:X%>k|2c}K>jlCҌ4Q;FФiI$viwiF$Xd{~dyO~.|h{vZs7KF%{Ǭϙ?wRN`M:a/XK>$Ǹm#(_|urҷ98$}'-Id){4X$_F}Te X˧7rpVOZ&LR{x}90:3 ꉞq^;(O;i5:Y =5w4&-)2||k=y=w͜^ziPg}6|]&}QGeϟ RNݾVKٞɤ1 Q}76ݓ3>B3\I'OTmvԅLUo܌1-_D\tEnfBf>sN3dȐR4}pUIƝbW\ w5\cn _8wH>.ڬCYOM ֢f] ط`;_=61~xoϝH~i-4;$'}fc>{nu׻s )14c|DH,)}_&Bm7l7}@z <]-tFې‡ ؿ&X=vdǝ!4sDzF/n>;ẹ}]}߶}J d[i3KmܱHn5w \8a)h]X«4cw0%u"G',K!bE?4iֻ4Qi5I_>%O΄r#vÆ x~'Z+jVwBkSTiwaS^me=1nűKդ< DC_/ҎyB]Zfmcŧ}o6?n=7ljݰZ'jf=. I3l;nIowR[gݟ7 nԧ\>|yr=V u[n Ƌ=64y#}uo_/{rmm.ϙ_jR mVZԱ\~}>ӎ1펃4>kHT>-[>:+߹k)3Y\Ao`> >L}T}_jsN5ޥq;X!;M&۷&KB&M%aFk$QYs)}wi5}<]Oi]=Ҽw\nx/qeE}&t{}%~^р1y;}Iq"sq`gu*<`z㢣W1XHG�)R I @Zvw-UWڬj[%ik3]ݕ i$DF}Zf?,2׷*uKW-$"C֒z&Rv`MWjqj)PU4ZBt9YYrOMGӲzmUIf9<[o9p6qߝ}REyoW旟aTz+/@!k5,IͨJYROvwVSN1g IsOη;@7] -Z3{owk$Ƀi[TUU6]`-͍l6/{ ȟm Ў@S&@'kFE׀-4E@+{5!vr*e]W`-R  �HZu8UA�@DE Z� �QE1@�@'PyZCZC:f"� P2"Nh JT@�qBVλky S> �7k=@�=t4D�@dE|SLVN: �Dtv X[@�@)&Xc!� @o5d5i& �%(bu:A�@$EZ”� �M1c@�z<`!cڅ^hOn-[f,YҐU8q͛e]VS_@k")&X뺛(�@�Z qBVˡӳQk hY:u B�8%X+S �(<`"ju+L`37ޅ�(№`>ㅖ � @!kYX"X+qPZ պ{i(№`-EG@�(PyZCVŋ1k֬H޽;ԩS͜9s˃=V^mN?t3hРw<@˽=s }vsWuرÜtIc.\hV\*;4 ,0Qz7o^P/-'RCI&{~ݷoYtix:l6#۟9s۷og1o:%]U&cǎ %;÷!Mt><ܦUVÆ 3ƍc ʷq*}vZs'܋0۵۴iS6I3@ C"Nh 20B�@FEh5 hXcLkƌ=%4 I6x0Kء/sCovp7wg)Ž_9iˮ]Z/Of>فE I4L(cu\tEnk~AmI%}dק>N8%P2Gi3_nZm۶/?:>{,8C Ҍc9&ln_~ 쇂H{Kr @'1%g?}|?~|p|-Kdi[L_ {y/͌%v9D `WvpHe_7eʔ̾ewݮR&}(3LfKXea7}v=k쭨=.}MLC_d(eRiwjh/aq,Gq$*K-/Rs]wqiZ>!}t4.TO`MTd֚#uΝC � CAr&&X˴[XU5 EdѣF./bO4Zr; 5o: �> m&>3~0|JiK.y63<̖k\wi'!i:6^$uٌ-W_}up(o igY y文j~%M&ᜌNi }}u 5ye2@�h}>sy *Z3ƗJfψۿgΤ |7woƞXrE2l qiRO9%?>lK8}�Gާۑo Ҳ40:}n!uQfPJf[A] %9Âk&|=y{Vp sH/i^L$NƩI �~8BC4(*XjʲO>˺v@�k_+/U֪3FiU5i\Ȼ;7(I̽wWBqטqqOhYqD+b.\d}R[0]Kܻ.]I~!l!P*uD�@�N:*a1t>KV]w{%SW^W"� egII � P>I.5"X˅B}7/%٘l޽=W*Z5$l+'!T` g5 �Y`νk`!M3@�(�Z: � @kr0 5C�@ku]چ� �k k h� @J!T@�2 X˔o �u Xs6@� Xk XkHGL@�J&@V: � �Z-`}C@��Z{!� �ZC�ZC:f"� P2uA�@�L2,oakj� @ܻ @�24@� C �d*@)gy #X+oP3@�,@Vޥm � @֐1@֐ �L`dBu@�@ SL9[Zy!� Pg:.mC�@�t4D�@dk%� � eY^?byˋ@@�@P>}?aB@�@�֊ =c/rK< �E`fذafsR%� �d*@)gy ;X}6i0 � � � +|߿?K]f#5fz\R9@�@�@�@SgI46X0ӷ"Ôj"� � � �ؿy,W M5qfZM!� � � @ms{ҩ-E=rf-ךNiW|ޱլemUQ2xH|Gz_ԋ#y_R}~nC·j>6kVomI6U d1y?ꖑeߴS'fu_4~d;o �J`TAe@� E>kVݵ*1dJ\4 E۶m¯Ç ۶oB3L1o}ۤp͵(?Q-zO9̙=Lk^k>=;Kb#t00訣2e>]-} rHB[g7؆n!{ ꢡUU#,G-wg]4ig4l8 |p߸[`]coZF왧L`9.:d%.9hĥy~9wǿ-x,'{)1u[尲tώ?ޗo1+l9ҧ-}Kt_}E}yϞ`>"K}M¥Zj3#('-am﹝;ﱶz=fƌ=lo/ZqEjt 'm#٧n=DN1;daV%:}{_1/l dx zfr%wo_@n_1C ǵ$-kqLܶo? >,5պ}{"5HI � @ l@[^>ts۲ea.i׼ݻËu桇ELk„[fo{M3hQ8Gˆ?> b76,G^\heIge;̝{IΠhفBT૔;cM.Ǿǘ{1yF/5^s7,WpSg~!T%Rw4~!lA|år`Mn>fZ?Az34�xj0K{,uqWX: Xww_q/A#7skI%}YZcHcnz5w|65{LJu'`֯14xZ~ms"k$g}>>'h-uD(A!� #@@�J@.buW\Ar Xf_lO9czWZ9f YlQ�_} ~7`.`i5 dNҴv5_@imQ3ڒ5qIxo웮K�*i]^xt0Poek5 =i.g;n9q=`O$eƨX~ &XQW Aj&`!c,qK;u1;C0..Xp?Lw_4c;oQ&U&?:STϸD Lvqϛ@�" �] $LRx܅}!-3 s%- m$ >i憂Lwy{ #A/]jf_  ̈́]}% 'S^+KALW]>�y3 �5 @Wief%gڰdz!/.~Av[ΰܹ͂Iژ1c}2{g[ZX |oN&R5q3:!_K̸kn4cMeoݶjviHYkcҗk[}D>.'֧g&9h-KuqĚu|JT{fEodROwZW@ .x+ H~ͷ>Ʉ,u;Io^O6bƚkȿ/;7{;OM |o9kҌ.M;;-i;f}"=ԝ6Xr&-M󀅸H@~zs'k:C~X=fi%kgkrOeQd)6 s9xI&KA'&}^cVCdy}?7XzQ$2RдKs4nro)`-iw@�\@A͕e\=x?ws)ӧW5ޏ-)Xm̕_2|\a̘HGrg%]j#>@&7S: yؙe9)|Y_m)_wKw>& ۷wYs%`Mffu5כSpe,>5o7ç(=`<&3{Y } ﵭ_c`pT@k%�TQ={5 lAAݿk06`�'r_cR4B;ݣͽw%}Q}В.eFf2"_&A{ϥ4sa߮O}f%޶oV{ocV}mYkRiQa{>q4`;{4oDtώ?yGԷ<ǾYXHw\coݺuA0lcuf͚kqcC~YJ;3Z{ c[G'pbҸwLCQ2mظ74kǦߴ=n9vfƍfɒ%uonۗe8mCOn;n)d?y)_@� Xc �F mt8nw߽' @rrsZlހ� �c �H hOmd>6kVGݳ,ͽ:oB�R }=a% A�@� U˨0 � � � @ @�@�@�@rk2*� � � � P2u@�@�@�@��Z庌 #� � � �A` @@�@�@�@�*'@V. � � � �e X+C/P@�@�@�@� U˨0 � � � @ @�@�@�@rk2*� � � � P2u@�@�@�@��Z庌 #� � � �A` @@�@�@�@�*'@V. � � � �e X+C/P@�@�@�@� U˨0 � � � @ @�@�@�@rk2*� � � � P2u@�@�@�@��Z庌 #� � � �A` @@�@�@�@�*'@V. � � � �e X+C/P@�@�@�@� U˨0 �M`„f֬7\I(-\xYvrvk']=ko@�@[ny? �%X`8qbKg.]j,YRZZ^xyi--$*>?tPYLVezdԩ1?\ts۲ea^[M ֶ?5=&<7X`L~ir`M^V ?c`t_?,)G80MG�h�Zc"�4M .Xâ3L1Ǿe|L1g,3 7?;cmS >RmR0L)uب hݣ }a4KA2qڄ '`Nvܱ} /.iZ`u?2{R֮Ss>d~os:HPuȱ[4Ӈ C 5 o>coR' |3ܐiڋ� @֚@ig} l wqIRP hǝ!%v۲v쥛fb4lGfQ-3)XR?ޮ/L |mmhYykR.]b9s*}k`k2LC/{diofR٠aiJ}=oԿ-㉣>8@�Z �T .XCZ6GoknJ3t 3ڙV`M#<h:$T2w&ǃe:ͽ7m7CGqI3Ў>=]kv7|=Xb �[`K@�,70%i)'9Sw{aNf/quc'ZT=Y,mwVRP;}t> .c "_x0D}0 ��IDATsMw&eϬό=j`M^gz, t&M^TA_a^lI � PMjF�@ QIH2̩fҥ uW |fo n/?ro࿗3gsvN5 ?=XR6X()a7dt =A j_ rꆕoq?L ֢ڃInaFxe)_R{[yvɞQ/ kQK6<}I<_jyX=.qG � PiJwG�@ Z@B'Navĸq0Б_j3b5/cY0x6m (-Ak ^h C4Q.m,OpmN?=xBƒ 钹sA̺uM7㩧NCE)PI㏛Nn!C}q.XpCRoF?kvfwfwY@NYf>;;s=p`0 4VmP`0 `Z;: �`0 t Μ9o߾۳;{IמtٓY{,5jj6MUӻ@'''ƀ`0 6Fq駟~y~/s:!^~`0 `3(:mm=1::!9N@`0 o1*tB)@`0 (;u.  `0ؔw+o;o޼91˳Z'|篽O?_|yyy-SN}Y4-`0 h?@୷:w=6|ͩ(ӧ6|8[n~/\ްqo~7$b_322v gsʗ +cWo]׾̎=>dSF]Q䜯HyvєTU0PUGk,/항w(_vN'r`0ޱ>+}8v؞={U~Q`KƧ~SMY/^x*�}x?퓬3 #O=~3oo+VxgC<:`pppÍ7mxxtgΙЗlnۜE^ܺcR _8+GH~nEW_l7G_|5]$h7gVq I'_ٿ7Z/^<:EVtV <}b{nyG{$`0 l۶m4&}|(u#U__6K Lu[^|xѢE< {MgθΝ;kͺUa /$X`|zpX';T:e9 ENssC;8~ 鈯_4Ο1 8_ vJ+\C7e0niiyGN6{ `0 ˒M`PnwJz]]kRڡC[n3\wSWWY ,V'߉εkD>1ܾ}ui#h',^g'h$>u$Wi"}n7_]c0ǫAۉ)p^uy1ׄCo9(Q `mGy-VbvR??Qr1_dnܸA"oNNuݟ}Irƕ-˿ pTP+~; WΤ=D'TW攑Qi C^Q0qٿK|i~4'f}]Kh;wG&vr*Zj7KK؁ћOWJwܢklHWˎO( `0 6j7(-}b̓Rٕ+WNu­[Ա6}Ŋ7}גHzժUK,L}f1g-"Tظ>?5hpZ[?<}.IىU/D%>EoURIh\ j!5ĐaGoVK(s+紉Nxjjh?s&"}&�5SRzɈEI/͸b\'gԿ֧^)UlK+ ՍX`0 D(*jo4dMSSӟǴfLea̿uue UGt­裏RMe˖~괹IF$s]uyGt̳]r峢%$1:7~GWCCщH f8А{4$FGٰw.zxη6P(_^# 7N`0 vŋi={4mf(`?z#jLH+Ũfl&yH0p?R~ɞ5{Մ%!@>q.r]cBg'i "eڵT'|=?u!;ڶ@4*$oNH'^:tC&a_~a>z`+qpuH(]X <^̍eKyU y(ۻP50cJn̤:Ke:h%�oH4yt4{0zqt΋ ]ݜf6"ihcVBwM67l#q`1`0 ߍla78`6KK^0Wc șN`h*S4>Xm,]Ԩ@?S S4r>KԘ_K3'AֆTEkmzmPCFh:a&a&_.!F`@i:S̋ `0>7Z-W7k2P$`:Arrx|#3KS�u ǘ +.6mTH)ۼy3N鐔8&2<,g#'e{i~)1 ʐzѸ>>PLOsIR^̤4OG%U> ѨƳQ)t~wU74' jx>jv.)d ̺%NWQQJBQ1X,шpglP#jrBY{֭oh~G0 `h78Ov;F{n:00@'PSJ czNhG-'[SSS?3ua5,ZDnCQ1zLN')#ꡈt4~x4PIv]5{`jna%$Is&=C+n. V*jrq˄N0Z4�-+mlt `0,۷o-PQQ{)"aW^(X rJ1Yxɥ~ȟ鄀?|)Y`\iœ,PWL'P&4}˗{Lڟv=f `0}nP'NV! )w̖-[hB$3Exƺio(x]#'#{rfOޡP>9NW P6D+|U3 7o$hFG0 `0)FOz}>MG 9a_;N`'+G3Rf>)\˧d-&'T<^xS)fFKS 0 `0tE4k);v<@Ù~?U?K{gv+:yWT[sڀTYjRK{N&S;P5T UCP5T UCP5T UW:;ɏŗL*I_=+Pӟ:Mߥ&9r>bi@P5T UCP5T UCP5TmUkoo>_z]w\O+]w\Sv_HcYKܯJ'*YJY]S_HN欵xxה^E䢨EP5T UCP5T UCP5Tm\Uo 6lذaÆ 6i\@^S�~x4>>:>gF',> �?[}v:!?<<<<<<<<<; K?;}6:aÆ 6lذa67I�|t:a^6lذaÆ 6lfN?[}v:Kny$辐mTO?Jrŧ?06 "9ٿ;wn_=~e-I.h d ?=>zߏtxb@4O4M:bȣٷo7z/D(e]rx ?>U8%Fn|r)1|(bn*{05e?rlpF'ϳ}tH^z@s!Н1>rE ?_ξI'xP|z2/LO}'.ݼl$UCh!yuGW+.S/`OgSQ†P+ft{MNDZ;?sգ+wn;Oe]jr:5D :1gU'$];GŞ5v:*Z{0<~ǚj}5&` ve~3 >r]]Kp 6}~|l$xz?=isk)(aCh B,~6_`p޼36YzƝCD@p0@jzD9ga(&g[,ꄷX?PG}U{kxsǝ~?sgX6Yj$z,kAiÈ 6lذavm>*{W{LT]TwnO_aSţ͑ƀvw>9|iWӱw-B[no}X I'x/ŎKoG7X6:=C?H:a5 uO|a:w崿ʹ59gEfsqlSE{sw~kIw$TO}dwsGt4&\Ux4̨4gfNrk='оa /<,8F;{ӽ�EYyӎ^U"aS2`ڈeq}D?KqyOu3Q >Y(I(g^ IWH݌-IcGu98k:wT^]'F= Y~ɚ!<<<<<<< چģO]rwg6Of7?ho55"H',[{? ܹUzoWȳL9F6b[O@_ nE٢ ac>P +tB9wg]txzl(Fٛsk ?z[ "49z#9NH<(ux=bbsH'ܲ0B%zX='cǺ"???U}o׮o4Ώ# !i^ʮ/6cؐ0=~u&J|`z|1}bN ;c ~ ="E/LhF#cmzh#k"Nv-]txEQ'Xs9uLTuXV:a7:*VGo5{L:g_HEk5Y {cWv{쐴H#A9'D :t@FYVkk\"34VOG/bFno?k}r D`>ѽyw]"֎G5R!!?~h@|+Uz߳^kg]W{[g6A#N ?Rs[oW@iwb#s3@/U6:jXq ys֛'J(:a&Hw]\Ӝ5Wo'*ʱ{_|K{FnI#w/}_Ə޾ƅ^7Ŵwgtue_Am41oVu}_7z+TJ=ou=XuEsʷgWὮo#z.gJ>9{r>f׷UV:AL<=ξ\y-hS=7L;[ ips|뛩^A9t2OH*o޹Ehh>͚op]N_xdN>7{ }XQfxxxxxxxxx ?LCs=\e>o?0vW^ZQZxxxxxxxxx _9gN'pRNs�~t΁-&>`)gJ'gF'w�<<<<<<<<<Z@4@4`1shN 1222XF׋f~*j] � � � �6-GEQoO%W/� � � � иi*NqyTj � � � � И4D^'(L1h@'N � � � � ЀN ;4@4@4@4@4@:w*hhhhhtT� � � � � ܩ SA4@4@4@4@4݀hhhhh@' � � � � ЀNw4@4@4@4@4@: hhhhht� � � � � Q'DahhhhhVhO � � � � Иp{ܩ�;4@4@4@4@4phhhhttT� � � � � ܩ SA4@4@4@4@4fN 0it] 3W'PFqa7~nppO1k~)hL:^SϷMo:a r4_ JԌFLNJG R@4@:N\1ڔ[z#x|{Gy::!y"bc:aXq[SNyEbWZN+u YZC yXT4AR6ohόJ ꄂƦTBF\&X*a 3C'd m{Ib~@4@: BCRҞ-{D~FK];_a^3m 1^pП/sDRDjg=&CLf(U'�߆inWLjc*]?r';VJ/QnO_!$ҼP~]Npsf! C6걶بH7QKO74B'ݕXn_pA4Y3\^hESA'@'d}TB!FTuh: Y߃4@40, =VԶD8|U4i: s B,niV'9_ulb tĴ*ϐ@JoA;jhXiBB'a~GrڹG—$KBE'lf@Yj[:0'vEew?dzuuBGU=CWL;j3=!=L Ir"tT-󨦜NהZcI AZYR&/(.jύa(caK)ltz)cj@(h*+Wsbhtqz:j,)TRq K*}zBӒgʧF)ҭY$t~K IX_$8QtUkq;I Ӷ Ҥ\MUwwp?7>gcUP 7~&◽f@,NP:`[N{lOfq!~rRLH:1ȕRq=:bMAwNji: )%/BkYwfq$tW:AH'ե6Gu>jNHKцHfƇqI;l#QYz*'N(/r׼}3/Ըݸqi6>%rc%+" \w{:!B!Se#LH';t"iO`5$F?#)UX6/,`\KuW  vXSb,A,h`e?h<S:aHkoM. :zC)Q',KqouBH =y1+r%C Rs)EY[$ t74_=Q'Ҙ0:!/E;xNɾȚNE{&';؂̖-F 4 ' 7Mrk\@NqT\XӜV` Dy <2 ͓l]IENH%�tB7FB.8i~gFрZ #!ESX%Ȥ7^c}  ИBucNX+- g 1wWCbvߑ4Ma9+Zq̛c _w-ImFL1NPCaA^~¢~^ W]lQyyq:YUĦߪ\qv'hFK#ЬE("1vC��ͼƄrrYES'pMڅv : e/0aoE4y^Ե6yQ=UyQq6c$BB8iťNIB@dy GԙI6l^TiFԈ(o-tic$vNM.OyQݝKU0'dKIk/,M4A[Y" 51c^Bm;;N-`H>)Ct 0xF: Iax,bcMX4@:a^ Z-Z佞Wnj1|r[vKe(Yd(l on  hy 㻷qRx6,|INeMNо8M?:6sIuwti 8.aNHjQ 8!l㘵) h$r9s?9~7X0ӏce.8[e(Mg]ğM /ա%m`09q0yQf&tMP<&#z\[ .d^*yQr#?рpsXs\fc45ɤ htt 6tvM"^_AK-8Rfn%՚T0)>P[B'ACT&-,::8x9FdARoxn>s;)[֍fǮ\蚪JҢ`0gqg b_J[z|\'TTXEū r MR_Ka)d+!_;בx_{sV.(7RwkS.3_w}׫iVF,��:A]ߙ;K;mz!pW7[IN.A')t&]FQT܁^VOze)uo:5_iSQz W?s/lqSoǡ '~n}CsuY^{P(Chek;*}0l`{=o;@4@4@4@` xhhhtt :O1� � � ЀN./roUr NDء � � � ) :nN=3hk/8ytq! 6A[oƠ` xhhh}BaK-gqsAw} #Kv rD^oK[ O쪴jsmF[`m>"J-YKNUv>z‘hk :Un!<<{G+nBAnPWGk|k5k(<E4 IWlF<L' 7Sm rNGC')  =W7>wԓIT'I]U<(>ϱ/I:1tIsz=kL'nxY j}PBK< Il I'0!< :O1� � � ЀNNg Ua{˱M(bB|Va[IIDUPo:M2@js6h-Ԥ%df>|oNC-6퀄XإNs)HC') 7- Nآ NLhA6taP{':aKNO PZqżAH<@4@4@4@:a ;r6Ǩ <8Iw49:Aho`J~GhaN p2XdrGnC' \?'ld'ԟ/POq4vja1O==FۣW#CAsu𰗝o9=G͕1mU>VKL � � � XR/Pi3\hNo9u:i/by6v+k{b::<q#fͼR iJ#$0CR/w؇3, I} ˖lr g*V =N{;?k j=9.{A4@4`YU4;h']dNg{gB٨.˖LUo[deCt � ЀNNA'dV왌W%mfNC'L3:ރhh@'@'&I':mY?%/u‚QI>mhtt :at {j p[-i4$yv@|i)Ӥ$I!RQlU.G9yeH~ r7 |~Pbt%ZTrYRK_�7kk﨟u^lpHM=CрsK::^I'H-K]F>UuAtBBԇ(<(Ñqs (I/uDjgs zED{$.E4  ~@4@::0Y:`|Bj`NMN Z j- uUZjqwĭ7RpE=/߶f?\6V:SVrj[!%yQi?PwP:A脀ND(5H!xNt b#KG Bj{!J'N@ 0i ƽ}ڃ7B[d~.EvQyQӿ/_NS~2=/o)t\§C~-hgU2wtLw~Ghh@'@'V'^w062VǜV'7n\tIf~5,U8x:٨$8vu1u}q؏%Wϒvi8\'E{ П{A�ظ&[' i{8{1?MivO|95b8Lu fGfv&4:A|:hqo &~aF\ceq8$QI\()13` 9 $K>&<< ^1]8S>;QA:A;ZhŊG 3I'kfj3΀6aíXV;7>&&T3/j&:f2mxYsCl^T_z&^T5$RᛥN| RL:mo妝Ֆu-ri Btsgq x=McpޘFXE R@4@cVtؤ脼�iSfB' ;]iqѸU ]\Ӯ:ni{ � иiG z0d;(1?W Ffq%T~G-GOjOhMn GnNx]IcR:~U[tUoN%tϓ1EJ5z O}3B''mh&ȹAi9ug] � иO]Yba!ƇN^)SN̶tS(@cC ͳGju;j #s8΁ OFyOnkO'ܧy{KhK-toC:nGP]ĐNJƿ'lif-b#l^��g:hhhh@'d<^ɷMNXp"*|7?R%jqV^{ P$V˖`mP~G1;3rɃ:yvUuZ)NNWJC:L � � � 脌1Fik^Ĵ.I ~[(>^9rk{cN]jt n$I?>!v'\u21~ Lчy@HJUܢQPV:!F|#Xu6I'H<u:Z`muB BwNK�  3Q'NW.4+:9 xnhhtTиohprK\X K+jj*K Grpo@' SA>tU"RL<3* <7@4@4@:w*hnAW`PPc.WӬ}7� � � ܩ1iY FEMG //䍣It � � ЀN  w(CHBMqaqYJVAH')'7͒LW5_ i-/ϕZ ˬR֔JsԔZ$i_\NΊ,uV }tO*{ⵣr\_7UȩrՓSbJRq;8s@5)RP\^Ks4@4@> QbSEóc<ѫs굿!8 e(ΉhF:!tp$U d6DiHsTLc)bS qOӀN 3: xXMƒ z2 d=y:=a9- x@ˡ4Nפ1y(A~wu(+$)2;_  n@4&sz �ͤygN*s*H鰪'jSQaW[+ ծP9EfJ� � ЀNwEM\Tܩ͹$r>qL AeQ=jjƭ>^&/}:It:.$j � � ЀNw1k{lt2�QT3/jeyQ-I r'^i&!O55$/ � � |7G#T2k4X36լVnΚb&'J4%IbudM?~Y#RwM:kJNbQzJ.}_ hhh@' ИH;F6VbӂjG4%FL9%UMWGTSV)&U(,+qtx82O . nY{ rI _yRh斘NT_ hhh@' Иk SX޺G0p|TKKm;g|GP;:*sJ'r WX E vTӚ[T◂hht�!pM5Ņ5rr-lq/;핲AHI&wRyQ}eZ* jvq֎K|*Z dF;a뭥Y=� � ЀNw4@4@4@4@4@: T� � � � ЀNPufc( '@тhhhhhLR{ܩ?{ouyc>lӼS�ab|[<*BcX""Z�9+&͛AO3)jBnd]=ibـ֚!EI"K XͬY5Pj@ @87Pj@ 5ԀPj>5pB 5ԀPj@ +j@ 5ԀPj@ \Pj@ 5ԀPj'JPj@ 5ԀP/ض:W*ԀPj@ 5Ԁ RԀPj@ 5ԀOPj@ 5ԀPT8Pj@ 5ԀP+j@ 5ԀPj@ \Pj@ 5ԀPj'JP[=xӽwtZ>~7ԀP>W*Ԁj)Pj@ 5pB 16SxtÇ5Ԁ'|87Pj&5(/# gaTN m �ZXNouh+e}f5V*A8;j@oPCr P4A)sƚfI[3nm ;9'JT7'6%5YX+li=uw^[}_۽߾?S;zos8}wQ|@ 8Z5'>A} fT0z' z4'ymc@lz /E#^}c9evM7<8PԀ/x±c_Pj%J>9LhO#>g$T%kN!ᧄI ':$mJDfo//=ZX$) &QͯȲ?FTs#\q}w?9OsQ֪&²Z"h`Dh\2ʲ$)in\4ȳ\Jh _WKg(FO`1r֨Fߤx:+vsY h)Cv06D5#srIꫡzynV+ X S˿O3:r(\;6o.Z{:B}:lc0aPXO`}mꚍ,Y؆lViu:yn܎B WBk^ #NP>j@k-.. \W Kr(`!zF/k9zg$%_Hv̗(YS%fK\KJТHvЫ gSKZfә| ' ؍ $kjSJ+Yd'P P͠ϧ̮O "zʠ^ ,L9 ZR&m-C';O :+FOpcJ*+SoEyZ\Xg"Ŭ e{!j1_n؋0Oize25}jnX3C·6R +1JJ[a>aq` [B2@m4?l}X_8̰V<'wQ5|Tq 2-'"R,4nOaA-.Ǟ[K0Dɽ7=BV7+pz֨n$M L#Wgo@Kv ά>Asy[VgaC;4I+ ,,kì7mV0J1NYz>^ MlAKWXbư~-U Y0 mE;F) kr|%ȱg}Pj@ Ԁ/ObG a6LYQHFvli~m4`iܣgdqs3@j+jTaK3@Ow~JCI Yz?w#wdaO0؏Ze"<L9 iÕh@sn"6f>^Яdbվ `hhiîA4FWŘO#vGc6 RQd]/4~q-wcjKC+z5N1@b쁊~> VˍyyV|Sx8>pU>s5Ʊҍ!%hO`4'9ຟ' CN).0c47Di+ddMO I<>3א!"5iMDfJh< <:f"23,22oTg!'v*>"1 :)�60nI>?6Oiy2UaC0wӚZ 9K#>a+/F|wǿlü#|hӫF;WO8pPj<}'JP> YI@GT ӓ{^MTOЬRikO"5iO+3swƳ:/l0;;%7Om,IyA|'V%T XUk^=s@oBt^T+Fq}R6X;(SZc^Z&h݆aI"j]тv1SDy灥lw)6O~٘' ܍۵ׇ3o*y/]%>,`�UYXU<`#ʔ*@_FYbb,ꘗ0똗2cvġi퍼])Pj>87Pj&5S<$AEhXvwZ|GT?>e||4ߑ=cR0jMD>^LAOO k_Q"Ѡ5e "7eȲ"y3ҮA-*3HjxM>Ѝ24`ٮJ tykg<](VO_Zu{o|nДXMz7ǟ}I5􏂗\>aj{{%9Xg iʆQL>z-F/pd^T6qu$a Nfj šV(]j@ ՀO 5,p&F E="'O /V@";j@ 5>X|ƒvB'ITB 5ɑǶɿRxjt)_-'t?<h+MwQ|@ s5Ƌƃ>wQ5|T5O0Vmfwh?ߡ`iBn%$B +]d66l&F~`YrvOe%0=4h~y]oSv;ү3jՔH^,n M>W+fbbŕ n-\XV\h1X;"CykRlO*,L~}1ݛbSAybbքXDfyMm=#Fۤ=?o `wk(  ov'{ -f6VmE5 ƭ ԀFIT%N&4'j3εAK>Q R6%`qK|σV!.I&4ݪ"BghDeK%5A-(\&*$ɑR#?go JZoY]P™HyG.ű, \dƮTӵ8@z" ;,g+v[Li-t X5*Fm:; F<^%XLvZL-Pd=>1YWQplBvSOU[fnS6߂vѤ^/ fHl-vS6c'2- xZ)b7r bYl,z';|BBv:X^2Xa4bf27uY_Xq4HCZkjf BtvI#^fcN Mz8FAˡ?nsA}Q�SR1kJaI=%P,||BHe-Wc~!"$҄c1*7[bBXRE^d=zXRj,87;,ʨrۃAc9uUe5OI5z-jmzM6ԣ 9/4kdtmv~XNB 0qLμ#䋆*Phb~כڀś>>˿RDk�&)lʴ'8= hB#n/;eŘ 8 ',]{ Ē}[<> D "El|Ճb{xBhhac{˺+Zuwl즙]1jooG>-Ǹ�q$N2 l \&E5|_}T5DJna_5<}1g,@j3D~3w),0e1У?'ّZo|% 4q.I#uG]T c;^]zh$ =|H?)dXo'q+ _P/n=һ]j10l�~5'cj%*f:O;b1un fl0h&\a pqw Ԁ'NzB qr|B,;O}B0rJ($l%d- +DqxLàNC q32Q x5;慨 !NF,Kb;J1q@bhXgiR sx_wA1jT8y1n@e4ֳJhnP>OX _]V.ݱ'� uϦ >f'gEރvyfqUj%x ;XI9o_bOM )O*U)^HF4!bņP^s B>Z'|b\;j@ \PjLҍ!x'P>Rg٢DeN(k(.K1_mq jT{d Y>>xajm,>H}2 y(gO"OxX%|j*?Vxb&bjʩOp|MvyG ذ0)UVI|_a&u̬йA3:澈䗲UR+E/ޏ~llq.B_c*Fίx1sF4+J:f]i~v :fC__oWnbKhrvй]dMԼu]NT=]}o~|;Z.Fq(SԀO 58)%Ѱ(5r';L#)|{3tG9h#{Ƥ`47'0@k:iQ") G2>a_JfID͔ؒi0b1a;)>+5gֵ>ٔOkx'u͋j6|jU6IjНy@Ds* kJf5jv)̮̋au3ju8);d=I8Xzw;em\M/ &>4ЯLV. 5ԀO 5}xz$O QlV*4?xPj@ y}in+5N  :>ۥ4pj⾁kj@ q2|W8 Ԁ':{O<C*}R-v \Pj@ \Pj̳Ճ' 5ԀOO 5Ζ{F0F)o@ 5|¸Or&_F,ԀO >O >)@ 5Q pPj@y5T#ϼ#RyG@ 5^`0pƯT5Wųc'j@ 5}_|qU>s5iR>yQˍhKk] Ċ]zĻx+je+[->%B^ལI}|۟4U.!8_rE5iQ>W*ԀCϚYҤ֌[~93xnz:lʨur"K>/;߳}B,oT^\_B)?WF>4k fW&)Bf97a/)])Pj'J /O0륂ke+(=_J^-qX6B |soNNP>W*ԀOx|g+J }#a0;֛V66Q`%6-7elay=,Ԓ64~F1W6붽:{Z_Cf~1o-fS+jC= -n/)cj"ZgSK!{S8;H-XZ^|vײwu+Uf5-N5̉O*}#dOB$6qw Ԁ 87Pj6T%N&4'j3εAS.Q ;$mJDfo//=ZX$) &]YKZ_|A}MU⢉֦1I0VwEwt�S+ ǿۈQ:_a,rZ[Wvbz[܎Bn0J=]gG͆Ꮊj(ڮYJZȰܥR_i8ݜSf1UtlB4+}6 -J~E-'nviY@|L jqi]o]=H3)&O o-&C?/'j),{w}RMIv>3龘'mI3NP>j@k-.. \W Kr#v5bo'_rul`!;Ɏ҄c`M-r!,)BAV2؞M=,k5NgOY)*QO ^ >f0Jhy'%"f˥7(bX]i)T~i5WttXKc)9kS{GlZ+!]ğvyc|8'+sULOb7|)Ol,wQZ̗l #'gMcm8�+ KmXq>)GZ0j?p)ЗCL1l D])Pj'p[A q BTr ,Ԓ* )q8gFTnOaA-.?\ Ct{#dGj\yG>f{./0/#JS12vA=\&3|’sSN'vv=AS}Wg}k[zQܥeRh4cQ$q(Sx8>pU>s5Ʊ X>> a)7&Ò'*gK~4h QdE#jDHBk#֦*CV+jcv>'Pܚ +svX6:ˀ*7CH+>A',.~fX& ÁO.SR(Znj%;c<=' T +[^>%d-f?C.5^<58@ qՠt#rG;(3lQP09Ja|R9xJG'mSbl>Cf>/PM7Kw;�>!41jk;X$]wQ;ҝ�~;RSwR ~k7L9O`#9w>gםf^>9Lo]j*0qw Ԁ/ R8O~Vg=%\('}4^VtQP:O:q+Y'FTV|Oe peuz;butmT|7T@˗Egz "ڲcͱV5Y!xs*x c[5cuǬMakTܨlXм>0ZU+ſS|bT~{U qn4x=ovu̿bTnrdm] -n S v }X~[S6Ef 6妉(SԀOPL丨#.%Ѱ(5r';L#)gd{|G h~1 (dOU;|DJÖ;`'Ay} W)>6h44ʗwb&Omy=;(Ū6gvU.g7zkGxk##'\`YG7V)Y>nᓛxzO0LJci=Ƈ輨k^}Nyc>/jٚh &g,}E5| Ԁ' @ 5ԀOP>>5Ԁ 87RƩTӽ8>>)o@ 5||TqxуG`fÇ5Ԁ >)<>L2ԀL{P # s3O ԀPj@Q 'B 1=/??҄ 5ԀO/j@ӧee@N ))>)Pj@ 5N'zB q (Jr;)@:̣*>)Pj@ 5N''''JPy:iʸ6IPj@ \P쪁yQ2SǛw dƵa6rumfbgc x?F_r}e|Rp߀Pj''JgP߳f4)5c֦_ [;PͳjQdYfvx ЋP OfӯR`1ߜ 4Яng>|Pj@ +j@ s 7O}j@ 5pB .EׁeoRPd31-XHWvQZl9)-],hS-rvZvX6Zb Cۻ|aQO'OJb2r!)7QB!ʬvRm!bF]Y`nͦ;_^yWԁwbߡŕ ;}!-^-M3z6Yv +Ԃ wӯZ6k7ԀP>W*Ԁ ,WɄ&$Zm0zFBU¹[:~Jp"8>SJҦL:w0w6~{yy*"IĞfZ&wOa.C4W7p4bH>ai7~{x5ݦD )5*F|Jۤ0vc)Jhllc=ڛ<>zhX}B v{Y h9hthTWB `&+vSlb#>xulCb1@xYnsxl)WH9uY- Fz0ls!URzMGS?be?f+殾z> 7&k~^)q]j@ +ju5^{mqq~8OZRXFF  -3~Y-?E"i_H>IΚ*7[bBXR^dt`^]v:}ϧrfFԅRTQ >_ĄO `cz1y,|0mg'5hμ#2c -E9sZY~vfc}!+wheZ>VX-K0,`w$[m񄴌c]XZ{Q ajKk[-G'_{,'0&}j@ 5pB39[8O#`PK,hj3Di1ݞrZ\ =ZZKVq~I٪ssbWQ蠖P5LOHZ&#usOu(}Yrvwm'4>aHose;<;Ecz͝|x*PѼcYXw }X>SEXn(䧸w7D~rjX6s![xJ'%1p\%wĺ?N(U5q]j@ +j'pb|B}†i=Ηa2 (tr~I+Y2 lSH`4`iG4cLTcyCr0^h O`UXƒq$?_ j~jgTٵ >qp2'V +aLc}{1.񼣐(Y +3}сW;䓻]`j9Yu32Jbv٨VOp ]=#5q]j@ +jq5(݈Q8٢Da? S#<1,0t(v 6\; ׉ m=m<ylr$oiBŶ|*ŊG(ַz*'p\ZMf_jsa=̿[yG4wFGD*>N6uPj@ \Pj|𳒀8AZ8[YdjOz'"g̗xI6 I 9R'K؊_p,>Aycw15h$c?q4R!sj$ jY0c-30^Ǽ.6UW=g.Tۢx?]mw }}mz.)hS,K'ʰW 7b:fPZijRW wdϘ\K=O&ŠO ;z6>jxK'ӯɒopvS6OXljPzyu]LJZ'rF_JSo|̋jM^ʖ洅& ,NҴ֬ UIE`5Vx]]]ܥMᾁ(ԀP>Y5 Q9'eۜ45$2ډoeo. 5ԀO 5||™ lL2D>k(p߀Pj@�SJ{ɓ' @j801um�O�� yуGO>2?�����c(D>3 # �pZG����arCg;)�����>>��������������O�������'�������������� ��������������|�������>��������������O�������'�������������� �������������������OO�������'�������������� ��������������|�������>��������������O��Lr|3y\Wd3sWL|Ǭy}U˫Sy=>>�����!+7>ON9s^w}kC/r���|� Op9vb\|U8o']8>���'��>!tu>˶xs ���'��i��� �a||d��� �#sbŋe+@޻񊈘rHSBͽ72/^8gG|«;QݸzVizyk5cX}jȣX{z>k\gGzdQ+W#S/[I\3yw "dOYan%g|0zqm��� �';`ey.S!kw΍+i󭾒1 {z´V.^[NMwOWM*ܥw-4 w޾0#$|����'i'aЅ{nۄ7 e}øu-N{>c}ž~6!K[?Qh2}ñ-b FӎMJ^B_l7hWoo7h<1Po8y0/rP%Dټlq!���'��0'w_~7 ۷]ڳwÞ#BfsS߼|={BK/ogLݼmU 'h G+^xmBD�AC(yP^��� �'(\D d׆3.1ҝC&R5oM^>y} a+Y^Oػq9tncDk[BI��� �gc GmC|V='ٝ4er!G4Hܻsgϝ;vqd.BxyМΰaO������x>/z+BOxuafuٙgOp9b}?{pG3ˮ175TbJI��� �gDdyߞBgAsv'gh' 6H̽[җs3>┆j.ܷp'#JI��� �o'xDnS}N {zjlҗ0-=};;n(_PJ'���O��Hplg#{йc׽T>,|kvֹWu۲{=' kQkG 䰓^W{N|����gU|}z߾[[)c ϳg?'8Oʵ;6SA*6a"=PJ:1qO������8nEuZ9w3r's^T vO{8,2N<ׯ:e( BLik} �����'|;^~9Wɮ{ֆЋƦ\.´߰LA~JCjiS NLNVüs3cqT$>%i2 R}o(9 3s�����O`Չopbƭ۷o7^v"WQOiK* }QhG;^+~_7xpzt&sڭ .o#6g.7{L ŏ׬M޹EUg[E|iCC/O6z>����Ox>?ObWңZ~F_>f݉ {&+7QTB~Q\}Jp3iThԩsHI.y|%ɨO`jdW�����O8Oݾ|1tem׌;S|-ъf3{õ_̍^W/] N2yW _xG|gaQ1Ƶ)i+f)!5)ԘO` 7R7@{*���O��| -���''��T����>>3 \qZN{->_|K(Q4 ���>>�G'2N}uS=+�������&s^wBMZzޚR&���||�������>��������������O�������'�������������� ��������������|�������>���������8_~U^g???{w:};|�H&a�pHhh# ���Uoy�!,FI��S }'���������O�����|��>���� �'�����>>�����''����������������|�/83M��OO��>a�T` FDNׂ,|3;|bBӝl*擣PVFߤZBQϺΚ&:9w}j�����|‹�W96@MiU\WƑ("?)>aP+j6.Y/10OG)jJ|swo'ОK |��>>�ll :?S#1'i<,iRFO\6ƛ ���Pe_(PH3\XQ +,U%O%'`HfyI˵ `ae5j $OPxe(C V3cK)ٌ`4,03&QͯȲ? [)Y#,lM/ѻY۴x"iq1u[1ﱙKI!|A+QL_Vit?_kFG?Е HЯHrpm^;:gA`W!.�''�p6|BЯG=d|ڊIKKzMg/e+rfM͖^30"Nݜo@C YtHy>OIz:|2<>J&[ &NzT9HHЃv}6K0Z&V2 >_0ǢLu ~LO}O"oլenַrz7AMOOWB}S$ĕDW`LV;fT'Ѷxfs-~ �� � Jyt) :=b=?QΣFEY0N\ؐ39ϩ+vMRrQu"O0wHǞ~k[f^y'X0V iSVӬxY`;G}`LdX>3XȃVX>#MSFRQXD#7aXQLçdeHg@0yh?E[ڥʇɫ( M AXeB@I2v`",Q˒(m^˖x}/mz5cQ fWкpD NbWyYT*Ai3|a0w(w'?y̘Q O OU'j`jk9k UJ3c_AOmf&\E5qoj�''�p}6YfQע4p͈ig$Mibk#zMwԆJ364Y>e>%Y{~n2!L 5O|>edHLHfK|;05 /p;҆1TI&+&Ԣɨ~oG#)^i@^Iqgن9K#zygq![DiV�� �>pa  ��� �'?4gj 8>z5j:hmi'p�����g'Ye-SC7Ix2op.���>>�����''����������������|������ ;(V����Ox>~K3�����O L#*kuR���� �@>a)$4EQ RRi|L:NolFh۬"*d96~ϥmH���OO�E KJ1| |iB1cJx;D -!j%#ZJfk1!9����x|Y0e1Уi�>"q~r$Jdjiđs���''�N/i%y+  =;Kj%1ZHP#EK^A9����x!rk>':c.`a'[JCqBxfd%YC������Fp4,;Jy⅖|Gq1QtG̎5~#!���OO� *��� �'0k[r�������������|�����O�����||� ����OO��>���� �' '< ��OO��(|~-Wу?? ?o{~8>O*Zx|PM>@i,~'Ɉ ?6w2a'㉠t {W%2dT?q*똚ă2uB-)އ`rQUbjUJjX~trlCkr=kaZQɸWeIW(,afxР݄hvtDŋ/WFzFF@G?!Hd2+\ i޴[)kor:;fZ7[}M(B)3aő)%_*;h���8# c t?/wW~ȖvwgO~?m['|0u|9}3u_4o};z;qG<�PhlNXTg>A}Bk3('e8O|JPe1 ay3]ڦ!955[f̖^!_R:uvPυ~.T&^UT)8YN[$%Y VP$>AU^iz֤z$Gn;DtJQEId&Qv:SY Iѣ Rf��>>3m͗e1ooeO@ ~m ̟Gy tY _Y(o}O3~-G ` V,iR1yzF!Ű"DÖ(o!Sv0c0'g0Orq2uk%*7_z|V-=ŪOx ,~oyHFvogJ= (*= Er @3Ft>M]%{풷MULL$р2؆+Cb0:iֶ*ۇgUf>)��||� O oYAO> ^oiEOև?|5';S` -Oazj Y;3||:`N <H&IMԚ|P09Vzt0c9kFtal0O ^*$nOM IOX0597%3'A[+'=$Q0 J<x?j47޲|Z=2~al:[aI'p7'"N}W +j܀��'��NOh};7߹G},ۗ}fww7>d_5DM;0wO3-n3*߯EiN*Nfs'|G91Y(C9#&QsVEIQ8Mn eQUxA=��||� ����OO��>���� �'�����>>���8i^�>>��p:zgop*\٫o=Wl6/_\2V<{e7$;er0S}I(Z":>gd¼YbېRPHMpP^CP%~UQ4{Tf!Ͱ"%#~5k9,IlT(|gsX,7n7R創_>luK ֵy�}B4Óy]7s 30Zpe\yGU/б6wKR'n�>>�p'C{So+S3 ') XT1J))Ff"e0E^V/Vg0'(^}M7[==hlbP wT)hgz{4k^-MrDqŎR2"J$2@q_&O35gTnf=-?;C`Мt%SCI4q㗹O;[Aڊfkvؑ dzԶU8[^ʕj͠dy2Q.v*J:KU6E b~Q?>gKo_gtQ<|{{3|ɝ1@WQxzKV}O GdvZӮM>%e :FKs$cOBZXR"Y�OO��>a4ޮK)k3R (IB>k4]yug/sCVg[kVp=|z"l Xߊ;]fOѠ$GGlX,,uY=b&7E(,kDWDܣ2CS ݌59: b|儕8>!tyLO|aa5VLQzN=#pKo}OݯϪ}Z,yrgrsɝr,.h+7nb}}8h]Ŧil:[OZ''���c4AVOp=S+BIl%; B}s-ƃy(#WXړH1>aY:ZC �B $f&:@KuVUw ;s'8-6!`ֶb>(Q/Jk`H?fXy;sjz;%ewG vu_KsKoYƧO_sOYOϮO>S}ɝvDޑ6geQ|Wvמ9#Er-����|8#d? :Ǡ  s@C^'Dz-O $u#,OfxZ/UL8Z(kͧ >;DSi{rt<>+/r<ԩs;O[<߫ '|?qY 'wY>aBMH=e\9N͵R0-OO��>a@:6M{.LF 'I Qc} b |G=@'OOSA)CEb"BG1UHp@@* ѐ>7Aq]]ˑګFNZ"Yc3O`qYUIN}i,x5Jnjގ)~CןO` o}j['x\/#>g>>AMl*-6L樖E9kU̬ŵ A$ޡT،2#2i �Ox>>}+cQB\5w?+(gaSXOF|8Ɲ&}Xy 枉O eh2sRav,Yע5mOd@yeg؊w&<7DvTr|G|Gb!5vzxКvJdvib5u &R`˔#6_QDgCѼFɈwf屧6¯L8ǟݟ~f'<=Z|G'Wh'B"7m2^g>g0cZ ŧi0T>MZmNٻJͧ5>''���9 f2yͮ����|�G bZxlkW6kHo�''����������������|�����O�����||� ����OO��>���� �'�����>>�����''�pu��������������O�������'�������������� ��������������|�������>>������������������� ��������������|�������>��������������O�������'�������������� ��������������|�������>��������������OO�������>>������������������� ���������ۻc6ETK^5jbx `.*5n̂!O!x8`/nKaؙ<{;.93%;V!=r-,ef4i�:�� ��N���t����������@'���:�� ��N ��t�����:A'���:�� ��N���t����������@'���:�� ��N���t�������@'�� :�� ��N���t����������@'���:�� ��N���t�����������:A'��N ��N���t����������@'���:�� ��N���t����������@'�� :��tN���t����������@'���:�� ��N���t����������@'���:A'��N ��t����������@'���:�� ��N���t����������@'���:�� :��tN�����������@'���:�� ��N���t����������@'���:�� ��N ��t�������@'���:�� ��N���t����������@'���:�� ��N���tN�����@';� ��}=�� ��N���tN�����@'�� C'��N ��t����������@'���:�� ��N���t����������@'���:�� :��tN�\aRqMNV 67{ias0LZ R'潕4. 󛃫۽[?{rݙ0{7}~|adz no$N�/ ŅFZF/z9iUlԞnUKv$m ?;!Z[Y5 W89;aO<{{N|2m6__%=ڝY|^'jd+ n ͯ:8+.|(;ҷ|Nd0do ?` {{i��;!Y/Zy( +8%4W]!KLi{q(kjv\mYۣ]__yί/RjN�l nN^ ?W8wP,.m;r8B;D'Z?tυbLf-8>//-6~8R+% e!ZXdA3~ P{F<, v<,ub\]kw{J8\yi+:!NC6$[0zq蝟IȝV7?beNp=I +'H+݉ glm;2E hΫI=~rNZބHxN8=|?sÃyv|}[w/c<ڻq>QL>ٽA"q~N�y|M٥0PO>qhӨ7ڃOuhq0O~tb1{]gJs~M8NjVAg;a8Z˞3}N0 ㅁ R)<0?|Юqq'\wT J鋝8\ N|ƛx\'c޽px]"̇3dvpbRzw̓ڣd=?H[ k q�?e#H8LHq6?=NͶJc4{ &/OǏΏfT]euB%.z"e;ʇ0jѸ&XJF٥Ag\n;a<{)n29iNw[{å%/O&;axSOtBe8jgGa?/dޫ?nP> HtD'^ FMQt> Ig9™]vgsaK:aWvEiٝc%a͗ۃ_X@2[ʧLM:OvBp8Ŀ ~? |4ݟ ^-L% Ympp2ɛa¯T�Y'| '�׼Y5ἣi=HQ?$Z0նgxઝ韛ԨVW\?,\nN(]>390w0Z;pz:H??╄R%,JZT  㧃~x4KdC?|ӊv!w"wti}=|k!\hk['LyGub%VR+V++hqa~lR:p!&invxgvB&fwxuB^+N?(U7{I2x[BV/hzXm,d똓ӫvBxoyXQ)|I'B*65Ӹ&vN8=쿍7,aOﶏϾ?0|yBɷx+lbR.?;|puwz{GUo[iO5wm6[x9 5<O�i'L*-,oN~}Q|=@_z~i!;Va;!.2h^&4/дN MO$^~rei cKta0;}QGws=w_ԫ;*W;.7}coc8 ǎ 0ZgzeKC.tK;!w}}w~I6_6^vu0/6ɚhb�@'��@'���:��?��I WnF����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mkdocs-1.6.1/docs/img/site-name.png�����������������������������������������������������������������0000664�0001750�0001750�00000025435�14664334534�017002� 0����������������������������������������������������������������������������������������������������ustar �carsten�������������������������carsten����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������z��� ��*IDATxyTTG3tΜ;3LhADAEqlHp F8oLb"QT\YDD%dvb+MCw,|Omm-_Bϭ穧꺷^Q uQ  q]'YTvޮ]uvP.q(1KJus|ޘQ&,F1U.A+W'ݤlHEEarb�g%Nhu9Vq>Eq睹wZ>;ZV.H,^0%U\ysQQj霝묭uQ.'?G$: '7 8;\Tp\UߝgG(Q쏪#?  YE^:7?XkQjڵ N?'BP1JIdY'T'O^xpzg%si6wkfzЇ `8*iЎ A;xPVI==|_]4yI�L$Di'Ѕxag»NN *;)9;oeWGwfTkIv6dG,`}{M*?X{*[{g @E=]&ƤZ>s[Uvz֎ZAU3! $Y 0 M tW$>iqL�=ff[+C_j.]9x@sgN\v#T3s;! d-d>eA ̰DN,a0-Vp(xEY[l Ac\ I@m[+m. y.T9ޜ H( l%q$8)=p\=7 ޶xA'f{$o=pR9}k哖]-pʡӣ&d/(B maW#J�팸dò"PC67lஞX$-Uӡ!Vo.6c)>OQ�BҴa_ ^r!hم]Dr Nl*& -G6KW\W+LӁm,nb5%O$״-QVHTĖ᛫mRrC œW|pS| Я9k6o* \1qCj.Z=F]eR;nt.w+&3< M8oL8dlߛ[·DJ\&DMeSItSy|#7;}ìE>뫬2:ܐs7M^}}©K6M\sXy0d9-OBV_' O#8i7\Vy|eƪUb*/dɫn6Kؚ_^k榒b %~P 2<"0ʼ=/9e]wN=ĔRsz!hy5 Ӌ&qSÅf P9)+n�Bו)]]2C;lݺԩS| dХs_Yt28CV _y!Gbfeۇ[2i54Ya�.0l+�t!-]q_ tb7CsϹ_)1cƸ~D@Bo,a[7&!zCQHߘ\;譊h~ɸ>&7!7/[9Ŋf{c|`a[_\ XM>\@<::2dN!}z1ӉKH!  g~|4X"S⥆ 1) {ˮwrzu$"ז."?y+z yyy@~;,vttO=ztyy)SBUSW%eJWg�Z3?@N>[Q׈zVauH/PZ=/*Y:7A!#2ГpO�af-p Y]])^bojbd�ג,N`@_[qmiȚIBV,Z~YWkplQ^Mj~T!Vv_j}Mp Co8T;2 @uD#Yc5EZhKwjBz 2fu Y#|؊~whZF`!r14RYA'ZVkhv8%J35 Oנd q-הya&$.* i~s?3l ,Ё#UU_|'?b+K!p7'&p<9kEK#|w) *v" K!~"~1ƺJ#f bDJF-a ]g(顗2qhCt-' �&$'%<4Rǯ\U;PzpZ}(fp~?5RA7Cp5^X7_tt8G}?vA<uo7|xecMYRl>r2rkh_oHL"q5Iz]Ъ`WA&.\}5cNA_m5h'@m "mvGh]̺u|OQZX@. њ~Wa\6T~?;CGB d9?[,lv;v7CXzr!; ^"QmwQc2'OFG/�Ih(0'�7'_GW<^d\E0OrAqUqE!йq󵝎N]"`%󟿿=\–g~Kgz;;*0+L�p@ZÔ(S`./߶9Q/jZЯH w].tr8lhcУ4"3[v/.~hvGO+ޱ.x¬`. hh[lEsC-[<-_N倥`J^΢׎bf1(tJjNU UyWOD(9aIP!(.%zQ(.-n߾:8<Qz^K7v\ s)`ɷKo.1yCFx1Ĵ˲qf, Z p/aV"1trWLaGs|aeK3?1-]mWޢ?{qI /rC뒚4tq{*-Vh%G ]W7C#]"ZHZ_fhm{W9W�0l좬׶|sP~롛[^ӎ~]xc 7&,_l:IN`K ;Χ.e$^ ģ-+:׎ ��1 Ҧ8z/>5g~DG3\|>p;qB |tv4@D)Asr NNtJFWa3F_g Ke7W?@xd=N*::CtI ێZ:{"v(x :Uܴp&{D2=@od&pe{_^rQ}.F C:N|fG/FV w_y78 ط^w}7מ:}fk=mgoҬKwLKˤ=+%ʳkC9K$+C_{~4#k0i C *: Vy$;څ[ꪃiS1E;av>!n:I"IY\CJL+B[-ل +%*8wS6fL]3рJ5E{uw a&yh^j WeEB=#lEgQbVmKN.%ݕ& V͊6$%npjJmpJH%1I1|QqvXׄVb"VhFfC󳇘 fNglN o0i8qڝB8;YY$MҮӡy xywV+ }2mmn;[#}b---LBZjBD4IWZoȻJ`C"ւV+~Z,j-dXm2bUNROVںVY+sdvX-Țշo܂yA)xY0m9L1p.vxxnÍy9(SAoa)&$eL-xk5%yb]zƘ鈅5O;Z"h`C頠@F)bP8cdf*l$Y6̢̒ͬ%0'flz`f7s%zKp!H2=i}΁v=gy˺2O+& /,A@$f4ibd2IDofZ2#6�1k$?m< jܵkׂ f͚2!!z_jc:EOO 2Oa&QnI,2͛qeLV 4itQ)%R{#(#3Q'qڵQ(fJZfرcCBB"""�z&Mz7nڤ!/9wO]<~_wU 1~#sn}xN&pM%h<9ɇk Qo#|bsf aaa&i9({`Q [ZZ;FӬ3Yl>~=QkGFߛ k̒yN>lZSҡ*wꇱ!0L;_PԖ&#Dؐ:bsjU(\%YpG=L'' C�U_93J VeEl꟬ri,n;J@g0Dȣ3|2H*: QMUIqq gv Ez9hmoEshl úuwq8t( H-nqjiܻws}C so |744~�i8W4e˖YAs]jG(ȑdHo ?ha=Xbs}+\ϷZhd4*՟>}pv~ S2 sqjrh{<[9)B I ,%%m[8xv$H?LBNQWQQ:V[Ajd'Cp2sŋ˗/G3=U+-tСx)O?nj76*ZAސϤkQHvok:KR 3u{zd'%֚.gm�I X/ <͛7KΝ;iW/HèQ/U2F T())={6 鬬K.̿sn]]]UUo.WVTBqi=#GmzKE577hip �pα9"7'%BVs`3X (O/?bȍpw:xbWh._U_}~t…8(uoIKfFV? =Yx2X!$.|Sx9sL>k�3Ve=&w1 arվcpp '-nav9p�=݋D(`VǽF$B"r Cz͓hS_6 pp\oi`EC3 p?s&!M; `O]4O3jT-- 2(euw܁NAqf/$u L@<ׂ wHIHgDpf ,/+==x/\n^$i`(̌LthIl3 =3q%_}6Z{F(*ѭH?/o{BMcs!_297\t/ Y8<`=rܓ5ݻɩܧ"Lpoi3Wٝ'Xm FFF gN$?<~SWp+yH#vï!}c=^yei@ |2 s?inYAߤoBAgI/ȸụ 5]SD̙\D-jʉb�@ I5`7 ٳM+.tFr}{mE3dy04 YSܮO$* )n0w>A*OGq[xVQ3'=`krt.:ڂ\X7^޽Hԏ7JݦMj9 | _INPw* Zs,JJ]C_�:grк Yre5I׸,!8߲6uU9$7*A| �=##BRM:'p̣p. 9*4QFMB-яQHBjVw)FWu�_#1'b M ,W`=e i(ٿ?Oz~h8z�~<h{]Y3>Z_Z!(bp.@^Ok+5uJ9~E{RIK%u Bm JGSoZچNhJޗuuprܹ>jX:w-&ҁCHop]w e4j5`k}Zu6tYiZs?Uk�" }.sѣGnE ,ȺA]ڕ&ih^p3r^s.f_RD"#s9:YrH8|">vy,e9L$^7#[+KYODOM;,DЇӆRDRfie)a"S4S0,mY,e9L$>$S3V&CV;)S#KYgjd)a"A ,e9L$~ ,e9L$>0CxF#KYpZpF3PDwEnm>oLc4}6>R?C? kOb{ -A?=#!*/R "7NB�T^Kug" 2ԡ_nl�TIiq՘sďf+>E+J.Ptis*m:MOeZRbl/dñBϴj\ ~Ajp;GC1"_8~jRC4*?}+]'y0_4 u.#?Z}|V2ȥeiĐ (i R6UPiƼ?}ҙ^Ba- frJI'Uj }:.Ii<Ԋ͚&B?iu'0Rpk;R-xFk|?o;XҦ+1'3Sľͭ_1ٲ:] ^A;_ƥݍ3e0{FCTR3dNa=r lk4L=٬sXb-s?hoo9tҔյs6G ZlC/ гqbrJO(!3pyba߾~`S̾;@~ i#ʴ!?|g#|xCV@=,DQ%dd)a")gd) In,e9L$^)G9ӑ?'+e)a"18%KYÍ}D)KY??8/KY9(G9HWP,e9L$5BF&A?r9qD}CC`hnnMMMF]Я;7j---}J?~TKB@C5d4[qh[h4-C=jM,q؛7~AAbiスNsЯ{O!V`O �KЯEo\|�Sۡj#K<u:@P�u:@Pԁl:|[Te`j-{C~dvk'wG#H}>`c|[Tq#D"@� D"@� D 'k܈� D"@� D"@�X"k\de*9:@P�u:@P2UÃn:@P�u:@P@n: ~BRKP�u:@P�u@9_tc- R#P}z&$@}dCg?d#GT_^ˢtܗ"@� D"@� Dc٦*PBKu:@P�u:@P{: +"@� D"@� D\PX㒋\rK.2�u:@P�u:@XKe >Oc|0>G?t?d#G|e?Lk j[^6'>GDPG??d؋G娿s\r5Z/\s:@P�u:@P'Wa/>jF_%jB�rIk⭈ o<0"^'=>P`?tF#otǏ`W_ll=(K$o6cQJUL%xB[[>P?d~`̏2?8>Aj؄/%%xF<^r߶ik/eHz| _:×337O| _*ȗ 2c~T`~k0zR\>ԅ`i_oC_D_9iQ~MQ~N\ҭJ^EF:@.g' bOW7Z1|;xGx% Ǘ0܇%nT(@$8>юG5(J .>tkS>#X 6`ǑCp�).I:hh`{x,iio3^^m~r5Ʋ;ph_ޛ<O|/'gjOC]|oBڨHO[X-(ԁ'>l{m`JnNwx?./tAldϛo.3&<4ppKmxfET1^�"-翭HNݽr0rFU᥉>`yFT~@ŲO'Wn,`Gt-uLEs85[pVz9ܟ 0wAZ|Iȍkpb\7%1\NK?G}뛳7/y;(^Ԉ2^{͉`^)CB8Ti1ފ|ь7vEѷ'!<*.D[:+h* WXAAA tEqSý !/�|ֺ[Π%V5`Ύ` h.VC#D6lhƯD=k$υ{cgP\R0Hxh�֯ǚ>8!4;]aYnS i{6\$.ko7D-m/ mzJqwPi;f.]}UmY\l|ZGzа7.�4Wkm ZQD/0wtcg c :K{ a p?,8*Q-|^QJ#ͨ{㺣J0&ƅ":?GB#Ip}~vq 7ǖ``vxMOeƵ 9ևZۆ NػRkLtGf\nJ�c^ʘ7kg^'{8U uư]}.ơƢG9~5Ə`ÆFa~mK;.|G)ǖᑁ xe=lח{U1UAQ7>nOvh}`T=)uuzHO\oO'<ߞp82~{#]lNjFq~UJki(ɨg1 Eop4/~cbզd#zQYtV/9{TPbNH㇔"Bk=0bq(%%ГQG9ƇA"B2JglHV+O>B-pa,V6;)G3=f\^3c'C.X^J1VG[ݜH5w!8Bmy L1_B:qh;ܾAXa;p+`99U`<1L\?p TW�n} q*)LxQVZCB c9|Ɔp 7D1PSV;19Tk--iu$kR__9ܟixKctsT%^@S?յ{/7aK_|d_l` rcBf]e2Սg8޶&(M]p<Ʈ8 gRڙyÏm]t*b1< rO8gz[p;Djihf M0Z܈T e91TÃab /C~ $zZn@e4y>|>ҏ_Wab!x rᜃ+ptȿm4c]5c E@q> ԋT?ZYm|AbRexr~^ DTzoc`2ф&KY◂&cgV+v[a"`æ.~!؆_7 q57>l#64ڿ9H9hV}*q6A«!*^V^ZJa}Y>uc$kKߎ+TP�U=aWfr<}h�;GDpBQ c I!с_<[\{̏k,<"1붷Ꮿ7ǙnpفJi/ŋw7,//9y!<}VvbkA{ZŚiqM?fmּ7цMۛp&̟?kZ_\/a[x/n LT)gv8Dx+ǽh >WPDKAUߊOcxz<"wcݚ:ܶ^W/רlj˖Zܸ|>]GK^GAQœzZ#C|— 4-[vƕ 1M\Oӂ؁u~�[1  eJ[jUjyI=՛#6H< U[aƓ4 %:7| q-;%Iք~`^l£) i ~SԂFOĻ$L_['}J+t|ONkM0adFHգ�nfz(Ԟww5F#xjuySbCgIŅd& ǂQkQ4ūCƔL qQq2KL oˣRd%3+\6X_n3>qreo7>nm1^,}R0=n M|zgl^jcP6xj'4w ڈt _ޙ _#>3[x (]S DBobhDeF*g"9ZQ86a[pcl?7I+> LiO1/y'1'5+M$K~T*8d 46G\O joiګik#맖`#xf(1Wm 㮷±?G<{kIc6y�[1Tp!}p0>\/%fj,ӝlp_ K߆+>ukU xM8za,i@RsO¯&eAsLJ6,C.>6\?oQ$?6I~ jPsYƵ`Ve{+> }?N.ߏn]+q߬LF|s4?N)~N}{`HM[8M38Bipme~?g3Ek6^^Āޘ5} 7)vg30.܁sj@݋W`xC.} ڂxb(mx>DY2ܫOsb<. �^�0AJqq~T쨓mC0FCy $RԨNauZ[&KqɥM/({m} \*SJ0^ 7>#.ej~M/8O >o]9h?:nC5R kNO!q&^ (fJ?SKGŊU ]i/*ßyPakMxˊq2JjDqK&~KD0_=xF0w qF>(M+Ňm|[dW(~m \bFVyA5Z+] 6(.Cs}>is2&Ѽk3MF .Xj{ٮ0ǖڤ ֿҍvlb{90 6�rBDЃeԬ+c0ʀ[U`lEZ,$)iW>Ÿ%$Q}SruEɇ',QT T&CiD=O:& +Mmi5+ ~XɊzm&Qj.ܶIX nY'W,Qj+^4ױv\x@Lq 6\4u(rW!&-( l u) 7L+dōvcp;i^Fűx^1HĽF4Kܸx_O Š*}Xo`݆ss{xڎs 2 ]t&6Hh8T%e.bnPm:R[n$(.l'q;]n(.oD'QO%dSbxn[wAVQ^|6\\}CbrIL]*-hڻ B*/߆?vh9^[=F9F4Y'XRm4'0 'oŖ 95}]Q^=~^rBYA/𽷬Ǯjw6&o`(~IW{OSFO{Okb< 0SbVqϡfX`nƩZe Qg_<8އkp8c֛&^Ţ0kZ }\IcMk[X 8Q]WK#?va0hiJ(p=0\͵^V'r)n38Zjkӯr>i_4%T,~bl, s1*t[r crvU6?$*v.i R7kmscJ{�zpƝb1γ)9ݫX[tS/WX_u7|ͷqBI;t,qc?�,Y?0o`^4u�!?혹\lS㥽h8xu hġS+0YmFWa~4߅ހyk}ZۊV<kׅ/©[qߩQNGG6U3?'ځ/i cM_Y>Dlgmɼ%Je0׫4c-ʭ}pmm)F6xתim1=>r&ILt;,mozEM6c80ئ4gWxF̳G7j̬VyzzCiz%F4piڒ7Vo)\{R3>0^ܞ~Edz@&?O8.h2eN^b(}-Xg/U,~+<#1֝f6.m͸lYXz\ON˯W -cMt9cwoWH'E*t_̤3œ'$ZT&֩Lrk"@!S+0%Ύxvmѷڏ#8`\Pj" }0w^C6֋8V}B4Y;Ųz)OtɓKMX}\\C4',Z:.<. bEahyZ۰#(,)fbY=&֋|r?[TX3G*15V0aH)nS[( ǔc|4\)c [@LQay@u.fGJ %C x.WqAU8GUȃ0m 0VCYšYm(.mk;˱<(]n^iK4ӯoX4ץ*xLG̗(ގ~~ hvߌɯ: U.,~ A c`uJȒ;^_~=o2:1Ϗ~ Gi$w1e>ʻxA+pE|[o5wڱ:to|] Vˇi N.YjP -OSLyNLyŇUiĊgJ~k8OMj[k"4Ŕ):rҀcm(hcm}8|N$q>ׯF1}Rύ-vẏL }X+݀: OX*r/kK Y aexp'юk"g" 3(Eu֯Z.q+%= v$/~sbCZ˜ipv%.FZ.P[;1WUvDr}34xqF(8^mOh>#1ہ9`o+i#j9_(7\1W<^ttı2QUf(bMZ0*@܋ ~-Pp8a*V&_пԍ~a./}Ap%+�P�˽8׆&u5nڮ>Ӎ}0:"n)GIS `KfQf.JhOb?41Ț>Tnoq>4m_C�7-^laɻRtpU;R^mx~*EH▱`Ꭽ}VSs=˅̃:`h3)fo8)!`rߦik|sņ25$0o<֍:vE"#s+l%Km\6/-;FWpySP#P?\o|_77ucXC9?w lo^MsXd} eq*v?|J&ՙ3}]ӿ ▃0҅8㵰Rq1qUz|]*n{L ~_O\.y8/߅KW{>_(  -Ljuwm=p60_7W$'h틭ug0UL՘JuG-.|7x;T.a0dwģug ֆ3Mֹ~$J]*%ϣug#.ZўMDqQCuĕE0U&L|oVXFzcr1c&z/1+J4'/ ?'Vcu&(fMpOJƫ`Sk/Ԋls.roZ8X1ӶIhv#ch35 ]^j'~<cF�p4-;7E1cAĹ-h˧w2XэÌؼ~~Y7Gm <52BaʝM(tl9u[DgW1dV|fHΚm 1<1!_֝MxI^.i&ۻ̵4ZsXh<,`r65[cXo~s?B=Vvƚ%<*k,cvO1~zqZUcm  t (MT{IS-*.9 SCPTDɇڸʈ8><Ú4̒wB#Nc9+ꁝZ"<߀X=M[q/n:&͘оr1{J{/*l]unC #[EllEq]}CSʆƌ 3-I%r#UZ±|+\Nyj{Lbm6$C@kgjL/OU sQ3ڱ`VYSA߀ #*6oŏS~<0�Ma,CXua@F4m݅3^ '^T,ſcOX". m8 kf�03}ط Xbeu" X@{QrGG E5׍kg 6�\^!Zȁ7b!.cR=5-~&s]x9]zӮY)3.x=W|PK.R+} |^Q(%%ڠM,":1m׼ބ};_).;Fْ߄G'D_�YL+OLoK/KIoqlLHF,8P|ɷ/:rM秵I56l+qb�?v'qiUR=x9 sa3?ď:_(c(cG%]32Oi 6 ˌ)>dX4I|xMЌ;pI/`\7ChaǚEI7JXN0XF~fu|h[j?FT:++Lfz{u-MyVkͧTo?Ux4A񹠊0_5.:2_HUO^Xھ=cݔ/|Ij)_LqQW?"7]6c#c<@5ryѨuwtW;Ϟk4c�Lj 2N3ф5J|&cM/>7epǺQ58(�ڈ^kfx7PvDع>PDY`r 4ġp88xSΊ0 #.q1 \'VrU4F] n>1+\0 D[oOVŵM9>fMng܏D=1Czjk/5A<-qc:Zk`΂&@o=7o &x08ᴒV,Ro*?zu+>.kRkZ7s,#m̝ s,cDxWPJWezCy�(wE$CO+ %d�� �IDAT"\_kY<5*v/Rt)BX+Sw>�юqLlԁK1;כtJ1.ކ'^n ib8�㜾[b<˜'usn!#թ;̿/nD+9SJ ne{@5/e?aB])',Rqb�|Mp+׀y.yYp^I~gCn_}*Xҁ+�u:@Pe߿lҌ5c3#ur}3>.};B=-=:73;L}.}f<2G?|Mse7 S!wҰ$`<ȣP`zH=RC|@ b1viR9=!?ԇĢG?`A_ԉ#:0?AXc-KoYzۯi-qj#Rq*9s1`>|�ʄ֫;㮠qG>Dy/^e�|eM"D"@� D"@� DK F"@� D"@� DKO،ƃ�z@=P4C!zH=d@|@ZVFrw"@� D"@� D"LxKUxB&M>0dzH=RC0`>|(Tuɍ` @=P !zH=R?d>|@,K� D"@� D"@�2 lIߙ@P�u:@P�u (//cAr"@� D"@� D"`B@g4H "@� D"@� D"#XcI'K:Yn�u:@P�u:@P2Or2'7/EݠnR�u:@P7\Q(?M<#0`>|�2Jcc rAy~&p?Ĺ$΅8|:CSlP ę8&!g\9@ݠn͟ieAZe3wG[I>ę8x'g3 ę8&!g4hpjT;aChxT;3L>>rcST;gsn N):L>7r�u#1k4rНj B;C!gnnP7ry/!g`nP7r 5kkS Sbp8C!g\9@ݠn'nc, 3qMN> ia3Jsog|+ԍ\9C>bN Hu~L>ϻ4h;V?L Ag✏ |&3qM:F>sY7 ĹqV cAa8g&`Lr�u+gXcb8u> ((~|&S/ڡnr|tkST;R&`ST;uAݠnu#WS{Cݠn؏eVeA)`3wG[I>ę8x'g3 ę8&!g9#ƹ{iX'9@n01`bpυq&ν)Ng|)q&νIԻIc@G!\BXl.·AݠnP7r�u+g;9L>s�u+giXˇwX+JPj;|):L>u#W81p`axHsowgLc@!UL{SG>3 \9@ݠn>sj@ZlP7e||Fc-ޱb@aV8|SlD0Eso1|&bQ8%ō4|>_>@ 8�*]s�9q T<slsguAݠnu#WΘ/|&wiXˇw Z *LAs>Xl)a["Ĺ7L>4s�u+g0ia3wG[@|&g&rAȕ3N$sCݩ͊ǩݩv01G8S3{]k)]u397X/ڡnP7rk2F N |&iDu#WΘ0!Ĺ7)L>=2KŖ|k&j·Aa8ޤc3L>܀·Aݠn^ݠV cBJ!^!^;q&νIWg|�q&νIgyw|xNJǩSbp8C!g>r�u+g;9L>s�u#1k2FHÊuAݠnu#WЈX Nua? iXˇwX+hj;|):L>%֖bkAݠnP7r�u+ghGlw 4 dPH)e|&?NwwaEAݠnP7r�u+ghDG·Aݰ4h;V?Nu4NV>j|&gKkKNiCݠnP7rAȕ34#k2F(RP L>;"DݠnP7rAȕ34"#VlySCݠn؏ei||@ 8�*]s�9q T<slϝ(·AݠnP7r�uZNq#aD7Y%ڜ"0q&ν%gYV;+b[ڡnP7!Sұ9K4hW4{P0Ch0!yw)5[0(gl_߀"g㴻5k7? p9&S4zb. U(--^{=Gȑ#ѯ__n[8vSqZl3q·Dԍ83#L #8ę8&a'bX1c:84(b0zXxĉ裧aȑ]lN1 9u>ęl[j|&8_F*ghXGGYV  SH#sa$Vc)` NƗ_~;{D"6x`7KaFbqڵ X,}3ϔåbsgkoq.gl3TN _P79ݍ k2F =ğ|&o֓M&>p҉3lS)hnn_+{oq^6mT޹]beMڰn:,^-^qML 1`@M,{)!m *xw|ԍçe9Yk4oV?NuNC!ebp8C!9& gzk|hmmƚSUUv:<5�.|tĴ\pv*zk;9n8QB%>Ŧ?3L>wFⴻCc@BJ!B'Aq}83g]x:H['D?(I>#x뭷S+ҁ* >\buWr1Y3!ĚwN,-8-!l _8sq|o&L&Ꮣ8jTVT˵k1|0\ӟ  euVrmohoڴ ;w*tg*hWjz˖/w/7+$&NLc-+3$b'&_||&+;i11.wv7'Ea:PLFa$fcm8. W\91ۖnjw̛7^w¼yhjjkp89sbEJHӎљ~9'Jv>خ·8 9[ԍ874h壣4  iq 윺_Lt s߉svƚX[?z;^s5@ 勳xSm߉Jt]XcM-^pp`$A83 ݜұN|f9>;a\gl/"Ul:O>ϻ4 d0#i:)ql6B29 o걫ۯG_Jꫮ@een#+ 7nڄ;49Ž q&~i.8-a^W#91n?ę88.iX'XV t7iFo 7Ƥ]lq|g# ;'9iҁIc'Ӗ�Y;ucĈO~uMyyA:l<ʯ:kW_ueϝ5v>ٌ]Wq.LL~!>ԍ874 d*L gĠ3P7F:cmt2x0FާG5Q#ʶ;}4|Jk:;wĭ݁۷)7\?#F GQWW-[5BL/۞#FÆhk׮êUK+K<7Fuчa-X,r}Z3Mqnd ' UL|8S3{)4h߬X+Нj|):錵C;{D"uԑ8v6][ZZ?݅O>YqLQտkˆyxG kZ4 `6~+`qn 駟Nsb1| <̿ fĴQF#G EQ:;q*g ˗CW~=4#Ebav3z4:L=]>[|ҝsom8gg1* l}YWߓυOwqƚx̭gI8qYEĹ1&΅8!H"ɸUVVGc!r{O^`?>|X˗/}?x<}ﻘ~UVgMz!k0nج;gŊC~feaAo>0Ϟ5ֱUp]8߾s;DO͛SN!_w8tL @aB> zVeAY>h\|3qΧq?9{\==\//k<˖-]w#3OK[aL7ׯn:9OThr*/u1Pgs!+ٹsn6l߱ 7\>}j0 :̙0=~aiXsmE%8k*ej.r*{}Mb1pߒ&2ǘobױ^{+HkYߠǐ!80n8sͼ駟}^zY7eQ8sS݌\fvsv}fZf-.g9ksa]iX'9@n[OϩvF؉3qGwNWƚyy 1pN>0 i}b~u2Eށ?u7V\\?:i4u cW_Ü'JcTWv*M"3`S+zoXu6L\Cyi>/zk'u;lƚw֭ǀp.+ś o.2[0?uiue@z*8gg$g={lF m4?EB9qb҈˵_sKSd5* 3Hmm~?`Æ i cmɒ?˦[ⷹz{3|b|. 3qMq]>XOX+s&@3qGlSAs|y+`A *;v([, PPP5Vl؈b5Q)$XDEE,|wwv9{/R34tj#<E8S뭧CX33Nx(Rڄwܙ(wu81}ᇓ׵,0 `ދNZR*h vu`rHKd)n de99ipW�gYhv>s%EӴ0G G GZXv8ӓ/ZQaIE'>Բ}>L]v0-[~}W^[Z GՕW]3hyd&>wj&nݺq4ߎ;SOv*{g}#5za:48]R _HgkΈӳoI{v >s!AXbXˉ?i'8" x҇FG9\]sHǟhQͶח_F'Yrev!-umWW˂)VZ6hPr8cx9pI{%~wsRYEEpg�9W!CXIka!'&,|+aPmY|�մiS ߐofTN3g̦~}M68E] Jb|U06mC!ڭZ0a %$-0hɪ\.k쳷:^妉-.5�� �IDATpsRY%ˮr3$!| 8/8CX{�,sQ�|N泫&(;h@V[m%rF~e55&>ZgE^0sWˆ/2ve;B>JN$W]>B}*J %IuVS^;sPda8żh~ |kgkֲKAs| 8Ģ'd}\5N)Gs t˖&j5ծyzuT~{-,Rڸԝwޥiܻj]wI-hee]6r5o<$uO1cn;唁g=cҤ_駟􉵴o_N6y>]z-83.g⯢)ZZN ^ %|+(Z`>>8yۘ1'i.~{^]?-~$BXMokƍbs/zIXMtxĦnRі_yE]qU?2+nWwjԨaY]ZC,YCQ'LiԨCjW.|v)4k _3:7K_U4�Z,xW#P##Bh8/}8ktoB-ZH`@,XPvJ·~fzͷB'U6c_xA+E8*怒 ~3^u-qվ} ɓCķs%^#qN%^\w(5yjWWgyFoвzqZ ]wU瞉u`"Ǐg0<.T77j7 AX;k9'@ X8P< Ug_aQ7ܨ^xEլY3uj kI5ruz-tݲ}B kMGϢϑ?Bu[*Z%cMfi7o^Ha0 >N>_z^*H+PWrg9ZZN ^ 7+g\ON|zK qh>{ZneF q:tVFuz7fyWX嬴ē2vmW-6h�š�gZK]w߭HQuy i<gPZa ZFZN0�A>ß8ΕZV_}k㧾> \G=!dPkO>I/u jyŵ"dŝj^X3{7xP%Zj>e +1ǀ3pFQB*_oorF^6~01`֑g,?49Fj,wSvhH!; 3}>!-h nT 6VaRC W3fP:WkٲA:ۀ'mz]txc]v3OW[5,q I`{ݩeKD6lgo_}aq]__m> |}9W} e3˽|a- B 4+P|N+Q&؈+T%g1b*ja:kl~ݻI[TPCО_$lBWmN4/&zWkȺGhz\X裏eC/WS{]z*hB/]kj*iYĉM$JPKp@Xs2 }s_ pVYye(up.Y kY  ���� N^2עEs5暕'NPxg_KDݺ.,|H=$մiS}z$y뭷F:@N{xy=n# +ƣ:Jmˌ@>DrpnonP~ޗ6mDŗ_kV}$,>j Z7:퓰vVԿ^1}\C$Ϸަ@Y@�� ��28J4p Sr킮S)!C0#ԴiuY[ >2>]>\RF_;Eu}B/gBT>kXG0QgVնn{ߌa>4)ip/wIT믿^E;j#pwߘ>]!lIX=唁jM7-7Bddg\Oq >ϕIպk֒84T $WkGaVD\�>ß8g>tiY-ߓvکTΝU-aLSO[县:k֨Gـ2b5; Fj g겡'|6ڨm4) |蹴J#8LޭD ]rAZ pˀ5"~Χ3pWPO ,?:| p~f1A�ltEڌ52.l/rID{}h9hҧ=B;[t 'U}Yh-5sO/캶m۪!OSNYkG]?7o^}Z U/oe.ɓLRpq m}}\pNrHĵ/T}sFf`4Fx|v P=a ZF@sş . k$y]z"e |^RWQYSqK `qZ5aDu}cKOR]W7Å$V^BJ1'Κ5K]qUz/gѾdQ)taS鯢Z>UjpN!`Bt5K_ߨCXGBfrTQgqP|*SNU#G^5K>:NuQz ˧k\Wq-Oamƌz߯~GWv+~$bkv |˶uqcMrV[o}S=\,!w�+ sz+-||!AX' ğP0T9$rO3A(N ramΜ9GǩGyTj~s�KX3acꮻv̵j kT?\=COgч}xB?ZkA7OFITu]GWNE2*NxTrvUjbTNiϹ?BArϟf1m{gqie~]yu1f43p';Mgk9 # q88דc9F|9+5tjikAgJMSXJhVqIi/M~Y=ZeONZ|jҤIn>~CfQA͚6U{E\2=(㍄g}>]K2hjfI~>$ʢeuTo-d')w)S}ݧ Ff͚C~wncRһWMXUs֜;3p6p?.*~q ߢ P=a- ^>8zhgLrxOXfmcƨ'|JCtWU{Omffk۷WlQl;?#E'jΞ5[-ۊkIPCVkξ}|]S82;cj뭷Re:/SO>z'зPWH]y 4nXΊV]B:̙3WkzI1-mu]Q֘5Rn{7bu)jy/KDɵ6T998$=*|kgkֲMHq86D�ltEae˖ziWh%n$V۳.ʦCگ5J/;Z4Zm"5~F>H5yhqO~V\qEռyWt_$~ SE3Pmu(a%bJ}Zl=;вh)ͷV7Ȋq^T#'}(czlPK˄Էݮ,|u+ZV<B|·?8CX_/C7 >1h- 3[}L{({ncn%-\j˻SNU_~htո j:V+:֌2[ ZIoFN@:Z%!p:NV 99�d@LQ/krWWkǀ+ |s=) >ϕ upg|a- ğPjr0`a8B0T93 >WO eE+~~~~×ċ?iq0G!�g /77|9@ng|.bN a Z?51A�c9ȇ?8ד3\=q]>s-8 auL(S ,hA}g\O~ | EB~3 eXˉ?`rHeqx|1�/gƯP3qЗaqƾ8zO-Z'h).)@Kq pNZ[s RS�8�--9h)n)@Kq pNZ[s R-Z˖-S@Y~K7&Zxw 8P< U >ϕz-~~~~×m<ZKAP(`0ZL9g\O>s% 3\/> AXbc-'؆*,#C>sxP~5T9~ .:C>srFHHHבbPjr^hooAPv>3)(G 5_*>Ԁ8,P3@חׇB>3A_oor&8a Za)hN *,#C>3&n߀LL8zw:|0�:6K>|!r�~~×3| 5!-Z9VPq|kgkֲk9X>pYbS Ǿ3p'?>s,)p.6rFc8#�C� _ MB~~ ?.3\|; 5~*~3 eXˉ?`rHeqx|1�/g Ȼ#j|/Z9VPq|Pă#"qq(*|<=T9߀ LwBE+~~ XK@=ka3|xs=; >ϕ .3p'>s8!Zܴq/5kYKAsOZA` �pd3 >WoB.\ޛrF@<8R8Ep/77|9#5~*|g߀Lq,CZN *,#C>3&n߀LL8zw:|0�:6K>|!r�~~×3| 5!-Z9VPq|kgkֲk9X>pYbS Ǿ3p'?>s,)p.6ZXkܸq{Xh@e8gvTˀsF�oW?#uECՠ}U7uD:Q]_u:mjݵתCT̓ ~_}Zm[ޑ=p-coqԺW_N='2KCjm,\ p SrP0޸0ge( e0Z=2~bYCwU|qY}{ʻl|~ڇaW RY;u]Y!:"ov*+cWꯛoCuYfϹ@4TӦM +PqS7rg:3T9s&+Ѯ^jyNꭷ(BO>@bKu甖rxy6[uQg6P5i;^Z:OuH;YիO#=c^Tfq2m韔e8^=Օ#Gp?QmEd9IE?3]x9sKofthFi#-KgͪXmZlG8qr%e/$ytBKС.ƝrU{tݥ!mQߍ8I{Ն6( chw=Jšl0…/KQ&=w+G.s59KfF"gcO8a׏ƝqAkh߀*k1( kḪ%ds|NXkҤ.ywjhPZfHvX�25[=˙3KoDq;$*$-5~9sԥ:W ݦl\lmF!ˎ%,&Rnղ{UWQW][ꧨ?NI�>,RPS0T;zfce[%%GhJV`5㖂%ۛMօi>*{0z߹Q7Z&3ս.z) kTX*mY?'4q{jP g&g3 .{DZ͞=G]1rT"IX+T}0Ag\9* >ׂXK@A> s-`:E-q65 C"OQMa-I"m,Z.jf WOg̈OR{HT, Fϖ%:>eKl{RP=La-{5h@HDa}hig3xբysxݹX5)ҳ\Zij䨛yg.;GgɌ5s67htYƘNѽ{u2vxA=“[)B GZjNs>;pΘ_T".˱a-RМ*4@8?ζSAxijm֍ MH ⡇iA`Gd{=~ͬҽriYD$%~⍹'Fhr.S34293I %Wo7̥,UXQ9�� �IDATTq2/Ӕ8' k;33ϽvnR_Di KXT۫IZZ"э(yhz-qt䮢 >ׂ eiN�s?i5cڥr0Q|5'h+2GîYc-RP=>gQKA2=lH++q) 1/̥L3J1BeM 4Fܯ:8曨>?u`}Rݸl0sx)#+kGiuV /t] uԓNpZ:/?۞T@'9[38R8RuMY/|+Hcik{(jcOCO7(�=lefHQ.> 6{i5c6a&‹y'*=%ˠz trYC't8E'8GGU!őšGWaM3|`jX>z֬Qe˖5>DC 56a&mC�=|XO)#[oOָ\y9Tʹ!{i'\/1c a-"TUro L7OZ!$c8cD �Q-ahW  HWCqx|r�~~×3!Akֲk9'T X8P< UNǺ;+6a;gk!&ER9*83p'?>&o|9�]< V],L!pEP< U|8z?3\ >CXwXˉ?P`€qarr2)zp.rp.?C gyi38 fl|JBZ/77|9L!Ǿj35k^re !¯B| ,P|!r�~~×3| 5 w+7.kaqY{Xh@e8gvTˀsF�oΎ@e 8gvTˀsF�oΎ@e 8gvTˀsF�o@!c-8x(P}P< U >ϕz-~~~~×m<g~Akֲ7/ȉ? 3pƟ| 8zc3 >ׯa,TQ a-'acC=Ԁ ?_gd_oorF^j U >;BXžB A` P3\.^0;_ U3PvZr77| T�a-'arf93 >C�/gyX&ng|. AXbXˉ?i šs>p~Y |7Q}g\O~ |kgk9 #0px- š c8Y&5oc_8eP) >{ANVF9g AXGH x3pƟX>s=1|!r�~~×338 ^73 >#�/gBPO;�(VI35kYp(|pYG 7?ԁs>v e{>s^!~Ǿ3pa-  8gqEO@7 >'F-8  ?C ʁ߀cp3ag|ׇٗB>s eodğPzr 08B0T93 >oL~WC ``+ ;'@XIkaY >"|9�d#Vmoo[Ae|oi/kֲ72rOZGoOe;|M Dc_8דZy,X^ ���@�� ���@��:L[eRXseedA9r;ڴ^rg|DhvZoooor�~~×3z8zӴ|Zƍ`{Xh@e8gvTˀsF�oΎ@e 8gvTˀsF�oΎ@e 8gvTˀsF�o@!c-8iKXqGq,^C>s%^ˁ߀߀߀�/gEOg|[a-Qԫ|pε g3 >Wox#983pbPss.nѢE{05o<iq8gqEg|D�F>vsj U >{95u+X>:`xG P �˧3pP3;pYjq9C]w#dr!%x5x>pYPzrg| _C_g/77|9Sq0j rB)Ov|2pKg|JBZ/77|9S$s|AXK`w/77|9�P{ʁ߀p3 >N1c8CXeR0bYP@7~9egd_oor/ 5 w+7.CXwr| 8ĢhA}g\O~ |pjpGb a-'aA>�30`߀ 2"+D T}77ܭ2 >ŷPWr79a Z?*Xg _oor;bngk^|A<8R/arg|.~C _@tG,^r77ܭ ܸC9 8 n>|·8ד3\�|8z?3 >5MBXž4'5j9 89�g\Ov >s&/ ɏ a-'aă##^@X Woooor�~~×3PWrg|8 _΄!AX;dğPjr0`a8B0T93 >c _΄83p'{gk9 #C`T ig/77|9PҢng|Z҃4ht ~ŋ 88cJ={;VYYs8cJ={;VYYs8cJ={;VYn!c-PoC9w3IUx|+e_Z/77|9#/x >s eo챖3g!?E&pg|_!lY~~~y7o<˳ 8u1jE֭[96|Ukߟ:뼋զwV7vԅI5klu9|gl^Q\R9M…ߩK_q:TϽ:%.̸6ǧeïVgveՋFGOTlEy@դ MO5yq[n+յaNv4g\+C+ m8O3˯V]r96g9߷Oa|>ٲz �ṟh.>Ǎ1˙3K+Mˌ]|o}Ƈ6Σ]>s<1]kYY%%+K}d١)hW>riAĜk< /Pg9EϭȼbYsˬ8Qď!gV_])I4HۯN]~^b\޼5ST+&GnzʱGam CsjkhYb@e<kB~/r�VMaↇۋZ aҞ %MGO3ENqKR$t?e5wؐ)%p7<>K )dW}kL k?:Aq]u Yjh>Oe޸k,;KQ&]~eڎ0~qZV-[Vd fg#2֢'c3\2's5؂$K8?&(~ĕSI[N-| ++>̑?>\mV.ύj-FV9ONJfb&c~Z'q0Iq몖~,Miq6\vQCܘZNRNT+0kIZp~퍷RJOR~Oj1gGqRʞ%2/͙;W/4S٩mF}^k6a )S1q8,bĥT>|ZZ)2֖Oi"*ƥ>N/Q4rK@],6-.kIEkn)k az֨y9_mXv]?؅8l+Zt5+/*̙_WsCѪ.;gBlrԧ3fX"Gڨrz//̖!_t_Eq"45X]b{ltdt&kmϢvu׽G7`RzSau˭QT3>a Jҽ_eb.;Wy8.g*LaxqOg?r3ٿԦ>P`k&i)-}=l0uZ̶G>3{b^=1w([Vs6ai|639i{糣2yᇨޞRKPdͧP_W9Jvbô8z8:sx{z y5\q&]_}fͥ%Կ{KxA{޲_w=^=f-c-ѡC{(}lMD!w.{.g+#}9u++3/6!̴3{˱< 3c(_巤GՇR'>\wۥ,ηe$^)ۗm@~>.n;t;,I~ўf2[|MJĀxx3i{cu0mB'=QS~Yq8nոJImFOFzKXҽT=9p?}דD^J#; NX{ϔy;89`Y5Oe' k[T|ݳf5e:-;Lu۴n]!n)hHu=07EeR[i`%=ěM)E(Ӱ.>_͇\p';y~y}b{>)~uOZ ,[n9/af3\9FfmNӤI`\^�lb;ۧm[<'[D-5'lM}/653H>|l9~eY3ؼQZ#NLIs{byC Y $XmzSn$DP[_{2_tEFkmll#&-ߥ&T]w&b?3.gl/C0v̅7UX;ϑ:~6ִgl*qILX!5*[r6QYtݝUR\kڽ(-cH 3]p6Im_tYjUV&}yٟ6a3Ƥ{mkg r2!>3;8mjq׋ ׹YO޳Fb Q\bk!? |^}Ͳ=jG(ޠr̥жX/%lqǚϽP"ttȗsB q!C^~:s@lvdIj_f m??g"5]ф$ǵ]iY5z#Fh|9+AhD MX,&3OmP@… DʺҶҜFu1{RP:S0'G,,ǖ=9Oh(I7;TI6B5xP }'c揼hp�o~%OtȾ(x1R4{7;[v-Ff׽K.2lb;B]{u%g7jΖH̬Riַ_5ۣ2|')xKA = }mpNkq_.:҇'BIf;5q 2٫-�5}9`IXDMHX3ExX3Oj}K9iRWmoHmoM̨Lʰ yI7?7Rr؁1S6**'$P,J,X@}嗥zQ: 6Dٮ5ڵәl)Q$)C^0 k宭Is.|6#'(C7;lW?6PtęƛlL6a+Iڗ_T\pIi<[^C|RFFuZ�wE^6<׌53Ӝ_a[f<;YH9Rr$a- ?zaJ1}s~l :x#ʧkR$N;ɎX]ي$?+qg9{8mFwBX+G7e& _ȁSf",I`1*AdYF.Rit=Y a^9eA]\&U&EIGͬLSK#ٞivٖ7�KluaN>Ql٢,#~w`Mk�� �IDATl84>R`ͥ¦#5K%qY&< bjP~kG 0ZfRL.Lq]5-pw`oRx4yGuQf]Iddc%2}KRPsyve+|Iœe(G=qTV)=sP|SQ0dfI!홮e.D^EX3}m/>$1'nQ~f_yMXamkt6aĒːJxv1F ͥXJe)5QGe1N;}i9-c)3z0oh?I"Q0edL։'ۛ$; %M\ulv kIqA93'$țcIܛr3h8zT[Xe妿Xcll/LkrgA;sB k'=>ٝ $tyl:I2%W"^2IEaM.~B k8Iϔ'a[^P8aoI/KƸUo}2wCX~縎Ŷx>f%#EָfL$r k$꺊=(.UJ#E3] %+m} )LovVM~Ham瞡F|QwFUtX*\IQš%[�-74jˎ  66HfMN2cC=_ #j)h!Bs44 omi?_N黸eKe_oi}e#q+*Nha3֒d^*cAKcB-š|4J3 %rK.Rˑٲ616BZFOZ T-Mz%1RH#.p֢/Y'3ہ7{ˢ7frlKAm˳L̥XQ9#okIP>,\5J.š90qBwLIh,وMe^Db Ѷ'oISJ٥ 躛$}I-F{=<~f"RP[&S2isuy /9}A%t%M J fsN,.of.Cb&5:Ɨ$3Wnu;6!6sxeYhamܹzOYV'ےb^ jK-qKg9@ kϑ46Mymt=D-=`Fȹ,aHޞ2z ؉r#eS^ z&}8a͜ K.nt_/0,%f_#nrjsLWzlQK.M]5[Ƶm"Aϖf3)cMY =s,;Kb;1OecNSy)Oe#OL;lš 'd m|gT6$ۙ=DZy{p{>`;6ܘݴ+)?4Rپšk_K?/ޙFY)4DbL a=vM< Ɇ $19Hg6G'f7ϥx^ B\r3l?),H܍ĝ3>~Ch| >rޢz6FX݌Io>s!|l{F5≠NQ#(E972̛+qR`I2p)I{1_p@W!f%|5$@l% 59Q`,-> o}ʥTWzC[tg&p^I-73\QK %&QK4]XKZ *yd3Ͻ kHeg&F%QswVdvRš 8Y<\EY~{RQ&RlZfrܨ\vPSnM!Kd=Ma-Xw#L0n!ciim@=Ykm(1yhLA!ˍ#"iB,`#|b ?GoN2|m3yMT"Jm8{ 5aҿkv{Tc0VXLL;e`lG[ /cŇ%Z_Ft5[sHeJr2'Q9f6FX3}oR`f<%["|ǔ(lڌ9vE6vl3oIO' kQ1gK%(^ūvî^r?31>i5-j|w7 ;_|vl)fV<< _7_P;V"eNi/1] *'皒?枥I{sf%ٳ >2Fr72ʑZf3\ $й#gH8VOelF.Yβg@%Q9ӕ&ni|--ghW˩w>'-mJS~wpL:.8W7�ο'f-MxRV}%խ^ˁ߀H~E |!%QkN|7AY)š;+T9I.7q YLN׶-rA[9p.Z9 d/vo@X߸ 5}\+Ɏ $CXKF>Uk̟?qf3;kݐjRCk 8G]O8/ Z˞jiYs�?7kY, eE+^LLtX;P@K825I^zZ삲q>3A?}lNoSڃضM*᜴p5^m Ue ?E+|8k! --rAY{ O"<ԸEF->{BpFHJ=Cbjf uHl{ϞW}E.l/Nkռ Ï/'=Gw쒽mO,k8 zoL߱|}8c6],W(/k|o9ttCZB)P)ş]�g\O|J6>7 ':+'T9ri(|B8,cO(? ."C>3p2P3\�⺂grʁ####�/gƯP3qЗ8X( '*'T E5U^XK@i>33 /77|9 ;b+TPdwk 7AF:F>qp.6 yNjx gُ1WHarB dL ?X(*'T៳ ?X(-Z k+sC>s%-ށ3p' >s% \s0a-crB^ .t9P^s=3 >W"PWvoooor�~~×3,c-mGWxG GZ GZ-g _oor&ĄꈟS ,hAad-X`qӦMpN[.Z}[}:"5x` ՗3g:hѼ L8^6jui'[gj+}΢0M}les�6[uQK0uʀ~jۭjML_i5T֭3wUתK.8'˲Z}MFT=Pm<`xF]XK>.3m9 ~.~zɪGnjۭ+FK'Tg*+me_[>@"겹JcY2+\](\|k5qS|Ư~.qⷭŧ>Fy+YWM}azE?cZܤQ$ϋfjV+s-cR./We\N3dz-lzK}tDλ||nħstZqŖQ ]^i�a-Cutի6klu9+vƃS7rg KZx>IX#.4uiU&+( ka-ɳf.Ƽ%:^ݻZLuڭV*;O jI[91 /AX3$}r5R}IX5ws-ՆxgN uWk~8E&Iܼ2k'^qV_>^g>Nlu[v$IeOyjeqVn @y k/A&Wwr %'!$? 7>Fve)&Ν9kƑ̜VL" kQo0d`eU;ct[6/^W֌533^{.K޾۲]I`y j5jR%sEloʳ 88sW/V6Q' .lQ~CŖIEvT]wROm)u<=9曪 k\m;9 9`, y?Nܼ6Mxrmf]'PuUuo:hdV=+T?fEX^bXZkELrΨfFdG>Ud\s\2˧.tm.u9~Gը}Pꠐ !'K9<4o\OFʩWa->Y*mI^ڪZ03":P:thOD$9sZ$KϻkYaߑeIXKc+5[9A7矙Q˂,e`!+k\ZX 35gaV_0we^(I}ߥki?"us6U2B&xrmu$OrYaO>}ԡe>n9UU&n41IM!Sٴ-tΥi=#c.=s{0$J!k#1דiJ6mpثztcc*rW^z)Jfm.^ 'H{ɥ Š?rB˿7w˖-4t#N(OK)1\ < +e'|V⊭eۈ}zl#M„x~.-=V[Ev˜~rm 9eORr)ŋՀ~rlIY kY8d?hc6c?qYU_uH?!9vcYod.ǶtLfoTgA,cھ?'L.y!pMXsq}>L}"4]fAIн8Z{eyN/fN81TWonj$~=e~IKaF`>7kȱ({s6FwQ8Ѯv^Io&L .,Mзl?6ȶPN >p֢0!L]�-ۘt&&tǞPoe9ٖiol5GX39d/KI7lb?އۧOIcmK\~jРAIܲ-I5mGcM k.~UX#W_&%:lKAzbnzzlcawbNɿR9N8VX'^INGeō ҶX&y1qŗ^.HgԲ1ƓʼehlhNE眮hDe?Qkdqcar1gH"3Ehb9nB5kkNVӡe .Oi/$~&j#K٦ۜ' kTg&ET:kQxɯRƚe .ZXL/\fpmfG kQc7#N'6Ǖ?]6Lpa|eqcÇMn ~amJŠ֤Mew6a<%~6Wvj+#7YD|>%mdۜr{]9fNO%\N:kdm(r類ZR] ʹfiR3'kq~C<4vl>\ j,s|Ք3Փ}%-&a #shaLNu'T̛fQ8FkB -eȝ&c͖J}%fڷ问mK'a-i~9hTd2-2P倇mJ4U\\p{Cj-c"9ٲMR kTe7E ITKAe`$&2hCi܎].35`p譖9H߯.N`*'8OlEܸ oOyW= Y^5~Q9t{І MC6fΘa]$Ea“m9- %3kQš!_/ Y%9I @'nvuޙ+KZ .nOo k,ҽr>S.~`a^ȴ(aM*rY/q?^;X3fO]967c-N,:CaP�fӶu)P'(.Z^2x$>RPK.kk^!wd&Jf kQ4>šoɳnQkfn({M1alֺl[|m%%Ŷɓ+QKAšyM gsf/:?bW߫K7G][�61;-}c=jo4)$LH fېšMPgr^Bmϴaa.h9(- )eC΢xOܸ9$&˔+H~e_Mo\d}Wm/|=٪减Y[� 懗=f b^o/k>0DFJu%QUXK:2e'JX8sLC\,FBX+gu0a' ẓv/~05aǵEf_e .A' kkwX0TP68["f <(JLa2HP8o(wؾ4eH?~~Wr"&yFX`&&Fo9j-6?Q9[lzq:R9%x wʀ~Q[}d=:~z78KdJǦ>eP_۩>:4ר^6X컴} q!,?sNr}ԏWٹ2/ &f0aW>Nf?Gb]Vt*aEe}?:<:CZhQpWߠgDqYY^)?l]3H]?\gzQϞl<:nbwaQ_oz7J#K܌{qsK5a㈼ٳ9\N=eM'lz\^1zp>Xg<.Fe~8{cr4T6Hgƍ<~''wRypi~ۭƘ1IHgS[Gytt|Bʸsn%"I8'ř<ޚ4xeZZ7CL}h)5yv"usՅ۷T۷k\zT-9ڝdG~OGu.JYc4lrFjN+,,{UWvixc*s'~s-6\AOQmLj+h>rFL`q֥uWxRݏ|au'!8ffO޴SÊk|$ɯJ%Q>e2ҵ.e&͛ / q _xN*#q6}JmL^F{qu+K&mjKN6h( ops>S?q7L.aIblkƕO쟗5)ZXLOBq1p*7Ĵ-eՙ{s sm8r&܀3IqX̓xY?ݩ]XvQ}o=FmG43̷6h"]#!r ƧyҾ .B0%v .}@v b? [&k 1a0/j0/ 3\S[~t*Cb>5(Um徤uQg{^]xوS_߹f%F[ƚmpΦX#۵,3/ॠ~41xj뭺2SfVBj3>BIY3*9`wwM /C΄<2i۽\K\eֶYo^^Y%IZXT]w-yk^wdﶳIBTc.3x]}?MTiGK㴭̨0]Jg7l`XsY]2FaIЃ{Y]5߽P22Ty>DuK *Z:&ж/ QOZ bOjڜ;ٗ2L!:DKJI\ⲥvG^$ū.KAͲZ :`껆~ B$3c%Wj#T<<)M.ǚD- yXLl= g||:-ٯ;gg>B 8MOU~YC8lΉ&mP"Ң!Y^h Ǵ/W-VY^mj]-N49-鸭lY j+D=a9.ގmiґڱL kCĭ{Tc0VX"+%j5W{^5MD$&O3<59oX8<5SDlLDvRo=KXgSw}}[ A\&f94>pIGXc~U 6H˵lD],r#uL#jb"!F?Tw)_T!$>2_4^zYM}btΦA}^V't7}Zj/I[H#/}C Uv5~YaaYyt^m"JXc3/Rb9и^ȾW~oLEXsrܽ/wiB֗3G~W_�!_{HʹsV]'6 k6^#I'MFvg[l;oqBcH,O?]9rT'snͱφkxHau{4šϊ?f&6 ab*mʔLOa 4&ѫ7o=y^EṂ!ANʤ[rLoj^|z'}d.Ie]{>tϾ+G:ˤL![g0:=K LߟyKu+sſnF=g(a_zM[_3lšm,3j z1w дši/j_EęP5}08BSϜF`Ӿ b)Zp&!>=YWv>E3_ U.%9m vԱhgZ ʙm]Ehkbw7dipˇPF eq޿0znSԇοWY4X?ysrzlUv-U3]4O\y\ .^a?}굜NhVwo3Mf+#T侈EufE>Ӳ :ߐ3 =!]qM,lMl;Շ=8lUz-~PҒ6.Es6ѽP*ejWfQkBXKABu %X P<("B✄cq{QYrߕj"I}g"]ka%֣0G;B>> š?jyo3W[->ZN\-3Y|YZ>׭O?=~k>^ 8㸀3pBP3\@(B}gŏȧ?8gPrrbpZ(„*'!-� Ors�sP< Us>vsC>s%#�g\ a-u ja3C {"C]tf/9 BP< UNv??g/9 BP9&J3 >W"ʾB{rB ~~~,a-B PjY |, B0T9 žg, B0T9 žw}qY eiR PYh4KW>_8gCP3doc8ד_祙PP儚P+>q8/Yw|+5.k9߀匼h)\ޛˬv ՗3g3O4Y!&ߟ:뼋Ԝ9sՅ |F�gQWarg| _΄"σs- k`@.~:㴓u֗'Oqɯf VN8 U˅Qׄarg| _@pG,^r77ܭ2\GZXkԨS7hzaWTCNP!-^8>;dGkaSO]4Sp^s3pvE*u9~wgW]z7pvE*u9~wgW]z7pvE*u9~wgW\fk߷?ݡC{u-:_C]sU6+)Znh6[u)ރO]9ro=}1G.~zɥz7y>oGxmu1LL~zs}z{> 6cPowp 8P)Z9pg|Dh{Q Q)q_6a-HZ;-Rܶػ(HB*v\ (൷bGzm;,`vEņ(P!@ 6nvf2;۾<>L99ggO~{6uQP ^8rQ�+*C,+x Ni-[E^~ {XoYܮyczTM~򫵖ZQ^^k .O$gګrHqg޳Bm}̫ОiϴAJß8>?g>qܶ@QQQyfff],̾ $TV}aT`-bVY!THf{aPՃH?" mkW^zab nK*gkОkǫpp=4v^߽:L{)@ٟ`g`t> ֪= j=ܑ5 \fXKC3}T0Q;ov5+D t_Q.Hښul;=5gC8Hs#~TqvvWwC{=Ӟ "78g3Hm`-_-F?죟k73=:vJzu3LGi}i!/˫~WV{[™M-z=Z5'^XӹѾ*#DQ_UPY,^,>[{:L{&Xsoppfyq.55G|!X* xA|m^> :˯=S5.v ۪?ª崻xAp< A;N,ۛogݾGu?:^L{=9m7o8m3kżzyO8^]wS+nCV` tD~tn]t/ ֬Qe_r~_eUPm0oLyOj+7Zsݾ1ȫ14jڡWǡ=ӞikN� N }1_^:WEFfDʫlfV?>7R:r8lj;^L{=ާv7oppoppf9p=Ӟcў= co oo9n~hϴg3N�bkZA3NoA=Ӟi5dОiϴgm mƋ+ n"7Rnui^b^L{=6}6?g^ú�� �IDATN{='r{&X#XK%XxAq͟>q ګWǡ=ӞiN� N A}1>87oxLS07x,|L?Sqvάux+ _8L13]o>uLFV(#|j?nѺƎ3uAss2Oiϴgsup915c'XsOq;~<7ys2hϴgsx'xUUی j}/Rj_m^eeewMg,k;8#Yh8#Yh8#Yh8#Yh8#YhDןopp-+V^x;dОiϴo} mFU@IIIyzzSDTp̼/s]>4z{u3N� NL^}~yu36}#E5 #|`y%?8W7gN@ԁSswܜS1w-^q7b-R}6<#HBgo#HBgo#HBgo#HBgo#HBgo#HBgo`-+ /: QqB{B{B{B{B{蜅``-:-Q:s9.C0n8;s9.C0n8;s9.C0.nkkiY!qv p7gpw!qv p7gpw!qv p7gpku8ەv88ەv88ەv88ەv88ەv88ەv8/ތXJËNë~TqGОqGОqGОqGОqGОqG :g!X#XNrxTn\nK88s\nK88s\nK88ZtZãwrs]9 g`.7%pvrs]9 g`.7%pvrs]9 g`.7%Zhxu7vu7vu7vu7vu7vu7vu 7#"g,gy,W~)?7JYyJyH M!;73vˑRIOO?k깪חWgg;Uym.k5i8@tBFHgpw!q)(.KOhڡ\eKȆ2LG{7v|WNb~^_i,mf nܟqGОqG :g!X#XNrxTn\nK88o;ⵕR\V. \j[2/*̴?hC;ZT_UZg8sμn[9gkvChswmBq3hswmBqDwQeձ)$7ɰn$>w2ֽf}gi/UߟswFݹ9 gbٝӽp*Fܞn8;s9.C0'oͥ"̴Z RZ."o:jm[;Hjx!\}%n~N ٟg9 ZVcy!� @B 2>']LƔr-/,/OnY=Nsp7# � @ Rl@�eCnzŀ,e)wA|}J`ʹGJ� @HEs �) 40>xSG *ډK{ U_y@�HNW @ E4XkQ%0I 2 Nф,)B�@�Pk @�X@Y4TrsjO<90A�@�_|a$ �DG@furѵNJ'DO^՛CkU_ѹ[pT@��Z4T9& �> h$;mk򫃮:XMEGP � k r@�b%Zz< +x<0$kK$T}gI) � X] � 5Jr)5!۟v͕4~,w]卅߹Pa\_TrYV 3}INf2'_ZQ=ֵ>"CWߒ(: �)'@rU#�$ky&Xss}JUXVn*[欗y+L`W?k9Kd1og W]s. $3m[tu^W>z6uj .(t\΍EuNԴS[Snu{k^}h-' 2իe"l:y&E!k}DzdGq- �$�Z0ׇ� dV ^r. %r䥕C}|om^Mm yv  НyLʊ6K mFzmѯVÜgSܼ\Ipf2r9wgXgw͑:7jV@šGi'VxZWms\h;h[w,yr'+ԺG\Ԛe w"GZf%k}DPi~� �#@?uAI@�p,Z̴V_4֓+i(,(Iϔ@e[$-#j[\V.T(PYgEn% >Y{}_ZE;>xdExv;CNzG-a]=ver}IJ\&oa7V+5h*}=_CY_,XkBp׳r峿lmG~c{71yˋ+{U#n~g � �_Ҝ@�(hVJ`y5 nԀb}\0#?^úI ?#_;ԗl,)4*"k)7|B,1Ho+J,)l9WeBy3혎 deaRfY k%ݚg˝˔%j4VmӔ#[Kٲ8XN4N&Sӣ).J3OVJzҿC X_Y)z%--]4TQbC^]jwA-\yBy&4SnlLuPޯdd&Xi(S^@nx%-=JVa9>` y&X9{}E]~4Z߇(*8$ �DI`-J@�?4XQ^֪Q?ܾܸCr>uuDQE t?ȸ6b@Gȑ#6V<|ؔA^Kúɻ dwrmφ2}}yL�ҿm=G#39Mmtbe9Yi|T 0bԶbKiyҡq[ : :_-+I0۷E:,Y_b_#XT*'LYUqdzr iS.uϕ!ȘdҊE i!7ś*gI<_U׵[C3ow:bYIUA͓6G^:_StZ'nWkyAC Kiyy2S}3wLYZ\1Ed\KM%73 7|N( Yu1~i)ϑ[\TnLG:z`ͪ#*i_߀vmՇc9@�@5o9  �1`-kG44ᐎX+o[SJH.ثܵU6wEܴCiѠBer fT[>_o -=6f+pu-f? 7O`mܿ*,3tmreo]׫ژ_7ટ ߃=ǜe[du&XS7|:̷`M䆞Bx߮*歗۶AF`٪euN?戵*e&UE%r|PA]k;u!]˥xGvdk=ifՇz; >?R}}?8y?L8) � XsN �ćki[砷kM~~EGDZ}9#'w14HFr&>=C2tuπ<һvgf~,= 5#f_o6# 䆞誜j-Wh(Yn^&LVyV9n?DG *//-m'grhr6yش|m*=[fk 7ʍ^o,/5PR=T)kz,-亙e_*}|-H@rC^OԨH_ҲJvb\6~NctWKj6Uf^[eɵ3˜6U@FedHmѺ{42++zibpӺ՗im~\P;HO#Շh?T}݅R � 5;Jl� @ d&v~>[}9e8khܨ֗7C}yN}_&T}Xhc PlD׀bmFn 4V.Gh`-:{41 5K+RcjjQۙ9_$羷B3Wu3hp8BfF__"rȧڶPuέ<=nWe:}Z$&%[c[KǭTo`SG9e-VKd/}FLm.{U 42Lhnycgqz븷4zˋd?q[ͪ_]po5l+-2փH r,/Ҿq2Hk>C<@�Hĩ+J� @  uCf\ʊTB dTsU2@eիpڦxK =S;"eHZf=xIZFHZZqK+~gKTEq̭0&ת{mP+{sE9̹^l gTȪ/@ZGi)@UV&^^>^ŧQ +ʮ۫K%!-"?[FCZ ʋ%-+˄R!_ԯzJ;>m5gm լ ʪOmEY[bAEjPbH]5 ˋڣ9}k\9zViUkGAaq~}W!!j0?T}t@�Q`-k2!� `SXpJ=?_{ v^ozF`dd>=/o6C�@�8 XJ �0#t4ҝΆũ[gˉo-7L=w6l#|JXtrZQs1Oדۇ/C�@�7 �x&`58;+?C*)ފfrb>p$^y %o;Ivy|%=3K5Ȕ'h&;elUIQh>?lWގ(6 �)'@rU#�$>/R)kd*וi.CvnPp�5 7rf@�#@fGm@�@�@�@�&@F@�@�@�@�@� 4vA�@�@�@�@`6� � � � 5h� � � � �m�@�@�@�@�k.@�@�s�� �IDAT@�@�5� � � � �.\  � � � �k@�@�@�@�\@c@�@�@�@�h � � � � Xs. � � � �@�@�@�@�p!@]@�@�@�@� X � � � � B` � � � � @F@�@�@�@�@� 4vA�@�@�@�@`6� � � � 5h� � � � �m�@�@�@�@�k.@�@�@�@�5� � � � �.D\JKˤ @�@�@�@@ /==M'J`TR!�� � � �8HKǨt'$ݶ)HY#ԒUsA � � � @ZZ@232|9W<$e5FcsL � � � hӐWD"e"� � � okQDk � � � |kW!`-E*D�@�@�@�|b@�@�@�@ ֒NC^ZT4� � � � F֟#�$@yyHYYY/AQp�@�@� XjI֢@�T`r]w˲e|^ztڵ� � �#@?uՒE#�$�ZV,� �x$@d`-k!�ģ@pv]GA]ӱ# � kq[5`[O� Z^SOI U篗i>oV*;c!@�@�bFω@�X`ͻ\1bw @�b(@C|?OM6B�H5j`;K� �#@?uՒE#�$�wK%GB�@� XjI֢@�T`ͻ%XΒ#!� @O]D$kQ �I*@]ygɑ@�@ ~.Zrp@�$ Xb ּH � ?kSQ- ZTy98 @ :X+//kʯ*K,2#&ڵ;J&M$xRz+WŋeҥU׾}eΒ\_-?PVX);mVZA#:UV9{ϯ,WffsGСzxl� @ %y[G"e"�x*`MoF&MzU-[V5iFN:D \+V>PfϞ-6m {4ѣ 2X7nv;+DsS'xsh]{y9slR iذC}>pL0ֱ?\jW_ /X%ʈ#dv [F그X>xqcA;zm߾k[vD�@ R RL@�ObYFzi駟*EG騢͛Kyy,^DO)**2hտrQG)ex3… +ϥQpyKJJ_~1|җjst)w2kjK壏>2מU9jpƫ`ͯ<pϦ:NCI &6l0#!uDdYYH^zɩ{!� k^[`-E*D�T`MòqƛK>X+M61MCZ^|qB娩>}_r=cDQ_[Knݥ~;ԩMõK/WnZ`݌QNx~i̱/>yo/\0\5kz6m Ն ;Wv}F-[^# ��ZT:ZT4� ੀ_ږ-[ǟ0#t$E]h۳ m4kM,{4hh5}|O?5]veҮ]ۈ'z6xqE9?WG;HuI߾}Ef � `R!HEs � iHϘ_{yoqƉ<:堃:L_nB]5t̘{E_~{- .c9F9䐈;o<8>9be,Fਦ@�kr6 � c?5}K7:L3GӗΕK.2|s9=nu|L:T222j=tkZ';찃WNu~UONj@� H XK2@�<ׯo&w4,P&뫯2#t>٥.NOQYȷh*:g3k΄M999I w~# �\%NkWg@ rO<̝;O:w$^xhy }s'N-[ʕW^rc'57VƢ~cǚ,."֭*f?@�!@f)6!XKZ@�իWW\i)Quy]w-˗/7 0.u_kdTk[/1X+LZf쳇Jz80 �.@"-`-E*D�T sy=LW|G~^zɩ⩇LWݸ@=y)3b\r౨_}Lw2e;fZ>ʠA\y �$�ZVjK"XK2@�<vf#6mԩ"O?-?4_chVVcj8SXX(:%K~ t4NJknXկ.d7t;vt  ��ZT6ZT4� @5qJO `ݻwaεi8ٳeܹlr)++UT N &̣iejꪤ/{KGF]F!��Z:ZT4� ੀ_Znn vjgOOO7X yL}駟|\PرYItv3Zmާu bQyf:uL6̏t҉<"ٻ!��Z:ZT4� ੀZ1BviGO`sp騴#8\?p}Ersp%+**2#^{m?O_&t5_d@�@ ֒~+`-E*D�T 5hvs$3qr9HΝ`-2Y,7rDt?X&O~]6mdv.*g9 � Vi k)R\& .Y>t\tE=-\j3F֭['+GyyN@&NkNC_|qy$΢ QXԯfzS_:jqȐf/@�'@f)"XK*@�b `mŊ&ҀcD*g̘)?DSOg}f+ҋwu^+Xkڴ\~iѢ+'ku s=XYd:B�@�{k~+B.�@ 1|Ќ޽ vn xAs̙3u&Ds|X c4$[t/ڷ~'cǎl12i߾2"1b-F]7nhxy@�@�=ߊ`-᫐ @�@5~u \veҮ]ۨ]iIIyoyu _  �,@"O"e"�x*G?_R}6|&d:"M6뮻|eV9]T&{衇ev;ɓmkB jqNgmܸqc=jk׮c4vUf̘a^X~^ꩣyyɮVOt @� XK s[\5r� ~knL><>^y�K_E&АN�)KGli8pB3BNL}k=~4eddE](?L0V@^8B [l1~צgy5]qU/g.6m]n5?wėm۶ҳg6Z/�FQd;mm@�H4D1%Xs n �)-Wh3 F4\KOO>X+M6 hHpy_~1uU~}䒋͈p/#HQQcsi`2XBx ;oYϖw.~8v@eSAGQuD8;>Zׯҕ4uPHѻwoӸqj/K>}Ȍ3m۫`V}pv[R~vHy󾔉'E 4I&)@�p*@T,A'XKЊ �13X—s4`^yyyQO_6l0#G AS=dȐ!`H ̾[yUGC5=~$HUVKҗ{sg7\<0֌җz52_G"J+{>cf`s΢N򩆌˖-L]ѣ:ʄNeWvѼysԩdggmaB�@�gkμvk: � C5R54yfČ*~'~`df},4K7}Dp&^NckO?T#Rl&< 褓N4I_/^{MV^]cnn_zUcb v@� XKr_X5v� @to&:JK)땞fСCDYGȷT$}4h ]tڛyռ|YQw BnnY%Tsr.}vѢ_M5P^-Zl':Բ5/ձYj-XJjէSҪf/@�p/@.$XKꢰ � � � �k PI^` E� � � �l XK@"e"� � � okQDk � � � |kW!`-E*D�@�@�@�|b@�@�@�@ ֒NC^ZT4� � � � F֟#� � � @ %_"h.@�@�@�| X:'"X?gG�@�@�@� XK: yEk)R\& � � �&@ulOD[Ύ� � � �'@|uRL@�@�@�M`7؞`-@�@�@�O`-4HEs � � � �oԱ=Zl9; � � �$�Zi+"XK2@�@�@�@75ߨc{"sv@�@�@�H>ӐWgvٰalٲESDD�@�@ ՓҤiӘ ;'E�@ ż)Zqqן%-Z0r@�@iiE;j-~/̜@�U?`-n#X[˓-[z[x� � 'ƍMv~/̜@�BMv]H^X� �I!xb_A ͅ@�@S!kV[,~K;Hnnn"P2@�U`Æ lٲZkr2@�B~ZB42 H.]$## � :ق S]z=C@�HH!k <:{  � }tޥKT~HTy98 � +G?`-a9bk@�F-7uQ@�H6?!kj\ZT4� @ ѡ%XJ8 �ĉ8h`-@�B ѡ%X!� @!k)RL@�L`-* � B~CRAHEs �ęZFYS@�D~ZTvAma� �@�@ Vi{k)R\& �q&@gBq@�H!?!k)ҠRL@�L-#) �q"G?`-N*; X0G�@�P~th h{ � ~Z=h.@�8 X 8 �iPk)R\& �q&GkqV@�8B'bE[#� @(?:k=@�U?`-EZT4� @ [|�� �IDATYP@�RH~Z4(h.@�8Cˈ8t� @!Xʎv1֢-@�@ Z5 �ĪB"m`-E*D�@ B( �)$G?`-EZT4� @ ѡeZU:A�@ NIeGk[/W]7JzQ(Jy_}#>qHiܸQʗ_}#RήxKG\l@ ѡ%XKf!� 5O*ZIi6c7z^^=iCKw=/۷@ `D7N䷥rͷ"t|{`-N+b!~th ?UkM{\xM.9֬]'7riGs%+33K@�_R?Ik?_(c=.k֬>=w.۵t{rY/ጏd2꺫R~Zk~_u7&#gr@ Zs% zYY!/++K4�?V^#׍-$#.N'>B�Bm-X+//>L|q9aȱrtfZbKȐƍz ъ&~-w'XsL;0b-i C z}=*g &wO[\\ @tE͙\z0ٯ>I[䶻]iyż k1 �[kn&BrOtW J�BvlD ֬! i޴HXfiH{ԩkxCK v]{b/@ cGL2˯/ܜ(hH%?Z$=Z5W@ ѡ%Xs ܵB�G~Zⴇ:4Q 7n#&}]kwMޛ:M&N,kqȿ8E2}ڛS?2cV2CN2Tl\Y|YT[]崓%]:w27z6̓ѣچ^ I|{ﹻ_;~]]-A^@K{ŗ e˖-ҸQ#u2cY&UYY_~ cӠrUzZyIAa9^#:_?DNd]/KL_-6rzc:I])~\5b٥aT]cJN; NJ~w,X(\Z[dʻ>v.?asSN֭vQn]%Ϛs(-=M>=W^{*:4T=F |ݼts`gUmkNZsB O>7SdY$w\+d֭n'L%ԫ>{Tmeb;W~6~i_i4} /xs{2s֧?UVVf>:p2higir̀~aO÷}\}%5VQucݺR KҽC+WyWB\NZnoQo˻(ڇVd6!U* s郹m�DC~Z4j.(ڢKd]5W^*ڷ3Oo^֭[/8Deݺu jSNl(/pi܄MpمUd"{y6s;P9C$/'DŽ73>%L~SF\twos }AAl)*oVpܽnw!5늩̓O=Q:w`I9ATk^f}flb*y kQyIǟ~.͚6c:RՓe+Vȓϼh:7^Ya دcF˔+W^zaUܔIApO.t@@L~sn}9k+0YQfzKLY~YXF|L4P:whʭጜk1Ͽ.6=5yywdgk#;T}Y%{Ҵc>RZ4o^fykn*@ nC{'k׮OWedϿʻS?4_vo~xua3 @Ok EEEs񧟗/.VW钛SSt~._|Y]Y˓^Vv0:]DJ'ÏO:p?9sE_Z6g 8@ڶٱ~iu4#>|m((͐R9ĉoK[ׄ~y2i򛦿3S,e_biPz9?OgqF e-?r^zE{Ypu]n s})Ͽ4In*n`qs  V?!k)%XNO>+w2ΓZȭ 9ԓjI7ͷ#ڷ 47z*ߎjAWc6f/*[#o]s˖v͛9gZc5U}\yUV&Ipz0O=gFm3//vZϋ9]mD;^cA ]uw,ߣm{#W^*;wh_Ui@ /|B}yϿȕ#.fZ9p5ʷ~yft_hNZ2},s#_?J}#HAAuC.rC2}٪86B�C{~^hH2v͛қo[߯GZ+WnC?L+Gz~ҹ>= ֽ_GxxQa_ʸǟ2_FH/#*zr*Ad$}ᆛo#8L3 䗣ő1{O9*?׭{޵FT[>BV_%[9ctm*kh8NS`#�~ !XVctD w}ګFH:iYduWo|~6$Տb*]2*F "]pkG G[%83+Oi c^:97nq֧e]/~+2c“vNBu䚑i'JPhK-dž}s u`-? W[lW1j@_^S T?֙m2F=+G`Mw^vpo{JEErgGQճ)@/>|Su{i~fCe>ŵFNm ~[s\uŶEQ{\6m1Hԩ5ArT Y|͍/93d5W>k8u߃O2٩{A�Bg\Y8Ln} Z|v auVCY|nBڪS;[>^{Tn)D"o]+gvrϗe9k_ AU�V(z}Yvήy逆pk6uڌ*ܖo<&t}p(߇kqp#=O=7AF^{eo^{#zFv 7uTES_m3:7蛮uQX}z .c4=+G`mzYY5LJ8=\yłÑp#uUn]lf:9�}Z {<)N`gT m_h]}r C#^hQaC# tYAe9U?7jУ)' O Bn`l= ව5k5FK`M;oNZSj@H  Ÿ,˖0T_P< l[  j`ͫۺd?OZ/jsr)'n}Yf']Gg}~֘S)BFG$iFP;!i߮M/B6X:^}-ᢏP_=䶛oMG"#K EZGON5]HGL^5UK," �> !XRcuD ִ6:ݗv*B#֪䱎iC켆}fyM^|ӧ6nȬԮ]ؾ֯>kٺbWv($x0p+tY'եLzL=#3?T;wQT07z@Gtfhk\:,Ifn6mv4vmvt{YgVtlmmjc~L.^sĚ?4Pm?[ @ .Crjq <:+Bt#?eF)Y5JZmќPǫ-@xF;)m}޽lS@`9αPkGN3U_VwG\`BIQ ￈ @ :Xs{E2D'?6k*Ghf$_M)XitN7;#kX@�U1>OkL ;}(JZQTeq_ M.ūc툵ھ= ׄ)S?_!W=xάQccO]hC|GY& tt؉5}255; Xa֣FyV@Xkn8utcI^^\y酢}WU}acb(!Zڡi+-^"]2xDՏw@^|U*i}ďGAc1b͚W*l`R;m@�X !Xe xD ֔D;y\wu7[Jn5+ҹLdknk85Pr)D 5m•[o}G'wE 4:/K%bM +K+GO:fw=<,FSo kEԳ<*66 _~thc)_7jY;DݲE_iH}ȾE\z^qyYEUCzp5 u|-IˏTlͥE$ b6Z{Sl�DC~Z4j.H8ηKۙkMfITLEHa&+4o ֜)b)Ҝ$f'�huCfTmVsNNzeCpG: LPsDiw띢G+Xou} ? z'ܤzN)7o劧ݾ"?=ğxVm#/mZҩUksY9!W .^zgR~4S#]:wpu[S71C~ya9V}p'km. g 5}q>[" qx 7n=#"zGl�DA~Z*.HY?h7i'Gyo[3|S>BڬGA4i,eUb_/:.8Xs զ"o# h9Gj_r4n0du_~u{}9`mtdZNN> <ɒR·s軥O?;8VV؝;b 1~{Y7u}zF8mWM}Iѹzϱ+6˓g"ݺZ},Wё:"pm/ﯔ jC`=\GQi#o<~_Ie̊7U3WnDt޹1Op-wϭs}z9eM? sC&8z!R g}?/Ru1꯲2Oiiiu>kG6Sm|U6VlYv]GAuKBHW~Y_QȹH.:];ƘxuQ XkvUn! E?!kQx:tkj&N^[vܱB.4y0|f)]TsΒzSn'эu;< )' 6;hb*y2Oˠ*8N9r~#7țSޕUVyeӑ=:m" >PՓe+VGa6i"C-w` ?{+<´}m0]z2UHyӽ @d?:^k̕K.&1 =5p]A|Ŋäs,MxY5lPe}QߏzihȵQu kD( {]+I4),,#{޽J@?_T.Ry4;IWR_B*x1 ~w<х46ͷE];hyG+.H!w;V:pAϮ 29s冫U׎.6t˝cdfZi9fȻO!'kp`M͞~%3C7Hu@�]1:_"kkdѬ?4-j{rxCS5XmߜLh,[|3߼{IfMkԜydμL?h>`)+-/deD#u[PԆj.ok{P;ϞkVubݸQ#3jX9g]55pZM6ɫo-NJ}:ecȃnU =Ƣ>cy7j3~ &|bUP`_y\YCpoFN9a ueUAu$s4+eYyVi@Z5}WÆy55tsQz?93Yo7;kײ=s#/ޯ4ӑ쵕>koȏ>~֥ S`cy]' t%M!2l SX;3uﶛBcv5\knոFz{x?"#�~ !XVctDbDi@�@�� �IDAT?:^k\r#Fz KF^ � Z~Z>h.@�8Cj,?#?~g̓ � U?!kQ98Z%A�@ ЦR|r?Nĵ"� X~jI(5 �.G6?\tQ'^(? �^ !XXkq\9 @�$CoKtl%k� � !XKVH"e"� g~th=X{g7/>Ԉ+Y8 �L~Z̪@�@Bmk%@�p'G?`]$^k We@�CKM@�@s?!kW[|`->R!� ~th ֒q} �yUEPaT]Hp2R#R w15rWJMM M%ₚdfj n$ as>gΙ9w{|=glϼgkŕMͽa ��  VU���a@X+{3@k, @�@�@Z"@�@�#V\[jȐ`�� ! ZkuQU ��(;v[>rA@�@�@ 0h!{-B@�@�@8!kŕMͽa ��  VU���a@X+{3@k, @�@�@Z"@�@�#V\[jȐ`�� ! ZkuQU ��(;v[>rA@�@�@ 0h!{-B@�@�@8!kŕMͽa ��  VU���a@X+{3@k, @�@�@Z"@�@�#V\[jȐ`�� ! ZkuQU ��(;v[>aiKN?xpv jetЖҾ{-{i, fA4C(5@:jd\H04q6tshө[uyayk;+[A]xuyꌈ$W^} ٳ' g*ΊM+@Z*jif>]o(&OȲS5{8چPmWڍO! a@X YU5_lvm&&>{QSG&_{=paP xaͿՒV̴͛Ou^.MTn t;T$טx2A[naMgґZƨ _cնe a|6 k)'kPjAX3!&1$۸Ir=K58}tcѱi!_۲U}+#-%.JjiYHG<ĺa*i^zw݂.=ZlB<<8wDB 9 9O3ezg|*ST*byT2 ۷m6b([:>mM;Z^j~at֊cX)1$3@T*/y2^ f'f>UW.KXk;w.{ |?ӎ]F?=;;d]So0h˵cͧ OܗJᜧ7TymJ_,b߶a-tɄϷ!< cC7aw@"9f#o/@۔&OJ_HvKȖ Z2u-W]RK$:-n+W&r!"s7߯5 +-OeRc4iy6p8#1 %_Ӭm|Q}H3g|J {}nμyG9'w//go׍!酙ˢg6:ݺGO־m1O͍zjC/}o0׉% ܕv )9]zGmI,mp3[r:+qI@Z>.UWO3 g}i#G{;ngƤH;^n+CW8i}KR_G_y5FjEX+f�iKܖǜIA$@sYOq($.nWDY!-js>6^ BŔOħ#wfTL{">ҷOzܓK'Wش.?jݴLXȾ6mrcf=p6|꒎GtקrmV[3meyL8M}OmvyZ?˶-wl}WY dw;.qih&g^,ӮB.!k!J2qԓNܻ57l꼹#Cs9+͹<'FO NCO}gX?ieў+#ˀ-6 o~?h rK~frI練Ǻ;34pY[qrx?= g+Y;\]7%>`طG 48m W"hsCoE0nؽGT]XcAL5$ S33pW>Yxf.⚎.o.̺m6И}Z;s kO<hcIﰒ6d&4<�d3<}ڴK3M͘i_Bomdx&X,|d[oh#_qrO9k" ! rX˺{Izl-`{FO?PpY?>=_\Y!-vg.ęGfuߨk>+mk),L1JG:c$ >㓾'>I+�[^uWvc;ڛ)�\D.sllKڧ.G|FҼ•Ϭm~6A?s߸hE@Y֝v>>$B%qzQ©)d&ͧ\\0۱9w2{ UC'a%UaԛfގhVmm… :"EcNeܧKҮ]zA*'ݤ4Vli3_3fͲ^n]6K*# yQGѽEkޞdځަ kV#ʹV//]V}iL~7pz8ضkP&a]sn,zҒvaY止Rzߙf5 6Zp?=zt'Ɯvr|3*?CŶcMv]>>}瓧;j`]Ct]ջodtȏލi9InK:l6X/m~}\]9w~�BfSZ-j}mPs.4%l6Y/Ƒ4.\9 $`I6~6XN|4aek͖6wq_ץsĈnSC a$ RI];\.<~ԩSh$v|[?˻wSӎcklro vJ^­'aMWzf(䘢koSuEjb|c)nimQ=޶Id;0!Rs[N8ʏm`2 ?=2!\BNRkq42 +Ichy2(6.1}>j&/Wydf$VHLֶY}M k;mU׎}:DB|[->dXKjimQ6Iڙ&;%}>p 5Wg뛒&Z[ͺnN@dYVfc2X k|-Zhٱu"]>9sm4G/~@Gz4Iٮ|&z>%iZ~ȜhΝgo1!),lR:gkY'3>[n Ƒ,A"gKdAr l\6Xjki}꒫ߚ<&74(tqRqʑ ӿ~V |DH-֙ܤ[GX9ɬ'k#r kՓd]X3K>hw}v#})f?HTc C~ܐq[w>>Xm`ŶFԴ}lb5s|a1L~5aʹp a@X YU5׊WɓV|iBY(ߌ5M= }"gip|{='ASL[UOtl l_eӗ.J=㉍ GXaMߎsk|E;v6|#ғӞmbXpD>*F] -yxXiE$+nAOz9 5N{'Q0h!/Ӿct!:=Ċ뽈<1L goMz.UfOWL:UXǖpXs k2l vSw\Lak>Be[+lb$QNl;BK:}Pš쏝wܞ{Eb7(lcqlӍ s ]DJQ/sI}Mb|iӇ~A%K|Wqaǚ!/p a@X YU5j̝ICyf J,B3$LOXeLQPt4䣤? l,tq >%?cI20^^`:,d˟l3w5 F|8 SG1š-^wiGQLί;< ͞1o =4r.b5{{crAhGWNڲ9%E3c?mI|O;KӤs<|R7cڌ|-@}^akY>uaq;hm|`4a'fIXO4lOl}#ӗU8iWqm! r kR'ga=c��޷ȄnחXg`]C8EXN]T>6g\}NpuAT0\`[>"k",~6>)Km& H/?j]N008˼xf[ >u)m>9fs% J6{T )mnS&>lMӞbۧl<-H1#%'o<3͎4/{p a@X UU5s2%>mitxR\I(+4AFt:h򔩱NjnC s;:!|02 t[RS0'p8n..ѠӟtVb.3q"=>2)I('r~(\o^NP5XaM}a8\fSn5߶h3mLu;skoNMaH_gm}ciG9Ф~UW}tjMDs kVm]�ו'(Ȥ~v[\E -&o…NpcYcmD/z"IZ]m.io0>M+ik),|5aGeb#'3n%qz|څvǴ;~M}KlJw}_+l;.lެm#la?m"̰M9yɗM@M]ϻ꺗4oix1Iieo9)ؠ" Rf=7FB+!k!Kq՚VET:'lKNVAXDA�rG A[na? p2+ذ䙀mmWzG^%*e uZteu$,+.C'>Y,=EWkSh>@օ5W&ᗚ>"6#[Kʓ uZtf7wCS|FVd3>ʗ'ȶEj E �uO A[Z*9=N^k\pD??I.&FqU"+*e ZtfSl|hV%[M@�@V5>Z<˛yB!ֲԎ~Z  � �5L A[Z + � �5A a&B鉄V:C� � � @Zr � � B!&ק)hd@�@�rF A a-g��@NC 夰+ k&A�@�@�lBP@�@�@�e@XkaA ��Ar@�@�@C 5H l��@0hc-g��@NC 夰+ k&A�@�@�lBP@�@�@�e@XkaA ��Ar@�@�@C 5H7aF%7ꨑ5W:2s{n5J%iKN?xp-rt2kh^z'o9h Prz8B:QՠǬ˯.>גּڅYxhR4fOTbgѩ[uwS˖m꡴W^} ٳ&eFD!k,Ukڼy鴳Σψ]gXVd%." cURȩ"(jk .C[՚fa a-Ky1'Z{ǰucii'u8JÏLo<ąv>jj*mGXr%j];Z%J.a֒ ovehժ;rMnN5 0G<$޵U.RšW.óܜ ZcAXDI;lU(~Sr9 aւ6}tcѱv'ד^dynz#J%&wLKMS1c#bҁw$P/G}6p1GXE3{cοjPE5u.aAjZk>Ҕ eeša1F[%w+oZT/tk!fAX_ @XZ=a-uZ]I9j5}kI1c 5_ٟ+FKamAK͋yٳ!UH1XV m-kYyx<**|e@c]6-1Ϫ]2߭^qM|ն9'2sh+̶?fat٣ |,3SҚ@x9=G>֎yHNgbkWb8(w} G04ܴj6M[%NBҖp/c_". [D\a7d!4Hziъ[R{K IjG\?xAߤ9y-YhjN{er:Q;񧦍69зyxWO8z&�� �IDATm,.&~]uk㓴X=?Hxڥ{7&ͺ$哵p/{aoΝVo39q~t7 -"jGXc텙,?jY59'(3&h; |t*>H:jUŎ3Icg6>htſlmw! rXKj?\FN]T&?fۑnCFL"D{V1KAb ۬>j:)/w?ygmKi}ssm<َ&Y#y~]0t7ˮ^9m؟Ym:&OJ6ڦ&vFfd;q$ O6a|\l8\ R\]sIW(X 㱉O) +lXi6Zm~쇛v.ln ˎ>>dMi9|Q{^x@X6l6{l+sk5'9gڪ鳌l;Z-ՈZ ZȄSbT#ow,2Hߏ$N M=40b?8V$$|SC"68l$NbU;w9C3{9} 裠,NMtqDߋ\I-6W_a//mF~ێ#6dh7X-N.r}5/0ۑ+ZD>5tXal´"+W—|Yv$WG'WNڲF?'f;freR>>lbmj%h lسmN@bS8M:I0kF3\["i[}g J:Jg=^W?Gx;6b4%A[.a--kH"iϷ箈"2SH@&}RMlI"NM2(Iُ-]7\äNwk[>O]̰s06-=nI0˧_;?[O6F,i[Ra Ylo3Mل5WuS6\?Mg۱3暶Jgcaqf~>e!¹δ]s]Mu?gšf\vDZ6o-ݛrTzݵП kz.b|T+@b<='|-!kRJLgkOm9`2.n;ݱ$)5O:n[s 6Y̘1kV+GLEk&uԩԳ{w}3ݻwMRM]+ IGA1lsl2ߥX+UXӷ^. (+,/ҥogY]\nboõL[@hxtȜ%Mpu\ -X*okbmmnu9&.= o59.MZK>>p#.e~X0W?vz܈š&׎nm'vni kFQ ^mK~ޠj:[a5[Q>S|24-4uk43~qiϭږ>vqلdzbllҤ5r17cq\-lF[k;̶iڗK.uI6nwd֒ljl}n)OL^~WA. f{I+|Ǟlt6[e*SzmVZԊfvs' kiD&/|㌟0/~y0'Qal&>OlaI^d׃>40g[;17W#8#Nff?'+I }5- bQq\E+1DחryN}([ɮ"}enA3ǁ̸9l>ۗd -ǎ~l.aM |ۄ5XJ=QIš;إO: j6(>[_V-iͧߍydTo]d0pz aZXs_Xג5}\ߓI;d!Zlm77/-Ho1˕ ]N$Y\ JcVftrOZק+6 k,m.WۮN2WSBmAZ|ۆzbFši[1oK=tZ gǚ,T3EXٝ49.fdƻNkMX~1+Ax6s^lBv,x*) KM-IXb_;cn55sR|+&(.UyW7B#E605N+;ʔ"vUk9V9Y.d?WفO›$bёN^=?;sN%K 2]Yha͇}Î5^M:lNX޽3ܴv_E)vb"ɯwAv4@DOGAuӎSš>ew hf;3ŧ$x;Vccs hҎ.Ƴ,O1YXs4?K;uGAXKXi[6<:r@gŴzM1b]}<6Qbvqy;~ek]j7ak[EXIi}kَg'9.O%0NOy#QP|*-mIN]jpk5n+fǚ,V\imߌk>GAR2{ΧnsZ9d1lQ~]ZZeJ ZKXm֬OZ\;]w)R];x[_^`vb Gli}Uc:;^1wtz{q xh^^HAR֒({i\4oɃݖ/-j5%Z3.,85Euk&qx\̎5nZ;bVЬGilFtn: zy9Nrx~7E{]!Yډ趒I; RvQPۥ�<}5[ 6GL}✾OOW_5_ʅV?5R3I}SZ?GC./Ƨ/bJ0he]^ >~[vl|E船ϳ LGA, k_$cTWAnYIW#>vitelmDDPf }Aš_Lmv= j4o&Ԏ.|4>_ k Ǵho.ε+З͖S"b5 :~6/&]JVo6}h"ThчEVha-SO;}9_aM|}u=/2ʳ!Pb:k(ELߙ>|5y|_LZ|@°]n_M:V {}sGNcY:jseyKڏwCRքKѽo<4]b?|_{]`AKuj,f6IJ(\;J~H-\] Xe#<g`>yf2?x u=<h򔩱3f0Jw}_E ICƿk?iݨ#M̕gٰcnHOfӗ< -e3&=~L?V<~| t*")3iY5^,m[a9~W?,šj_hIyY\lQ#햿;i܃y>_HO|&\[lve5,Lm-6'ȚטX]6r. k\L=E�EqW6/4ۗK_b7zGn+FXK k҆[6m6{WXBiV a@Xڑ1ݵ&e�� F0h)5b3ϾǠraI,_,R%WbAiD?bwgzOC U| a-(nD P&gOOzIBW0O y\BͅyHJݥk=>2 zd(A[aw I"zG?;lL9ӏط$0h۽zz>]ǒ7 \-Z%UK?rw]+>'bB!jbdkP; � � �aЖCX+5>OG?7Fo5}%1ql4o`q3iZjJ%wyёt4ȰRiv]JWxn;ZJ:@ (@�@�@�ZaBXNӾ\~8#W VK@Km>æ|URX/9es;~"aw!yƒ � � �e$ VCP � � PGB!¤eZ4  � �9# BGr@�@�@ 'B!rRؕNJF � � �6! Zk{ � � �ղC 5H݃ l��@@XY 9 � � @B!BAXkF6A�@�@ gBرBGr@�@�@ 'B!rRؕNJF � � �6! Zk{ � � �ղC 5H݃ l��@@XY 9 � � @B!BAXkF6A�@�@ gBرBGr@�@�@ 'B!rRؕN4'hSN^}uetمPݜϗM^q-~_t2kh^hQ#3E~�s01aV$k[H=(7#)g"&\Fg0.ڱ73j4W~s.SOE[ Xͤ}! Z֊ka .MT tlo{/km!9bǩzKe}.GnՕo1xj@;ZMU axv͇@VHݾ->}ҙgj0¯"KȒ ?C,!kP.Yttvbe;:t~a2k>;ކڥ{wlZ}/A[.ao<ąyigG{eXX1qcii'g^0,MT RӬ$b !\o|L.m3cKѾ89 &eaoucA4}ltytsN^WsfμyN;B=n]ҾOK&іH =.պcn}` tےpG ߗݍZ<9;l?Yb_)㩫Oc ;ݡe(|Lu0mi0NVǷmjO<|dA!جGؕ|7tx8k4Ӗ6NMJ+381;I͖IS8�8]u"ifW4yTgΥlZHJX 3a:ejk_i;$z8yyN<$qn~iuf6W]l?gL&̵nj1)uJ~1kp{i:`~Q?%6Hч4+NuCzdB<^;n|`ci}mܰ$CvƬYpfGu^x;RӚ"W8SO<h iW-]4gڋ:/m>@ N\h%cm$V.jjjr._9|Eϩ/Vc=pܦ5E5;$hpa=wE–OT6N꣠qӐ옛B:wn1@mkh>:ݾ6 l{͘jQXt[[ sdWn.;!8J#VZ۵ &亓e@O-v:$fPF$ kg[1N4$a|'L\,M&6aе㵕9Ǒٜ옫Rӄ5}njg?I'IC&n 3zCZGd{[ٹߦ kZ3>i'خzbo}:D/1`#?ʶcm\b~'MXRK>8%7}̲#&D|&L:\3r0ѻ\4ۂ]:wv?r0wؤM:9hlbym c:^ؗm5HxnnGB7�� �IDATW=HǤȮns!w u.^>iu՞4B1m5ߓw- I_bŶi8a\ RS]zlOg6] =1}&o渔t&bn4Vخ N/;oJsxӻ$lwh-ig]8m$uZ'~,w"_(%].١n.y\u !0mr+vpY՘jAXM,L#A[Q YГvȻls);6A˚I汨2rd,eak F!k8j!Ik2j91} Cޕ$aM3\ywʾͿ#f=]޶sMӄ5C$S:IUQӰG|=1dbNttIjڲ�X49DBf:}5W+e2[m%59>NĨ݊LatEušp ݃=SM]f,f9)mO kv9\{^eڀZ`Iuk,c>fmw( )83QAk~vq^vY/p>dx?1|5S@ő.Vjv^f1%r~&IXK&[%blۜ!xEgn8]}fv}">M awkAXr%%(U�VRxIG];֊Iw5}sA23lĺdd >bCնBkNn*�,ƺEׇb5sc:5OkbɄmccZ5&rd>[I{-%V6Cԣ:o6ۖRwkYozsU;n9I.mxR cfٽ?L]tڽ/(f|620h+%xkYKD?]Ie,c ]<ޚZQ=剡B|1Cǎ JA/v8yq&l]z mt7G kn|f`V9 Li|z(Fh)š-ͦScNG1šv-ĹG-+3_3vsv嚴KxS0/K &:O:\YO}Jr~#u!_'>:sɷ }tmht i '}G$lú 8%.236{c\ǡD QP~.Ǹm_5JƖͫ;ӎ} AҸ|;./0/B.>cňU2nkK|llRq'{?x(DšN4 89$f쏢4MXt;hm|`mxnk箾'>ly~3k)6VZUjkLPG |5G2ٕv\NJNcg|5~V&Wm4i'brlr kf^ޥŃ\N%/2 4h5;=p|KWXs&&P3~mb5,SL:ޕkP|3/UG}[(<ٙjN})C)"CtJ| Ԏ5D}$U\;[/mf4d;vPjHˎ0늏d>/ӈտ1KWLqlcve ߛmUc&G/H͆IZH1bG 3px ߳M"f;&(Gxc%fwOUp#%9>F1o[aiOZYXcO>h󴝢8YXKvJN=m} Nm" K ka˴jՒV5H"|rG^Ke1K @p-5KMw10h%? � P\G7!k R 5HA0՘]c7ڡO&z5/_fE#Nj KKS;t[\H_ | ]4>!='yIΣ%+WE?mcupi2+c„ş/3|3\spw4{ ^/Ϯw91dw;n]qRJx#㿲KR5sfdcˆ㐏_'z;uQAĵ&ɋmw^³22s;PyLjs6렫>w m95=.㐫?f.k5q 8w.gi>cYEm1YRY. y̅=iI 渠5ڜi|n{8vţmۢnW�ڱӣwl~^ۿ6;oui~'¤~}!k_OrP š3l>NC[E ?66Z F;6eM@ݱ6x69v7ql,;d7\vmrfH s3_�Ȼlb-/ZhNklhj1V6 FX~Kzj5)B)ɤm�hn`$,DcGa1FA޶25aЖCXs-֥8\n6ò= j5v,U.+rX~S>n,,r1Sڎ2m]R۴rcamA ?Uնi?HXi6Ϧ[̴vڽ{Gl=* P?B!ꧾ5΀LGS҉>Fzdp;wr| !&+w{K9[]} ĆǶz] cM$>׎5 /ZK61%鉎T]D/Gdb}vݢ#W҃_ |oх~ZKg7-qQ'X35>v`;7&!Tmfva/mǚMX;\mm&);n6X8FN\,EXwW;@a@XkU+š s0=nw>,šMDKNtNTkSou)BRuL,6lߧ==5}9s&IXpҿSIkI;֒pXQPhyNq]L ;3>GQh;⻻(OJڱ:֪}VY[rY+ҧ컵o6Ho^{'?;v[)aAfškƧsS]mǚ&gL:hklҨ5s}fݱI..r͒Z lv;q'FE^9MXs3IX0혬76Hl�(!k RjEX3oݔwQHYo'FlaM 2s8]x<ΰh'KXIlF?oW]mm(׽B[}=]+iO}VE ]^`i|z(.aMْ/Zx_ c?/>"`K: Ҵe l>ztygW9g -l #e֒u氏f}j/Z݈[q_aͷmqߙ7~k\}zk mfaЖCXc܏#pKt./HئXaM~_fmLY`Zlӟ٪. ~F;+̼U3}0'/K!dQN3.d͸l{le# iš+"oEN\ҀqF $*L a…kEXc^A&W;&q5>9b4caMr0r[YcCA-z%%$jMXh.aM,@[XHo2~&X쳍?/3ɋW|3rbڻIƷN)̈#I'1N q~qTҸFi,iywAM36uA>WgXNtE=Yξ~c=NHCm yާeeSv&.;!|5׻M][>|&o0eE:\B֤McJ`i;]!q;t;`cSvu0sYvqNy~ةjcjmJLc{ ϟxёk,h1K1m m#5 3|;wyN\1"I:w0NzgA a1Ւ El@L@zeYV |I X�@ZƵ;iDT&�v3zӮ�� �IDATVwy/ͯ qqPV_>ZF̟JB̳>4Ξ4SJMݳJ =j@:L\# -~D wX3-ɯvAw)U~@�@;Z&k Rf 7L?8QՠO] "xA ;m99xh޶+,i+| ԁ�@C 塤Z�Ȉ<h-L>tCAA0hMXbվ@5H!U+�"VWU&93M��m= k9+F$@�@�j@;ZMV쉆���(@Z@�@�@ C cͱ Z4  � �9# BGr@�@�@ 'B!rRؕNJF � � �6! Zk{ � � �ղC 5H݃ l��@@XY 9 � � @B!BAXkF6A�@�@ gBرBGr@�@�@ 'B!rRؕNJF � � �6! Zk{ � � �ղC 5H݃ l��@@XY 9 � � @B!BAXkF6A�@�@ gBرBGr@�@�@ 'B!rRؕNJF � � �6! Zk{ � � �ղC 5H݃ l��@@XY 9 � � @B!BAXkF6A�@�@ gBرBGr@�@�@ 'B!rRؕNJF � � �6! Zk{ � � �ղC 5HݫԷ_~7Qd@�@�@E`ʕ4ed\;쐒e��KkuY}ZgڇF}.]4Qd@�@�@Ef͚E}u}ף%;$|x@�@�@(;Z]V9shɒŴ4Qd@�@�@E>;Q=];쐒e��KkuY} k#5޹��@c9s&-\Մ2Ʈo=��B!U((c\b͜1ZzEԮ]!l���,_<fϞMmڴ>k � �MZvw!5A1ZZвe" ��� bZkŏ&u ��MZv!Al�������48k R 5HA# � � � � � � �@X AX. � � � � � � P _ZsaA ������F�Z0ՍZu#v�������#�aԚ#k R&������@0ւnD֪�������kWAXkF6A�@�@�@�@�@�@� uu#V]@�@�@�@�@�@�@@X2Z4  � � � � � � �`G � � � � � � �G�Z5GM�������` C]݈ U?b������?L9 l�������#�a-Fa;������@Vej)hd@�@�@�@�@�@�@ kPW7"kA�@�@�@�@�@�@��+Sk 5HA# � � � � � � �@X AX. � � � � � � P _ZsaA ������F�Z0ՍZu#v�������#�aԚ#k R&������@0ւnD֪�������kWAXkF6A�@�@�@�@�@�@� uu# )͝3ZZвehժU8b��FM6ԡCjnJ=z 쐪`G � � PuղC U$ b 9cj߾=}+_]md���TN˗/O>.:Ԯ] 3"��a-U !}iL{.o��@9s&-\A;$fD � �5A a&D鉬./^DnaE � � �uA>;UX(쐺.��@(;ZY-UZXU>}P.] )��Jf͚U]kC+"�� VաDVZX{gԯ_?Z}KO,B��� ߦM6ݬRQ@�@�j@(;ZMV쉮6)4`  � � �uM7ޠM7W<(^ � �5K afGCX O���@Zy ��@a@XZk R&��@Z ��a@XIaW:*M���0h!���T uZ4  � �9#�a-g��@a@Xk aA ��abZ ��a@XIaW:*M���0h!���T uZ4  � �9#�a-g��@a@Xk aA ��abZ ��a@XIaW:*M���0h!���T uZ4  � �9#�a-g��@a@Xk aA ��abZ ��a@XIaW:*M���0h!���T uZ4  � �9#�a-g��@a@Xk aA ��abZ ��a@XIaW:*M���0h!���T uZ4  � �9#�a-g��@a@Xk aA ��abZ ��a@XIaW:*M�@X:2s{na#Gl @Zt2khAi߽�@a@X df@7v{ܩmoEl%o.ץ7Ҙ .vߕ~M6N/GϏ>N~sɴ^S P*�AV@!u} "Q@H �v_5aF{$uh>i^;M|Yd = w{:`: 嶤%Lw�{4`e{O@ @X+#LUQ! Zk-º Z)2 �B!֚REo wj5H)"y&b {iuOiۭA U1"P J -5kY,,�6vڮ#ީ7am޼tYѰoYZ+I�Z%"lkB A a Z�a- -<  �M awUXɁ;ns0olI={ M}]'~3{nZx1|YOAOz9虤gЅ\A0*\AĿ#Fb=| zxQ뮳6}h]z*í?K')'K,2kJ(/S?6tļ~tMQs.Ӄ,aYȄiKY' Z_vؖ6\Wpߟo4洓{n1:jd).|t=ѳM~?[]0ٜ4/MyS"#nT~r31_bMs׮tygW-wMDVw{Ox^n΃:>KKJ{{)u55 o'ΟO'{$wߧ+} ]g8%KgJ~6No|} oa~]I92x[vλd/WtϏ᫮ʼn3>Fx\6m۶~uҹUx>}YˮvٙEAٲa]X+flH3m!Yt9҂-rc=W=ǖoɁ?~nҪO6*8С?Vbl ].@.9 }bGpjí7vϝ7Ɯ)5w-E6˯F˖-5z{ M;vLl$`ƹϰ!KD(3; lpYL?пLԽ[7;ЈF@�@@;š_YS&sWi'@�oM{4kiEԥsHacwhv,ZD}~y:c#l�sx攞~WhPNSO)]zŵԾ}{:z}ץ/؈z?DBȉϽx&>jj\\3)tg28(_[ !{ZY6`fED1 ѷ#n^_h=ib#~Fi HhN;ҥK#l? n%}wܹ3-]^|oĢqGsb_ZhbZ|9]{-"iۆ:wYݙp"Zx _;}@߇v>sّs^smqp,1y9fP6mC~4 8?x+{9@03_eBua�'tmnۇ6d( 64[)aFYl^|tƩ'Ǟ|ktIŢ8sDнv=v5[0N=qm޿_o,IXٜ>o QY@ 0h*qXDs΋V{4቉ h"Z*͝D9wɺ˜Dzq7= +Ǟy9;:'͏U؏~}㭴öD?C=My=x*֭+>Ȇ ܇qEk]/:S[׮ujjj1">Z_YN=aTlI޳ڒ^,} 4WL=w9E(/2;}Hi~m?>M~{*}Ʃ1\ � v.'ax7bKr:yEѽ; _|DbэFOJ۝%a{WЮI;.\D\z%mWi?n5Ik|̕ ƫ~us/ZQx,.mpJ(Xs /BtygFm?<'λ"O%-vډYWe 1gDv*m w5q)_6fywe͟k(h1J;>z/ENs>ebW^KO=6pht~ ~I< /;4y\JkT,Brzo!󯔰ƻλrkn*ȶԑ)Sߥi0+~1aϻǜ~u?G&DcNvelD5VgBaUX+el)쵆.4vPG}sZ$L}Մ'F;[,[ŧ~~LXmh!gӟت ]_\N,BwВ%K[+WF7??V;?Y4Va&ڒ&;!Vm\3jqyhm5tF| � P B!j&!"D'E8ØXXc?ڟ>,|:_~sdm"O`o{]t֣zmg$q_r4ٶDy,s%+?i{gGnԾCV'} 0jιHqmZ1ə]LSp E 3�EyLO9^{Qeޝ9}=0v bʽ MX["]<2Bgvulj*)ީŻdL."ՒK &YD1˯.J•8~x͙;V>B˫~|ꙿF;|(c//>ʘ;r`O {t?wOkKJѧDGk.*l-X�@#a@XkVkK/?Hо}TB|Ls'}L'w4m͖V_hՆ3L,X]pW] ؐb%; @Xl–u06aMv ucڀ8XLd1g%oѪ&r})/81(C6[`aƌY9-\Y6 kܳNt~oɥW6d#/FkŖ{9'[x7%g|3:&KjyJDjcλ8]v`s.]Ia[~ӊ ؓOC~L\~MAmwmޟfmC/weaw&w ,$"!bZj/BHjԚEkiP(Z{EcmQ"֦ڪA"9Νsn{νzys̼Ygf2IîCs%EQoHJlʵ7,z kDlMʄZFy cOyk&>{sYdUw~w+ ͗Cv9â=4S |/P(}oWɋ٪AO &_djn?fvu}I}fq/Bdzg҃� P4Y!kEUhšX7n̈anp/,I8ӼY_qd-sc?l OX{9?9y?5 1QTɷDҜ{/أƘ.kι2E~i(ny]UE*]qV]%heK.:t٧jZ^IDȒ˦y˯jfԹSy/}j9iD)\v"9EԻBīN}(F k^~tO͘C*MmZ6 C; ZlɧRU=vVhIϸ,S./'|LW DT\ph-Fq'L:6Zӌ>MŬaO�� �IDAT֤<)[o3*Q]3f }3%1:.R_#YD/7'{YeKzًɐℵP>S=r̡mZb%cp~hvh<@nd ܍HфJZ\ItiW!DVXq,MS ݥp>GRӻ|K+4G"D+Tl,LhgR4Yt-8&F?6V*]ē\xGn6oIi/jZR˯m'̰5{wBEr [n38mӍ4 GUeyoo'Gx)MbQq,}}EZ_>Hc!=C5h4,< kbK4r`,#b_.*͘^t�e%'3j4"`{l3!}UV!Aio$ 9uz"n> N_a.q"|c~d3g$oP\@I d 5iqq:v`gTK\Ϟ=JK>08aMjesqP_D۷=#"3N-9 Fi�D@{2Dޝ1tG*'DQXSg37<,cs-7zY[ZvOD]vՄHS4}($Zꎻ1?jaXqFX:rDi!BZk.CBwRXL^'- /#8zKi;-OEX =)qiۍ@m^ZF5ղ/Ϳȋ]w=D"f]iF}i̒}Dk|}|ko''ˁKy))'>^\>NXƗL{.roR۫DˉIQp � I_aM5UYޝtK8tr++K3NXs$#ƽyW,ҽ$2K2}ӽ{4}=u/+_q%rG#sܽBEs▂~27cX :nGI\N}ݓCriexFx-Kk+Y#ύ[ uNNg** ,< k>c͋~yeǍ-;UZaM_6Oѱاki}U\Ě_C_$|zZ.n2M҄j|ɴg.B�hY!kMPQBB@T˦ɤ=C erZ}\I#'_\~կ͏O:>z[G-Z8*ߔ&?/\C!$>)d2ZuU.)+9 Xq $g$ƥ`Gs/4[ni!uǮ(a;9Y69IF)9o5`ݺx-yv?Z&GM4嚤Mr^6Yb=oo<>isʉǚVb6@&ph(:6oNwNO,OZi"Ϭ5b_Cb_/?av4t97[+BE,ߘ_/̸ө3i<@AXk a "2?s͑v-oIu |UoW<ᗼS67f}`:u\N+ `^{ Z5"O[~k6xCi1{﹛qmc_w-f{E/2ѵ*<2r=P?ggDFG 70MXj4MXH(aM#3TթHVuo?uDٮ2%JSNNӿb8λQ}ڙLϗC [JYԽ }o5'6⵴3ǟ-Oz&F21/Cܷ)2Yu>3Pĵ^ CGaֱ16qݻ/Wišwӭf❿&e 5q7w#G `ݣV G]{dޮ8O>cnNb";_M{-sYٓ- ~c/ŕt9V_BPH䲫̂>2;wJXI!?H[ǟqGH;U;uT^^$w]??>%Zo4fIS&RO\چ¡ͣ&@kŽJz_8cL^/$ObWo/50 �AX+p$k%i>6nf0]t&'wMeRN%q�_pӳ$Bk^S$K6ӕˬ:p(Ϛetѩ컗cםۤ-?y)u?3ǜv湢"F/9{URoZDdrGĄaC1; j}ޚvtzK/-cyݏg?=wt KF",~)~ӟumnugY*"]9ͦlTnҞn=[cD~+_&W=uy rZ=ec]DynjhM%nhZgT:xΙ!WX!cfG|LӃQF|6xѥWF_T7n֑.V{I>eٱ, ٩?~ZFG~W�tds 5?fۙݻGZxf^ZaMZc.+Y8yj}3baQ)G+E{xw9 Ɇ_Ƃ{ :Y/9?3[lI]OEKT8*5Z]ƶ-7z,}-]w}"rIqc~5d3̝g.2oCl ";oϚ;?)v̪M@�E"VQC^ባ+dbϗ^1 u-z7b_]I$Fp-EzEIdvlevY^s&7tcs1Gɛ_`NpH-S /j\Į m9}ڟ牠1僲Qަx1emve:"܉h#Qs;lλLXSXՃ)xy_$ǮѸgG/%Uk>gj\MsO< Zzxn י>+𮶗-Z،bb~f쑣M|qֵK@ɧ:niuz۞ϬUku~<36?8nx 򖽆' z 1@Jl2?k9㢧Oцv"KWVe9iMݮ]vIxNZ[mz4Ei (zAX˕"k2N>/KAXO=A#Z š:[^&R*/,z kw3\u͵1ƊAs5':H@ mv7o~+TKZmY6VnzQSk~k֒|Wiӧ0S;jIz}YRzR/:/Z5;GY!kusQa͆ _>_rXz:U/7@X7N\α9Z FÁo˪U9|!- =Ys{GfGo k!B^+}thihn!WZPf:Y2UZIr1 B?uޅf战>ZsSM#5f?7.ԕ4,~EgXҥK6&lFuzkmZ=Qh$<uZ־jm=#DX7wɪKC#"CHjTm7Bk*-[(3ۘkšDu٣|ICwӭE^uXCXkt l+qF5*=Y!DvTf͒λ wɆNfwvz'%^p7]{& lgU+@n7u-UO2;0{sQ QInH]#y<)LӫgOkeR7o@Ku_>-Ϩ=w3򊲨~\!šF6hitT,A"6=j\^quVɵ_sT&aݸ2K7_۴,$Յz}wꇻH\z.sRR}C~X3wyDYVCۀ.mi!~W^>\m}֭gn:r&BqŷO>-Wӻ͖iv KtۄM^< šD̯;dm3k6J} fĎ;Ǟx26bM:k]̙[Y:֦wL"m㎃?Hs;JAhbcq=Nʸ*c*{㜖mnY9ͳmK1}J&{a׸}'O=4I>[ߔmbAn9OR9|\v(XaM0qr~}͋/bqUnmU2OHkG7.~IcLRt$OOi7 %Ivֶ)o])*_=rWhdY!k`n&aM)XIq"tЎs"AVaMJ(qyMjh {9Sh$oB/yg0.>A4˭#joWDr#fJ[Ҟ+e>!i/DW>6Wߒk?L22r%h"v%_oPš29i<|LI8ί]tzm;vRz~8l2mf:DLkЫqz}eDqinv <Ρ߅3IJ\ߝGI7?!ow0ykO3;nm&taph-oG w/:VYi@6jn&-*[BDZ"*šWaInB'iš;o\ZW첆s*/}T%c'Z5i=f3MR?!ݣzcIpI~<špzޗ;"A3W7U k>_ōOzv{v$ |^Oox>lhtЛo΃?$"?򍉮obU;js}+_?iTڷryN嬧ЈCalš}ۙT#OxŗjXf/=щRҾqo(]'^M t !y$9A:AO s9=/N8|j4i'P:խ#qNkÐ$ 6{KQRvyG>nqXmZa-|(GRW|C?#~$I|[=a:'q;imX+vP}Y!kYYLšpIܠ "n whu}G: I!iQA7tQ}V&akЪnaq߄5{^l iS3^y.1$$9qSzl(rA�� �IDAT& ɣ;-H+\M.mJPX !u͗^k{NKun%-T&>-ͻi]lkq}+ U+3Dmgq}Dy !Od6BXvۧۇi=WMeYIZH1Mi]D�*' kqo,q..jEsqš-T Ic,L|c^2toXn7^箨HJ FEIlW+hl&d{ iIšk/γҶ82!BO|r#7qW#mm8MxşqQ_}e嬷PCmjš9$)%/Ka-AwY{VUs4}ͯ/j' rnu˱{CX({|rPߍNZ6&~w锻 Gх`;nMS'T;eQ{k썸[jئb#gB&!}D{ k2Axlʓm":qKz2]CaM�U ˯65 IX`!š; X k*o҄;ošs$2n+kٓGl6nMj21%ܯשHg} R.!uۓ/:9zVH{?:;`'k>;߆,ɋyQlC^ڹZogחFk*`ǕZǤaM}a-CAXKCS\JZ|רqAZvº|BDQ l"m2Gݐ%_nTd#Bi:8Ism'Gt9iZTiX}\ХZ<[ٻB&5߅[:!I'нx✻z.u+.Aq^g__~_]Rf*X*9P۟8Ѿa2Ґe!KA3l{]Za-BUׇ8:DY8֤~d{-65SGiBd\wɑ.ݫ2i<>Ȯ!u"MٶJJHַEsC{4!>N"j- GIc<ݯmSg/ίv#v[>~k##YotIDeqŪ4a-ԗӸV&+("CNGB_*A!_ܘ>q\OT3ǵjm!m?IV2Ko= ?a-+ksZIXS4[:0{U g+}nFlG Ž i<;oX7Z[`ɗnȻ@ yL r6uֹfI΄Nj9*Fɿ.o{Rc#Q{g7$S8/pN=;NJ܍Cz42FZm\r`o^DvzI̶y!uA҈q__~ZlNR#ysoa[sۃMM^{Nš~7u>—N}IDIqe%v"ےC(aM8p{6cS:&NXA)"I9󽲓kmS")zMD[�8|}K'ϖHJ9_>C/e)ٻ|>?.i>Z\T ڪ +-Xs۶˄٭/!,!C,e[q7yo&p|MaUX4|8C"k,m{c6o5̏Kܺ_@哴T%C|/FW-s7/4*,FY/g鶒fEuH~yEzQDLep%oyCXJѣ7 sTݽ 2L%dָM}7;!šܧK 4☺lخ;.8$q{ ]ϓO<4to= ޏ*tuw{eiʳlV4߾z|{vu}Ye3XUoCۀ[G}o/Mh)f79 kZ?~&N2&nƯZG3QQcVH;C(aMm.O+K:Zlq~@Z4|mJs)ןLS["4/i7>d!{Fy-Z5cwC|68}CDMݨ|.auL04.O5'rҸ Sw k־lod"ge)ud7kU''ٴd[Xqk;1^΄k2^{%mLqyc"ͥ\m+Yq9TvAW˼,ӗ)Jj+^P]~/h+]֊af;Ar" a8š[%BB5ݓ0Pd$Kޯn*SbWRXcnF M? šOW]sqE's~qsx&/ aQ5t֪gW;ph%gMXq"~W@IKDˮ`N;4WSz߃VoIQcHj d j9Mš3MM9|<~םG-mH{-ߋ/bynjZNrh/R.7Eo폼Aӧw}#~C{u銽dEp#cg+.?iz-{[&+O'nf5~iB\ԁkw]2oxv ۍv^|[nzmХAZQ{f.e{}qJ27M~$QpMܒҭf2gk{﹛p WϞ|-_YoݨO$-a^>G+Qq{ㅶ4[-g_m{ ʡi5R캕4}>ώ,q.[R4V(e+ ZB̡ŎkΜ/&qlhѢEѶ Ccg/Frw-uM4RDže{;{x轾"I[[cAeetǻ͗lAU_!iܭfjNX-Wڶ3s}}B׎+=:Ec6inYdi2{\w]}OL.M;6v*}'y8G.]#{ݠg\ׁClqvW^v~?K>1cڱ}v=[3"t|ճP#ɳBۤ(ٔK ?a-kΊ &n-Bi򩝦 #M5˯,d$^ow0&._>\.:8sWtF~s~$:[BVYXMpԩI{Mš+ά >ߵ;}>b<]CW_$NWo:$nI(b^i.Q{CfQG| }x| Y5ִYkͲLi n]6-7ŵ7w92%g־}|šawo,{,Ѳ۴1GDk q0+NX4&M&fiHq<ڨOH˷}oȧ"7=2ݻlym; >!ݏ%i{qcFZ߳ph%KB5C42ɵ-R}}1 i.KZ>am'iӇΩT8A"饗헋i̒縗nD _}Z>ԎvO`B8;m!-rIԚmZ>J~cg4yz|c5MD1d[(BMUx4P'߻ϓgKH]M kep}z̷Zi~G\?䶡8?}1f(),bՉs[aM gwdnN܉ U&2 ,tI}}IKn=gmR:^!'/}|t'bV"i69\s ^#4>u<*l-Fd_}Tj:F4;űt5Z5c' qQqH" J>|"LIC\&.?Mmgv[mZ=[sxmf#Ehkq;>ץE_ҘcO~ϗ^cW:gܩ(TߒжV=~¡w(vRz*h%ZZv {RO||$I_w7u'>$}4z-+dc q6C"["k^yƗ>.}e/u6ȍ4lˎ^QLav5Ȭޫ9+==|{Ґh4\6] KPZbKRԅjħz|~H"TߺBFι6О:e QQ51S}ȇAšOJ2`N|$~2IsAw"M.[j;o;#DN^%BPU5kIN7|{}oH7˥!”;ш kPqZ&!vQ>^;F׳İ4~^KZr'in\ʿLk#$BĖmsů~c{dIo6/4IMp=4W(mek*B|'[ vmPZa-moH_C|PaMX^"%v1><z<5\MOͯ|d~6B5=\fqZ}<_L#˕>:jaMd__'5dN@Xk K.bEXSG@&b*h,G''ZB˭<ēK:ny:kY]{kn~2)L_歷65,\;YIZj= sڛj5x|%Qu7}iKA}K}▻,U#�_V%Z}KAݨдoyfl咗"oIhR6ֺ]rUKEٸe s? ʈw0/2.X߹.GHԜo|AX;oִϰe!U[ӖXico+/tP\ik!jy}ϸ7_HI{B4}o)-I^|{}v3W#svK hD՗3idT8UC5 \>a->74Ic\cGtW_|U3R_+~!CZ?BO-If)Oܸq '�Zc샰�rhiyG\YwxώtDZ#NLxɒ6{Cum}(~g!TX]WRP #˫[& eshC&Z.nZ-KAYn͜ꨈ묳V ;)>^!%M pm,yz:cHOz;ޫ+ˈaG>_t3_dDYH^ q4]P4VD%KAmώs0i]UMZ"?L222U/aMȪbf͚]&̅Zgpvvܸ,1'r[&ipen_sY8C̙9M8MX ] ZIݷO0A!}MXMg؇ڸ; #ii{ 4a=7#hI !y+b`&a!kr elԭcY4Faw!š&KG5jM? O6 k!uY#ɇem]E_{ѹU&cgH;Ӽ$I}4-y$a)hCMċ mww =ɑDe qo&+:h!k݁Fs4C5A ܧOﲽB#߉Q)qΪFC]qQArϡ'z6LVaMӰmgW&օ9$Q{f&~Wqu:M&Қ:n>cޛͧDC+AnۗzۙoYːnͪyvқ[saHĚ1.-7ڞuƍrIm|ҞI[(<㖑|+D[5ѝ!ZxiQ8�� �IDATHռ}wšwo~jdOtOZ"doQku3_baM1?-k>IT|E>aME.bqEor_OKRZqcB-_|wˣcw&E~ a-FrC֊W/q}@MB$B�%P4ph-v9O[tuW*uDD}i^晟/J,-JB|B @~Z" kK4Z v!ДYՔAphFt>j5SN49=tnYmr_jg=V!~o&Y!kTcRa Y*U~a=$dO冔!�f%ެ\Y8k'__nJK>}Du!P�!5̷Z^CZ^AX HEՐb{ C6kH&HhZ7-� K aHhoV!tZphD9o5*i@~ZkAWaNE%@��rD a-G'+� �AXˑF%m@��d"Q �@�AXk"� �¡EX˙ �@ 'CrbFgaфI� �zSF݃� �@{k-bh @�,#d� Y!k91vh¤@�@{)FXA�� ^~Z=14ń� �@orft@� ,@Xk4a҇� �@#Q �@�h/?aE^3 kO{Ӝ{%5"E#hb3Fn`vyDѲO~!�L 7k5 �@�MI ?a)NB!)f $dȘ@-ZFq� �AX+He5k~TG�a:n4,Z/� POY!kXBX˱qZS@XkjR8@ @-Z!� ЂCZbAX 59: +WnΜ.451WOL#ZsҩJ} )'gv]8pes5F \y%sg޽{j]L.._u)f 70q{=7(_N `zq˻=9N-C'e G茳ͼymquΏU|\rig/=C]Z_ynjRG[wHI׆ց8SC2xF߱[ˤ@ d"`$@�h"Y!kMTaRaLTE&sDB_Z|iϚU`o;T zhyqc˄ݜލRJ_9):kY&x6|IUU$Q!0DPrQr&w L 64"]~n%mEE§-6㳩ooLP4Jedɛ+W$}&@͝JvJbZH=?ʨϙ;~pxw̲CA${;j-)& PoY82dܹsOz� �%KK/dZ{�axx5;MNTeGEjDHT-niO`nOı1K ttOtC+98${ŗZ }qw}R~JD-I{.aaEo}v>B5HmQmvoq>a-Kn=Uq^JGH"e  P$YkΞm.جEBC^!�@�h 7x,\7ӧo>OEք G}_?H"!hQ{k!J'F5t"8q'�*3mGGӲXoaMҳSMbLuʢ͒D8ej3j]" k'KV[O}ZZ>ll H aMHԚDI@��Z3̂ &ZEXSQdĎ;_W$K4[oy;1[N*\$[bVrЃB"o|%Q#Bڇ*h"ȞqqBS R=$B#ryCߵMRxK4ÌчGv. ~\O?xtRӯ_?ӳgO2˴hJ @�hq|I$͚5t XiL|xE(Ύ | \^}>bnt_{}qmlQJ" m.nh^~~lQ>p!d|\W[uYamD+>v 9 IXi ڄ+�ڇ#HI1!� d%i6eYŋ# �@�A@Ĵ.]=oO(Zk/SaM!yw.߹BIf 7ǙwW`!_SXNW^tJޯ'C"DرO洛FZvdoum^|镲N}>M?i5;_>ft5ז.+C%vNC{׮]=˒5KcXM=A�� � eEha7=zsIy< �@�y!0|3sLj%@��J�a8Xg6 ~lV_}B g� �dJ70-70@�� Hs-I$jM"$r �@�M`ƌfDv5� �'&Yk~;fҥ_~gϞfei� �O>$f͚e:t`2�� �&oi,tyfő� � bZ.]LϞ˳5LN)!�@�-O�aE@Z � �@�� �8�k-bh @�� �@�@f2CݾBXk_<� �@�� �#|6aE M1!�@�� �@�Ȍ�ZfAk˟C�� �@�� |֚Ϧ!)& �@�� �@�@X u>a}t@�� �@���Z["14ń� �@�� �@ 3kn!/@�� �@�@@Xk>zK"� �@�� �dF�a-3 !�@�� �@�h>kgSoZ� �@�� � e}־y: �@�� �@�G�al-ZbB�� �@�� Pڗ?O� �@�� �@ 5M%BXkCSL@�� �@��2#}'.1K.mLt@�� �@�� $:t`]s&N+!�@�� �@��b t,ӹSjIaKͧ.i9cS`@�� �@�� ,tСI:͖"D^9@�� �@�� BU<-+}!-1^kid� �@�� �رYsfhia qr& �@�� �@� ʑjkV=><ˡ�M,B�� �@�� rשSǖS͵AGR@�� �@�� �@X+1 �@�� �@�@ d� �@�� �@x֊g3r @�� �@�� k90Y� �@�� �@�(ٌC�� �@�� ��Z@ �@�� �@��G�ax6#� �@�� �@�9 #@�� �@�� �@X+1 �@�� �@�@ d� �@�� �@x֊g3r @�� �@�� k90Y� �@�� �@�(ٌC�� �@�� ��Z@ �@�� �@��G�ax6#� �@�� �@�9 #@�� �@�� �@X+1 �@�� �@�@ d� �@�� �@x֊g3r @�� �@�� k90Y� �@�� �@�(ٌC�� �@�� ��Z@ �@�� �@��G�ax6#� �@�� �@�9 #@�� �@�� �@X+1 �@�� �@�@ d� �@�� �@x֊g3r @�� �@�� k90Y� �@�� �@�(ٌC�� �@�� ��Z@ �@�� �@��G�ax6#� �@�� �@�9 #@�� �@�� �@X+1 �@�� �@�@ d� �@�� �@x֊g3r @�� �@�� k90Y� �@�� �@�(ٌC�� �@�� ��Z@ �@�� �@��G�ax6#� �@�� �@�9 #@�� �@�� �@X+1 �@�� �@�@ d� �@�� �@x֊g3r @�� �@�� k90Y� �@�� �@�(ٌC�� �@�� ��Z@ �@�� �@��G�ax6#� �@�� �@�9 #@�� �@�� �@X+1 �@�� �@�@ d� �@�� �@x֊g3r @�� �@�� k90Y� �@�� �@�(ٌC�� �@�� �@[ouiA �@�� �@�� P(D\d� �@�� �@ /b @�� �@�� P(k2� �@�� �@� X|@�� �@�� ��ZEf!�@�� �@��B�a-/ � �@�� �@�"V(sY@�� �@�� �@Xˋ% �@�� �@�@ \d� �@�� �@ /b @�� �@�� P(k2� �@�� �@� X|@�� �@�� ��ZEf!�@�� �@��B�a-/ � �@�� �@�"V(sY@�� �@�� �@Xˋ% �@�� �@�@ \d� �@�� �@ /b @�� �@�� P(k2� �@�� �@� X|@�� �@�� ��ZEf!�@�� �@��B�a-/ � �@�� �@�"V(sY@�ȂsSd8�Sf,6}SsW{4 ulOw3٬Ҁy;aCM޽ͼ󆙘!�@�ւQq! � U\[vYҮ՜9sY]h9b}g{?0, :w0?ߦb@ _,7e\s9Sp{u2?x(yycgTt_iܗf/;jA!Y! W=ZXt&wYj`#uO5?ݲWlRaJ'O5QF4iJҒvKXsW'ZE֤~MCF|JݺGf9֬ Z,{c}Qk?ͮZXT}6Z#6 �dI�a-K< @:qt+.|OsθSKA>ۜvR21YҧO.rHwQd͏!}l6[EyQJ*]ڪBOK?no}{N\i 7O4"i4>aME+Vx ܥ[R4Rg9h9DIu󗔖-)r4u k_ɜ(R3;?,{f'ѵ ${)݁Cf9,?нc={jX)O=[fCCj/9vۗi[tRFdiۆG߱Sqml6d#s.QN[{+74W7mlɗ ڋ\+Hƴ>Ž>pkuK.!j?D k>.{~~i/bMۖܥ޾(wm^pI]ݶ'%go?|J]SFKM5o8h!"A�@;@Xk<@3ܒʤ .1'xlIHs45pY_d]'և>Ĭ X˴ޝ93 7(rˮ`N;R'ohfR:r|t߲rQ.~eR{;jF"t|";[P|r#dB,{1w1?-MebM;􍖫p?2l+B.t.:ک'yo-*-?o_b.ܦOi\#6$*`wl(_n>9�[{I ?KYk /#m@t-ۮn;pۚ{t4_[D8Kڅ|YZ^4cy7͟}©Еw\MWCm&EE%vMi%ƾִ=boyFfI2T~`ѦG" olгT`ضשš\#]RqۜݿhtT8mYgRcr �@ ��j" XJJH&[lIemdS=>l1Wв�_~ +0H܈aM5I[V(\-.-MX81L+7]4}TS;|bni% k5; мG"hGWt:?|v}w5Y_Ո5_۫' DY,\i>NXEH%qON/mqlĸ$aM#~y(2m [|sfn'N2IT|4RTIj30.wAI5 @�1֨� P4IOi8'1[x-7>lh}xI]ϰ'>AaM#nD1TXоZa͝ vEE*Y><Ӟp&+XڣmWXMmQL?;-.(;TK[jەoFd]֨RԷTE0_;呺4mjlQs.,<~Q憛/mtmsLca't5WtOH4s:h#zKC"Nl؃HT:eӞfc+Ij+q+'ڌ{.ke)7Yti4�r3 �@F5� �VOaNK2nG{-X{kl˿e3w_R8cKk|Q0i{͞3':TsӴ婽JXK|/L}d/5IX&zel@`l7]K%ͤ5WNXe_Y}J4$I}F=5cˁjUV=x"ˉ]>=&ȼ8Ӳ%$aMa.5 k<_[+o\^\#KEK=݈5rn� � �[!�@%]z9~쑉'ֲtb-ۓ4aᣓxdzDI6>SAӄ[Κ]ma-t)hhtZ+" F k{oRАWlM71k=7mp묊rן+Id.3vז%!KAC2-VRФ6kroIa-; �4�ZȒ. �"lัe2yp\U>{nݖ32[&EE+'ǦNiiiE{8K?$=_kǒXPaMޱLOy剮P²"z]f׽# v=Faۓ?:,\4JJj+qL].HTvVu(SiZ?O= �@ �u�rC Ne0-⧒BU"(U.BGz;qO$e@���Z3Z2A�((PbFEl>e }F'sَ^4k dZًScm}Z@2@�@25j �@yyR=t@##@x{G^kD� �c֨� iš6rf쑣ʷoϲΪz7A�"J*d� �@X+0 �@�� �@�@ � �@�� �@p g22 @�� �@�� kyy� �@�� �@�(™ C�� �@�� ��Z@ �@�� �@�� G�ap&#� �@�� �@�y +@�� �@�� �@X+0 �@�� �@�@ � �@�� �@p g22 @�� �@�� kyy� �@�� �@�(™ C�� �@�� ��Z@ �@�� �@�� G�ap&#� �@�� �@�y +@�� �@�� �@X+0 �@�� �@�@ � �@�� �@p g22 @�� �@�� kyy� �@�� �@�(™ C�� �@�� ��Z@ �@�� �@�� G�ap&#� �@�� �@�y +@�� �@�� �@X+0 �@�F`Ѣ?L22tڥ.kDd얉wÆ޽{Ur[={\r �@��Z� Sw3\u͵e[~qViקi.j9&KO{hS4}3g9 1GKk?7ϬkDl ~h.ܦأI֦XlpҲb8篲#@�� G�ap&#� �0=Yc2CNgF~s'#*UR{;jR<7ڍ7 Z/lr8W+='W^vbmE+ k}SsW{uY>K|N6~@��Z�ZkؙRB�@  k+'-6$S=LE֮O̮FIiO̍Y[ZX%˷UgB�� $֚Đ� HdyÏ>n;m"MG9MTTԿw0vD<ק.,-OcQ?a7w55yO>7<6|'ǥ,m9KMpS_{9}^(}}O@�@s@XknR:@�haIš47<ь9MmA&+—/-2]v ~tf}ғ{/0nU34η-ƛo?r]tGFbOrI.wIAq/h5&$_\~=|etgU+ik('ϖϽsǖlxRO_*e ak+.c{wqD_10㟞_{E|yӫX,=ٓW ZmE-""$(hc$",Rʂ{aFYWIʌϝ;ǝ?Q93s>s/9őO5:ky/bzhy[\۝.MUݴbc\+ & @MW 0kyXiÏ?S)Vyү*ܒgk[]/#YfmYEvŒ~ܺ ښMaU~~׌mݾ#9STۼo)xAiZ/WZZ!O:}`my6g1~/ZxpGgqc*>7% /.۸xҙR^S%]=l5K�&`m2}}'@�bm)ulܴ9k14t+,3]3|!'XD]>+X2uM``/qtCN{]yyw"Ta`myd)6g7e\S3m RhmB~NM]>b(6dсe9 0V@fD @�!O}m {_S?^b-MAkJT z άB4"Tw=ZbQ埩6Z|/?[AX@[þA\ݪ:US^c`s;44b=.^:[o״yASA8'tbG;6aH׊suO*V~ZS)XsgO;jtnZDu^SA)vi-^m|O�#yj S)Xd/Y\-Hm^tN0,6\?X-?Q&Xkڼ SJ 0*hiiSVէlټMzF kwuƚxŁ*DKF]pTzV&jϐOG'kPvp)X4e ij|yCc6+ȫzGu pD ֎  @@g]=b ZbQa溷y*ЉS_=G,w߬wU厢sN]^M6c*D'XKaT+=sFpwk־]`$ݳxIYu7#W\6nӺmBŸDCԗsZP,ybi[kq%Ai`ޯyPI㻦zIo~r|:sqN=XhgqYt ]T8zׁN8fJi-{so8c"\۰m_yN~oǬ#g>?, @`k>� @� @0  @�4 g1yO~ pP@f4 @� @�h! Xk  @� @�1@� @� @`& @� @�k� @� @�h @� @� @� @�ZZiB� @� @@f  @� @�h! Xk  @� @�1@� @� @`& @� @�k� @� @�h @� @� @� @�ZZiB� @� @@f  @� @�h! Xk  @� @�1@� @� @`& @� @� @� @� @`�>I(Hs����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mkdocs-1.6.1/docs/index.md��������������������������������������������������������������������������0000664�0001750�0001750�00000006321�14664334534�015260� 0����������������������������������������������������������������������������������������������������ustar �carsten�������������������������carsten����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# MkDocs Project documentation with Markdown. --- MkDocs is a **fast**, **simple** and **downright gorgeous** static site generator that's geared towards building project documentation. Documentation source files are written in Markdown, and configured with a single YAML configuration file. Start by reading the [introductory tutorial], then check the [User Guide] for more information. [introductory tutorial]: getting-started.md [User Guide]: user-guide/README.md

Features

Great themes available

There's a stack of good looking themes available for MkDocs. Choose between the built in themes: mkdocs and readthedocs, select one of the third-party themes (on the MkDocs Themes wiki page as well as the MkDocs Catalog), or build your own.

Easy to customize

Get your project documentation looking just the way you want it by customizing your theme and/or installing some plugins. Modify Markdown's behavior with Markdown extensions. Many configuration options are available.

Preview your site as you work

The built-in dev-server allows you to preview your documentation as you're writing it. It will even auto-reload and refresh your browser whenever you save your changes.

Host anywhere

MkDocs builds completely static HTML sites that you can host on GitHub Pages, Amazon S3, or anywhere else you choose.

mkdocs-1.6.1/docs/dev-guide/0000775000175000017500000000000014664334534015476 5ustar carstencarstenmkdocs-1.6.1/docs/dev-guide/themes.md0000664000175000017500000011160114664334534017305 0ustar carstencarsten# Developing Themes A guide to creating and distributing custom themes. --- NOTE: If you are looking for existing third party themes, they are listed in the [community wiki] page and the [MkDocs project catalog][catalog]. If you want to share a theme you create, you should list it there. When creating a new theme, you can either follow the steps in this guide to create one from scratch or you can download the `mkdocs-basic-theme` as a basic, yet complete, theme with all the boilerplate required. **You can find this base theme on [GitHub][basic theme]**. It contains detailed comments in the code to describe the different features and their usage. [community wiki]: https://github.com/mkdocs/mkdocs/wiki/MkDocs-Themes [catalog]: https://github.com/mkdocs/catalog#-theming [basic theme]: https://github.com/mkdocs/mkdocs-basic-theme ## Creating a custom theme The bare minimum required for a custom theme is a `main.html` [Jinja2 template] file which is placed in a directory that is *not* a child of the [docs_dir]. Within `mkdocs.yml`, set the [`theme.custom_dir`][custom_dir] option to the path of the directory containing `main.html`. The path should be relative to the configuration file. For example, given this example project layout: ```text mkdocs.yml docs/ index.md about.md custom_theme/ main.html ... ``` ... you would include the following settings in `mkdocs.yml` to use the custom theme directory: ```yaml theme: name: null custom_dir: 'custom_theme/' ``` > NOTE: > Generally, when building your own custom theme, the theme.[name] > configuration setting would be set to `null`. However, if the > theme.[custom_dir] configuration value is used in combination with an > existing theme, the theme.[custom_dir] can be used to replace only specific > parts of a built-in theme. For example, with the above layout and if you set > `name: "mkdocs"` then the `main.html` file in the theme.[custom_dir] would > replace the file of the same name in the `mkdocs` theme but otherwise the > `mkdocs` theme would remain unchanged. This is useful if you want to make > small adjustments to an existing theme. > > For more specific information, see [Customizing Your Theme]. > WARNING: > A theme's [configuration] defined in a `mkdocs_theme.yml` file is not loaded > from `theme.custom_dir`. When an entire theme exists in `theme.custom_dir` > and `theme.name` is set to `null`, then the entire theme configuration must > be defined in the [theme] configuration option in the `mkdocs.yml` file. > > However, when a theme is [packaged] up for distribution, and loaded using > the `theme.name` configuration option, then a `mkdocs_theme.yml` file > is required for the theme. [Customizing Your Theme]: ../user-guide/customizing-your-theme.md#using-the-theme-custom_dir [custom_dir]: ../user-guide/configuration.md#custom_dir [name]: ../user-guide/configuration.md#name [docs_dir]: ../user-guide/configuration.md#docs_dir [configuration]: #theme-configuration [packaged]: #packaging-themes [theme]: ../user-guide/configuration.md#theme ## Basic theme The simplest `main.html` file is the following: ```django {% if page.title %}{{ page.title }} - {% endif %}{{ config.site_name }} {%- for path in config.extra_css %} {%- endfor %} {{ page.content }} {%- for script in config.extra_javascript %} {{ script | script_tag }} {%- endfor %} ``` The body content from each page specified in `mkdocs.yml` is inserted using the `{{ page.content }}` tag. Style-sheets and scripts can be brought into this theme as with a normal HTML file. Navbars and tables of contents can also be generated and included automatically, through the `nav` and `toc` objects, respectively. If you wish to write your own theme, it is recommended to start with one of the [built-in themes] and modify it accordingly. NOTE: As MkDocs uses [Jinja] as its template engine, you have access to all the power of Jinja, including [template inheritance]. You may notice that the themes included with MkDocs make extensive use of template inheritance and blocks, allowing users to easily override small bits and pieces of the templates from the theme [custom_dir]. Therefore, the built-in themes are implemented in a `base.html` file, which `main.html` extends. Although not required, third party template authors are encouraged to follow a similar pattern and may want to define the same [blocks] as are used in the built-in themes for consistency. [Jinja]: https://jinja.palletsprojects.com/ [template inheritance]: https://jinja.palletsprojects.com/en/latest/templates/#template-inheritance [blocks]: ../user-guide/customizing-your-theme.md#overriding-template-blocks ### Picking up CSS and JavaScript from the config MkDocs defines the top-level [extra_css](../user-guide/configuration.md#extra_css) and [extra_javascript](../user-guide/configuration.md#extra_javascript) configs. These are lists of files. The theme must include the HTML that links the items from these configs, otherwise the configs will be non-functional. You can see the recommended way to render both of them in the [base example above](#basic-theme). > NEW: **Changed in version 1.5:** > > The items of the `config.extra_javascript` list used to be simple strings but now became objects that have these fields: `path`, `type`, `async`, `defer`. > > In that version, MkDocs also gained the [`script_tag` filter](#script_tag). > > >? EXAMPLE: **Obsolete style:** > > > > ```django > > {%- for path in extra_javascript %} > > > > {%- endfor %} > > ``` > > > > This old-style example even uses the obsolete top-level `extra_javascript` list. Please always use `config.extra_javascript` instead. > > > > So, a slightly more modern approach is the following, but it is still obsolete because it ignores the extra attributes of the script: > > > > ```django > > {%- for path in config.extra_javascript %} > > > > {%- endfor %} > > ``` > > >? EXAMPLE: **New style:** > > > > ```django > > {%- for script in config.extra_javascript %} > > {{ script | script_tag }} > > {%- endfor %} > > ``` > > If you wish to be able to pick up the new customizations while keeping your theme compatible with older versions of MkDocs, use this snippet: > > >! EXAMPLE: **Backwards-compatible style:** > > > > ```django > > {%- for script in config.extra_javascript %} > > {%- if script.path %} {# Detected MkDocs 1.5+ which has `script.path` and `script_tag` #} > > {{ script | script_tag }} > > {%- else %} {# Fallback - examine the file name directly #} > > > > {%- endif %} > > {%- endfor %} > > ``` ## Theme Files There are various files which a theme treats special in some way. Any other files are simply copied from the theme directory to the same path in the `site_dir` when the site it built. For example image and CSS files have no special significance and are copied as-is. Note, however, that if the user provides a file with the same path in their `docs_dir`, then the user's file will replace the theme file. ### Template Files Any files with the `.html` extension are considered to be template files and are not copied from the theme directory or any subdirectories. Also, any files listed in [static_templates] are treated as templates regardless of their file extension. [static_templates]: #static_templates ### Theme Meta Files The various files required for packaging a theme are also ignored. Specifically, the `mkdocs_theme.yml` configuration file and any Python files. ### Dot Files Theme authors can explicitly force MkDocs to ignore files by starting a file or directory name with a dot. Any of the following files would be ignored: ```text .ignored.txt .ignored/file.txt foo/.ignored.txt foo/.ignored/file.txt ``` ### Documentation Files All documentation files are ignored. Specifically, any Markdown files (using any of the file extensions supported by MKDocs). Additionally, any README files which may exist in the theme directories are ignored. ## Template Variables Each template in a theme is built with a template context. These are the variables that are available to themes. The context varies depending on the template that is being built. At the moment templates are either built with the global context or with a page specific context. The global context is used for HTML pages that don't represent an individual Markdown document, for example a 404.html page or search.html. ### Global Context The following variables are available globally on any template. #### config The `config` variable is an instance of MkDocs' config object generated from the `mkdocs.yml` config file. While you can use any config option, some commonly used options include: * [config.site_name](../user-guide/configuration.md#site_name) * [config.site_url](../user-guide/configuration.md#site_url) * [config.site_author](../user-guide/configuration.md#site_author) * [config.site_description](../user-guide/configuration.md#site_description) * [config.theme.locale](../user-guide/configuration.md#locale) (See also [Theme Configuration](#locale) below) * [config.extra_javascript](../user-guide/configuration.md#extra_javascript) * [config.extra_css](../user-guide/configuration.md#extra_css) * [config.repo_url](../user-guide/configuration.md#repo_url) * [config.repo_name](../user-guide/configuration.md#repo_name) * [config.copyright](../user-guide/configuration.md#copyright) #### nav The `nav` variable is used to create the navigation for the documentation. The `nav` object is an iterable of [navigation objects](#navigation-objects) as defined by the [nav] configuration setting. [nav]: ../user-guide/configuration.md#nav ::: mkdocs.structure.nav.Navigation options: show_root_heading: false show_root_toc_entry: true members: [] heading_level: 4 In addition to the iterable of [navigation objects](#navigation-objects), the `nav` object contains the following attributes: ::: mkdocs.structure.nav.Navigation.homepage options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Navigation.pages options: show_root_full_path: false heading_level: 5 This list is not necessarily a complete list of all site pages as it does not contain pages which are not included in the navigation. This list does match the list and order of pages used for all "next page" and "previous page" links. For a list of all pages, use the [pages](#pages) template variable. ##### Nav Example Following is a basic usage example which outputs the first and second level navigation as a nested list. ```django {% if nav|length > 1 %}
    {% for nav_item in nav %} {% if nav_item.children %}
  • {{ nav_item.title }}
  • {% else %} {% endif %} {% endfor %}
{% endif %} ``` #### base_url The `base_url` provides a relative path to the root of the MkDocs project. While this can be used directly by prepending it to a local relative URL, it is best to use the [url](#url) template filter, which is smarter about how it applies `base_url`. #### mkdocs_version Contains the current MkDocs version. #### build_date_utc A Python datetime object that represents the date and time the documentation was built in UTC. This is useful for showing how recently the documentation was updated. #### pages A flat list of `File` objects for *all* pages in the project. This list can contain pages not included in the global [navigation](#nav) and may not match the order of pages within that navigation. The [page](#page) object for each `File` can be accessed from `file.page`. #### page In templates which are not rendered from a Markdown source file, the `page` variable is `None`. In templates which are rendered from a Markdown source file, the `page` variable contains a `page` object. The same `page` objects are used as `page` [navigation objects](#navigation-objects) in the global [navigation](#nav) and in the [pages](#pages) template variable. ::: mkdocs.structure.pages.Page options: show_root_heading: false show_root_toc_entry: true members: [] heading_level: 4 All `page` objects contain the following attributes: ::: mkdocs.structure.pages.Page.title options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.content options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.toc options: show_root_full_path: false heading_level: 5 The following example would display the top two levels of the Table of Contents for a page. ```django ``` ::: mkdocs.structure.pages.Page.meta options: show_root_full_path: false heading_level: 5 In this example we define a `source` property above the page title: ```text source: generics.py mixins.py # Page title Content... ``` A template can access this metadata for the page with the `meta.source` variable. This could then be used to link to source files related to the documentation page. ```django {% for filename in page.meta.source %} {{ filename }} {% endfor %} ``` ::: mkdocs.structure.pages.Page.url options: show_root_full_path: false heading_level: 5 It is expected that this be used with the [url](#url) filter to ensure the URL is relative to the current page. ```django {{ page.title }} ``` ::: mkdocs.structure.pages.Page.file options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.abs_url options: show_root_full_path: false heading_level: 5 For example, if `site_url: https://example.com/`, then the value of `page.abs_url` for the page `foo.md` would be `/foo/`. However, if `site_url: https://example.com/bar/`, then the value of `page.abs_url` for the page `foo.md` would be `/bar/foo/`. ::: mkdocs.structure.pages.Page.canonical_url options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.edit_url options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.is_homepage options: show_root_full_path: false heading_level: 5 This can be used in conjunction with other attributes of the `page` object to alter the behavior. For example, to display a different title on the homepage: ```django {% if not page.is_homepage %}{{ page.title }} - {% endif %}{{ site_name }} ``` ::: mkdocs.structure.pages.Page.previous_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.next_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.StructureItem.parent options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.children options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.active options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.is_section options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.is_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.is_link options: show_root_full_path: false heading_level: 5 #### AnchorLink ::: mkdocs.structure.toc.AnchorLink options: show_root_heading: false show_root_toc_entry: true heading_level: 5 ### Navigation Objects Navigation objects contained in the [nav](#nav) template variable may be one of [section](#section) objects, [page](#page) objects, and [link](#link) objects. While section objects may contain nested navigation objects, pages and links do not. Page objects are the full page object as used for the current [page](#page) with all of the same attributes available. Section and Link objects contain a subset of those attributes as defined below: #### Section A `section` navigation object defines a named section in the navigation and contains a list of child navigation objects. Note that sections do not contain URLs and are not links of any kind. However, by default, MkDocs sorts index pages to the top and the first child might be used as the URL for a section if a theme chooses to do so. ::: mkdocs.structure.nav.Section options: show_root_heading: false show_root_toc_entry: true members: [] heading_level: 4 The following attributes are available on `section` objects: ::: mkdocs.structure.nav.Section.title options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.StructureItem.parent options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.children options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.active options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.is_section options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.is_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.is_link options: show_root_full_path: false heading_level: 5 #### Link A `link` navigation object contains a link which does not point to an internal MkDocs page. ::: mkdocs.structure.nav.Link options: show_root_heading: false show_root_toc_entry: true members: [] heading_level: 4 The following attributes are available on `link` objects: ::: mkdocs.structure.nav.Link.title options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.url options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.StructureItem.parent options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.children options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.active options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.is_section options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.is_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.is_link options: show_root_full_path: false heading_level: 5 ### Extra Context Additional variables can be passed to the template with the [`extra`](../user-guide/configuration.md#extra) configuration option. This is a set of key value pairs that can make custom templates far more flexible. For example, this could be used to include the project version of all pages and a list of links related to the project. This can be achieved with the following `extra` configuration: ```yaml extra: version: 0.13.0 links: - https://github.com/mkdocs - https://docs.readthedocs.org/en/latest/builds.html#mkdocs - https://www.mkdocs.org/ ``` And then displayed with this HTML in the custom theme. ```django {{ config.extra.version }} {% if config.extra.links %}
    {% for link in config.extra.links %}
  • {{ link }}
  • {% endfor %}
{% endif %} ``` ## Template Filters In addition to [Jinja's default filters], the following custom filters are available to use in MkDocs templates: ### url Normalizes a URL. Absolute URLs are passed through unaltered. If the URL is relative and the template context includes a page object, then the URL is returned relative to the page object. Otherwise, the URL is returned with [base_url](#base_url) prepended. ```django {{ page.title }} ``` ### tojson Safely convert a Python object to a value in a JavaScript script. ```django ``` ### script_tag NEW: **New in version 1.5.** Convert an item from `extra_javascript` to a ` ``` With properly configured settings, the following HTML in a template will add a full search implementation to your theme. ```django

Search Results

Sorry, page not found.
``` The JavaScript in the plugin works by looking for the specific ID's used in the above HTML. The form input for the user to type the search query must be identified with `id="mkdocs-search-query"` and the div where the results will be placed must be identified with `id="mkdocs-search-results"`. The plugin supports the following options being set in the [theme's configuration file], `mkdocs_theme.yml`: ### include_search_page Determines whether the search plugin expects the theme to provide a dedicated search page via a template located at `search/search.html`. When `include_search_page` is set to `true`, the search template will be built and available at `search/search.html`. This method is used by the `readthedocs` theme. When `include_search_page` is set to `false` or not defined, it is expected that the theme provide some other mechanisms for displaying search results. For example, the `mkdocs` theme displays results on any page via a modal. ### search_index_only Determines whether the search plugin should only generate a search index or a complete search solution. When `search_index_only` is set to `false`, then the search plugin modifies the Jinja environment by adding its own `templates` directory (with a lower precedence than the theme) and adds its scripts to the `extra_javascript` config setting. When `search_index_only` is set to `true` or not defined, the search plugin makes no modifications to the Jinja environment. A complete solution using the provided index file is the responsibility of the theme. The search index is written to a JSON file at `search/search_index.json` in the [site_dir]. The JSON object contained within the file may contain up to three objects. ```json { config: {...}, docs: [...], index: {...} } ``` If present, the `config` object contains the key/value pairs of config options defined for the plugin in the user's `mkdocs.yml` config file under `plugings.search`. The `config` object was new in MkDocs version *1.0*. The `docs` object contains a list of document objects. Each document object is made up of a `location` (URL), a `title`, and `text` which can be used to create a search index and/or display search results. If present, the `index` object contains a pre-built index which offers performance improvements for larger sites. Note that the pre-built index is only created if the user explicitly enables the [prebuild_index] config option. Themes should expect the index to not be present, but can choose to use the index when it is available. The `index` object was new in MkDocs version *1.0*. [Jinja2 template]: https://jinja.palletsprojects.com/ [built-in themes]: https://github.com/mkdocs/mkdocs/tree/master/mkdocs/themes [theme's configuration file]: #theme-configuration [lunr.js]: https://lunrjs.com/ [site_dir]: ../user-guide/configuration.md#site_dir [prebuild_index]: ../user-guide/configuration.md#prebuild_index [Jinja's default filters]: https://jinja.palletsprojects.com/en/latest/templates/#builtin-filters ## Packaging Themes MkDocs makes use of [Python packaging] to distribute themes. This comes with a few requirements. To see an example of a package containing one theme, see the [MkDocs Bootstrap theme] and to see a package that contains many themes, see the [MkDocs Bootswatch theme]. NOTE: It is not strictly necessary to package a theme, as the entire theme can be contained in the `custom_dir`. If you have created a "one-off theme," that should be sufficient. However, if you intend to distribute your theme for others to use, packaging the theme has some advantages. By packaging your theme, your users can more easily install it, they can rely on a default [configuration] being defined, and they can then take advantage of the [custom_dir] to make tweaks to your theme to better suit their needs. [Python packaging]: https://packaging.python.org/en/latest/ [MkDocs Bootstrap theme]: https://mkdocs.github.io/mkdocs-bootstrap/ [MkDocs Bootswatch theme]: https://mkdocs.github.io/mkdocs-bootswatch/ ### Package Layout The following layout is recommended for themes. Two files at the top level directory called `MANIFEST.in` and `setup.py` beside the theme directory which contains an empty `__init__.py` file, a theme configuration file (`mkdocs_theme.yml`), and your template and media files. ```text . |-- MANIFEST.in |-- theme_name | |-- __init__.py | |-- mkdocs_theme.yml | |-- main.html | |-- styles.css `-- setup.py ``` The `MANIFEST.in` file should contain the following contents but with theme_name updated and any extra file extensions added to the include. ```text recursive-include theme_name *.ico *.js *.css *.png *.html *.eot *.svg *.ttf *.woff recursive-exclude * __pycache__ recursive-exclude * *.py[co] ``` The `setup.py` should include the following text with the modifications described below. ```python from setuptools import setup, find_packages VERSION = '0.0.1' setup( name="mkdocs-themename", version=VERSION, url='', license='', description='', author='', author_email='', packages=find_packages(), include_package_data=True, entry_points={ 'mkdocs.themes': [ 'themename = theme_name', ] }, zip_safe=False ) ``` Fill in the URL, license, description, author and author email address. The name should follow the convention `mkdocs-themename` (like `mkdocs-bootstrap` and `mkdocs-bootswatch`), starting with MkDocs, using hyphens to separate words and including the name of your theme. Most of the rest of the file can be left unedited. The last section we need to change is the entry_points. This is how MkDocs finds the theme(s) you are including in the package. The name on the left is the one that users will use in their mkdocs.yml and the one on the right is the directory containing your theme files. The directory you created at the start of this section with the main.html file should contain all of the other theme files. The minimum requirement is that it includes a `main.html` for the theme. It **must** also include a `__init__.py` file which should be empty, this file tells Python that the directory is a package. ### Theme Configuration A packaged theme is required to include a configuration file named `mkdocs_theme.yml` which is placed in the root of your template files. The file should contain default configuration options for the theme. However, if the theme offers no configuration options, the file is still required and can be left blank. A theme which is not packaged does not need a `mkdocs_theme.yml` file as that file is not loaded from `theme.custom_dir`. The theme author is free to define any arbitrary options deemed necessary and those options will be made available in the templates to control behavior. For example, a theme might want to make a sidebar optional and include the following in the `mkdocs_theme.yml` file: ```yaml show_sidebar: true ``` Then in a template, that config option could be referenced: ```django {% if config.theme.show_sidebar %} {% endif %} ``` And the user could override the default in their project's `mkdocs.yml` config file: ```yaml theme: name: themename show_sidebar: false ``` In addition to arbitrary options defined by the theme, MkDocs defines a few special options which alters its behavior: > BLOCK: > > #### locale > > This option mirrors the [theme] config option of the same name. If this > value is not defined in the `mkdocs_theme.yml` file and the user does not > set it in `mkdocs.yml` then it will default to `en` (English). The value > is expected to match the language used in the text provided by the theme > (such a "next" and "previous" links) and should be used as the value of > the `` tag's `lang` attribute. See [Supporting theme localization/ > translation](#supporting-theme-localizationtranslation) for more > information. > > Note that during configuration validation, the provided string is converted > to a `Locale` object. The object contains `Locale.language` and > `Locale.territory` attributes and will resolve as a string from within a > template. Therefore, the following will work fine: > > ```html > > ``` > > If the locale was set to `fr_CA` (Canadian French), then the above template > would render as: > > ```html > > ``` > > If you did not want the territory attribute to be included, then reference > the `language` attribute directly: > > ```html > > ``` > > That would render as: > > ```html > > ``` > > #### static_templates > > This option mirrors the [theme] config option of the same name and allows > some defaults to be set by the theme. Note that while the user can add > templates to this list, the user cannot remove templates included in the > theme's config. > > #### extends > > Defines a parent theme that this theme inherits from. The value should be > the string name of the parent theme. Normal [Jinja inheritance rules] > apply. Plugins may also define some options which allow the theme to inform a plugin about which set of plugin options it expects. See the documentation for any plugins you may wish to support in your theme. ### Distributing Themes With the above changes, your theme should now be ready to install. This can be done with pip, using `pip install .` if you are still in the same directory as the setup.py. Most Python packages, including MkDocs, are distributed on PyPI. To do this, you should run the following command. ```bash python setup.py register ``` If you don't have an account setup, you should be prompted to create one. For a much more detailed guide, see the official Python packaging documentation for [Packaging and Distributing Projects]. [Packaging and Distributing Projects]: https://packaging.python.org/en/latest/distributing/ [Jinja inheritance rules]: https://jinja.palletsprojects.com/en/latest/templates/#template-inheritance ## Supporting theme Localization/Translation While the built-in themes provide support for [localization/translation] of templates, custom themes and third-party themes may choose not to. Regardless, the [`locale`](#locale) setting of the `theme` configuration option is always present and is relied upon by other parts of the system. Therefore, it is recommended that all third-party themes use the same setting for designating a language regardless of the system they use for translation. In that way, users will experience consistent behavior regardless of the theme they may choose. The method for managing translations is up to the developers of a theme. However, if a theme developer chooses to use the same mechanisms used by the built-in themes, the sections below outline how to enable and make use of the same commands utilized by MkDocs. [localization/translation]: ../user-guide/localizing-your-theme.md ### Using the Localization/Translation commands WARNING: As **[pybabel] is not installed by default** and most users will not have pybabel installed, theme developers and/or translators should make sure to have installed the necessary dependencies (using `pip install 'mkdocs[i18n]'`) in order for the commands to be available for use. The translation commands should be called from the root of your theme's working tree. For an overview of the workflow used by MkDocs to translate the built-in themes, see the appropriate [section] of the Contributing Guide and the [Translation Guide]. [pybabel]: https://babel.pocoo.org/en/latest/setup.html [section]: ../about/contributing.md#submitting-changes-to-the-builtin-themes [Translation Guide]: translations.md ### Example custom theme Localization/Translation workflow > NOTE: If your theme inherits from an existing theme which already provides > translation catalogs, your theme's translations will be merged with the > parent theme's translations during a MkDocs build. > > This means that you only need to concentrate on the added translations. > Yet, you will still benefit from the translations of the parent theme. At > the same time, you may override any of parent theme's translations! Let's suppose that you're working on your own fork of the [mkdocs-basic-theme][basic theme] and want to add translations to it. Edit the templates by wrapping text in your HTML sources with `{% trans %}` and `{% endtrans %}` as follows: ```diff --- a/basic_theme/base.html +++ b/basic_theme/base.html @@ -88,7 +88,7 @@ -

This is an example theme for MkDocs.

+

{% trans %}This is an example theme for MkDocs.{% endtrans %}

It is designed to be read by looking at the theme HTML which is heavily ``` Then you would follow the [Translation Guide] as usual to get your translations running. ### Packaging Translations with your theme While the Portable Object Template (`pot`) file created by the `extract_messages` command and the Portable Object (`po`) files created by the `init_catalog` and `update_catalog` commands are useful for creating and editing translations, they are not used by MkDocs directly and do not need to be included in a packaged release of a theme. When MkDocs builds a site with translations, it only makes use of the binary `mo` files(s) for the specified locale. Therefore, when [packaging a theme], make sure to include it in the "wheels", using a `MANIFEST.in` file or otherwise. Then, before building your Python package, you will want to ensure that the binary `mo` file for each locale is up-to-date by running the `compile_catalog` command for each locale. MkDocs expects the binary `mo` files to be located at `locales//LC_MESSAGES/messages.mo`, which the `compile_catalog` command automatically does for you. See [Testing theme translations] for details. NOTE: As outlined in our [Translation Guide], the MkDocs project has chosen to include the `pot` and `po` files in our code repository, but not the `mo` files. This requires us to always run `compile_catalog` before packaging a new release regardless of whether any changes were made to a translation or not. However, you may chose an alternate workflow for your theme. At a minimum, you need to ensure that up-to-date `mo` files are included at the correct location in each release. However, you may use a different process for generating those `mo` files if you chose to do so. [packaging a theme]: #packaging-themes [Testing theme translations]: translations.md#testing-theme-translations mkdocs-1.6.1/docs/dev-guide/translations.md0000664000175000017500000002266214664334534020551 0ustar carstencarsten# Translations Theme localization guide. --- The [built-in themes] that are included with MkDocs provide support for translations. This is a guide for translators, which documents the process for contributing new translations and/or updating existing translations. For guidance on modifying the existing themes, see the [Contributing Guide][update themes]. To enable a specific translation see the documentation about the specific theme you are using in the [User Guide][built-in themes]. For translations of third-party themes, please see the documentation for those themes. For a third-party theme to make use of MkDocs' translation tools and methods, that theme must be properly [configured] to make use of those tools. NOTE: Translations only apply to text contained within a theme's template, such as "next" and "previous" links. The Markdown content of a page is not translated. If you wish to create multilingual documentation, you need to combine theme localization with a third-party internationalization/localization plugin. [built-in themes]: ../user-guide/choosing-your-theme.md [update themes]: ../about/contributing.md#submitting-changes-to-the-builtin-themes [configured]: themes.md#supporting-theme-localizationtranslation ## Localization tooling prerequisites Theme localization makes use of the [babel][babel] project for generation and compilation of localization files. You will need to be working from the git working tree on your local machine to make use of the translation commands. See the [Contributing Guide] for direction on how to [Install for Development] and [Submit a Pull Request]. The instructions in this document assume that you are working from a properly configured development environment. Make sure translation requirements are installed in your environment: ```bash pip install 'mkdocs[i18n]' ``` [babel]: https://babel.pocoo.org/en/latest/cmdline.html [Contributing Guide]: ../about/contributing.md [Install for Development]: ../about/contributing.md#installing-for-development [Submit a Pull Request]: ../about/contributing.md#submitting-pull-requests ## Adding language translations to themes If your favorite language locale is not yet supported on one (or both) of the built-in themes (`mkdocs` and `readthedocs`), you can easily contribute a translation by following the steps below. Here is a quick summary of what you'll need to do: 1. [Fork and clone the MkDocs repository](#fork-and-clone-the-mkdocs-repository) and then [install MkDocs for development](../about/contributing.md#installing-for-development) for adding and testing translations. 2. [Initialize new localization catalogs](#initializing-the-localization-catalogs) for your language (if a translation for your locale already exists, follow the instructions for [updating theme localization files](#updating-the-translation-catalogs) instead). 3. [Add a translation](#translating-the-mkdocs-themes) for every text placeholder in the localized catalogs. 4. [Locally serve and test](#testing-theme-translations) the translated themes for your language. 5. [Update the documentation](#updating-theme-documentation) about supported translations for each translated theme. 6. [Contribute your translation](#contributing-translations) through a Pull Request. NOTE: Translation locales are usually identified using the [ISO-639-1] (2-letter) language codes. While territory/region/county codes are also supported, location specific translations should only be added after the general language translation has been completed and the regional dialect requires use of a term which differs from the general language translation. [ISO-639-1]: https://en.wikipedia.org/wiki/ISO_639-1 ### Fork and clone the MkDocs repository In the following steps you'll work with a fork of the MkDocs repository. Follow the instructions for [forking and cloning the MkDocs repository](../about/contributing.md#installing-for-development). To test the translations you also need to [install MkDocs for development](../about/contributing.md#installing-for-development) from your fork. ### Initializing the localization catalogs The templates for each theme contain text placeholders that have been extracted into a Portable Object Template (`messages.pot`) file, which is present in each theme's folder. Initializing a catalog consists of running a command which will create a directory structure for your desired language and prepare a Portable Object (`messages.po`) file derived from the `pot` file of the theme. Use the `init_catalog` command on each theme's directory and provide the appropriate language code (`-l `). The language code is almost always just two lowercase letters, such as `sv`, but in some cases it needs to be further disambiguated. See: * [Already translated languages for built-in themes](../user-guide/choosing-your-theme.md#mkdocs-locale) * [ISO 639 Language List](https://www.localeplanet.com/icu/iso639.html) * [Language subtag registry](https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry) In particular, the way to know that the `pt` language should be disambiguated as `pt_PT` and `pt_BR` is that the *Language subtag registry* page contains `pt-` if you search for it. Whereas `sv` should remain just `sv`, because that page does *not* contain `sv-`. So, if we pick `es` (Spanish) as our example language code, to add a translation for it to both built-in themes, run these commands: ```bash pybabel init --input-file mkdocs/themes/mkdocs/messages.pot --output-dir mkdocs/themes/mkdocs/locales -l es pybabel init --input-file mkdocs/themes/readthedocs/messages.pot --output-dir mkdocs/themes/readthedocs/locales -l es ``` The above command will create a file structure as follows: ```text mkdocs/themes/mkdocs/locales ├── es │   └── LC_MESSAGES │   └── messages.po ``` You can now move on to the next step and [add a translation](#translating-the-mkdocs-themes) for every text placeholder in the localized catalog. ## Updating a theme translation If a theme's `messages.pot` template file has been [updated][update themes] since the `messages.po` was last updated for your locale, follow the steps below to update the theme's `messages.po` file: 1. [Update the theme's translation catalog](#updating-the-translation-catalogs) to refresh the translatable text placeholders of each theme. 2. [Translate](#translating-the-mkdocs-themes) the newly added translatable text placeholders on every `messages.po` catalog file language you can. 3. [Locally serve and test](#testing-theme-translations) the translated themes for your language. 4. [Contribute your translation](#contributing-translations) through a Pull Request. ### Updating the translation catalogs This step should be completed after a theme template have been [updated][update themes] for each language that you are comfortable contributing a translation for. To update the `fr` translation catalog of both built-in themes, use the following commands: ```bash pybabel update --ignore-obsolete --input-file mkdocs/themes/mkdocs/messages.pot --output-dir mkdocs/themes/mkdocs/locales -l fr pybabel update --ignore-obsolete --input-file mkdocs/themes/readthedocs/messages.pot --output-dir mkdocs/themes/readthedocs/locales -l fr ``` You can now move on to the next step and [add a translation] for every updated text placeholder in the localized catalog. [add a translation]: #translating-the-mkdocs-themes ### Translating the MkDocs themes Now that your localized `messages.po` files are ready, all you need to do is add a translation in each `msgstr` item for each `msgid` item in the file. ```text msgid "Next" msgstr "Siguiente" ``` WARNING: Do not modify the `msgid` as it is common to all translations. Just add its translation in the `msgstr` item. Once you have finished translating all of the terms listed in the `po` file, you'll want to [test your localized theme](#testing-theme-translations). ### Testing theme translations To test a theme with translations, you need to first compile the `messages.po` files of your theme into `messages.mo` files. The following commands will compile the `es` translation for both built-in themes: ```bash pybabel compile --statistics --directory mkdocs/themes/mkdocs/locales -l es pybabel compile --statistics --directory mkdocs/themes/readthedocs/locales -l es ``` The above command results in the following file structure: ```text mkdocs/themes/mkdocs/locales ├── es │   └── LC_MESSAGES │   ├── messages.mo │   └── messages.po ``` Note that the compiled `messages.mo` file was generated based on the `messages.po` file that you just edited. Then modify the `mkdocs.yml` file at the root of the project to test the new and/or updated locale: ```yaml theme: name: mkdocs locale: es ``` Finally, run `mkdocs serve` to check out your new localized version of the theme. > NOTE: > The build and release process takes care of compiling and distributing > all locales to end users so you only have to worry about contributing the > actual text translation `messages.po` files (the rest is ignored by git). > > After you have finished testing your work, be sure to undo the change to > the `locale` setting in the `mkdocs.yml` file before submitting your > changes. ## Updating theme documentation The page [Choosing your theme](../user-guide/choosing-your-theme.md) updates by itself with all available locale options. ## Contributing translations It is now time for you to [contribute](../about/contributing.md) your nice work to the project. Thank you! mkdocs-1.6.1/docs/dev-guide/api.md0000664000175000017500000000113514664334534016571 0ustar carstencarsten# API reference NOTE: The main entry point to the API is through [Events](plugins.md#events) that are received by plugins. These events' descriptions link back to this page. ::: mkdocs.structure.files.Files options: show_root_heading: true ::: mkdocs.structure.files.File options: show_root_heading: true ::: mkdocs.config.base.Config options: show_root_heading: true ::: mkdocs.utils.templates.TemplateContext options: show_root_heading: true show_if_no_docstring: true ::: mkdocs.livereload.LiveReloadServer options: show_root_heading: true mkdocs-1.6.1/docs/dev-guide/plugins.md0000664000175000017500000004337114664334534017511 0ustar carstencarsten# MkDocs Plugins A Guide to installing, using and creating MkDocs Plugins --- ## Installing Plugins Before a plugin can be used, it must be installed on the system. If you are using a plugin which comes with MkDocs, then it was installed when you installed MkDocs. However, to install third party plugins, you need to determine the appropriate package name and install it using `pip`: ```bash pip install mkdocs-foo-plugin ``` WARNING: Installing an MkDocs plugin means installing a Python package and executing any code that the author has put in there. So, exercise the usual caution; there's no attempt at sandboxing. Once a plugin has been successfully installed, it is ready to use. It just needs to be [enabled](#using-plugins) in the configuration file. The [Catalog] repository has a large ranked list of plugins that you can install and use. ## Using Plugins The [`plugins`][config] configuration option should contain a list of plugins to use when building the site. Each "plugin" must be a string name assigned to the plugin (see the documentation for a given plugin to determine its "name"). A plugin listed here must already be [installed](#installing-plugins). ```yaml plugins: - search ``` Some plugins may provide configuration options of their own. If you would like to set any configuration options, then you can nest a key/value mapping (`option_name: option value`) of any options that a given plugin supports. Note that a colon (`:`) must follow the plugin name and then on a new line the option name and value must be indented and separated by a colon. If you would like to define multiple options for a single plugin, each option must be defined on a separate line. ```yaml plugins: - search: lang: en foo: bar ``` For information regarding the configuration options available for a given plugin, see that plugin's documentation. For a list of default plugins and how to override them, see the [configuration][config] documentation. ## Developing Plugins Like MkDocs, plugins must be written in Python. It is generally expected that each plugin would be distributed as a separate Python module, although it is possible to define multiple plugins in the same module. At a minimum, a MkDocs Plugin must consist of a [BasePlugin] subclass and an [entry point] which points to it. ### BasePlugin A subclass of `mkdocs.plugins.BasePlugin` should define the behavior of the plugin. The class generally consists of actions to perform on specific events in the build process as well as a configuration scheme for the plugin. All `BasePlugin` subclasses contain the following attributes: #### config_scheme A tuple of configuration validation instances. Each item must consist of a two item tuple in which the first item is the string name of the configuration option and the second item is an instance of `mkdocs.config.config_options.BaseConfigOption` or any of its subclasses. For example, the following `config_scheme` defines three configuration options: `foo`, which accepts a string; `bar`, which accepts an integer; and `baz`, which accepts a boolean value. ```python class MyPlugin(mkdocs.plugins.BasePlugin): config_scheme = ( ('foo', mkdocs.config.config_options.Type(str, default='a default value')), ('bar', mkdocs.config.config_options.Type(int, default=0)), ('baz', mkdocs.config.config_options.Type(bool, default=True)) ) ``` > NEW: **New in version 1.4.** > > ##### Subclassing `Config` to specify the config schema > > To get type safety benefits, if you're targeting only MkDocs 1.4+, define the config schema as a class instead: > > ```python > class MyPluginConfig(mkdocs.config.base.Config): > foo = mkdocs.config.config_options.Type(str, default='a default value') > bar = mkdocs.config.config_options.Type(int, default=0) > baz = mkdocs.config.config_options.Type(bool, default=True) > > class MyPlugin(mkdocs.plugins.BasePlugin[MyPluginConfig]): > ... > ``` ##### Examples of config definitions >! EXAMPLE: > > ```python > from mkdocs.config import base, config_options as c > > class _ValidationOptions(base.Config): > enabled = c.Type(bool, default=True) > verbose = c.Type(bool, default=False) > skip_checks = c.ListOfItems(c.Choice(('foo', 'bar', 'baz')), default=[]) > > class MyPluginConfig(base.Config): > definition_file = c.File(exists=True) # required > checksum_file = c.Optional(c.File(exists=True)) # can be None but must exist if specified > validation = c.SubConfig(_ValidationOptions) > ``` > > From the user's point of view `SubConfig` is similar to `Type(dict)`, it's just that it also retains full ability for validation: you define all valid keys and what each value should adhere to. > > And `ListOfItems` is similar to `Type(list)`, but again, we define the constraint that each value must adhere to. > > This accepts a config as follows: > > ```yaml > my_plugin: > definition_file: configs/test.ini # relative to mkdocs.yml > validation: > enabled: !ENV [CI, false] > verbose: true > skip_checks: > - foo > - baz > ``` >? EXAMPLE: > > ```python > import numbers > from mkdocs.config import base, config_options as c > > class _Rectangle(base.Config): > width = c.Type(numbers.Real) # required > height = c.Type(numbers.Real) # required > > class MyPluginConfig(base.Config): > add_rectangles = c.ListOfItems(c.SubConfig(_Rectangle)) # required > ``` > > In this example we define a list of complex items, and that's achieved by passing a concrete `SubConfig` to `ListOfItems`. > > This accepts a config as follows: > > ```yaml > my_plugin: > add_rectangles: > - width: 5 > height: 7 > - width: 12 > height: 2 > ``` When the user's configuration is loaded, the above scheme will be used to validate the configuration and fill in any defaults for settings not provided by the user. The validation classes may be any of the classes provided in `mkdocs.config.config_options` or a third party subclass defined in the plugin. Any settings provided by the user which fail validation or are not defined in the `config_scheme` will raise a `mkdocs.config.base.ValidationError`. #### config A dictionary of configuration options for the plugin, which is populated by the `load_config` method after configuration validation has completed. Use this attribute to access options provided by the user. ```python def on_pre_build(self, config, **kwargs): if self.config['baz']: # implement "baz" functionality here... ``` > NEW: **New in version 1.4.** > > ##### Safe attribute-based access > > To get type safety benefits, if you're targeting only MkDocs 1.4+, access options as attributes instead: > > ```python > def on_pre_build(self, config, **kwargs): > if self.config.baz: > print(self.config.bar ** 2) # OK, `int ** 2` is valid. > ``` All `BasePlugin` subclasses contain the following method(s): #### load_config(options) Loads configuration from a dictionary of options. Returns a tuple of `(errors, warnings)`. This method is called by MkDocs during configuration validation and should not need to be called by the plugin. #### on_<event_name>() Optional methods which define the behavior for specific [events]. The plugin should define its behavior within these methods. Replace `` with the actual name of the event. For example, the `pre_build` event would be defined in the `on_pre_build` method. Most events accept one positional argument and various keyword arguments. It is generally expected that the positional argument would be modified (or replaced) by the plugin and returned. If nothing is returned (the method returns `None`), then the original, unmodified object is used. The keyword arguments are simply provided to give context and/or supply data which may be used to determine how the positional argument should be modified. It is good practice to accept keyword arguments as `**kwargs`. In the event that additional keywords are provided to an event in a future version of MkDocs, there will be no need to alter your plugin. For example, the following event would add an additional static_template to the theme config: ```python class MyPlugin(BasePlugin): def on_config(self, config, **kwargs): config['theme'].static_templates.add('my_template.html') return config ``` > NEW: **New in version 1.4.** > > To get type safety benefits, if you're targeting only MkDocs 1.4+, access config options as attributes instead: > > ```python > def on_config(self, config: MkDocsConfig): > config.theme.static_templates.add('my_template.html') > return config > ``` ### Events There are three kinds of events: [Global Events], [Page Events] and [Template Events].

See a diagram with relations between all the plugin events
  • The events themselves are shown in yellow, with their parameters.
  • Arrows show the flow of arguments and outputs of each event. Sometimes they're omitted.
  • The events are chronologically ordered from top to bottom.
  • Dotted lines appear at splits from global events to per-page events.
  • Click the events' titles to jump to their description.
--8<-- "docs/img/plugin-events.svg"

#### One-time Events One-time events run once per `mkdocs` invocation. The only case where these tangibly differ from [global events](#global-events) is for `mkdocs serve`: global events, unlike these, will run multiple times -- once per *build*. ##### on_startup ::: mkdocs.plugins.BasePlugin.on_startup options: show_root_heading: false show_root_toc_entry: false ##### on_shutdown ::: mkdocs.plugins.BasePlugin.on_shutdown options: show_root_heading: false show_root_toc_entry: false ##### on_serve ::: mkdocs.plugins.BasePlugin.on_serve options: show_root_heading: false show_root_toc_entry: false #### Global Events Global events are called once per build at either the beginning or end of the build process. Any changes made in these events will have a global effect on the entire site. ##### on_config ::: mkdocs.plugins.BasePlugin.on_config options: show_root_heading: false show_root_toc_entry: false ##### on_pre_build ::: mkdocs.plugins.BasePlugin.on_pre_build options: show_root_heading: false show_root_toc_entry: false ##### on_files ::: mkdocs.plugins.BasePlugin.on_files options: show_root_heading: false show_root_toc_entry: false ##### on_nav ::: mkdocs.plugins.BasePlugin.on_nav options: show_root_heading: false show_root_toc_entry: false ##### on_env ::: mkdocs.plugins.BasePlugin.on_env options: show_root_heading: false show_root_toc_entry: false ##### on_post_build ::: mkdocs.plugins.BasePlugin.on_post_build options: show_root_heading: false show_root_toc_entry: false ##### on_build_error ::: mkdocs.plugins.BasePlugin.on_build_error options: show_root_heading: false show_root_toc_entry: false #### Template Events Template events are called once for each non-page template. Each template event will be called for each template defined in the [extra_templates] config setting as well as any [static_templates] defined in the theme. All template events are called after the [env] event and before any [page events]. ##### on_pre_template ::: mkdocs.plugins.BasePlugin.on_pre_template options: show_root_heading: false show_root_toc_entry: false ##### on_template_context ::: mkdocs.plugins.BasePlugin.on_template_context options: show_root_heading: false show_root_toc_entry: false ##### on_post_template ::: mkdocs.plugins.BasePlugin.on_post_template options: show_root_heading: false show_root_toc_entry: false #### Page Events Page events are called once for each Markdown page included in the site. All page events are called after the [post_template] event and before the [post_build] event. ##### on_pre_page ::: mkdocs.plugins.BasePlugin.on_pre_page options: show_root_heading: false show_root_toc_entry: false ##### on_page_read_source ::: mkdocs.plugins.BasePlugin.on_page_read_source options: show_root_heading: false show_root_toc_entry: false ##### on_page_markdown ::: mkdocs.plugins.BasePlugin.on_page_markdown options: show_root_heading: false show_root_toc_entry: false ##### on_page_content ::: mkdocs.plugins.BasePlugin.on_page_content options: show_root_heading: false show_root_toc_entry: false ##### on_page_context ::: mkdocs.plugins.BasePlugin.on_page_context options: show_root_heading: false show_root_toc_entry: false ##### on_post_page ::: mkdocs.plugins.BasePlugin.on_post_page options: show_root_heading: false show_root_toc_entry: false ### Event Priorities For each event type, corresponding methods of plugins are called in the order that the plugins appear in the `plugins` [config][]. Since MkDocs 1.4, plugins can choose to set a priority value for their events. Events with higher priority are called first. Events without a chosen priority get a default of 0. Events that have the same priority are ordered as they appear in the config. #### ::: mkdocs.plugins.event_priority > NEW: **New in version 1.6** > > There may also arise a need to register a handler for the same event at multiple different priorities. > > `CombinedEvent` makes this possible. > > #### ::: mkdocs.plugins.CombinedEvent ### Handling Errors MkDocs defines four error types: #### ::: mkdocs.exceptions.MkDocsException #### ::: mkdocs.exceptions.ConfigurationError #### ::: mkdocs.exceptions.BuildError #### ::: mkdocs.exceptions.PluginError Unexpected and uncaught exceptions will interrupt the build process and produce typical Python tracebacks, which are useful for debugging your code. However, users generally find tracebacks overwhelming and often miss the helpful error message. Therefore, MkDocs will catch any of the errors listed above, retrieve the error message, and exit immediately with only the helpful message displayed to the user. Therefore, you might want to catch any exceptions within your plugin and raise a `PluginError`, passing in your own custom-crafted message, so that the build process is aborted with a helpful message. The [on_build_error] event will be triggered for any exception. For example: ```python from mkdocs.exceptions import PluginError from mkdocs.plugins import BasePlugin class MyPlugin(BasePlugin): def on_post_page(self, output, page, config, **kwargs): try: # some code that could throw a KeyError ... except KeyError as error: raise PluginError(f"Failed to find the item by key: '{error}'") def on_build_error(self, error, **kwargs): # some code to clean things up ... ``` ### Logging in plugins To ensure that your plugins' log messages adhere with MkDocs' formatting and `--verbose`/`--debug` flags, please write the logs to a logger under the `mkdocs.plugins.` namespace. > EXAMPLE: > > ```python > import logging > > log = logging.getLogger(f"mkdocs.plugins.{__name__}") > > log.warning("File '%s' not found. Breaks the build if --strict is passed", my_file_name) > log.info("Shown normally") > log.debug("Shown only with `--verbose`") > > if log.getEffectiveLevel() <= logging.DEBUG: > log.debug("Very expensive calculation only for debugging: %s", get_my_diagnostics()) > ``` `log.error()` is another logging level that is differentiated by its look, but in all other ways it functions the same as `warning`, so it's strange to use it. If your plugin encounters an actual error, it is best to just interrupt the build by raising [`mkdocs.exceptions.PluginError`][] (which will also log an ERROR message). > NEW: **New in version 1.5** > > MkDocs now provides a `get_plugin_logger()` convenience function that returns a logger like the above that is also prefixed with the plugin's name. > > #### ::: mkdocs.plugins.get_plugin_logger ### Entry Point Plugins need to be packaged as Python libraries (distributed on PyPI separate from MkDocs) and each must register as a Plugin via a setuptools `entry_points`. Add the following to your `setup.py` script: ```python entry_points={ 'mkdocs.plugins': [ 'pluginname = path.to.some_plugin:SomePluginClass', ] } ``` The `pluginname` would be the name used by users (in the config file) and `path.to.some_plugin:SomePluginClass` would be the importable plugin itself (`from path.to.some_plugin import SomePluginClass`) where `SomePluginClass` is a subclass of [BasePlugin] which defines the plugin behavior. Naturally, multiple Plugin classes could exist in the same module. Simply define each as a separate entry point. ```python entry_points={ 'mkdocs.plugins': [ 'featureA = path.to.my_plugins:PluginA', 'featureB = path.to.my_plugins:PluginB' ] } ``` Note that registering a plugin does not activate it. The user still needs to tell MkDocs to use it via the config. ### Publishing a Plugin You should publish a package on [PyPI], then add it to the [Catalog] for discoverability. Plugins are strongly recommended to have a unique plugin name (entry point name) according to the catalog. [BasePlugin]:#baseplugin [config]: ../user-guide/configuration.md#plugins [entry point]: #entry-point [env]: #on_env [events]: #events [extra_templates]: ../user-guide/configuration.md#extra_templates [Global Events]: #global-events [Page Events]: #page-events [post_build]: #on_post_build [post_template]: #on_post_template [static_templates]: ../user-guide/configuration.md#static_templates [Template Events]: #template-events [catalog]: https://github.com/mkdocs/catalog [on_build_error]: #on_build_error [PyPI]: https://pypi.org/ mkdocs-1.6.1/docs/dev-guide/README.md0000664000175000017500000000105714664334534016760 0ustar carstencarsten# Developer Guide Extending MkDocs --- The MkDocs Developer Guide provides documentation for developers of third party themes and plugins. Please see the [Contributing Guide] for information on contributing to MkDocs itself. You can jump directly to a page listed below, or use the *next* and *previous* buttons in the navigation bar at the top of the page to move through the documentation in order. - [Themes](themes.md) - [Translations](translations.md) - [Plugins](plugins.md) - [API Reference](api.md) [Contributing Guide]: ../about/contributing.md mkdocs-1.6.1/docs/hooks.py0000664000175000017500000000220314664334534015317 0ustar carstencarstenfrom __future__ import annotations import re from pathlib import Path from typing import TYPE_CHECKING if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.nav import Page def _get_language_of_translation_file(path: Path) -> str: with path.open(encoding='utf-8') as f: translation_line = f.readline() m = re.search('^# (.+) translations ', translation_line) assert m return m[1] def on_page_markdown(markdown: str, page: Page, config: MkDocsConfig, **kwargs) -> str | None: if page.file.src_uri == 'user-guide/choosing-your-theme.md': here = Path(config.config_file_path).parent def replacement(m: re.Match) -> str: lines = [] for d in sorted(here.glob(m[2])): lang = _get_language_of_translation_file(Path(d, 'LC_MESSAGES', 'messages.po')) lines.append(f'{m[1]}`{d.name}`: {lang}') return '\n'.join(lines) return re.sub( r'^( *\* )\(see the list of existing directories `(.+)`\)$', replacement, markdown, flags=re.MULTILINE, ) mkdocs-1.6.1/docs/css/0000775000175000017500000000000014664334534014415 5ustar carstencarstenmkdocs-1.6.1/docs/css/extra.css0000664000175000017500000000300314664334534016246 0ustar carstencarstendiv.col-md-9 h1:first-of-type { text-align: center; font-size: 60px; font-weight: 300; } div.col-md-9>p:first-of-type { text-align: center; } div.col-md-9 p.admonition-title:first-of-type { text-align: left; } div.col-md-9 h1:first-of-type .headerlink { display: none; } div.admonition.block>.admonition-title { display: none; } .admonition.new, details.new { color: var(--bs-success-text-emphasis); background-color: var(--bs-success-bg-subtle); border-color: var(--bs-success-border-subtle); } .admonition.example, details.example { color: var(--bs-info-text-emphasis); background-color: var(--bs-info-bg-subtle); border-color: var(--bs-info-border-subtle); } /* Definition List styles */ dd { padding-left: 20px; } .card-body svg { width: 100%; padding: 0 50px; height: auto; } /* Homepage */ body.homepage>div.container>div.row>div.col-md-3 { display: none; } body.homepage>div.container>div.row>div.col-md-9 { margin-left: 0; flex: 0 0 100%; max-width: 100%; } /* mkdocstrings */ .doc-object { padding-left: 10px; border-left: 4px solid var(--bs-light-border-subtle); } .doc-contents .field-body p:first-of-type { display: inline; } .doc-label-class-attribute, .doc-label-instance-attribute { display: none; } h2.doc-heading { font-size: 1.5rem; } h3.doc-heading { font-size: 1.4rem; } h4.doc-heading { font-size: 1.3rem; } h5.doc-heading { font-size: 1.2rem; } .doc-contents { padding-left: 0; } mkdocs-1.6.1/docs/getting-started.md0000664000175000017500000001460114664334534017256 0ustar carstencarsten# Getting Started with MkDocs An introductory tutorial! --- ## Installation To install MkDocs, run the following command from the command line: ```bash pip install mkdocs ``` For more details, see the [Installation Guide]. ## Creating a new project Getting started is super easy. To create a new project, run the following command from the command line: ```bash mkdocs new my-project cd my-project ``` Take a moment to review the initial project that has been created for you. ![The initial MkDocs layout](img/initial-layout.png) There's a single configuration file named `mkdocs.yml`, and a folder named `docs` that will contain your documentation source files (`docs` is the default value for the [docs_dir] configuration setting). Right now the `docs` folder just contains a single documentation page, named `index.md`. MkDocs comes with a built-in dev-server that lets you preview your documentation as you work on it. Make sure you're in the same directory as the `mkdocs.yml` configuration file, and then start the server by running the `mkdocs serve` command: ```console $ mkdocs serve INFO - Building documentation... INFO - Cleaning site directory INFO - Documentation built in 0.22 seconds INFO - [15:50:43] Watching paths for changes: 'docs', 'mkdocs.yml' INFO - [15:50:43] Serving on http://127.0.0.1:8000/ ``` Open up in your browser, and you'll see the default home page being displayed: ![The MkDocs live server](img/screenshot.png) The dev-server also supports auto-reloading, and will rebuild your documentation whenever anything in the configuration file, documentation directory, or theme directory changes. Open the `docs/index.md` document in your text editor of choice, change the initial heading to `MkLorum`, and save your changes. Your browser will auto-reload and you should see your updated documentation immediately. Now try editing the configuration file: `mkdocs.yml`. Change the [`site_name`][site_name] setting to `MkLorum` and save the file. ```yaml site_name: MkLorum ``` Your browser should immediately reload, and you'll see your new site name take effect. ![The site_name setting](img/site-name.png) NOTE: The [`site_name`][site_name] configuration option is the only required option in your configuration file. ## Adding pages Now add a second page to your documentation: ```bash curl 'https://jaspervdj.be/lorem-markdownum/markdown.txt' > docs/about.md ``` As our documentation site will include some navigation headers, you may want to edit the configuration file and add some information about the order, title, and nesting of each page in the navigation header by adding a [`nav`][nav] setting: ```yaml site_name: MkLorum nav: - Home: index.md - About: about.md ``` Save your changes and you'll now see a navigation bar with `Home` and `About` items on the left as well as `Search`, `Previous`, and `Next` items on the right. ![Screenshot](img/multipage.png) Try the menu items and navigate back and forth between pages. Then click on `Search`. A search dialog will appear, allowing you to search for any text on any page. Notice that the search results include every occurrence of the search term on the site and links directly to the section of the page in which the search term appears. You get all of that with no effort or configuration on your part! ![Screenshot](img/search.png) ## Theming our documentation Now change the configuration file to alter how the documentation is displayed by changing the theme. Edit the `mkdocs.yml` file and add a [`theme`][theme] setting: ```yaml site_name: MkLorum nav: - Home: index.md - About: about.md theme: readthedocs ``` Save your changes, and you'll see the ReadTheDocs theme being used. ![Screenshot](img/readthedocs.png) ## Changing the Favicon Icon By default, MkDocs uses the [MkDocs favicon] icon. To use a different icon, create an `img` subdirectory in the `docs` directory and copy your custom `favicon.ico` file to that directory. MkDocs will automatically detect and use that file as your favicon icon. [MkDocs favicon]: img/favicon.ico ## Building the site That's looking good. You're ready to deploy the first pass of your `MkLorum` documentation. First build the documentation: ```bash mkdocs build ``` This will create a new directory, named `site`. Take a look inside the directory: ```console $ ls site about fonts index.html license search.html css img js mkdocs sitemap.xml ``` Notice that your source documentation has been output as two HTML files named `index.html` and `about/index.html`. You also have various other media that's been copied into the `site` directory as part of the documentation theme. You even have a `sitemap.xml` file and `mkdocs/search_index.json`. If you're using source code control such as `git` you probably don't want to check your documentation builds into the repository. Add a line containing `site/` to your `.gitignore` file. ```bash echo "site/" >> .gitignore ``` If you're using another source code control tool you'll want to check its documentation on how to ignore specific directories. ## Other Commands and Options There are various other commands and options available. For a complete list of commands, use the `--help` flag: ```bash mkdocs --help ``` To view a list of options available on a given command, use the `--help` flag with that command. For example, to get a list of all options available for the `build` command run the following: ```bash mkdocs build --help ``` ## Deploying The documentation site that you just built only uses static files so you'll be able to host it from pretty much anywhere. Simply upload the contents of the entire `site` directory to wherever you're hosting your website from and you're done. For specific instructions on a number of common hosts, see the [Deploying your Docs][deploy] page. ## Getting help See the [User Guide] for more complete documentation of all of MkDocs' features. To get help with MkDocs, please use the [GitHub discussions] or [GitHub issues]. [Installation Guide]: user-guide/installation.md [docs_dir]: user-guide/configuration.md#docs_dir [deploy]: user-guide/deploying-your-docs.md [nav]: user-guide/configuration.md#nav [GitHub discussions]: https://github.com/mkdocs/mkdocs/discussions [GitHub issues]: https://github.com/mkdocs/mkdocs/issues [site_name]: user-guide/configuration.md#site_name [theme]: user-guide/configuration.md#theme [User Guide]: user-guide/README.md mkdocs-1.6.1/docs/about/0000775000175000017500000000000014664334534014737 5ustar carstencarstenmkdocs-1.6.1/docs/about/contributing.md0000664000175000017500000000003114664334534017762 0ustar carstencarsten--8<-- "CONTRIBUTING.md" mkdocs-1.6.1/docs/about/license.md0000664000175000017500000000307714664334534016712 0ustar carstencarsten# License The legal stuff. --- ## Included projects Themes used under license from the ReadTheDocs projects. * ReadTheDocs theme - [View license](https://github.com/snide/sphinx_rtd_theme/blob/master/LICENSE). Many thanks to the authors and contributors of those wonderful projects. ## MkDocs License (BSD) Copyright © 2014, Tom Christie. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. mkdocs-1.6.1/docs/about/release-notes.md0000664000175000017500000033020514664334534020032 0ustar carstencarsten# Release Notes --- ## Upgrading To upgrade MkDocs to the latest version, use pip: ```bash pip install -U mkdocs ``` You can determine your currently installed version using `mkdocs --version`: ```console $ mkdocs --version mkdocs, version 1.5.0 from /path/to/mkdocs (Python 3.10) ``` ## Maintenance team The current and past members of the MkDocs team. * [@tomchristie](https://github.com/tomchristie/) * [@d0ugal](https://github.com/d0ugal/) * [@waylan](https://github.com/waylan/) * [@oprypin](https://github.com/oprypin/) * [@ultrabug](https://github.com/ultrabug/) ## Version 1.6.1 (2024-08-30) ### Fixed * Fix build error when environment variable `SOURCE_DATE_EPOCH=0` is set. #3795 * Fix build error when `mkdocs_theme.yml` config is empty. #3700 * Support `python -W` and `PYTHONWARNINGS` instead of overriding the configuration. #3809 * Support running with Docker under strict mode, by removing `0.0.0.0` dev server warning. #3784 * Drop unnecessary `changefreq` from `sitemap.xml`. #3629 * Fix JavaScript console error when closing menu dropdown. #3774 * Fix JavaScript console error that occur on repeated clicks. #3730 * Fix JavaScript console error that can occur on dropdown selections. #3694 ### Added * Added translations for Dutch. #3804 * Added and updated translations for Chinese (Simplified). #3684 ## Version 1.6.0 (2024-04-20) ### Local preview * `mkdocs serve` no longer locks up the browser when more than 5 tabs are open. This is achieved by closing the polling connection whenever a tab becomes inactive. Background tabs will no longer auto-reload either - that will instead happen as soon the tab is opened again. Context: #3391 * New flag `serve --open` to open the site in a browser. After the first build is finished, this flag will cause the default OS Web browser to be opened at the home page of the local site. Context: #3500 #### Drafts > DANGER: **Changed from version 1.5.** **The `exclude_docs` config was split up into two separate concepts.** The `exclude_docs` config no longer has any special behavior for `mkdocs serve` - it now always completely excludes the listed documents from the site. If you wish to use the "drafts" functionality like the `exclude_docs` key used to do in MkDocs 1.5, please switch to the **new config key `draft_docs`**. See [documentation](../user-guide/configuration.md#exclude_docs). Other changes: * Reduce warning levels when a "draft" page has a link to a non-existent file. Context: #3449 ### Update to deduction of page titles MkDocs 1.5 had a change in behavior in deducing the page titles from the first heading. Unfortunately this could cause unescaped HTML tags or entities to appear in edge cases. Now tags are always fully sanitized from the title. Though it still remains the case that [`Page.title`][mkdocs.structure.pages.Page.title] is expected to contain HTML entities and is passed directly to the themes. Images (notably, emojis in some extensions) get preserved in the title only through their `alt` attribute's value. Context: #3564, #3578 ### Themes * Built-in themes now also support Polish language (#3613) #### "readthedocs" theme * Fix: "readthedocs" theme can now correctly handle deeply nested nav configurations (over 2 levels deep), without confusedly expanding all sections and jumping around vertically. (#3464) * Fix: "readthedocs" theme now shows a link to the repository (with a generic logo) even when isn't one of the 3 known hosters. (#3435) * "readthedocs" theme now also has translation for the word "theme" in the footer that mistakenly always remained in English. (#3613, #3625) #### "mkdocs" theme The "mkdocs" theme got a big update to a newer version of Bootstrap, meaning a slight overhaul of styles. Colors (most notably of admonitions) have much better contrast. The "mkdocs" theme now has support for dark mode - both automatic (based on the OS/browser setting) and with a manual toggle. Both of these options are **not** enabled by default and need to be configured explicitly. See `color_mode`, `user_color_mode_toggle` in [**documentation**](../user-guide/choosing-your-theme.md#mkdocs). > WARNING: **Possible breaking change.** > > jQuery is no longer included into the "mkdocs" theme. If you were relying on it in your scripts, you will need to separately add it first (into mkdocs.yml) as an extra script: > > ```yaml > extra_javascript: > - https://code.jquery.com/jquery-3.7.1.min.js > ``` > > Or even better if the script file is copied and included from your docs dir. Context: #3493, #3649 ### Configuration #### New "`enabled`" setting for all plugins You may have seen some plugins take up the convention of having a setting `enabled: false` (or usually controlled through an environment variable) to make the plugin do nothing. Now *every* plugin has this setting. Plugins can still *choose* to implement this config themselves and decide how it behaves (and unless they drop older versions of MkDocs, they still should for now), but now there's always a fallback for every plugin. See [**documentation**](../user-guide/configuration.md/#enabled-option). Context: #3395 ### Validation #### Validation of hyperlinks between pages ##### Absolute links > Historically, within Markdown, MkDocs only recognized **relative** links that lead to another physical `*.md` document (or media file). This is a good convention to follow because then the source pages are also freely browsable without MkDocs, for example on GitHub. Whereas absolute links were left unmodified (making them often not work as expected or, more recently, warned against). If you dislike having to always use relative links, now you can opt into absolute links and have them work correctly. If you set the setting `validation.links.absolute_links` to the new value `relative_to_docs`, all Markdown links starting with `/` will be understood as being relative to the `docs_dir` root. The links will then be validated for correctness according to all the other rules that were already working for relative links in prior versions of MkDocs. For the HTML output, these links will still be turned relative so that the site still works reliably. So, now any document (e.g. "dir1/foo.md") can link to the document "dir2/bar.md" as `[link](/dir2/bar.md)`, in addition to the previously only correct way `[link](../dir2/bar.md)`. You have to enable the setting, though. The default is still to just skip any processing of such links. See [**documentation**](../user-guide/configuration.md#validation-of-absolute-links). Context: #3485 ###### Absolute links within nav Absolute links within the `nav:` config were also always skipped. It is now possible to also validate them in the same way with `validation.nav.absolute_links`. Though it makes a bit less sense because then the syntax is simply redundant with the syntax that comes without the leading slash. ##### Anchors There is a new config setting that is recommended to enable warnings for: ```yaml validation: anchors: warn ``` Example of a warning that this can produce: ```text WARNING - Doc file 'foo/example.md' contains a link '../bar.md#some-heading', but the doc 'foo/bar.md' does not contain an anchor '#some-heading'. ``` Any of the below methods of declaring an anchor will be detected by MkDocs: ```markdown ## Heading producing an anchor ## Another heading {#custom-anchor-for-heading-using-attr-list} [](){#markdown-anchor-using-attr-list} ``` Plugins and extensions that insert anchors, in order to be compatible with this, need to be developed as treeprocessors that insert `etree` elements as their mode of operation, rather than raw HTML which is undetectable for this purpose. If you as a user are dealing with falsely reported missing anchors and there's no way to resolve this, you can choose to disable these messages by setting this option to `ignore` (and they are at INFO level by default anyway). See [**documentation**](../user-guide/configuration.md#validation). Context: #3463 Other changes: * When the `nav` config is not specified at all, the `not_in_nav` setting (originally added in 1.5.0) gains an additional behavior: documents covered by `not_in_nav` will not be part of the automatically deduced navigation. Context: #3443 * Fix: the `!relative` YAML tag for `markdown_extensions` (originally added in 1.5.0) - it was broken in many typical use cases. See [**documentation**](../user-guide/configuration.md#paths-relative-to-the-current-file-or-site). Context: #3466 * Config validation now exits on first error, to avoid showing bizarre secondary errors. Context: #3437 * MkDocs used to shorten error messages for unexpected errors such as "file not found", but that is no longer the case, the full error message and stack trace will be possible to see (unless the error has a proper handler, of course). Context: #3445 ### Upgrades for plugin developers #### Plugins can add multiple handlers for the same event type, at multiple priorities See [`mkdocs.plugins.CombinedEvent`][] in [**documentation**](../dev-guide/plugins.md#event-priorities). Context: #3448 #### Enabling true generated files and expanding the [`File`][mkdocs.structure.files.File] API See [**documentation**][mkdocs.structure.files.File]. * There is a new pair of attributes [`File.content_string`][mkdocs.structure.files.File.content_string]/[`content_bytes`][mkdocs.structure.files.File.content_bytes] that becomes the official API for obtaining the content of a file and is used by MkDocs itself. This replaces the old approach where one had to manually read the file located at [`File.abs_src_path`][mkdocs.structure.files.File.abs_src_path], although that is still the primary action that these new attributes do under the hood. * The content of a `File` can be backed by a string and no longer has to be a real existing file at `abs_src_path`. It is possible to **set** the attribute `File.content_string` or `File.content_bytes` and it will take precedence over `abs_src_path`. Further, `abs_src_path` is no longer guaranteed to be present and can be `None` instead. MkDocs itself still uses physical files in all cases, but eventually plugins will appear that don't populate this attribute. * There is a new constructor [`File.generated()`][mkdocs.structure.files.File.generated] that should be used by plugins instead of the `File()` constructor. It is much more convenient because one doesn't need to manually look up the values such as `docs_dir` and `use_directory_urls`. Its signature is one of: ```python f = File.generated(config: MkDocsConfig, src_uri: str, content: str | bytes) f = File.generated(config: MkDocsConfig, src_uri: str, abs_src_path: str) ``` This way, it is now extremely easy to add a virtual file even from a hook: ```python def on_files(files: Files, config: MkDocsConfig): files.append(File.generated(config, 'fake/path.md', content="Hello, world!")) ``` For large content it is still best to use physical files, but one no longer needs to manipulate the path by providing a fake unused `docs_dir`. * There is a new attribute [`File.generated_by`][mkdocs.structure.files.File.generated_by] that arose by convention - for generated files it should be set to the name of the plugin (the key in the `plugins:` collection) that produced this file. This attribute is populated automatically when using the `File.generated()` constructor. * It is possible to set the [`edit_uri`][mkdocs.structure.files.File.edit_uri] attribute of a `File`, for example from a plugin or hook, to make it different from the default (equal to `src_uri`), and this will be reflected in the edit link of the document. This can be useful because some pages aren't backed by a real file and are instead created dynamically from some other source file or script. So a hook could set the `edit_uri` to that source file or script accordingly. * The `File` object now stores its original `src_dir`, `dest_dir`, `use_directory_urls` values as attributes. * Fields of `File` are computed on demand but cached. Only the three above attributes are primary ones, and partly also [`dest_uri`][mkdocs.structure.files.File.dest_uri]. This way, it is possible to, for example, overwrite `dest_uri` of a `File`, and `abs_dest_path` will be calculated based on it. However you need to clear the attribute first using `del f.abs_dest_path`, because the values are cached. * `File` instances are now hashable (can be used as keys of a `dict`). Two files can no longer be considered "equal" unless it's the exact same instance of `File`. Other changes: * The internal storage of `File` objects inside a `Files` object has been reworked, so any plugins that choose to access `Files._files` will get a deprecation warning. * The order of `File` objects inside a `Files` collection is no longer significant when automatically inferring the `nav`. They get forcibly sorted according to the default alphabetic order. Context: #3451, #3463 ### Hooks and debugging * Hook files can now import adjacent *.py files using the `import` statement. Previously this was possible to achieve only through a `sys.path` workaround. See the new mention in [documentation](../user-guide/configuration.md#hooks). Context: #3568 * Verbose `-v` log shows the sequence of plugin events in more detail - shows each invoked plugin one by one, not only the event type. Context: #3444 ### Deprecations * Python 3.7 is no longer supported, Python 3.12 is officially supported. Context: #3429 * The theme config file `mkdocs_theme.yml` no longer executes YAML tags. Context: #3465 * The plugin event `on_page_read_source` is soft-deprecated because there is always a better alternative to it (see the new `File` API or just `on_page_markdown`, depending on the desired interaction). When multiple plugins/hooks apply this event handler, they trample over each other, so now there is a warning in that case. See [**documentation**](../dev-guide/plugins.md#on_page_read_source). Context: #3503 #### API deprecations * It is no longer allowed to set `File.page` to a type other than `Page` or a subclass thereof. Context: #3443 - following the deprecation in version 1.5.3 and #3381. * `Theme._vars` is deprecated - use `theme['foo']` instead of `theme._vars['foo']` * `utils`: `modified_time()`, `get_html_path()`, `get_url_path()`, `is_html_file()`, `is_template_file()` are removed. `path_to_url()` is deprecated. * `LiveReloadServer.watch()` no longer accepts a custom callback. Context: #3429 ### Misc * The `sitemap.xml.gz` file is slightly more reproducible and no longer changes on every build, but instead only once per day (upon a date change). Context: #3460 Other small improvements; see [commit log](https://github.com/mkdocs/mkdocs/compare/1.5.3...1.6.0). ## Version 1.5.3 (2023-09-18) * Fix `mkdocs serve` sometimes locking up all browser tabs when navigating quickly (#3390) * Add many new supported languages for "search" plugin - update lunr-languages to 1.12.0 (#3334) * Bugfix (regression in 1.5.0): In "readthedocs" theme the styling of "breadcrumb navigation" was broken for nested pages (#3383) * Built-in themes now also support Chinese (Traditional, Taiwan) language (#3154) * Plugins can now set `File.page` to their own subclass of `Page`. There is also now a warning if `File.page` is set to anything other than a strict subclass of `Page`. (#3367, #3381) Note that just instantiating a `Page` [sets the file automatically](https://github.com/mkdocs/mkdocs/blob/f94ab3f62d0416d484d81a0c695c8ca86ab3b975/mkdocs/structure/pages.py#L34), so care needs to be taken not to create an unneeded `Page`. Other small improvements; see [commit log](https://github.com/mkdocs/mkdocs/compare/1.5.2...1.5.3). ## Version 1.5.2 (2023-08-02) * Bugfix (regression in 1.5.0): Restore functionality of `--no-livereload`. (#3320) * Bugfix (regression in 1.5.0): The new page title detection would sometimes be unable to drop anchorlinks - fix that. (#3325) * Partly bring back pre-1.5 API: `extra_javascript` items will once again be mostly strings, and only sometimes `ExtraScriptValue` (when the extra `script` functionality is used). Plugins should be free to append strings to `config.extra_javascript`, but when reading the values, they must still make sure to read it as `str(value)` in case it is an `ExtraScriptValue` item. For querying the attributes such as `.type` you need to check `isinstance` first. Static type checking will guide you in that. (#3324) See [commit log](https://github.com/mkdocs/mkdocs/compare/1.5.1...1.5.2). ## Version 1.5.1 (2023-07-28) * Bugfix (regression in 1.5.0): Make it possible to treat `ExtraScriptValue` as a path. This lets some plugins still work despite the breaking change. * Bugfix (regression in 1.5.0): Prevent errors for special setups that have 3 conflicting files, such as `index.html`, `index.md` *and* `README.md` (#3314) See [commit log](https://github.com/mkdocs/mkdocs/compare/1.5.0...1.5.1). ## Version 1.5.0 (2023-07-26) ### New command `mkdocs get-deps` This command guesses the Python dependencies that a MkDocs site requires in order to build. It simply prints the PyPI packages that need to be installed. In the terminal it can be combined directly with an installation command as follows: ```bash pip install $(mkdocs get-deps) ``` The idea is that right after running this command, you can directly follow it up with `mkdocs build` and it will almost always "just work", without needing to think which dependencies to install. The way it works is by scanning `mkdocs.yml` for `themes:`, `plugins:`, `markdown_extensions:` items and doing a reverse lookup based on a large list of known projects (catalog, see below). Of course, you're welcome to use a "virtualenv" with such a command. Also note that for environments that require stability (for example CI) directly installing deps in this way is not a very reliable approach as it precludes dependency pinning. The command allows overriding which config file is used (instead of `mkdocs.yml` in the current directory) as well as which catalog of projects is used (instead of downloading it from the default location). See [`mkdocs get-deps --help`](../user-guide/cli.md#mkdocs-get-deps). Context: #3205 ### MkDocs has an official catalog of plugins Check out and add all your general-purpose plugins, themes and extensions there, so that they can be looked up through `mkdocs get-deps`. This was renamed from "best-of-mkdocs" and received significant updates. In addition to `pip` installation commands, the page now shows the config boilerplate needed to add a plugin. ### Expanded validation of links #### Validated links in Markdown > As you may know, within Markdown, MkDocs really only recognizes **relative** links that lead to another physical `*.md` document (or media file). This is a good convention to follow because then the source pages are also freely browsable without MkDocs, for example on GitHub. MkDocs knows that in the output it should turn those `*.md` links into `*.html` as appropriate, and it would also always tell you if such a link doesn't actually lead to an existing file. However, the checks for links were really loose and had many concessions. For example, links that started with `/` ("absolute") and links that *ended* with `/` were left as is and no warning was shown, which allowed such very fragile links to sneak into site sources: links that happen to work right now but get no validation and links that confusingly need an extra level of `..` with `use_directory_urls` enabled. Now, in addition to validating relative links, MkDocs will print `INFO` messages for unrecognized types of links (including absolute links). They look like this: ```text INFO - Doc file 'example.md' contains an absolute link '/foo/bar/', it was left as is. Did you mean 'foo/bar.md'? ``` If you don't want any changes, not even the `INFO` messages, and wish to revert to the silence from MkDocs 1.4, add the following configs to `mkdocs.yml` (**not** recommended): ```yaml validation: absolute_links: ignore unrecognized_links: ignore ``` If, on the opposite end, you want these to print `WARNING` messages and cause `mkdocs build --strict` to fail, you are recommended to configure these to `warn` instead. See [**documentation**](../user-guide/configuration.md#validation) for actual recommended settings and more details. Context: #3283 #### Validated links in the nav Links to documents in the [`nav` configuration](../user-guide/configuration.md#nav) now also have configurable validation, though with no changes to the defaults. You are welcomed to turn on validation for files that were forgotten and excluded from the nav. Example: ```yaml validation: nav: omitted_files: warn absolute_links: warn ``` This can make the following message appear with the `WARNING` level (as opposed to `INFO` as the only option previously), thus being caught by `mkdocs --strict`: ```text INFO - The following pages exist in the docs directory, but are not included in the "nav" configuration: ... ``` See [**documentation**](../user-guide/configuration.md#validation). Context: #3283, #1755 #### Mark docs as intentionally "not in nav" There is a new config `not_in_nav`. With it, you can mark particular patterns of files as exempt from the above `omitted_files` warning type; no messages will be printed for them anymore. (As a corollary, setting this config to `*` is the same as ignoring `omitted_files` altogether.) This is useful if you generally like these warnings about files that were forgotten from the nav, but still have some pages that you knowingly excluded from the nav and just want to build and copy them. The `not_in_nav` config is a set of gitignore-like patterns. See the next section for an explanation of another such config. See [**documentation**](../user-guide/configuration.md#not_in_nav). Context: #3224, #1888 ### Excluded doc files There is a new config `exclude_docs` that tells MkDocs to ignore certain files under `docs_dir` and *not* copy them to the built `site` as part of the build. Historically MkDocs would always ignore file names starting with a dot, and that's all. Now this is all configurable: you can un-ignore these and/or ignore more patterns of files. The `exclude_docs` config follows the [.gitignore pattern format](https://git-scm.com/docs/gitignore#_pattern_format) and is specified as a multiline YAML string. For example: ```yaml exclude_docs: | *.py # Excludes e.g. docs/hooks/foo.py /requirements.txt # Excludes docs/requirements.txt ``` Validation of links (described above) is also affected by `exclude_docs`. During `mkdocs serve` the messages explain the interaction, whereas during `mkdocs build` excluded files are as good as nonexistent. As an additional related change, if you have a need to have both `README.md` and `index.md` files in a directory but publish only one of them, you can now use this feature to explicitly ignore one of them and avoid warnings. See [**documentation**](../user-guide/configuration.md#exclude_docs). Context: #3224 #### Drafts > DANGER: **Dropped from version 1.6:** > > The `exclude_docs` config no longer applies the "drafts" functionality for `mkdocs serve`. This was renamed to [`draft_docs`](../user-guide/configuration.md#draft_docs). The `exclude_docs` config has another behavior: all excluded Markdown pages will still be previewable in `mkdocs serve` only, just with a "DRAFT" marker on top. Then they will of course be excluded from `mkdocs build` or `gh-deploy`. If you don't want `mkdocs serve` to have any special behaviors and instead want it to perform completely normal builds, use the new flag `mkdocs serve --clean`. See [**documentation**](../user-guide/configuration.md#exclude_docs). Context: #3224 ### `mkdocs serve` no longer exits after build errors If there was an error (from the config or a plugin) during a site re-build, `mkdocs serve` used to exit after printing a stack trace. Now it will simply freeze the server until the author edits the files to fix the problem, and then will keep reloading. But errors on the *first* build still cause `mkdocs serve` to exit, as before. Context: #3255 ### Page titles will be deduced from any style of heading MkDocs always had the ability to infer the title of a page (if it's not specified in the `nav`) based on the first line of the document, if it had a `

` heading that had to written starting with the exact character `#`. Now any style of Markdown heading is understood (#1886). Due to the previous simplistic parsing, it was also impossible to use `attr_list` attributes in that first heading (#3136). Now that is also fixed. ### Markdown extensions can use paths relative to the current document This is aimed at extensions such as `pymdownx.snippets` or `markdown_include.include`: you can now specify their include paths to be relative to the currently rendered Markdown document, or relative to the `docs_dir`. Any other extension can of course also make use of the new `!relative` YAML tag. ```yaml markdown_extensions: - pymdownx.snippets: base_path: !relative ``` See [**documentation**](../user-guide/configuration.md#paths-relative-to-the-current-file-or-site). Context: #2154, #3258 ### `' class BuildTests(unittest.TestCase): @tempdir({"test.css": "div { color: red; }"}) def test_serves_normal_file(self, site_dir): with testing_server(site_dir) as server: headers, output = do_request(server, "GET /test.css") self.assertEqual(output, "div { color: red; }") self.assertEqual(headers["_status"], "200 OK") self.assertEqual(headers.get("content-length"), str(len(output))) @tempdir({"docs/foo.docs": "docs1", "mkdocs.yml": "yml1"}) @tempdir({"foo.site": "original"}) def test_basic_rebuild(self, site_dir, origin_dir): docs_dir = Path(origin_dir, "docs") started_building = threading.Event() def rebuild(): started_building.set() Path(site_dir, "foo.site").write_text( Path(docs_dir, "foo.docs").read_text() + Path(origin_dir, "mkdocs.yml").read_text() ) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir, rebuild) server.watch(Path(origin_dir, "mkdocs.yml"), rebuild) time.sleep(0.01) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "original") Path(docs_dir, "foo.docs").write_text("docs2") self.assertTrue(started_building.wait(timeout=10)) started_building.clear() _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2yml1") Path(origin_dir, "mkdocs.yml").write_text("yml2") self.assertTrue(started_building.wait(timeout=10)) started_building.clear() _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2yml2") @tempdir({"foo.docs": "a"}) @tempdir({"foo.site": "original"}) def test_rebuild_after_delete(self, site_dir, docs_dir): started_building = threading.Event() def rebuild(): started_building.set() Path(site_dir, "foo.site").unlink() with testing_server(site_dir, rebuild) as server: server.watch(docs_dir, rebuild) time.sleep(0.01) Path(docs_dir, "foo.docs").write_text("b") self.assertTrue(started_building.wait(timeout=10)) with self.assertLogs("mkdocs.livereload"): _, output = do_request(server, "GET /foo.site") self.assertIn("404", output) @tempdir({"aaa": "something"}) def test_rebuild_after_rename(self, site_dir): started_building = threading.Event() with testing_server(site_dir, started_building.set) as server: server.watch(site_dir) time.sleep(0.01) Path(site_dir, "aaa").rename(Path(site_dir, "bbb")) self.assertTrue(started_building.wait(timeout=10)) @tempdir() def test_rebuild_on_edit(self, site_dir): started_building = threading.Event() with open(Path(site_dir, "test"), "wb") as f: time.sleep(0.01) with testing_server(site_dir, started_building.set) as server: server.watch(site_dir) time.sleep(0.01) f.write(b"hi\n") f.flush() self.assertTrue(started_building.wait(timeout=10)) @tempdir() def test_unwatch(self, site_dir): started_building = threading.Event() with testing_server(site_dir, started_building.set) as server: with self.assertRaises(KeyError): server.unwatch(site_dir) server.watch(site_dir) server.watch(site_dir) server.unwatch(site_dir) time.sleep(0.01) Path(site_dir, "foo").write_text("foo") self.assertTrue(started_building.wait(timeout=10)) started_building.clear() server.unwatch(site_dir) Path(site_dir, "foo").write_text("bar") self.assertFalse(started_building.wait(timeout=0.5)) with self.assertRaises(KeyError): server.unwatch(site_dir) @tempdir({"foo.docs": "docs1"}) @tempdir({"foo.extra": "extra1"}) @tempdir({"foo.site": "original"}) def test_multiple_dirs_can_cause_rebuild(self, site_dir, extra_dir, docs_dir): started_building = threading.Barrier(2) def rebuild(): started_building.wait(timeout=10) content1 = Path(docs_dir, "foo.docs").read_text() content2 = Path(extra_dir, "foo.extra").read_text() Path(site_dir, "foo.site").write_text(content1 + content2) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir) server.watch(extra_dir) time.sleep(0.01) Path(docs_dir, "foo.docs").write_text("docs2") started_building.wait(timeout=10) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2extra1") Path(extra_dir, "foo.extra").write_text("extra2") started_building.wait(timeout=10) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2extra2") @tempdir({"foo.docs": "docs1"}) @tempdir({"foo.extra": "extra1"}) @tempdir({"foo.site": "original"}) def test_multiple_dirs_changes_rebuild_only_once(self, site_dir, extra_dir, docs_dir): started_building = threading.Event() def rebuild(): self.assertFalse(started_building.is_set()) started_building.set() content1 = Path(docs_dir, "foo.docs").read_text() content2 = Path(extra_dir, "foo.extra").read_text() Path(site_dir, "foo.site").write_text(content1 + content2) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir) server.watch(extra_dir) time.sleep(0.01) _, output = do_request(server, "GET /foo.site") Path(docs_dir, "foo.docs").write_text("docs2") Path(extra_dir, "foo.extra").write_text("extra2") self.assertTrue(started_building.wait(timeout=10)) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2extra2") @tempdir({"foo.docs": "a"}) @tempdir({"foo.site": "original"}) def test_change_is_detected_while_building(self, site_dir, docs_dir): before_finished_building = threading.Barrier(2) can_finish_building = threading.Event() def rebuild(): content = Path(docs_dir, "foo.docs").read_text() Path(site_dir, "foo.site").write_text(content * 5) before_finished_building.wait(timeout=10) self.assertTrue(can_finish_building.wait(timeout=10)) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir) time.sleep(0.01) Path(docs_dir, "foo.docs").write_text("b") before_finished_building.wait(timeout=10) Path(docs_dir, "foo.docs").write_text("c") can_finish_building.set() _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "bbbbb") before_finished_building.wait(timeout=10) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "ccccc") @tempdir({"foo.docs": "a"}) @tempdir({"foo.site": "original"}) def test_recovers_from_build_error(self, site_dir, docs_dir): started_building = threading.Event() build_count = 0 def rebuild(): started_building.set() nonlocal build_count build_count += 1 if build_count == 1: raise ValueError("oh no") else: content = Path(docs_dir, "foo.docs").read_text() Path(site_dir, "foo.site").write_text(content * 5) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir) time.sleep(0.01) err = io.StringIO() with contextlib.redirect_stderr(err), self.assertLogs("mkdocs.livereload") as cm: Path(docs_dir, "foo.docs").write_text("b") started_building.wait(timeout=10) Path(docs_dir, "foo.docs").write_text("c") _, output = do_request(server, "GET /foo.site") self.assertIn("ValueError: oh no", err.getvalue()) self.assertRegex( "\n".join(cm.output), r".*Detected file changes\n" r".*An error happened during the rebuild.*\n" r".*Detected file changes\n", ) self.assertEqual(output, "ccccc") @tempdir( { "normal.html": "hello", "no_body.html": "

hi", "empty.html": "", "multi_body.html": "foobar", } ) def test_serves_modified_html(self, site_dir): with testing_server(site_dir) as server: server.watch(site_dir) headers, output = do_request(server, "GET /normal.html") self.assertRegex(output, fr"^hello{SCRIPT_REGEX}$") self.assertEqual(headers.get("content-type"), "text/html") self.assertEqual(headers.get("content-length"), str(len(output))) _, output = do_request(server, "GET /no_body.html") self.assertRegex(output, fr"^

hi{SCRIPT_REGEX}$") headers, output = do_request(server, "GET /empty.html") self.assertRegex(output, fr"^{SCRIPT_REGEX}$") self.assertEqual(headers.get("content-length"), str(len(output))) _, output = do_request(server, "GET /multi_body.html") self.assertRegex(output, fr"^foobar{SCRIPT_REGEX}$") @tempdir({"index.html": "aaa", "foo/index.html": "bbb"}) def test_serves_directory_index(self, site_dir): with testing_server(site_dir) as server: headers, output = do_request(server, "GET /") self.assertRegex(output, r"^aaa$") self.assertEqual(headers["_status"], "200 OK") self.assertEqual(headers.get("content-type"), "text/html") self.assertEqual(headers.get("content-length"), str(len(output))) for path in "/foo/", "/foo/index.html": _, output = do_request(server, f"GET {path}") self.assertRegex(output, r"^bbb$") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /foo/index.html/") self.assertEqual(headers["_status"], "404 Not Found") @tempdir( { "foo/bar/index.html": "aaa", "foo/測試/index.html": "bbb", } ) def test_redirects_to_directory(self, site_dir): with testing_server(site_dir, mount_path="/sub") as server: with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /sub/foo/bar") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/sub/foo/bar/") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /sub/foo/測試") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/sub/foo/%E6%B8%AC%E8%A9%A6/") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /sub/foo/%E6%B8%AC%E8%A9%A6") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/sub/foo/%E6%B8%AC%E8%A9%A6/") @tempdir({"я.html": "aaa", "测试2/index.html": "bbb"}) def test_serves_with_unicode_characters(self, site_dir): with testing_server(site_dir) as server: _, output = do_request(server, "GET /я.html") self.assertRegex(output, r"^aaa$") _, output = do_request(server, "GET /%D1%8F.html") self.assertRegex(output, r"^aaa$") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /%D1.html") self.assertEqual(headers["_status"], "404 Not Found") _, output = do_request(server, "GET /测试2/") self.assertRegex(output, r"^bbb$") _, output = do_request(server, "GET /%E6%B5%8B%E8%AF%952/index.html") self.assertRegex(output, r"^bbb$") @tempdir() def test_serves_polling_instantly(self, site_dir): with testing_server(site_dir) as server: _, output = do_request(server, "GET /livereload/0/0") self.assertTrue(output.isdigit()) @tempdir() def test_serves_polling_with_mount_path(self, site_dir): with testing_server(site_dir, mount_path="/test/f*o") as server: _, output = do_request(server, "GET /livereload/0/0") self.assertTrue(output.isdigit()) @tempdir() @tempdir() def test_serves_polling_after_event(self, site_dir, docs_dir): with testing_server(site_dir) as server: initial_epoch = server._visible_epoch server.watch(docs_dir) time.sleep(0.01) Path(docs_dir, "foo.docs").write_text("b") _, output = do_request(server, f"GET /livereload/{initial_epoch}/0") self.assertNotEqual(server._visible_epoch, initial_epoch) self.assertEqual(output, str(server._visible_epoch)) @tempdir() def test_serves_polling_with_timeout(self, site_dir): with testing_server(site_dir) as server: server.poll_response_timeout = 0.2 initial_epoch = server._visible_epoch start_time = time.monotonic() _, output = do_request(server, f"GET /livereload/{initial_epoch}/0") self.assertGreaterEqual(time.monotonic(), start_time + 0.2) self.assertEqual(output, str(initial_epoch)) @tempdir() def test_error_handler(self, site_dir): with testing_server(site_dir) as server: server.error_handler = lambda code: b"[%d]" % code with self.assertLogs("mkdocs.livereload") as cm: headers, output = do_request(server, "GET /missing") self.assertEqual(headers["_status"], "404 Not Found") self.assertEqual(output, "[404]") self.assertRegex( "\n".join(cm.output), r'^WARNING:mkdocs.livereload:.*"GET /missing HTTP/1.1" code 404', ) @tempdir() def test_bad_error_handler(self, site_dir): with testing_server(site_dir) as server: server.error_handler = lambda code: 0 / 0 with self.assertLogs("mkdocs.livereload") as cm: headers, output = do_request(server, "GET /missing") self.assertEqual(headers["_status"], "404 Not Found") self.assertIn("404", output) self.assertRegex( "\n".join(cm.output), r"Failed to render an error message[\s\S]+/missing.+code 404" ) @tempdir( { "test.html": "\nhi", "test.xml": '\n', "test.css": "div { color: red; }", "test.js": "use strict;", "test.json": '{"a": "b"}', } ) def test_mime_types(self, site_dir): with testing_server(site_dir) as server: headers, _ = do_request(server, "GET /test.html") self.assertEqual(headers.get("content-type"), "text/html") headers, _ = do_request(server, "GET /test.xml") self.assertIn(headers.get("content-type"), ["text/xml", "application/xml"]) headers, _ = do_request(server, "GET /test.css") self.assertEqual(headers.get("content-type"), "text/css") headers, _ = do_request(server, "GET /test.js") self.assertEqual(headers.get("content-type"), "application/javascript") headers, _ = do_request(server, "GET /test.json") self.assertEqual(headers.get("content-type"), "application/json") @tempdir({"index.html": "aaa", "sub/sub.html": "bbb"}) def test_serves_from_mount_path(self, site_dir): with testing_server(site_dir, mount_path="/sub") as server: headers, output = do_request(server, "GET /sub/") self.assertRegex(output, r"^aaa$") self.assertEqual(headers.get("content-type"), "text/html") _, output = do_request(server, "GET /sub/sub/sub.html") self.assertRegex(output, r"^bbb$") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /sub/sub.html") self.assertEqual(headers["_status"], "404 Not Found") @tempdir() def test_redirects_to_mount_path(self, site_dir): with testing_server(site_dir, mount_path="/mount/path") as server: with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/mount/path/") @tempdir() def test_redirects_to_unicode_mount_path(self, site_dir): with testing_server(site_dir, mount_path="/mount/測試") as server: with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/mount/%E6%B8%AC%E8%A9%A6/") @tempdir({"mkdocs.yml": "original", "mkdocs2.yml": "original"}, prefix="tmp_dir") @tempdir(prefix="origin_dir") @tempdir({"subdir/foo.md": "original"}, prefix="dest_docs_dir") def test_watches_direct_symlinks(self, dest_docs_dir, origin_dir, tmp_dir): try: Path(origin_dir, "docs").symlink_to(dest_docs_dir, target_is_directory=True) Path(origin_dir, "mkdocs.yml").symlink_to(Path(tmp_dir, "mkdocs.yml")) except NotImplementedError: # PyPy on Windows self.skipTest("Creating symlinks not supported") started_building = threading.Event() def wait_for_build(): result = started_building.wait(timeout=10) started_building.clear() with self.assertLogs("mkdocs.livereload"): do_request(server, "GET /") return result with testing_server(tmp_dir, started_building.set) as server: server.watch(Path(origin_dir, "docs")) server.watch(Path(origin_dir, "mkdocs.yml")) time.sleep(0.01) Path(origin_dir, "unrelated.md").write_text("foo") self.assertFalse(started_building.wait(timeout=0.5)) Path(tmp_dir, "mkdocs.yml").write_text("edited") self.assertTrue(wait_for_build()) Path(dest_docs_dir, "subdir", "foo.md").write_text("edited") self.assertTrue(wait_for_build()) @tempdir(["file_dest_1.md", "file_dest_2.md", "file_dest_unused.md"], prefix="tmp_dir") @tempdir(["file_under.md"], prefix="dir_to_link_to") @tempdir() def test_watches_through_symlinks(self, docs_dir, dir_to_link_to, tmp_dir): try: Path(docs_dir, "link1.md").symlink_to(Path(tmp_dir, "file_dest_1.md")) Path(docs_dir, "linked_dir").symlink_to(dir_to_link_to, target_is_directory=True) Path(dir_to_link_to, "sublink.md").symlink_to(Path(tmp_dir, "file_dest_2.md")) except NotImplementedError: # PyPy on Windows self.skipTest("Creating symlinks not supported") started_building = threading.Event() def wait_for_build(): result = started_building.wait(timeout=10) started_building.clear() with self.assertLogs("mkdocs.livereload"): do_request(server, "GET /") return result with testing_server(docs_dir, started_building.set) as server: server.watch(docs_dir) time.sleep(0.01) Path(tmp_dir, "file_dest_1.md").write_text("edited") self.assertTrue(wait_for_build()) Path(dir_to_link_to, "file_under.md").write_text("edited") self.assertTrue(wait_for_build()) Path(tmp_dir, "file_dest_2.md").write_text("edited") self.assertTrue(wait_for_build()) Path(docs_dir, "link1.md").unlink() self.assertTrue(wait_for_build()) Path(tmp_dir, "file_dest_unused.md").write_text("edited") self.assertFalse(started_building.wait(timeout=0.5)) @tempdir(prefix="site_dir") @tempdir(["docs/unused.md", "README.md"], prefix="origin_dir") def test_watches_through_relative_symlinks(self, origin_dir, site_dir): docs_dir = Path(origin_dir, "docs") with change_dir(docs_dir): try: Path(docs_dir, "README.md").symlink_to(Path("..", "README.md")) except NotImplementedError: # PyPy on Windows self.skipTest("Creating symlinks not supported") started_building = threading.Event() with testing_server(docs_dir, started_building.set) as server: server.watch(docs_dir) time.sleep(0.01) Path(origin_dir, "README.md").write_text("edited") self.assertTrue(started_building.wait(timeout=10)) @tempdir() def test_watch_with_broken_symlinks(self, docs_dir): Path(docs_dir, "subdir").mkdir() try: if sys.platform != "win32": Path(docs_dir, "subdir", "circular").symlink_to(Path(docs_dir)) Path(docs_dir, "broken_1").symlink_to(Path(docs_dir, "oh no")) Path(docs_dir, "broken_2").symlink_to(Path(docs_dir, "oh no"), target_is_directory=True) Path(docs_dir, "broken_3").symlink_to(Path(docs_dir, "broken_2")) except NotImplementedError: # PyPy on Windows self.skipTest("Creating symlinks not supported") started_building = threading.Event() with testing_server(docs_dir, started_building.set) as server: server.watch(docs_dir) time.sleep(0.01) Path(docs_dir, "subdir", "test").write_text("test") self.assertTrue(started_building.wait(timeout=10)) mkdocs-1.6.1/mkdocs/tests/structure/0000775000175000017500000000000014664334534017357 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/structure/file_tests.py0000664000175000017500000010330014664334534022067 0ustar carstencarstenimport os import sys import unittest from unittest import mock from mkdocs.structure.files import File, Files, _sort_files, file_sort_key, get_files from mkdocs.tests.base import PathAssertionMixin, load_config, tempdir class TestFiles(PathAssertionMixin, unittest.TestCase): @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_src_path_windows(self): f = File('foo\\a.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo/a.md') self.assertEqual(f.src_path, 'foo\\a.md') f.src_uri = 'foo/b.md' self.assertEqual(f.src_uri, 'foo/b.md') self.assertEqual(f.src_path, 'foo\\b.md') f.src_path = 'foo/c.md' self.assertEqual(f.src_uri, 'foo/c.md') self.assertEqual(f.src_path, 'foo\\c.md') f.src_path = 'foo\\d.md' self.assertEqual(f.src_uri, 'foo/d.md') self.assertEqual(f.src_path, 'foo\\d.md') f.src_uri = 'foo\\e.md' self.assertEqual(f.src_uri, 'foo\\e.md') self.assertEqual(f.src_path, 'foo\\e.md') def test_sort_files(self): self.assertEqual( _sort_files(['b.md', 'bb.md', 'a.md', 'index.md', 'aa.md']), ['index.md', 'a.md', 'aa.md', 'b.md', 'bb.md'], ) self.assertEqual( _sort_files(['b.md', 'index.html', 'a.md', 'index.md']), ['index.html', 'index.md', 'a.md', 'b.md'], ) self.assertEqual( _sort_files(['a.md', 'index.md', 'b.md', 'index.html']), ['index.html', 'index.md', 'a.md', 'b.md'], ) self.assertEqual( _sort_files(['.md', '_.md', 'a.md', 'index.md', '1.md']), ['index.md', '.md', '1.md', '_.md', 'a.md'], ) self.assertEqual( _sort_files(['a.md', 'b.md', 'a.md']), ['a.md', 'a.md', 'b.md'], ) self.assertEqual( _sort_files(['A.md', 'B.md', 'README.md']), ['README.md', 'A.md', 'B.md'], ) def test_file_sort_key(self): for case in [ ["a/b.md", "b/index.md", "b/a.md"], ["SUMMARY.md", "foo/z.md", "foo/bar/README.md", "foo/bar/index.md", "foo/bar/a.md"], ]: with self.subTest(case): files = [File(f, "", "", use_directory_urls=True) for f in case] for a, b in zip(files, files[1:]): self.assertLess(file_sort_key(a), file_sort_key(b)) def test_md_file(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File('foo.md', '/path/to/docs', '/path/to/site', use_directory_urls) self.assertEqual(f.src_uri, 'foo.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo.md') if use_directory_urls: self.assertEqual(f.dest_uri, 'foo/index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/index.html') self.assertEqual(f.url, 'foo/') else: self.assertEqual(f.dest_uri, 'foo.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo.html') self.assertEqual(f.url, 'foo.html') self.assertEqual(f.name, 'foo') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_file_nested(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File('foo/bar.md', '/path/to/docs', '/path/to/site', use_directory_urls) self.assertEqual(f.src_uri, 'foo/bar.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.md') if use_directory_urls: self.assertEqual(f.dest_uri, 'foo/bar/index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar/index.html') self.assertEqual(f.url, 'foo/bar/') else: self.assertEqual(f.dest_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.html') self.assertEqual(f.url, 'foo/bar.html') self.assertEqual(f.name, 'bar') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_index_file(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File('index.md', '/path/to/docs', '/path/to/site', use_directory_urls) self.assertEqual(f.src_uri, 'index.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/index.md') self.assertEqual(f.dest_uri, 'index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/index.html') if use_directory_urls: self.assertEqual(f.url, './') else: self.assertEqual(f.url, 'index.html') self.assertEqual(f.name, 'index') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_readme_index_file(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File('README.md', '/path/to/docs', '/path/to/site', use_directory_urls) self.assertEqual(f.src_uri, 'README.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/README.md') self.assertEqual(f.dest_uri, 'index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/index.html') if use_directory_urls: self.assertEqual(f.url, './') else: self.assertEqual(f.url, 'index.html') self.assertEqual(f.name, 'index') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_index_file_nested(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File('foo/index.md', '/path/to/docs', '/path/to/site', use_directory_urls) self.assertEqual(f.src_uri, 'foo/index.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/index.md') self.assertEqual(f.dest_uri, 'foo/index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/index.html') if use_directory_urls: self.assertEqual(f.url, 'foo/') else: self.assertEqual(f.url, 'foo/index.html') self.assertEqual(f.name, 'index') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_static_file(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File('foo/bar.html', '/path/to/docs', '/path/to/site', use_directory_urls) self.assertEqual(f.src_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.html') self.assertEqual(f.dest_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.html') self.assertEqual(f.url, 'foo/bar.html') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertTrue(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_media_file(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File('foo/bar.jpg', '/path/to/docs', '/path/to/site', use_directory_urls) self.assertEqual(f.src_uri, 'foo/bar.jpg') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.jpg') self.assertEqual(f.dest_uri, 'foo/bar.jpg') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.jpg') self.assertEqual(f.url, 'foo/bar.jpg') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertTrue(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_javascript_file(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File('foo/bar.js', '/path/to/docs', '/path/to/site', use_directory_urls) self.assertEqual(f.src_uri, 'foo/bar.js') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.js') self.assertEqual(f.dest_uri, 'foo/bar.js') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.js') self.assertEqual(f.url, 'foo/bar.js') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertTrue(f.is_media_file()) self.assertTrue(f.is_javascript()) self.assertFalse(f.is_css()) def test_css_file(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File('foo/bar.css', '/path/to/docs', '/path/to/site', use_directory_urls) self.assertEqual(f.src_uri, 'foo/bar.css') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.css') self.assertEqual(f.dest_uri, 'foo/bar.css') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.css') self.assertEqual(f.url, 'foo/bar.css') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertTrue(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertTrue(f.is_css()) def test_file_name_with_space(self): f = File('foo bar.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo bar.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo bar.md') self.assertEqual(f.dest_uri, 'foo bar.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo bar.html') self.assertEqual(f.url, 'foo%20bar.html') self.assertEqual(f.name, 'foo bar') def test_file_name_with_custom_dest_uri(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File( 'stuff/foo.md', src_dir='/path/to/docs', dest_dir='/path/to/site', use_directory_urls=use_directory_urls, dest_uri='stuff/1-foo/index.html', ) self.assertEqual(f.src_uri, 'stuff/foo.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/stuff/foo.md') self.assertEqual(f.dest_uri, 'stuff/1-foo/index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/stuff/1-foo/index.html') if use_directory_urls: self.assertEqual(f.url, 'stuff/1-foo/') else: self.assertEqual(f.url, 'stuff/1-foo/index.html') self.assertEqual(f.name, 'foo') def test_file_overwrite_attrs(self): f = File('foo.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo.md') f.abs_src_path = '/tmp/foo.md' self.assertPathsEqual(f.abs_src_path, '/tmp/foo.md') del f.abs_src_path self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo.md') f.dest_uri = 'a.html' self.assertPathsEqual(f.abs_dest_path, '/path/to/site/a.html') self.assertEqual(f.url, 'a.html') f.abs_dest_path = '/path/to/site/b.html' self.assertPathsEqual(f.abs_dest_path, '/path/to/site/b.html') self.assertEqual(f.url, 'a.html') del f.url del f.dest_uri del f.abs_dest_path self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo.html') self.assertTrue(f.is_documentation_page()) f.src_uri = 'foo.html' del f.name self.assertFalse(f.is_documentation_page()) def test_generated_file(self): f = File( 'foo/bar.md', src_dir=None, dest_dir='/path/to/site', use_directory_urls=False, ) f.content_string = 'вміст' f.generated_by = 'some-plugin' self.assertEqual(f.generated_by, 'some-plugin') self.assertEqual(f.src_uri, 'foo/bar.md') self.assertIsNone(f.abs_src_path) self.assertIsNone(f.src_dir) self.assertEqual(f.dest_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.html') self.assertEqual(f.content_string, 'вміст') self.assertEqual(f.edit_uri, None) @tempdir(files={'x.md': 'вміст'}) def test_generated_file_constructor(self, tdir) -> None: config = load_config(site_dir='/path/to/site', use_directory_urls=False) config.plugins._current_plugin = 'foo' for f in [ File.generated(config, 'foo/bar.md', content='вміст'), File.generated(config, 'foo/bar.md', content='вміст'.encode()), File.generated(config, 'foo/bar.md', abs_src_path=os.path.join(tdir, 'x.md')), ]: self.assertEqual(f.src_uri, 'foo/bar.md') self.assertIsNone(f.src_dir) self.assertEqual(f.dest_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_dest_path, os.path.abspath('/path/to/site/foo/bar.html')) self.assertEqual(f.content_string, 'вміст') self.assertEqual(f.content_bytes, 'вміст'.encode()) self.assertEqual(f.edit_uri, None) def test_files(self): fs = [ File('index.md', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.md', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.html', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.js', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.css', '/path/to/docs', '/path/to/site', use_directory_urls=True), ] files = Files(fs) self.assertEqual(list(files), fs) self.assertEqual(len(files), 6) self.assertEqual(files.documentation_pages(), [fs[0], fs[1]]) self.assertEqual(files.static_pages(), [fs[2]]) self.assertEqual(files.media_files(), [fs[3], fs[4], fs[5]]) self.assertEqual(files.javascript_files(), [fs[4]]) self.assertEqual(files.css_files(), [fs[5]]) self.assertEqual(files.get_file_from_path('foo/bar.jpg'), fs[3]) self.assertEqual(files.get_file_from_path('foo/bar.jpg'), fs[3]) self.assertEqual(files.get_file_from_path('missing.jpg'), None) self.assertTrue(fs[2].src_uri in files.src_uris) extra_file = File('extra.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertFalse(extra_file.src_uri in files.src_uris) files.append(extra_file) self.assertEqual(len(files), 7) self.assertTrue(extra_file.src_uri in files.src_uris) self.assertEqual(files.documentation_pages(), [fs[0], fs[1], extra_file]) files.remove(fs[1]) self.assertEqual(files.documentation_pages(), [fs[0], extra_file]) @tempdir( files=[ 'favicon.ico', 'index.md', ] ) @tempdir( files=[ 'base.html', 'favicon.ico', 'style.css', 'foo.md', 'README', '.ignore.txt', '.ignore/file.txt', 'foo/.ignore.txt', 'foo/.ignore/file.txt', ] ) def test_add_files_from_theme(self, tdir, ddir): config = load_config(docs_dir=ddir, theme={'name': None, 'custom_dir': tdir}) env = config.theme.get_env() files = get_files(config) self.assertEqual( [file.src_uri for file in files], ['index.md', 'favicon.ico'], ) files.add_files_from_theme(env, config) self.assertEqual( [file.src_uri for file in files], ['index.md', 'favicon.ico', 'style.css'], ) # Ensure theme file does not override docs_dir file self.assertEqual( files.get_file_from_path('favicon.ico').abs_src_path, os.path.normpath(os.path.join(ddir, 'favicon.ico')), ) def test_get_relative_url_use_directory_urls(self): to_files = [ 'index.md', 'foo/index.md', 'foo/bar/index.md', 'foo/bar/baz/index.md', 'foo.md', 'foo/bar.md', 'foo/bar/baz.md', ] to_file_urls = [ './', 'foo/', 'foo/bar/', 'foo/bar/baz/', 'foo/', 'foo/bar/', 'foo/bar/baz/', ] from_file = File('img.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(from_file.url, 'img.jpg') expected = [ 'img.jpg', # img.jpg relative to . '../img.jpg', # img.jpg relative to foo/ '../../img.jpg', # img.jpg relative to foo/bar/ '../../../img.jpg', # img.jpg relative to foo/bar/baz/ '../img.jpg', # img.jpg relative to foo '../../img.jpg', # img.jpg relative to foo/bar '../../../img.jpg', # img.jpg relative to foo/bar/baz ] for i, filename in enumerate(to_files): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('foo/img.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(from_file.url, 'foo/img.jpg') expected = [ 'foo/img.jpg', # foo/img.jpg relative to . 'img.jpg', # foo/img.jpg relative to foo/ '../img.jpg', # foo/img.jpg relative to foo/bar/ '../../img.jpg', # foo/img.jpg relative to foo/bar/baz/ 'img.jpg', # foo/img.jpg relative to foo '../img.jpg', # foo/img.jpg relative to foo/bar '../../img.jpg', # foo/img.jpg relative to foo/bar/baz ] for i, filename in enumerate(to_files): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('index.html', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(from_file.url, './') expected = [ './', # . relative to . '../', # . relative to foo/ '../../', # . relative to foo/bar/ '../../../', # . relative to foo/bar/baz/ '../', # . relative to foo '../../', # . relative to foo/bar '../../../', # . relative to foo/bar/baz ] for i, filename in enumerate(to_files): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('file.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(from_file.url, 'file/') expected = [ 'file/', # file relative to . '../file/', # file relative to foo/ '../../file/', # file relative to foo/bar/ '../../../file/', # file relative to foo/bar/baz/ '../file/', # file relative to foo '../../file/', # file relative to foo/bar '../../../file/', # file relative to foo/bar/baz ] for i, filename in enumerate(to_files): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) def test_get_relative_url(self): to_files = [ 'index.md', 'foo/index.md', 'foo/bar/index.md', 'foo/bar/baz/index.md', 'foo.md', 'foo/bar.md', 'foo/bar/baz.md', ] to_file_urls = [ 'index.html', 'foo/index.html', 'foo/bar/index.html', 'foo/bar/baz/index.html', 'foo.html', 'foo/bar.html', 'foo/bar/baz.html', ] from_file = File('img.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(from_file.url, 'img.jpg') expected = [ 'img.jpg', # img.jpg relative to . '../img.jpg', # img.jpg relative to foo/ '../../img.jpg', # img.jpg relative to foo/bar/ '../../../img.jpg', # img.jpg relative to foo/bar/baz/ 'img.jpg', # img.jpg relative to foo.html '../img.jpg', # img.jpg relative to foo/bar.html '../../img.jpg', # img.jpg relative to foo/bar/baz.html ] for i, filename in enumerate(to_files): with self.subTest(from_file=from_file.src_path, to_file=filename): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('foo/img.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(from_file.url, 'foo/img.jpg') expected = [ 'foo/img.jpg', # foo/img.jpg relative to . 'img.jpg', # foo/img.jpg relative to foo/ '../img.jpg', # foo/img.jpg relative to foo/bar/ '../../img.jpg', # foo/img.jpg relative to foo/bar/baz/ 'foo/img.jpg', # foo/img.jpg relative to foo.html 'img.jpg', # foo/img.jpg relative to foo/bar.html '../img.jpg', # foo/img.jpg relative to foo/bar/baz.html ] for i, filename in enumerate(to_files): with self.subTest(from_file=from_file.src_path, to_file=filename): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('index.html', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(from_file.url, 'index.html') expected = [ 'index.html', # index.html relative to . '../index.html', # index.html relative to foo/ '../../index.html', # index.html relative to foo/bar/ '../../../index.html', # index.html relative to foo/bar/baz/ 'index.html', # index.html relative to foo.html '../index.html', # index.html relative to foo/bar.html '../../index.html', # index.html relative to foo/bar/baz.html ] for i, filename in enumerate(to_files): with self.subTest(from_file=from_file.src_path, to_file=filename): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('file.html', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(from_file.url, 'file.html') expected = [ 'file.html', # file.html relative to . '../file.html', # file.html relative to foo/ '../../file.html', # file.html relative to foo/bar/ '../../../file.html', # file.html relative to foo/bar/baz/ 'file.html', # file.html relative to foo.html '../file.html', # file.html relative to foo/bar.html '../../file.html', # file.html relative to foo/bar/baz.html ] for i, filename in enumerate(to_files): with self.subTest(from_file=from_file.src_path, to_file=filename): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) @tempdir( files=[ 'index.md', 'readme.md', 'bar.css', 'bar.html', 'bar.jpg', 'bar.js', 'bar.md', '.dotfile', 'templates/foo.html', ] ) def test_get_files(self, tdir): config = load_config(docs_dir=tdir, extra_css=['bar.css'], extra_javascript=['bar.js']) files = get_files(config) self.assertIsInstance(files, Files) self.assertEqual( [f.src_uri for f in files if f.inclusion.is_included()], ['index.md', 'bar.css', 'bar.html', 'bar.jpg', 'bar.js', 'bar.md', 'readme.md'], ) self.assertEqual( [f.src_uri for f in files if f.inclusion.is_excluded()], ['.dotfile', 'templates/foo.html'], ) @tempdir( files=[ 'README.md', 'foo.md', ] ) def test_get_files_include_readme_without_index(self, tdir): config = load_config(docs_dir=tdir) files = get_files(config) self.assertIsInstance(files, Files) self.assertEqual([f.src_uri for f in files], ['README.md', 'foo.md']) @tempdir( files=[ 'index.md', 'README.md', 'foo.md', ] ) def test_get_files_exclude_readme_with_index(self, tdir): config = load_config(docs_dir=tdir) with self.assertLogs('mkdocs') as cm: files = get_files(config) self.assertRegex( '\n'.join(cm.output), r"^WARNING:mkdocs.structure.files:" r"Excluding 'README.md' from the site because it conflicts with 'index.md'.$", ) self.assertIsInstance(files, Files) self.assertEqual([f.src_uri for f in files], ['index.md', 'foo.md']) @tempdir() @tempdir(files={'test.txt': 'source content'}) def test_copy_file(self, src_dir, dest_dir): file = File('test.txt', src_dir, dest_dir, use_directory_urls=False) dest_path = os.path.join(dest_dir, 'test.txt') self.assertPathNotExists(dest_path) file.copy_file() self.assertPathIsFile(dest_path) @tempdir(files={'test.txt': 'source content'}) def test_copy_file_same_file(self, dest_dir): file = File('test.txt', dest_dir, dest_dir, use_directory_urls=False) dest_path = os.path.join(dest_dir, 'test.txt') file.copy_file() self.assertPathIsFile(dest_path) with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'source content') @tempdir(files={'test.txt': 'destination content'}) @tempdir(files={'test.txt': 'source content'}) def test_copy_file_clean_modified(self, src_dir, dest_dir): file = File('test.txt', src_dir, dest_dir, use_directory_urls=False) self.assertEqual(file.content_string, 'source content') self.assertEqual(file.content_bytes, b'source content') file.is_modified = mock.Mock(return_value=True) dest_path = os.path.join(dest_dir, 'test.txt') file.copy_file(dirty=False) self.assertPathIsFile(dest_path) with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'source content') @tempdir(files={'test.txt': 'destination content'}) @tempdir(files={'test.txt': 'source content'}) def test_copy_file_dirty_modified(self, src_dir, dest_dir): file = File('test.txt', src_dir, dest_dir, use_directory_urls=False) file.is_modified = mock.Mock(return_value=True) dest_path = os.path.join(dest_dir, 'test.txt') file.copy_file(dirty=True) self.assertPathIsFile(dest_path) with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'source content') @tempdir(files={'test.txt': 'destination content'}) @tempdir(files={'test.txt': 'source content'}) def test_copy_file_dirty_not_modified(self, src_dir, dest_dir): file = File('test.txt', src_dir, dest_dir, use_directory_urls=False) file.is_modified = mock.Mock(return_value=False) dest_path = os.path.join(dest_dir, 'test.txt') file.copy_file(dirty=True) self.assertPathIsFile(dest_path) with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'destination content') @tempdir() def test_copy_file_from_content(self, dest_dir): file = File('test.txt', src_dir='unused', dest_dir=dest_dir, use_directory_urls=False) file.content_string = 'ö' self.assertIsNone(file.abs_src_path) dest_path = os.path.join(dest_dir, 'test.txt') file.copy_file() self.assertPathIsFile(dest_path) with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'ö') file.content_bytes = b'\x01\x02\x03' file.copy_file() with open(dest_path, 'rb') as f: self.assertEqual(f.read(), b'\x01\x02\x03') file.content_bytes = b'\xc3\xb6' file.copy_file() with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'ö') def test_files_append_remove_src_paths(self): fs = [ File('index.md', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.md', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.html', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.js', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.css', '/path/to/docs', '/path/to/site', use_directory_urls=True), ] files = Files(fs) self.assertEqual(len(files), 6) self.assertEqual(len(files.src_uris), 6) extra_file = File('extra.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertFalse(extra_file.src_uri in files.src_uris) files.append(extra_file) self.assertEqual(len(files), 7) self.assertEqual(len(files.src_uris), 7) self.assertTrue(extra_file.src_uri in files.src_uris) files.remove(extra_file) self.assertEqual(len(files), 6) self.assertEqual(len(files.src_uris), 6) self.assertFalse(extra_file.src_uri in files.src_uris) def test_files_move_to_end(self): fs = [ File('a.md', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('b.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True), ] files = Files(fs) self.assertEqual(len(files), 2) self.assertEqual(list(files)[0].src_uri, 'a.md') with self.assertWarns(DeprecationWarning): files.append(fs[0]) self.assertEqual(len(files), 2) self.assertEqual(list(files)[0].src_uri, 'b.jpg') self.assertEqual(list(files)[1].src_uri, 'a.md') mkdocs-1.6.1/mkdocs/tests/structure/__init__.py0000664000175000017500000000000014664334534021456 0ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/structure/nav_tests.py0000664000175000017500000005463314664334534021752 0ustar carstencarsten#!/usr/bin/env python import sys import unittest from mkdocs.structure.files import File, Files, set_exclusions from mkdocs.structure.nav import Section, _get_by_type, get_navigation from mkdocs.structure.pages import Page from mkdocs.tests.base import dedent, load_config class SiteNavigationTests(unittest.TestCase): maxDiff = None def test_simple_nav(self): nav_cfg = [ {'Home': 'index.md'}, {'About': 'about.md'}, ] expected = dedent( """ Page(title='Home', url='/') Page(title='About', url='/about/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File(list(item.values())[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) self.assertEqual(repr(site_navigation.homepage), "Page(title='Home', url='/')") def test_nav_no_directory_urls(self): nav_cfg = [ {'Home': 'index.md'}, {'About': 'about.md'}, ] expected = dedent( """ Page(title='Home', url='/index.html') Page(title='About', url='/about.html') """ ) cfg = load_config(nav=nav_cfg, use_directory_urls=False, site_url='http://example.com/') fs = [ File(list(item.values())[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) self.assertEqual(repr(site_navigation.homepage), "Page(title='Home', url='/index.html')") def test_nav_missing_page(self): nav_cfg = [ {'Home': 'index.md'}, ] expected = dedent( """ Page(title='Home', url='/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('page_not_in_nav.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 1) self.assertEqual(len(site_navigation.pages), 1) for file in files: self.assertIsInstance(file.page, Page) def test_nav_no_title(self): nav_cfg = [ 'index.md', {'About': 'about.md'}, ] expected = dedent( """ Page(title=[blank], url='/') Page(title='About', url='/about/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File(nav_cfg[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File(nav_cfg[1]['About'], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) def test_nav_external_links(self): nav_cfg = [ {'Home': 'index.md'}, {'Local': '/local.html'}, {'External': 'http://example.com/external.html'}, ] expected = dedent( """ Page(title='Home', url='/') Link(title='Local', url='/local.html') Link(title='External', url='http://example.com/external.html') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs', level='DEBUG') as cm: site_navigation = get_navigation(files, cfg) self.assertEqual( cm.output, [ "INFO:mkdocs.structure.nav:An absolute path to '/local.html' is included in the 'nav' configuration, which presumably points to an external resource.", "DEBUG:mkdocs.structure.nav:An external link to 'http://example.com/external.html' is included in the 'nav' configuration.", ], ) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 1) def test_nav_absolute_links_with_validation(self): nav_cfg = [ {'Home': 'index.md'}, {'Local page': '/foo/bar.md'}, {'Local link': '/local.md'}, {'External': 'http://example.com/external.html'}, ] expected = dedent( """ Page(title='Home', url='/') Page(title='Local page', url='/foo/bar/') Link(title='Local link', url='/local.md') Link(title='External', url='http://example.com/external.html') """ ) cfg = load_config( nav=nav_cfg, site_url='http://example.com/', validation=dict(nav=dict(absolute_links='relative_to_docs')), ) fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('foo/bar.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) with self.assertLogs('mkdocs', level='DEBUG') as cm: site_navigation = get_navigation(files, cfg) self.assertEqual( cm.output, [ "WARNING:mkdocs.structure.nav:A reference to '/local.md' is included in the 'nav' configuration, which is not found in the documentation files.", "DEBUG:mkdocs.structure.nav:An external link to 'http://example.com/external.html' is included in the 'nav' configuration.", ], ) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 4) self.assertEqual(len(site_navigation.pages), 2) def test_nav_bad_links(self): nav_cfg = [ {'Home': 'index.md'}, {'Missing': 'missing.html'}, {'Bad External': 'example.com'}, ] expected = dedent( """ Page(title='Home', url='/') Link(title='Missing', url='missing.html') Link(title='Bad External', url='example.com') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs') as cm: site_navigation = get_navigation(files, cfg) self.assertEqual( cm.output, [ "WARNING:mkdocs.structure.nav:A reference to 'missing.html' is included in the 'nav' configuration, which is not found in the documentation files.", "WARNING:mkdocs.structure.nav:A reference to 'example.com' is included in the 'nav' configuration, which is not found in the documentation files.", ], ) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 1) def test_indented_nav(self): nav_cfg = [ {'Home': 'index.md'}, { 'API Guide': [ {'Running': 'api-guide/running.md'}, {'Testing': 'api-guide/testing.md'}, {'Debugging': 'api-guide/debugging.md'}, { 'Advanced': [ {'Part 1': 'api-guide/advanced/part-1.md'}, ] }, ] }, { 'About': [ {'Release notes': 'about/release-notes.md'}, {'License': '/license.html'}, ] }, {'External': 'https://example.com/'}, ] expected = dedent( """ Page(title='Home', url='/') Section(title='API Guide') Page(title='Running', url='/api-guide/running/') Page(title='Testing', url='/api-guide/testing/') Page(title='Debugging', url='/api-guide/debugging/') Section(title='Advanced') Page(title='Part 1', url='/api-guide/advanced/part-1/') Section(title='About') Page(title='Release notes', url='/about/release-notes/') Link(title='License', url='/license.html') Link(title='External', url='https://example.com/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ 'index.md', 'api-guide/running.md', 'api-guide/testing.md', 'api-guide/debugging.md', 'api-guide/advanced/part-1.md', 'about/release-notes.md', ] files = Files([File(s, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for s in fs]) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 4) self.assertEqual(len(site_navigation.pages), 6) self.assertEqual(repr(site_navigation.homepage), "Page(title='Home', url='/')") self.assertIsNone(site_navigation.items[0].parent) self.assertEqual(site_navigation.items[0].ancestors, []) self.assertIsNone(site_navigation.items[1].parent) self.assertEqual(site_navigation.items[1].ancestors, []) self.assertEqual(len(site_navigation.items[1].children), 4) self.assertEqual( repr(site_navigation.items[1].children[0].parent), "Section(title='API Guide')" ) self.assertEqual(site_navigation.items[1].children[0].ancestors, [site_navigation.items[1]]) self.assertEqual( repr(site_navigation.items[1].children[1].parent), "Section(title='API Guide')" ) self.assertEqual(site_navigation.items[1].children[1].ancestors, [site_navigation.items[1]]) self.assertEqual( repr(site_navigation.items[1].children[2].parent), "Section(title='API Guide')" ) self.assertEqual(site_navigation.items[1].children[2].ancestors, [site_navigation.items[1]]) self.assertEqual( repr(site_navigation.items[1].children[3].parent), "Section(title='API Guide')" ) self.assertEqual(site_navigation.items[1].children[3].ancestors, [site_navigation.items[1]]) self.assertEqual(len(site_navigation.items[1].children[3].children), 1) self.assertEqual( repr(site_navigation.items[1].children[3].children[0].parent), "Section(title='Advanced')", ) self.assertEqual( site_navigation.items[1].children[3].children[0].ancestors, [site_navigation.items[1].children[3], site_navigation.items[1]], ) self.assertIsNone(site_navigation.items[2].parent) self.assertEqual(len(site_navigation.items[2].children), 2) self.assertEqual( repr(site_navigation.items[2].children[0].parent), "Section(title='About')" ) self.assertEqual(site_navigation.items[2].children[0].ancestors, [site_navigation.items[2]]) self.assertEqual( repr(site_navigation.items[2].children[1].parent), "Section(title='About')" ) self.assertEqual(site_navigation.items[2].children[1].ancestors, [site_navigation.items[2]]) self.assertIsNone(site_navigation.items[3].parent) self.assertEqual(site_navigation.items[3].ancestors, []) self.assertIsNone(site_navigation.items[3].children) def test_nested_ungrouped_nav(self): nav_cfg = [ {'Home': 'index.md'}, {'Contact': 'about/contact.md'}, {'License Title': 'about/sub/license.md'}, ] expected = dedent( """ Page(title='Home', url='/') Page(title='Contact', url='/about/contact/') Page(title='License Title', url='/about/sub/license/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File(list(item.values())[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 3) def test_nested_ungrouped_nav_no_titles(self): nav_cfg = [ 'index.md', 'about/contact.md', 'about/sub/license.md', ] expected = dedent( """ Page(title=[blank], url='/') Page(title=[blank], url='/about/contact/') Page(title=[blank], url='/about/sub/license/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File(item, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 3) self.assertEqual(repr(site_navigation.homepage), "Page(title=[blank], url='/')") @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_nested_ungrouped_no_titles_windows(self): nav_cfg = [ 'index.md', 'about\\contact.md', 'about\\sub\\license.md', ] expected = dedent( """ Page(title=[blank], url='/') Page(title=[blank], url='/about/contact/') Page(title=[blank], url='/about/sub/license/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File(item, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 3) def test_nav_from_files(self): expected = dedent( """ Page(title=[blank], url='/') Page(title=[blank], url='/about/') """ ) cfg = load_config(site_url='http://example.com/') fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('about.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) self.assertEqual(repr(site_navigation.homepage), "Page(title=[blank], url='/')") def test_nav_from_nested_files(self): expected = dedent( """ Page(title=[blank], url='/') Section(title='About') Page(title=[blank], url='/about/license/') Page(title=[blank], url='/about/release-notes/') Section(title='Api guide') Page(title=[blank], url='/api-guide/debugging/') Page(title=[blank], url='/api-guide/running/') Page(title=[blank], url='/api-guide/testing/') Section(title='Advanced') Page(title=[blank], url='/api-guide/advanced/part-1/') """ ) cfg = load_config(site_url='http://example.com/') fs = [ 'index.md', 'about/license.md', 'about/release-notes.md', 'api-guide/debugging.md', 'api-guide/running.md', 'api-guide/testing.md', 'api-guide/advanced/part-1.md', ] files = Files([File(s, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for s in fs]) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 7) self.assertEqual(repr(site_navigation.homepage), "Page(title=[blank], url='/')") def test_nav_with_exclusion(self): expected = dedent( """ Page(title=[blank], url='index.html') Section(title='About') Page(title=[blank], url='about/license.html') Page(title=[blank], url='about/release-notes.html') Section(title='Api guide') Page(title=[blank], url='api-guide/running.html') Page(title=[blank], url='api-guide/testing.html') """ ) cfg = load_config(use_directory_urls=False, not_in_nav='*ging.md\n/foo.md\n') fs = [ 'index.md', 'foo.md', 'about/license.md', 'about/release-notes.md', 'api-guide/debugging.md', 'api-guide/running.md', 'api-guide/testing.md', ] files = Files([File(s, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for s in fs]) set_exclusions(files, cfg) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 5) def test_nav_page_subclass(self): class PageSubclass(Page): pass nav_cfg = [ {'Home': 'index.md'}, {'About': 'about.md'}, ] expected = dedent( """ PageSubclass(title=[blank], url='/') PageSubclass(title=[blank], url='/about/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File(list(item.values())[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg ] files = Files(fs) for file in files: PageSubclass(None, file, cfg) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) self.assertEqual(repr(site_navigation.homepage), "PageSubclass(title=[blank], url='/')") def test_active(self): nav_cfg = [ {'Home': 'index.md'}, { 'API Guide': [ {'Running': 'api-guide/running.md'}, {'Testing': 'api-guide/testing.md'}, {'Debugging': 'api-guide/debugging.md'}, { 'Advanced': [ {'Part 1': 'api-guide/advanced/part-1.md'}, ] }, ] }, { 'About': [ {'Release notes': 'about/release-notes.md'}, {'License': 'about/license.md'}, ] }, ] cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ 'index.md', 'api-guide/running.md', 'api-guide/testing.md', 'api-guide/debugging.md', 'api-guide/advanced/part-1.md', 'about/release-notes.md', 'about/license.md', ] files = Files([File(s, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for s in fs]) site_navigation = get_navigation(files, cfg) # Confirm nothing is active self.assertTrue(all(page.active is False for page in site_navigation.pages)) self.assertTrue(all(item.active is False for item in site_navigation.items)) # Activate site_navigation.items[1].children[3].children[0].active = True # Confirm ancestors are activated self.assertTrue(site_navigation.items[1].children[3].children[0].active) self.assertTrue(site_navigation.items[1].children[3].active) self.assertTrue(site_navigation.items[1].active) # Confirm non-ancestors are not activated self.assertFalse(site_navigation.items[0].active) self.assertFalse(site_navigation.items[1].children[0].active) self.assertFalse(site_navigation.items[1].children[1].active) self.assertFalse(site_navigation.items[1].children[2].active) self.assertFalse(site_navigation.items[2].active) self.assertFalse(site_navigation.items[2].children[0].active) self.assertFalse(site_navigation.items[2].children[1].active) # Deactivate site_navigation.items[1].children[3].children[0].active = False # Confirm ancestors are deactivated self.assertFalse(site_navigation.items[1].children[3].children[0].active) self.assertFalse(site_navigation.items[1].children[3].active) self.assertFalse(site_navigation.items[1].active) def test_get_by_type_nested_sections(self): nav_cfg = [ { 'Section 1': [ { 'Section 2': [ {'Page': 'page.md'}, ] }, ] }, ] cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File('page.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(len(_get_by_type(site_navigation, Section)), 2) mkdocs-1.6.1/mkdocs/tests/structure/toc_tests.py0000664000175000017500000001220714664334534021742 0ustar carstencarsten#!/usr/bin/env python import unittest from mkdocs.structure.toc import get_toc from mkdocs.tests.base import dedent, get_markdown_toc class TableOfContentsTests(unittest.TestCase): def test_indented_toc(self): md = dedent( """ # Heading 1 ## Heading 2 ### Heading 3 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 1) def test_indented_toc_html(self): md = dedent( """ # Heading 1 ## Heading 2 ## Heading 3 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 1) def test_flat_toc(self): md = dedent( """ # Heading 1 # Heading 2 # Heading 3 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 3) def test_flat_h2_toc(self): md = dedent( """ ## Heading 1 ## Heading 2 ## Heading 3 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 3) def test_mixed_toc(self): md = dedent( """ # Heading 1 ## Heading 2 # Heading 3 ### Heading 4 ### Heading 5 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 Heading 4 - #heading-4 Heading 5 - #heading-5 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 2) def test_mixed_html(self): md = dedent( """ # Heading 1 ## Heading 2 # Heading 3 ### Heading 4 ### Heading 5 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 Heading 4 - #heading-4 Heading 5 - #heading-5 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 2) def test_nested_anchor(self): md = dedent( """ # Heading 1 ## Heading 2 # Heading 3 ### Heading 4 ### Heading 5 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 Heading 4 - #heading-4 Heading 5 - #heading-5 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 2) def test_entityref(self): md = dedent( """ # Heading & 1 ## Heading > 2 ### Heading < 3 """ ) expected = dedent( """ Heading & 1 - #heading-1 Heading > 2 - #heading-2 Heading < 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 1) def test_charref(self): md = '# @Header' expected = '@Header - #header' toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 1) def test_level(self): md = dedent( """ # Heading 1 ## Heading 1.1 ### Heading 1.1.1 ### Heading 1.1.2 ## Heading 1.2 """ ) toc = get_toc(get_markdown_toc(md)) def get_level_sequence(items): for item in items: yield item.level yield from get_level_sequence(item.children) self.assertEqual(tuple(get_level_sequence(toc)), (1, 2, 3, 3, 2)) mkdocs-1.6.1/mkdocs/tests/structure/page_tests.py0000664000175000017500000016233414664334534022100 0ustar carstencarstenfrom __future__ import annotations import os import sys import textwrap import unittest from unittest import mock import markdown from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.files import File, Files from mkdocs.structure.pages import Page, _ExtractTitleTreeprocessor, _RelativePathTreeprocessor from mkdocs.tests.base import dedent, tempdir DOCS_DIR = os.path.join( os.path.abspath(os.path.dirname(__file__)), '..', 'integration', 'subpages', 'docs' ) def load_config(**cfg) -> MkDocsConfig: cfg.setdefault('site_name', 'Example') cfg.setdefault( 'docs_dir', os.path.join( os.path.abspath(os.path.dirname(__file__)), '..', 'integration', 'minimal', 'docs' ), ) conf = MkDocsConfig() conf.load_dict(cfg) errors_warnings = conf.validate() assert errors_warnings == ([], []), errors_warnings return conf class PageTests(unittest.TestCase): def test_homepage(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) self.assertIsNone(fl.page) pg = Page('Foo', fl, cfg) self.assertEqual(fl.page, pg) self.assertEqual(pg.url, '') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertTrue(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_nested_index_page(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('sub1/index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.parent = 'foo' self.assertEqual(pg.url, 'sub1/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertFalse(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, 'foo') self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_nested_index_page_no_parent(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('sub1/index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.parent = None # non-homepage at nav root level; see #1919. self.assertEqual(pg.url, 'sub1/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_nested_index_page_no_parent_no_directory_urls(self): cfg = load_config(docs_dir=DOCS_DIR, use_directory_urls=False) fl = File('sub1/index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.parent = None # non-homepage at nav root level; see #1919. self.assertEqual(pg.url, 'sub1/index.html') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_nested_nonindex_page(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('sub1/non-index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.parent = 'foo' self.assertEqual(pg.url, 'sub1/non-index/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertFalse(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, 'foo') self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_defaults(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertRegex(pg.update_date, r'\d{4}-\d{2}-\d{2}') self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_no_directory_url(self): cfg = load_config(use_directory_urls=False) fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing.html') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_canonical_url(self): cfg = load_config(site_url='http://example.com') fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, '/testing/') self.assertEqual(pg.canonical_url, 'http://example.com/testing/') self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_canonical_url_nested(self): cfg = load_config(site_url='http://example.com/foo/') fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, '/foo/testing/') self.assertEqual(pg.canonical_url, 'http://example.com/foo/testing/') self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_canonical_url_nested_no_slash(self): cfg = load_config(site_url='http://example.com/foo') fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, '/foo/testing/') self.assertEqual(pg.canonical_url, 'http://example.com/foo/testing/') self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_predefined_page_title(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Page Title', fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('# Welcome to MkDocs\n')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Page Title') self.assertEqual(pg.toc, []) def test_page_title_from_markdown(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('# Welcome to MkDocs\n')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Welcome to MkDocs') pg.render(cfg, Files([fl])) self.assertEqual(pg.title, 'Welcome to MkDocs') def _test_extract_title(self, content, expected, extensions={}): md = markdown.Markdown(extensions=list(extensions.keys()), extension_configs=extensions) extract_title_ext = _ExtractTitleTreeprocessor() extract_title_ext._register(md) md.convert(content) self.assertEqual(extract_title_ext.title, expected) _SETEXT_CONTENT = dedent( ''' Welcome to MkDocs Setext ======================== This tests extracting a setext style title. ''' ) def test_page_title_from_setext_markdown(self): self._test_extract_title( self._SETEXT_CONTENT, expected='Welcome to MkDocs Setext', ) def test_page_title_from_markdown_with_email(self): self._test_extract_title( '''# ''', expected='foo@example.org', ) def test_page_title_from_markdown_stripped_anchorlinks(self): self._test_extract_title( self._SETEXT_CONTENT, extensions={'toc': {'permalink': '&'}}, expected='Welcome to MkDocs Setext', ) def test_page_title_from_markdown_strip_footnoteref(self): foootnotes = '''\n\n[^1]: foo\n[^2]: bar''' self._test_extract_title( '''# Header[^1] foo[^2] bar''' + foootnotes, extensions={'footnotes': {}}, expected='Header foo bar', ) self._test_extract_title( '''# *Header[^1]* *foo*[^2]''' + foootnotes, extensions={'footnotes': {}}, expected='Header foo', ) self._test_extract_title( '''# *Header[^1][^2]s''' + foootnotes, extensions={'footnotes': {}}, expected='*Headers', ) def test_page_title_from_markdown_strip_formatting(self): self._test_extract_title( '''# \\*Hello --- *beautiful* `wor

`''', extensions={'smarty': {}}, expected='*Hello — beautiful wor<dl>', ) def test_page_title_from_markdown_html_entity(self): self._test_extract_title('''# Foo < & bar''', expected='Foo < & bar') self._test_extract_title('''# Foo > & bar''', expected='Foo > & bar') def test_page_title_from_markdown_strip_raw_html(self): self._test_extract_title('''# Hello world''', expected='Hello world') def test_page_title_from_markdown_strip_comments(self): self._test_extract_title('''# foo bar''', expected='foo bar') def test_page_title_from_markdown_strip_image(self): self._test_extract_title('''# Hi ![😄](hah.png)''', expected='Hi 😄') self._test_extract_title('''# Hi *-![😄](hah.png)-*''', expected='Hi -😄-') _ATTRLIST_CONTENT = dedent( ''' # Welcome to MkDocs Attr { #welcome } This tests extracting the title, with enabled attr_list markdown_extension. ''' ) def test_page_title_from_markdown_stripped_attr_list(self): self._test_extract_title( self._ATTRLIST_CONTENT, extensions={'attr_list': {}}, expected='Welcome to MkDocs Attr', ) def test_page_title_from_markdown_preserved_attr_list(self): self._test_extract_title( self._ATTRLIST_CONTENT, expected='Welcome to MkDocs Attr { #welcome }', ) def test_page_title_from_meta(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('metadata.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'metadata/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('# Welcome to MkDocs\n')) self.assertEqual(pg.meta, {'title': 'A Page Title'}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'A Page Title') self.assertEqual(pg.toc, []) pg.render(cfg, Files([fl])) self.assertEqual(pg.title, 'A Page Title') def test_page_title_from_filename(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('page-title.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'page-title/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('Page content.\n')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Page title') pg.render(cfg, Files([fl])) self.assertEqual(pg.title, 'Page title') def test_page_title_from_capitalized_filename(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('pageTitle.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'pageTitle/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('Page content.\n')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'pageTitle') def test_page_title_from_homepage_filename(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, '') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertTrue(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('## Test')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Home') self.assertEqual(pg.toc, []) def test_page_eq(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertTrue(pg == Page('Foo', fl, cfg)) def test_page_ne(self): cfg = load_config() f1 = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) f2 = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', f1, cfg) # Different Title self.assertTrue(pg != Page('Bar', f1, cfg)) # Different File self.assertTrue(pg != Page('Foo', f2, cfg)) @tempdir() def test_BOM(self, docs_dir): md_src = '# An UTF-8 encoded file with a BOM' cfg = load_config(docs_dir=docs_dir) fl = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) # Create an UTF-8 Encoded file with BOM (as Microsoft editors do). See #1186 with open(fl.abs_src_path, 'w', encoding='utf-8-sig') as f: f.write(md_src) # Now read the file. pg.read_source(cfg) # Ensure the BOM (`\ufeff`) is removed self.assertNotIn('\ufeff', pg.markdown) self.assertEqual(pg.markdown, md_src) self.assertEqual(pg.meta, {}) def test_page_edit_url( self, paths={'testing.md': 'testing/', 'sub1/non-index.md': 'sub1/non-index/'} ): for case in [ dict( config={'repo_url': 'http://github.com/mkdocs/mkdocs'}, edit_url='http://github.com/mkdocs/mkdocs/edit/master/docs/testing.md', edit_url2='http://github.com/mkdocs/mkdocs/edit/master/docs/sub1/non-index.md', ), dict( config={'repo_url': 'https://github.com/mkdocs/mkdocs/'}, edit_url='https://github.com/mkdocs/mkdocs/edit/master/docs/testing.md', edit_url2='https://github.com/mkdocs/mkdocs/edit/master/docs/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com'}, edit_url=None, edit_url2=None, ), dict( config={'repo_url': 'http://example.com', 'edit_uri': 'edit/master'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com', 'edit_uri': '/edit/master'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo/', 'edit_uri': '/edit/master/'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo', 'edit_uri': '/edit/master/'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo/', 'edit_uri': '/edit/master'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo/', 'edit_uri': 'edit/master/'}, edit_url='http://example.com/foo/edit/master/testing.md', edit_url2='http://example.com/foo/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo', 'edit_uri': 'edit/master/'}, edit_url='http://example.com/foo/edit/master/testing.md', edit_url2='http://example.com/foo/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com', 'edit_uri': '?query=edit/master'}, edit_url='http://example.com?query=edit/master/testing.md', edit_url2='http://example.com?query=edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/', 'edit_uri': '?query=edit/master/'}, edit_url='http://example.com/?query=edit/master/testing.md', edit_url2='http://example.com/?query=edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com', 'edit_uri': '#edit/master'}, edit_url='http://example.com#edit/master/testing.md', edit_url2='http://example.com#edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/', 'edit_uri': '#edit/master/'}, edit_url='http://example.com/#edit/master/testing.md', edit_url2='http://example.com/#edit/master/sub1/non-index.md', ), dict( config={'edit_uri': 'http://example.com/edit/master'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'edit_uri_template': 'https://github.com/project/repo/wiki/{path_noext}'}, edit_url='https://github.com/project/repo/wiki/testing', edit_url2='https://github.com/project/repo/wiki/sub1/non-index', ), dict( config={ 'repo_url': 'https://github.com/project/repo/wiki', 'edit_uri_template': '{path_noext}/_edit', }, edit_url='https://github.com/project/repo/wiki/testing/_edit', edit_url2='https://github.com/project/repo/wiki/sub1/non-index/_edit', ), dict( config={ 'repo_url': 'https://gitlab.com/project/repo', 'edit_uri_template': '-/sse/master/docs%2F{path!q}', }, edit_url='https://gitlab.com/project/repo/-/sse/master/docs%2Ftesting.md', edit_url2='https://gitlab.com/project/repo/-/sse/master/docs%2Fsub1%2Fnon-index.md', ), dict( config={ 'repo_url': 'https://bitbucket.org/project/repo/', 'edit_uri_template': 'src/master/docs/{path}?mode=edit', }, edit_url='https://bitbucket.org/project/repo/src/master/docs/testing.md?mode=edit', edit_url2='https://bitbucket.org/project/repo/src/master/docs/sub1/non-index.md?mode=edit', ), dict( config={ 'repo_url': 'http://example.com', 'edit_uri': '', 'edit_uri_template': '', }, # Set to blank value edit_url=None, edit_url2=None, ), dict(config={}, edit_url=None, edit_url2=None), # Nothing defined ]: for i, path in enumerate(paths, 1): edit_url_key = f'edit_url{i}' if i > 1 else 'edit_url' with self.subTest(case['config'], path=path): cfg = load_config(**case['config']) fl = File(path, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, paths[path]) self.assertEqual(pg.edit_url, case[edit_url_key]) @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_page_edit_url_windows(self): self.test_page_edit_url( paths={'testing.md': 'testing/', 'sub1\\non-index.md': 'sub1/non-index/'} ) def test_page_edit_url_warning(self): for case in [ dict( config={'edit_uri': 'edit/master'}, edit_url='edit/master/testing.md', warning="WARNING:mkdocs.structure.pages:edit_uri: " "'edit/master/testing.md' is not a valid URL, it should include the http:// (scheme)", ), ]: with self.subTest(case['config']): with self.assertLogs('mkdocs') as cm: cfg = load_config(**case['config']) fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.edit_url, case['edit_url']) self.assertEqual(cm.output, [case['warning']]) def test_page_edit_url_custom_from_file(self): for case in [ dict( edit_uri='hooks.py', expected_edit_url='https://github.com/mkdocs/mkdocs/edit/master/docs/hooks.py', ), dict( edit_uri='../scripts/hooks.py', expected_edit_url='https://github.com/mkdocs/mkdocs/edit/master/scripts/hooks.py', ), dict(edit_uri=None, expected_edit_url=None), ]: with self.subTest(case['edit_uri']): cfg = load_config(repo_url='https://github.com/mkdocs/mkdocs') fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) fl.edit_uri = case['edit_uri'] pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.edit_url, case['expected_edit_url']) def test_page_render(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.read_source(cfg) self.assertEqual(pg.content, None) self.assertEqual(pg.toc, []) pg.render(cfg, Files([fl])) self.assertTrue( pg.content.startswith('

Welcome to MkDocs

\n') ) self.assertEqual( str(pg.toc).strip(), dedent( """ Welcome to MkDocs - #welcome-to-mkdocs Commands - #commands Project layout - #project-layout """ ), ) def test_missing_page(self): cfg = load_config() fl = File('missing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) with self.assertLogs('mkdocs') as cm: with self.assertRaises(OSError): pg.read_source(cfg) self.assertEqual( '\n'.join(cm.output), 'ERROR:mkdocs.structure.pages:File not found: missing.md' ) class SourceDateEpochTests(unittest.TestCase): def setUp(self): self.default = os.environ.get('SOURCE_DATE_EPOCH', None) os.environ['SOURCE_DATE_EPOCH'] = '0' def test_source_date_epoch(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.update_date, '1970-01-01') def tearDown(self): if self.default is not None: os.environ['SOURCE_DATE_EPOCH'] = self.default else: del os.environ['SOURCE_DATE_EPOCH'] class RelativePathExtensionTests(unittest.TestCase): def get_rendered_result( self, *, content: str, files: list[str], logs: str = '', **kwargs ) -> str: cfg = load_config(docs_dir=DOCS_DIR, **kwargs) fs = [File(f, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for f in files] pg = Page('Foo', fs[0], cfg) with mock.patch('mkdocs.structure.files.open', mock.mock_open(read_data=content)): pg.read_source(cfg) if logs: with self.assertLogs('mkdocs.structure.pages') as cm: pg.render(cfg, Files(fs)) msgs = [f'{r.levelname}:{r.message}' for r in cm.records] self.assertEqual('\n'.join(msgs), textwrap.dedent(logs).strip('\n')) elif sys.version_info >= (3, 10): with self.assertNoLogs('mkdocs.structure.pages'): pg.render(cfg, Files(fs)) else: pg.render(cfg, Files(fs)) assert pg.content is not None content = pg.content if content.startswith('

') and content.endswith('

'): content = content[3:-4] return content def test_relative_html_link(self): self.assertEqual( self.get_rendered_result( content='[link](non-index.md)', files=['index.md', 'non-index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](non-index.md)', files=['index.md', 'non-index.md'], ), 'link', ) def test_relative_html_link_index(self): self.assertEqual( self.get_rendered_result( content='[link](index.md)', files=['non-index.md', 'index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](index.md)', files=['non-index.md', 'index.md'], ), 'link', ) def test_relative_html_link_sub_index(self): self.assertEqual( self.get_rendered_result( content='[link](sub2/index.md)', files=['index.md', 'sub2/index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](sub2/index.md)', files=['index.md', 'sub2/index.md'], ), 'link', ) def test_relative_html_link_sub_page(self): self.assertEqual( self.get_rendered_result( content='[link](sub2/non-index.md)', files=['index.md', 'sub2/non-index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](sub2/non-index.md)', files=['index.md', 'sub2/non-index.md'], ), 'link', ) def test_relative_doc_link_without_extension(self): self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](bar/Dockerfile)', files=['foo/bar.md', 'foo/bar/Dockerfile'], ), 'link', ) self.assertEqual( self.get_rendered_result( content='[link](bar/Dockerfile)', files=['foo/bar.md', 'foo/bar/Dockerfile'], ), 'link', ) def test_relative_html_link_with_encoded_space(self): self.assertEqual( self.get_rendered_result( content='[link](file%20name.md)', files=['index.md', 'file name.md'] ), 'link', ) def test_relative_html_link_with_unencoded_space(self): self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](file name.md)', files=['index.md', 'file name.md'], ), 'link', ) def test_relative_html_link_parent_index(self): self.assertEqual( self.get_rendered_result( content='[link](../index.md)', files=['sub2/non-index.md', 'index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](../index.md)', files=['sub2/non-index.md', 'index.md'], ), 'link', ) def test_relative_html_link_hash(self): self.assertEqual( self.get_rendered_result( content='[link](non-index.md#hash)', files=['index.md', 'non-index.md'] ), 'link', ) def test_relative_html_link_sub_index_hash(self): self.assertEqual( self.get_rendered_result( content='[link](sub2/index.md#hash)', files=['index.md', 'sub2/index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](sub2/index.md#hash)', files=['index.md', 'sub2/index.md'], ), 'link', ) def test_relative_html_link_sub_page_hash(self): self.assertEqual( self.get_rendered_result( content='[link](sub2/non-index.md#hash)', files=['index.md', 'sub2/non-index.md'] ), 'link', ) def test_relative_html_link_hash_only(self): for use_directory_urls in True, False: self.assertEqual( self.get_rendered_result( use_directory_urls=use_directory_urls, content='[link](#hash)', files=['index.md'], ), 'link', ) def test_relative_image_link_from_homepage(self): for use_directory_urls in True, False: self.assertEqual( self.get_rendered_result( use_directory_urls=use_directory_urls, content='![image](image.png)', files=['index.md', 'image.png'], ), 'image', # no opening ./ ) def test_relative_image_link_from_subpage(self): self.assertEqual( self.get_rendered_result( content='![image](../image.png)', files=['sub2/non-index.md', 'image.png'] ), 'image', ) def test_relative_image_link_from_sibling(self): self.assertEqual( self.get_rendered_result( content='![image](image.png)', files=['non-index.md', 'image.png'] ), 'image', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='![image](image.png)', files=['non-index.md', 'image.png'], ), 'image', ) def test_no_links(self): self.assertEqual( self.get_rendered_result(content='*__not__ a link*.', files=['index.md']), 'not a link.', ) def test_bad_relative_doc_link(self): self.assertEqual( self.get_rendered_result( content='[link](non-existent.md)', files=['index.md'], logs="WARNING:Doc file 'index.md' contains a link 'non-existent.md', but the target is not found among documentation files.", ), 'link', ) self.assertEqual( self.get_rendered_result( validation=dict(links=dict(not_found='info')), content='[link](../non-existent.md)', files=['sub/index.md'], logs="INFO:Doc file 'sub/index.md' contains a link '../non-existent.md', but the target 'non-existent.md' is not found among documentation files.", ), 'link', ) def test_relative_slash_link_with_suggestion(self): self.assertEqual( self.get_rendered_result( content='[link](../about/)', files=['foo/index.md', 'about.md'], logs="INFO:Doc file 'foo/index.md' contains an unrecognized relative link '../about/', it was left as is. Did you mean '../about.md'?", ), 'link', ) self.assertEqual( self.get_rendered_result( validation=dict(links=dict(unrecognized_links='warn')), content='[link](../#example)', files=['foo/bar.md', 'index.md'], logs="WARNING:Doc file 'foo/bar.md' contains an unrecognized relative link '../#example', it was left as is. Did you mean '../index.md#example'?", ), 'link', ) def test_self_anchor_link_with_suggestion(self): self.assertEqual( self.get_rendered_result( content='[link](./#test)', files=['index.md'], logs="INFO:Doc file 'index.md' contains an unrecognized relative link './#test', it was left as is. Did you mean '#test'?", ), 'link', ) def test_absolute_self_anchor_link_with_suggestion(self): self.assertEqual( self.get_rendered_result( content='[link](/index#test)', files=['index.md'], logs="INFO:Doc file 'index.md' contains an absolute link '/index#test', it was left as is. Did you mean '#test'?", ), 'link', ) def test_absolute_self_anchor_link_with_validation_and_suggestion(self): self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='relative_to_docs')), content='[link](/index#test)', files=['index.md'], logs="WARNING:Doc file 'index.md' contains a link '/index#test', but the target 'index' is not found among documentation files. Did you mean '#test'?", ), 'link', ) def test_absolute_anchor_link_with_validation(self): self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='relative_to_docs')), content='[link](/foo/bar.md#test)', files=['index.md', 'foo/bar.md'], ), 'link', ) def test_absolute_anchor_link_with_validation_and_suggestion(self): self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='relative_to_docs')), content='[link](/foo/bar#test)', files=['zoo/index.md', 'foo/bar.md'], logs="WARNING:Doc file 'zoo/index.md' contains a link '/foo/bar#test', but the target 'foo/bar' is not found among documentation files. Did you mean '/foo/bar.md#test'?", ), 'link', ) def test_external_link(self): self.assertEqual( self.get_rendered_result( content='[external](http://example.com/index.md)', files=['index.md'] ), 'external', ) def test_absolute_link_with_suggestion(self): self.assertEqual( self.get_rendered_result( content='[absolute link](/path/to/file.md)', files=['index.md', 'path/to/file.md'], logs="INFO:Doc file 'index.md' contains an absolute link '/path/to/file.md', it was left as is. Did you mean 'path/to/file.md'?", ), 'absolute link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[absolute link](/path/to/file/)', files=['path/index.md', 'path/to/file.md'], logs="INFO:Doc file 'path/index.md' contains an absolute link '/path/to/file/', it was left as is.", ), 'absolute link', ) self.assertEqual( self.get_rendered_result( content='[absolute link](/path/to/file)', files=['path/index.md', 'path/to/file.md'], logs="INFO:Doc file 'path/index.md' contains an absolute link '/path/to/file', it was left as is. Did you mean 'to/file.md'?", ), 'absolute link', ) def test_absolute_link_with_validation(self): self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='relative_to_docs')), content='[absolute link](/path/to/file.md)', files=['index.md', 'path/to/file.md'], ), 'absolute link', ) self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='relative_to_docs')), use_directory_urls=False, content='[absolute link](/path/to/file.md)', files=['path/index.md', 'path/to/file.md'], ), 'absolute link', ) def test_absolute_link_with_validation_and_suggestion(self): self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='relative_to_docs')), use_directory_urls=False, content='[absolute link](/path/to/file/)', files=['path/index.md', 'path/to/file.md'], logs="WARNING:Doc file 'path/index.md' contains a link '/path/to/file/', but the target 'path/to/file' is not found among documentation files.", ), 'absolute link', ) self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='relative_to_docs')), content='[absolute link](/path/to/file)', files=['path/index.md', 'path/to/file.md'], logs="WARNING:Doc file 'path/index.md' contains a link '/path/to/file', but the target is not found among documentation files. Did you mean '/path/to/file.md'?", ), 'absolute link', ) def test_absolute_link_with_validation_just_slash(self): self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='relative_to_docs')), content='[absolute link](/)', files=['path/to/file.md', 'index.md'], logs="WARNING:Doc file 'path/to/file.md' contains a link '/', but the target '.' is not found among documentation files. Did you mean '/index.md'?", ), 'absolute link', ) def test_absolute_link_preserved_and_warned(self): self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='warn')), content='[absolute link](/path/to/file.md)', files=['index.md'], logs="WARNING:Doc file 'index.md' contains an absolute link '/path/to/file.md', it was left as is.", ), 'absolute link', ) self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='ignore')), content='[absolute link](/path/to/file.md)', files=['index.md'], ), 'absolute link', ) def test_image_link_with_suggestion(self): self.assertEqual( self.get_rendered_result( content='![image](../image.png)', files=['foo/bar.md', 'foo/image.png'], logs="WARNING:Doc file 'foo/bar.md' contains a link '../image.png', but the target 'image.png' is not found among documentation files. Did you mean 'image.png'?", ), 'image', ) self.assertEqual( self.get_rendered_result( content='![image](/image.png)', files=['foo/bar.md', 'image.png'], logs="INFO:Doc file 'foo/bar.md' contains an absolute link '/image.png', it was left as is. Did you mean '../image.png'?", ), 'image', ) def test_absolute_win_local_path(self): for use_directory_urls in True, False: self.assertEqual( self.get_rendered_result( use_directory_urls=use_directory_urls, content='[absolute local path](\\image.png)', files=['index.md'], logs="INFO:Doc file 'index.md' contains an absolute link '\\image.png', it was left as is.", ), 'absolute local path', ) def test_email_link(self): self.assertEqual( self.get_rendered_result(content='', files=['index.md']), # Markdown's default behavior is to obscure email addresses by entity-encoding them. # The following is equivalent to: 'mail@example.com' 'mail@' 'example.com', ) def test_invalid_email_link(self): self.assertEqual( self.get_rendered_result( content='[contact](mail@example.com)', files=['index.md'], logs="WARNING:Doc file 'index.md' contains a link 'mail@example.com', but the target is not found among documentation files. Did you mean 'mailto:mail@example.com'?", ), 'contact', ) def test_possible_target_uris(self): def test(paths, expected='', exp_true=None, exp_false=None): """Test that `possible_target_uris` yields expected values, for use_directory_urls = true and false.""" for use_directory_urls, expected_paths in ( (True, exp_true or expected), (False, exp_false or expected), ): with self.subTest(paths, use_directory_urls=use_directory_urls): src_path, dest_path = paths f = File(src_path, '', '', use_directory_urls) actual = _RelativePathTreeprocessor._possible_target_uris( f, dest_path, use_directory_urls ) self.assertEqual(list(actual), expected_paths.split(', ')) test(('index.md', 'index.md'), expected='index.md') test(('index.md', 'foo/bar.md'), expected='foo/bar.md') test( ('index.md', 'foo/bar'), expected='foo/bar, foo/bar/index.md, foo/bar/README.md, foo/bar.md', ) test(('index.md', 'foo/bar.html'), expected='foo/bar.html, foo/bar.md') test( ('foo.md', 'foo/bar.html'), exp_true='foo/bar.html, foo/bar.md, foo/foo/bar.html, foo/foo/bar.md', exp_false='foo/bar.html, foo/bar.md', ) test(('foo.md', 'index.md'), exp_true='index.md, foo/index.md', exp_false='index.md') test(('foo.md', 'foo.md'), exp_true='foo.md, foo/foo.md', exp_false='foo.md') test(('foo.md', 'bar.md'), exp_true='bar.md, foo/bar.md', exp_false='bar.md') test( ('foo.md', 'foo/bar.md'), exp_true='foo/bar.md, foo/foo/bar.md', exp_false='foo/bar.md' ) test( ('foo.md', 'foo'), exp_true='foo, foo/index.md, foo/README.md, foo.md, foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md', exp_false='foo, foo/index.md, foo/README.md, foo.md', ) test( ('foo.md', 'foo/bar'), exp_true='foo/bar, foo/bar/index.md, foo/bar/README.md, foo/bar.md, foo/foo/bar, foo/foo/bar/index.md, foo/foo/bar/README.md, foo/foo/bar.md', exp_false='foo/bar, foo/bar/index.md, foo/bar/README.md, foo/bar.md', ) test( ('foo.md', 'foo/bar/'), exp_true='foo/bar, foo/bar/index.md, foo/bar/README.md, foo/bar.md, foo/foo/bar, foo/foo/bar/index.md, foo/foo/bar/README.md, foo/foo/bar.md', exp_false='foo/bar, foo/bar/index.md, foo/bar/README.md', ) test( ('foo.md', 'foo.html'), exp_true='foo.html, foo.md, foo/foo.html, foo/foo.md', exp_false='foo.html, foo.md', ) test( ('foo.md', '../foo/'), exp_true='../foo, foo, foo/index.md, foo/README.md, foo.md', exp_false='../foo', ) test( ('foo.md', 'foo/'), exp_true='foo, foo/index.md, foo/README.md, foo.md, foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md', exp_false='foo, foo/index.md, foo/README.md', ) test(('foo/index.md', 'index.md'), expected='foo/index.md') test(('foo/index.md', 'foo/bar.html'), expected='foo/foo/bar.html, foo/foo/bar.md') test(('foo/index.md', '../foo.html'), expected='foo.html, foo.md') test(('foo/index.md', '../'), expected='., index.md, README.md') test( ('foo/bar.md', 'index.md'), exp_true='foo/index.md, foo/bar/index.md', exp_false='foo/index.md', ) test( ('foo/bar.md', 'foo.md'), exp_true='foo/foo.md, foo/bar/foo.md', exp_false='foo/foo.md', ) test( ('foo/bar.md', 'bar.md'), exp_true='foo/bar.md, foo/bar/bar.md', exp_false='foo/bar.md', ) test( ('foo/bar.md', 'foo/bar.md'), exp_true='foo/foo/bar.md, foo/bar/foo/bar.md', exp_false='foo/foo/bar.md', ) test( ('foo/bar.md', 'foo'), exp_true='foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md, foo/bar/foo, foo/bar/foo/index.md, foo/bar/foo/README.md, foo/bar/foo.md', exp_false='foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md', ) test( ('foo/bar.md', 'foo/bar'), exp_true='foo/foo/bar, foo/foo/bar/index.md, foo/foo/bar/README.md, foo/foo/bar.md, foo/bar/foo/bar, foo/bar/foo/bar/index.md, foo/bar/foo/bar/README.md, foo/bar/foo/bar.md', exp_false='foo/foo/bar, foo/foo/bar/index.md, foo/foo/bar/README.md, foo/foo/bar.md', ) test( ('foo/bar.md', 'foo.html'), exp_true='foo/foo.html, foo/foo.md, foo/bar/foo.html, foo/bar/foo.md', exp_false='foo/foo.html, foo/foo.md', ) test( ('foo/bar.md', 'foo/bar.html'), exp_true='foo/foo/bar.html, foo/foo/bar.md, foo/bar/foo/bar.html, foo/bar/foo/bar.md', exp_false='foo/foo/bar.html, foo/foo/bar.md', ) test( ('foo/bar.md', '../foo/bar.html'), exp_true='foo/bar.html, foo/bar.md, foo/foo/bar.html, foo/foo/bar.md', exp_false='foo/bar.html, foo/bar.md', ) test( ('foo/bar.md', '../foo'), exp_true='foo, foo/index.md, foo/README.md, foo.md, foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md', exp_false='foo, foo/index.md, foo/README.md, foo.md', ) test( ('foo/bar.md', '../'), exp_true='., index.md, README.md, foo, foo/index.md, foo/README.md', exp_false='., index.md, README.md', ) for src in 'foo/bar.md', 'foo.md', 'foo/index.md': test((src, '/foo'), expected='foo, foo/index.md, foo/README.md, foo.md') test((src, '/foo/bar.md'), expected='foo/bar.md') test((src, '/foo/bar.html'), expected='foo/bar.html, foo/bar.md') for dest in '', '.', './': test(('index.md', dest), expected='., index.md') test(('foo/bar.md', dest), expected='foo, foo/bar.md') test( ('foo/bar.md', '../test.png'), exp_true='test.png, test.png.md, foo/test.png, foo/test.png.md', exp_false='test.png, test.png.md', ) mkdocs-1.6.1/mkdocs/tests/cli_tests.py0000664000175000017500000006167014664334534017674 0ustar carstencarsten#!/usr/bin/env python import io import logging import unittest from unittest import mock from click.testing import CliRunner from mkdocs import __main__ as cli class CLITests(unittest.TestCase): def setUp(self): self.runner = CliRunner() @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_default(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve"], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, open_in_browser=False, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_config_file(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", "--config-file", "mkdocs.yml"], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_serve.call_count, 1) args, kwargs = mock_serve.call_args self.assertTrue('config_file' in kwargs) self.assertIsInstance(kwargs['config_file'], io.BufferedReader) self.assertEqual(kwargs['config_file'].name, 'mkdocs.yml') @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_dev_addr(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", '--dev-addr', '0.0.0.0:80'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr='0.0.0.0:80', open_in_browser=False, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_strict(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--strict'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, open_in_browser=False, livereload=True, build_type=None, config_file=None, strict=True, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_theme(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", '--theme', 'readthedocs'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, open_in_browser=False, livereload=True, build_type=None, config_file=None, strict=None, theme='readthedocs', use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_use_directory_urls(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", '--use-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, open_in_browser=False, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=True, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_no_directory_urls(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", '--no-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, open_in_browser=False, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=False, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_livereload(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--livereload'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, open_in_browser=False, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_no_livereload(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--no-livereload'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, open_in_browser=False, livereload=False, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_dirtyreload(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--dirty'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, open_in_browser=False, livereload=True, build_type='dirty', config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_watch_theme(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--watch-theme'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, open_in_browser=False, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=True, watch=(), ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_defaults(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertFalse(kwargs['dirty']) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir=None, ) for log_name in 'mkdocs', 'mkdocs.structure.pages', 'mkdocs.plugins.foo': self.assertEqual(logging.getLogger(log_name).getEffectiveLevel(), logging.INFO) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_clean(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--clean'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertFalse(kwargs['dirty']) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_dirty(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--dirty'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertTrue(kwargs['dirty']) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_config_file(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--config-file', 'mkdocs.yml'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) args, kwargs = mock_load_config.call_args self.assertTrue('config_file' in kwargs) self.assertIsInstance(kwargs['config_file'], io.BufferedReader) self.assertEqual(kwargs['config_file'].name, 'mkdocs.yml') @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_strict(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--strict'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=True, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_theme(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--theme', 'readthedocs'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme='readthedocs', use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_use_directory_urls(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--use-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme=None, use_directory_urls=True, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_no_directory_urls(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--no-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme=None, use_directory_urls=False, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_site_dir(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--site-dir', 'custom'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir='custom', ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_verbose(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--verbose'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) for log_name in 'mkdocs', 'mkdocs.structure.pages', 'mkdocs.plugins.foo': self.assertEqual(logging.getLogger(log_name).getEffectiveLevel(), logging.DEBUG) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_quiet(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--quiet'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) for log_name in 'mkdocs', 'mkdocs.structure.pages', 'mkdocs.plugins.foo': self.assertEqual(logging.getLogger(log_name).getEffectiveLevel(), logging.ERROR) @mock.patch('mkdocs.commands.new.new', autospec=True) def test_new(self, mock_new): result = self.runner.invoke(cli.cli, ["new", "project"], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_new.assert_called_once_with('project') @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_defaults(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) g_args, g_kwargs = mock_gh_deploy.call_args self.assertTrue('message' in g_kwargs) self.assertEqual(g_kwargs['message'], None) self.assertTrue('force' in g_kwargs) self.assertEqual(g_kwargs['force'], False) self.assertTrue('ignore_version' in g_kwargs) self.assertEqual(g_kwargs['ignore_version'], False) self.assertEqual(mock_build.call_count, 1) b_args, b_kwargs = mock_build.call_args self.assertTrue('dirty' in b_kwargs) self.assertFalse(b_kwargs['dirty']) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_clean(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy', '--clean'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertFalse(kwargs['dirty']) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_dirty(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy', '--dirty'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertTrue(kwargs['dirty']) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_config_file(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--config-file', 'mkdocs.yml'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) args, kwargs = mock_load_config.call_args self.assertTrue('config_file' in kwargs) self.assertIsInstance(kwargs['config_file'], io.BufferedReader) self.assertEqual(kwargs['config_file'].name, 'mkdocs.yml') @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_message(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--message', 'A commit message'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) g_args, g_kwargs = mock_gh_deploy.call_args self.assertTrue('message' in g_kwargs) self.assertEqual(g_kwargs['message'], 'A commit message') self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_remote_branch(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--remote-branch', 'foo'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch='foo', remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_remote_name(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--remote-name', 'foo'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name='foo', config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_force(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy', '--force'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) g_args, g_kwargs = mock_gh_deploy.call_args self.assertTrue('force' in g_kwargs) self.assertEqual(g_kwargs['force'], True) self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_ignore_version(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--ignore-version'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) g_args, g_kwargs = mock_gh_deploy.call_args self.assertTrue('ignore_version' in g_kwargs) self.assertEqual(g_kwargs['ignore_version'], True) self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_strict(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy', '--strict'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=True, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_theme(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--theme', 'readthedocs'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme='readthedocs', use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_use_directory_urls(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--use-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=True, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_no_directory_urls(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--no-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=False, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_site_dir(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--site-dir', 'custom'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir='custom', ) mkdocs-1.6.1/mkdocs/tests/__init__.py0000664000175000017500000000067714664334534017442 0ustar carstencarstenimport logging import unittest.util unittest.util._MAX_LENGTH = 100000 class DisallowLogsHandler(logging.Handler): def __init__(self, level=logging.WARNING): super().__init__(level=level) self.formatter = logging.Formatter("%(levelname)s:%(name)s:%(message)s") def emit(self, record): raise AssertionError(f'Unexpected log: {self.format(record)!r}') logging.lastResort = DisallowLogsHandler() # type: ignore mkdocs-1.6.1/mkdocs/tests/search_tests.py0000664000175000017500000005735414664334534020376 0ustar carstencarsten#!/usr/bin/env python import json import unittest from unittest import mock from mkdocs.config.config_options import ValidationError from mkdocs.contrib import search from mkdocs.contrib.search import search_index from mkdocs.structure.files import File from mkdocs.structure.pages import Page from mkdocs.structure.toc import get_toc from mkdocs.tests.base import dedent, get_markdown_toc, load_config def strip_whitespace(string): return string.replace("\n", "").replace(" ", "") class SearchConfigTests(unittest.TestCase): def test_lang_default(self): option = search.LangOption(default=['en']) value = option.validate(None) self.assertEqual(['en'], value) def test_lang_str(self): option = search.LangOption() value = option.validate('en') self.assertEqual(['en'], value) def test_lang_list(self): option = search.LangOption() value = option.validate(['en']) self.assertEqual(['en'], value) def test_lang_multi_list(self): option = search.LangOption() value = option.validate(['en', 'es', 'fr']) self.assertEqual(['en', 'es', 'fr'], value) def test_lang_no_default_none(self): option = search.LangOption() value = option.validate(None) self.assertIsNone(value) def test_lang_no_default_str(self): option = search.LangOption(default=[]) value = option.validate('en') self.assertEqual(['en'], value) def test_lang_no_default_list(self): option = search.LangOption(default=[]) value = option.validate(['en']) self.assertEqual(['en'], value) def test_lang_bad_type(self): option = search.LangOption() with self.assertRaises(ValidationError): option.validate({}) def test_lang_bad_code(self): option = search.LangOption() value = option.validate(['foo']) self.assertEqual(['en'], value) def test_lang_good_and_bad_code(self): option = search.LangOption() value = option.validate(['en', 'foo']) self.assertEqual(['en'], value) def test_lang_missing_and_with_territory(self): option = search.LangOption() value = option.validate(['cs_CZ', 'pt_BR', 'fr']) self.assertEqual(['fr', 'en', 'pt'], value) class SearchPluginTests(unittest.TestCase): def test_plugin_config_defaults(self): expected = { 'lang': None, 'separator': r'[\s\-]+', 'min_search_length': 3, 'prebuild_index': False, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_lang(self): expected = { 'lang': ['es'], 'separator': r'[\s\-]+', 'min_search_length': 3, 'prebuild_index': False, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'lang': 'es'}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_separator(self): expected = { 'lang': None, 'separator': r'[\s\-\.]+', 'min_search_length': 3, 'prebuild_index': False, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'separator': r'[\s\-\.]+'}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_min_search_length(self): expected = { 'lang': None, 'separator': r'[\s\-]+', 'min_search_length': 2, 'prebuild_index': False, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'min_search_length': 2}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_prebuild_index(self): expected = { 'lang': None, 'separator': r'[\s\-]+', 'min_search_length': 3, 'prebuild_index': True, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'prebuild_index': True}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_indexing(self): expected = { 'lang': None, 'separator': r'[\s\-]+', 'min_search_length': 3, 'prebuild_index': False, 'indexing': 'titles', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'indexing': 'titles'}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_event_on_config_defaults(self): plugin = search.SearchPlugin() plugin.load_config({}) result = plugin.on_config(load_config(theme='mkdocs', extra_javascript=[])) self.assertFalse(result['theme']['search_index_only']) self.assertFalse(result['theme']['include_search_page']) self.assertEqual(result['theme'].static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual(len(result['theme'].dirs), 3) self.assertEqual(result['extra_javascript'], ['search/main.js']) self.assertEqual(plugin.config.lang, [result['theme']['locale'].language]) def test_event_on_config_lang(self): plugin = search.SearchPlugin() plugin.load_config({'lang': 'es'}) result = plugin.on_config(load_config(theme='mkdocs', extra_javascript=[])) self.assertFalse(result['theme']['search_index_only']) self.assertFalse(result['theme']['include_search_page']) self.assertEqual(result['theme'].static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual(len(result['theme'].dirs), 3) self.assertEqual(result['extra_javascript'], ['search/main.js']) self.assertEqual(plugin.config.lang, ['es']) def test_event_on_config_theme_locale(self): plugin = search.SearchPlugin() plugin.load_config({}) result = plugin.on_config( load_config(theme={'name': 'mkdocs', 'locale': 'fr'}, extra_javascript=[]) ) self.assertFalse(result['theme']['search_index_only']) self.assertFalse(result['theme']['include_search_page']) self.assertEqual(result['theme'].static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual(len(result['theme'].dirs), 3) self.assertEqual(result['extra_javascript'], ['search/main.js']) self.assertEqual(plugin.config.lang, [result['theme']['locale'].language]) def test_event_on_config_include_search_page(self): plugin = search.SearchPlugin() plugin.load_config({}) config = load_config( theme={'name': 'mkdocs', 'include_search_page': True}, extra_javascript=[] ) result = plugin.on_config(config) self.assertFalse(result['theme']['search_index_only']) self.assertTrue(result['theme']['include_search_page']) self.assertEqual( result['theme'].static_templates, {'404.html', 'sitemap.xml', 'search.html'} ) self.assertEqual(len(result['theme'].dirs), 3) self.assertEqual(result['extra_javascript'], ['search/main.js']) def test_event_on_config_search_index_only(self): plugin = search.SearchPlugin() plugin.load_config({}) config = load_config( theme={'name': 'mkdocs', 'search_index_only': True}, extra_javascript=[] ) result = plugin.on_config(config) self.assertTrue(result['theme']['search_index_only']) self.assertFalse(result['theme']['include_search_page']) self.assertEqual(result['theme'].static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual(len(result['theme'].dirs), 2) self.assertEqual(len(result['extra_javascript']), 0) @mock.patch('mkdocs.utils.write_file', autospec=True) @mock.patch('mkdocs.utils.copy_file', autospec=True) def test_event_on_post_build_defaults(self, mock_copy_file, mock_write_file): plugin = search.SearchPlugin() plugin.load_config({}) config = load_config(theme='mkdocs') plugin.on_config(config) plugin.on_pre_build(config) plugin.on_post_build(config) self.assertEqual(mock_copy_file.call_count, 0) self.assertEqual(mock_write_file.call_count, 1) @mock.patch('mkdocs.utils.write_file', autospec=True) @mock.patch('mkdocs.utils.copy_file', autospec=True) def test_event_on_post_build_single_lang(self, mock_copy_file, mock_write_file): plugin = search.SearchPlugin() plugin.load_config({'lang': ['es']}) config = load_config(theme='mkdocs') plugin.on_pre_build(config) plugin.on_post_build(config) self.assertEqual(mock_copy_file.call_count, 2) self.assertEqual(mock_write_file.call_count, 1) @mock.patch('mkdocs.utils.write_file', autospec=True) @mock.patch('mkdocs.utils.copy_file', autospec=True) def test_event_on_post_build_multi_lang(self, mock_copy_file, mock_write_file): plugin = search.SearchPlugin() plugin.load_config({'lang': ['es', 'fr']}) config = load_config(theme='mkdocs') plugin.on_pre_build(config) plugin.on_post_build(config) self.assertEqual(mock_copy_file.call_count, 4) self.assertEqual(mock_write_file.call_count, 1) @mock.patch('mkdocs.utils.write_file', autospec=True) @mock.patch('mkdocs.utils.copy_file', autospec=True) def test_event_on_post_build_search_index_only(self, mock_copy_file, mock_write_file): plugin = search.SearchPlugin() plugin.load_config({'lang': ['es']}) config = load_config(theme={'name': 'mkdocs', 'search_index_only': True}) plugin.on_pre_build(config) plugin.on_post_build(config) self.assertEqual(mock_copy_file.call_count, 0) self.assertEqual(mock_write_file.call_count, 1) class SearchIndexTests(unittest.TestCase): def test_html_stripping(self): stripper = search_index.ContentParser() stripper.feed("

Testing

Content

") self.assertEqual(stripper.stripped_html, "Testing\nContent") def test_content_parser(self): parser = search_index.ContentParser() parser.feed('

Title

TEST') parser.close() self.assertEqual( parser.data, [search_index.ContentSection(text=["TEST"], id_="title", title="Title")] ) def test_content_parser_no_id(self): parser = search_index.ContentParser() parser.feed("

Title

TEST") parser.close() self.assertEqual( parser.data, [search_index.ContentSection(text=["TEST"], id_=None, title="Title")] ) def test_content_parser_content_before_header(self): parser = search_index.ContentParser() parser.feed("Content Before H1

Title

TEST") parser.close() self.assertEqual( parser.data, [search_index.ContentSection(text=["TEST"], id_=None, title="Title")] ) def test_content_parser_no_sections(self): parser = search_index.ContentParser() parser.feed("No H1 or H2TitleTEST") self.assertEqual(parser.data, []) def test_find_toc_by_id(self): """Test finding the relevant TOC item by the tag ID.""" index = search_index.SearchIndex() md = dedent( """ # Heading 1 ## Heading 2 ### Heading 3 """ ) toc = get_toc(get_markdown_toc(md)) toc_item = index._find_toc_by_id(toc, "heading-1") self.assertEqual(toc_item.url, "#heading-1") self.assertEqual(toc_item.title, "Heading 1") toc_item2 = index._find_toc_by_id(toc, "heading-2") self.assertEqual(toc_item2.url, "#heading-2") self.assertEqual(toc_item2.title, "Heading 2") toc_item3 = index._find_toc_by_id(toc, "heading-3") self.assertEqual(toc_item3.url, "#heading-3") self.assertEqual(toc_item3.title, "Heading 3") def test_create_search_index(self): html_content = """

Heading 1

Content 1

Heading 2

Content 2

Heading 3

Content 3

""" base_cfg = load_config() pages = [ Page( 'Home', File('index.md', base_cfg.docs_dir, base_cfg.site_dir, base_cfg.use_directory_urls), base_cfg, ), Page( 'About', File('about.md', base_cfg.docs_dir, base_cfg.site_dir, base_cfg.use_directory_urls), base_cfg, ), ] md = dedent( """ # Heading 1 ## Heading 2 ### Heading 3 """ ) toc = get_toc(get_markdown_toc(md)) full_content = ''.join(f"Heading{i}Content{i}" for i in range(1, 4)) plugin = search.SearchPlugin() errors, warnings = plugin.load_config({}) for page in pages: # Fake page.read_source() and page.render() page.markdown = md page.toc = toc page.content = html_content index = search_index.SearchIndex(**plugin.config) index.add_entry_from_context(page) self.assertEqual(len(index._entries), 4) loc = page.url self.assertEqual(index._entries[0]['title'], page.title) self.assertEqual(strip_whitespace(index._entries[0]['text']), full_content) self.assertEqual(index._entries[0]['location'], loc) self.assertEqual(index._entries[1]['title'], "Heading 1") self.assertEqual(index._entries[1]['text'], "Content 1") self.assertEqual(index._entries[1]['location'], f"{loc}#heading-1") self.assertEqual(index._entries[2]['title'], "Heading 2") self.assertEqual(strip_whitespace(index._entries[2]['text']), "Content2") self.assertEqual(index._entries[2]['location'], f"{loc}#heading-2") self.assertEqual(index._entries[3]['title'], "Heading 3") self.assertEqual(strip_whitespace(index._entries[3]['text']), "Content3") self.assertEqual(index._entries[3]['location'], f"{loc}#heading-3") def test_search_indexing_options(self): def test_page(title, filename, config): test_page = Page( title, File(filename, config.docs_dir, config.site_dir, config.use_directory_urls), config, ) test_page.content = """

Heading 1

Content 1

Heading 2

Content 2

Heading 3

Content 3

""" test_page.markdown = dedent( """ # Heading 1 ## Heading 2 ### Heading 3""" ) test_page.toc = get_toc(get_markdown_toc(test_page.markdown)) return test_page def validate_full(data, page): self.assertEqual(len(data), 4) for x in data: self.assertTrue(x['title']) self.assertTrue(x['text']) def validate_sections(data, page): # Sanity self.assertEqual(len(data), 4) # Page self.assertEqual(data[0]['title'], page.title) self.assertFalse(data[0]['text']) # Headings for x in data[1:]: self.assertTrue(x['title']) self.assertFalse(x['text']) def validate_titles(data, page): # Sanity self.assertEqual(len(data), 1) for x in data: self.assertFalse(x['text']) for option, validate in { 'full': validate_full, 'sections': validate_sections, 'titles': validate_titles, }.items(): with self.subTest(option): plugin = search.SearchPlugin() # Load plugin config, overriding indexing for test case errors, warnings = plugin.load_config({'indexing': option}) self.assertEqual(errors, []) self.assertEqual(warnings, []) base_cfg = load_config(plugins=['search']) base_cfg.plugins['search'].config.indexing = option pages = [ test_page('Home', 'index.md', base_cfg), test_page('About', 'about.md', base_cfg), ] for page in pages: index = search_index.SearchIndex(**plugin.config) index.add_entry_from_context(page) data = index.generate_search_index() validate(json.loads(data)['docs'], page) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('{"mock": "index"}', None) mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index=True) expected = { 'docs': [], 'config': {'prebuild_index': True}, 'index': {'mock': 'index'}, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index_returns_error(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('', 'Some Error') mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index=True) expected = { 'docs': [], 'config': {'prebuild_index': True}, } with self.assertLogs('mkdocs') as cm: result = json.loads(index.generate_search_index()) self.assertEqual( '\n'.join(cm.output), 'WARNING:mkdocs.contrib.search.search_index:Failed to pre-build search index. Error: Some Error', ) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index_raises_ioerror(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.side_effect = OSError mock_popen_obj.returncode = 1 index = search_index.SearchIndex(prebuild_index=True) expected = { 'docs': [], 'config': {'prebuild_index': True}, } with self.assertLogs('mkdocs') as cm: result = json.loads(index.generate_search_index()) self.assertEqual( '\n'.join(cm.output), 'WARNING:mkdocs.contrib.search.search_index:Failed to pre-build search index. Error: ', ) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True, side_effect=OSError) def test_prebuild_index_raises_oserror(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('foo', 'bar') mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index=True) expected = { 'docs': [], 'config': {'prebuild_index': True}, } with self.assertLogs('mkdocs') as cm: result = json.loads(index.generate_search_index()) self.assertEqual( '\n'.join(cm.output), 'WARNING:mkdocs.contrib.search.search_index:Failed to pre-build search index. Error: ', ) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 0) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index_false(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('', '') mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index=False) expected = { 'docs': [], 'config': {'prebuild_index': False}, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_popen.call_count, 0) self.assertEqual(mock_popen_obj.communicate.call_count, 0) self.assertEqual(result, expected) @unittest.skipUnless(search_index.haslunrpy, 'lunr.py is not installed') @mock.patch('mkdocs.contrib.search.search_index.lunr', autospec=True) def test_prebuild_index_python(self, mock_lunr): mock_lunr.return_value.serialize.return_value = {'mock': 'index'} index = search_index.SearchIndex(prebuild_index='python', lang='en') expected = { 'docs': [], 'config': {'prebuild_index': 'python', 'lang': 'en'}, 'index': {'mock': 'index'}, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_lunr.call_count, 1) self.assertEqual(result, expected) @unittest.skipIf(search_index.haslunrpy, 'lunr.py is installed') def test_prebuild_index_python_missing_lunr(self): # When the lunr.py dependencies are not installed no prebuilt index is created. index = search_index.SearchIndex(prebuild_index='python', lang='en') expected = { 'docs': [], 'config': {'prebuild_index': 'python', 'lang': 'en'}, } with self.assertLogs('mkdocs', level='WARNING'): result = json.loads(index.generate_search_index()) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index_node(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('{"mock": "index"}', None) mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index='node') expected = { 'docs': [], 'config': {'prebuild_index': 'node'}, 'index': {'mock': 'index'}, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected) mkdocs-1.6.1/mkdocs/tests/config/0000775000175000017500000000000014664334534016564 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/config/config_tests.py0000664000175000017500000002537014664334534021634 0ustar carstencarsten#!/usr/bin/env python import os import unittest import mkdocs from mkdocs import config from mkdocs.config import config_options as c from mkdocs.config import defaults from mkdocs.config.base import ValidationError from mkdocs.exceptions import ConfigurationError from mkdocs.localization import parse_locale from mkdocs.tests.base import dedent, tempdir class ConfigTests(unittest.TestCase): def test_missing_config_file(self): with self.assertRaises(ConfigurationError): config.load_config(config_file='bad_filename.yaml') def test_missing_site_name(self): conf = defaults.MkDocsConfig() conf.load_dict({}) errors, warnings = conf.validate() self.assertEqual( errors, [('site_name', ValidationError("Required configuration not provided."))] ) self.assertEqual(warnings, []) def test_nonexistant_config(self): with self.assertRaises(ConfigurationError): config.load_config(config_file='/path/that/is/not/real') @tempdir() def test_invalid_config(self, temp_path): file_contents = dedent( """ - ['index.md', 'Introduction'] - ['index.md', 'Introduction'] - ['index.md', 'Introduction'] """ ) config_path = os.path.join(temp_path, 'foo.yml') with open(config_path, 'w') as config_file: config_file.write(file_contents) with self.assertRaises(ConfigurationError): config.load_config(config_file=open(config_file.name, 'rb')) @tempdir() def test_config_option(self, temp_path): """ Users can explicitly set the config file using the '--config' option. Allows users to specify a config other than the default `mkdocs.yml`. """ expected_result = { 'site_name': 'Example', 'nav': [{'Introduction': 'index.md'}], } file_contents = dedent( """ site_name: Example nav: - 'Introduction': 'index.md' """ ) config_path = os.path.join(temp_path, 'mkdocs.yml') with open(config_path, 'w') as config_file: config_file.write(file_contents) os.mkdir(os.path.join(temp_path, 'docs')) result = config.load_config(config_file=config_file.name) self.assertEqual(result['site_name'], expected_result['site_name']) self.assertEqual(result['nav'], expected_result['nav']) @tempdir() @tempdir() def test_theme(self, mytheme, custom): configs = [ {}, # default theme {"theme": "readthedocs"}, # builtin theme {"theme": {'name': 'readthedocs'}}, # builtin as complex {"theme": {'name': None, 'custom_dir': mytheme}}, # custom only as complex { "theme": {'name': 'readthedocs', 'custom_dir': custom} }, # builtin and custom as complex { # user defined variables 'theme': { 'name': 'mkdocs', 'locale': 'fr', 'static_templates': ['foo.html'], 'show_sidebar': False, 'some_var': 'bar', } }, ] mkdocs_dir = os.path.abspath(os.path.dirname(mkdocs.__file__)) mkdocs_templates_dir = os.path.join(mkdocs_dir, 'templates') theme_dir = os.path.abspath(os.path.join(mkdocs_dir, 'themes')) results = ( { 'dirs': [os.path.join(theme_dir, 'mkdocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml'], 'vars': { 'name': 'mkdocs', 'color_mode': 'light', 'user_color_mode_toggle': False, 'locale': parse_locale('en'), 'include_search_page': False, 'search_index_only': False, 'analytics': {'gtag': None}, 'highlightjs': True, 'hljs_style': 'github', 'hljs_languages': [], 'hljs_style_dark': 'github-dark', 'navigation_depth': 2, 'nav_style': 'primary', 'shortcuts': {'help': 191, 'next': 78, 'previous': 80, 'search': 83}, }, }, { 'dirs': [os.path.join(theme_dir, 'readthedocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml'], 'vars': { 'name': 'readthedocs', 'locale': parse_locale('en'), 'include_search_page': True, 'search_index_only': False, 'analytics': {'anonymize_ip': False, 'gtag': None}, 'highlightjs': True, 'hljs_languages': [], 'hljs_style': 'github', 'include_homepage_in_sidebar': True, 'prev_next_buttons_location': 'bottom', 'navigation_depth': 4, 'sticky_navigation': True, 'logo': None, 'titles_only': False, 'collapse_navigation': True, }, }, { 'dirs': [os.path.join(theme_dir, 'readthedocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml'], 'vars': { 'name': 'readthedocs', 'locale': parse_locale('en'), 'include_search_page': True, 'search_index_only': False, 'analytics': {'anonymize_ip': False, 'gtag': None}, 'highlightjs': True, 'hljs_languages': [], 'hljs_style': 'github', 'include_homepage_in_sidebar': True, 'prev_next_buttons_location': 'bottom', 'navigation_depth': 4, 'sticky_navigation': True, 'logo': None, 'titles_only': False, 'collapse_navigation': True, }, }, { 'dirs': [mytheme, mkdocs_templates_dir], 'static_templates': ['sitemap.xml'], 'vars': {'name': None, 'locale': parse_locale('en')}, }, { 'dirs': [custom, os.path.join(theme_dir, 'readthedocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml'], 'vars': { 'name': 'readthedocs', 'locale': parse_locale('en'), 'include_search_page': True, 'search_index_only': False, 'analytics': {'anonymize_ip': False, 'gtag': None}, 'highlightjs': True, 'hljs_languages': [], 'hljs_style': 'github', 'include_homepage_in_sidebar': True, 'prev_next_buttons_location': 'bottom', 'navigation_depth': 4, 'sticky_navigation': True, 'logo': None, 'titles_only': False, 'collapse_navigation': True, }, }, { 'dirs': [os.path.join(theme_dir, 'mkdocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml', 'foo.html'], 'vars': { 'name': 'mkdocs', 'color_mode': 'light', 'user_color_mode_toggle': False, 'locale': parse_locale('fr'), 'show_sidebar': False, 'some_var': 'bar', 'include_search_page': False, 'search_index_only': False, 'analytics': {'gtag': None}, 'highlightjs': True, 'hljs_style': 'github', 'hljs_languages': [], 'hljs_style_dark': 'github-dark', 'navigation_depth': 2, 'nav_style': 'primary', 'shortcuts': {'help': 191, 'next': 78, 'previous': 80, 'search': 83}, }, }, ) for config_contents, result in zip(configs, results): with self.subTest(config_contents): conf = config.Config(schema=(('theme', c.Theme(default='mkdocs')),)) conf.load_dict(config_contents) errors, warnings = conf.validate() self.assertEqual(errors, []) self.assertEqual(warnings, []) self.assertEqual(conf['theme'].dirs, result['dirs']) self.assertEqual(conf['theme'].static_templates, set(result['static_templates'])) self.assertEqual(dict(conf['theme']), result['vars']) def test_empty_nav(self): conf = defaults.MkDocsConfig( config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml') ) conf.load_dict({'site_name': 'Example'}) conf.validate() self.assertEqual(conf['nav'], None) def test_error_on_pages(self): conf = defaults.MkDocsConfig() conf.load_dict( { 'site_name': 'Example', 'pages': ['index.md', 'about.md'], } ) errors, warnings = conf.validate() exp_error = "The configuration option 'pages' was removed from MkDocs. Use 'nav' instead." self.assertEqual(errors, [('pages', ValidationError(exp_error))]) self.assertEqual(warnings, []) def test_doc_dir_in_site_dir(self): test_configs = ( {'docs_dir': os.path.join('site', 'docs'), 'site_dir': 'site'}, {'docs_dir': 'docs', 'site_dir': '.'}, {'docs_dir': '.', 'site_dir': '.'}, {'docs_dir': 'docs', 'site_dir': ''}, {'docs_dir': '', 'site_dir': ''}, {'docs_dir': 'docs', 'site_dir': 'docs'}, ) for test_config in test_configs: with self.subTest(test_config): # Same as the default schema, but don't verify the docs_dir exists. conf = config.Config( schema=( ('docs_dir', c.Dir(default='docs')), ('site_dir', c.SiteDir(default='site')), ), config_file_path=os.path.join(os.path.abspath('..'), 'mkdocs.yml'), ) conf.load_dict(test_config) errors, warnings = conf.validate() self.assertEqual(len(errors), 1) self.assertEqual(warnings, []) mkdocs-1.6.1/mkdocs/tests/config/__init__.py0000664000175000017500000000000014664334534020663 0ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/config/base_tests.py0000664000175000017500000002446714664334534021307 0ustar carstencarstenimport os import unittest from mkdocs import exceptions from mkdocs.config import base from mkdocs.config import config_options as c from mkdocs.config import defaults from mkdocs.config.base import ValidationError from mkdocs.tests.base import change_dir, tempdir class ConfigBaseTests(unittest.TestCase): def test_unrecognised_keys(self): conf = defaults.MkDocsConfig() conf.load_dict( { 'not_a_valid_config_option': "test", } ) failed, warnings = conf.validate() self.assertEqual( warnings, [ ( 'not_a_valid_config_option', 'Unrecognised configuration name: not_a_valid_config_option', ) ], ) def test_missing_required(self): conf = defaults.MkDocsConfig() errors, warnings = conf.validate() self.assertEqual( errors, [('site_name', ValidationError('Required configuration not provided.'))] ) self.assertEqual(warnings, []) @tempdir() def test_load_from_file(self, temp_dir): """ Users can explicitly set the config file using the '--config' option. Allows users to specify a config other than the default `mkdocs.yml`. """ with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file: config_file.write("site_name: MkDocs Test\n") os.mkdir(os.path.join(temp_dir, 'docs')) cfg = base.load_config(config_file=config_file.name) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') @tempdir() def test_load_default_file(self, temp_dir): """Test that `mkdocs.yml` will be loaded when '--config' is not set.""" with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file: config_file.write("site_name: MkDocs Test\n") os.mkdir(os.path.join(temp_dir, 'docs')) with change_dir(temp_dir): cfg = base.load_config(config_file=None) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') @tempdir() def test_load_default_file_with_yaml(self, temp_dir): """Test that `mkdocs.yml` will be loaded when '--config' is not set.""" with open(os.path.join(temp_dir, 'mkdocs.yaml'), 'w') as config_file: config_file.write("site_name: MkDocs Test\n") os.mkdir(os.path.join(temp_dir, 'docs')) with change_dir(temp_dir): cfg = base.load_config(config_file=None) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') @tempdir() def test_load_default_file_prefer_yml(self, temp_dir): """Test that `mkdocs.yml` will be loaded when '--config' is not set.""" with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file1: config_file1.write("site_name: MkDocs Test1\n") with open(os.path.join(temp_dir, 'mkdocs.yaml'), 'w') as config_file2: config_file2.write("site_name: MkDocs Test2\n") os.mkdir(os.path.join(temp_dir, 'docs')) with change_dir(temp_dir): cfg = base.load_config(config_file=None) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test1') def test_load_from_missing_file(self): with self.assertRaisesRegex( exceptions.ConfigurationError, "Config file 'missing_file.yml' does not exist." ): base.load_config(config_file='missing_file.yml') @tempdir() def test_load_from_open_file(self, temp_path): """`load_config` can accept an open file descriptor.""" config_fname = os.path.join(temp_path, 'mkdocs.yml') config_file = open(config_fname, 'w+') config_file.write("site_name: MkDocs Test\n") config_file.flush() os.mkdir(os.path.join(temp_path, 'docs')) cfg = base.load_config(config_file=config_file) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') # load_config will always close the file self.assertTrue(config_file.closed) @tempdir() def test_load_from_closed_file(self, temp_dir): """ The `serve` command with auto-reload may pass in a closed file descriptor. Ensure `load_config` reloads the closed file. """ with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file: config_file.write("site_name: MkDocs Test\n") os.mkdir(os.path.join(temp_dir, 'docs')) cfg = base.load_config(config_file=config_file) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') @tempdir() def test_load_missing_required(self, temp_dir): """`site_name` is a required setting.""" with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file: config_file.write("site_dir: output\nsite_url: https://www.mkdocs.org\n") os.mkdir(os.path.join(temp_dir, 'docs')) with self.assertLogs('mkdocs') as cm: with self.assertRaises(exceptions.Abort): base.load_config(config_file=config_file.name) self.assertEqual( '\n'.join(cm.output), "ERROR:mkdocs.config:Config value 'site_name': Required configuration not provided.", ) def test_pre_validation_error(self): class InvalidConfigOption(c.BaseConfigOption): def pre_validation(self, config, key_name): raise ValidationError('pre_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, [('invalid_option', ValidationError('pre_validation error'))]) self.assertEqual(warnings, []) def test_run_validation_error(self): class InvalidConfigOption(c.BaseConfigOption): def run_validation(self, value): raise ValidationError('run_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, [('invalid_option', ValidationError('run_validation error'))]) self.assertEqual(warnings, []) def test_post_validation_error(self): class InvalidConfigOption(c.BaseConfigOption): def post_validation(self, config, key_name): raise ValidationError('post_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, [('invalid_option', ValidationError('post_validation error'))]) self.assertEqual(warnings, []) def test_pre_and_run_validation_errors(self): """A pre_validation error does not stop run_validation from running.""" class InvalidConfigOption(c.BaseConfigOption): def pre_validation(self, config, key_name): raise ValidationError('pre_validation error') def run_validation(self, value): raise ValidationError('run_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual( errors, [ ('invalid_option', ValidationError('pre_validation error')), ('invalid_option', ValidationError('run_validation error')), ], ) self.assertEqual(warnings, []) def test_run_and_post_validation_errors(self): """A run_validation error stops post_validation from running.""" class InvalidConfigOption(c.BaseConfigOption): def run_validation(self, value): raise ValidationError('run_validation error') def post_validation(self, config, key_name): raise ValidationError('post_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, [('invalid_option', ValidationError('run_validation error'))]) self.assertEqual(warnings, []) def test_validation_warnings(self): class InvalidConfigOption(c.BaseConfigOption): def pre_validation(self, config, key_name): self.warnings.append('pre_validation warning') def run_validation(self, value): self.warnings.append('run_validation warning') def post_validation(self, config, key_name): self.warnings.append('post_validation warning') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, []) self.assertEqual( warnings, [ ('invalid_option', 'pre_validation warning'), ('invalid_option', 'run_validation warning'), ('invalid_option', 'post_validation warning'), ], ) @tempdir() def test_load_from_file_with_relative_paths(self, config_dir): """ When explicitly setting a config file, paths should be relative to the config file, not the working directory. """ config_fname = os.path.join(config_dir, 'mkdocs.yml') with open(config_fname, 'w') as config_file: config_file.write("docs_dir: src\nsite_name: MkDocs Test\n") docs_dir = os.path.join(config_dir, 'src') os.mkdir(docs_dir) cfg = base.load_config(config_file=config_file) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') self.assertEqual(cfg.docs_dir, docs_dir) self.assertEqual(cfg.config_file_path, config_fname) self.assertIsInstance(cfg.config_file_path, str) def test_get_schema(self): class FooConfig: z = c.URL() aa = c.Type(int) self.assertEqual( base.get_schema(FooConfig), ( ('z', FooConfig.z), ('aa', FooConfig.aa), ), ) mkdocs-1.6.1/mkdocs/tests/config/config_options_tests.py0000664000175000017500000024503414664334534023410 0ustar carstencarstenfrom __future__ import annotations import contextlib import copy import io import logging import os import re import sys import textwrap import unittest from typing import TYPE_CHECKING, Any, Dict, List, Optional, TypeVar, Union from unittest import mock if TYPE_CHECKING: from typing_extensions import assert_type else: def assert_type(val, typ): return None import mkdocs from mkdocs.config import config_options as c from mkdocs.config import defaults from mkdocs.config.base import Config from mkdocs.plugins import BasePlugin, PluginCollection from mkdocs.tests.base import tempdir from mkdocs.theme import Theme from mkdocs.utils import write_file, yaml_load SomeConfig = TypeVar('SomeConfig', bound=Config) class UnexpectedError(Exception): pass class TestCase(unittest.TestCase): @contextlib.contextmanager def expect_error(self, **kwargs): [(key, msg)] = kwargs.items() with self.assertRaises(UnexpectedError) as cm: yield if isinstance(msg, re.Pattern): self.assertRegex(str(cm.exception), f'^{key}="{msg.pattern}"$') else: self.assertEqual(f'{key}="{msg}"', str(cm.exception)) def get_config( self, config_class: type[SomeConfig], cfg: dict[str, Any], warnings: dict[str, str] = {}, config_file_path=None, ) -> SomeConfig: config = config_class(config_file_path=config_file_path) config.load_dict(cfg) actual_errors, actual_warnings = config.validate() if actual_errors: raise UnexpectedError(', '.join(f'{key}="{msg}"' for key, msg in actual_errors)) self.assertEqual(warnings, dict(actual_warnings)) return config class TypeTest(TestCase): def test_single_type(self) -> None: class Schema(Config): option = c.Type(str) conf = self.get_config(Schema, {'option': "Testing"}) assert_type(conf.option, str) self.assertEqual(conf.option, "Testing") def test_multiple_types(self) -> None: class Schema(Config): option = c.Type((list, tuple)) conf = self.get_config(Schema, {'option': [1, 2, 3]}) self.assertEqual(conf.option, [1, 2, 3]) conf = self.get_config(Schema, {'option': (1, 2, 3)}) self.assertEqual(conf.option, (1, 2, 3)) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': {'a': 1}}) def test_length(self) -> None: class Schema(Config): option = c.Type(str, length=7) conf = self.get_config(Schema, {'option': "Testing"}) assert_type(conf.option, str) self.assertEqual(conf.option, "Testing") with self.expect_error( option="Expected type: with length 7 but received: 'Testing Long' with length 12" ): self.get_config(Schema, {'option': "Testing Long"}) def test_optional_with_default(self) -> None: with self.assertRaisesRegex(ValueError, "doesn't need to be wrapped into Optional"): c.Optional(c.Type(int, default=5)) class ChoiceTest(TestCase): def test_required(self) -> None: class Schema(Config): option = c.Choice(('python', 'node')) conf = self.get_config(Schema, {'option': 'python'}) assert_type(conf.option, str) self.assertEqual(conf.option, 'python') def test_optional(self) -> None: class Schema(Config): option = c.Optional(c.Choice(('python', 'node'))) conf = self.get_config(Schema, {'option': 'python'}) assert_type(conf.option, Optional[str]) self.assertEqual(conf.option, 'python') conf = self.get_config(Schema, {}) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, None) def test_default(self) -> None: class Schema(Config): option = c.Choice(('a', 'b', 'c'), default='b') conf = self.get_config(Schema, {}) assert_type(conf.option, str) self.assertEqual(conf.option, 'b') conf = self.get_config(Schema, {}) self.assertEqual(conf.option, 'b') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, 'b') with self.expect_error(option="Expected one of: ('a', 'b', 'c') but received: 'go'"): self.get_config(Schema, {'option': 'go'}) def test_invalid_default(self) -> None: with self.assertRaises(ValueError): c.Choice(('a', 'b'), default='c') with self.assertRaises(ValueError): c.Choice(('a', 'b'), default='c', required=True) def test_invalid_choice(self) -> None: class Schema(Config): option = c.Choice(('python', 'node')) with self.expect_error(option="Expected one of: ('python', 'node') but received: 'go'"): self.get_config(Schema, {'option': 'go'}) def test_invalid_choices(self) -> None: with self.assertRaises(ValueError): c.Choice('') with self.assertRaises(ValueError): c.Choice([]) class DeprecatedTest(TestCase): def test_deprecated_option_simple(self) -> None: class Schema(Config): d = c.Deprecated() self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_deprecated_option_message(self) -> None: class Schema(Config): d = c.Deprecated(message='custom message for {} key') self.get_config(Schema, {'d': 'value'}, warnings={'d': 'custom message for d key'}) def test_deprecated_option_with_type(self) -> None: class Schema(Config): d = c.Deprecated(option_type=c.Type(str)) self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_deprecated_option_with_invalid_type(self) -> None: class Schema(Config): d = c.Deprecated(option_type=c.Type(list)) with self.expect_error(d="Expected type: but received: "): self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_removed_option(self) -> None: class Schema(Config): d = c.Deprecated(removed=True, moved_to='foo') with self.expect_error( d="The configuration option 'd' was removed from MkDocs. Use 'foo' instead.", ): self.get_config(Schema, {'d': 'value'}) def test_deprecated_option_with_type_undefined(self) -> None: class Schema(Config): option = c.Deprecated(option_type=c.Type(str)) self.get_config(Schema, {'option': None}) def test_deprecated_option_move(self) -> None: class Schema(Config): new = c.Type(str) old = c.Deprecated(moved_to='new') conf = self.get_config( Schema, {'old': 'value'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'new' instead." ), ) self.assertEqual(conf, {'new': 'value', 'old': None}) def test_deprecated_option_move_complex(self) -> None: class Schema(Config): foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') conf = self.get_config( Schema, {'old': 'value'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) self.assertEqual(conf, {'foo': {'bar': 'value'}, 'old': None}) def test_deprecated_option_move_existing(self) -> None: class Schema(Config): foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') conf = self.get_config( Schema, {'old': 'value', 'foo': {'existing': 'existing'}}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) self.assertEqual(conf, {'foo': {'existing': 'existing', 'bar': 'value'}, 'old': None}) def test_deprecated_option_move_invalid(self) -> None: class Schema(Config): foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') with self.expect_error(foo="Expected type: but received: "): self.get_config( Schema, {'old': 'value', 'foo': 'wrong type'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) class IpAddressTest(TestCase): class Schema(Config): option = c.IpAddress() def test_valid_address(self) -> None: addr = '127.0.0.1:8000' conf = self.get_config(self.Schema, {'option': addr}) assert_type(conf.option, c._IpAddressValue) assert_type(conf.option.host, str) assert_type(conf.option.port, int) self.assertEqual(str(conf.option), addr) self.assertEqual(conf.option.host, '127.0.0.1') self.assertEqual(conf.option.port, 8000) def test_valid_IPv6_address(self) -> None: addr = '::1:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf.option), addr) self.assertEqual(conf.option.host, '::1') self.assertEqual(conf.option.port, 8000) def test_valid_full_IPv6_address(self) -> None: addr = '[2001:db8:85a3::8a2e:370:7334]:123' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(conf.option.host, '2001:db8:85a3::8a2e:370:7334') self.assertEqual(conf.option.port, 123) def test_named_address(self) -> None: addr = 'localhost:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf.option), addr) self.assertEqual(conf.option.host, 'localhost') self.assertEqual(conf.option.port, 8000) def test_default_address(self) -> None: addr = '127.0.0.1:8000' class Schema(Config): option = c.IpAddress(default=addr) conf = self.get_config(Schema, {'option': None}) self.assertEqual(str(conf.option), addr) self.assertEqual(conf.option.host, '127.0.0.1') self.assertEqual(conf.option.port, 8000) def test_bind_all_IPv4_address(self): addr = '0.0.0.0:8000' class Schema(Config): option = c.IpAddress(default=addr) conf = self.get_config(Schema, {'option': None}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '0.0.0.0') self.assertEqual(conf['option'].port, 8000) def test_bind_all_IPv6_address(self): addr = ':::8000' class Schema(Config): option = c.IpAddress(default=addr) conf = self.get_config(Schema, {'option': None}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '::') self.assertEqual(conf['option'].port, 8000) @unittest.skipIf( sys.version_info < (3, 9, 5), "Leading zeros allowed in IP addresses before Python3.9.5", ) def test_invalid_leading_zeros(self) -> None: with self.expect_error( option="'127.000.000.001' does not appear to be an IPv4 or IPv6 address" ): self.get_config(self.Schema, {'option': '127.000.000.001:8000'}) def test_invalid_address_range(self) -> None: with self.expect_error(option="'277.0.0.1' does not appear to be an IPv4 or IPv6 address"): self.get_config(self.Schema, {'option': '277.0.0.1:8000'}) def test_invalid_address_format(self) -> None: with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': '127.0.0.18000'}) def test_invalid_address_type(self) -> None: with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': 123}) def test_invalid_address_port(self) -> None: with self.expect_error(option="'foo' is not a valid port"): self.get_config(self.Schema, {'option': '127.0.0.1:foo'}) def test_invalid_address_missing_port(self) -> None: with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': '127.0.0.1'}) class URLTest(TestCase): def test_valid_url(self) -> None: class Schema(Config): option = c.URL() conf = self.get_config(Schema, {'option': "https://mkdocs.org"}) assert_type(conf.option, str) self.assertEqual(conf.option, "https://mkdocs.org") conf = self.get_config(Schema, {'option': ""}) self.assertEqual(conf.option, "") def test_valid_url_is_dir(self) -> None: class Schema(Config): option = c.URL(is_dir=True) conf = self.get_config(Schema, {'option': "http://mkdocs.org/"}) self.assertEqual(conf.option, "http://mkdocs.org/") conf = self.get_config(Schema, {'option': "https://mkdocs.org"}) self.assertEqual(conf.option, "https://mkdocs.org/") def test_optional(self): class Schema(Config): option = c.Optional(c.URL(is_dir=True)) conf = self.get_config(Schema, {'option': ''}) self.assertEqual(conf.option, '') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, None) def test_invalid_url(self) -> None: class Schema(Config): option = c.URL() with self.expect_error(option="Required configuration not provided."): self.get_config(Schema, {'option': None}) for url in "www.mkdocs.org", "//mkdocs.org/test", "http:/mkdocs.org/", "/hello/": with self.subTest(url=url): with self.expect_error( option="The URL isn't valid, it should include the http:// (scheme)" ): self.get_config(Schema, {'option': url}) def test_invalid_type(self) -> None: class Schema(Config): option = c.URL() with self.expect_error(option="Expected a string, got "): self.get_config(Schema, {'option': 1}) class EditURITest(TestCase): class Schema(Config): repo_url = c.Optional(c.URL()) repo_name = c.Optional(c.RepoName('repo_url')) edit_uri_template = c.Optional(c.EditURITemplate('edit_uri')) edit_uri = c.Optional(c.EditURI('repo_url')) def test_repo_name_github(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs"}, ) assert_type(conf.repo_name, Optional[str]) self.assertEqual(conf.repo_name, "GitHub") def test_repo_name_bitbucket(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://bitbucket.org/gutworth/six/"}, ) self.assertEqual(conf.repo_name, "Bitbucket") def test_repo_name_gitlab(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://gitlab.com/gitlab-org/gitlab-ce/"}, ) self.assertEqual(conf.repo_name, "GitLab") def test_repo_name_custom(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://launchpad.net/python-tuskarclient"}, ) self.assertEqual(conf.repo_name, "Launchpad") def test_edit_uri_github(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs"}, ) assert_type(conf.edit_uri, Optional[str]) assert_type(conf.repo_url, Optional[str]) self.assertEqual(conf.edit_uri, 'edit/master/docs/') self.assertEqual(conf.repo_url, "https://github.com/mkdocs/mkdocs") def test_edit_uri_bitbucket(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://bitbucket.org/gutworth/six/"}, ) self.assertEqual(conf.edit_uri, 'src/default/docs/') self.assertEqual(conf.repo_url, "https://bitbucket.org/gutworth/six/") def test_edit_uri_gitlab(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://gitlab.com/gitlab-org/gitlab-ce/"}, ) self.assertEqual(conf.edit_uri, 'edit/master/docs/') def test_edit_uri_custom(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://launchpad.net/python-tuskarclient"}, ) self.assertEqual(conf.edit_uri, None) self.assertEqual(conf.repo_url, "https://launchpad.net/python-tuskarclient") def test_repo_name_custom_and_empty_edit_uri(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs", 'repo_name': 'mkdocs'}, ) self.assertEqual(conf.edit_uri, 'edit/master/docs/') def test_edit_uri_template_ok(self) -> None: conf = self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/foo/docs/{path}', }, ) assert_type(conf.edit_uri_template, Optional[str]) self.assertEqual(conf.edit_uri_template, 'edit/foo/docs/{path}') def test_edit_uri_template_errors(self) -> None: with self.expect_error( edit_uri_template=re.compile(r'.*[{}].*') # Complains about unclosed '{' or missing '}' ): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{path', }, ) with self.expect_error(edit_uri_template=re.compile(r'.*\bz\b.*')): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{path!z}', }, ) with self.expect_error(edit_uri_template="Unknown template substitute: 'foo'"): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{foo}', }, ) def test_edit_uri_template_warning(self) -> None: conf = self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri': 'edit', 'edit_uri_template': 'edit/master/{path}', }, warnings=dict( edit_uri_template="The option 'edit_uri' has no effect when 'edit_uri_template' is set." ), ) self.assertEqual(conf.edit_uri_template, 'edit/master/{path}') class ListOfItemsTest(TestCase): def test_int_type(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type(int)) conf = self.get_config(Schema, {'option': [1, 2, 3]}) assert_type(conf.option, List[int]) self.assertEqual(conf.option, [1, 2, 3]) with self.expect_error( option="Expected type: but received: " ): conf = self.get_config(Schema, {'option': [1, None, 3]}) def test_combined_float_type(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type((int, float))) conf = self.get_config(Schema, {'option': [1.4, 2, 3]}) self.assertEqual(conf.option, [1.4, 2, 3]) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': ['a']}) def test_list_default(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type(int), default=[]) conf = self.get_config(Schema, {}) assert_type(conf.option, List[int]) self.assertEqual(conf.option, []) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) def test_none_without_default(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type(str)) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) conf = self.get_config(Schema, {'option': ['foo']}) self.assertEqual(conf.option, ['foo']) def test_optional(self) -> None: class Schema(Config): option = c.Optional(c.ListOfItems(c.Type(str))) conf = self.get_config(Schema, {}) assert_type(conf.option, Optional[List[str]]) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': ['foo']}) self.assertEqual(conf.option, ['foo']) def test_list_of_optional(self) -> None: class Schema(Config): option = c.ListOfItems(c.Optional(c.Type(int)), default=[]) conf = self.get_config(Schema, {}) assert_type(conf.option, List[Optional[int]]) self.assertEqual(conf.option, []) conf = self.get_config(Schema, {'option': [4, None]}) self.assertEqual(conf.option, [4, None]) with self.expect_error(option="Expected type: but received: "): conf = self.get_config(Schema, {'option': ['foo']}) self.assertEqual(conf.option, ['foo']) def test_string_not_a_list_of_strings(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type(str)) with self.expect_error(option="Expected a list of items, but a was given."): self.get_config(Schema, {'option': 'foo'}) def test_post_validation_error(self) -> None: class Schema(Config): option = c.ListOfItems(c.IpAddress()) with self.expect_error(option="'asdf' is not a valid port"): self.get_config(Schema, {'option': ["localhost:8000", "1.2.3.4:asdf"]}) def test_warning(self) -> None: class Schema(Config): option = c.ListOfItems(c.Deprecated()) self.get_config( Schema, {'option': ['a']}, warnings=dict( option="The configuration option 'option[0]' has been " "deprecated and will be removed in a future release." ), ) class ExtraScriptsTest(TestCase): def test_js_async(self) -> None: class Schema(Config): option = c.ListOfItems(c.ExtraScript(), default=[]) conf = self.get_config(Schema, {'option': ['foo.js', {'path': 'bar.js', 'async': True}]}) assert_type(conf.option, List[Union[c.ExtraScriptValue, str]]) self.assertEqual(len(conf.option), 2) self.assertIsInstance(conf.option[1], c.ExtraScriptValue) self.assertEqual( conf.option, [ 'foo.js', {'path': 'bar.js', 'type': '', 'defer': False, 'async': True}, ], ) def test_mjs(self) -> None: class Schema(Config): option = c.ListOfItems(c.ExtraScript(), default=[]) conf = self.get_config( Schema, {'option': ['foo.mjs', {'path': 'bar.js', 'type': 'module'}]} ) assert_type(conf.option, List[Union[c.ExtraScriptValue, str]]) self.assertEqual(len(conf.option), 2) self.assertIsInstance(conf.option[0], c.ExtraScriptValue) self.assertEqual( conf.option, [ {'path': 'foo.mjs', 'type': 'module', 'defer': False, 'async': False}, {'path': 'bar.js', 'type': 'module', 'defer': False, 'async': False}, ], ) def test_wrong_type(self) -> None: class Schema(Config): option = c.ListOfItems(c.ExtraScript(), default=[]) with self.expect_error( option="The configuration is invalid. Expected a key-value mapping (dict) but received: " ): self.get_config(Schema, {'option': [1]}) def test_unknown_key(self) -> None: class Schema(Config): option = c.ListOfItems(c.ExtraScript(), default=[]) conf = self.get_config( Schema, {'option': [{'path': 'foo.js', 'foo': 'bar'}]}, warnings=dict(option="Sub-option 'foo': Unrecognised configuration name: foo"), ) self.assertEqual( conf.option, [{'path': 'foo.js', 'type': '', 'defer': False, 'async': False, 'foo': 'bar'}], ) class DictOfItemsTest(TestCase): def test_int_type(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(int)) conf = self.get_config(Schema, {'option': {"a": 1, "b": 2}}) assert_type(conf.option, Dict[str, int]) self.assertEqual(conf.option, {"a": 1, "b": 2}) with self.expect_error( option="Expected type: but received: " ): conf = self.get_config(Schema, {'option': {"a": 1, "b": None}}) def test_combined_float_type(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type((int, float))) conf = self.get_config(Schema, {'option': {"a": 1, "b": 2.3}}) self.assertEqual(conf.option, {"a": 1, "b": 2.3}) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': {"a": 1, "b": "2"}}) def test_dict_default(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(int), default={}) conf = self.get_config(Schema, {}) assert_type(conf.option, Dict[str, int]) self.assertEqual(conf.option, {}) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) def test_none_without_default(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(str)) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) conf = self.get_config(Schema, {'option': {"foo": "bar"}}) self.assertEqual(conf.option, {"foo": "bar"}) def test_optional(self) -> None: class Schema(Config): option = c.Optional(c.DictOfItems(c.Type(str))) conf = self.get_config(Schema, {}) assert_type(conf.option, Optional[Dict[str, str]]) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': {"foo": "bar"}}) self.assertEqual(conf.option, {"foo": "bar"}) def test_dict_of_optional(self) -> None: class Schema(Config): option = c.DictOfItems(c.Optional(c.Type(int)), default={}) conf = self.get_config(Schema, {}) assert_type(conf.option, Dict[str, Optional[int]]) self.assertEqual(conf.option, {}) conf = self.get_config(Schema, {'option': {"a": 1, "b": None}}) self.assertEqual(conf.option, {"a": 1, "b": None}) with self.expect_error(option="Expected type: but received: "): conf = self.get_config(Schema, {'option': {"foo": "bar"}}) self.assertEqual(conf.option, {"foo": "bar"}) def test_string_not_a_dict_of_strings(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(str)) with self.expect_error(option="Expected a dict of items, but a was given."): self.get_config(Schema, {'option': 'foo'}) def test_post_validation_error(self) -> None: class Schema(Config): option = c.DictOfItems(c.IpAddress()) with self.expect_error(option="'asdf' is not a valid port"): self.get_config( Schema, {'option': {"ip_foo": "localhost:8000", "ip_bar": "1.2.3.4:asdf"}} ) def test_all_keys_are_strings(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(int)) with self.expect_error( option="Expected type: for keys, but received: (key=2)" ): self.get_config(Schema, {'option': {"a": 1, 2: 3}}) class FilesystemObjectTest(TestCase): def test_valid_dir(self) -> None: for cls in c.Dir, c.FilesystemObject: with self.subTest(cls): d = os.path.dirname(__file__) class Schema(Config): option = cls(exists=True) conf = self.get_config(Schema, {'option': d}) assert_type(conf.option, str) self.assertEqual(conf.option, d) def test_valid_file(self) -> None: for cls in c.File, c.FilesystemObject: with self.subTest(cls): f = __file__ class Schema(Config): option = cls(exists=True) conf = self.get_config(Schema, {'option': f}) assert_type(conf.option, str) self.assertEqual(conf.option, f) def test_missing_without_exists(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): d = os.path.join("not", "a", "real", "path", "I", "hope") class Schema(Config): option = cls() conf = self.get_config(Schema, {'option': d}) assert_type(conf.option, str) self.assertEqual(conf.option, os.path.abspath(d)) def test_missing_but_required(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): d = os.path.join("not", "a", "real", "path", "I", "hope") class Schema(Config): option = cls(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing .+")): self.get_config(Schema, {'option': d}) def test_not_a_dir(self) -> None: d = __file__ class Schema(Config): option = c.Dir(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing directory.")): self.get_config(Schema, {'option': d}) def test_not_a_file(self) -> None: d = os.path.dirname(__file__) class Schema(Config): option = c.File(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing file.")): self.get_config(Schema, {'option': d}) def test_incorrect_type_error(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): class Schema(Config): option = cls() with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': 1}) with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': []}) def test_with_unicode(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): class Schema(Config): dir = cls() conf = self.get_config(Schema, {'dir': 'юникод'}) self.assertIsInstance(conf.dir, str) def test_dir_bytes(self) -> None: class Schema(Config): dir = c.Dir() with self.expect_error(dir="Expected type: but received: "): self.get_config(Schema, {'dir': b'foo'}) def test_config_dir_prepended(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): base_path = os.path.dirname(os.path.abspath(__file__)) class Schema(Config): dir = cls() conf = self.get_config( Schema, {'dir': 'foo'}, config_file_path=os.path.join(base_path, 'mkdocs.yml'), ) self.assertEqual(conf.dir, os.path.join(base_path, 'foo')) def test_site_dir_is_config_dir_fails(self) -> None: class Schema(Config): dir = c.DocsDir() with self.expect_error( dir="The 'dir' should not be the parent directory of the config file. " "Use a child directory instead so that the 'dir' is a sibling of the config file." ): self.get_config( Schema, {'dir': '.'}, config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'), ) class ListOfPathsTest(TestCase): def test_valid_path(self) -> None: paths = [os.path.dirname(__file__)] class Schema(Config): option = c.ListOfPaths() self.get_config(Schema, {'option': paths}) def test_missing_path(self) -> None: paths = [os.path.join("does", "not", "exist", "i", "hope")] class Schema(Config): option = c.ListOfPaths() with self.expect_error( option=f"The path '{paths[0]}' isn't an existing file or directory." ): self.get_config(Schema, {'option': paths}) def test_non_path(self) -> None: paths = [os.path.dirname(__file__), None] class Schema(Config): option = c.ListOfPaths() with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': paths}) def test_empty_list(self) -> None: class Schema(Config): option = c.ListOfPaths() conf = self.get_config(Schema, {'option': []}) assert_type(conf.option, List[str]) self.assertEqual(conf.option, []) def test_none(self) -> None: class Schema(Config): option = c.ListOfPaths() with self.expect_error(option="Required configuration not provided."): self.get_config(Schema, {'option': None}) def test_non_list(self) -> None: paths = os.path.dirname(__file__) class Schema(Config): option = c.ListOfPaths() with self.expect_error(option="Expected a list of items, but a was given."): self.get_config(Schema, {'option': paths}) def test_file(self) -> None: paths = [__file__] class Schema(Config): option = c.ListOfPaths() conf = self.get_config(Schema, {'option': paths}) assert_type(conf.option, List[str]) @tempdir() def test_paths_localized_to_config(self, base_path) -> None: with open(os.path.join(base_path, 'foo'), 'w') as f: f.write('hi') class Schema(Config): watch = c.ListOfPaths() conf = self.get_config( Schema, {'watch': ['foo']}, config_file_path=os.path.join(base_path, 'mkdocs.yml'), ) self.assertEqual(conf.watch, [os.path.join(base_path, 'foo')]) class SiteDirTest(TestCase): class Schema(Config): site_dir = c.SiteDir() docs_dir = c.Dir() def test_doc_dir_in_site_dir(self) -> None: j = os.path.join # The parent dir is not the same on every system, so use the actual dir name parent_dir = mkdocs.__file__.split(os.sep)[-3] test_configs = ( {'docs_dir': j('site', 'docs'), 'site_dir': 'site'}, {'docs_dir': 'docs', 'site_dir': '.'}, {'docs_dir': '.', 'site_dir': '.'}, {'docs_dir': 'docs', 'site_dir': ''}, {'docs_dir': '', 'site_dir': ''}, {'docs_dir': j('..', parent_dir, 'docs'), 'site_dir': 'docs'}, {'docs_dir': 'docs', 'site_dir': '/'}, ) for test_config in test_configs: with self.subTest(test_config): with self.expect_error( site_dir=re.compile(r"The 'docs_dir' should not be within the 'site_dir'.*") ): self.get_config(self.Schema, test_config) def test_site_dir_in_docs_dir(self) -> None: j = os.path.join test_configs = ( {'docs_dir': 'docs', 'site_dir': j('docs', 'site')}, {'docs_dir': '.', 'site_dir': 'site'}, {'docs_dir': '', 'site_dir': 'site'}, {'docs_dir': '/', 'site_dir': 'site'}, ) for test_config in test_configs: with self.subTest(test_config): with self.expect_error( site_dir=re.compile(r"The 'site_dir' should not be within the 'docs_dir'.*") ): self.get_config(self.Schema, test_config) def test_common_prefix(self) -> None: """Legitimate settings with common prefixes should not fail validation.""" test_configs = ( {'docs_dir': 'docs', 'site_dir': 'docs-site'}, {'docs_dir': 'site-docs', 'site_dir': 'site'}, ) for test_config in test_configs: with self.subTest(test_config): self.get_config(self.Schema, test_config) class ThemeTest(TestCase): def test_theme_as_string(self) -> None: class Schema(Config): option = c.Theme() conf = self.get_config(Schema, {'option': "mkdocs"}) assert_type(conf.option, Theme) assert_type(conf.option.name, Optional[str]) self.assertEqual(conf.option.name, 'mkdocs') def test_uninstalled_theme_as_string(self) -> None: class Schema(Config): theme = c.Theme() plugins = c.Plugins(theme_key='theme') with self.expect_error( theme=re.compile( r"Unrecognised theme name: 'mkdocs2'. The available installed themes are: .+" ) ): self.get_config(Schema, {'theme': "mkdocs2", 'plugins': "search"}) def test_theme_default(self) -> None: class Schema(Config): option = c.Theme(default='mkdocs') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option.name, 'mkdocs') def test_theme_as_simple_config(self) -> None: config = { 'name': 'mkdocs', } class Schema(Config): option = c.Theme() conf = self.get_config(Schema, {'option': config}) self.assertEqual(conf.option.name, 'mkdocs') @tempdir() def test_theme_as_complex_config(self, custom_dir) -> None: config = { 'name': 'mkdocs', 'custom_dir': custom_dir, 'static_templates': ['sitemap.html'], 'show_sidebar': False, } class Schema(Config): option = c.Theme() conf = self.get_config(Schema, {'option': config}) self.assertEqual(conf.option.name, 'mkdocs') self.assertEqual(conf.option.custom_dir, custom_dir) self.assertIn(custom_dir, conf.option.dirs) self.assertEqual( conf.option.static_templates, {'404.html', 'sitemap.xml', 'sitemap.html'}, ) self.assertEqual(conf.option['show_sidebar'], False) def test_theme_name_is_none(self) -> None: config = { 'name': None, } class Schema(Config): option = c.Theme() with self.expect_error(option="At least one of 'name' or 'custom_dir' must be defined."): self.get_config(Schema, {'option': config}) def test_theme_config_missing_name(self) -> None: config = { 'custom_dir': 'custom', } class Schema(Config): option = c.Theme() with self.expect_error(option="No theme name set."): self.get_config(Schema, {'option': config}) def test_uninstalled_theme_as_config(self) -> None: config = { 'name': 'mkdocs2', } class Schema(Config): option = c.Theme() with self.expect_error( option=re.compile( r"Unrecognised theme name: 'mkdocs2'. The available installed themes are: .+" ) ): self.get_config(Schema, {'option': config}) def test_theme_invalid_type(self) -> None: config = ['mkdocs2'] class Schema(Config): option = c.Theme() with self.expect_error( option="Invalid type . Expected a string or key/value pairs." ): self.get_config(Schema, {'option': config}) def test_post_validation_none_theme_name_and_missing_custom_dir(self) -> None: config = { 'theme': { 'name': None, }, } class Schema(Config): theme = c.Theme() with self.expect_error(theme="At least one of 'name' or 'custom_dir' must be defined."): self.get_config(Schema, config) @tempdir() def test_post_validation_inexisting_custom_dir(self, abs_base_path) -> None: path = os.path.join(abs_base_path, 'inexisting_custom_dir') config = { 'theme': { 'name': None, 'custom_dir': path, }, } class Schema(Config): theme = c.Theme() with self.expect_error(theme=f"The path set in custom_dir ('{path}') does not exist."): self.get_config(Schema, config) def test_post_validation_locale_none(self) -> None: config = { 'theme': { 'name': 'mkdocs', 'locale': None, }, } class Schema(Config): theme = c.Theme() with self.expect_error(theme="'locale' must be a string."): self.get_config(Schema, config) def test_post_validation_locale_invalid_type(self) -> None: config = { 'theme': { 'name': 'mkdocs', 'locale': 0, }, } class Schema(Config): theme = c.Theme() with self.expect_error(theme="'locale' must be a string."): self.get_config(Schema, config) def test_post_validation_locale(self) -> None: config = { 'theme': { 'name': 'mkdocs', 'locale': 'fr', }, } class Schema(Config): theme = c.Theme() conf = self.get_config(Schema, config) self.assertEqual(conf.theme.locale.language, 'fr') class NavTest(TestCase): class Schema(Config): option = c.Nav() def test_old_format(self) -> None: with self.expect_error( option="Expected nav item to be a string or dict, got a list: ['index.md']" ): self.get_config(self.Schema, {'option': [['index.md']]}) def test_provided_dict(self) -> None: conf = self.get_config(self.Schema, {'option': ['index.md', {"Page": "page.md"}]}) self.assertEqual(conf.option, ['index.md', {'Page': 'page.md'}]) def test_provided_empty(self) -> None: conf = self.get_config(self.Schema, {'option': []}) self.assertEqual(conf.option, None) def test_normal_nav(self) -> None: nav_yaml = textwrap.dedent( '''\ - Home: index.md - getting-started.md - User Guide: - Overview: user-guide/index.md - Installation: user-guide/installation.md ''' ) nav = yaml_load(io.StringIO(nav_yaml)) conf = self.get_config(self.Schema, {'option': nav}) self.assertEqual(conf.option, nav) def test_invalid_type_dict(self) -> None: with self.expect_error(option="Expected nav to be a list, got a dict: {}"): self.get_config(self.Schema, {'option': {}}) def test_invalid_type_int(self) -> None: with self.expect_error(option="Expected nav to be a list, got a int: 5"): self.get_config(self.Schema, {'option': 5}) def test_invalid_item_int(self) -> None: with self.expect_error(option="Expected nav item to be a string or dict, got a int: 1"): self.get_config(self.Schema, {'option': [1]}) def test_invalid_item_none(self) -> None: with self.expect_error(option="Expected nav item to be a string or dict, got None"): self.get_config(self.Schema, {'option': [None]}) def test_invalid_children_config_int(self) -> None: with self.expect_error(option="Expected nav to be a list, got a int: 1"): self.get_config(self.Schema, {'option': [{"foo.md": [{"bar.md": 1}]}]}) def test_invalid_children_config_none(self) -> None: with self.expect_error(option="Expected nav to be a list, got None"): self.get_config(self.Schema, {'option': [{"foo.md": None}]}) def test_invalid_children_empty_dict(self) -> None: nav = ['foo', {}] with self.expect_error(option="Expected nav item to be a dict of size 1, got a dict: {}"): self.get_config(self.Schema, {'option': nav}) def test_invalid_nested_list(self) -> None: nav = [{'aaa': [[{"bbb": "user-guide/index.md"}]]}] with self.expect_error( option="Expected nav item to be a string or dict, got a list: [{'bbb': 'user-guide/index.md'}]" ): self.get_config(self.Schema, {'option': nav}) def test_invalid_children_oversized_dict(self) -> None: nav = [{"aaa": [{"bbb": "user-guide/index.md", "ccc": "user-guide/installation.md"}]}] with self.expect_error( option="Expected nav item to be a dict of size 1, got dict with keys ('bbb', 'ccc')" ): self.get_config(self.Schema, {'option': nav}) def test_warns_for_dict(self) -> None: self.get_config( self.Schema, {'option': [{"a": {"b": "c.md", "d": "e.md"}}]}, warnings=dict(option="Expected nav to be a list, got dict with keys ('b', 'd')"), ) class PrivateTest(TestCase): def test_defined(self) -> None: class Schema(Config): option = c.Private[Any]() with self.expect_error(option="For internal use only."): self.get_config(Schema, {'option': 'somevalue'}) class SubConfigTest(TestCase): def test_subconfig_wrong_type(self) -> None: # Test that an error is raised if subconfig does not receive a dict class Schema(Config): option = c.SubConfig() for val in "not_a_dict", ("not_a_dict",), ["not_a_dict"]: with self.subTest(val): with self.expect_error( option=re.compile( r"The configuration is invalid. Expected a key-value mapping " r"\(dict\) but received: .+" ) ): self.get_config(Schema, {'option': val}) def test_subconfig_unknown_option(self) -> None: class Schema(Config): option = c.SubConfig(validate=True) conf = self.get_config( Schema, {'option': {'unknown': 0}}, warnings=dict(option="Sub-option 'unknown': Unrecognised configuration name: unknown"), ) self.assertEqual(conf.option, {"unknown": 0}) def test_subconfig_invalid_option(self) -> None: class Sub(Config): cc = c.Choice(('foo', 'bar')) class Schema(Config): option = c.SubConfig(Sub) with self.expect_error( option="Sub-option 'cc': Expected one of: ('foo', 'bar') but received: True" ): self.get_config(Schema, {'option': {'cc': True}}) def test_subconfig_normal(self) -> None: class Sub(Config): cc = c.Choice(('foo', 'bar')) class Schema(Config): option = c.SubConfig(Sub) conf = self.get_config(Schema, {'option': {'cc': 'foo'}}) assert_type(conf.option, Sub) self.assertEqual(conf.option, {'cc': 'foo'}) assert_type(conf.option.cc, str) self.assertEqual(conf.option.cc, 'foo') def test_subconfig_with_multiple_items(self) -> None: # This had a bug where subsequent items would get merged into the same dict. class Sub(Config): value = c.Type(str) class Schema(Config): the_items = c.ListOfItems(c.SubConfig(Sub)) conf = self.get_config( Schema, { 'the_items': [ {'value': 'a'}, {'value': 'b'}, ] }, ) assert_type(conf.the_items, List[Sub]) self.assertEqual(conf.the_items, [{'value': 'a'}, {'value': 'b'}]) assert_type(conf.the_items[1].value, str) self.assertEqual(conf.the_items[1].value, 'b') def test_optional(self) -> None: class Sub(Config): opt = c.Optional(c.Type(int)) class Schema(Config): sub = c.Optional(c.ListOfItems(c.SubConfig(Sub))) conf = self.get_config(Schema, {}) self.assertEqual(conf.sub, None) conf = self.get_config(Schema, {'sub': None}) self.assertEqual(conf.sub, None) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {}]}) assert_type(conf.sub, Optional[List[Sub]]) self.assertEqual(conf.sub, [{'opt': 1}, {'opt': None}]) assert conf.sub is not None assert_type(conf.sub[0].opt, Optional[int]) self.assertEqual(conf.sub[0].opt, 1) conf = self.get_config(Schema, {'sub': []}) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {'opt': 2}]}) self.assertEqual(conf.sub, [{'opt': 1}, {'opt': 2}]) def test_required(self) -> None: class Sub(Config): opt = c.Type(int) class Schema(Config): sub = c.ListOfItems(c.SubConfig(Sub)) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {'sub': None}) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): conf = self.get_config(Schema, {'sub': [{'opt': 'asdf'}, {}]}) conf = self.get_config(Schema, {'sub': []}) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {'opt': 2}]}) assert_type(conf.sub, List[Sub]) self.assertEqual(conf.sub, [{'opt': 1}, {'opt': 2}]) assert_type(conf.sub[0].opt, int) self.assertEqual(conf.sub[0].opt, 1) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): self.get_config(Schema, {'sub': [{'opt': 'z'}, {'opt': 2}]}) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): conf = self.get_config(Schema, {'sub': [{'opt': 'z'}, {'opt': 2}]}) with self.expect_error( sub="The configuration is invalid. Expected a key-value mapping " "(dict) but received: " ): conf = self.get_config(Schema, {'sub': [1, 2]}) def test_default(self) -> None: class Sub(Config): opt = c.Type(int) class Schema(Config): sub = c.ListOfItems(c.SubConfig(Sub), default=[]) conf = self.get_config(Schema, {}) assert_type(conf.sub, List[Sub]) self.assertEqual(conf.sub, []) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {'sub': None}) def test_config_file_path_pass_through(self) -> None: """Necessary to ensure FilesystemObject validates the correct path.""" passed_config_path = None class SubType(c.BaseConfigOption): def pre_validation(self, config: Config, key_name: str) -> None: nonlocal passed_config_path passed_config_path = config.config_file_path class Sub(Config): opt = SubType() class Schema(Config): sub = c.ListOfItems(c.SubConfig(Sub), default=[]) config_path = "foo/mkdocs.yaml" self.get_config(Schema, {"sub": [{"opt": "bar"}]}, config_file_path=config_path) self.assertEqual(passed_config_path, config_path) class NestedSubConfigTest(TestCase): def defaults(self): return { 'nav': { 'omitted_files': logging.INFO, 'not_found': logging.WARNING, 'absolute_links': logging.INFO, }, 'links': { 'not_found': logging.WARNING, 'absolute_links': logging.INFO, 'unrecognized_links': logging.INFO, 'anchors': logging.INFO, }, } class Schema(Config): validation = c.PropagatingSubConfig[defaults.MkDocsConfig.Validation]() def test_unspecified(self) -> None: cfgs: list[dict] = [{}, {'validation': {}}] for cfg in cfgs: with self.subTest(cfg): conf = self.get_config( self.Schema, {}, ) self.assertEqual(conf.validation, self.defaults()) def test_sets_nested_and_not_nested(self) -> None: conf = self.get_config( self.Schema, {'validation': {'not_found': 'ignore', 'links': {'absolute_links': 'warn'}}}, ) expected = self.defaults() expected['nav']['not_found'] = logging.DEBUG expected['links']['not_found'] = logging.DEBUG expected['links']['absolute_links'] = logging.WARNING self.assertEqual(conf.validation, expected) def test_sets_nested_different(self) -> None: conf = self.get_config( self.Schema, {'validation': {'not_found': 'ignore', 'links': {'not_found': 'warn'}}}, ) expected = self.defaults() expected['nav']['not_found'] = logging.DEBUG expected['links']['not_found'] = logging.WARNING self.assertEqual(conf.validation, expected) def test_sets_only_one_nested(self) -> None: conf = self.get_config( self.Schema, {'validation': {'omitted_files': 'ignore'}}, ) expected = self.defaults() expected['nav']['omitted_files'] = logging.DEBUG self.assertEqual(conf.validation, expected) def test_sets_nested_not_dict(self) -> None: with self.expect_error( validation="Sub-option 'links': Sub-option 'unrecognized_links': Expected a string, but a was given." ): self.get_config( self.Schema, {'validation': {'unrecognized_links': [], 'links': {'absolute_links': 'warn'}}}, ) def test_wrong_key_nested(self) -> None: conf = self.get_config( self.Schema, {'validation': {'foo': 'warn', 'not_found': 'warn'}}, warnings=dict(validation="Sub-option 'foo': Unrecognised configuration name: foo"), ) expected = self.defaults() expected['nav']['not_found'] = logging.WARNING expected['links']['not_found'] = logging.WARNING expected['foo'] = 'warn' self.assertEqual(conf.validation, expected) def test_wrong_type_nested(self) -> None: with self.expect_error( validation="Sub-option 'nav': Sub-option 'omitted_files': Expected one of ['warn', 'info', 'ignore'], got 'hi'" ): self.get_config( self.Schema, {'validation': {'omitted_files': 'hi'}}, ) class MarkdownExtensionsTest(TestCase): @mock.patch('markdown.Markdown', mock.Mock()) def test_simple_list(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': ['foo', 'bar'], } conf = self.get_config(Schema, config) assert_type(conf.markdown_extensions, List[str]) assert_type(conf.mdx_configs, Dict[str, dict]) self.assertEqual(conf.markdown_extensions, ['foo', 'bar']) self.assertEqual(conf.mdx_configs, {}) @mock.patch('markdown.Markdown', mock.Mock()) def test_list_dicts(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': [ {'foo': {'foo_option': 'foo value'}}, {'bar': {'bar_option': 'bar value'}}, {'baz': None}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['foo', 'bar', 'baz']) self.assertEqual( conf.mdx_configs, { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, }, ) @mock.patch('markdown.Markdown', mock.Mock()) def test_mixed_list(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': [ 'foo', {'bar': {'bar_option': 'bar value'}}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['foo', 'bar']) self.assertEqual( conf.mdx_configs, { 'bar': {'bar_option': 'bar value'}, }, ) @mock.patch('markdown.Markdown', mock.Mock()) def test_dict_of_dicts(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, 'baz': {}, } } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['foo', 'bar', 'baz']) self.assertEqual( conf.mdx_configs, { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, }, ) @mock.patch('markdown.Markdown', mock.Mock()) def test_builtins(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': ['foo', 'bar'], } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['meta', 'toc', 'foo', 'bar']) self.assertEqual(conf.mdx_configs, {}) def test_duplicates(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': ['meta', 'toc'], } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['meta', 'toc']) self.assertEqual(conf.mdx_configs, {}) def test_builtins_config(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': [ {'toc': {'permalink': True}}, ], } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['meta', 'toc']) self.assertEqual(conf.mdx_configs, {'toc': {'permalink': True}}) @mock.patch('markdown.Markdown', mock.Mock()) def test_configkey(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(configkey='bar') bar = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': [ {'foo': {'foo_option': 'foo value'}}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['foo']) self.assertEqual( conf.bar, { 'foo': {'foo_option': 'foo value'}, }, ) def test_missing_default(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() conf = self.get_config(Schema, {}) self.assertEqual(conf.markdown_extensions, []) self.assertEqual(conf.mdx_configs, {}) def test_none(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(default=[]) mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': None, } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, []) self.assertEqual(conf.mdx_configs, {}) @mock.patch('markdown.Markdown', mock.Mock()) def test_not_list(self) -> None: class Schema(Config): option = c.MarkdownExtensions() with self.expect_error(option="Invalid Markdown Extensions configuration"): self.get_config(Schema, {'option': 'not a list'}) @mock.patch('markdown.Markdown', mock.Mock()) def test_invalid_config_option(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ {'foo': 'not a dict'}, ], } with self.expect_error( markdown_extensions="Invalid config options for Markdown Extension 'foo'." ): self.get_config(Schema, config) @mock.patch('markdown.Markdown', mock.Mock()) def test_invalid_config_item(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ ['not a dict'], ], } with self.expect_error(markdown_extensions="Invalid Markdown Extensions configuration"): self.get_config(Schema, config) @mock.patch('markdown.Markdown', mock.Mock()) def test_invalid_dict_item(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ {'key1': 'value', 'key2': 'too many keys'}, ], } with self.expect_error(markdown_extensions="Invalid Markdown Extensions configuration"): self.get_config(Schema, config) def test_unknown_extension(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': ['unknown'], } with self.expect_error( markdown_extensions=re.compile(r"Failed to load extension 'unknown'.\n.+") ): self.get_config(Schema, config) def test_multiple_markdown_config_instances(self) -> None: # This had a bug where an extension config would persist to separate # config instances that didn't specify extensions. class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() conf = self.get_config( Schema, { 'markdown_extensions': [{'toc': {'permalink': '##'}}], }, ) self.assertEqual(conf.mdx_configs['toc'], {'permalink': '##'}) conf = self.get_config( Schema, {}, ) self.assertIsNone(conf.mdx_configs.get('toc')) class _FakePluginConfig(Config): foo = c.Type(str, default='default foo') bar = c.Type(int, default=0) dir = c.Optional(c.Dir(exists=False)) class FakePlugin(BasePlugin[_FakePluginConfig]): pass class _FakePlugin2Config(_FakePluginConfig): depr = c.Deprecated() class FakePlugin2(BasePlugin[_FakePlugin2Config]): supports_multiple_instances = True class _EnabledPluginConfig(Config): enabled = c.Type(bool, default=True) bar = c.Type(int, default=0) class EnabledPlugin(BasePlugin[_EnabledPluginConfig]): pass class ThemePlugin(BasePlugin[_FakePluginConfig]): pass class ThemePlugin2(BasePlugin[_FakePluginConfig]): pass class FakeEntryPoint: def __init__(self, name, cls): self.name = name self.cls = cls def load(self): return self.cls @mock.patch( 'mkdocs.plugins.entry_points', mock.Mock( return_value=[ FakeEntryPoint('sample', FakePlugin), FakeEntryPoint('sample2', FakePlugin2), FakeEntryPoint('sample-e', EnabledPlugin), FakeEntryPoint('readthedocs/sub_plugin', ThemePlugin), FakeEntryPoint('overridden', FakePlugin2), FakeEntryPoint('readthedocs/overridden', ThemePlugin2), ] ), ) class PluginsTest(TestCase): def test_plugin_config_without_options(self) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': ['sample'], } conf = self.get_config(Schema, cfg) assert_type(conf.plugins, PluginCollection) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample', conf.plugins) plugin = conf.plugins['sample'] assert_type(plugin, BasePlugin) self.assertIsInstance(plugin, FakePlugin) self.assertIsInstance(plugin.config, _FakePluginConfig) expected = { 'foo': 'default foo', 'bar': 0, 'dir': None, } self.assertEqual(plugin.config, expected) def test_plugin_config_with_options(self) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': [ { 'sample': { 'foo': 'foo value', 'bar': 42, }, } ], } conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample', conf.plugins) self.assertIsInstance(conf.plugins['sample'], BasePlugin) expected = { 'foo': 'foo value', 'bar': 42, 'dir': None, } self.assertEqual(conf.plugins['sample'].config, expected) def test_plugin_config_as_dict(self) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': { 'sample': { 'foo': 'foo value', 'bar': 42, }, }, } conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample', conf.plugins) self.assertIsInstance(conf.plugins['sample'], BasePlugin) expected = { 'foo': 'foo value', 'bar': 42, 'dir': None, } self.assertEqual(conf.plugins['sample'].config, expected) def test_plugin_config_with_explicit_theme_namespace(self) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': ['readthedocs/sub_plugin']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'readthedocs/sub_plugin'}) self.assertIsInstance(conf.plugins['readthedocs/sub_plugin'], ThemePlugin) cfg = {'plugins': ['readthedocs/sub_plugin']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'readthedocs/sub_plugin'}) self.assertIsInstance(conf.plugins['readthedocs/sub_plugin'], ThemePlugin) def test_plugin_config_with_deduced_theme_namespace(self) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': ['sub_plugin']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'readthedocs/sub_plugin'}) self.assertIsInstance(conf.plugins['readthedocs/sub_plugin'], ThemePlugin) cfg = {'plugins': ['sub_plugin']} with self.expect_error(plugins='The "sub_plugin" plugin is not installed'): self.get_config(Schema, cfg) def test_plugin_config_with_deduced_theme_namespace_overridden(self) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': ['overridden']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'readthedocs/overridden'}) self.assertIsInstance(next(iter(conf.plugins.values())), ThemePlugin2) cfg = {'plugins': ['overridden']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'overridden'}) self.assertIsInstance(conf.plugins['overridden'], FakePlugin2) def test_plugin_config_with_explicit_empty_namespace(self) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': ['/overridden']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'overridden'}) self.assertIsInstance(next(iter(conf.plugins.values())), FakePlugin2) cfg = {'plugins': ['/overridden']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'overridden'}) self.assertIsInstance(conf.plugins['overridden'], FakePlugin2) def test_plugin_config_enabled_for_any_plugin(self) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': {'sample': {'enabled': False, 'bar': 3}}} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), set()) cfg = {'theme': 'readthedocs', 'plugins': {'sample': {'enabled': True, 'bar': 3}}} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'sample'}) self.assertEqual(conf.plugins['sample'].config.bar, 3) cfg = {'theme': 'readthedocs', 'plugins': {'sample': {'enabled': 5}}} with self.expect_error( plugins="Plugin 'sample' option 'enabled': Expected boolean but received: " ): self.get_config(Schema, cfg) def test_plugin_config_enabled_for_plugin_with_setting(self) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': {'sample-e': {'enabled': False, 'bar': 3}}} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'sample-e'}) self.assertEqual(conf.plugins['sample-e'].config.enabled, False) self.assertEqual(conf.plugins['sample-e'].config.bar, 3) cfg = {'theme': 'readthedocs', 'plugins': {'sample-e': {'enabled': True, 'bar': 3}}} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'sample-e'}) self.assertEqual(conf.plugins['sample-e'].config.enabled, True) self.assertEqual(conf.plugins['sample-e'].config.bar, 3) cfg = {'theme': 'readthedocs', 'plugins': {'sample-e': {'enabled': 5}}} with self.expect_error( plugins="Plugin 'sample-e' option 'enabled': Expected type: but received: " ): self.get_config(Schema, cfg) def test_plugin_config_with_multiple_instances(self) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = { 'plugins': [ {'sample2': {'foo': 'foo value', 'bar': 42}}, {'sample2': {'foo': 'foo2 value'}}, ], } conf = self.get_config(Schema, cfg) self.assertEqual( set(conf.plugins), {'sample2', 'sample2 #2'}, ) self.assertEqual(conf.plugins['sample2'].config['bar'], 42) self.assertEqual(conf.plugins['sample2 #2'].config['bar'], 0) def test_plugin_config_with_multiple_instances_and_warning(self) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') test_cfgs: list[dict[str, Any]] = [ { 'theme': 'readthedocs', 'plugins': [{'sub_plugin': {}}, {'sample2': {}}, {'sub_plugin': {}}, 'sample2'], }, { 'theme': 'readthedocs', 'plugins': ['sub_plugin', 'sample2', 'sample2', 'sub_plugin'], }, ] for cfg in test_cfgs: conf = self.get_config( Schema, cfg, warnings=dict( plugins="Plugin 'readthedocs/sub_plugin' was specified multiple times - " "this is likely a mistake, because the plugin doesn't declare " "`supports_multiple_instances`." ), ) self.assertEqual( set(conf.plugins), {'readthedocs/sub_plugin', 'readthedocs/sub_plugin #2', 'sample2', 'sample2 #2'}, ) def test_plugin_config_empty_list_with_empty_default(self) -> None: class Schema(Config): plugins = c.Plugins(default=[]) cfg: dict[str, Any] = {'plugins': []} conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertEqual(len(conf.plugins), 0) def test_plugin_config_empty_list_with_default(self) -> None: class Schema(Config): plugins = c.Plugins(default=['sample']) # Default is ignored cfg: dict[str, Any] = {'plugins': []} conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertEqual(len(conf.plugins), 0) def test_plugin_config_none_with_empty_default(self) -> None: class Schema(Config): plugins = c.Plugins(default=[]) cfg = {'plugins': None} conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertEqual(len(conf.plugins), 0) def test_plugin_config_none_with_default(self) -> None: class Schema(Config): plugins = c.Plugins(default=['sample']) # Default is used. cfg = {'plugins': None} conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample', conf.plugins) self.assertIsInstance(conf.plugins['sample'], BasePlugin) expected = { 'foo': 'default foo', 'bar': 0, 'dir': None, } self.assertEqual(conf.plugins['sample'].config, expected) def test_plugin_config_uninstalled(self) -> None: class Schema(Config): plugins = c.Plugins() cfg = {'plugins': ['uninstalled']} with self.expect_error(plugins='The "uninstalled" plugin is not installed'): self.get_config(Schema, cfg) def test_plugin_config_not_list(self) -> None: class Schema(Config): plugins = c.Plugins() cfg = {'plugins': 'sample'} with self.expect_error(plugins="Invalid Plugins configuration. Expected a list or dict."): self.get_config(Schema, cfg) def test_plugin_config_multivalue_dict(self) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': [ { 'sample': { 'foo': 'foo value', 'bar': 42, }, 'extra_key': 'baz', } ], } with self.expect_error(plugins="Invalid Plugins configuration"): self.get_config(Schema, cfg) cfg = { 'plugins': [ {}, ], } with self.expect_error(plugins="Invalid Plugins configuration"): self.get_config(Schema, cfg) def test_plugin_config_not_string_or_dict(self) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': [('not a string or dict',)], } with self.expect_error(plugins="'('not a string or dict',)' is not a valid plugin name."): self.get_config(Schema, cfg) def test_plugin_config_options_not_dict(self) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': [{'sample': 'not a dict'}], } with self.expect_error(plugins="Invalid config options for the 'sample' plugin."): self.get_config(Schema, cfg) def test_plugin_config_sub_error(self) -> None: class Schema(Config): plugins = c.Plugins(default=['sample']) cfg = { 'plugins': { 'sample': {'bar': 'not an int'}, } } with self.expect_error( plugins="Plugin 'sample' option 'bar': Expected type: but received: " ): self.get_config(Schema, cfg) def test_plugin_config_sub_warning(self) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': { 'sample2': {'depr': 'deprecated value'}, } } conf = self.get_config( Schema, cfg, warnings=dict( plugins="Plugin 'sample2' option 'depr': The configuration option " "'depr' has been deprecated and will be removed in a future release." ), ) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample2', conf.plugins) class HooksTest(TestCase): class Schema(Config): plugins = c.Plugins(default=[]) hooks = c.Hooks('plugins') @tempdir() def test_hooks(self, src_dir) -> None: write_file( b'def on_page_markdown(markdown, **kwargs): return markdown.replace("f", "z")', os.path.join(src_dir, 'hooks', 'my_hook.py'), ) write_file( b'foo foo', os.path.join(src_dir, 'docs', 'index.md'), ) conf = self.get_config( self.Schema, {'hooks': ['hooks/my_hook.py']}, config_file_path=os.path.join(src_dir, 'mkdocs.yml'), ) self.assertIn('hooks/my_hook.py', conf.plugins) hook = conf.plugins['hooks/my_hook.py'] self.assertTrue(hasattr(hook, 'on_page_markdown')) self.assertEqual( {**conf.plugins.events, 'page_markdown': [hook.on_page_markdown]}, conf.plugins.events, ) self.assertEqual(hook.on_page_markdown('foo foo'), 'zoo zoo') # type: ignore[call-arg] self.assertFalse(hasattr(hook, 'on_nav')) def test_hooks_wrong_type(self) -> None: with self.expect_error(hooks="Expected a list of items, but a was given."): self.get_config(self.Schema, {'hooks': 6}) with self.expect_error(hooks="Expected type: but received: "): self.get_config(self.Schema, {'hooks': [7]}) class SchemaTest(TestCase): def test_copy(self) -> None: class Schema(Config): foo = c.MarkdownExtensions() copy.deepcopy(Schema()) copy.deepcopy(self.get_config(IpAddressTest.Schema, {'option': '1.2.3.4:5678'})) copy.deepcopy(IpAddressTest.Schema) copy.deepcopy(IpAddressTest.Schema()) copy.deepcopy(self.get_config(EditURITest.Schema, {})) copy.deepcopy(EditURITest.Schema) copy.deepcopy(EditURITest.Schema()) def test_subclass(self) -> None: class A(Config): foo = c.Type(int) bar = c.Optional(c.Type(str)) class B(A): baz = c.ListOfItems(c.Type(str)) conf = self.get_config(B, {'foo': 1, 'baz': ['b']}) assert_type(conf.foo, int) self.assertEqual(conf.foo, 1) assert_type(conf.bar, Optional[str]) self.assertEqual(conf.bar, None) assert_type(conf.baz, List[str]) self.assertEqual(conf.baz, ['b']) with self.expect_error(baz="Required configuration not provided."): self.get_config(B, {'foo': 1}) with self.expect_error(foo="Required configuration not provided."): self.get_config(B, {'baz': ['b']}) bconf = self.get_config(A, {'foo': 2, 'bar': 'a'}) assert_type(bconf.foo, int) self.assertEqual(bconf.foo, 2) self.assertEqual(bconf.bar, 'a') mkdocs-1.6.1/mkdocs/tests/config/config_options_legacy_tests.py0000664000175000017500000015327514664334534024741 0ustar carstencarstenfrom __future__ import annotations import contextlib import copy import io import os import re import sys import textwrap import unittest from typing import Any from unittest import mock import mkdocs from mkdocs.config import base from mkdocs.config import config_options as c from mkdocs.tests.base import tempdir from mkdocs.utils import write_file, yaml_load class UnexpectedError(Exception): pass class TestCase(unittest.TestCase): @contextlib.contextmanager def expect_error(self, **kwargs): [(key, msg)] = kwargs.items() with self.assertRaises(UnexpectedError) as cm: yield if isinstance(msg, re.Pattern): self.assertRegex(str(cm.exception), f'^{key}="{msg.pattern}"$') else: self.assertEqual(f'{key}="{msg}"', str(cm.exception)) def get_config( self, schema: type, cfg: dict[str, Any], warnings: dict[str, str] = {}, config_file_path=None, ): config = base.LegacyConfig(base.get_schema(schema), config_file_path=config_file_path) config.load_dict(cfg) actual_errors, actual_warnings = config.validate() if actual_errors: raise UnexpectedError(', '.join(f'{key}="{msg}"' for key, msg in actual_errors)) self.assertEqual(warnings, dict(actual_warnings)) return config class OptionallyRequiredTest(TestCase): def test_empty(self): class Schema: option = c.OptionallyRequired() conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], None) self.assertEqual(Schema.option.required, False) def test_required(self): class Schema: option = c.OptionallyRequired(required=True) with self.expect_error(option="Required configuration not provided."): self.get_config(Schema, {'option': None}) self.assertEqual(Schema.option.required, True) def test_required_no_default(self): class Schema: option = c.OptionallyRequired(required=True) conf = self.get_config(Schema, {'option': 2}) self.assertEqual(conf['option'], 2) def test_default(self): class Schema: option = c.OptionallyRequired(default=1) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], 1) def test_replace_default(self): class Schema: option = c.OptionallyRequired(default=1) conf = self.get_config(Schema, {'option': 2}) self.assertEqual(conf['option'], 2) class TypeTest(TestCase): def test_single_type(self): class Schema: option = c.Type(str) conf = self.get_config(Schema, {'option': "Testing"}) self.assertEqual(conf['option'], "Testing") def test_multiple_types(self): class Schema: option = c.Type((list, tuple)) conf = self.get_config(Schema, {'option': [1, 2, 3]}) self.assertEqual(conf['option'], [1, 2, 3]) conf = self.get_config(Schema, {'option': (1, 2, 3)}) self.assertEqual(conf['option'], (1, 2, 3)) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': {'a': 1}}) def test_length(self): class Schema: option = c.Type(str, length=7) conf = self.get_config(Schema, {'option': "Testing"}) self.assertEqual(conf['option'], "Testing") with self.expect_error( option="Expected type: with length 7 but received: 'Testing Long' with length 12" ): self.get_config(Schema, {'option': "Testing Long"}) class ChoiceTest(TestCase): def test_required(self): class Schema: option = c.Choice(('python', 'node'), required=True) conf = self.get_config(Schema, {'option': 'python'}) self.assertEqual(conf['option'], 'python') def test_optional(self): class Schema: option = c.Choice(('python', 'node')) conf = self.get_config(Schema, {'option': 'python'}) self.assertEqual(conf['option'], 'python') conf = self.get_config(Schema, {}) self.assertEqual(conf['option'], None) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], None) def test_default(self): class Schema: option = c.Choice(('a', 'b', 'c'), default='b') conf = self.get_config(Schema, {}) self.assertEqual(conf['option'], 'b') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], 'b') with self.expect_error(option="Expected one of: ('a', 'b', 'c') but received: 'go'"): self.get_config(Schema, {'option': 'go'}) def test_invalid_default(self): with self.assertRaises(ValueError): c.Choice(('a', 'b'), default='c') with self.assertRaises(ValueError): c.Choice(('a', 'b'), default='c', required=True) def test_invalid_choice(self): class Schema: option = c.Choice(('python', 'node')) with self.expect_error(option="Expected one of: ('python', 'node') but received: 'go'"): self.get_config(Schema, {'option': 'go'}) def test_invalid_choices(self): with self.assertRaises(ValueError): c.Choice('') with self.assertRaises(ValueError): c.Choice([]) with self.assertRaises(ValueError): c.Choice(5) class DeprecatedTest(TestCase): def test_deprecated_option_simple(self): class Schema: d = c.Deprecated() self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_deprecated_option_message(self): class Schema: d = c.Deprecated(message='custom message for {} key') self.get_config(Schema, {'d': 'value'}, warnings={'d': 'custom message for d key'}) def test_deprecated_option_with_type(self): class Schema: d = c.Deprecated(option_type=c.Type(str)) self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_deprecated_option_with_invalid_type(self): class Schema: d = c.Deprecated(option_type=c.Type(list)) with self.expect_error(d="Expected type: but received: "): self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_removed_option(self): class Schema: d = c.Deprecated(removed=True, moved_to='foo') with self.expect_error( d="The configuration option 'd' was removed from MkDocs. Use 'foo' instead.", ): self.get_config(Schema, {'d': 'value'}) def test_deprecated_option_with_type_undefined(self): class Schema: option = c.Deprecated(option_type=c.Type(str)) self.get_config(Schema, {'option': None}) def test_deprecated_option_move(self): class Schema: new = c.Type(str) old = c.Deprecated(moved_to='new') conf = self.get_config( Schema, {'old': 'value'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'new' instead." ), ) self.assertEqual(conf, {'new': 'value', 'old': None}) def test_deprecated_option_move_complex(self): class Schema: foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') conf = self.get_config( Schema, {'old': 'value'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) self.assertEqual(conf, {'foo': {'bar': 'value'}, 'old': None}) def test_deprecated_option_move_existing(self): class Schema: foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') conf = self.get_config( Schema, {'old': 'value', 'foo': {'existing': 'existing'}}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) self.assertEqual(conf, {'foo': {'existing': 'existing', 'bar': 'value'}, 'old': None}) def test_deprecated_option_move_invalid(self): class Schema: foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') with self.expect_error(foo="Expected type: but received: "): self.get_config( Schema, {'old': 'value', 'foo': 'wrong type'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) class IpAddressTest(TestCase): class Schema: option = c.IpAddress() def test_valid_address(self): addr = '127.0.0.1:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '127.0.0.1') self.assertEqual(conf['option'].port, 8000) def test_valid_IPv6_address(self): addr = '::1:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '::1') self.assertEqual(conf['option'].port, 8000) def test_valid_full_IPv6_address(self): addr = '[2001:db8:85a3::8a2e:370:7334]:123' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(conf['option'].host, '2001:db8:85a3::8a2e:370:7334') self.assertEqual(conf['option'].port, 123) def test_named_address(self): addr = 'localhost:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, 'localhost') self.assertEqual(conf['option'].port, 8000) def test_default_address(self): addr = '127.0.0.1:8000' class Schema: option = c.IpAddress(default=addr) conf = self.get_config(Schema, {'option': None}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '127.0.0.1') self.assertEqual(conf['option'].port, 8000) def test_bind_all_IPv4_address(self): addr = '0.0.0.0:8000' class Schema: option = c.IpAddress(default=addr) conf = self.get_config(Schema, {'option': None}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '0.0.0.0') self.assertEqual(conf['option'].port, 8000) def test_bind_all_IPv6_address(self): addr = ':::8000' class Schema: option = c.IpAddress(default=addr) conf = self.get_config(Schema, {'option': None}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '::') self.assertEqual(conf['option'].port, 8000) @unittest.skipIf( sys.version_info < (3, 9, 5), "Leading zeros allowed in IP addresses before Python3.9.5", ) def test_invalid_leading_zeros(self): with self.expect_error( option="'127.000.000.001' does not appear to be an IPv4 or IPv6 address" ): self.get_config(self.Schema, {'option': '127.000.000.001:8000'}) def test_invalid_address_range(self): with self.expect_error(option="'277.0.0.1' does not appear to be an IPv4 or IPv6 address"): self.get_config(self.Schema, {'option': '277.0.0.1:8000'}) def test_invalid_address_format(self): with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': '127.0.0.18000'}) def test_invalid_address_type(self): with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': 123}) def test_invalid_address_port(self): with self.expect_error(option="'foo' is not a valid port"): self.get_config(self.Schema, {'option': '127.0.0.1:foo'}) def test_invalid_address_missing_port(self): with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': '127.0.0.1'}) class URLTest(TestCase): def test_valid_url(self): class Schema: option = c.URL() conf = self.get_config(Schema, {'option': "https://mkdocs.org"}) self.assertEqual(conf['option'], "https://mkdocs.org") conf = self.get_config(Schema, {'option': ""}) self.assertEqual(conf['option'], "") def test_valid_url_is_dir(self): class Schema: option = c.URL(is_dir=True) conf = self.get_config(Schema, {'option': "http://mkdocs.org/"}) self.assertEqual(conf['option'], "http://mkdocs.org/") conf = self.get_config(Schema, {'option': "https://mkdocs.org"}) self.assertEqual(conf['option'], "https://mkdocs.org/") def test_optional(self): class Schema: option = c.URL(is_dir=True) conf = self.get_config(Schema, {'option': ''}) self.assertEqual(conf['option'], '') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], None) def test_invalid_url(self): class Schema: option = c.URL(required=True) with self.expect_error(option="Required configuration not provided."): self.get_config(Schema, {'option': None}) for url in "www.mkdocs.org", "//mkdocs.org/test", "http:/mkdocs.org/", "/hello/": with self.subTest(url=url): with self.expect_error( option="The URL isn't valid, it should include the http:// (scheme)" ): self.get_config(Schema, {'option': url}) def test_invalid_type(self): class Schema: option = c.URL() with self.expect_error(option="Expected a string, got "): self.get_config(Schema, {'option': 1}) class EditURITest(TestCase): class Schema: repo_url = c.URL() repo_name = c.RepoName('repo_url') edit_uri_template = c.EditURITemplate('edit_uri') edit_uri = c.EditURI('repo_url') def test_repo_name_github(self): conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs"}, ) self.assertEqual(conf['repo_name'], "GitHub") def test_repo_name_bitbucket(self): conf = self.get_config( self.Schema, {'repo_url': "https://bitbucket.org/gutworth/six/"}, ) self.assertEqual(conf['repo_name'], "Bitbucket") def test_repo_name_gitlab(self): conf = self.get_config( self.Schema, {'repo_url': "https://gitlab.com/gitlab-org/gitlab-ce/"}, ) self.assertEqual(conf['repo_name'], "GitLab") def test_repo_name_custom(self): conf = self.get_config( self.Schema, {'repo_url': "https://launchpad.net/python-tuskarclient"}, ) self.assertEqual(conf['repo_name'], "Launchpad") def test_edit_uri_github(self): conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs"}, ) self.assertEqual(conf['edit_uri'], 'edit/master/docs/') self.assertEqual(conf['repo_url'], "https://github.com/mkdocs/mkdocs") def test_edit_uri_bitbucket(self): conf = self.get_config( self.Schema, {'repo_url': "https://bitbucket.org/gutworth/six/"}, ) self.assertEqual(conf['edit_uri'], 'src/default/docs/') self.assertEqual(conf['repo_url'], "https://bitbucket.org/gutworth/six/") def test_edit_uri_gitlab(self): conf = self.get_config( self.Schema, {'repo_url': "https://gitlab.com/gitlab-org/gitlab-ce/"}, ) self.assertEqual(conf['edit_uri'], 'edit/master/docs/') def test_edit_uri_custom(self): conf = self.get_config( self.Schema, {'repo_url': "https://launchpad.net/python-tuskarclient"}, ) self.assertEqual(conf['edit_uri'], None) self.assertEqual(conf['repo_url'], "https://launchpad.net/python-tuskarclient") def test_repo_name_custom_and_empty_edit_uri(self): conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs", 'repo_name': 'mkdocs'}, ) self.assertEqual(conf['edit_uri'], 'edit/master/docs/') def test_edit_uri_template_ok(self): conf = self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/foo/docs/{path}', }, ) self.assertEqual(conf['edit_uri_template'], 'edit/foo/docs/{path}') def test_edit_uri_template_errors(self): with self.expect_error( edit_uri_template=re.compile(r'.*[{}].*') # Complains about unclosed '{' or missing '}' ): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{path', }, ) with self.expect_error(edit_uri_template=re.compile(r'.*\bz\b.*')): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{path!z}', }, ) with self.expect_error(edit_uri_template="Unknown template substitute: 'foo'"): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{foo}', }, ) def test_edit_uri_template_warning(self): conf = self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri': 'edit', 'edit_uri_template': 'edit/master/{path}', }, warnings=dict( edit_uri_template="The option 'edit_uri' has no effect when 'edit_uri_template' is set." ), ) self.assertEqual(conf['edit_uri_template'], 'edit/master/{path}') class ListOfItemsTest(TestCase): def test_int_type(self): class Schema: option = c.ListOfItems(c.Type(int)) conf = self.get_config(Schema, {'option': [1, 2, 3]}) self.assertEqual(conf['option'], [1, 2, 3]) with self.expect_error( option="Expected type: but received: " ): conf = self.get_config(Schema, {'option': [1, None, 3]}) def test_combined_float_type(self): class Schema: option = c.ListOfItems(c.Type((int, float))) conf = self.get_config(Schema, {'option': [1.4, 2, 3]}) self.assertEqual(conf['option'], [1.4, 2, 3]) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': ['a']}) def test_list_default(self): class Schema: option = c.ListOfItems(c.Type(int), default=[]) conf = self.get_config(Schema, {}) self.assertEqual(conf['option'], []) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], []) def test_none_without_default(self): class Schema: option = c.ListOfItems(c.Type(str)) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) conf = self.get_config(Schema, {'option': ['foo']}) self.assertEqual(conf['option'], ['foo']) def test_string_not_a_list_of_strings(self): class Schema: option = c.ListOfItems(c.Type(str)) with self.expect_error(option="Expected a list of items, but a was given."): self.get_config(Schema, {'option': 'foo'}) def test_post_validation_error(self): class Schema: option = c.ListOfItems(c.IpAddress()) with self.expect_error(option="'asdf' is not a valid port"): self.get_config(Schema, {'option': ["localhost:8000", "1.2.3.4:asdf"]}) class FilesystemObjectTest(TestCase): def test_valid_dir(self): for cls in c.Dir, c.FilesystemObject: with self.subTest(cls): d = os.path.dirname(__file__) class Schema: option = cls(exists=True) conf = self.get_config(Schema, {'option': d}) self.assertEqual(conf['option'], d) def test_valid_file(self): for cls in c.File, c.FilesystemObject: with self.subTest(cls): f = __file__ class Schema: option = cls(exists=True) conf = self.get_config(Schema, {'option': f}) self.assertEqual(conf['option'], f) def test_missing_without_exists(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): d = os.path.join("not", "a", "real", "path", "I", "hope") class Schema: option = cls() conf = self.get_config(Schema, {'option': d}) self.assertEqual(conf['option'], os.path.abspath(d)) def test_missing_but_required(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): d = os.path.join("not", "a", "real", "path", "I", "hope") class Schema: option = cls(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing .+")): self.get_config(Schema, {'option': d}) def test_not_a_dir(self): d = __file__ class Schema: option = c.Dir(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing directory.")): self.get_config(Schema, {'option': d}) def test_not_a_file(self): d = os.path.dirname(__file__) class Schema: option = c.File(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing file.")): self.get_config(Schema, {'option': d}) def test_incorrect_type_error(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): class Schema: option = cls() with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': 1}) with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': []}) def test_with_unicode(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): class Schema: dir = cls() conf = self.get_config(Schema, {'dir': 'юникод'}) self.assertIsInstance(conf['dir'], str) def test_dir_bytes(self): class Schema: dir = c.Dir() with self.expect_error(dir="Expected type: but received: "): self.get_config(Schema, {'dir': b'foo'}) def test_config_dir_prepended(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): base_path = os.path.dirname(os.path.abspath(__file__)) class Schema: dir = cls() conf = self.get_config( Schema, {'dir': 'foo'}, config_file_path=os.path.join(base_path, 'mkdocs.yml'), ) self.assertEqual(conf['dir'], os.path.join(base_path, 'foo')) def test_site_dir_is_config_dir_fails(self): class Schema: dir = c.DocsDir() with self.expect_error( dir="The 'dir' should not be the parent directory of the config file. " "Use a child directory instead so that the 'dir' is a sibling of the config file." ): self.get_config( Schema, {'dir': '.'}, config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'), ) class ListOfPathsTest(TestCase): def test_valid_path(self): paths = [os.path.dirname(__file__)] class Schema: option = c.ListOfPaths() self.get_config(Schema, {'option': paths}) def test_missing_path(self): paths = [os.path.join("does", "not", "exist", "i", "hope")] class Schema: option = c.ListOfPaths() with self.expect_error( option=f"The path '{paths[0]}' isn't an existing file or directory." ): self.get_config(Schema, {'option': paths}) def test_non_path(self): paths = [os.path.dirname(__file__), None] class Schema: option = c.ListOfPaths() with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': paths}) def test_empty_list(self): class Schema: option = c.ListOfPaths() conf = self.get_config(Schema, {'option': []}) self.assertEqual(conf['option'], []) def test_non_list(self): paths = os.path.dirname(__file__) class Schema: option = c.ListOfPaths() with self.expect_error(option="Expected a list of items, but a was given."): self.get_config(Schema, {'option': paths}) def test_file(self): paths = [__file__] class Schema: option = c.ListOfPaths() self.get_config(Schema, {'option': paths}) @tempdir() def test_paths_localized_to_config(self, base_path): with open(os.path.join(base_path, 'foo'), 'w') as f: f.write('hi') class Schema: watch = c.ListOfPaths() conf = self.get_config( Schema, {'watch': ['foo']}, config_file_path=os.path.join(base_path, 'mkdocs.yml'), ) self.assertEqual(conf['watch'], [os.path.join(base_path, 'foo')]) class SiteDirTest(TestCase): class Schema: site_dir = c.SiteDir() docs_dir = c.Dir() def test_doc_dir_in_site_dir(self): j = os.path.join # The parent dir is not the same on every system, so use the actual dir name parent_dir = mkdocs.__file__.split(os.sep)[-3] test_configs = ( {'docs_dir': j('site', 'docs'), 'site_dir': 'site'}, {'docs_dir': 'docs', 'site_dir': '.'}, {'docs_dir': '.', 'site_dir': '.'}, {'docs_dir': 'docs', 'site_dir': ''}, {'docs_dir': '', 'site_dir': ''}, {'docs_dir': j('..', parent_dir, 'docs'), 'site_dir': 'docs'}, {'docs_dir': 'docs', 'site_dir': '/'}, ) for test_config in test_configs: with self.subTest(test_config): with self.expect_error( site_dir=re.compile(r"The 'docs_dir' should not be within the 'site_dir'.*") ): self.get_config(self.Schema, test_config) def test_site_dir_in_docs_dir(self): j = os.path.join test_configs = ( {'docs_dir': 'docs', 'site_dir': j('docs', 'site')}, {'docs_dir': '.', 'site_dir': 'site'}, {'docs_dir': '', 'site_dir': 'site'}, {'docs_dir': '/', 'site_dir': 'site'}, ) for test_config in test_configs: with self.subTest(test_config): with self.expect_error( site_dir=re.compile(r"The 'site_dir' should not be within the 'docs_dir'.*") ): self.get_config(self.Schema, test_config) def test_common_prefix(self): """Legitimate settings with common prefixes should not fail validation.""" test_configs = ( {'docs_dir': 'docs', 'site_dir': 'docs-site'}, {'docs_dir': 'site-docs', 'site_dir': 'site'}, ) for test_config in test_configs: with self.subTest(test_config): self.get_config(self.Schema, test_config) class ThemeTest(TestCase): def test_theme_as_string(self): class Schema: option = c.Theme() conf = self.get_config(Schema, {'option': "mkdocs"}) self.assertEqual(conf['option'].name, 'mkdocs') def test_uninstalled_theme_as_string(self): class Schema: option = c.Theme() with self.expect_error( option=re.compile( r"Unrecognised theme name: 'mkdocs2'. The available installed themes are: .+" ) ): self.get_config(Schema, {'option': "mkdocs2"}) def test_theme_default(self): class Schema: option = c.Theme(default='mkdocs') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'].name, 'mkdocs') def test_theme_as_simple_config(self): config = { 'name': 'mkdocs', } class Schema: option = c.Theme() conf = self.get_config(Schema, {'option': config}) self.assertEqual(conf['option'].name, 'mkdocs') @tempdir() def test_theme_as_complex_config(self, custom_dir): config = { 'name': 'mkdocs', 'custom_dir': custom_dir, 'static_templates': ['sitemap.html'], 'show_sidebar': False, } class Schema: option = c.Theme() conf = self.get_config(Schema, {'option': config}) self.assertEqual(conf['option'].name, 'mkdocs') self.assertIn(custom_dir, conf['option'].dirs) self.assertEqual( conf['option'].static_templates, {'404.html', 'sitemap.xml', 'sitemap.html'}, ) self.assertEqual(conf['option']['show_sidebar'], False) def test_theme_name_is_none(self): config = { 'name': None, } class Schema: option = c.Theme() with self.expect_error(option="At least one of 'name' or 'custom_dir' must be defined."): self.get_config(Schema, {'option': config}) def test_theme_config_missing_name(self): config = { 'custom_dir': 'custom', } class Schema: option = c.Theme() with self.expect_error(option="No theme name set."): self.get_config(Schema, {'option': config}) def test_uninstalled_theme_as_config(self): config = { 'name': 'mkdocs2', } class Schema: option = c.Theme() with self.expect_error( option=re.compile( r"Unrecognised theme name: 'mkdocs2'. The available installed themes are: .+" ) ): self.get_config(Schema, {'option': config}) def test_theme_invalid_type(self): config = ['mkdocs2'] class Schema: option = c.Theme() with self.expect_error( option="Invalid type . Expected a string or key/value pairs." ): self.get_config(Schema, {'option': config}) def test_post_validation_none_theme_name_and_missing_custom_dir(self): config = { 'theme': { 'name': None, }, } class Schema: theme = c.Theme() with self.expect_error(theme="At least one of 'name' or 'custom_dir' must be defined."): self.get_config(Schema, config) @tempdir() def test_post_validation_inexisting_custom_dir(self, abs_base_path): path = os.path.join(abs_base_path, 'inexisting_custom_dir') config = { 'theme': { 'name': None, 'custom_dir': path, }, } class Schema: theme = c.Theme() with self.expect_error(theme=f"The path set in custom_dir ('{path}') does not exist."): self.get_config(Schema, config) def test_post_validation_locale_none(self): config = { 'theme': { 'name': 'mkdocs', 'locale': None, }, } class Schema: theme = c.Theme() with self.expect_error(theme="'locale' must be a string."): self.get_config(Schema, config) def test_post_validation_locale_invalid_type(self): config = { 'theme': { 'name': 'mkdocs', 'locale': 0, }, } class Schema: theme = c.Theme() with self.expect_error(theme="'locale' must be a string."): self.get_config(Schema, config) def test_post_validation_locale(self): config = { 'theme': { 'name': 'mkdocs', 'locale': 'fr', }, } class Schema: theme = c.Theme() conf = self.get_config(Schema, config) self.assertEqual(conf['theme']['locale'].language, 'fr') class NavTest(TestCase): class Schema: option = c.Nav() def test_old_format(self): with self.expect_error( option="Expected nav item to be a string or dict, got a list: ['index.md']" ): self.get_config(self.Schema, {'option': [['index.md']]}) def test_provided_dict(self): conf = self.get_config(self.Schema, {'option': ['index.md', {"Page": "page.md"}]}) self.assertEqual(conf['option'], ['index.md', {'Page': 'page.md'}]) def test_provided_empty(self): conf = self.get_config(self.Schema, {'option': []}) self.assertEqual(conf['option'], None) def test_normal_nav(self): nav_yaml = textwrap.dedent( '''\ - Home: index.md - getting-started.md - User Guide: - Overview: user-guide/index.md - Installation: user-guide/installation.md ''' ) nav = yaml_load(io.StringIO(nav_yaml)) conf = self.get_config(self.Schema, {'option': nav}) self.assertEqual(conf['option'], nav) def test_invalid_type_dict(self): with self.expect_error(option="Expected nav to be a list, got a dict: {}"): self.get_config(self.Schema, {'option': {}}) def test_invalid_type_int(self): with self.expect_error(option="Expected nav to be a list, got a int: 5"): self.get_config(self.Schema, {'option': 5}) def test_invalid_item_int(self): with self.expect_error(option="Expected nav item to be a string or dict, got a int: 1"): self.get_config(self.Schema, {'option': [1]}) def test_invalid_item_none(self): with self.expect_error(option="Expected nav item to be a string or dict, got None"): self.get_config(self.Schema, {'option': [None]}) def test_invalid_children_config_int(self): with self.expect_error(option="Expected nav to be a list, got a int: 1"): self.get_config(self.Schema, {'option': [{"foo.md": [{"bar.md": 1}]}]}) def test_invalid_children_config_none(self): with self.expect_error(option="Expected nav to be a list, got None"): self.get_config(self.Schema, {'option': [{"foo.md": None}]}) def test_invalid_children_empty_dict(self): nav = ['foo', {}] with self.expect_error(option="Expected nav item to be a dict of size 1, got a dict: {}"): self.get_config(self.Schema, {'option': nav}) def test_invalid_nested_list(self): nav = [{'aaa': [[{"bbb": "user-guide/index.md"}]]}] with self.expect_error( option="Expected nav item to be a string or dict, got a list: [{'bbb': 'user-guide/index.md'}]" ): self.get_config(self.Schema, {'option': nav}) def test_invalid_children_oversized_dict(self): nav = [{"aaa": [{"bbb": "user-guide/index.md", "ccc": "user-guide/installation.md"}]}] with self.expect_error( option="Expected nav item to be a dict of size 1, got dict with keys ('bbb', 'ccc')" ): self.get_config(self.Schema, {'option': nav}) def test_warns_for_dict(self): self.get_config( self.Schema, {'option': [{"a": {"b": "c.md", "d": "e.md"}}]}, warnings=dict(option="Expected nav to be a list, got dict with keys ('b', 'd')"), ) class PrivateTest(TestCase): def test_defined(self): class Schema: option = c.Private() with self.expect_error(option="For internal use only."): self.get_config(Schema, {'option': 'somevalue'}) class SubConfigTest(TestCase): def test_subconfig_wrong_type(self): # Test that an error is raised if subconfig does not receive a dict class Schema: option = c.SubConfig() for val in "not_a_dict", ("not_a_dict",), ["not_a_dict"]: with self.subTest(val): with self.expect_error( option=re.compile( r"The configuration is invalid. Expected a key-value mapping " r"\(dict\) but received: .+" ) ): self.get_config(Schema, {'option': val}) def test_subconfig_ignored(self): """Default behaviour of subconfig: validation is ignored.""" # Nominal class Schema1: option = c.SubConfig(('cc', c.Choice(('foo', 'bar')))) conf = self.get_config(Schema1, {'option': {'cc': 'foo'}}) self.assertEqual(conf, {'option': {'cc': 'foo'}}) # Invalid option: No error class Schema2: option = c.SubConfig(('cc', c.Choice(('foo', 'bar')))) conf = self.get_config(Schema2, {'option': {'cc': True}}) self.assertEqual(conf, {'option': {'cc': True}}) # Missing option: Will be considered optional with default None class Schema3: option = c.SubConfig(('cc', c.Choice(('foo', 'bar')))) conf = self.get_config(Schema3, {'option': {}}) self.assertEqual(conf, {'option': {'cc': None}}) # Unknown option: No warning class Schema4: option = c.SubConfig(('cc', c.Choice(('foo', 'bar')))) conf = self.get_config(Schema4, {'option': {'unknown_key_is_ok': 0}}) self.assertEqual(conf, {'option': {'cc': None, 'unknown_key_is_ok': 0}}) def test_subconfig_unknown_option(self): class Schema: option = c.SubConfig(validate=True) conf = self.get_config( Schema, {'option': {'unknown': 0}}, warnings=dict(option="Sub-option 'unknown': Unrecognised configuration name: unknown"), ) self.assertEqual(conf['option'], {"unknown": 0}) def test_subconfig_invalid_option(self): class Schema: option = c.SubConfig( ('cc', c.Choice(('foo', 'bar'))), validate=True, ) with self.expect_error( option="Sub-option 'cc': Expected one of: ('foo', 'bar') but received: True" ): self.get_config(Schema, {'option': {'cc': True}}) def test_subconfig_normal(self): class Schema: option = c.SubConfig( ('cc', c.Choice(('foo', 'bar'))), ) conf = self.get_config(Schema, {'option': {'cc': 'foo'}}) self.assertEqual(conf['option'], {'cc': 'foo'}) def test_config_file_path_pass_through(self): """Necessary to ensure FilesystemObject validates the correct path.""" passed_config_path = None class SubType(c.BaseConfigOption): def pre_validation(self, config, key_name): nonlocal passed_config_path passed_config_path = config.config_file_path class Schema: sub = c.SubConfig(('opt', SubType())) config_path = "foo/mkdocs.yaml" self.get_config(Schema, {"sub": {"opt": "bar"}}, config_file_path=config_path) self.assertEqual(passed_config_path, config_path) class ConfigItemsTest(TestCase): def test_subconfig_with_multiple_items(self): # This had a bug where subsequent items would get merged into the same dict. class Schema: the_items = c.ConfigItems( ("value", c.Type(str)), ) conf = self.get_config( Schema, { 'the_items': [ {'value': 'a'}, {'value': 'b'}, ] }, ) self.assertEqual(conf['the_items'], [{'value': 'a'}, {'value': 'b'}]) def test_optional(self): class Schema: sub = c.ListOfItems( c.SubConfig( ('opt', c.Type(int)), validate=True, ), default=[], ) conf = self.get_config(Schema, {}) self.assertEqual(conf['sub'], []) conf = self.get_config(Schema, {'sub': None}) self.assertEqual(conf['sub'], []) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {}]}) self.assertEqual(conf['sub'], [{'opt': 1}, {'opt': None}]) conf = self.get_config(Schema, {'sub': []}) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {'opt': 2}]}) self.assertEqual(conf['sub'], [{'opt': 1}, {'opt': 2}]) def test_required(self): class Schema: sub = c.ListOfItems( c.SubConfig( ('opt', c.Type(int, required=True)), validate=True, ) ) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {'sub': None}) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): conf = self.get_config(Schema, {'sub': [{'opt': 'asdf'}, {}]}) conf = self.get_config(Schema, {'sub': []}) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {'opt': 2}]}) self.assertEqual(conf['sub'], [{'opt': 1}, {'opt': 2}]) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): self.get_config(Schema, {'sub': [{'opt': 'z'}, {'opt': 2}]}) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): conf = self.get_config(Schema, {'sub': [{'opt': 'z'}, {'opt': 2}]}) with self.expect_error( sub="The configuration is invalid. Expected a key-value mapping " "(dict) but received: " ): conf = self.get_config(Schema, {'sub': [1, 2]}) class MarkdownExtensionsTest(TestCase): @mock.patch('markdown.Markdown', mock.Mock()) def test_simple_list(self): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() config = { 'markdown_extensions': ['foo', 'bar'], } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo', 'bar']) self.assertEqual(conf['mdx_configs'], {}) @mock.patch('markdown.Markdown', mock.Mock()) def test_list_dicts(self): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() config = { 'markdown_extensions': [ {'foo': {'foo_option': 'foo value'}}, {'bar': {'bar_option': 'bar value'}}, {'baz': None}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo', 'bar', 'baz']) self.assertEqual( conf['mdx_configs'], { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, }, ) @mock.patch('markdown.Markdown', mock.Mock()) def test_mixed_list(self): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() config = { 'markdown_extensions': [ 'foo', {'bar': {'bar_option': 'bar value'}}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo', 'bar']) self.assertEqual( conf['mdx_configs'], { 'bar': {'bar_option': 'bar value'}, }, ) @mock.patch('markdown.Markdown', mock.Mock()) def test_dict_of_dicts(self): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() config = { 'markdown_extensions': { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, 'baz': {}, } } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo', 'bar', 'baz']) self.assertEqual( conf['mdx_configs'], { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, }, ) @mock.patch('markdown.Markdown', mock.Mock()) def test_builtins(self): class Schema: markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private() config = { 'markdown_extensions': ['foo', 'bar'], } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['meta', 'toc', 'foo', 'bar']) self.assertEqual(conf['mdx_configs'], {}) def test_duplicates(self): class Schema: markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private() config = { 'markdown_extensions': ['meta', 'toc'], } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['meta', 'toc']) self.assertEqual(conf['mdx_configs'], {}) def test_builtins_config(self): class Schema: markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private() config = { 'markdown_extensions': [ {'toc': {'permalink': True}}, ], } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['meta', 'toc']) self.assertEqual(conf['mdx_configs'], {'toc': {'permalink': True}}) @mock.patch('markdown.Markdown', mock.Mock()) def test_configkey(self): class Schema: markdown_extensions = c.MarkdownExtensions(configkey='bar') bar = c.Private() config = { 'markdown_extensions': [ {'foo': {'foo_option': 'foo value'}}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo']) self.assertEqual( conf['bar'], { 'foo': {'foo_option': 'foo value'}, }, ) def test_missing_default(self): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() conf = self.get_config(Schema, {}) self.assertEqual(conf['markdown_extensions'], []) self.assertEqual(conf['mdx_configs'], {}) def test_none(self): class Schema: markdown_extensions = c.MarkdownExtensions(default=[]) mdx_configs = c.Private() config = { 'markdown_extensions': None, } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], []) self.assertEqual(conf['mdx_configs'], {}) @mock.patch('markdown.Markdown', mock.Mock()) def test_not_list(self): class Schema: option = c.MarkdownExtensions() with self.expect_error(option="Invalid Markdown Extensions configuration"): self.get_config(Schema, {'option': 'not a list'}) @mock.patch('markdown.Markdown', mock.Mock()) def test_invalid_config_option(self): class Schema: markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ {'foo': 'not a dict'}, ], } with self.expect_error( markdown_extensions="Invalid config options for Markdown Extension 'foo'." ): self.get_config(Schema, config) @mock.patch('markdown.Markdown', mock.Mock()) def test_invalid_config_item(self): class Schema: markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ ['not a dict'], ], } with self.expect_error(markdown_extensions="Invalid Markdown Extensions configuration"): self.get_config(Schema, config) @mock.patch('markdown.Markdown', mock.Mock()) def test_invalid_dict_item(self): class Schema: markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ {'key1': 'value', 'key2': 'too many keys'}, ], } with self.expect_error(markdown_extensions="Invalid Markdown Extensions configuration"): self.get_config(Schema, config) def test_unknown_extension(self): class Schema: markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': ['unknown'], } with self.expect_error( markdown_extensions=re.compile(r"Failed to load extension 'unknown'.\n.+") ): self.get_config(Schema, config) def test_multiple_markdown_config_instances(self): # This had a bug where an extension config would persist to separate # config instances that didn't specify extensions. class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() conf = self.get_config( Schema, { 'markdown_extensions': [{'toc': {'permalink': '##'}}], }, ) self.assertEqual(conf['mdx_configs']['toc'], {'permalink': '##'}) conf = self.get_config( Schema, {}, ) self.assertIsNone(conf['mdx_configs'].get('toc')) class HooksTest(TestCase): class Schema: plugins = c.Plugins(default=[]) hooks = c.Hooks('plugins') @tempdir() def test_hooks(self, src_dir): write_file( b'def on_page_markdown(markdown, **kwargs): return markdown.replace("f", "z")', os.path.join(src_dir, 'hooks', 'my_hook.py'), ) write_file( b'foo foo', os.path.join(src_dir, 'docs', 'index.md'), ) conf = self.get_config( self.Schema, {'hooks': ['hooks/my_hook.py']}, config_file_path=os.path.join(src_dir, 'mkdocs.yml'), ) self.assertIn('hooks/my_hook.py', conf['plugins']) hook = conf['plugins']['hooks/my_hook.py'] self.assertTrue(hasattr(hook, 'on_page_markdown')) self.assertEqual( {**conf['plugins'].events, 'page_markdown': [hook.on_page_markdown]}, conf['plugins'].events, ) self.assertEqual(hook.on_page_markdown('foo foo'), 'zoo zoo') self.assertFalse(hasattr(hook, 'on_nav')) class SchemaTest(TestCase): def test_copy(self): copy.deepcopy( base.LegacyConfig( (('foo', c.MarkdownExtensions()),), ), ) copy.deepcopy(self.get_config(IpAddressTest.Schema, {'option': '1.2.3.4:5678'})) copy.deepcopy(IpAddressTest.Schema) copy.deepcopy(base.get_schema(IpAddressTest.Schema)) copy.deepcopy(self.get_config(EditURITest.Schema, {})) copy.deepcopy(EditURITest.Schema) copy.deepcopy(base.get_schema(EditURITest.Schema)) mkdocs-1.6.1/mkdocs/tests/base.py0000664000175000017500000001042614664334534016606 0ustar carstencarstenfrom __future__ import annotations import contextlib import os import textwrap from functools import wraps from tempfile import TemporaryDirectory import markdown from mkdocs import utils from mkdocs.config.defaults import MkDocsConfig def dedent(text): return textwrap.dedent(text).strip() def get_markdown_toc(markdown_source): """Return TOC generated by Markdown parser from Markdown source text.""" md = markdown.Markdown(extensions=['toc']) md.convert(markdown_source) return md.toc_tokens def load_config(config_file_path: str | None = None, **cfg) -> MkDocsConfig: """Helper to build a simple config for testing.""" path_base = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'integration', 'minimal') if 'site_name' not in cfg: cfg['site_name'] = 'Example' if 'docs_dir' not in cfg: # Point to an actual dir to avoid a 'does not exist' error on validation. cfg['docs_dir'] = os.path.join(path_base, 'docs') if 'plugins' not in cfg: cfg['plugins'] = [] conf = MkDocsConfig(config_file_path=config_file_path or os.path.join(path_base, 'mkdocs.yml')) conf.load_dict(cfg) errors_warnings = conf.validate() assert errors_warnings == ([], []), errors_warnings return conf def tempdir(files=None, **kw): """ A decorator for building a temporary directory with prepopulated files. The temporary directory and files are created just before the wrapped function is called and are destroyed immediately after the wrapped function returns. The `files` keyword should be a dict of file paths as keys and strings of file content as values. If `files` is a list, then each item is assumed to be a path of an empty file. All other keywords are passed to `tempfile.TemporaryDirectory` to create the parent directory. In the following example, two files are created in the temporary directory and then are destroyed when the function exits: @tempdir(files={ 'foo.txt': 'foo content', 'bar.txt': 'bar content' }) def example(self, tdir): assert os.path.isfile(os.path.join(tdir, 'foo.txt')) pth = os.path.join(tdir, 'bar.txt') assert os.path.isfile(pth) with open(pth, 'r', encoding='utf-8') as f: assert f.read() == 'bar content' """ files = {f: '' for f in files} if isinstance(files, (list, tuple)) else files or {} kw['prefix'] = 'mkdocs_test-' + kw.get('prefix', '') def decorator(fn): @wraps(fn) def wrapper(self, *args): with TemporaryDirectory(**kw) as td: for path, content in files.items(): pth = os.path.join(td, path) utils.write_file(content.encode(encoding='utf-8'), pth) return fn(self, td, *args) return wrapper return decorator @contextlib.contextmanager def change_dir(path): old_cwd = os.getcwd() os.chdir(path) try: yield finally: os.chdir(old_cwd) class PathAssertionMixin: """ Assertion methods for testing paths. Each method accepts one or more strings, which are first joined using os.path.join. """ def assertPathsEqual(self, a, b, msg=None): self.assertEqual(a.replace(os.sep, '/'), b.replace(os.sep, '/'), msg=msg) def assertPathExists(self, *parts): path = os.path.join(*parts) if not os.path.exists(path): msg = self._formatMessage(None, f"The path '{path}' does not exist") raise self.failureException(msg) def assertPathNotExists(self, *parts): path = os.path.join(*parts) if os.path.exists(path): msg = self._formatMessage(None, f"The path '{path}' does exist") raise self.failureException(msg) def assertPathIsFile(self, *parts): path = os.path.join(*parts) if not os.path.isfile(path): msg = self._formatMessage(None, f"The path '{path}' is not a file that exists") raise self.failureException(msg) def assertPathIsDir(self, *parts): path = os.path.join(*parts) if not os.path.isdir(path): msg = self._formatMessage(None, f"The path '{path}' is not a directory that exists") raise self.failureException(msg) mkdocs-1.6.1/mkdocs/tests/integration.py0000664000175000017500000000415414664334534020220 0ustar carstencarsten""" # MkDocs Integration tests. This is a simple integration test that builds the MkDocs documentation against all of the builtin themes. From the root of the MkDocs git repo, use: python -m mkdocs.tests.integration --help TODOs - Build with different configuration options. - Build documentation other than just MkDocs as it is relatively simple. """ import logging import os import subprocess import tempfile import click log = logging.getLogger('mkdocs') DIR = os.path.dirname(__file__) MKDOCS_CONFIG = os.path.abspath(os.path.join(DIR, '../../mkdocs.yml')) MKDOCS_THEMES = ['mkdocs', 'readthedocs'] TEST_PROJECTS = os.path.abspath(os.path.join(DIR, 'integration')) @click.command() @click.option( '--output', help="The output directory to use when building themes", type=click.Path(file_okay=False, writable=True), ) def main(output=None): if output is None: directory = tempfile.TemporaryDirectory(prefix='mkdocs_integration-') output = directory.name log.propagate = False stream = logging.StreamHandler() formatter = logging.Formatter("\033[1m\033[1;32m *** %(message)s *** \033[0m") stream.setFormatter(formatter) log.addHandler(stream) log.setLevel(logging.DEBUG) base_cmd = ['mkdocs', 'build', '-q', '-s', '--site-dir'] log.debug("Building installed themes.") for theme in sorted(MKDOCS_THEMES): log.debug(f"Building theme: {theme}") project_dir = os.path.dirname(MKDOCS_CONFIG) out = os.path.join(output, theme) command = [*base_cmd, out, '--theme', theme] subprocess.check_call(command, cwd=project_dir) log.debug("Building test projects.") for project in os.listdir(TEST_PROJECTS): project_dir = os.path.join(TEST_PROJECTS, project) if not os.path.isdir(project_dir): continue log.debug(f"Building test project: {project}") out = os.path.join(output, project) command = [*base_cmd, out] subprocess.check_call(command, cwd=project_dir) log.debug(f"Theme and integration builds are in {output}") if __name__ == '__main__': main() mkdocs-1.6.1/mkdocs/tests/new_tests.py0000664000175000017500000000127314664334534017707 0ustar carstencarsten#!/usr/bin/env python import os import unittest from mkdocs.commands import new from mkdocs.tests.base import change_dir, tempdir class NewTests(unittest.TestCase): @tempdir() def test_new(self, temp_dir): with change_dir(temp_dir): new.new("myproject") expected_paths = [ os.path.join(temp_dir, "myproject"), os.path.join(temp_dir, "myproject", "mkdocs.yml"), os.path.join(temp_dir, "myproject", "docs"), os.path.join(temp_dir, "myproject", "docs", "index.md"), ] for expected_path in expected_paths: self.assertTrue(os.path.exists(expected_path)) mkdocs-1.6.1/mkdocs/tests/integration/0000775000175000017500000000000014664334534017642 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/projects.yaml0000664000175000017500000000611214664334534022357 0ustar carstencarsten# DO NOT UPDATE THIS FILE, only for tests. # This is an intentionally small subset of https://github.com/mkdocs/catalog projects: - name: Material for MkDocs mkdocs_theme: material mkdocs_plugin: [material/info, material/offline, material/search, material/social, material/tags] github_id: squidfunk/mkdocs-material pypi_id: mkdocs-material - name: Bootstrap4 mkdocs_theme: bootstrap4 github_id: byrnereese/mkdocs-bootstrap4 pypi_id: mkdocs-bootstrap4 - name: Bootstrap 4 mkdocs_theme: bootstrap4 shadowed: [mkdocs_theme] github_id: LukeCarrier/mkdocs-theme-bootstrap4 pypi_id: mkdocs-theme-bootstrap4 - name: Bootswatch mkdocs_theme: [cerulean, cosmo, cyborg, darkly, flatly, journal, litera, lumen, lux, materia, minty, pulse, sandstone, simplex, slate, solar, spacelab, superhero, united, yeti] github_id: mkdocs/mkdocs-bootswatch pypi_id: mkdocs-bootswatch - name: mkdocstrings mkdocs_plugin: mkdocstrings extra_dependencies: plugins.mkdocstrings.handlers.crystal: mkdocstrings-crystal plugins.mkdocstrings.handlers.python: mkdocstrings-python github_id: mkdocstrings/mkdocstrings pypi_id: mkdocstrings - name: mkdocs-click markdown_extension: mkdocs-click github_id: DataDog/mkdocs-click pypi_id: mkdocs-click - name: blog mkdocs_plugin: blog github_id: andyoakley/mkdocs-blog - name: Blogs for MkDocs shadowed: [mkdocs_plugin] mkdocs_plugin: blog github_id: fmaida/mkdocs-blog-plugin - name: foo homepage: foo gitlab_id: bar/foo - name: Termage mkdocs_plugin: termage github_id: bczsalba/Termage - name: Github-Links markdown_extension: mdx_gh_links github_id: Python-Markdown/github-links pypi_id: mdx-gh-links - name: autorefs mkdocs_plugin: autorefs github_id: mkdocstrings/autorefs pypi_id: mkdocs-autorefs - name: mkdocs-redirects mkdocs_plugin: redirects github_id: mkdocs/mkdocs-redirects pypi_id: mkdocs-redirects - name: markdown-callouts markdown_extension: callouts github_id: oprypin/markdown-callouts pypi_id: markdown-callouts - name: PyMdown Extensions markdown_extension: [pymdownx.arithmatex, pymdownx.b64, pymdownx.betterem, pymdownx.caret, pymdownx.critic, pymdownx.details, pymdownx.emoji, pymdownx.escapeall, pymdownx.extra, pymdownx.highlight, pymdownx.inlinehilite, pymdownx.keys, pymdownx.magiclink, pymdownx.mark, pymdownx.pathconverter, pymdownx.progressbar, pymdownx.saneheaders, pymdownx.smartsymbols, pymdownx.snippets, pymdownx.striphtml, pymdownx.superfences, pymdownx.tabbed, pymdownx.tasklist, pymdownx.tilde] github_id: facelessuser/pymdown-extensions pypi_id: pymdown-extensions - name: literate-nav mkdocs_plugin: literate-nav github_id: oprypin/mkdocs-literate-nav pypi_id: mkdocs-literate-nav - name: mkdocs-code-validator mkdocs_plugin: code-validator github_id: oprypin/mkdocs-code-validator pypi_id: mkdocs-code-validator - name: tags mkdocs_plugin: tags description: Processes tags in yaml metadata github_id: jldiaz/mkdocs-plugin-tags pypi_id: mkdocs-plugin-tags - name: tags mkdocs_plugin: autotag github_id: six-two/mkdocs-auto-tag-plugin pypi_id: mkdocs-auto-tag-plugin mkdocs-1.6.1/mkdocs/tests/integration/complicated_config/0000775000175000017500000000000014664334534023453 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/complicated_config/mkdocs.yml0000664000175000017500000000144714664334534025464 0ustar carstencarstensite_name: My Docs nav: - Home: index.md - User Guide: - Writing your docs: index.md - About: - License: index.md - Release Notes: - Version 1: index.md - Version 2: index.md - Version 3: index.md site_url: http://www.mkdocs.org/ docs_dir: documentation site_dir: output theme: name: mkdocs custom_dir: theme_tweaks analytics: {gtag: 'G-ABC123'} copyright: "Dougal Matthews" dev_addr: ::1:8000 use_directory_urls: false repo_url: https://github.com/mkdocs/mkdocs/tree/master/mkdocs/tests/integration repo_name: "GitHub" extra_css: ["tweak.css"] extra_javascript: ["tweak.js"] extra_templates: ["custom.html"] markdown_extensions: - toc: permalink:  - admonition: strict: true remote_branch: none remote_name: upstream extra: some value: 1 mkdocs-1.6.1/mkdocs/tests/integration/complicated_config/documentation/0000775000175000017500000000000014664334534026324 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/complicated_config/documentation/index.md0000664000175000017500000000022414664334534027753 0ustar carstencarsten# Complicated Config! There is only one page, but the config is complicated and re-uses it many times. It also aims to use every config in MkDocs. mkdocs-1.6.1/mkdocs/tests/integration/complicated_config/documentation/custom.html0000664000175000017500000000017614664334534030530 0ustar carstencarsten {{ site_name }} {{ site_name }} mkdocs-1.6.1/mkdocs/tests/integration/complicated_config/documentation/tweak.css0000664000175000017500000000003114664334534030143 0ustar carstencarstenbody { color: red; } mkdocs-1.6.1/mkdocs/tests/integration/complicated_config/documentation/tweak.js0000664000175000017500000000004214664334534027771 0ustar carstencarstenconsole.log("JavaScript loaded"); mkdocs-1.6.1/mkdocs/tests/integration/complicated_config/theme_tweaks/0000775000175000017500000000000014664334534026133 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/complicated_config/theme_tweaks/404.html0000664000175000017500000000013614664334534027330 0ustar carstencarsten{% extends "base.html" %} {% block content %}

Custom 404 Page!

{% endblock %} mkdocs-1.6.1/mkdocs/tests/integration/unicode/0000775000175000017500000000000014664334534021270 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/unicode/mkdocs.yml0000664000175000017500000000002314664334534023266 0ustar carstencarstensite_name: My Docs mkdocs-1.6.1/mkdocs/tests/integration/unicode/docs/0000775000175000017500000000000014664334534022220 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/unicode/docs/index.md0000664000175000017500000000004314664334534023646 0ustar carstencarsten# Unicode Test Documentation 📖 mkdocs-1.6.1/mkdocs/tests/integration/unicode/docs/♪.md0000664000175000017500000000074714664334534023676 0ustar carstencarstenWelcome to MkDocs For full documentation visit [mkdocs.org](https://www.mkdocs.org). ## Commands * `mkdocs new [dir-name]` - Create a new project. * `mkdocs serve` - Start the live-reloading docs server. * `mkdocs build` - Build the documentation site. * `mkdocs help` - Print this help message. ## Project layout mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files. mkdocs-1.6.1/mkdocs/tests/integration/unicode/docs/Übersicht.md0000664000175000017500000000074514664334534025112 0ustar carstencarstenWelcome to MkDocs For full documentation visit [mkdocs.org](https://www.mkdocs.org). ## Commands * `mkdocs new [dir-name]` - Create a new project. * `mkdocs serve` - Start the live-reloading docs server. * `mkdocs build` - Build the documentation site. * `mkdocs -h` - Print this help message. ## Project layout mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files. mkdocs-1.6.1/mkdocs/tests/integration/subpages/0000775000175000017500000000000014664334534021453 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/subpages/mkdocs.yml0000664000175000017500000000002314664334534023451 0ustar carstencarstensite_name: My Docs mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/0000775000175000017500000000000014664334534022403 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/non-index.md0000664000175000017500000000042214664334534024622 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: / ### Relative path ![Image](image.png) ![Image](image.png) ### Relative path 2 ![Image](./image.png) ![Image](./image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/metadata.md0000664000175000017500000000010714664334534024503 0ustar carstencarstentitle: A Page Title # Welcome to MkDocs Some page content goes here. mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub1/0000775000175000017500000000000014664334534023255 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub1/non-index.md0000664000175000017500000000071114664334534025475 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](image.png) ![Image](image.png) ### Relative path 2 ![Image](./image.png) ![Image](./image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub1/index.md0000664000175000017500000000071114664334534024705 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](image.png) ![Image](image.png) ### Relative path 2 ![Image](./image.png) ![Image](./image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub1/image.png0000664000175000017500000003340514664334534025052 0ustar carstencarstenPNG  IHDRG bgAMA abKGDtIME -@p$5IDATx]y|U՝?=BB/D.h-ô3NKTₖ:P!#,ER a &}O[Ǐ}p{w9~-瞣TUU)"aBz@Q]q oAa~n!w_UUu]Onِ'][7ݲl:ϖjSUUΜ:+2♛޲2_XWxٜMR%4MC#9nje:ی3:J|J ^煚j-w#NM˛Z./1Y`"t$2MpM,69Z$vXmHJs" oz5)+4 ĒJEEeku $^!p6j &nM&I̙na #Ni[֮cjTSIKu+V"MIJBEMZ<BHK_D+O7Z"U$x3sgITu _ oz$Ƹ6%,R&o <4iA 8gy y[E/F$%/SN]EP."4-"RxHacQvZI_¬wS}`VWa$8=tK4iB!iUTnuH~$]׃ |#zUU4MBH5[6'Sjښf0 2/RErqLߪB(KB!t]g1IV$,J!XNDF2 2Es<(J½,W0눛v"2Ur4Ml3KK_\+ǏGI?a vN?(l^ MZ"s3ǓD)5-n, % QDMmÕ6HϘ5;WLP\]]xpӽGSweHXk EckX|~SN78jPLӫoRSS99๢(4An f(nG'IRLW>K$ =v~*gk2F E5&g% |^S^^uS0u5 ɓ./7)*1cQN鮴 ֎Yo#\2)Iڗ%MӴÇ|\z={-z*~3r8\C ZllգM Vspi0Rux>丵LZ2\+TY[SSrFEdšU(p`p) WQh >m wyW"X$_~a03CH4#2f\q9Hϣq?|$?\s׀B@ P__?bRHXfvޢdP3E^?g:  -Nԟ'a$wŒB9G]__ oEȴM+49hzOT[]A)PZ^Ň4WM4- BaZ>G v766߿_~[(dfC%AKoc9ԡy  묈y3I;>$i_4Eijj*(Tq>߸umL`mr5a9/Τ,D\@*qUW0`n72n!g0P84QiZmmȑ#!Z]\ TP4ϊ:`~)x>W{>iQj$i4M'''v.BYƶʾP-ꌉx<4Muuʵn?ɧV)l [kݚvHma|.4hz٪Z|8 Q{jE.@RDC&q0 W8NQ s[<?} #I(\Np8HR444?&&٢Z9fѯ_P(DP"IPn)sz w1_?ϐs4/."lxl2sT,"- sD1wnYя#GrQ/Oӗ^zK\ /:.Q0QP\2G#Qt#1+i:[@,Š$Ji]vX[GG;J`H^X|xժU!-ؽ{7os$LJ 1Hqh'INQއDDägZ#I3zjjj[[%'nmmUjKVQO*7wP+`eff677 K%>bKQ?2hdt,_@99$` E"s#,U#㧾~ذayX݆p(ڹs;hbx3fطoodɒ+WrҸJ/]DH(^7VB I;q֭[׿3gD%Mܺ:Ꚛ9NUU^o ("2x+\<1`bbbSS4anpr[תR4H|?ȦI+mL\؂]wj5VkV:i$EQ>!Ĕ)S&N"-1ZԤ/V0BlV !Ȃ"ܐ*EJ򶣑&X L2oҤ`1Ap53iCρ<5)7]kkk sO.0s%K_@E 2dȧ~*xv{MMMcc('N(..0aBgggrrڵkƍwȑP(W^IJJReŊΝE`(5jo~sמ;x`MnS+' [ y f&qkSa>Xiަl [Y[Me W[Թ M@x@ieffܹ3==p6"(k:* PYYFFSTU#?^c*cQ#Wt`pb05)⠱<iy zWk8uRvr\u)//`~W-onDs} !iKOO* c-Z:ʍ7(3gNVViD],Cy&N'ep8hygi,55UTUu:ĎT|n5M{D˅^`A EDȰ Fz3^ [gKy07 |&hm5zV ISUu׮]SLBڵ+ N4J"//999HHH&c%Mod\'FmooOJJa9z5Ȅd}2:ʂzd kI||l6tHk"ub؁@za4FIml/D}mm߾ov}֦iZccOӺkر>1???//>p8Ν裏.\HӬe0FSSU####%%eӦMݼyi0Op¿/Æ KMMUeѢE+V Bdfff666rxs=Re15çSEdpkݴ0Dp8F}&L=zq GQH Btp\.]=ʭt ˚p 2\Q?.Bī$u+ܠ%32'k*א'|ˀn`2Pu~NcJKK/\ߞ9sV*ꭷޚ6tPYZZ|iii@m r/?"===;;{޼y ȉ*[`Gbbz뭇~ W_}xo7 cҥ'O>|xZZګ/A~Cizf`?=wSќ|p< uasj0MELS<\ͼn~~W_=aL0o놴P(t:;;;1iJ Rٲt_)ZFa3"3+;wRjVYY9rȬ,Rư:]f͚AQC,Xg%N!xt7 ~p88pUUvsI븓vfkiiq??_4ieHQia_G/$7y&Hոgj5uduOUUUg=:bH70%(:{lgg'}y\zœ: ׃K|^?""!UoeY4aJxBD( OSc͛3O 0ʖ.]ZRRbW^=c <`܇ "'aC.Dg—t0|;;wݿ?yx3sui4k})bۋokve eF:!0fjطo_~~>utٙ<^}a"<$%O3Ty~n&![ZM0*ihb̅;3\):Xmmm\\ܔ)S:;;y<~ `b]Ԁ%ךAJi=rE` GRREx瀽g"Zkei}qeA*p"Jcap &40_߇BHnH*:TVPt:i! 7]7qE"l'+lG`#V 9-%@GcLr(4y\^C슰t]u]pkvԩZ% "Ģ Ce_p"MS H(lQmMrIIa111HNN6fzjt:Pn/rx\." : \CKcp>s@rdC%,g>c4(#4}iziTd'Y&ǏRZ(, M"+& -6㓒͒!MӴܬcǎy^0†%A&yvi :􂐢a`vml{ %k9mWf/I<Ӭ``BWDx;+ g^pLcMAy饗WZZZ~~AB$>!)̡EUWp1DoJ8bP7|cXL,P57hE?Fp4EQJGG2\w~@*`v`@Bz#6碲ź#r3씤iyȬ-gejd(LuSYTssT)ҔjZkk&8wbJĈ `fl .x:}I0TgI$$M5}jeJ!88aPEHûCBe 6X}K$i iJMM 0J=9a+׏$BP3#q|{@0 \ : 5]Z+ Hj$MM!? "5 :t""LTӋ0N'g9;LvV^L._y0I&IfGE絼IDs8G3gLLL4*!!e ՁT )\Ǐ(z q&6QQ}`Ec;Q`N] /X@UݗA|ܟF) 0u5^ak%$$zǎ_rġCΚ5k4{[nѢE4>ߣ!iچ ׿4}={c>|ӦM555G~7֯_P\ oSWWG;Zp.X`tCݳgNyO4w”ykkk/ MMM^vpG"9v bWhoo|[liiLU49džyK⒅=//fi>/==}޽jooBMgb h| }k*¡ [[n~6 c֭;vXr<@Rso~;mڴ_=33^sF 7pݼyeJKK ̿sO?o'⊽{8pnu]zhbb3o𭽽}޽ӦM+((h <@~NzWر%5&&>' lu:O ncu= - EIKK3h9s̛7o٦[Njjj1cvaz,?. ֮]δmQSSd uR]]-u=>>^QUUiرcÇ;{n%/bȑDB7Eu7|wg Hlu|,]yǓFۺꫯ;wyԩSO]U+VlڴiժUӦMB?~\T]]a p !hB%s2[ne|ЪڌoV,;tw5滑P(twTWWo۶"z-,< .E2T:F13k`[X\}qGu VQQ[z`UFF;s ӄo __ ^t޼yÇ馛-[&x xB!CЊ:' svuKZ[[TUZlُ㎎1t3BߤG{b 0G}jqkƪUv… M~?Hs;c'N8q"#1cƯk2CիΝK-MӬ1zdС111UUU !Ǯ yyyL8nٳG1hРnnݻDC}8)b۶m˗/ojj=x 7;`-t*sa裏8PRRr !ĩSq!Ν;ׯ__TTTTT֮]K!Çn7{OΞ=;{x:̜9vx>5kִW:s̲eˈ?я(ʒ2ӹo>҅=|Nmmm^ԩSm6[RRرcnZVVV[[K iƏ/2eXzuCCþ}v`7$.qnիWZEG{\tә>a]viPDͺ9:̞=5k֬Y'??N% ?#=x?={g?)FMrEQ~_TWWwzfƞ4iRQQB7|s„ X\\B <OUUUbb뭨hmm:,]tʕ/=9u9sP/^3r7!?L+@=Ͽ?˗/B >]ݒġy睤-GAAܹsȣEVJHwmڵK.{nŤt uXss( !J:>))T`0ڪ( % eJJJN>zsrrƏAg[7mv# =|_]|K]݃f_WyԾ-KJee%f)E C7 `S<ߨ`*(_"Yt0Omx 5 $Mv)F~2 O`tQj`QّVUsMgr]Q%$Mv f.}Ç+=T6wܞ,oYD~ -Sھ}冄  (!!;a7cW@ olsA@L2i_HW^xT1͙3]v2L/bznLe*>*؃ZBBo@YHHH*8S2iI},&SʴϤ6:KYBB@} rŨD_T}-e/x?zP]]݆ .8OoTUU}97idR+!"7[bbbƎ`:Q'HKK뮻.,Olk?v#Fx;ʴMiӧׯ_O ƍtoܸf"77w֬Yqqq'O޽{yn+ְAe*S0mbnҕÇ߿{ӳ+++ Ø6mڈ#n" ={vӦMa͟?_Ӵ<:?+UWWTW^t]onn\WWg!GWjkk ,Yp8E?~0Ft:ٳsӧ_~(i۶m555B{<2WtQ]MӚz`08|:-8++N:oxkʴS7,F'y[uЭl]gϞ=aBqe͛7Ornw||ap_bb_OCZa p5!Z)))v[ZZZ75W222P8a}u׍?z뭷fddKn ׯ߼y%TUu:5e㩽 jP( "%%%??_QWW0`(`0e˖#GG?JIIBRx;ʴȮv͂!߽{z+W3W]uUvvCvoWyJsssNNJLLliiGFZr8|GqEǷQFQՆaTUUuC333MT,Z())ȑ#o6壇OWLEQ`VMӦMRO<)(//BP8dggO4)'''''~QW9"7x#=z4 ZkxZÇndddj<=]7o3vؤ$!D}}=:MJJ (^EO;˖-ٲeٳgϞ]dI B]v"kԩSUzzҥK~?~'*Cƻ ps]O>"-[Ƌػw/1ؘ2p%KB!ʧs׮]"ۿɓ'xȴ^%&r@[[۞={~p8|wyfx~N7[XXHYJ$l۶; F\r![ބn2 W^!|Z[[#G%.q(O?tOA~`0LOB+n744;vBvAo!(mmmXwiPB!?eP(..LD7uTS}QXXH#v{UUUEEKBt_CKbT_RHMM/2!kVUU5kWahH~Zj%Ӿ*K ۶mkkkSSB₡=-Y$$$.&d,DBA 2LFj]$$$ z2L/b{T2mgu@BBk\[&ST} 2^-! ĔksD_} rTKH5[[[{ pvRz[vژRQ ءR%ߒo·΍jv˷[^9 €ch%F$$78fnԋ Cά<~+HrCr ;PPf^[VVKrCrp+j|K :-o_ -|7eߑ吣ZBAj 9%$䨖kZBAj 9%$䨖kZBAj 9%$䨖kP.e׽ mpa.^F/%$䨖kZBAj 9%$䨖k[f%tEXtdate:create2016-03-01T09:09:45+00:00D%tEXtdate:modify2016-03-01T09:09:45+00:00)tEXticc:copyrightCopyright Apple, Inc., 2014tEXticc:descriptionDisplaytEXticc:manufacturerDisplaytEXticc:modelDisplay IENDB`mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub1/sub1a/0000775000175000017500000000000014664334534024270 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub1/sub1a/non-index.md0000664000175000017500000000061414664334534026512 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../../image.png) ![Image](../../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub1/sub1a/index.md0000664000175000017500000000061414664334534025722 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../../image.png) ![Image](../../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/index.md0000664000175000017500000000042314664334534024033 0ustar carstencarsten## Test sub pages and referencing images ## Reference an image in: / ### Relative path ![Image](image.png) ![Image](image.png) ### Relative path 2 ![Image](./image.png) ![Image](./image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/image.png0000664000175000017500000006724014664334534024204 0ustar carstencarstenPNG  IHDRG biCCPICC ProfileX YgXK.qy "9眃䤰 D*`@*( b$ wyf귫zzjiFEGM (n " P}cy,lx, ,~1@vh_o8@|h`7$FmBPQ\m/rJo 9/8FAoo5<A@4|@` +G2_ ГFaӂ}}}Nb=@0C_;d b`41VU=0j?m?~?<=?w{M&5? srrk3c1g3I"H?҃A:V@A6dg**ʦc%EWğKq3~k`bTh=/KKAG A]1Ի6g (1PFD?g#~y;\BtZQIX>[oGnJQW{&E_{*]jWEдnm{>s|hlްЧa zDM DpG-N`7 PN3<ZA]0F83Axb!AH 5H2 { (JBPTBv=BS,L, %h8΄2n[.<O% $Bd5Eܑ#9H R4"WѵD>"+CȠ48a|1јtLsӂya~b|Xi &`%S+؛<]p8q*p!\ ׍{-xn4^ocYr| ?N  ;!PB't~1Ӊi%]{@7CB'j!2b#&9qD"m!IHe ۤ) =^ސޓ>>4}7SE1=wX| } /32nc4gc`dla|IIi'S2S eLŘ ̕OXXYYlYYXY#bdc9|GfEXY Y}Yֲdañ岝g6NfWbwfOdd>Ɂpqsqp\Xl|K˟+kkm}{#ų'8Ml9x|R||)|'M? p d <"%NѧQ(7(sB|BfBqB' "i˞-M[&jG{DEEREΉ<U -&&."_U8x9 5Ò8I5PcCRTTiXZE:Xíح[#l}"C///sNfj6m{n,+".{H_\\ܸgjfqÒ򕕔5lma}MM-5=l;a'nmwm;noSX  ǝ$z=:s1r)rtuMswwv?aQ19C|G;;yvEv^RkK>>G}| }K}?/P.P;plnPI`oC7\š Ј&5hS1P̎X6#w0N"n_TN|eˉ,IRIIoMR0))BSNC>3LwM=E{u{5?sW>}hYOk:9|~bvy\ܒܵ<߼n/P)8^+(={LKQra-G(Gr|-*STRUJ,+,*k+)/,_4l:w4c~;X_[Z\=vDKXMIojkΞ9{jt3gnU={|.lgym2'8r/ q_8zReˍ͢G^iZZZZ'[^ռzڶk;:*_/$vfvnt%w-uGu s7o2ׯu[v;jwU *^|}-T ]}Fo y84:ػaO?19yD 5/%_6ML^2|j|wk3oޔ|{»Y١g>D}1˧%>728:73OX[^^A@Z*!,Y)-u#ELzuuA-Is&o̼[Z5-k99v8}wQt sq$PU}:K  T|.#t l,u|Z4O_Kx8Ԗ\j&#AF{tng~7ս@EvNNz.-/OKF!wʡ뇫-.-U-˿V]}&_9jM.r]'WZj[B^tu|>9sx_7wݢk溽|gx{>=\|qpH1dӲgnw'NO {)dԎWƦK^;0{ƻY{}K>Y3G뙷]Xh[ܺxת%eoCWY%ѽq*+hnJA|]j=VlV\*TF,[(訬:q*jlњ'6՞8})k7J6.R'_RRКۖ~jѵ]{#{vZP)sK_l<(1048ztͱ+O{4SE^0|~mӻ>Sg9Eb_~.mڪ]/ ]KĶhxepG2gfc"33pY٬i9qC<ڼ|E=()#y3o}j/H]`z|Op݈(rteq\}kbCIʫ ]p %RɲMGTstVӹg Εit+8u;~#凎?i'&+^Sp|Wūyk? Hhʼn @8:1BRCk Kp\ wgEtp(r(b0՘X6vl!1WWG*QB"aN.n@;'!/>߫{k1zYRQⱩO9d݆FrS1 -Nm5t׺#{Envـ{n >\{1s4ɷ 327 151 b@IDATxűgvgw/)S@BBD4d$?L0 Ƙ` Q(AI(;Nwgwk:I1ӌN=5U]==%K\u6pA@fY hKqVBD:F"0BrFA`A WM!ha!da"q5P+,YXţhfRU`BͲaaYŬ)!-e:EJJjo ]>umeˆh`L&cDl-EXzqY`PP"J C H,fEEB kTxYD,M؎Sj{R.,q-"/l-NPxM#6[0fX0mVH"@ŭf)ֆ4 0-ѸYxEE-W<&Yjx^S,RlC\&*rJij44bsmJ-fI"[{qYJ4! Rhc4h^Q!E/^j-#aD[tD / ߖm Y( 6H[ FUXVS;ׂZ+PK!֨$WGD/ jV!Jbr5F#VF PYSi-&Eʨ^ٗZ\ۭ-tE- Rl-F-[l3%FHĹ!j7b`5WK)6ZV)cZ@t"6Sr)&bs⤠h Ke m FAm@ "/Wd7%X0pt$h@5#d2.cl[%'gck$W&Q!!K(`4\ qŒ\Nȹ- CNAtӂxK@@m! )q&!(7|!;w.rcybȶʥR";qRްq5J"esL\\Y|؂ HQBqE#̚ mD-NVhDLg "-!"tho|TQ1$(ЬK=:Q/P"ѴEIdd\Ϗ|.ÐN3-<.Ĝ G|;'/c&cjz&CbѼ *'G28 M-ဈ'љdG$2G"Te <5?JQ#wG/aiK‘$bX'@_4l`E䉁'$Z55eU+40sk[x2SֶASW!=ȕj)ID x!Yp+ 2 tJmE*:Qz)=<  Ճ(V\ٯoߚڞNIc"BƲf =Pݴ3H ZCqt;:i@&qQ249BGEb`K#b7# x. aDkJb,h&ˌFGhc$dDQ7DbNP x Q:vKxj0U]\T F 5KHpFxTTe% ]xTD"+$*ʀb\% 0K0K)4[03{5:rm%xLUP`.V7ȅ 6?)L,Wj`3K"`lۏHg:∑db=l QD)$(θL= XwГ^@R&Fer((qN ?8f,A!t3 %21OR.KcbÌ(阨L\:80X:^wx @ص/etfRuu5.42gmjjJf`'Yv3)*& W sxIIIqqqii)Z6sq!*EkA=Œd ]|^X:E!Kd|h0Ex{(icgT4H +_u':6z3&xV1+@פ QJ( Qe vmO-$kkq#aqQQKj!<?k^b73O^AJ\x\w@&tkOuӯQ+#\XVvTr'T*E\'F!ހ _$j(=4ȹ%00D%]s5K1ڈ Pk]-nsI"Kxl PVOH+kof뭅(' D\Ң2?܉oرcW454464l|H־L7)A pU1`2F HFzd:iRY%jvGgarݶTq?X[ű`aq~\pUٮ1H0N惴AE919t6H:\&lwE=,,(6k}DƄfy_{ԭjJ܆5jJhmdp G}̟Mp:yLdp JKJZZZx0  %[rs)dOr7|zKZR4 ",m#i`VG hq"PmipRDjvSDh=nhh7^xwd?cK-\SsfmAh"tRׯMeuUemuEښڹsyQ/!9T#nr\lM8lMeqsn|A>쏖Zj{[S ږOQ,~ŝ'=O[L=<'J_=W|oʥl?s ^g=2Fq;K9;tH~xgM1e߽4ges$$`2#]Á!V6G>bJ132TDf0,s+ܿ>G[ެt4Pa HPD*HDH,q+oH3xT$h-G 41z!2'V^Aa- 1~KEy&$4K捗&Rt^UUQo^lJc3gϛUegK3>>!9 N\N8+R8!1c i=O9Ne<C.uS%,PI9w+M/)1|c2 wzERBI-p+ ;H;c(k?c.U4)Eqel^Z sI0͏3".2/`JfeJ[})~#_p 5 +t-'8 >,y )aN1CpZ2Єр-y:mj(t--Myex۵,$q[#>a***xfd{ qye.S%i]’21^d;lSDȽQUUU?'yFx2=ȕ6lLu_t 4rKHYO;jF$;FvO\x0ؐ\CH"!0'@b!hbfw,WE.ӂwȐ-ę1Vq,ĥI3-{VnxǿKGu8ゼ0 aMͭNy os_k̡mݳkzؐd6ʶ$R,2tIΕڌ$vzO\2?s˾=z2/ԟ:?{@SbyQ(+0 ƬhXEXHC%Έit kb}Aob l@wU@6"tM&{gyjYt`|ax[TL;=\׶v}}v0Twyn"1x* `p QE"D` IVx ׈Ivm$x -BiLq."[SF(`hTf0kCMojjۻ?|nɸ-XN8BG些wڙgM2ԻVЫW?~ |0@"2O<7 βޅuM#X,J֞geUS)״PD^^$)b`SFW6+xM:bʦ28cZ4Qf:yO.7:#DqLkcL15do{4^V*8,RK0]:miۆz`wd|6Ԙ~e<50#ki7٧oW&ND`Jmu+++ϛ;hV$)~xxFFp`#z7Bկ[D* !qJT:dc!.9a/ri08e=]OAE̢ EMu +BiYJ.qN ffFt@*0ũxo m P&Kq[DZB3Ĉ !DbwRRFn3R1pdȲ *<.)҈?4Fx W `1eWEP.nQnE=geSx&%>*wHy4p> z!'Pe)MةkA%3U}{nݨk_VOL< gx=T!--Jv$ (/Hmd۾qB0u1סm'([VEQ&g|!\eK0;?t_ YXV1%@)*<[a"U"<Ԇz˩0S[=H IK}K Z60"tB\:k!mk6<={!R\Z+DzbN1Iԏ%+(V%ay8۴Ly"&k?r&3:>g C]HO N2ֱ-xEi'2>f@{BNCTx ;Āq*OYʅ] SOmV#R(* 9 HoE, + ߅3_` F DyQ9QR"]m! RS q  4e2? =D`@BD Z,ixE`p`4R˲&5 b&jke3fʪ+Rmp# nT+4GlڤRZIųn8$2+.Hf‰n܊)+12R1pAcb00ӅˉWP { c:9L 5N Z6a 0SE `Zмk_Sc * 1Fu Ï_a:U±y1V0"!L+^28aZyР!﹬ Hxf_%,DDjɘAv@Q]H:P\i$$*E0'H%+R  >C6:.-Uh HDuH~:? Ae̘ʲrހw@4'9Ą1ZUX",00v $xF&)^2˸ygD 4^p Pf sSkFv)P&5FYse(eVxB2 s;9:p9+aȬYK̛,"^Śfdxf1(ѬC+%:b7m2ʐ(a9KP"2mE/b!E$E$m 1fyYT.kdS7G֫d?%>4zR)"hRv\L6$ 2YggFlƹb)3\Dq.W] fȐeEaTK i$ˑ`ryĚfڗQ|2Pe,SVԸXD̿Ȱ[Ccc`b>Szf4`DhCiYYGH=rF#ր)\MffLaEFjtu.䬍E2Ȱ` }bZ_B®O+rd7Qžq$Ҍ!&=-ڜ) `ZX_H1),XDh $%L5)$㝸`if^Jc<8LeÐ@mrڙDΰ0ypzRuص}3i%\d5 mQzHlFj!ep=;xUCLdVy"=kǗ*e^x)I)f4pШ*Î/d]Kg8nLZA) 5NvuΣ8(M(C (OY#L"sHMFq˧{1L962΁cWh2hH_ W4$;/]x׸x?m,Ff&*~<ϰ!p#El,`l),~,o^`)aZYKB٬2b R ׄެ913grhEe6C> eK={Ǟ6C<+xkVskRSbqzS裏DuÔ!, D?`ŋq}3{˖9GO>e,~1fݺ0̦yͣ9<4/[9pЀN ԥ>qꩧ_C}w̙;dȖ ~dպBW%kʕۣ|K֦嫚xq1 ~wZѸ*776sV6`aqu2ɻQdښVNܢuEû͇ސ!Cxσ8~׶-MzwG3]~0sfֲn-yQٲ+gZDWYzSZd"wtqʄǞy 馏?8o"qO?{sUUKeʏ+qvq'x鮣+ri{)wms3+U 5pc8\k_^}iSća܊_tC7kng]:vǜݒ]2˟WD~oUjj:%;z{"+n8Ï5zTK~r&&=XFlQND9+a[}Ƚ։~wdsY5v~.mxORߪ*K| o~ј9O*S8Nq*7(. ӓ~""};K3գukrI## [W-~;`= =!s\W? һz1#So7:~KWyt[~;/|ʻG^z}V.r=6S D;#G3mͫS;4b!%%ż'O^~d; YN)} Rt5.r1 1MU97~xtC}kzGUlr5~w|peu˝sUXV:=?,u_8>-~wr MϟiX^P*sZfujisҾ{_;g㯾2>NgF#G]};~q'Z_afDHEqQg$!'1 9ibNNz#HK]K Hǚwhl;?Gn2B6)~o H$d ZL[ '\Ggn91{o%s<P'Oqؖ&# N_[Nc5 N%<@䓽xűh㛓V sfnU:~أv&*F30}e@|m7Հj xGb[.ڜ) ;!O> /X[3% ;f>-JSd𖱣cM̩켿TeSP*o_K ]:ΗBm&}÷F׾?vy_,?mšfgK:7O3OVu켳}+:kh:C?$`eW=8ϿN_emAvMGSS4]=.UV[dk  !'N4#xQ5rǟx̣ &߂B\kcSdFg bPOοqd=|Qa\u鷞)vNݡ.{򧫯\Ks߹qkZ#|¾{:R?;]y>^ړ1Ct@fLpE}푞3{aMd@"+n!ۢm1bQGMM-͜Բ%doRDk+x׷^ (y|ͯ%1Wۇ9vfCXUzow9v^/faY;-q;-&z q1 1HX]䊳_|S;]~-.kNmHϡ@$smri^c c9@^Qfؼ!0 n^lYZjƌ4Js?ugt_|Wy6@2 UN;ݷVٶݹos~3l0ȅS:@:љŃc/y31*k{х7)꓎h-Yb9N25#@Yyw3@~Y=~n//.W\ .Em!z^a1f'`˩rp‚'Yf\Bky1fLn uܲ2:^$VovkI>^)W{cs_>exGˈw^ͫ+5#kR-*Ќi cN?R98WJT|2$j]H4mJϝ-.l:>5™WG"KфKW]/+fȩLg_Kx5&чr|lBa-'2Lλy]yNZWd)^{k=e;>9yT27甜O&'υ{ m|a;?{|?aC7~=qS;"DS{W;uɸ)mK_qn9g/ uEEǿ|6S'z?U1iSߞjS{f[~ˋEcwμΉ׷7ǽ^ [Jz|6+S]Cv`@szslv-mjY2龛&Go7Bt%S~p{˚["W;#KYgvaAe%'urGj Lkz2LϾvh\:qs|3G<#eS)G| 9/sѾΥCN^3{쪭ֆHRN=.hƎ:?v*p ϟ> gMz%5nN6o]f =IDAT.o@sڹ5Ę~?}wwAڤ~\w @#O~l~fEA-N;̗)9<q@XxyZXSN "[(/ڽ?S馛8rFҫ505-ݻˊ K8⨬gmi^dSCcGڋWTUwZ;H75=QSffqݕޅ?`) /hmk++/PW7z޽{&;0_fω})2,{Rbr'k6rh(;Z[_7D`Ȇr^u_"&QY[,\^e,Wl("k=¤͂…%V1q;RDbF!79WN5ޥF|BNIY'g:Q}ʕ ՑNYjzu%8~+@H/|xey4dC(j}IOIp(Jˇc{,Mjќɒ5{I].v~̗ٕWH!ߐok,M ZN8oJGEcZN "c3#g"ִsP$(ǀ/Trֱqg}l+0.,Z]%9Ը[_YŠB X^,I|iea~&1&@>AĬWc>;R~܍gRee.\-ΫE]cxR O?5_,coV4_n,Me+Z˶曲| oՑ6(rU!Ͳ M`ZC 9bśoc"٥h(_dWk15q1g&գ(sT“/EԱsN/px"(r9K > w)M{OdRH\{0B>{g.X횼9ūf8^ص}SvekWH#xɻ)tsưyoڱId?nkzSs,-Zq8FH2,sovxR?9b.`;U5Y--2֐%G^#*x\>Rx>8ɓ4*?h?JGy̜wsY4\ibya§`Hޢ5-7"q8j9hZ` Z$ngϗ3--jR$'#pc[4GE3|yW9r|'[K{~/tEXG / #|{|/GPּ wqVC||.ӓWt\T[tM|fr| Hf'UwQص}r'-ky#2`'(j4\ݞsa.<r>,*[ lVChEq!n>cJ|>>_Å(bP@>^F1QҴ֐!rʩ ]L*@c0>ǒ|8(>m^ ヰ|3}[lXb| yЎYާF"]FEjxފy#͖Na>ǧ`GwE^51VyeAh|3sB>j){9XH8Rfua]2*(v-|jfȐ޽܅ ! ܑϷwH}DaR 7v/!B t [?,qaH݂H5g0 )R[Plsh~)Н(]^!B t xwmaR @7jcZ!B t 4ˋW)0@HAd'P0@HnByy"\ )RPyu(!B t+ l{Y!B t pv aR @7L҅WH݆^^!B t' `x)M(|rx0@HnAy/oR~qx|MXjiK<7y\ߦka_oh~|qo җ?~́y &~_m\ x²݈f.msxG /]'_ބm;!ۿgߋlsDrPyZN;9_FQr״v,pó41x{Ѽ%!>)wwć6U;Ӧ9^[TjL^eWmz9 iaϟv_8q@SmT S@Qt .rLkgQpϜ='qz6|~ۭA~v䨩(8UsTu#ߪ&ыGEc .=:*IGQu͙_iRVH A%4Ls_kv~&컉^|5YijoM;kp6}y.I*Vg~;f A䠾\ՙ_2-nkrW羞|J.i[-JWuk9ӈwaGġiLaKS>;Et瘛x,C]yhS9eSr"M[]{לHsC(~K=oH]UÊ/M# iMLC2rW/b5{ڵthXY)+q~e*Ϛ^Ӌ_wFiy̭.ϱ>a|Q@>#+[0TaF6N-I9Eh[va/i\x؃{?o_|he/'.y7̫w/vlY`n"N j&z-r< bWG֦4.Kx_: vuJWħހ/k݆K*[.rǯ''%EU]oiՂms kKI' jMW,j7%ӌ.O.>JO01>YXF6Z\ ,o &aDZS(˷<_=jhA'_q3y 3lYċrs8Bkllmug/jn*zŊٻ:$ʜSvHJAF0qu>M+sB%n ^$t s@ɥ|уg={`3ϸ+Iÿe˜#D]"ŻŃiZFӣۼn Ô͆_ xN~rdcb[9W ;T^̄˝rghkx;MSy8-N1w Hzb0 {8w׶FB{{ש *En->rglnIK_ =UEKSf<^'z.Lԧڄ*=o|Z J嶾*L_+N+̖8:[X#TGMK]mspEΐ~YjJL *, +3y{k|(L-ddy˴.[2s-׫BcɅ8C l2 {ːpwWHnEueƕ0 )RO]FyB &p<0 B & 0@@8} !\M^! wo Rݽoػ͑ToO=s@()J>wo Rݽoػ͑ToO=s@()677ot}ߏb] Q@CjlBjxzƝ4“ۈI78 K7B R>&<Ȱ!,B#! B&2FHKP-)HHnBPɃ RRN-ڞfIENDB`mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub2/0000775000175000017500000000000014664334534023256 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub2/non-index.md0000664000175000017500000000062114664334534025476 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](../sub1/image.png) ![Image](../sub1/image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/sub2/index.md0000664000175000017500000000062114664334534024706 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](../sub1/image.png) ![Image](../sub1/image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/pageTitle.md0000664000175000017500000000001614664334534024640 0ustar carstencarstenPage content. mkdocs-1.6.1/mkdocs/tests/integration/subpages/docs/page-title.md0000664000175000017500000000001614664334534024755 0ustar carstencarstenPage content. mkdocs-1.6.1/mkdocs/tests/integration/minimal/0000775000175000017500000000000014664334534021270 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/minimal/mkdocs.yml0000664000175000017500000000013014664334534023265 0ustar carstencarstensite_name: MyTest nav: - 'testing.md' site_author: "Tom Christie & Dougal Matthews" mkdocs-1.6.1/mkdocs/tests/integration/minimal/docs/0000775000175000017500000000000014664334534022220 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/integration/minimal/docs/testing.md0000664000175000017500000000075114664334534024222 0ustar carstencarsten# Welcome to MkDocs For full documentation visit [mkdocs.org](https://www.mkdocs.org). ## Commands * `mkdocs new [dir-name]` - Create a new project. * `mkdocs serve` - Start the live-reloading docs server. * `mkdocs build` - Build the documentation site. * `mkdocs help` - Print this help message. ## Project layout mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files. mkdocs-1.6.1/mkdocs/tests/utils/0000775000175000017500000000000014664334534016457 5ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/utils/templates_tests.py0000664000175000017500000000341114664334534022250 0ustar carstencarstenimport unittest from textwrap import dedent import yaml from mkdocs.tests.base import load_config from mkdocs.utils import templates class UtilsTemplatesTests(unittest.TestCase): def test_script_tag(self): cfg_yaml = dedent( ''' extra_javascript: - some_plain_javascript.js - implicitly_as_module.mjs - path: explicitly_as_module.mjs type: module - path: deferred_plain.js defer: true - path: scripts/async_module.mjs type: module async: true - path: 'aaaaaa/"my script".mjs' type: module async: true defer: true - path: plain.mjs ''' ) config = load_config(**yaml.safe_load(cfg_yaml)) config.extra_javascript.append('plain_string.mjs') self.assertEqual( [ str(templates.script_tag_filter({'page': None, 'base_url': 'here'}, item)) for item in config.extra_javascript ], [ '', '', '', '', '', '', '', '', ], ) mkdocs-1.6.1/mkdocs/tests/utils/__init__.py0000664000175000017500000000000014664334534020556 0ustar carstencarstenmkdocs-1.6.1/mkdocs/tests/utils/babel_stub_tests.py0000664000175000017500000000361314664334534022360 0ustar carstencarstenimport unittest from mkdocs.utils.babel_stub import Locale, UnknownLocaleError class BabelStubTests(unittest.TestCase): def test_locale_language_only(self): locale = Locale('es') self.assertEqual(locale.language, 'es') self.assertEqual(locale.territory, '') self.assertEqual(str(locale), 'es') def test_locale_language_territory(self): locale = Locale('es', 'ES') self.assertEqual(locale.language, 'es') self.assertEqual(locale.territory, 'ES') self.assertEqual(str(locale), 'es_ES') def test_parse_locale_language_only(self): locale = Locale.parse('fr', '_') self.assertEqual(locale.language, 'fr') self.assertEqual(locale.territory, '') self.assertEqual(str(locale), 'fr') def test_parse_locale_language_territory(self): locale = Locale.parse('fr_FR', '_') self.assertEqual(locale.language, 'fr') self.assertEqual(locale.territory, 'FR') self.assertEqual(str(locale), 'fr_FR') def test_parse_locale_language_territory_sep(self): locale = Locale.parse('fr-FR', '-') self.assertEqual(locale.language, 'fr') self.assertEqual(locale.territory, 'FR') self.assertEqual(str(locale), 'fr_FR') def test_parse_locale_bad_type(self): with self.assertRaises(TypeError): Locale.parse(['list'], '_') def test_parse_locale_invalid_characters(self): with self.assertRaises(ValueError): Locale.parse('42', '_') def test_parse_locale_bad_format(self): with self.assertRaises(ValueError): Locale.parse('en-GB', '_') def test_parse_locale_bad_format_sep(self): with self.assertRaises(ValueError): Locale.parse('en_GB', '-') def test_parse_locale_unknown_locale(self): with self.assertRaises(UnknownLocaleError): Locale.parse('foo', '_') mkdocs-1.6.1/mkdocs/tests/utils/utils_tests.py0000664000175000017500000005223614664334534021423 0ustar carstencarsten#!/usr/bin/env python import dataclasses import datetime import logging import os import posixpath import stat import unittest from unittest import mock from mkdocs import exceptions, utils from mkdocs.tests.base import dedent, tempdir from mkdocs.utils import meta BASEYML = """ INHERIT: parent.yml foo: bar baz: sub1: replaced sub3: new deep1: deep2-1: deep3-1: replaced """ PARENTYML = """ foo: foo baz: sub1: 1 sub2: 2 deep1: deep2-1: deep3-1: foo deep3-2: bar deep2-2: baz """ class UtilsTests(unittest.TestCase): def test_is_markdown_file(self): expected_results = { 'index.md': True, 'index.markdown': True, 'index.MARKDOWN': False, 'index.txt': False, 'indexmd': False, } for path, expected_result in expected_results.items(): with self.subTest(path): is_markdown = utils.is_markdown_file(path) self.assertEqual(is_markdown, expected_result) def test_get_relative_url(self): for case in [ dict(url='foo/bar', other='foo', expected='bar'), dict(url='foo/bar.txt', other='foo', expected='bar.txt'), dict(url='foo', other='foo/bar', expected='..'), dict(url='foo', other='foo/bar.txt', expected='.'), dict(url='foo/../../bar', other='.', expected='bar'), dict(url='foo/../../bar', other='foo', expected='../bar'), dict(url='foo//./bar/baz', other='foo/bar/baz', expected='.'), dict(url='a/b/.././../c', other='.', expected='c'), dict(url='a/b/c/d/ee', other='a/b/c/d/e', expected='../ee'), dict(url='a/b/c/d/ee', other='a/b/z/d/e', expected='../../../c/d/ee'), dict(url='foo', other='bar.', expected='foo'), dict(url='foo', other='bar./', expected='../foo'), dict(url='foo', other='foo/bar./', expected='..'), dict(url='foo', other='foo/bar./.', expected='..'), dict(url='foo', other='foo/bar././', expected='..'), dict(url='foo/', other='foo/bar././', expected='../'), dict(url='foo', other='foo', expected='.'), dict(url='.foo', other='.foo', expected='.foo'), dict(url='.foo/', other='.foo', expected='.foo/'), dict(url='.foo', other='.foo/', expected='.'), dict(url='.foo/', other='.foo/', expected='./'), dict(url='///', other='', expected='./'), dict(url='a///', other='', expected='a/'), dict(url='a///', other='a', expected='./'), dict(url='.', other='here', expected='..'), dict(url='..', other='here', expected='..'), dict(url='../..', other='here', expected='..'), dict(url='../../a', other='here', expected='../a'), dict(url='..', other='here.txt', expected='.'), dict(url='a', other='', expected='a'), dict(url='a', other='..', expected='a'), dict(url='a', other='b', expected='../a'), # The dots are considered a file. Documenting a long-standing bug: dict(url='a', other='b/..', expected='../a'), dict(url='a', other='b/../..', expected='a'), dict(url='a/..../b', other='a/../b', expected='../a/..../b'), dict(url='a/я/b', other='a/я/c', expected='../b'), dict(url='a/я/b', other='a/яя/c', expected='../../я/b'), ]: url, other, expected = case['url'], case['other'], case['expected'] with self.subTest(url=url, other=other): # Leading slash intentionally ignored self.assertEqual(utils.get_relative_url(url, other), expected) self.assertEqual(utils.get_relative_url('/' + url, other), expected) self.assertEqual(utils.get_relative_url(url, '/' + other), expected) self.assertEqual(utils.get_relative_url('/' + url, '/' + other), expected) def test_get_relative_url_empty(self): for url in ['', '.', '/.']: for other in ['', '.', '/', '/.']: with self.subTest(url=url, other=other): self.assertEqual(utils.get_relative_url(url, other), '.') self.assertEqual(utils.get_relative_url('/', ''), './') self.assertEqual(utils.get_relative_url('/', '/'), './') self.assertEqual(utils.get_relative_url('/', '.'), './') self.assertEqual(utils.get_relative_url('/', '/.'), './') def test_normalize_url(self): def test(path, base, expected): self.assertEqual(utils.normalize_url(path, _Page(base)), expected) # Absolute paths and anchors are unaffected. for base in 'about.html', 'foo/bar.html', 'index.html', '', 'about/', 'foo/bar/': test('https://media.cdn.org/jq.js', base, 'https://media.cdn.org/jq.js') test('http://media.cdn.org/jquery.js', base, 'http://media.cdn.org/jquery.js') test('//media.cdn.org/jquery.js', base, '//media.cdn.org/jquery.js') test('#some_id', base, '#some_id') path = 'media.cdn.org/jquery.js' test(path, '', 'media.cdn.org/jquery.js') test(path, 'index.html', 'media.cdn.org/jquery.js') test(path, 'about.html', 'media.cdn.org/jquery.js') test(path, 'about/', '../media.cdn.org/jquery.js') test(path, 'foo/bar.html', '../media.cdn.org/jquery.js') test(path, 'foo/bar/', '../../media.cdn.org/jquery.js') path = 'local/file/jquery.js' test(path, '', 'local/file/jquery.js') test(path, 'index.html', 'local/file/jquery.js') test(path, 'about.html', 'local/file/jquery.js') test(path, 'about/', '../local/file/jquery.js') test(path, 'foo/bar.html', '../local/file/jquery.js') test(path, 'foo/bar/', '../../local/file/jquery.js') path = '../../../../above/jquery.js' test(path, '', '../../../../above/jquery.js') test(path, 'index.html', '../../../../above/jquery.js') test(path, 'about.html', '../../../../above/jquery.js') test(path, 'about/', '../../../../../above/jquery.js') test(path, 'foo/bar.html', '../../../../../above/jquery.js') test(path, 'foo/bar/', '../../../../../../above/jquery.js') path = '../some/dir/' test(path, '', '../some/dir/') test(path, 'index.html', '../some/dir/') test(path, 'about.html', '../some/dir/') test(path, 'about/', '../../some/dir/') test(path, 'foo/bar.html', '../../some/dir/') test(path, 'foo/bar/', '../../../some/dir/') path = 'image.png' test(path, '', 'image.png') test(path, 'index.html', 'image.png') test(path, 'about.html', 'image.png') test(path, 'about/', '../image.png') test(path, 'foo/bar.html', '../image.png') test(path, 'foo/bar/', '../../image.png') path = 'style.css?v=20180308c' test(path, '', 'style.css?v=20180308c') test(path, 'index.html', 'style.css?v=20180308c') test(path, 'about.html', 'style.css?v=20180308c') test(path, 'about/', '../style.css?v=20180308c') test(path, 'foo/bar.html', '../style.css?v=20180308c') test(path, 'foo/bar/', '../../style.css?v=20180308c') # TODO: This shouldn't pass on Linux # @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_normalize_url_windows(self): def test(path, base, expected): self.assertEqual(utils.normalize_url(path, _Page(base)), expected) with self.assertLogs('mkdocs', level='WARNING'): path = 'local\\windows\\file\\jquery.js' test(path, '', 'local/windows/file/jquery.js') test(path, 'about/', '../local/windows/file/jquery.js') test(path, 'foo/bar/', '../../local/windows/file/jquery.js') def test_reduce_list(self): self.assertEqual( utils.reduce_list([1, 2, 3, 4, 5, 5, 2, 4, 6, 7, 8]), [1, 2, 3, 4, 5, 6, 7, 8], ) def test_insort(self): a = [1, 2, 3] utils.insort(a, 5) self.assertEqual(a, [1, 2, 3, 5]) utils.insort(a, -1) self.assertEqual(a, [-1, 1, 2, 3, 5]) utils.insort(a, 2) self.assertEqual(a, [-1, 1, 2, 2, 3, 5]) utils.insort(a, 4) self.assertEqual(a, [-1, 1, 2, 2, 3, 4, 5]) def test_insort_key(self): a = [(1, 'a'), (1, 'b'), (2, 'c')] utils.insort(a, (1, 'a'), key=lambda v: v[0]) self.assertEqual(a, [(1, 'a'), (1, 'b'), (1, 'a'), (2, 'c')]) def test_nest_paths(self, j=posixpath.join): result = utils.nest_paths( [ 'index.md', j('user-guide', 'configuration.md'), j('user-guide', 'styling-your-docs.md'), j('user-guide', 'writing-your-docs.md'), j('about', 'contributing.md'), j('about', 'license.md'), j('about', 'release-notes.md'), ] ) self.assertEqual( result, [ 'index.md', { 'User guide': [ j('user-guide', 'configuration.md'), j('user-guide', 'styling-your-docs.md'), j('user-guide', 'writing-your-docs.md'), ] }, { 'About': [ j('about', 'contributing.md'), j('about', 'license.md'), j('about', 'release-notes.md'), ] }, ], ) def test_nest_paths_native(self): self.test_nest_paths(os.path.join) def test_unicode_yaml(self): yaml_src = dedent( ''' key: value key2: - value ''' ) config = utils.yaml_load(yaml_src) self.assertTrue(isinstance(config['key'], str)) self.assertTrue(isinstance(config['key2'][0], str)) @mock.patch.dict(os.environ, {'VARNAME': 'Hello, World!', 'BOOLVAR': 'false'}) def test_env_var_in_yaml(self): yaml_src = dedent( ''' key1: !ENV VARNAME key2: !ENV UNDEFINED key3: !ENV [UNDEFINED, default] key4: !ENV [UNDEFINED, VARNAME, default] key5: !ENV BOOLVAR ''' ) config = utils.yaml_load(yaml_src) self.assertEqual(config['key1'], 'Hello, World!') self.assertIsNone(config['key2']) self.assertEqual(config['key3'], 'default') self.assertEqual(config['key4'], 'Hello, World!') self.assertIs(config['key5'], False) @tempdir(files={'base.yml': BASEYML, 'parent.yml': PARENTYML}) def test_yaml_inheritance(self, tdir): expected = { 'foo': 'bar', 'baz': { 'sub1': 'replaced', 'sub2': 2, 'sub3': 'new', }, 'deep1': { 'deep2-1': { 'deep3-1': 'replaced', 'deep3-2': 'bar', }, 'deep2-2': 'baz', }, } with open(os.path.join(tdir, 'base.yml')) as fd: result = utils.yaml_load(fd) self.assertEqual(result, expected) @tempdir(files={'base.yml': BASEYML}) def test_yaml_inheritance_missing_parent(self, tdir): with open(os.path.join(tdir, 'base.yml')) as fd: with self.assertRaises(exceptions.ConfigurationError): utils.yaml_load(fd) @tempdir() @tempdir() def test_copy_files(self, src_dir, dst_dir): cases = [ dict( src_path='foo.txt', dst_path='foo.txt', expected='foo.txt', ), dict( src_path='bar.txt', dst_path='foo/', # ensure src filename is appended expected='foo/bar.txt', ), dict( src_path='baz.txt', dst_path='foo/bar/baz.txt', # ensure missing dirs are created expected='foo/bar/baz.txt', ), ] for case in cases: src, dst, expected = case['src_path'], case['dst_path'], case['expected'] with self.subTest(src): src = os.path.join(src_dir, src) with open(src, 'w') as f: f.write('content') dst = os.path.join(dst_dir, dst) utils.copy_file(src, dst) self.assertTrue(os.path.isfile(os.path.join(dst_dir, expected))) @tempdir() @tempdir() def test_copy_files_without_permissions(self, src_dir, dst_dir): cases = [ dict(src_path='foo.txt', expected='foo.txt'), dict(src_path='bar.txt', expected='bar.txt'), dict(src_path='baz.txt', expected='baz.txt'), ] try: for case in cases: src, expected = case['src_path'], case['expected'] with self.subTest(src): src = os.path.join(src_dir, src) with open(src, 'w') as f: f.write('content') # Set src file to read-only os.chmod(src, stat.S_IRUSR) utils.copy_file(src, dst_dir) self.assertTrue(os.path.isfile(os.path.join(dst_dir, expected))) self.assertNotEqual( os.stat(src).st_mode, os.stat(os.path.join(dst_dir, expected)).st_mode ) # While src was read-only, dst must remain writable self.assertTrue(os.access(os.path.join(dst_dir, expected), os.W_OK)) finally: for case in cases: # Undo read-only so we can delete temp files src = os.path.join(src_dir, case['src_path']) if os.path.exists(src): os.chmod(src, stat.S_IRUSR | stat.S_IWUSR) def test_mm_meta_data(self): doc = dedent( """ Title: Foo Bar Date: 2018-07-10 Summary: Line one Line two Tags: foo Tags: bar Doc body """ ) self.assertEqual( meta.get_data(doc), ( "Doc body", { 'title': 'Foo Bar', 'date': '2018-07-10', 'summary': 'Line one Line two', 'tags': 'foo bar', }, ), ) def test_mm_meta_data_blank_first_line(self): doc = '\nfoo: bar\nDoc body' self.assertEqual(meta.get_data(doc), (doc.lstrip(), {})) def test_yaml_meta_data(self): doc = dedent( """ --- Title: Foo Bar Date: 2018-07-10 Summary: Line one Line two Tags: - foo - bar --- Doc body """ ) self.assertEqual( meta.get_data(doc), ( "Doc body", { 'Title': 'Foo Bar', 'Date': datetime.date(2018, 7, 10), 'Summary': 'Line one Line two', 'Tags': ['foo', 'bar'], }, ), ) def test_yaml_meta_data_not_dict(self): doc = dedent( """ --- - List item --- Doc body """ ) self.assertEqual(meta.get_data(doc), (doc, {})) def test_yaml_meta_data_invalid(self): doc = dedent( """ --- foo: bar: baz --- Doc body """ ) self.assertEqual(meta.get_data(doc), (doc, {})) def test_no_meta_data(self): doc = dedent( """ Doc body """ ) self.assertEqual(meta.get_data(doc), (doc, {})) class ThemeUtilsTests(unittest.TestCase): def setUp(self): utils.get_themes.cache_clear() def test_get_themes(self): themes = utils.get_theme_names() self.assertIn('mkdocs', themes) self.assertIn('readthedocs', themes) @mock.patch('mkdocs.utils.entry_points', autospec=True) def test_get_theme_dir(self, mock_iter): path = 'some/path' theme = mock.Mock() theme.name = 'mkdocs2' theme.dist.name = 'mkdocs2' theme.load().__file__ = os.path.join(path, '__init__.py') mock_iter.return_value = [theme] self.assertEqual(utils.get_theme_dir(theme.name), os.path.abspath(path)) def test_get_theme_dir_error(self): with self.assertRaises(KeyError): utils.get_theme_dir('nonexistanttheme') @mock.patch('mkdocs.utils.entry_points', autospec=True) def test_get_theme_dir_importerror(self, mock_iter): theme = mock.Mock() theme.name = 'mkdocs2' theme.dist.name = 'mkdocs2' theme.load.side_effect = ImportError() mock_iter.return_value = [theme] with self.assertRaises(ImportError): utils.get_theme_dir(theme.name) @mock.patch('mkdocs.utils.entry_points', autospec=True) def test_get_themes_warning(self, mock_iter): theme1 = mock.Mock() theme1.name = 'mkdocs2' theme1.dist.name = 'mkdocs2' theme1.load().__file__ = "some/path1" theme2 = mock.Mock() theme2.name = 'mkdocs2' theme2.dist.name = 'mkdocs3' theme2.load().__file__ = "some/path2" mock_iter.return_value = [theme1, theme2] with self.assertLogs('mkdocs') as cm: theme_names = utils.get_theme_names() self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.utils:A theme named 'mkdocs2' is provided by the Python " "packages 'mkdocs3' and 'mkdocs2'. The one in 'mkdocs3' will be used.", ) self.assertCountEqual(theme_names, ['mkdocs2']) @mock.patch('mkdocs.utils.entry_points', autospec=True) def test_get_themes_error(self, mock_iter): theme1 = mock.Mock() theme1.name = 'mkdocs' theme1.dist.name = 'mkdocs' theme1.load().__file__ = "some/path1" theme2 = mock.Mock() theme2.name = 'mkdocs' theme2.dist.name = 'mkdocs2' theme2.load().__file__ = "some/path2" mock_iter.return_value = [theme1, theme2] with self.assertRaisesRegex( exceptions.ConfigurationError, "The theme 'mkdocs' is a builtin theme but the package 'mkdocs2' " "attempts to provide a theme with the same name.", ): utils.get_theme_names() class LogCounterTests(unittest.TestCase): def setUp(self): self.log = logging.getLogger('dummy') self.log.propagate = False self.log.setLevel(1) self.counter = utils.CountHandler() self.log.addHandler(self.counter) def tearDown(self): self.log.removeHandler(self.counter) def test_default_values(self): self.assertEqual(self.counter.get_counts(), []) def test_count_critical(self): self.assertEqual(self.counter.get_counts(), []) self.log.critical('msg') self.assertEqual(self.counter.get_counts(), [('CRITICAL', 1)]) def test_count_error(self): self.assertEqual(self.counter.get_counts(), []) self.log.error('msg') self.assertEqual(self.counter.get_counts(), [('ERROR', 1)]) def test_count_warning(self): self.assertEqual(self.counter.get_counts(), []) self.log.warning('msg') self.assertEqual(self.counter.get_counts(), [('WARNING', 1)]) def test_count_info(self): self.assertEqual(self.counter.get_counts(), []) self.log.info('msg') self.assertEqual(self.counter.get_counts(), [('INFO', 1)]) def test_count_debug(self): self.assertEqual(self.counter.get_counts(), []) self.log.debug('msg') self.assertEqual(self.counter.get_counts(), [('DEBUG', 1)]) def test_count_multiple(self): self.assertEqual(self.counter.get_counts(), []) self.log.warning('msg 1') self.assertEqual(self.counter.get_counts(), [('WARNING', 1)]) self.log.warning('msg 2') self.assertEqual(self.counter.get_counts(), [('WARNING', 2)]) self.log.debug('msg 3') self.assertEqual(self.counter.get_counts(), [('WARNING', 2), ('DEBUG', 1)]) self.log.error('mdg 4') self.assertEqual(self.counter.get_counts(), [('ERROR', 1), ('WARNING', 2), ('DEBUG', 1)]) def test_log_level(self): self.assertEqual(self.counter.get_counts(), []) self.counter.setLevel(logging.ERROR) self.log.error('counted') self.log.warning('not counted') self.log.info('not counted') self.assertEqual(self.counter.get_counts(), [('ERROR', 1)]) self.counter.setLevel(logging.WARNING) self.log.error('counted') self.log.warning('counted') self.log.info('not counted') self.assertEqual(self.counter.get_counts(), [('ERROR', 2), ('WARNING', 1)]) @dataclasses.dataclass class _Page: url: str mkdocs-1.6.1/mkdocs/tests/localization_tests.py0000664000175000017500000000512514664334534021606 0ustar carstencarsten#!/usr/bin/env python import unittest from unittest import mock from mkdocs.config.base import ValidationError from mkdocs.localization import install_translations, parse_locale from mkdocs.tests.base import tempdir class LocalizationTests(unittest.TestCase): def setUp(self): self.env = mock.Mock() def test_jinja_extension_installed(self): install_translations(self.env, parse_locale('en'), []) self.env.add_extension.assert_called_once_with('jinja2.ext.i18n') def test_valid_language(self): locale = parse_locale('en') self.assertEqual(locale.language, 'en') def test_valid_language_territory(self): locale = parse_locale('en_US') self.assertEqual(locale.language, 'en') self.assertEqual(locale.territory, 'US') self.assertEqual(str(locale), 'en_US') def test_unknown_locale(self): self.assertRaises(ValidationError, parse_locale, 'foo') def test_invalid_locale(self): self.assertRaises(ValidationError, parse_locale, '42') @tempdir() def test_no_translations_found(self, dir_without_translations): with self.assertLogs('mkdocs') as cm: install_translations(self.env, parse_locale('fr_CA'), [dir_without_translations]) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.localization:No translations could be found for the locale 'fr_CA'. " "Defaulting to English.", ) self.env.install_null_translations.assert_called_once() @tempdir() def test_translations_found(self, tdir): translations = mock.Mock() with mock.patch('mkdocs.localization.Translations.load', return_value=translations): install_translations(self.env, parse_locale('en'), [tdir]) self.env.install_gettext_translations.assert_called_once_with(translations) @tempdir() @tempdir() def test_merge_translations(self, custom_dir, theme_dir): custom_dir_translations = mock.Mock() theme_dir_translations = mock.Mock() def side_effet(*args, **kwargs): dirname = args[0] if dirname.startswith(custom_dir): return custom_dir_translations elif dirname.startswith(theme_dir): return theme_dir_translations else: self.fail() with mock.patch('mkdocs.localization.Translations.load', side_effect=side_effet): install_translations(self.env, parse_locale('en'), [custom_dir, theme_dir]) theme_dir_translations.merge.assert_called_once_with(custom_dir_translations) mkdocs-1.6.1/mkdocs/tests/theme_tests.py0000664000175000017500000001023414664334534020215 0ustar carstencarstenimport os import unittest from unittest import mock import mkdocs from mkdocs.localization import parse_locale from mkdocs.tests.base import tempdir from mkdocs.theme import Theme abs_path = os.path.abspath(os.path.dirname(__file__)) mkdocs_dir = os.path.abspath(os.path.dirname(mkdocs.__file__)) mkdocs_templates_dir = os.path.join(mkdocs_dir, 'templates') theme_dir = os.path.abspath(os.path.join(mkdocs_dir, 'themes')) class ThemeTests(unittest.TestCase): def test_simple_theme(self): theme = Theme(name='mkdocs') self.assertEqual( theme.dirs, [os.path.join(theme_dir, 'mkdocs'), mkdocs_templates_dir], ) self.assertEqual(theme.static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual( dict(theme), { 'name': 'mkdocs', 'color_mode': 'light', 'user_color_mode_toggle': False, 'locale': parse_locale('en'), 'include_search_page': False, 'search_index_only': False, 'analytics': {'gtag': None}, 'highlightjs': True, 'hljs_style': 'github', 'hljs_style_dark': 'github-dark', 'hljs_languages': [], 'navigation_depth': 2, 'nav_style': 'primary', 'shortcuts': {'help': 191, 'next': 78, 'previous': 80, 'search': 83}, }, ) @tempdir() def test_custom_dir(self, custom): theme = Theme(name='mkdocs', custom_dir=custom) self.assertEqual( theme.dirs, [ custom, os.path.join(theme_dir, 'mkdocs'), mkdocs_templates_dir, ], ) @tempdir() def test_custom_dir_only(self, custom): theme = Theme(name=None, custom_dir=custom) self.assertEqual( theme.dirs, [custom, mkdocs_templates_dir], ) def static_templates(self): theme = Theme(name='mkdocs', static_templates='foo.html') self.assertEqual( theme.static_templates, {'404.html', 'sitemap.xml', 'foo.html'}, ) def test_vars(self): theme = Theme(name='mkdocs', foo='bar', baz=True) self.assertEqual(theme['foo'], 'bar') self.assertEqual(theme['baz'], True) self.assertTrue('new' not in theme) with self.assertRaises(KeyError): theme['new'] theme['new'] = 42 self.assertTrue('new' in theme) self.assertEqual(theme['new'], 42) @mock.patch('yaml.load', return_value={}) def test_no_theme_config(self, m): theme = Theme(name='mkdocs') self.assertEqual(m.call_count, 1) self.assertEqual(theme.static_templates, {'sitemap.xml'}) def test_inherited_theme(self): m = mock.Mock( side_effect=[ {'extends': 'readthedocs', 'static_templates': ['child.html']}, {'static_templates': ['parent.html']}, ] ) with mock.patch('yaml.load', m) as m: theme = Theme(name='mkdocs') self.assertEqual(m.call_count, 2) self.assertEqual( theme.dirs, [ os.path.join(theme_dir, 'mkdocs'), os.path.join(theme_dir, 'readthedocs'), mkdocs_templates_dir, ], ) self.assertEqual(theme.static_templates, {'sitemap.xml', 'child.html', 'parent.html'}) def test_empty_config_file(self): # Test for themes with *empty* mkdocs_theme.yml. # See https://github.com/mkdocs/mkdocs/issues/3699 m = mock.Mock( # yaml.load returns "None" for an empty file side_effect=[None] ) with mock.patch('yaml.load', m) as m: theme = Theme(name='mkdocs') # Should only have the default name and locale __vars set in # Theme.__init__() self.assertEqual( dict(theme), { 'name': 'mkdocs', 'locale': parse_locale('en'), }, ) mkdocs-1.6.1/mkdocs/tests/gh_deploy_tests.py0000664000175000017500000001657014664334534021076 0ustar carstencarstenimport unittest from unittest import mock from ghp_import import GhpError # type: ignore from mkdocs import __version__ from mkdocs.commands import gh_deploy from mkdocs.exceptions import Abort from mkdocs.tests.base import load_config class TestGitHubDeploy(unittest.TestCase): @mock.patch('subprocess.Popen') def test_is_cwd_git_repo(self, mock_popeno): mock_popeno().wait.return_value = 0 self.assertTrue(gh_deploy._is_cwd_git_repo()) @mock.patch('subprocess.Popen') def test_is_cwd_not_git_repo(self, mock_popeno): mock_popeno().wait.return_value = 1 self.assertFalse(gh_deploy._is_cwd_git_repo()) @mock.patch('subprocess.Popen') def test_get_current_sha(self, mock_popeno): mock_popeno().communicate.return_value = (b'6d98394\n', b'') self.assertEqual(gh_deploy._get_current_sha('.'), '6d98394') @mock.patch('subprocess.Popen') def test_get_remote_url_ssh(self, mock_popeno): mock_popeno().communicate.return_value = ( b'git@github.com:mkdocs/mkdocs.git\n', b'', ) expected = ('git@', 'mkdocs/mkdocs.git') self.assertEqual(expected, gh_deploy._get_remote_url('origin')) @mock.patch('subprocess.Popen') def test_get_remote_url_http(self, mock_popeno): mock_popeno().communicate.return_value = ( b'https://github.com/mkdocs/mkdocs.git\n', b'', ) expected = ('https://', 'mkdocs/mkdocs.git') self.assertEqual(expected, gh_deploy._get_remote_url('origin')) @mock.patch('subprocess.Popen') def test_get_remote_url_enterprise(self, mock_popeno): mock_popeno().communicate.return_value = ( b'https://notgh.com/mkdocs/mkdocs.git\n', b'', ) expected = (None, None) self.assertEqual(expected, gh_deploy._get_remote_url('origin')) @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', mock.Mock(return_value=True)) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', mock.Mock(return_value='shashas')) @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', mock.Mock(return_value=(None, None))) @mock.patch('mkdocs.commands.gh_deploy._check_version', mock.Mock()) @mock.patch('ghp_import.ghp_import', mock.Mock()) def test_deploy(self): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config) @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', mock.Mock(return_value=True)) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', mock.Mock(return_value='shashas')) @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', mock.Mock(return_value=(None, None))) @mock.patch('mkdocs.commands.gh_deploy._check_version', mock.Mock()) @mock.patch('ghp_import.ghp_import', mock.Mock()) @mock.patch('os.path.isfile', mock.Mock(return_value=False)) def test_deploy_no_cname(self): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config) @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', mock.Mock(return_value=True)) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', mock.Mock(return_value='shashas')) @mock.patch( 'mkdocs.commands.gh_deploy._get_remote_url', mock.Mock(return_value=('git@', 'mkdocs/mkdocs.git')), ) @mock.patch('mkdocs.commands.gh_deploy._check_version', mock.Mock()) @mock.patch('ghp_import.ghp_import', mock.Mock()) def test_deploy_hostname(self): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config) @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', mock.Mock(return_value=True)) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', mock.Mock(return_value='shashas')) @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', mock.Mock(return_value=(None, None))) @mock.patch('mkdocs.commands.gh_deploy._check_version') @mock.patch('ghp_import.ghp_import', mock.Mock()) def test_deploy_ignore_version_default(self, check_version): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config) check_version.assert_called_once() @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', mock.Mock(return_value=True)) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', mock.Mock(return_value='shashas')) @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', mock.Mock(return_value=(None, None))) @mock.patch('mkdocs.commands.gh_deploy._check_version') @mock.patch('ghp_import.ghp_import', mock.Mock()) def test_deploy_ignore_version(self, check_version): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config, ignore_version=True) check_version.assert_not_called() @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', mock.Mock(return_value=True)) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', mock.Mock(return_value='shashas')) @mock.patch('mkdocs.commands.gh_deploy._check_version', mock.Mock()) @mock.patch('ghp_import.ghp_import', mock.Mock(side_effect=GhpError('TestError123'))) def test_deploy_error(self): config = load_config( remote_branch='test', ) with self.assertLogs('mkdocs', level='ERROR') as cm: with self.assertRaises(Abort): gh_deploy.gh_deploy(config) self.assertEqual( cm.output, [ 'ERROR:mkdocs.commands.gh_deploy:Failed to deploy to GitHub with error: \n' 'TestError123' ], ) class TestGitHubDeployLogs(unittest.TestCase): @mock.patch('subprocess.Popen') def test_mkdocs_newer(self, mock_popeno): mock_popeno().communicate.return_value = ( b'Deployed 12345678 with MkDocs version: 0.1.2\n', b'', ) with self.assertLogs('mkdocs') as cm: gh_deploy._check_version('gh-pages') self.assertEqual( '\n'.join(cm.output), f'INFO:mkdocs.commands.gh_deploy:Previous deployment was done with MkDocs ' f'version 0.1.2; you are deploying with a newer version ({__version__})', ) @mock.patch('subprocess.Popen') def test_mkdocs_older(self, mock_popeno): mock_popeno().communicate.return_value = ( b'Deployed 12345678 with MkDocs version: 10.1.2\n', b'', ) with self.assertLogs('mkdocs', level='ERROR') as cm: with self.assertRaises(Abort): gh_deploy._check_version('gh-pages') self.assertEqual( '\n'.join(cm.output), f'ERROR:mkdocs.commands.gh_deploy:Deployment terminated: Previous deployment was made with ' f'MkDocs version 10.1.2; you are attempting to deploy with an older version ({__version__}).' f' Use --ignore-version to deploy anyway.', ) @mock.patch('subprocess.Popen') def test_version_unknown(self, mock_popeno): mock_popeno().communicate.return_value = (b'No version specified\n', b'') with self.assertLogs('mkdocs') as cm: gh_deploy._check_version('gh-pages') self.assertEqual( '\n'.join(cm.output), 'WARNING:mkdocs.commands.gh_deploy:Version check skipped: No version specified in previous deployment.', ) mkdocs-1.6.1/mkdocs/tests/build_tests.py0000664000175000017500000011145014664334534020214 0ustar carstencarsten#!/usr/bin/env python from __future__ import annotations import contextlib import io import os.path import re import textwrap import unittest from pathlib import Path from typing import TYPE_CHECKING from unittest import mock import markdown.preprocessors from mkdocs.commands import build from mkdocs.config import base from mkdocs.exceptions import PluginError from mkdocs.structure.files import File, Files from mkdocs.structure.nav import get_navigation from mkdocs.structure.pages import Page from mkdocs.tests.base import PathAssertionMixin, load_config, tempdir from mkdocs.utils import meta if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig def build_page(title, path, config, md_src=''): """Helper which returns a Page object.""" files = Files([File(path, config.docs_dir, config.site_dir, config.use_directory_urls)]) page = Page(title, list(files)[0], config) # Fake page.read_source() page.markdown, page.meta = meta.get_data(md_src) return page, files class BuildTests(PathAssertionMixin, unittest.TestCase): def _get_env_with_null_translations(self, config): env = config.theme.get_env() env.add_extension('jinja2.ext.i18n') env.install_null_translations() return env # Test build.get_context def test_context_base_url_homepage(self): nav_cfg = [ {'Home': 'index.md'}, ] cfg = load_config(nav=nav_cfg, use_directory_urls=False) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[0]) self.assertEqual(context['base_url'], '.') def test_context_base_url_homepage_use_directory_urls(self): nav_cfg = [ {'Home': 'index.md'}, ] cfg = load_config(nav=nav_cfg) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[0]) self.assertEqual(context['base_url'], '.') def test_context_base_url_nested_page(self): nav_cfg = [ {'Home': 'index.md'}, {'Nested': 'foo/bar.md'}, ] cfg = load_config(nav=nav_cfg, use_directory_urls=False) fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('foo/bar.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[1]) self.assertEqual(context['base_url'], '..') def test_context_base_url_nested_page_use_directory_urls(self): nav_cfg = [ {'Home': 'index.md'}, {'Nested': 'foo/bar.md'}, ] cfg = load_config(nav=nav_cfg) fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('foo/bar.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[1]) self.assertEqual(context['base_url'], '../..') def test_context_base_url_relative_no_page(self): cfg = load_config(use_directory_urls=False) context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='..') self.assertEqual(context['base_url'], '..') def test_context_base_url_relative_no_page_use_directory_urls(self): cfg = load_config() context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='..') self.assertEqual(context['base_url'], '..') def test_context_base_url_absolute_no_page(self): cfg = load_config(use_directory_urls=False) context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/') self.assertEqual(context['base_url'], '/') def test_context_base_url__absolute_no_page_use_directory_urls(self): cfg = load_config() context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/') self.assertEqual(context['base_url'], '/') def test_context_base_url_absolute_nested_no_page(self): cfg = load_config(use_directory_urls=False) context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/foo/') self.assertEqual(context['base_url'], '/foo/') def test_context_base_url__absolute_nested_no_page_use_directory_urls(self): cfg = load_config() context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/foo/') self.assertEqual(context['base_url'], '/foo/') def test_context_extra_css_js_from_homepage(self): nav_cfg = [ {'Home': 'index.md'}, ] cfg = load_config( nav=nav_cfg, extra_css=['style.css'], extra_javascript=['script.js'], use_directory_urls=False, ) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[0]) self.assertEqual(context['extra_css'], ['style.css']) self.assertEqual(context['extra_javascript'], ['script.js']) def test_context_extra_css_js_from_nested_page(self): nav_cfg = [ {'Home': 'index.md'}, {'Nested': 'foo/bar.md'}, ] cfg = load_config( nav=nav_cfg, extra_css=['style.css'], extra_javascript=['script.js'], use_directory_urls=False, ) fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('foo/bar.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[1]) self.assertEqual(context['extra_css'], ['../style.css']) self.assertEqual(context['extra_javascript'], ['../script.js']) def test_context_extra_css_js_from_nested_page_use_directory_urls(self): nav_cfg = [ {'Home': 'index.md'}, {'Nested': 'foo/bar.md'}, ] cfg = load_config( nav=nav_cfg, extra_css=['style.css'], extra_javascript=['script.js'], ) fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('foo/bar.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[1]) self.assertEqual(context['extra_css'], ['../../style.css']) self.assertEqual(context['extra_javascript'], ['../../script.js']) # TODO: This shouldn't pass on Linux # @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_context_extra_css_path_warning(self): nav_cfg = [ {'Home': 'index.md'}, ] cfg = load_config( nav=nav_cfg, extra_css=['assets\\style.css'], use_directory_urls=False, ) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) with self.assertLogs('mkdocs') as cm: context = build.get_context(nav, files, cfg, nav.pages[0]) self.assertEqual(context['extra_css'], ['assets/style.css']) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.utils:Path 'assets\\style.css' uses OS-specific separator '\\'. " "That will be unsupported in a future release. Please change it to '/'.", ) def test_context_extra_css_js_no_page(self): cfg = load_config(extra_css=['style.css'], extra_javascript=['script.js']) context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='..') self.assertEqual(context['extra_css'], ['../style.css']) self.assertEqual(context['extra_javascript'], ['../script.js']) def test_extra_context(self): cfg = load_config(extra={'a': 1}) context = build.get_context(mock.Mock(), mock.Mock(), cfg) self.assertEqual(context['config']['extra']['a'], 1) # Test build._build_theme_template @mock.patch('mkdocs.utils.write_file') @mock.patch('mkdocs.commands.build._build_template', return_value='some content') def test_build_theme_template(self, mock_build_template, mock_write_file): cfg = load_config() env = cfg.theme.get_env() build._build_theme_template('main.html', env, Files([]), cfg, mock.Mock()) mock_write_file.assert_called_once() mock_build_template.assert_called_once() @mock.patch('mkdocs.utils.write_file') @mock.patch('mkdocs.commands.build._build_template', return_value='some content') @mock.patch('gzip.GzipFile') @tempdir() def test_build_sitemap_template( self, site_dir, mock_gzip_gzipfile, mock_build_template, mock_write_file ): cfg = load_config(site_dir=site_dir) env = cfg.theme.get_env() build._build_theme_template('sitemap.xml', env, Files([]), cfg, mock.Mock()) mock_write_file.assert_called_once() mock_build_template.assert_called_once() mock_gzip_gzipfile.assert_called_once() @mock.patch('mkdocs.utils.write_file') @mock.patch('mkdocs.commands.build._build_template', return_value='') def test_skip_missing_theme_template(self, mock_build_template, mock_write_file): cfg = load_config() env = cfg.theme.get_env() with self.assertLogs('mkdocs') as cm: build._build_theme_template('missing.html', env, Files([]), cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.commands.build:Template skipped: 'missing.html' not found in theme directories.", ) mock_write_file.assert_not_called() mock_build_template.assert_not_called() @mock.patch('mkdocs.utils.write_file') @mock.patch('mkdocs.commands.build._build_template', return_value='') def test_skip_theme_template_empty_output(self, mock_build_template, mock_write_file): cfg = load_config() env = cfg.theme.get_env() with self.assertLogs('mkdocs') as cm: build._build_theme_template('main.html', env, Files([]), cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "INFO:mkdocs.commands.build:Template skipped: 'main.html' generated empty output.", ) mock_write_file.assert_not_called() mock_build_template.assert_called_once() # Test build._build_extra_template @tempdir() @mock.patch('mkdocs.structure.files.open', mock.mock_open(read_data='template content')) def test_build_extra_template(self, site_dir): cfg = load_config(site_dir=site_dir) fs = [File('foo.html', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) build._build_extra_template('foo.html', files, cfg, mock.Mock()) @mock.patch('mkdocs.structure.files.open', mock.mock_open(read_data='template content')) def test_skip_missing_extra_template(self): cfg = load_config() fs = [File('foo.html', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs') as cm: build._build_extra_template('missing.html', files, cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.commands.build:Template skipped: 'missing.html' not found in docs_dir.", ) @mock.patch('mkdocs.structure.files.open', mock.Mock(side_effect=OSError('Error message.'))) def test_skip_ioerror_extra_template(self): cfg = load_config() fs = [File('foo.html', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs') as cm: build._build_extra_template('foo.html', files, cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.commands.build:Error reading template 'foo.html': Error message.", ) @mock.patch('mkdocs.structure.files.open', mock.mock_open(read_data='')) def test_skip_extra_template_empty_output(self): cfg = load_config() fs = [File('foo.html', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs') as cm: build._build_extra_template('foo.html', files, cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "INFO:mkdocs.commands.build:Template skipped: 'foo.html' generated empty output.", ) # Test build._populate_page @tempdir(files={'index.md': 'page content'}) def test_populate_page(self, docs_dir): cfg = load_config(docs_dir=docs_dir) file = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) build._populate_page(page, cfg, Files([file])) self.assertEqual(page.content, '

page content

') @tempdir(files={'testing.html': '

page content

'}) def test_populate_page_dirty_modified(self, site_dir): cfg = load_config(site_dir=site_dir) file = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) build._populate_page(page, cfg, Files([file]), dirty=True) self.assertTrue(page.markdown.startswith('# Welcome to MkDocs')) self.assertTrue( page.content.startswith('

Welcome to MkDocs

') ) @tempdir(files={'index.md': 'page content'}) @tempdir(files={'index.html': '

page content

'}) def test_populate_page_dirty_not_modified(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir) file = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) build._populate_page(page, cfg, Files([file]), dirty=True) # Content is empty as file read was skipped self.assertEqual(page.markdown, None) self.assertEqual(page.content, None) @tempdir(files={'index.md': 'new page content'}) @mock.patch('mkdocs.structure.files.open', side_effect=OSError('Error message.')) def test_populate_page_read_error(self, docs_dir, mock_open): cfg = load_config(docs_dir=docs_dir) file = File('missing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) with self.assertLogs('mkdocs') as cm: with self.assertRaises(OSError): build._populate_page(page, cfg, Files([file])) self.assertEqual( cm.output, [ 'ERROR:mkdocs.structure.pages:File not found: missing.md', "ERROR:mkdocs.commands.build:Error reading page 'missing.md': Error message.", ], ) mock_open.assert_called_once() @tempdir(files={'index.md': 'page content'}) def test_populate_page_read_plugin_error(self, docs_dir): def on_page_markdown(*args, **kwargs): raise PluginError('Error message.') cfg = load_config(docs_dir=docs_dir) cfg.plugins.events['page_markdown'].append(on_page_markdown) file = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) with self.assertLogs('mkdocs') as cm: with self.assertRaises(PluginError): build._populate_page(page, cfg, Files([file])) self.assertEqual( '\n'.join(cm.output), "ERROR:mkdocs.commands.build:Error reading page 'index.md':", ) # Test build._build_page @tempdir() def test_build_page(self, site_dir): cfg = load_config(site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'page content' page.content = '

page content

' build._build_page(page, cfg, files, nav, self._get_env_with_null_translations(cfg)) self.assertPathIsFile(site_dir, 'index.html') @tempdir() @mock.patch('jinja2.environment.Template.render', return_value='') def test_build_page_empty(self, site_dir, render_mock): cfg = load_config(site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) with self.assertLogs('mkdocs') as cm: build._build_page( files.documentation_pages()[0].page, cfg, files, nav, cfg.theme.get_env() ) self.assertEqual( '\n'.join(cm.output), "INFO:mkdocs.commands.build:Page skipped: 'index.md'. Generated empty output.", ) self.assertPathNotExists(site_dir, 'index.html') render_mock.assert_called_once() @tempdir(files={'index.md': 'page content'}) @tempdir(files={'index.html': '

page content

'}) @mock.patch('mkdocs.utils.write_file') def test_build_page_dirty_modified(self, site_dir, docs_dir, mock_write_file): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'new page content' page.content = '

new page content

' build._build_page( page, cfg, files, nav, self._get_env_with_null_translations(cfg), dirty=True ) mock_write_file.assert_not_called() @tempdir(files={'testing.html': '

page content

'}) @mock.patch('mkdocs.utils.write_file') def test_build_page_dirty_not_modified(self, site_dir, mock_write_file): cfg = load_config(site_dir=site_dir, nav=['testing.md']) fs = [File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'page content' page.content = '

page content

' build._build_page( page, cfg, files, nav, self._get_env_with_null_translations(cfg), dirty=True ) mock_write_file.assert_called_once() @tempdir() def test_build_page_custom_template(self, site_dir): cfg = load_config(site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.meta = {'template': '404.html'} page.markdown = 'page content' page.content = '

page content

' build._build_page(page, cfg, files, nav, self._get_env_with_null_translations(cfg)) self.assertPathIsFile(site_dir, 'index.html') @tempdir() @mock.patch('mkdocs.utils.write_file', side_effect=OSError('Error message.')) def test_build_page_error(self, site_dir, mock_write_file): cfg = load_config(site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'page content' page.content = '

page content

' with self.assertLogs('mkdocs') as cm: with self.assertRaises(OSError): build._build_page(page, cfg, files, nav, self._get_env_with_null_translations(cfg)) self.assertEqual( '\n'.join(cm.output), "ERROR:mkdocs.commands.build:Error building page 'index.md': Error message.", ) mock_write_file.assert_called_once() @tempdir() def test_build_page_plugin_error(self, site_dir): def on_page_context(*args, **kwargs): raise PluginError('Error message.') cfg = load_config(site_dir=site_dir, nav=['index.md']) cfg.plugins.events['page_context'].append(on_page_context) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'page content' page.content = '

page content

' with self.assertLogs('mkdocs') as cm: with self.assertRaises(PluginError): build._build_page(page, cfg, files, nav, cfg.theme.get_env()) self.assertEqual( '\n'.join(cm.output), "ERROR:mkdocs.commands.build:Error building page 'index.md':", ) # Test build.build @tempdir( files={ 'index.md': 'page content', 'empty.md': '', 'img.jpg': '', 'static.html': 'content', '.hidden': 'content', '.git/hidden': 'content', } ) @tempdir() def test_copying_media(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir) build.build(cfg) # Verify that only non-empty md file (converted to html), static HTML file and image are copied. self.assertPathIsFile(site_dir, 'index.html') self.assertPathIsFile(site_dir, 'img.jpg') self.assertPathIsFile(site_dir, 'static.html') self.assertPathNotExists(site_dir, 'empty.md') self.assertPathNotExists(site_dir, '.hidden') self.assertPathNotExists(site_dir, '.git/hidden') @tempdir(files={'index.md': 'page content'}) @tempdir() def test_copy_theme_files(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir) build.build(cfg) # Verify only theme media are copied, not templates, Python or localization files. self.assertPathIsFile(site_dir, 'index.html') self.assertPathIsFile(site_dir, '404.html') self.assertPathIsDir(site_dir, 'js') self.assertPathIsDir(site_dir, 'css') self.assertPathIsDir(site_dir, 'img') self.assertPathIsDir(site_dir, 'webfonts') self.assertPathNotExists(site_dir, '__init__.py') self.assertPathNotExists(site_dir, '__init__.pyc') self.assertPathNotExists(site_dir, 'base.html') self.assertPathNotExists(site_dir, 'content.html') self.assertPathNotExists(site_dir, 'main.html') self.assertPathNotExists(site_dir, 'locales') @contextlib.contextmanager def _assert_build_logs(self, expected): with self.assertLogs('mkdocs') as cm: yield msgs = [f'{r.levelname}:{r.message}' for r in cm.records] if msgs and msgs[0].startswith('INFO:Cleaning site directory'): del msgs[0] if msgs and msgs[0].startswith('INFO:Building documentation to directory'): del msgs[0] if msgs and msgs[-1].startswith('INFO:Documentation built'): del msgs[-1] self.assertEqual('\n'.join(msgs), textwrap.dedent(expected).strip('\n')) @tempdir( files={ 'test/foo.md': 'page1 content, [bar](bar.md)', 'test/bar.md': 'page2 content, [baz](baz.md), [nonexistent](nonexistent.md)', 'test/baz.md': 'page3 content, [foo](foo.md)', '.zoo.md': 'page4 content', } ) @tempdir() def test_draft_pages_with_invalid_links(self, site_dir, docs_dir): cfg = load_config( docs_dir=docs_dir, site_dir=site_dir, use_directory_urls=False, draft_docs='ba*.md', ) with self.subTest(serve_url=None): expected_logs = ''' INFO:Doc file 'test/foo.md' contains a link to 'test/bar.md' which is excluded from the built site. ''' with self._assert_build_logs(expected_logs): build.build(cfg) self.assertPathIsFile(site_dir, 'test', 'foo.html') self.assertPathNotExists(site_dir, 'test', 'baz.html') self.assertPathNotExists(site_dir, '.zoo.html') serve_url = 'http://localhost:123/documentation/' with self.subTest(serve_url=serve_url): expected_logs = ''' INFO:Doc file 'test/bar.md' contains a link 'nonexistent.md', but the target 'test/nonexistent.md' is not found among documentation files. INFO:Doc file 'test/foo.md' contains a link to 'test/bar.md' which is excluded from the built site. INFO:The following pages are being built only for the preview but will be excluded from `mkdocs build` per `draft_docs` config: - http://localhost:123/documentation/test/bar.html - http://localhost:123/documentation/test/baz.html ''' with self._assert_build_logs(expected_logs): build.build(cfg, serve_url=serve_url) foo_path = Path(site_dir, 'test', 'foo.html') self.assertTrue(foo_path.is_file()) self.assertNotIn('DRAFT', foo_path.read_text()) baz_path = Path(site_dir, 'test', 'baz.html') self.assertPathIsFile(baz_path) self.assertIn('DRAFT', baz_path.read_text()) self.assertPathNotExists(site_dir, '.zoo.html') @tempdir( files={ 'foo/README.md': 'page1 content', 'foo/index.md': 'page2 content', } ) @tempdir() def test_conflicting_readme_and_index(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir, use_directory_urls=False) for serve_url in None, 'http://localhost:123/': with self.subTest(serve_url=serve_url): expected_logs = ''' WARNING:Excluding 'foo/README.md' from the site because it conflicts with 'foo/index.md'. ''' with self._assert_build_logs(expected_logs): build.build(cfg, serve_url=serve_url) index_path = Path(site_dir, 'foo', 'index.html') self.assertPathIsFile(index_path) self.assertRegex(index_path.read_text(), r'page2 content') @tempdir( files={ 'foo/README.md': 'page1 content', 'foo/index.md': 'page2 content', } ) @tempdir() def test_exclude_readme_and_index(self, site_dir, docs_dir): cfg = load_config( docs_dir=docs_dir, site_dir=site_dir, use_directory_urls=False, exclude_docs='index.md' ) for serve_url in None, 'http://localhost:123/': with self.subTest(serve_url=serve_url): with self._assert_build_logs(''): build.build(cfg, serve_url=serve_url) index_path = Path(site_dir, 'foo', 'index.html') self.assertPathIsFile(index_path) self.assertRegex(index_path.read_text(), r'page1 content') @tempdir( files={ 'test/foo.md': '## page1 heading\n\n[bar](bar.md#page1-heading)', 'test/bar.md': '## page2 heading\n\n[aaa](#a)', } ) @tempdir() def test_anchor_warning(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir, validation={'anchors': 'warn'}) expected_logs = ''' WARNING:Doc file 'test/bar.md' contains a link '#a', but there is no such anchor on this page. WARNING:Doc file 'test/foo.md' contains a link 'bar.md#page1-heading', but the doc 'test/bar.md' does not contain an anchor '#page1-heading'. ''' with self._assert_build_logs(expected_logs): build.build(cfg) @tempdir( files={ 'test/foo.md': '[bar](bar.md#heading1)', 'test/bar.md': '## heading1', } ) @tempdir() def test_anchor_no_warning(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir, validation={'anchors': 'warn'}) build.build(cfg) @tempdir( files={ 'test/foo.md': '[bar](bar.md#heading2)', 'test/bar.md': '## heading1\n\nhi', } ) @tempdir() def test_anchor_no_warning_with_html(self, site_dir, docs_dir): cfg = load_config( docs_dir=docs_dir, site_dir=site_dir, validation={'anchors': 'warn'}, markdown_extensions=['md_in_html'], ) build.build(cfg) @tempdir( files={ 'test/foo.md': '[bar1](bar.md?test#heading1), [bar2](bar.md?test#headingno), [bar3](bar.md?test), [self4](?test), [self5](?test#hi)', 'test/bar.md': '## heading1', } ) @tempdir() def test_anchor_warning_and_query(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir, validation={'anchors': 'info'}) expected_logs = ''' INFO:Doc file 'test/foo.md' contains a link 'bar.md?test#headingno', but the doc 'test/bar.md' does not contain an anchor '#headingno'. INFO:Doc file 'test/foo.md' contains a link '?test#hi', but there is no such anchor on this page. ''' with self._assert_build_logs(expected_logs): build.build(cfg) @tempdir( files={ 'test/foo.md': 'test[^1]\n\n[^1]: footnote1\n[^2]: footnote2', } ) @tempdir() def test_anchor_warning_for_footnote(self, site_dir, docs_dir): cfg = load_config( docs_dir=docs_dir, site_dir=site_dir, validation={'anchors': 'info'}, markdown_extensions=['footnotes'], ) expected_logs = ''' INFO:Doc file 'test/foo.md' contains a link '#fnref:2', but there is no such anchor on this page. This seems to be a footnote that is never referenced. ''' with self._assert_build_logs(expected_logs): build.build(cfg) @tempdir( files={ 'foo.md': 'page1 content', 'bar.md': 'page2 content', } ) @tempdir() @tempdir() def test_plugins_adding_files_and_interacting(self, tmp_dir, site_dir, docs_dir): def on_files_1(files: Files, config: MkDocsConfig) -> Files: # Plugin 1 generates a file. Path(tmp_dir, 'SUMMARY.md').write_text('foo.md\nbar.md\n') files.append(File('SUMMARY.md', tmp_dir, config.site_dir, config.use_directory_urls)) return files def on_files_2(files: Files, config: MkDocsConfig) -> None: # Plugin 2 reads that file and uses it to configure the nav. f = files.get_file_from_path('SUMMARY.md') assert f is not None config.nav = f.content_string.splitlines() for serve_url in None, 'http://localhost:123/': for exclude in 'full', 'drafts', 'nav', None: with self.subTest(serve_url=serve_url, exclude=exclude): cfg = load_config( docs_dir=docs_dir, site_dir=site_dir, use_directory_urls=False, exclude_docs='SUMMARY.md' if exclude == 'full' else '', draft_docs='SUMMARY.md' if exclude == 'drafts' else '', not_in_nav='SUMMARY.md' if exclude == 'nav' else '', ) cfg.plugins.events['files'] += [on_files_1, on_files_2] expected_logs = '' if exclude is None: expected_logs = ''' INFO:The following pages exist in the docs directory, but are not included in the "nav" configuration: - SUMMARY.md ''' if exclude == 'drafts' and serve_url: expected_logs = ''' INFO:The following pages are being built only for the preview but will be excluded from `mkdocs build` per `draft_docs` config: - http://localhost:123/SUMMARY.html ''' with self._assert_build_logs(expected_logs): build.build(cfg, serve_url=serve_url) foo_path = Path(site_dir, 'foo.html') self.assertPathIsFile(foo_path) self.assertRegex( foo_path.read_text(), r'href="foo.html"[\s\S]+href="bar.html"', # Nav order is respected ) summary_path = Path(site_dir, 'SUMMARY.html') if exclude == 'full': self.assertPathNotExists(summary_path) elif exclude == 'drafts' and not serve_url: self.assertPathNotExists(summary_path) else: self.assertPathExists(summary_path) @tempdir( files={ 'README.md': 'CONFIG_README\n', 'docs/foo.md': 'ROOT_FOO\n', 'docs/test/bar.md': 'TEST_BAR\n', 'docs/main/foo.md': 'MAIN_FOO\n', 'docs/main/main.md': ( '--8<-- "README.md"\n\n' '--8<-- "foo.md"\n\n' '--8<-- "test/bar.md"\n\n' '--8<-- "../foo.md"\n\n' ), } ) def test_markdown_extension_with_relative(self, config_dir): for base_path, expected in { '!relative': '''

(Failed to read 'README.md')

MAIN_FOO

(Failed to read 'test/bar.md')

ROOT_FOO

''', '!relative $docs_dir': '''

(Failed to read 'README.md')

ROOT_FOO

TEST_BAR

(Failed to read '../foo.md')

''', '!relative $config_dir/docs': '''

(Failed to read 'README.md')

ROOT_FOO

TEST_BAR

(Failed to read '../foo.md')

''', '!relative $config_dir': '''

CONFIG_README

(Failed to read 'foo.md')

(Failed to read 'test/bar.md')

(Failed to read '../foo.md')

''', }.items(): with self.subTest(base_path=base_path): cfg = f''' site_name: test use_directory_urls: false markdown_extensions: - mkdocs.tests.build_tests: base_path: {base_path} ''' config = base.load_config( io.StringIO(cfg), config_file_path=os.path.join(config_dir, 'mkdocs.yml') ) with self._assert_build_logs(''): build.build(config) main_path = Path(config_dir, 'site', 'main', 'main.html') self.assertTrue(main_path.is_file()) self.assertIn(textwrap.dedent(expected), main_path.read_text()) # Test build.site_directory_contains_stale_files @tempdir(files=['index.html']) def test_site_dir_contains_stale_files(self, site_dir): self.assertTrue(build.site_directory_contains_stale_files(site_dir)) @tempdir() def test_not_site_dir_contains_stale_files(self, site_dir): self.assertFalse(build.site_directory_contains_stale_files(site_dir)) class _TestPreprocessor(markdown.preprocessors.Preprocessor): def __init__(self, base_path: str) -> None: self.base_path = base_path def run(self, lines: list[str]) -> list[str]: for i, line in enumerate(lines): if m := re.search(r'^--8<-- "(.+)"$', line): try: lines[i] = Path(self.base_path, m[1]).read_text() except OSError: lines[i] = f"(Failed to read {m[1]!r})\n" return lines class _TestExtension(markdown.extensions.Extension): def __init__(self, base_path: str) -> None: self.base_path = str(base_path) def extendMarkdown(self, md: markdown.Markdown) -> None: md.preprocessors.register(_TestPreprocessor(self.base_path), "mkdocs_test", priority=32) makeExtension = _TestExtension mkdocs-1.6.1/mkdocs/livereload/0000775000175000017500000000000014664334534016303 5ustar carstencarstenmkdocs-1.6.1/mkdocs/livereload/__init__.py0000664000175000017500000003233214664334534020417 0ustar carstencarstenfrom __future__ import annotations import functools import io import ipaddress import logging import mimetypes import os import os.path import pathlib import posixpath import re import socket import socketserver import string import sys import threading import time import traceback import urllib.parse import webbrowser import wsgiref.simple_server import wsgiref.util from typing import Any, BinaryIO, Callable, Iterable import watchdog.events import watchdog.observers.polling _SCRIPT_TEMPLATE_STR = """ var livereload = function(epoch, requestId) { var req, timeout; var poll = function() { req = new XMLHttpRequest(); req.onloadend = function() { if (parseFloat(this.responseText) > epoch) { location.reload(); } else { timeout = setTimeout(poll, this.status === 200 ? 0 : 3000); } }; req.open("GET", "/livereload/" + epoch + "/" + requestId); req.send(); } var stop = function() { if (req) { req.abort(); } if (timeout) { clearTimeout(timeout); } req = timeout = undefined; }; window.addEventListener("load", function() { if (document.visibilityState === "visible") { poll(); } }); window.addEventListener("visibilitychange", function() { if (document.visibilityState === "visible") { poll(); } else { stop(); } }); window.addEventListener("beforeunload", stop); console.log('Enabled live reload'); } livereload(${epoch}, ${request_id}); """ _SCRIPT_TEMPLATE = string.Template(_SCRIPT_TEMPLATE_STR) class _LoggerAdapter(logging.LoggerAdapter): def process(self, msg: str, kwargs: dict) -> tuple[str, dict]: # type: ignore[override] return time.strftime("[%H:%M:%S] ") + msg, kwargs log = _LoggerAdapter(logging.getLogger(__name__), {}) def _normalize_mount_path(mount_path: str) -> str: """Ensure the mount path starts and ends with a slash.""" return ("/" + mount_path.lstrip("/")).rstrip("/") + "/" def _serve_url(host: str, port: int, path: str) -> str: return f"http://{host}:{port}{_normalize_mount_path(path)}" class LiveReloadServer(socketserver.ThreadingMixIn, wsgiref.simple_server.WSGIServer): daemon_threads = True poll_response_timeout = 60 def __init__( self, builder: Callable[[], None], host: str, port: int, root: str, mount_path: str = "/", polling_interval: float = 0.5, shutdown_delay: float = 0.25, ) -> None: self.builder = builder try: if isinstance(ipaddress.ip_address(host), ipaddress.IPv6Address): self.address_family = socket.AF_INET6 except Exception: pass self.root = os.path.abspath(root) self.mount_path = _normalize_mount_path(mount_path) self.url = _serve_url(host, port, mount_path) self.build_delay = 0.1 self.shutdown_delay = shutdown_delay # To allow custom error pages. self.error_handler: Callable[[int], bytes | None] = lambda code: None super().__init__((host, port), _Handler, bind_and_activate=False) self.set_app(self.serve_request) self._wanted_epoch = _timestamp() # The version of the site that started building. self._visible_epoch = self._wanted_epoch # Latest fully built version of the site. self._epoch_cond = threading.Condition() # Must be held when accessing _visible_epoch. self._want_rebuild: bool = False self._rebuild_cond = threading.Condition() # Must be held when accessing _want_rebuild. self._shutdown = False self.serve_thread = threading.Thread(target=lambda: self.serve_forever(shutdown_delay)) self.observer = watchdog.observers.polling.PollingObserver(timeout=polling_interval) self._watched_paths: dict[str, int] = {} self._watch_refs: dict[str, Any] = {} def watch(self, path: str, func: None = None, *, recursive: bool = True) -> None: """Add the 'path' to watched paths, call the function and reload when any file changes under it.""" path = os.path.abspath(path) if not (func is None or func is self.builder): # type: ignore[unreachable] raise TypeError("Plugins can no longer pass a 'func' parameter to watch().") if path in self._watched_paths: self._watched_paths[path] += 1 return self._watched_paths[path] = 1 def callback(event): if event.is_directory: return log.debug(str(event)) with self._rebuild_cond: self._want_rebuild = True self._rebuild_cond.notify_all() handler = watchdog.events.FileSystemEventHandler() handler.on_any_event = callback # type: ignore[method-assign] log.debug(f"Watching '{path}'") self._watch_refs[path] = self.observer.schedule(handler, path, recursive=recursive) def unwatch(self, path: str) -> None: """Stop watching file changes for path. Raises if there was no corresponding `watch` call.""" path = os.path.abspath(path) self._watched_paths[path] -= 1 if self._watched_paths[path] <= 0: self._watched_paths.pop(path) self.observer.unschedule(self._watch_refs.pop(path)) def serve(self, *, open_in_browser=False): self.server_bind() self.server_activate() if self._watched_paths: self.observer.start() paths_str = ", ".join(f"'{_try_relativize_path(path)}'" for path in self._watched_paths) log.info(f"Watching paths for changes: {paths_str}") if open_in_browser: log.info(f"Serving on {self.url} and opening it in a browser") else: log.info(f"Serving on {self.url}") self.serve_thread.start() if open_in_browser: webbrowser.open(self.url) self._build_loop() def _build_loop(self): while True: with self._rebuild_cond: while not self._rebuild_cond.wait_for( lambda: self._want_rebuild or self._shutdown, timeout=self.shutdown_delay ): # We could have used just one wait instead of a loop + timeout, but we need # occasional breaks, otherwise on Windows we can't receive KeyboardInterrupt. pass if self._shutdown: break log.info("Detected file changes") while self._rebuild_cond.wait(timeout=self.build_delay): log.debug("Waiting for file changes to stop happening") self._wanted_epoch = _timestamp() self._want_rebuild = False try: self.builder() except Exception as e: if isinstance(e, SystemExit): print(e, file=sys.stderr) # noqa: T201 else: traceback.print_exc() log.error( "An error happened during the rebuild. The server will appear stuck until build errors are resolved." ) continue with self._epoch_cond: log.info("Reloading browsers") self._visible_epoch = self._wanted_epoch self._epoch_cond.notify_all() def shutdown(self, wait=False) -> None: self.observer.stop() with self._rebuild_cond: self._shutdown = True self._rebuild_cond.notify_all() if self.serve_thread.is_alive(): super().shutdown() self.server_close() if wait: self.serve_thread.join() self.observer.join() def serve_request(self, environ, start_response) -> Iterable[bytes]: try: result = self._serve_request(environ, start_response) except Exception: code = 500 msg = "500 Internal Server Error" log.exception(msg) else: if result is not None: return result code = 404 msg = "404 Not Found" error_content = None try: error_content = self.error_handler(code) except Exception: log.exception("Failed to render an error message!") if error_content is None: error_content = msg.encode() start_response(msg, [("Content-Type", "text/html")]) return [error_content] def _serve_request(self, environ, start_response) -> Iterable[bytes] | None: # https://bugs.python.org/issue16679 # https://github.com/bottlepy/bottle/blob/f9b1849db4/bottle.py#L984 path = environ["PATH_INFO"].encode("latin-1").decode("utf-8", "ignore") if path.startswith("/livereload/"): if m := re.fullmatch(r"/livereload/([0-9]+)/[0-9]+", path): epoch = int(m[1]) start_response("200 OK", [("Content-Type", "text/plain")]) def condition(): return self._visible_epoch > epoch with self._epoch_cond: if not condition(): # Stall the browser, respond as soon as there's something new. # If there's not, respond anyway after a minute. self._log_poll_request(environ.get("HTTP_REFERER"), request_id=path) self._epoch_cond.wait_for(condition, timeout=self.poll_response_timeout) return [b"%d" % self._visible_epoch] if (path + "/").startswith(self.mount_path): rel_file_path = path[len(self.mount_path) :] if path.endswith("/"): rel_file_path += "index.html" # Prevent directory traversal - normalize the path. rel_file_path = posixpath.normpath("/" + rel_file_path).lstrip("/") file_path = os.path.join(self.root, rel_file_path) elif path == "/": start_response("302 Found", [("Location", urllib.parse.quote(self.mount_path))]) return [] else: return None # Not found # Wait until the ongoing rebuild (if any) finishes, so we're not serving a half-built site. with self._epoch_cond: self._epoch_cond.wait_for(lambda: self._visible_epoch == self._wanted_epoch) epoch = self._visible_epoch try: file: BinaryIO = open(file_path, "rb") except OSError: if not path.endswith("/") and os.path.isfile(os.path.join(file_path, "index.html")): start_response("302 Found", [("Location", urllib.parse.quote(path) + "/")]) return [] return None # Not found if self._watched_paths and file_path.endswith(".html"): with file: content = file.read() content = self._inject_js_into_html(content, epoch) file = io.BytesIO(content) content_length = len(content) else: content_length = os.path.getsize(file_path) content_type = self._guess_type(file_path) start_response( "200 OK", [("Content-Type", content_type), ("Content-Length", str(content_length))] ) return wsgiref.util.FileWrapper(file) def _inject_js_into_html(self, content, epoch): try: body_end = content.rindex(b"") except ValueError: body_end = len(content) # The page will reload if the livereload poller returns a newer epoch than what it knows. # The other timestamp becomes just a unique identifier for the initiating page. script = _SCRIPT_TEMPLATE.substitute(epoch=epoch, request_id=_timestamp()) return b"%b%b" % ( content[:body_end], script.encode(), content[body_end:], ) @classmethod @functools.lru_cache # "Cache" to not repeat the same message for the same browser tab. def _log_poll_request(cls, url, request_id): log.info(f"Browser connected: {url}") @classmethod def _guess_type(cls, path): # MkDocs only ensures a few common types (as seen in livereload_tests.py::test_mime_types). # Other uncommon types will not be accepted. if path.endswith((".js", ".JS", ".mjs")): return "application/javascript" if path.endswith(".gz"): return "application/gzip" guess, _ = mimetypes.guess_type(path) if guess: return guess return "application/octet-stream" class _Handler(wsgiref.simple_server.WSGIRequestHandler): def log_request(self, code="-", size="-"): level = logging.DEBUG if str(code) == "200" else logging.WARNING log.log(level, f'"{self.requestline}" code {code}') def log_message(self, format, *args): log.debug(format, *args) def _timestamp() -> int: return round(time.monotonic() * 1000) def _try_relativize_path(path: str) -> str: """Make the path relative to current directory if it's under that directory.""" p = pathlib.Path(path) try: p = p.relative_to(os.getcwd()) except ValueError: pass return str(p) mkdocs-1.6.1/mkdocs/localization.py0000664000175000017500000000575114664334534017227 0ustar carstencarstenfrom __future__ import annotations import logging import os from typing import TYPE_CHECKING, Sequence from jinja2.ext import Extension, InternationalizationExtension from mkdocs.config.base import ValidationError if TYPE_CHECKING: import jinja2 try: from babel.core import Locale, UnknownLocaleError from babel.support import NullTranslations, Translations has_babel = True except ImportError: # pragma: no cover from mkdocs.utils.babel_stub import Locale, UnknownLocaleError # type: ignore has_babel = False log = logging.getLogger(__name__) base_path = os.path.dirname(os.path.abspath(__file__)) class NoBabelExtension(InternationalizationExtension): # pragma: no cover def __init__(self, environment): Extension.__init__(self, environment) environment.extend( install_null_translations=self._install_null, newstyle_gettext=False, ) def parse_locale(locale: str) -> Locale: try: return Locale.parse(locale, sep='_') except (ValueError, UnknownLocaleError, TypeError) as e: raise ValidationError(f'Invalid value for locale: {e}') def install_translations( env: jinja2.Environment, locale: Locale, theme_dirs: Sequence[str] ) -> None: if has_babel: env.add_extension('jinja2.ext.i18n') translations = _get_merged_translations(theme_dirs, 'locales', locale) if translations is not None: env.install_gettext_translations(translations) # type: ignore[attr-defined] else: env.install_null_translations() # type: ignore[attr-defined] if locale.language != 'en': log.warning( f"No translations could be found for the locale '{locale}'. " 'Defaulting to English.' ) else: # pragma: no cover # no babel installed, add dummy support for trans/endtrans blocks env.add_extension(NoBabelExtension) env.install_null_translations() # type: ignore[attr-defined] def _get_merged_translations( theme_dirs: Sequence[str], locales_dir: str, locale: Locale ) -> Translations | None: merged_translations: Translations | None = None log.debug(f"Looking for translations for locale '{locale}'") if locale.territory: locale_str = f"{locale.language}_{locale.territory}" else: locale_str = locale.language for theme_dir in reversed(theme_dirs): dirname = os.path.join(theme_dir, locales_dir) translations = Translations.load(dirname, [locale_str]) if type(translations) is NullTranslations: log.debug(f"No translations found here: '{dirname}'") continue if TYPE_CHECKING: assert isinstance(translations, Translations) log.debug(f"Translations found here: '{dirname}'") if merged_translations is None: merged_translations = translations else: merged_translations.merge(translations) return merged_translations mkdocs-1.6.1/mkdocs/py.typed0000664000175000017500000000000014664334534015642 0ustar carstencarstenmkdocs-1.6.1/mkdocs/structure/0000775000175000017500000000000014664334534016215 5ustar carstencarstenmkdocs-1.6.1/mkdocs/structure/nav.py0000664000175000017500000002151114664334534017353 0ustar carstencarstenfrom __future__ import annotations import logging from typing import TYPE_CHECKING, Iterator, TypeVar from urllib.parse import urlsplit from mkdocs.exceptions import BuildError from mkdocs.structure import StructureItem from mkdocs.structure.files import file_sort_key from mkdocs.structure.pages import Page, _AbsoluteLinksValidationValue from mkdocs.utils import nest_paths if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.files import Files log = logging.getLogger(__name__) class Navigation: def __init__(self, items: list, pages: list[Page]) -> None: self.items = items # Nested List with full navigation of Sections, Pages, and Links. self.pages = pages # Flat List of subset of Pages in nav, in order. self.homepage = None for page in pages: if page.is_homepage: self.homepage = page break homepage: Page | None """The [page][mkdocs.structure.pages.Page] object for the homepage of the site.""" pages: list[Page] """A flat list of all [page][mkdocs.structure.pages.Page] objects contained in the navigation.""" def __str__(self) -> str: return '\n'.join(item._indent_print() for item in self) def __iter__(self) -> Iterator: return iter(self.items) def __len__(self) -> int: return len(self.items) class Section(StructureItem): def __init__(self, title: str, children: list[StructureItem]) -> None: self.title = title self.children = children self.active = False def __repr__(self): name = self.__class__.__name__ return f"{name}(title={self.title!r})" title: str """The title of the section.""" children: list[StructureItem] """An iterable of all child navigation objects. Children may include nested sections, pages and links.""" @property def active(self) -> bool: """ When `True`, indicates that a child page of this section is the current page and can be used to highlight the section as the currently viewed section. Defaults to `False`. """ return self.__active @active.setter def active(self, value: bool): """Set active status of section and ancestors.""" self.__active = bool(value) if self.parent is not None: self.parent.active = bool(value) is_section: bool = True """Indicates that the navigation object is a "section" object. Always `True` for section objects.""" is_page: bool = False """Indicates that the navigation object is a "page" object. Always `False` for section objects.""" is_link: bool = False """Indicates that the navigation object is a "link" object. Always `False` for section objects.""" def _indent_print(self, depth: int = 0) -> str: ret = [super()._indent_print(depth)] for item in self.children: ret.append(item._indent_print(depth + 1)) return '\n'.join(ret) class Link(StructureItem): def __init__(self, title: str, url: str): self.title = title self.url = url def __repr__(self): name = self.__class__.__name__ title = f"{self.title!r}" if self.title is not None else '[blank]' return f"{name}(title={title}, url={self.url!r})" title: str """The title of the link. This would generally be used as the label of the link.""" url: str """The URL that the link points to. The URL should always be an absolute URLs and should not need to have `base_url` prepended.""" children: None = None """Links do not contain children and the attribute is always `None`.""" active: bool = False """External links cannot be "active" and the attribute is always `False`.""" is_section: bool = False """Indicates that the navigation object is a "section" object. Always `False` for link objects.""" is_page: bool = False """Indicates that the navigation object is a "page" object. Always `False` for link objects.""" is_link: bool = True """Indicates that the navigation object is a "link" object. Always `True` for link objects.""" def get_navigation(files: Files, config: MkDocsConfig) -> Navigation: """Build site navigation from config and files.""" documentation_pages = files.documentation_pages() nav_config = config['nav'] if nav_config is None: documentation_pages = sorted(documentation_pages, key=file_sort_key) nav_config = nest_paths(f.src_uri for f in documentation_pages if f.inclusion.is_in_nav()) items = _data_to_navigation(nav_config, files, config) if not isinstance(items, list): items = [items] # Get only the pages from the navigation, ignoring any sections and links. pages = _get_by_type(items, Page) # Include next, previous and parent links. _add_previous_and_next_links(pages) _add_parent_links(items) missing_from_config = [] for file in documentation_pages: if file.page is None: # Any documentation files not found in the nav should still have an associated page, so we # create them here. The Page object will automatically be assigned to `file.page` during # its creation (and this is the only way in which these page objects are accessible). Page(None, file, config) if file.inclusion.is_in_nav(): missing_from_config.append(file.src_path) if missing_from_config: log.log( config.validation.nav.omitted_files, 'The following pages exist in the docs directory, but are not ' 'included in the "nav" configuration:\n - ' + '\n - '.join(missing_from_config), ) links = _get_by_type(items, Link) for link in links: scheme, netloc, path, query, fragment = urlsplit(link.url) if scheme or netloc: log.debug(f"An external link to '{link.url}' is included in the 'nav' configuration.") elif ( link.url.startswith('/') and config.validation.nav.absolute_links is not _AbsoluteLinksValidationValue.RELATIVE_TO_DOCS ): log.log( config.validation.nav.absolute_links, f"An absolute path to '{link.url}' is included in the 'nav' " "configuration, which presumably points to an external resource.", ) else: log.log( config.validation.nav.not_found, f"A reference to '{link.url}' is included in the 'nav' " "configuration, which is not found in the documentation files.", ) return Navigation(items, pages) def _data_to_navigation(data, files: Files, config: MkDocsConfig): if isinstance(data, dict): return [ _data_to_navigation((key, value), files, config) if isinstance(value, str) else Section(title=key, children=_data_to_navigation(value, files, config)) for key, value in data.items() ] elif isinstance(data, list): return [ _data_to_navigation(item, files, config)[0] if isinstance(item, dict) and len(item) == 1 else _data_to_navigation(item, files, config) for item in data ] title, path = data if isinstance(data, tuple) else (None, data) lookup_path = path if ( lookup_path.startswith('/') and config.validation.nav.absolute_links is _AbsoluteLinksValidationValue.RELATIVE_TO_DOCS ): lookup_path = lookup_path.lstrip('/') if file := files.get_file_from_path(lookup_path): if file.inclusion.is_excluded(): log.log( min(logging.INFO, config.validation.nav.not_found), f"A reference to '{file.src_path}' is included in the 'nav' " "configuration, but this file is excluded from the built site.", ) page = file.page if page is not None: if not isinstance(page, Page): raise BuildError("A plugin has set File.page to a type other than Page.") return page return Page(title, file, config) return Link(title, path) T = TypeVar('T') def _get_by_type(nav, t: type[T]) -> list[T]: ret = [] for item in nav: if isinstance(item, t): ret.append(item) if item.children: ret.extend(_get_by_type(item.children, t)) return ret def _add_parent_links(nav) -> None: for item in nav: if item.is_section: for child in item.children: child.parent = item _add_parent_links(item.children) def _add_previous_and_next_links(pages: list[Page]) -> None: bookended = [None, *pages, None] zipped = zip(bookended[:-2], pages, bookended[2:]) for page0, page1, page2 in zipped: page1.previous_page, page1.next_page = page0, page2 mkdocs-1.6.1/mkdocs/structure/pages.py0000664000175000017500000005323014664334534017671 0ustar carstencarstenfrom __future__ import annotations import enum import logging import posixpath import warnings from typing import TYPE_CHECKING, Any, Callable, Iterator, MutableMapping, Sequence from urllib.parse import unquote as urlunquote from urllib.parse import urljoin, urlsplit, urlunsplit import markdown import markdown.extensions.toc import markdown.htmlparser # type: ignore import markdown.postprocessors import markdown.treeprocessors from markdown.util import AMP_SUBSTITUTE from mkdocs import utils from mkdocs.structure import StructureItem from mkdocs.structure.toc import get_toc from mkdocs.utils import _removesuffix, get_build_date, get_markdown_title, meta, weak_property from mkdocs.utils.rendering import get_heading_text if TYPE_CHECKING: from xml.etree import ElementTree as etree from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.files import File, Files from mkdocs.structure.toc import TableOfContents log = logging.getLogger(__name__) class Page(StructureItem): def __init__(self, title: str | None, file: File, config: MkDocsConfig) -> None: file.page = self self.file = file if title is not None: self.title = title # Navigation attributes self.children = None self.previous_page = None self.next_page = None self.active = False self.update_date: str = get_build_date() self._set_canonical_url(config.get('site_url', None)) self._set_edit_url( config.get('repo_url', None), config.get('edit_uri'), config.get('edit_uri_template') ) # Placeholders to be filled in later in the build process. self.markdown = None self._title_from_render: str | None = None self.content = None self.toc = [] # type: ignore self.meta = {} def __eq__(self, other) -> bool: return ( isinstance(other, self.__class__) and self.title == other.title and self.file == other.file ) def __repr__(self): name = self.__class__.__name__ title = f"{self.title!r}" if self.title is not None else '[blank]' url = self.abs_url or self.file.url return f"{name}(title={title}, url={url!r})" markdown: str | None """The original Markdown content from the file.""" content: str | None """The rendered Markdown as HTML, this is the contents of the documentation. Populated after `.render()`.""" toc: TableOfContents """An iterable object representing the Table of contents for a page. Each item in the `toc` is an [`AnchorLink`][mkdocs.structure.toc.AnchorLink].""" meta: MutableMapping[str, Any] """A mapping of the metadata included at the top of the markdown page.""" @property def url(self) -> str: """The URL of the page relative to the MkDocs `site_dir`.""" url = self.file.url if url in ('.', './'): return '' return url file: File """The documentation [`File`][mkdocs.structure.files.File] that the page is being rendered from.""" abs_url: str | None """The absolute URL of the page from the server root as determined by the value assigned to the [site_url][] configuration setting. The value includes any subdirectory included in the `site_url`, but not the domain. [base_url][] should not be used with this variable.""" canonical_url: str | None """The full, canonical URL to the current page as determined by the value assigned to the [site_url][] configuration setting. The value includes the domain and any subdirectory included in the `site_url`. [base_url][] should not be used with this variable.""" @property def active(self) -> bool: """When `True`, indicates that this page is the currently viewed page. Defaults to `False`.""" return self.__active @active.setter def active(self, value: bool): """Set active status of page and ancestors.""" self.__active = bool(value) if self.parent is not None: self.parent.active = bool(value) @property def is_index(self) -> bool: return self.file.name == 'index' edit_url: str | None """The full URL to the source page in the source repository. Typically used to provide a link to edit the source page. [base_url][] should not be used with this variable.""" @property def is_homepage(self) -> bool: """Evaluates to `True` for the homepage of the site and `False` for all other pages.""" return self.is_top_level and self.is_index and self.file.url in ('.', './', 'index.html') previous_page: Page | None """The [page][mkdocs.structure.pages.Page] object for the previous page or `None`. The value will be `None` if the current page is the first item in the site navigation or if the current page is not included in the navigation at all.""" next_page: Page | None """The [page][mkdocs.structure.pages.Page] object for the next page or `None`. The value will be `None` if the current page is the last item in the site navigation or if the current page is not included in the navigation at all.""" children: None = None """Pages do not contain children and the attribute is always `None`.""" is_section: bool = False """Indicates that the navigation object is a "section" object. Always `False` for page objects.""" is_page: bool = True """Indicates that the navigation object is a "page" object. Always `True` for page objects.""" is_link: bool = False """Indicates that the navigation object is a "link" object. Always `False` for page objects.""" def _set_canonical_url(self, base: str | None) -> None: if base: if not base.endswith('/'): base += '/' self.canonical_url = canonical_url = urljoin(base, self.url) self.abs_url = urlsplit(canonical_url).path else: self.canonical_url = None self.abs_url = None def _set_edit_url( self, repo_url: str | None, edit_uri: str | None = None, edit_uri_template: str | None = None, ) -> None: if not edit_uri_template and not edit_uri: self.edit_url = None return src_uri = self.file.edit_uri if src_uri is None: self.edit_url = None return if edit_uri_template: noext = posixpath.splitext(src_uri)[0] file_edit_uri = edit_uri_template.format(path=src_uri, path_noext=noext) else: assert edit_uri is not None and edit_uri.endswith('/') file_edit_uri = edit_uri + src_uri if repo_url: # Ensure urljoin behavior is correct if not file_edit_uri.startswith(('?', '#')) and not repo_url.endswith('/'): repo_url += '/' else: try: parsed_url = urlsplit(file_edit_uri) if not parsed_url.scheme or not parsed_url.netloc: log.warning( f"edit_uri: {file_edit_uri!r} is not a valid URL, it should include the http:// (scheme)" ) except ValueError as e: log.warning(f"edit_uri: {file_edit_uri!r} is not a valid URL: {e}") self.edit_url = urljoin(repo_url or '', file_edit_uri) def read_source(self, config: MkDocsConfig) -> None: source = config.plugins.on_page_read_source(page=self, config=config) if source is None: try: source = self.file.content_string except OSError: log.error(f'File not found: {self.file.src_path}') raise except ValueError: log.error(f'Encoding error reading file: {self.file.src_path}') raise self.markdown, self.meta = meta.get_data(source) def _set_title(self) -> None: warnings.warn( "_set_title is no longer used in MkDocs and will be removed soon.", DeprecationWarning ) @weak_property def title(self) -> str | None: # type: ignore[override] """ Returns the title for the current page. Before calling `read_source()`, this value is empty. It can also be updated by `render()`. Checks these in order and uses the first that returns a valid title: - value provided on init (passed in from config) - value of metadata 'title' - content of the first H1 in Markdown content - convert filename to title """ if self.markdown is None: return None if 'title' in self.meta: return self.meta['title'] if self._title_from_render: return self._title_from_render elif self.content is None: # Preserve legacy behavior only for edge cases in plugins. title_from_md = get_markdown_title(self.markdown) if title_from_md is not None: return title_from_md if self.is_homepage: return 'Home' title = self.file.name.replace('-', ' ').replace('_', ' ') # Capitalize if the filename was all lowercase, otherwise leave it as-is. if title.lower() == title: title = title.capitalize() return title def render(self, config: MkDocsConfig, files: Files) -> None: """Convert the Markdown source file to HTML as per the config.""" if self.markdown is None: raise RuntimeError("`markdown` field hasn't been set (via `read_source`)") md = markdown.Markdown( extensions=config['markdown_extensions'], extension_configs=config['mdx_configs'] or {}, ) raw_html_ext = _RawHTMLPreprocessor() raw_html_ext._register(md) extract_anchors_ext = _ExtractAnchorsTreeprocessor(self.file, files, config) extract_anchors_ext._register(md) relative_path_ext = _RelativePathTreeprocessor(self.file, files, config) relative_path_ext._register(md) extract_title_ext = _ExtractTitleTreeprocessor() extract_title_ext._register(md) self.content = md.convert(self.markdown) self.toc = get_toc(getattr(md, 'toc_tokens', [])) self._title_from_render = extract_title_ext.title self.present_anchor_ids = ( extract_anchors_ext.present_anchor_ids | raw_html_ext.present_anchor_ids ) if log.getEffectiveLevel() > logging.DEBUG: self.links_to_anchors = relative_path_ext.links_to_anchors present_anchor_ids: set[str] | None = None """Anchor IDs that this page contains (can be linked to in this page).""" links_to_anchors: dict[File, dict[str, str]] | None = None """Links to anchors in other files that this page contains. The structure is: `{file_that_is_linked_to: {'anchor': 'original_link/to/some_file.md#anchor'}}`. Populated after `.render()`. Populated only if `validation: {anchors: info}` (or greater) is set. """ def validate_anchor_links(self, *, files: Files, log_level: int) -> None: if not self.links_to_anchors: return for to_file, links in self.links_to_anchors.items(): for anchor, original_link in links.items(): page = to_file.page if page is None: continue if page.present_anchor_ids is None: # Page was somehow not rendered. continue if anchor in page.present_anchor_ids: continue context = "" if to_file == self.file: problem = "there is no such anchor on this page" if anchor.startswith('fnref:'): context = " This seems to be a footnote that is never referenced." else: problem = f"the doc '{to_file.src_uri}' does not contain an anchor '#{anchor}'" log.log( log_level, f"Doc file '{self.file.src_uri}' contains a link '{original_link}', but {problem}.{context}", ) class _ExtractAnchorsTreeprocessor(markdown.treeprocessors.Treeprocessor): def __init__(self, file: File, files: Files, config: MkDocsConfig) -> None: self.present_anchor_ids: set[str] = set() def run(self, root: etree.Element) -> None: add = self.present_anchor_ids.add for element in root.iter(): if anchor := element.get('id'): add(anchor) if element.tag == 'a': if anchor := element.get('name'): add(anchor) def _register(self, md: markdown.Markdown) -> None: md.treeprocessors.register(self, "mkdocs_extract_anchors", priority=5) # Same as 'toc'. class _RelativePathTreeprocessor(markdown.treeprocessors.Treeprocessor): def __init__(self, file: File, files: Files, config: MkDocsConfig) -> None: self.file = file self.files = files self.config = config self.links_to_anchors: dict[File, dict[str, str]] = {} def run(self, root: etree.Element) -> etree.Element: """ Update urls on anchors and images to make them relative. Iterates through the full document tree looking for specific tags and then makes them relative based on the site navigation """ for element in root.iter(): if element.tag == 'a': key = 'href' elif element.tag == 'img': key = 'src' else: continue url = element.get(key) assert url is not None new_url = self.path_to_url(url) element.set(key, new_url) return root @classmethod def _target_uri(cls, src_path: str, dest_path: str) -> str: return posixpath.normpath( posixpath.join(posixpath.dirname(src_path), dest_path).lstrip('/') ) @classmethod def _possible_target_uris( cls, file: File, path: str, use_directory_urls: bool, suggest_absolute: bool = False ) -> Iterator[str]: """First yields the resolved file uri for the link, then proceeds to yield guesses for possible mistakes.""" target_uri = cls._target_uri(file.src_uri, path) yield target_uri if posixpath.normpath(path) == '.': # Explicitly link to current file. yield file.src_uri return tried = {target_uri} prefixes = [target_uri, cls._target_uri(file.url, path)] if prefixes[0] == prefixes[1]: prefixes.pop() suffixes: list[Callable[[str], str]] = [] if use_directory_urls: suffixes.append(lambda p: p) if not posixpath.splitext(target_uri)[-1]: suffixes.append(lambda p: posixpath.join(p, 'index.md')) suffixes.append(lambda p: posixpath.join(p, 'README.md')) if ( not target_uri.endswith('.') and not path.endswith('.md') and (use_directory_urls or not path.endswith('/')) ): suffixes.append(lambda p: _removesuffix(p, '.html') + '.md') for pref in prefixes: for suf in suffixes: guess = posixpath.normpath(suf(pref)) if guess not in tried and not guess.startswith('../'): yield guess tried.add(guess) def path_to_url(self, url: str) -> str: scheme, netloc, path, query, anchor = urlsplit(url) absolute_link = None warning_level, warning = 0, '' # Ignore URLs unless they are a relative link to a source file. if scheme or netloc: # External link. return url elif url.startswith(('/', '\\')): # Absolute link. absolute_link = self.config.validation.links.absolute_links if absolute_link is not _AbsoluteLinksValidationValue.RELATIVE_TO_DOCS: warning_level = absolute_link warning = f"Doc file '{self.file.src_uri}' contains an absolute link '{url}', it was left as is." elif AMP_SUBSTITUTE in url: # AMP_SUBSTITUTE is used internally by Markdown only for email. return url elif not path: # Self-link containing only query or anchor. if anchor: # Register that the page links to itself with an anchor. self.links_to_anchors.setdefault(self.file, {}).setdefault(anchor, url) return url path = urlunquote(path) # Determine the filepath of the target. possible_target_uris = self._possible_target_uris( self.file, path, self.config.use_directory_urls ) if warning: # For absolute path (already has a warning), the primary lookup path should be preserved as a tip option. target_uri = url target_file = None else: # Validate that the target exists in files collection. target_uri = next(possible_target_uris) target_file = self.files.get_file_from_path(target_uri) if target_file is None and not warning: # Primary lookup path had no match, definitely produce a warning, just choose which one. if not posixpath.splitext(path)[-1] and absolute_link is None: # No '.' in the last part of a path indicates path does not point to a file. warning_level = self.config.validation.links.unrecognized_links warning = ( f"Doc file '{self.file.src_uri}' contains an unrecognized relative link '{url}', " f"it was left as is." ) else: target = f" '{target_uri}'" if target_uri != url.lstrip('/') else "" warning_level = self.config.validation.links.not_found warning = ( f"Doc file '{self.file.src_uri}' contains a link '{url}', " f"but the target{target} is not found among documentation files." ) if warning: if self.file.inclusion.is_excluded(): warning_level = min(logging.INFO, warning_level) # There was no match, so try to guess what other file could've been intended. if warning_level > logging.DEBUG: suggest_url = '' for path in possible_target_uris: if self.files.get_file_from_path(path) is not None: if anchor and path == self.file.src_uri: path = '' elif absolute_link is _AbsoluteLinksValidationValue.RELATIVE_TO_DOCS: path = '/' + path else: path = utils.get_relative_url(path, self.file.src_uri) suggest_url = urlunsplit(('', '', path, query, anchor)) break else: if '@' in url and '.' in url and '/' not in url: suggest_url = f'mailto:{url}' if suggest_url: warning += f" Did you mean '{suggest_url}'?" log.log(warning_level, warning) return url assert target_uri is not None assert target_file is not None if anchor: # Register that this page links to the target file with an anchor. self.links_to_anchors.setdefault(target_file, {}).setdefault(anchor, url) if target_file.inclusion.is_excluded(): if self.file.inclusion.is_excluded(): warning_level = logging.DEBUG else: warning_level = min(logging.INFO, self.config.validation.links.not_found) warning = ( f"Doc file '{self.file.src_uri}' contains a link to " f"'{target_uri}' which is excluded from the built site." ) log.log(warning_level, warning) path = utils.get_relative_url(target_file.url, self.file.url) return urlunsplit(('', '', path, query, anchor)) def _register(self, md: markdown.Markdown) -> None: md.treeprocessors.register(self, "relpath", 0) class _RawHTMLPreprocessor(markdown.preprocessors.Preprocessor): def __init__(self) -> None: super().__init__() self.present_anchor_ids: set[str] = set() def run(self, lines: list[str]) -> list[str]: parser = _HTMLHandler() parser.feed('\n'.join(lines)) parser.close() self.present_anchor_ids = parser.present_anchor_ids return lines def _register(self, md: markdown.Markdown) -> None: md.preprocessors.register( self, "mkdocs_raw_html", priority=21 # Right before 'html_block'. ) class _HTMLHandler(markdown.htmlparser.htmlparser.HTMLParser): # type: ignore[name-defined] def __init__(self) -> None: super().__init__() self.present_anchor_ids: set[str] = set() def handle_starttag(self, tag: str, attrs: Sequence[tuple[str, str]]) -> None: for k, v in attrs: if k == 'id' or (k == 'name' and tag == 'a'): self.present_anchor_ids.add(v) return super().handle_starttag(tag, attrs) class _ExtractTitleTreeprocessor(markdown.treeprocessors.Treeprocessor): title: str | None = None md: markdown.Markdown def run(self, root: etree.Element) -> etree.Element: for el in root: if el.tag == 'h1': self.title = get_heading_text(el, self.md) break return root def _register(self, md: markdown.Markdown) -> None: self.md = md md.treeprocessors.register(self, "mkdocs_extract_title", priority=1) # Close to the end. class _AbsoluteLinksValidationValue(enum.IntEnum): RELATIVE_TO_DOCS = -1 mkdocs-1.6.1/mkdocs/structure/toc.py0000664000175000017500000000431014664334534017352 0ustar carstencarsten""" Deals with generating the per-page table of contents. For the sake of simplicity we use the Python-Markdown `toc` extension to generate a list of dicts for each toc item, and then store it as AnchorLinks to maintain compatibility with older versions of MkDocs. """ from __future__ import annotations from typing import Iterable, Iterator, TypedDict class _TocToken(TypedDict): level: int id: str name: str children: list[_TocToken] def get_toc(toc_tokens: list[_TocToken]) -> TableOfContents: toc = [_parse_toc_token(i) for i in toc_tokens] # For the table of contents, always mark the first element as active if len(toc): toc[0].active = True # type: ignore[attr-defined] return TableOfContents(toc) class AnchorLink: """A single entry in the table of contents.""" def __init__(self, title: str, id: str, level: int) -> None: self.title, self.id, self.level = title, id, level self.children = [] title: str """The text of the item, as HTML.""" @property def url(self) -> str: """The hash fragment of a URL pointing to the item.""" return '#' + self.id level: int """The zero-based level of the item.""" children: list[AnchorLink] """An iterable of any child items.""" def __str__(self) -> str: return self.indent_print() def indent_print(self, depth: int = 0) -> str: indent = ' ' * depth ret = f'{indent}{self.title} - {self.url}\n' for item in self.children: ret += item.indent_print(depth + 1) return ret class TableOfContents(Iterable[AnchorLink]): """Represents the table of contents for a given page.""" def __init__(self, items: list[AnchorLink]) -> None: self.items = items def __iter__(self) -> Iterator[AnchorLink]: return iter(self.items) def __len__(self) -> int: return len(self.items) def __str__(self) -> str: return ''.join(str(item) for item in self) def _parse_toc_token(token: _TocToken) -> AnchorLink: anchor = AnchorLink(token['name'], token['id'], token['level']) for i in token['children']: anchor.children.append(_parse_toc_token(i)) return anchor mkdocs-1.6.1/mkdocs/structure/__init__.py0000664000175000017500000000166114664334534020332 0ustar carstencarstenfrom __future__ import annotations import abc from typing import TYPE_CHECKING, Iterable if TYPE_CHECKING: from mkdocs.structure.nav import Section class StructureItem(metaclass=abc.ABCMeta): """An item in MkDocs structure - see concrete subclasses Section, Page or Link.""" @abc.abstractmethod def __init__(self): ... parent: Section | None = None """The immediate parent of the item in the site navigation. `None` if it's at the top level.""" @property def is_top_level(self) -> bool: return self.parent is None title: str | None is_section: bool = False is_page: bool = False is_link: bool = False @property def ancestors(self) -> Iterable[StructureItem]: if self.parent is None: return [] return [self.parent, *self.parent.ancestors] def _indent_print(self, depth: int = 0) -> str: return (' ' * depth) + repr(self) mkdocs-1.6.1/mkdocs/structure/files.py0000664000175000017500000005602114664334534017675 0ustar carstencarstenfrom __future__ import annotations import enum import fnmatch import logging import os import posixpath import shutil import warnings from functools import cached_property from pathlib import PurePath, PurePosixPath from typing import TYPE_CHECKING, Callable, Iterable, Iterator, Mapping, Sequence, overload from urllib.parse import quote as urlquote import pathspec import pathspec.gitignore import pathspec.util from mkdocs import utils if TYPE_CHECKING: import jinja2.environment from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.pages import Page log = logging.getLogger(__name__) class InclusionLevel(enum.Enum): EXCLUDED = -3 """The file is excluded and will not be processed.""" DRAFT = -2 """The file is excluded from the final site, but will still be populated during `mkdocs serve`.""" NOT_IN_NAV = -1 """The file is part of the site, but doesn't produce nav warnings.""" UNDEFINED = 0 """Still needs to be computed based on the config. If the config doesn't kick in, acts the same as `included`.""" INCLUDED = 1 """The file is part of the site. Documentation pages that are omitted from the nav will produce warnings.""" def all(self): return True def is_included(self): return self.value > self.DRAFT.value def is_excluded(self): return self.value <= self.DRAFT.value def is_in_serve(self): return self.value >= self.DRAFT.value def is_in_nav(self): return self.value > self.NOT_IN_NAV.value def is_not_in_nav(self): return self.value <= self.NOT_IN_NAV.value class Files: """A collection of [File][mkdocs.structure.files.File] objects.""" def __init__(self, files: Iterable[File]) -> None: self._src_uris = {f.src_uri: f for f in files} def __iter__(self) -> Iterator[File]: """Iterate over the files within.""" return iter(self._src_uris.values()) def __len__(self) -> int: """The number of files within.""" return len(self._src_uris) def __contains__(self, path: str) -> bool: """Soft-deprecated, prefer `get_file_from_path(path) is not None`.""" return PurePath(path).as_posix() in self._src_uris @property def src_paths(self) -> dict[str, File]: """Soft-deprecated, prefer `src_uris`.""" return {file.src_path: file for file in self} @property def src_uris(self) -> Mapping[str, File]: """ A mapping containing every file, with the keys being their [`src_uri`][mkdocs.structure.files.File.src_uri]. """ return self._src_uris def get_file_from_path(self, path: str) -> File | None: """Return a File instance with File.src_uri equal to path.""" return self._src_uris.get(PurePath(path).as_posix()) def append(self, file: File) -> None: """Add file to the Files collection.""" if file.src_uri in self._src_uris: warnings.warn( "To replace an existing file, call `remove` before `append`.", DeprecationWarning ) del self._src_uris[file.src_uri] self._src_uris[file.src_uri] = file def remove(self, file: File) -> None: """Remove file from Files collection.""" try: del self._src_uris[file.src_uri] except KeyError: raise ValueError(f'{file.src_uri!r} not in collection') def copy_static_files( self, dirty: bool = False, *, inclusion: Callable[[InclusionLevel], bool] = InclusionLevel.is_included, ) -> None: """Copy static files from source to destination.""" for file in self: if not file.is_documentation_page() and inclusion(file.inclusion): file.copy_file(dirty) def documentation_pages( self, *, inclusion: Callable[[InclusionLevel], bool] = InclusionLevel.is_included ) -> Sequence[File]: """Return iterable of all Markdown page file objects.""" return [file for file in self if file.is_documentation_page() and inclusion(file.inclusion)] def static_pages(self) -> Sequence[File]: """Return iterable of all static page file objects.""" return [file for file in self if file.is_static_page()] def media_files(self) -> Sequence[File]: """Return iterable of all file objects which are not documentation or static pages.""" return [file for file in self if file.is_media_file()] def javascript_files(self) -> Sequence[File]: """Return iterable of all javascript file objects.""" return [file for file in self if file.is_javascript()] def css_files(self) -> Sequence[File]: """Return iterable of all CSS file objects.""" return [file for file in self if file.is_css()] def add_files_from_theme(self, env: jinja2.Environment, config: MkDocsConfig) -> None: """Retrieve static files from Jinja environment and add to collection.""" def filter(name): # '.*' filters dot files/dirs at root level whereas '*/.*' filters nested levels patterns = ['.*', '*/.*', '*.py', '*.pyc', '*.html', '*readme*', 'mkdocs_theme.yml'] # Exclude translation files patterns.append("locales/*") patterns.extend(f'*{x}' for x in utils.markdown_extensions) patterns.extend(config.theme.static_templates) for pattern in patterns: if fnmatch.fnmatch(name.lower(), pattern): return False return True for path in env.list_templates(filter_func=filter): # Theme files do not override docs_dir files if self.get_file_from_path(path) is None: for dir in config.theme.dirs: # Find the first theme dir which contains path if os.path.isfile(os.path.join(dir, path)): self.append(File(path, dir, config.site_dir, config.use_directory_urls)) break @property def _files(self) -> Iterable[File]: warnings.warn("Do not access Files._files.", DeprecationWarning) return self @_files.setter def _files(self, value: Iterable[File]): warnings.warn("Do not access Files._files.", DeprecationWarning) self._src_uris = {f.src_uri: f for f in value} class File: """ A MkDocs File object. It represents how the contents of one file should be populated in the destination site. A file always has its `abs_dest_path` (obtained by joining `dest_dir` and `dest_path`), where the `dest_dir` is understood to be the *site* directory. `content_bytes`/`content_string` (new in MkDocs 1.6) can always be used to obtain the file's content. But it may be backed by one of the two sources: * A physical source file at `abs_src_path` (by default obtained by joining `src_dir` and `src_uri`). `src_dir` is understood to be the *docs* directory. Then `content_bytes`/`content_string` will read the file at `abs_src_path`. `src_dir` *should* be populated for real files and should be `None` for generated files. * Since MkDocs 1.6 a file may alternatively be stored in memory - `content_string`/`content_bytes`. Then `src_dir` and `abs_src_path` will remain `None`. `content_bytes`/`content_string` need to be written to, or populated through the `content` argument in the constructor. But `src_uri` is still populated for such files as well! The virtual file pretends as if it originated from that path in the `docs` directory, and other values are derived. For static files the file is just copied to the destination, and `dest_uri` equals `src_uri`. For Markdown files (determined by the file extension in `src_uri`) the destination content will be the rendered content, and `dest_uri` will have the `.html` extension and some additional transformations to the path, based on `use_directory_urls`. """ src_uri: str """The pure path (always '/'-separated) of the source file relative to the source directory.""" use_directory_urls: bool """Whether directory URLs ('foo/') should be used or not ('foo.html'). If `False`, a Markdown file is mapped to an HTML file of the same name (the file extension is changed to `.html`). If True, a Markdown file is mapped to an HTML index file (`index.html`) nested in a directory using the "name" of the file in `path`. Non-Markdown files retain their original path. """ src_dir: str | None """The OS path of the top-level directory that the source file originates from. Assumed to be the *docs_dir*; not populated for generated files.""" dest_dir: str """The OS path of the destination directory (top-level site_dir) that the file should be copied to.""" inclusion: InclusionLevel = InclusionLevel.UNDEFINED """Whether the file will be excluded from the built site.""" generated_by: str | None = None """If not None, indicates that a plugin generated this file on the fly. The value is the plugin's entrypoint name and can be used to find the plugin by key in the PluginCollection.""" _content: str | bytes | None = None """If set, the file's content will be read from here. This logic is handled by `content_bytes`/`content_string`, which should be used instead of accessing this attribute.""" @property def src_path(self) -> str: """Same as `src_uri` (and synchronized with it) but will use backslashes on Windows. Discouraged.""" return os.path.normpath(self.src_uri) @src_path.setter def src_path(self, value: str): self.src_uri = PurePath(value).as_posix() @property def dest_path(self) -> str: """Same as `dest_uri` (and synchronized with it) but will use backslashes on Windows. Discouraged.""" return os.path.normpath(self.dest_uri) @dest_path.setter def dest_path(self, value: str): self.dest_uri = PurePath(value).as_posix() page: Page | None = None @overload @classmethod def generated( cls, config: MkDocsConfig, src_uri: str, *, content: str | bytes, inclusion: InclusionLevel = InclusionLevel.UNDEFINED, ) -> File: """ Create a virtual file backed by in-memory content. It will pretend to be a file in the docs dir at `src_uri`. """ @overload @classmethod def generated( cls, config: MkDocsConfig, src_uri: str, *, abs_src_path: str, inclusion: InclusionLevel = InclusionLevel.UNDEFINED, ) -> File: """ Create a virtual file backed by a physical temporary file at `abs_src_path`. It will pretend to be a file in the docs dir at `src_uri`. """ @classmethod def generated( cls, config: MkDocsConfig, src_uri: str, *, content: str | bytes | None = None, abs_src_path: str | None = None, inclusion: InclusionLevel = InclusionLevel.UNDEFINED, ) -> File: """ Create a virtual file, backed either by in-memory `content` or by a file at `abs_src_path`. It will pretend to be a file in the docs dir at `src_uri`. """ if (content is None) == (abs_src_path is None): raise TypeError("File must have exactly one of 'content' or 'abs_src_path'") f = cls( src_uri, src_dir=None, dest_dir=config.site_dir, use_directory_urls=config.use_directory_urls, inclusion=inclusion, ) f.generated_by = config.plugins._current_plugin or '' f.abs_src_path = abs_src_path f._content = content return f def __init__( self, path: str, src_dir: str | None, dest_dir: str, use_directory_urls: bool, *, dest_uri: str | None = None, inclusion: InclusionLevel = InclusionLevel.UNDEFINED, ) -> None: self.src_path = path self.src_dir = src_dir self.dest_dir = dest_dir self.use_directory_urls = use_directory_urls if dest_uri is not None: self.dest_uri = dest_uri self.inclusion = inclusion def __repr__(self): return ( f"{type(self).__name__}({self.src_uri!r}, src_dir={self.src_dir!r}, " f"dest_dir={self.dest_dir!r}, use_directory_urls={self.use_directory_urls!r}, " f"dest_uri={self.dest_uri!r}, inclusion={self.inclusion})" ) @utils.weak_property def edit_uri(self) -> str | None: """ A path relative to the source repository to use for the "edit" button. Defaults to `src_uri` and can be overwritten. For generated files this should be set to `None`. """ return self.src_uri if self.generated_by is None else None def _get_stem(self) -> str: """Soft-deprecated, do not use.""" filename = posixpath.basename(self.src_uri) stem, ext = posixpath.splitext(filename) return 'index' if stem == 'README' else stem name = cached_property(_get_stem) """Return the name of the file without its extension.""" def _get_dest_path(self, use_directory_urls: bool | None = None) -> str: """Soft-deprecated, do not use.""" if self.is_documentation_page(): parent, filename = posixpath.split(self.src_uri) if use_directory_urls is None: use_directory_urls = self.use_directory_urls if not use_directory_urls or self.name == 'index': # index.md or README.md => index.html # foo.md => foo.html return posixpath.join(parent, self.name + '.html') else: # foo.md => foo/index.html return posixpath.join(parent, self.name, 'index.html') return self.src_uri dest_uri = cached_property(_get_dest_path) """The pure path (always '/'-separated) of the destination file relative to the destination directory.""" def _get_url(self, use_directory_urls: bool | None = None) -> str: """Soft-deprecated, do not use.""" url = self.dest_uri dirname, filename = posixpath.split(url) if use_directory_urls is None: use_directory_urls = self.use_directory_urls if use_directory_urls and filename == 'index.html': url = (dirname or '.') + '/' return urlquote(url) url = cached_property(_get_url) """The URI of the destination file relative to the destination directory as a string.""" @cached_property def abs_src_path(self) -> str | None: """ The absolute concrete path of the source file. Will use backslashes on Windows. Note: do not use this path to read the file, prefer `content_bytes`/`content_string`. """ if self.src_dir is None: return None return os.path.normpath(os.path.join(self.src_dir, self.src_uri)) @cached_property def abs_dest_path(self) -> str: """The absolute concrete path of the destination file. Will use backslashes on Windows.""" return os.path.normpath(os.path.join(self.dest_dir, self.dest_uri)) def url_relative_to(self, other: File | str) -> str: """Return url for file relative to other file.""" return utils.get_relative_url(self.url, other.url if isinstance(other, File) else other) @property def content_bytes(self) -> bytes: """ Get the content of this file as a bytestring. May raise if backed by a real file (`abs_src_path`) if it cannot be read. If used as a setter, it defines the content of the file, and `abs_src_path` becomes unset. """ content = self._content if content is None: assert self.abs_src_path is not None with open(self.abs_src_path, 'rb') as f: return f.read() if not isinstance(content, bytes): content = content.encode() return content @content_bytes.setter def content_bytes(self, value: bytes): assert isinstance(value, bytes) self._content = value self.abs_src_path = None @property def content_string(self) -> str: """ Get the content of this file as a string. Assumes UTF-8 encoding, may raise. May also raise if backed by a real file (`abs_src_path`) if it cannot be read. If used as a setter, it defines the content of the file, and `abs_src_path` becomes unset. """ content = self._content if content is None: assert self.abs_src_path is not None with open(self.abs_src_path, encoding='utf-8-sig', errors='strict') as f: return f.read() if not isinstance(content, str): content = content.decode('utf-8-sig', errors='strict') return content @content_string.setter def content_string(self, value: str): assert isinstance(value, str) self._content = value self.abs_src_path = None def copy_file(self, dirty: bool = False) -> None: """Copy source file to destination, ensuring parent directories exist.""" if dirty and not self.is_modified(): log.debug(f"Skip copying unmodified file: '{self.src_uri}'") return log.debug(f"Copying media file: '{self.src_uri}'") output_path = self.abs_dest_path os.makedirs(os.path.dirname(output_path), exist_ok=True) content = self._content if content is None: assert self.abs_src_path is not None try: utils.copy_file(self.abs_src_path, output_path) except shutil.SameFileError: pass # Let plugins write directly into site_dir. elif isinstance(content, str): with open(output_path, 'w', encoding='utf-8') as output_file: output_file.write(content) else: with open(output_path, 'wb') as output_file: output_file.write(content) def is_modified(self) -> bool: if self._content is not None: return True assert self.abs_src_path is not None if os.path.isfile(self.abs_dest_path): return os.path.getmtime(self.abs_dest_path) < os.path.getmtime(self.abs_src_path) return True def is_documentation_page(self) -> bool: """Return True if file is a Markdown page.""" return utils.is_markdown_file(self.src_uri) def is_static_page(self) -> bool: """Return True if file is a static page (HTML, XML, JSON).""" return self.src_uri.endswith(('.html', '.htm', '.xml', '.json')) def is_media_file(self) -> bool: """Return True if file is not a documentation or static page.""" return not (self.is_documentation_page() or self.is_static_page()) def is_javascript(self) -> bool: """Return True if file is a JavaScript file.""" return self.src_uri.endswith(('.js', '.javascript', '.mjs')) def is_css(self) -> bool: """Return True if file is a CSS file.""" return self.src_uri.endswith('.css') _default_exclude = pathspec.gitignore.GitIgnoreSpec.from_lines(['.*', '/templates/']) def set_exclusions(files: Iterable[File], config: MkDocsConfig) -> None: """Re-calculate which files are excluded, based on the patterns in the config.""" exclude: pathspec.gitignore.GitIgnoreSpec | None = config.get('exclude_docs') exclude = _default_exclude + exclude if exclude else _default_exclude drafts: pathspec.gitignore.GitIgnoreSpec | None = config.get('draft_docs') nav_exclude: pathspec.gitignore.GitIgnoreSpec | None = config.get('not_in_nav') for file in files: if file.inclusion == InclusionLevel.UNDEFINED: if exclude.match_file(file.src_uri): file.inclusion = InclusionLevel.EXCLUDED elif drafts and drafts.match_file(file.src_uri): file.inclusion = InclusionLevel.DRAFT elif nav_exclude and nav_exclude.match_file(file.src_uri): file.inclusion = InclusionLevel.NOT_IN_NAV else: file.inclusion = InclusionLevel.INCLUDED def get_files(config: MkDocsConfig) -> Files: """Walk the `docs_dir` and return a Files collection.""" files: list[File] = [] conflicting_files: list[tuple[File, File]] = [] for source_dir, dirnames, filenames in os.walk(config['docs_dir'], followlinks=True): relative_dir = os.path.relpath(source_dir, config['docs_dir']) dirnames.sort() filenames.sort(key=_file_sort_key) files_by_dest: dict[str, File] = {} for filename in filenames: file = File( os.path.join(relative_dir, filename), config['docs_dir'], config['site_dir'], config['use_directory_urls'], ) # Skip README.md if an index file also exists in dir (part 1) prev_file = files_by_dest.setdefault(file.dest_uri, file) if prev_file is not file: conflicting_files.append((prev_file, file)) files.append(file) prev_file = file set_exclusions(files, config) # Skip README.md if an index file also exists in dir (part 2) for a, b in conflicting_files: if b.inclusion.is_included(): if a.inclusion.is_included(): log.warning( f"Excluding '{a.src_uri}' from the site because it conflicts with '{b.src_uri}'." ) try: files.remove(a) except ValueError: pass # Catching this to avoid errors if attempting to remove the same file twice. else: try: files.remove(b) except ValueError: pass return Files(files) def file_sort_key(f: File, /): """ Replicates the sort order how `get_files` produces it - index first, directories last. To sort a list of `File`, pass as the `key` argument to `sort`. """ parts = PurePosixPath(f.src_uri).parts if not parts: return () return (parts[:-1], f.name != "index", parts[-1]) def _file_sort_key(f: str): """Always sort `index` or `README` as first filename in list. This works only on basenames of files.""" return (os.path.splitext(f)[0] not in ('index', 'README'), f) def _sort_files(filenames: Iterable[str]) -> list[str]: """Soft-deprecated, do not use.""" return sorted(filenames, key=_file_sort_key) def _filter_paths(basename: str, path: str, is_dir: bool, exclude: Iterable[str]) -> bool: warnings.warn( "_filter_paths is not used since MkDocs 1.5 and will be removed soon.", DeprecationWarning ) for item in exclude: # Items ending in '/' apply only to directories. if item.endswith('/') and not is_dir: continue # Items starting with '/' apply to the whole path. # In any other cases just the basename is used. match = path if item.startswith('/') else basename if fnmatch.fnmatch(match, item.strip('/')): return True return False mkdocs-1.6.1/mkdocs/theme.py0000664000175000017500000001227014664334534015633 0ustar carstencarstenfrom __future__ import annotations import logging import os import warnings from typing import Any, Collection, MutableMapping import jinja2 import yaml try: from yaml import CSafeLoader as SafeLoader except ImportError: # pragma: no cover from yaml import SafeLoader # type: ignore from mkdocs import localization, utils from mkdocs.config.base import ValidationError from mkdocs.utils import templates log = logging.getLogger(__name__) class Theme(MutableMapping[str, Any]): """ A Theme object. Args: name: The name of the theme as defined by its entrypoint. custom_dir: User defined directory for custom templates. static_templates: A list of templates to render as static pages. All other keywords are passed as-is and made available as a key/value mapping. """ def __init__( self, name: str | None = None, *, custom_dir: str | None = None, static_templates: Collection[str] = (), locale: str | None = None, **user_config, ) -> None: self.name = name self._custom_dir = custom_dir _vars: dict[str, Any] = {'name': name, 'locale': 'en'} self.__vars = _vars # MkDocs provided static templates are always included package_dir = os.path.abspath(os.path.dirname(__file__)) mkdocs_templates = os.path.join(package_dir, 'templates') self.static_templates = set(os.listdir(mkdocs_templates)) # Build self.dirs from various sources in order of precedence self.dirs = [] if custom_dir is not None: self.dirs.append(custom_dir) if name: self._load_theme_config(name) # Include templates provided directly by MkDocs (outside any theme) self.dirs.append(mkdocs_templates) # Handle remaining user configs. Override theme configs (if set) self.static_templates.update(static_templates) _vars.update(user_config) # Validate locale and convert to Locale object if locale is None: locale = _vars['locale'] _vars['locale'] = localization.parse_locale(locale) name: str | None @property def locale(self) -> localization.Locale: return self['locale'] @property def custom_dir(self) -> str | None: return self._custom_dir @property def _vars(self) -> dict[str, Any]: warnings.warn( "Do not access Theme._vars, instead access the keys of Theme directly.", DeprecationWarning, ) return self.__vars dirs: list[str] static_templates: set[str] def __repr__(self) -> str: return "{}(name={!r}, dirs={!r}, static_templates={!r}, {})".format( self.__class__.__name__, self.name, self.dirs, self.static_templates, ', '.join(f'{k}={v!r}' for k, v in self.items()), ) def __getitem__(self, key: str) -> Any: return self.__vars[key] def __setitem__(self, key: str, value): self.__vars[key] = value def __delitem__(self, key: str): del self.__vars[key] def __contains__(self, item: object) -> bool: return item in self.__vars def __len__(self): return len(self.__vars) def __iter__(self): return iter(self.__vars) def _load_theme_config(self, name: str) -> None: """Recursively load theme and any parent themes.""" theme_dir = utils.get_theme_dir(name) utils.get_themes.cache_clear() self.dirs.append(theme_dir) try: file_path = os.path.join(theme_dir, 'mkdocs_theme.yml') with open(file_path, 'rb') as f: theme_config = yaml.load(f, SafeLoader) except OSError as e: log.debug(e) raise ValidationError( f"The theme '{name}' does not appear to have a configuration file. " f"Please upgrade to a current version of the theme." ) if theme_config is None: theme_config = {} log.debug(f"Loaded theme configuration for '{name}' from '{file_path}': {theme_config}") if parent_theme := theme_config.pop('extends', None): themes = utils.get_theme_names() if parent_theme not in themes: raise ValidationError( f"The theme '{name}' inherits from '{parent_theme}', which does not appear to be installed. " f"The available installed themes are: {', '.join(themes)}" ) self._load_theme_config(parent_theme) self.static_templates.update(theme_config.pop('static_templates', [])) self.__vars.update(theme_config) def get_env(self) -> jinja2.Environment: """Return a Jinja environment for the theme.""" loader = jinja2.FileSystemLoader(self.dirs) # No autoreload because editing a template in the middle of a build is not useful. env = jinja2.Environment(loader=loader, auto_reload=False) env.filters['url'] = templates.url_filter env.filters['script_tag'] = templates.script_tag_filter localization.install_translations(env, self.locale, self.dirs) return env mkdocs-1.6.1/mkdocs/__init__.py0000664000175000017500000000017614664334534016272 0ustar carstencarsten#!/usr/bin/env python # For acceptable version formats, see https://www.python.org/dev/peps/pep-0440/ __version__ = '1.6.1' mkdocs-1.6.1/mkdocs/themes/0000775000175000017500000000000014664334534015442 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/__init__.py0000664000175000017500000000000014664334534017541 0ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/0000775000175000017500000000000014664334534016722 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/404.html0000664000175000017500000000051414664334534020117 0ustar carstencarsten{% extends "base.html" %} {% block content %}

404

{% trans %}Page not found{% endtrans %}

{% endblock %} mkdocs-1.6.1/mkdocs/themes/mkdocs/toc.html0000664000175000017500000000206514664334534020400 0ustar carstencarsten mkdocs-1.6.1/mkdocs/themes/mkdocs/img/0000775000175000017500000000000014664334534017476 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/img/favicon.ico0000664000175000017500000000217614664334534021625 0ustar carstencarsten h(    4J&-"2jM/|iA 3o=d9-lÃmkdocs-1.6.1/mkdocs/themes/mkdocs/img/grid.png0000664000175000017500000000266214664334534021137 0ustar carstencarstenPNG  IHDRZ2zxǁ pHYs  niTXtXML:com.adobe.xmp ? AIDATxrU@?6@cR‰5<]f,M[13?Ûvffۣޜ/{zt/#tD#BG:"tD#BG9Ɔ%aqtD:"tD#BG:"tD# oaAm4v:"tD#BG:"tD#BG%=,GGD#BG:"tD#BG:ba8:"BG:"tD#BG:"tD K4:"tD#BG:"tD#BGذDlX9#BG:"tD#BG:"t'G|}4:"tD#BG:"tD#BGxK{X9#BG:"tD#BG:"tĆ%bqtD:"tD#BG:"tD#6,h#"tD#BG:"tD#BGaذDs|tls4ȕCo[]A':劎:"tD#BG:rO/x ޞmX~}xq|Xk=GGd %#BG1Y?!cK: #BG{9fǙ8ۆMwk?yގg{#B߷M~0⊎1W#B{rymX^?8Yk}2y#E\ё+;u[:ˎ/I#G6{:ṙym}ur۰xZki|tlݷ)|EoE#BGݻdї:"tDБc>wcS簜8Z\`γ_KgW [l:"tD#BG Θ#'IENDB`mkdocs-1.6.1/mkdocs/themes/mkdocs/keyboard-modal.html0000664000175000017500000000324614664334534022507 0ustar carstencarsten mkdocs-1.6.1/mkdocs/themes/mkdocs/__init__.py0000664000175000017500000000000014664334534021021 0ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/main.html0000664000175000017500000000057314664334534020541 0ustar carstencarsten{% extends "base.html" %} {# The entry point for the MkDocs Theme. Any theme customisations should override this file to redefine blocks defined in the various templates. The custom theme should only need to define a main.html which `{% extends "base.html" %}` and defines various blocks which will replace the blocks defined in base.html and its included child templates. #} mkdocs-1.6.1/mkdocs/themes/mkdocs/base.html0000664000175000017500000003375214664334534020534 0ustar carstencarsten {%- block site_meta %} {% if page and page.is_homepage %}{% endif %} {% if config.site_author %}{% endif %} {% if page and page.canonical_url %}{% endif %} {% if config.site_favicon %} {% else %}{% endif %} {%- endblock %} {%- block htmltitle %} {% if page and page.title and not page.is_homepage %}{{ page.title }} - {% endif %}{{ config.site_name }} {%- endblock %} {%- block styles %} {%- if config.theme.highlightjs %} {%- endif %} {%- for path in config.extra_css %} {%- endfor %} {%- endblock %} {%- block libs %} {%- if config.theme.highlightjs %} {%- for lang in config.theme.hljs_languages %} {%- endfor %} {%- endif %} {%- endblock %} {%- block analytics %} {%- if config.theme.analytics.gtag %} {%- elif config.google_analytics %} {%- endif %} {%- endblock %} {%- block extrahead %} {% endblock %} {%- if config.theme.color_mode != "light" or config.theme.user_color_mode_toggle %} {%- endif %}
{%- block content %}
{% include "toc.html" %}
{% include "content.html" %}
{%- endblock %}
{%- block footer %}
{%- if config.copyright %}

{{ config.copyright }}

{%- endif %}

{% trans mkdocs_link='MkDocs' %}Documentation built with {{ mkdocs_link }}.{% endtrans %}

{%- endblock %}
{%- block scripts %} {%- for script in config.extra_javascript %} {{ script|script_tag }} {%- endfor %} {%- endblock %} {% if 'search' in config.plugins %}{%- include "search-modal.html" %}{% endif %} {%- include "keyboard-modal.html" %} {% if page and page.is_homepage %} {% endif %} mkdocs-1.6.1/mkdocs/themes/mkdocs/messages.pot0000664000175000017500000000451514664334534021262 0ustar carstencarsten# Translations template for MkDocs. # Copyright (C) 2024 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2024. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: MkDocs 1.5.3\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "" mkdocs-1.6.1/mkdocs/themes/mkdocs/webfonts/0000775000175000017500000000000014664334534020551 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/webfonts/fa-solid-900.woff20000664000175000017500000046152014664334534023532 0ustar carstencarstenwOF2cP c6$ `<ʖ ˫@m % V')=˾t:Q StجeV)`Igb""ZI2},ٞ# "13jVJڙ$F>:(|E$UrjvOM懍^Tɭ$w*Dx`lZ?aD`rAULԼ x] |VD T8RX%[x>Zrg?UCuu4VImj1*KNXxn,8Yb@#kw%HK'LOH `Y`v3fgٻ (()RAERTXVLAGQO- Ѷ|o:)%{DZ]='􄄰0 6`X`v Cr)9A,ق^<%:@V.PpLg8S'9N'.˺ Qr^wׯfr􄝍;;ӫV`PHB !C\8w>] |,s^/ۗz%:I'hwt6 ofX^ k̊s蚆fZz(%vJjIĉdȮR` z{=ĝ,Q>r>L>dd4!݅]n]KAUADkpDwyD"@>F!&@UgFVFcTb4ŷ=l~#Y{ n竫 PRdX{yk?˿2jUB<{ L{f^ @ be^e*BKKq ɾv- txSI")RGy[oUޫƷߵ=f׬TiLDž1 ̒F7K~mD}Q,0MyY@ȴa$,+}_jg*BOy gCjsMd(o1?8Tes8dVάӟw&4  UvұSq!B~bomIo$zzxs'wp?%sӾi ĨSC[ m%uBk7{_-(e^Jǫe` |&n$ؓE⺔oV9 PdWI9ʳ%Ϯ"#xFMJ+PdOUWN떛.Y2%p{% _53gF6>5Sgk0k U`=OI>~\(*ϖy{g7Wȏ7Ihl3iz?R_8߅X'+2ne6Pd"|5&" ؙo ózqGs^eCv+:uO'=}03YCʖ-?#e#i\ wii|KɎuge_%>5>ˬٱTY73{?˷uuc;gz ʣk #~o0ԂxFrgɜ; Y Y?9ٖn5z&T0nzTK9ޞv'm{C-ŵQK혏I2Z'Us$5o=Nsj6Σ =Z+m$Aub#l׵j3k?8Ԫ{9?w E97p:+xtIy6E0_yn+{F &s)u ͋vUr9d)]F{}gΨ%٠^2;4/n~hG)ɃBl,Soyr_:^%3J6~jINYym@ߪLυ mL. ^)2g|ZokUk197U=mMF[ȧ,jDA nQج~*pE|<#_hSߵj>_7N^7cfu5=ώdz4_#Ծ~B4>=89Y7WY{rV {3mlg9ۙ3qBO6X:]Ji#tyg1j9ݬ-$;fܛhFo=9tt7(,UxԽCz5Dޣ`6~&Xez>u7 9ܭbh}>? ms^o2rꜗsQ71]IrP}Cލ¿?J+UkY Mm{G‹h~Mqy7O|i&!žT;Z8ʚT loX߹|0.cgRtwc<_P\!d~1?ʽm-^/%_m׵zcupmH|.vr ӱHi4+m*?6AӶB:d\qZ6CNϳTiWVלtgzO?pWzJ1TX@ܗ)wYy뼖Uu̧)Iw In\f/D:ܳ" +  "Ik&(D@!j%`4`,a<&`"&a2`*a:f`&fa60s1 qGppWq ]g][V>O;&j֛ fd6-finѬhm`mlmVۗ}kُa_N?V}d.KeZzlt!a*..JjZ&n~AaQqIE]>> +~/@"(I,).%ْ#'btMzH_'e-UU6lZ;vqڱڽjj13,2Kf3Qs<2/RLJIi+ 2S&%\r_G"忍l춸lك=o}v{o+*n膺Yn[ﶻ]n^W>>kF'~_W-~߇0xH$HdH(R(hfh耎 I)XXX5؁=x _ ɘ)iYY%XYXق9c938s9 ;Gy7O5T#jTMٵZEkh-mt!:TTu9:_2]tЃzXQ=3zVo]2ƈ 3l ߦmn[ԖlvST;.;%{ްw#~AַlkSLJLY);TRyDUՠZTRcjFuԓPNchM4BZNh#mtEJ&=g>Q(}8sa.%$W*7VG8 |C~ʯ-O?7(]K2I#$䐼RXJIy"եԕFDZHk(]2HH#eL9R%{䀜srQ.u-<JG U~pHHȊ<ȇBʨZhfhv> 阍XX؊؇8˸xx?`.x.K.K2k:nn&n[V+{8q/:Hc:#g&bҦkƦof 2Wu\3cܼc+mx6Vl^S-T۶NԅzRoLiM4'xO͒?ɫBr69K$ɨ0<B> CP8 YBFm?}>'{ko약ܞS{bݲkvI 4Os44 M4u$MkhFihhFz:ڪMZ]jjQS5P#5L]RM@5UTMUUETPTNeUFr*3)# Jş ?-| 2/$r7qW\ \p)grq4GpnvlVllؙI |}ث˽ S==}tgrM\ڥ\]E\؅\ǹYiƩ'v"'tGη|Gw]}/X?O ?Bo>gl }ijKsMtOz(=K҇y*}~O3҂&meYdݳ>Yl z%@(@ d@/`0P4Zpk pk:GѮ 88U]'8uNr]8uNs݁]]zBCC_OBgWw7끵9Pj JmJIPMCнPz JCB 7(=]f@5d6t u|'(_7~_||;( ʷwP( A O_ CS OTy'hW;þ KȻ"5vؓ O _ŰO!_{Q;`A1a7A߆Py!TvwQ7YmuZN „C8> i3Dc Ȫ!C5!JH DD.H@tCzҫ=>0`h'LQc{O~^!  }gB O'!ΐx~2/?GR3 ·φ> B>FX[n\`3 zA<́x 4ah#|GA B<EoCB?#)"} b>' @EbWk_xia%o{RxgBg@QEߡ ϠEC(#Eh fb\P"=EC(z q!!|ejݵau$:o#҉tυtC|93΋f<5ytfI|Zb5FH'Q9sQM8ՒjC0?ձTa].TRQSPR= QS}S}[PQ5ؚzAEiuZ#ְ3 ˱+1tcꋨ/s w>ԏ~/oA?!ԿapzSћGЛ8ޢp4z= {NN*p/S} 79F#8; g+p"p6Ͳ#8fyp..4{EG?.9`\Lsp)9p͵_47܊+hnr@s/+ܟy3H;~NC;Ihפ݀ FݓvOژDIҞI{iKh/%F{핤#hotұ"#:D<+яO:@ |H L"ƒ&ƽY|b D Ag-bt%&E y_b%TbK%$ abY%1D,OFzXظ/[&"Fl:rv:; }L'v"v#}BAF#!q4qǃ|qĉH'I'߈SHgg$&%M$H7ld?qq)7&&n## "" ^#% $OMG|FXN}c:z"_ "o'# #/JA8 GlBLJ^2()#ƨ)(kRƈΎqJ2^D2!eRڔɐteeJ )~LK7̀GQg>)A-e~B)RC(KP#IYU2OYuȇCZtI{6 m\6%mEw"i/Ҿt'Aw6(ұ<$$ZkN#q?5Og)%[tt+]FtH7]I% n'Aw^cQst^"Lw]{AV!cH{=GgH)-A_""M%2=y0at!OLy2L>9sL<]&/J^7yeȫRA^yG#b$n}2EEޏ<=@GH|8$%%lJ>|#%z//"_LLH|%11;wSAb}Ӓ7>Q#@~81 Jƌg/3_%AE~؅Cb>WH,@FbA * 97b1H,Ad,I((C)#("eb)JB`y(;ۡK٠^kS6u(S ֥tsSM9Xr*R*(S1%6<%幈؜b kHlMHbʧR؎SDlO7_?NA;SG؅:Į)%vNUSQgt.s[{Q . */uIO]BRR8ԕ%*q(u è {qu3ԭ)RDGݕ;q uO"t>3Q-D=zȽ0Ĺ#SOq1$%SgQϦC\Mk7)qȸz/~CԇR'n>ԧ#NKԗoǸ6^OS ~hCicf ^hi3f%F1h"~Mh%m1iΠ]DkӮ]C>zmI5nڽ=DSО@7%^NH(}}N ϐ(ĉt~8o'3"N38T ɐ8$q&9T,rɩ$!cKNO@GBJ\@IM\D.DD\J.F.N\F.W+I\E*q55:q-q1q#%q-%r{rGVrr7r$&_^qy0yq?yy8 y%ax$ BJe35 MHD"2yGDB>H>DJ>oOGěs[HC%.%)>G//oOd|ANA|IMK|MF;rv=9^K#~XPèEHߩ)%?Y(PsRsRQKSK#Qr#$FQkDhjj=b !%c<)1ڒڊE nyS NN N7 ΣΧ .D6uu5mbZ6)u=u#m26ڔԝiiQPf D=E=Mz6+<m6g =uM\JzG}D}lG}OH[]iQEũhKP-EUD[M-nDٓ<# ]18l^߈FBQ@k!~<~䖐ۀ#B ~1C'~IgB*~gC^*~BG?^χ|8#/|c/|:W@>7¯@~WZ_k!*~=7 fėDKP$.%f ]uĝ~DǢPxY(fČC!b*1uP|؏P|q~B Q|P|U(>%v"/Beb 1Q|P|z!m?"{?&v<ďE3bFs[1o=߈y߉]bAt6~G)%IlQ*Et%JeB,1r@2bArG=^Gx}DNJ9w3d!d >H.Vd&c '>O>CLˤ4Bv-ȾF} }}Wd&~Kt=ss8ҖȎsZٺxFCN{ CQ'=~ї jEZ۔X&'ۀ%6&SY"b@n1)RZğ.?=Iir{Rr-RZ)  w#1_"w1? 1ˑ{S{x"1+" 1m~&B;!;FO_t яK91#7N I⏣ӈ.=xļFo$Gg4?)bJ0r)!ÐA^zF_yZO{ kY>̳oZړry6X,lZO>Y>222x'GZ?(mđWIivQ]:vQt'q$Eq2yHGR' w+vmTϨg`Aړ%i17{fެA9 00 8 7K;+4T:S-0 )0 XLI2]$jv^KY#˳fLk#8֪IP8\yܢ>8<#o65fy078T9ïtDqxC\V}ۖ*jzp`W:9 P̓(]k̬,y m`T[3l>fYZ͆}6J+,MA\Y62d&%n-ɍ1EgNZU޾^QƘ23RW j0b x |__AXt#Un7Y/4W2؎eYhZM-oK58IL5fMBD2pZ&KgWoGJ մG&JFQ-qƎ7?::1LJ EڋL O!X JrhXivMC(mڢΙs[0i{2J5]8jۀm;sqL$ݮ֐:):D(Tix2 ҔQz`:rӢdDjF]*J8JKbǶc`vi oRW5(SpfǶ\VI&Q*s[Il1˸%85퉗f1wB1c:x3:_ ȝ\)2Jpt{e]Rncmv jn79.ySw6pݫ]un(W^*`Cތrt4K틲(kzP]GoWWg.؟3>\fS+Η>pF)v=~Zy3/g8)Zۣ7hM2ž=,~/>Nb,%1Y҅ݿѓ"Bޡ*gJW,eQV5䃊 !U=0}7F}1;%eSB6{Um !`W&aa+5^Xv:YFmfZ3]o&ǭ^0D%6FUבWPN^-Rƃ… n@e8+n/9Wo.m0 1csccٶ3ğ:j[! ta"2F%*ĄvmQ 0y,qGbc =T=^9rlY|OuYQC t^8W#DH:Jv\IN l`s*\w~E\;du kūvJWB1#a3t=!`VM/S:NX3OffY!SE 9RUW-3奓]nK˻ZV7ez~>[TtW-TUo>-66Nh'E{+p[ ~!\, t%!fCUfQL[(䃼6iy׶1;1޺}K @1\vvcGY| ha|d̰>jY\G pIۄ(Z]o8%i&StUZWMMZl=n1zv"7\0=@jǏ]wlΜ1sN}a;ܕBÇ=)>}3}.>}#NSmzpyh`m`}mpp+N!^Ge] oVFcĩnݚ,WmukuM#=}vt/޻;)l٦ TFZsz.BrC6az ܹGӧ<@}pD qYrt b5 LBlniٹxԱDo6fJ:񏪋?ݠe@SG& N L`h|s6)Km" :W\خ/e"i5s?űţ!aoN 5}_:s {O?w-?Y`ac<7α_yunYbj,(b? 7/bHߦ?qT[fUxۅRп~w<鴠לߍO'P'-2xL46pݍY&\gS`+'s%]LׇÌ Fafď.D |SYzßptheWloUfzv0hh6:MsFzd{AEbG9j|ttP$()88-"[1FZݺSb.q,7ih2M9{{% 9iij9:t1ώΩTDb9F˸(J\2[o#/ٔf7ulï8 'c;cl1I0ƜLc.T׻'K9}qTi?)EێWmዿMwa_L2^W39mr/fqLZx2ϝ wE9Moj6܈7 E|[r}boߎ{Zނz j̽x)3[<_3ƽ;-yYg1y?9}~0EU q|Ezl??sGm2ݲOoli :I8Gpcqgsc̷v<Ú.ٻ9-Mi dV'$3kh{"bؿ-S H`\P3攊9on>dA)|<+dSzib5=d^Њf;uNKtKn!/-]t0ϼ93(қ*̇Rޑ[qL FEJG R+X0T<Jzћ{?Bx|3Cc`d/; 4pIѲ$vΞu(G}82{Ǜv Pa. 6ȿ!w+ fOa%|#6h{N40(Ӱ~55- kiwo\)aTؕNgꝌ192so_ U++o vm78{l cg= o;8. 6r6Ra K_$S:b6~@,~.-Zސnw:#4O[7;bI 9uZ QN_dr 7LU.Jg(uZsIQ9MJCN<# j[Dd^';" @J+ %@^]A^C"\LtRa{Z!꘼yye?/aϗvm@c)NH`wکl)8-"ZCJ|7a`dj{G2Q$D ,0kf~BaN`Wye-a(^2 C6;~^Wo|^?N8 ~ na exy,gx38jkhV-Rw2Wuڭh S ̓f8+Ԅ:Q&v5&:4eAM}bszVĥ5coz> X3;&`$ٺ?x9oaF!䇞PM/mS baYp \ Aw; qͧy|w" z6z%z#vѫȬ#XI=٪E]&7ڛ1z&JҶz&5q``eAHʌPʋ@@-|PUݞ1Ƙ2^)!szKE~Qr i:hÝ_ahdhV;)?O8cgJp+)c c e xXeP*V^^|4˗˼۴,>~|wQ1~/}I R}m:,kn=IQX?_![~.' 4Ĕ?b< ĩ`xi$s".EU]&J"Yxw o;F+Z#5t:xuqُI"$,LD>3⯈3~V"ޗ" OZ<z<Ã!.4 ~A9hA()+02^f$1+u酬$iuD9S&id@reX_|yUd ߨis_]; Jǧr=͗_www-c?f9d0axk8DGGv܈U$N2lnj|TYC:7O2"RDU!K8Рz6*'@6.׵ضY>'< H`5Bx(W#DZj}}o nN a)&a*8x S*.7ӳ0/2w^{/!g_BEOECR4(U~Ŕ4Ps\| &H ]DN ;G L'^b +pڊ'vX9T;ZA6DB n$d[SOgQs*Z9 h== zXk3B a.59®%:bnb§32U7ՠ߳Od,.WQu( 76_{$| 0ɓ]8hYDӾ/;Sy.AEB&R_UȦmK @5Uĥc𦈫UIYZeγE]E[zM)JL4, M E,H   aJ<kRVã!]C iмƱ,ciKSq b7dilF戙`8w8l[>`)L,]5\cĔI_fAq܄^~mA=EZ CzBI509`=sjϺNQ60#U>0UXP3δ}=d;g>ܑД1N٦NdE$!%ͼ]~:zF%L5ph} }E%SRun`3h{rh8}SeD((p!U2aEԴr]))ϙXjE GOS2s=T,\7q[NtM\dZy,cE d 0C=ts=fs7**fqo&E?R:4ؘP<(wLnm;ر+_vm61C=P-鏆Rcf@LUq\שlL é\P'3cjێ&)96~=0xTpYJ G*tژa$룺r܊cy:⹺tNJmj}CqY2{7G MܻoVf=x0u ihɭ]$gP>Uu|r'9?: x?x99+s0BoH`P_T0 G㜚O$} Q`),1)-90Ba4aHAhݠ$傂L]/@gUeV $Ǡd ." ?:Tʖ}r$dW!?6I#ԦQܰSml =rJ~*| Dף'3GX|(sn+xG8G+I܀nH)gI#5' ƫ뫫B֘7ߣQSm7})1s{}4Jo}uFмNڨArgl%(X"q7sc6`NV ϼEL>ִdsB1Ӥ%QI lVd C4~}+_mL5<bvz?}e`\WxOpHӊ,>~]n8ұN"$~>jrqVTbeugIҊ=wRq qkdYE iY1 ob?b* [Ȳr;-.?[tz H l^scܹso-@0qWJ% :tpp nuz"zJ\!o2fYֿdo;m *1Viƿ#BN0|HA8Yh--1nϏ^p ivi7`\֊A|O&q( Z^nq_t8߮}_Z])xE'ݜolXV;WGZp"/3rnagZ[e6p"T 1Vkˆ?c=/Pi9vON/]"gz*bK7o+[b_2pٽp Zp;lg0}"?Klj|Y.'$~Y#KJ'tc_2F=?%[񲢪gBnɗ@-{€Ij^A6.#;уeqA7#I̛و0;jsmM3LxpJltЃCWr8<rvfNŊ8SԸF &GHIsnRtNF7EsiGAg+++LdQ~'*-.2=[*a(B S&!T1 \#T|}ŇJг>󾭜W :w+cs&P~'E }g z}nwhBKXVd!$4))AA]Su] WH ҽwg(uuHOkFXxu򋬤*!*l|:~ƏGLkr2g9-4+.t訚Kuuf%˃E]'*dz|yW` 1"O֋S͌z|HfCŸ"8V}(\Q$Q)kKYOwj]S {\I]uqaxݹsM]&lyo_^hg?{Dг@#t:Dף40C.9nRքA` &ɘهv] 7Ig!XgQyr8&2X>[0xXswmMcT 0[6666뉛0 j7'bZE2{j}Οyd,X?wFhVgX%ڒ#B'j,޺J"c4U&FX䔎IÐrED=C{7YwW:Iza]QT-2\CZO:I nRE.U Lx %a4:$61eUYY՗U8.)U~ (9 QH.@.Hsru9$F2(KxKHߒa܊I~着z lvcx#'T ^깖Ź-%ARa:xVmX Wj^6TI(x˹e FAD>_p{7^zwL7?=d:MZ80-]kfLP*7Dz|rGe'Lu1L6 `t薟gQ_X7l[(C'-!ݒq „jB(^+-(T?kF j^$!NtA#8phH#d9}%įrmg?;|+74AB4Sp %&V.%ՍKtܨs-] Qߘ&Y%<,$IAosFR^ڗu`tixzxTr~?^ߔmdx1j-£ }£ixtug#X'79wbjuK| S7t&[κr3b!H"ǍՙK1`fRɲI,$f1 VJ%d9 QK5av(XV,gk:[N.+~#6J.ހQ OmRKX&Ua!&L6f>C7*7>e1]~NQREǥv0dUZY1sn](*r11`:t՛Tw;)-NGۥNS.O /KWaQS4n zx\s> 5 Btmvnt?Bp="P5l$pH.OHVt^Ua(U3%nsbe TGʢC{*Ӂ1lp'W<ǵ/~Ň (~ noэGTns)q($#Mv[.[jn!95/*H$iuT훞ۮمt73̴J30 .8v޽:|PgLizh*.^RW?mn{jSJ炬ul!-K!9vf ZQ`x.)a̩:sx{]|>#iBTl[)-@6E{D4_TzX$DLtE6gJ/a8%MŗH8Xoin%eYJJAKF. ss\h7M:-[~.ڏ X+{K rr܊ YGtq~HYU}ȨUOiK{763E TH;v#B}NȾrJ>ǗLFJ|hnO(7 2 fvQC&]i.O-J:'`9H>Ժ6YkWMJ)R_ rMW'd󷮿zK?xm*QR)CC ]Uc48UBP~z:*>z=H5I(ut6R-V\?)InOY-g0$Lo7* /I;} a8~-ca9t]WmP a.yP v[;(2dP!$Ų8P 2veq~m:3ӾᷩfbɘBt˔|uɯI/x 0F %S*M:^;t|Lo$$cVĜWG>hi5&W[_0 Ӗ%Wt\ES YK\Jnr ZX 1t!_v,y'^gpp-ƞw3Ͷ7D/3p;5Ч:>68[z4f8ꃳwɶ.pöV܊ͭ1b&4]e߳}/u}mW3>sJeer}+!IIhZ7*pLF}atxUU 0@s2C7pRJQ=U. )[mԉ՚$#5UYm(iŁ)Dfz|,Vz4 ;t. VZ_T*E2RD0EQ? ƖE`` xk;&f0T@piY C!S@`B:@.:y GLWV1 [LZq_XV"0^O52X%Y5&5( K\';W\N,{Z90Qu}ŜQVEx;ђ{2R[0|*uSQ\DGڋN[~ip>C5J>k$(n=F)Lrh v 9R鱴?рOn޲%fr)8}V)vi <}un:v+aܹs'a$RsIt$6tHǨtӣ;KtE+嘚88ִq{"  07\ee#nđ ϽcXàgu4 >={0(Gg[bY=UH-N ҥ Ӱ_@2'YHy8 en[$8$ #:7񼾯1V54&&Ԫ2 !*q(e^iR1j7( [jXS[ւD|8_VjUaՙ:U[@ 1VCmb1oTy8EhmzAPeI,(7DŽ)"Qezܵ$ 1-}x~ed3Cf9"H5c4]Y,XfnN Lx4vƘVz {E&IP5Ĉ5뱖(^'o/|ݥޝJ%ǽIXטebٰ`1D51Pi1 Q i !P6m_ñ{w6N#Y-5)V֚^PӴ[c?a _+54}?hEMS{C!YLW}˦1A0QHԅF<;td'ek7%J[@}s6?ă1eBۨa~(oq ~_ZT*%k`k$2ZpBvFI~bFv B Ѳ;

VBG9[R9`BLh6v6Ӝ]zx8Qox̕yH~aQ\ܔlXHGdRܬMc~|>3pg:(+wuP`<QDaF#TB!itA _Βr_q R-8Cя: Ded,WС;'ɝ;mzYXUMD$dF i$A d"")tOgEQ>Vdfg0ZjWE9A!cr7v޿FIuQ%Ye4 pY")10kEL?R" mB˂^{a*c6.?уݎPIX/aKWbx:Il% G CSFrKCxo\?p1C>yC2((6hj `PLxf|ѣGɭfu/\5EQMtsjXPyA+ xzBa}R>Xu$`=`1T[pJcsafP$ |P؋EB;B'kr:%1`' F VD'h̛i4E/c)˵ŚAUH<.3Մ<42=P Uԯ[{&Ėft%4h.>{~}xAF2ٮ-_m%1nݑ_ k4H.cC:EwWDq,G1##5s1*scsb 1:Ґ' ̲8_@9U\0 w\/?7$Z~6& Fh;3Y Y!x> 9csD!񲚂>?PHBQ6L@ML|?jI)KQ_ Y%J'{c56m|6ԏGDzȱ| lt z=XVO#?ߓ9~6.S Pi;}Q4ĸ7ai+xR ݆$.Ӯ48\2m_ؔ2Vxob<ѹͿL:չS/6{Rȕf[S)Tub8yoŽlJӀltKɃrYž\w|!g#?="})XnlHF5鶬3쓜9䤖﯌j&ͦ'IV|+zt՚R,v~T4(J ^t-S5[usLB&5agf #ā(jlDɭB*]'T]Wt]OC6FrhM9I}e| dbUȆ Ia{0BW[}^~i0g~3%?P YRg+ވY@7נ j\(X+:Cf14bCˢ=l 6 T - ]sdN4*LɄ˜߷G>Eg{P.ݗYJjބt֦PB0 `8v{KQP>t:ރPk[~*o.ܰϪI<߅7V"q*ps #tbѕ ߲anDOcz˛[JjZKݖD'|Njff">QyNj,ՊyQO)%{N"nDpA5 (ECubsi'C&aI7@s<.ak>!6ބ>9ax$;J5.e]oݦN+#iLIzr]R˲d11IGvm'4ꋵsLSqz.ajuyV?մ !:>${k6^Nz+ zkB-zH"\.Kȥ Frf.~>(6d3cّkK Xr.)B4 (?l)+?JopUqt:۽~[7z]Lġ{;up5$M[hE1UcKl78c2fZc71_?҈!.$] eE*?S:7xnkAw Gc"-aE [0Dh'ZG%lhDd'KUuD&n&N74 ` _VOyJd*ՙaӦiXoDƆ* x\w^]4u ax'X9hXuI-.!GhXWэʭTO+MNB+$WSl>$ Yүk=*pFnF̬DZF` ^5m0&1Oo(=ƚ#c^rt^.K`cf]wtWwt݇z.CPfIE|6셳rU!P׃%y@6x^z=%//F <<r00 FF؟rZiOTmZjʾ , tHGyb}i[XO8K.'+IR=تvP<#8M#;a[M4eOmm  D7*(QWu0aO)]JGv6&u"4W XU՜{= wܬ8 i|V\xUWjkĽFs>5vu ]1BX# W.Pf(EZi;ͺJE8V;^ՊT4E4a9oz6qۚsU߭\Hq@Q_˚S]u]hCyQlm*]H(!:6;3PεK?8.EQb<;WQ漐.ϭ2)]}ax{=j.XF2iEP# wJgClqfw8JZh,ųa ‘2lI枳6 X *c^QUT_F_C Sd˖(OwY: PZOʯG+b˪"'3 \uacPgFSA;/m- .R\-}SCH2ΪDꅾ6<6N?.mNg~rKCOhH!aX-F:Π|rOB3J|9M:Aţ-ǭwɟNi7ѐTQ}J8Puo=FD?xТ$[畊rAg(B5_H9OnvqԇojD v?}}@xDeopi%dJv{`< mdqA};"Vʄ[r)ɏC ,FF}zyyy]%Fh:oׅ?ދE"I9RګYl ,RfY ѱu+1 ϨBe)&bߪg)}hRRڭVo\=̇G-0‚++s,7yN۲YnQ Z)OZ_+LOw@﫷+4 pD]ڻhW0/矶\=꧹m0(ڝpA_aQ3=p:s]Ve3m -U5PU([r)OMgrb70qTư3@jm dRM *d% ڷN}7(*ӶNF:>y'+7#aҕ [-kn[Gdt->O+(n} !7GW>_¾Sͷ8КZ7u.ZdpXe"x !$q8kuӍWe˒6tF:%QepC,9ո0_q3U,@vΆG0B yِ*6:v 56;ͰcqXˤnw1ѹXR 1A{pBuһJX$hy۲^ansnY!T~j;uќ%E"x|i*pD9\vz*d[@Œ>Ԯ$K6 %^he'kJiF)ߓvyAٓa6앁͊2ъ~,K8x[ڶHب2ڹY0<.5 3333EH@U[C=C-N; S6X m Z5xک a=S]IZi{اv,W2i Ԡ`m1X-&,ၕ;*yM05jE Q4Mb` MSP5Z [`p uBJ&oл%jWƊtC_oBǽ ݄>N0CM+(;·Ξ%b1\ 7- MJJQ~%ev .UQI-,|?&F}e&yr&hm~ ԐG0Ӟ:F 1 )[SMV(ho 9wvm x饵9N+w¨@GL)S)`[IvpR) 2p!$cN%@zHk#@ BJ8-IOlϺ™k s V%Q<7T.O_nuVۺcS8l=?j' FQ CfHMmh ?z6΋~l?!Aج.CVtzyrF#]w[NdDNJ+^ {v O QJ}S?>15N5vʿzh:1Pk8z/71ilV܆CdUKf &/Fb]!ɣ,-8Voy>ߎvG9$e[g蚖fQʝ#*ck^Z`DT00Ȩ #,}z%#M:0CjbzҊ3bV Nc?-ϳ}S1@ ~.T8_?'.m*b.WþV:z5B]&EzQQķf[R:Z:IԕJ!N3(żW]sl dL0+°PP{ :7IuuEWa(*7#˦o bp˸bٶUYSJ햮i^c=P%-E#Ak_fF} 87I=x^$! <'AU)iC8yc,ʲyb+?8TKP6ul j |'}_\ld(йfp`~oL !Z0Q./c i{4ځɻ~}_xb=Z܊8c e iy7APm'FyLQUʍh=ai^-Tz=6̱-xVpB1MP\V?1554L_qȩ 럮PhPZFw z!"W_n87Mx"ԲK鿂-4öe{2ʷ:NѲ,dD?t5oSLs-Ǟfqղ K3~D @ '?zs6V,uS'hD!l͚ˋ]=0bxGA! ~˲ 1'4kޤMEF>&eL3ڽmLbF7rU5֙]_ИHVo$."`MeNb u ܐenMVn9=)w$K@[gLZO?~ ! 2K%Cq\͎W8*iy>o}0D2tz5B2/qD ^Ui'(XԲu`yyMa"HJg;iygI3Rn*zMSL$08_{`bAoorT_U Cf&꡻wb] wC~MECS^-52Q{`E.RR A%\**>-`/ux͖˷^x\KKcW(7ҁ崷.ű Mm=׏i͓7'hm amʿWQH-IK,7jԐcU sŐ:IX(rG=u⒥&[+ +E1ϗDE|YZ C7lw4' @Őx%2hmiP)OE#Rh*SGc3 gΜ%/|3nfP,m-zSe'(aFyb}upnoW/?J~k eP-uS)ߧunD\ SWHwQb[]D[?Cˡ۰jѨV-ЅyFnTvBUK@BP1#/i $@âz\,€2wm"&A }l{19➻oM ,K~$ԛn .MG~[:KV|S2&0"[.D.vkڀg+EI#N(K^. GO$FI+y>~hGЊ a'>m˱u/:NhʢP'>Ɏsj,?]a+Zgfq_Us~i}F!m6ݴ1t= $AG8wdB&sWNPś+Op]ZeYK*2kهn@5IXqh < B [)MYLJ$c} A whtOrn3nz曭=ElYǢ]U]fS"(++wK,dZ˟Liu,dBTo*Φ!.3r^oNcov66@M#ZIXkC$+Iџ vdo՜RO>$_攆B-T$o0A>N=RGz|dٗjE9B77f(0WSd% qxq~&{^ʭj3kng}eY'Wwah6>D"lYP,6=K4YD_09\ (Zq) (2C 0rPce 6EPd)4qrT d.⦩i+$ Lvx#0۸{R*#eBfh8RR]ź2Tz>zy^C7^I52d4fdҊJϜ!w Xl) 6fff$,ݢiH3UۮU>[ K4g <8<)w4<@~%$  / fٸƈ:8^TU>l)EzPii uhjRO%b`l Hi]``Əp:ky=9NaDOq404q5_wN/N݇A.T0\'w%W Sߪ-Jݚ=˨WNYx=>>O0 '-UI[b!nRL%݌X/ CY- xؐzI@knŭ,Ynluޥ_N_bv[eM_ƜK4?xB\ܴq2hdIYT%Fr}C q㭍8}M3H8垡1} ^>AowJ&NqvqvSž˙uc0v8Y8%_0P,82,]S],XSM!w{E)Ͷe)"\yE$Ra~NJ`d)Yt5b<ϧv>3z2$n(0}}À?@}O{xߙGe'GՀAxlZq]hItXcM;[|`:n, \A+>rå/&cBm|Lrk#*EPN؜ 7p.eBbp+ pJi}yHCZʹZzhۓzvqZ%0v_]VX?DŽضעl7RԏZv9dMĹ7Z+ P 3Q% $[Cygd+Ӿf:Ʃ)rj݋uצEA3,k1n׭L-` c<&ݤc`ْA_t |9\8΁4p~jjj11f`^#?fS֘N{!ďލs(bWWZ5qvPMܲjqͲ8_5Qx ZAk$I݊ewGcHŽt/ᐒyq86~(xڋ@2eba АEmFζ00{hMǻ0`Z~8Ib),gw';PZ װU]m Xq;)q ȘX9Έ,MX`'%P*ipJjZ7WgܬZ[RgvXds[ ҃DUcH]V>["5Hrd52^wL"zJthkV&2lFjW:riE,WhZ0Vzh{:vNݏQ<ՈJ0um0B(C*n <+D!{4]ՂS[g'E 4dC@6G!6㬟1QmKY5^+h5h4u2p a0i( GӰ:xs6M9.F4vK?{v==Jh t: oA>)ˉ*֝p(?rurr=G4JlLĚjl`n"}i!%Tx/!{}\0"K ~5=TK8*Q[3'@=3'J3L/o`op(^ٶos yЃ{t݃"4F(5hQ\[ؐ.JsX='Oy)2~H?9MS.̈36>>F71 vxWA@e0VtFi,u!766|FbKPYA[2*~Qȍ/4;;'q/3u(g^@ kxgg߅ԍ?|lVk^kbӒWGSvkLNAᢡHV%o|hJS3mM @xWhp *(P*Gշg4nm@)i4$5UK3RI9:f/ d ;HznjΘ| J͙RCkd%+P舘Pb!w 6 ZYt 9 <.Kz-3oQy[׮68ϑZFe3b).¤L;j:J5,.(ɰ/8/ETBd)BRH{ Z6o^nsE=G]Eo_ f:+r3 dVQfI!hd9ewΨd DEp( BR-zK(3L3G_ZF!nBLj=͠՚o)UeBݠǾ7,*d}P&u=QN;c^|:U WZB7:1t3%r "RHy 8…xhd О)й g1k׮ъ8K*e.<0d?1?h`a&MU;Lvqݟ8{l>М `ge[3Nwd*+XqBCd:b4Q #!#YIM:1Q7t" Ż +}!%O쿬t3 F47c4QdL.RI &̓ǜ~tU:Q-OiH# (AWI\CS($ d& \a#,rՊϺ^v&vFN—v㔽|` eҊϫ W,Z;l//amU&9?hۙӣHlf~'yP44M3XZٷ{^r#$!Οx/q“iK|AX{\uUVhvRѺ*\4({ylUP-]Wj in)csANdAUsaS m77 !S]lbOge/1_}W aXqIr dv+^NڂMYN2Rٹ7iQˢd1-elVsl۩Eܬ@m 9X:]}x5wihGTk>%@jJX'*5@^ɒ30*#qaQn<)ߵu-+ޏL4]__5-I]gA0+; `}\{)cp8$3Q?Σ|=zM=Éo' tعԺҐM5CQjI;tcEF-֐d <`+PJv_<_k)5Ru~,8mr@Uyy1K<]t,>ŗaӟ]bvdAAR"Y=(?KRʸ!a-XCu `(bds^zי8NqBOʖabenktݳgwSԑ?ڲLU۶`IZ8y<ּT"l\eةSL50 5?/e Um۱e@ձ1jY9qXTӢizߜ}SbmskF[ U݃ES-U_ 98A [U`*oy_/ -W$:8j[g}EQbAJ!8w!|i0:;7Xe wVlF$liZY\\W٣O:X= c& jd;v(L4ݿ).)ɦx7 xZ] jx/xxw#oLYڂ$4pqFQ:\fEB(gB^ľKY |sB#ח񃨟- 5{qsd7}2b@q^QJrsfJj/hB]&yc_,?kd7 H[[UUH*'@羮jSYׅ,)(ƮS6,|I[]/ݲ>KhoA 8g!a]S {1'矚u̵]R gF)5'~rOjюNxwV9LN{p! ]6iE-Hߧ>WTaNyLX 'V[ }Y,VjhvҊi()sY ҿ#rʜ/shpnbXO KCq?^r@,:I Z}t 68xFˬxXxiaسYmݬn O t&,/ZV >F;_?:-<3#ƈ(:!Zj arש︦ilz"|RP*/L&UFru:|聽3ˤek?ZJMV*Y[_Am U"GsBBAڒ'$N,;O*=y4>uZ:98d Q^E*4,׊spxGu5v)UewO>Z`ä $[kZ ̙soLQ47Mw hZE[qwݬ *jN3oOQ< ˽^QW֎_ݨЬ$7,$DksÑ(ĈX;E-eةqfNe*b.`+$8nYypts UG+J.}?:8 'hIC= +xr^>!3t-WJ_k"W]…Nt>>i&tv H΢{O;q|C6Lh֞3S|>>^B?:?xt'rO ?VŅ?ag}CX}͍NV9pTni"D'F7ƺZ:He: \-4dĽZVA{i$$^#uz5mt erޯKi&Jn$i)cӳ NtḽP,ϋNlH{H*W!} BYR M~aF ;N{!"ZǮh7z+vͦ/C P\UfC"}dA;JE:U8bSYKP^S>WpJJnaE=>*qSPOI9F!Z@z@Wjw6R%p1Yi{nV܊Պ ~rLOY,Ji@H $h G/ܐ6 ;!,*?Mڦ[2ιK-&v^Ѕ&Ϊf)Aҫ:T~L H"p̶V" V ɣHwNEr̺쬖aEŴv/[DDww z^P:Yp-U8̳^SUA$WIiAp74nUOo_m|wE-vZY߷b#N7]b*~?۞ןpwàӆK {tShCH1$$%LG`8N/ w]ۛd% @dL0Z$,.I-IdRR`eI&Sv-md"5;DbAEܔdʏ,w1`~U?()' q0N΀bFnHmN"I_/!0n)pѣGk=zT|P֎Bx{Q1W>rJseцf2Et?cDZvYB{}E:#=p%r$"0ZIZ&FHSY9K`֝B)?z$\)K}aӮy08"sltڷ{D\OsQdύO54*?tbdws;<$5le1/Dr/ 9bZW?65>(n4{pb:;9FR82mZ+/dpۑ]ʯU*":Z]GM2BT~V"+ 4?lS%h} Y:IBDsma|  wIǎUy0B[ 1M̅U|(-].ӎ2ԉL  hS$nS7c0ypO]@*#g7n*U< Y=C8 On][i?iʳֿD{ϴ^[I=$Zi/Apz8Ar\q7 aPXGSJ(inP~I?ζ<¼2 nET: R;r&ÚVeRP7CF`QE;(J` tFĈ8 gX"疵hYSEnDH|ɮXɢ XUv.ڋDFѧ."_\M{:WvMDAEA7ŒUg .X>@¶?X3`&'B3fXcnyt{'p8h)`tuxQU3k ˶ ;ٻ(^=r{1#ч =w|uVUYbsPzWݨmuN|0YСԤOyMMm9|];&ǹgd[X$ӮSٿ`YffX Vྤ:s ^ҭfŪFaco벃@h!Qanfx3f+˙؇3ڰtAГWqYm2R2 :V\Ť@"erCGk#~P8|m/BcℒURu|IZFRPZ tu.Q:d 0-MI5`_?5<377&4MOl;"я֙4vW^$4OHAt]j'V1|wMNpȘv@;۞Up8*c8SA9@b kZYMW,u> SV)ARtAz bW"s쌝{;;4GM5_r a^|&Gawv(eۆ9|%y6h>˰SS%Q`,F+f$MoJiL>t B]ju0geB@{+JuG = U)Ɨ.d.Ͽp ~2ѦͲgB2I~SZdѡt]XbWi7{ ֟÷ޫbq.yGD*9-P įӴImk#Y.`h}b I'*{-ۙ(;ĨE4%4a;zؚxJ+Yrc`x*:")S-<0%vhHΕDz, >~@s˲8* t|nc;WSd`ep;hc0$_[#Mʫ[ jJ7h6Aib<'7XRJSI#}MCrg{S}S\(_<+6 xw]#0,iB7#S Rp4UwOr9-@:.4;cRhfUae$+*:;xO\# q}'ե Z)7.)*=y"k>S0#(Xz: 'ePj3TT5BI]ﮜs-`3*@d<|XXO~;#UQ~WٍV-,m[k 9 5Xr>ec>ݲ1I^kpGH%,yVyA4jb0";ڮ^p< hڼTE.څGH=U9z(Pt8g$ B֝<~6loW WmUבKHyCwp¶VeBC',2Pܶ }8th[uؔe;!P&\z }k^*- cUd_2Հ+C_I`4rhb!vįov)sJcfMTÔm>8.\]8(`vzlsML'1ԍU6 : $Yt%2QC.D0'P~0pJ;7`R~CMp)mr^EъIM;}t ,zn v*m4HZ`{L6]-҃t=w|f~ʔku_vsOׯ|9jc=TD{MмSIZǸ~S|8Q|,M#]l`{ aX "Pz^+$1<#-. zB8ؒƛ\`IMj>" KC4{U[9md1<{p;QK>ZPmFda?6u[+d ÷&:t 1;'*`(kq+7砚KVb!xEb2f-M,ƭ:"i"Q{tMӊ{n ȋӑ!~4h670GZQhNlEDRgDFd޳'<3`xٽm=I6 K}gazeFBHDzkHg,FnwI"q2)^3ΐºN9cl"+鄮#Vȅ"|efSJ}B¦S0py(wEנ[)*'i7ETxgzdtqcwvhĖnY9 jz.2 'mD˃zԫͲ8?c:V8b2pJNhp@/:'V}sˊXyz=? o1 ^AQk,M<&cclg¯}]u±i\_m\:YAԃ6TνL9#dki/O˶ ӧggrd\œUziueL*w#@0!5# ݊uf!>ޘS|Nv$98Y %+Z+/ vvS?(&26;e,rܲ m<4TG"Jx)yB R0R%Y4gtw[6ӗ{%w~R~wԏ uۼzm*Zۖ([5m[G3jSZ> (.cAP |1۽^G #*C>ǮW;/FD::AFj ab$rP7>x":#7|ggNR@RNhFREݷ-?,| /p1eYwa5qo/Q*-:$-Y2,s]岡FlYEFa8+ZyXUa/r| Hڬ!_%Q.8Gj]X&ݘQ].X Qwp{_~E:U7+{`pigee8w=O=!^k82|nJѼL "mM-JDW`8UwQh+~rn"D2s'En\\ayV%NG;^2uZO.i캝S}n1OZo?ΕSaٴ?8밹 D[jEϤ.t.fݹEohE$!1G7m? wP/\֟1z~z9hc/R,\$=6#ZĂn-'LvcIF.-T'3@~ǭuf8up\`ј4MQ<}pfxmT# .s@נ[hם*X†S8Ձ>gzCmdLL_p۪:z6  Plp[KbˉWA`iJB/̸E {ewJ*9SIK=vZcmc1G-!xrO~X67:|]5?S\qFԉy-P"O/d>u*h*yw[PK/:~K`i1"p /8ecAn:j2 +B%Q 7zs-M6n}=____0 IB8T߀ E/$i0%꺢zBڹAN`;`N \h0ϾFGg^S `"{J6RuKw=J50~;ЇxH8$P`f,k$89$.wi r' PSzQHlgMsh}e@z(SaT[qawn}yHJ!E#y)ZlD ()cb:eŵ_ܞ0*(NA@ z AajӮR,;`˪;2^y?U[i/6"ݹ](>,aOKnb9Gh?mXu /Q2>>x,"Mt`GoåŠhw7\Lj gzU]c%X!:7n{*q2EfO)wL 3lnzK|%QxN TM+nA =.jw:(YTEJ.AENiMܶ`mҝ\E臘-2T,Pc{ۡyacYpY#Q#*%>m{CR)O0"`4L5hRp||㟫 Kh>hE%(sWK \gb=Pѻ?Nrf;|2az~֪:PiL+YgS>iNSOD0_Ґ')7#O)9vrXro )ˡ2Szc"J; $18+O ?]w4 + r#(mDIwȖ|ԥ+mÐ_*zEK_ ~a.8+0Q'[ZĄjR.x/sxĴVb4L<?Zo´u mtqzv#.(樽%g%cbq4Gk$ ΍HJ) (Ȇj)٧2|[Fiq'޺>V N ZƄG9thW;5skC'ᒆ[YӮMC;{Fa_RRrRr)T8JŸU6]d@]Z҄4mH%Sm6a< ^ mnGKoͦ㏁w<unel| uNZQzPhi,_np`N %me"Zacaʽ9{GfAcUv0``PI sw&QZc$BM>ɽ /`>Cӂ=~+Wl]MSWu>D ҔjX}fX*u_< (F?Ta:q0jgfQj؋FYal>rۻ*mP6mC5τڎkaVkmժ^^GfT/<8ۺzy^tW_ƯGF$;nq>md5cpĞ궃 >.Q&T:~=B18lODHhRIOԑKNpFx<E@:L'ĥBw^Sbi^ZTxq7Z/Xԧ95ed.c]9lƜ+[}4_Eŷ " Of氭=Qzg# = zm0a3}V.@O-i|>#T_KԶ,'Byв"!3c=VlAwp ~#4Gԇ&t#O JGzgo wus1fðxi2{,8s!.؅W<CpL8^ )J{qzBS Ñ-)`aOxk zBƨ}Y a1ž$$n_}go8XPa(êIYd<iSӆ40{0PfC ץ:ӼK騆uUe]ݿZ5ˏc[Y5XEj^n@UG-ǤϹ~l[&Q!kBQLVHg:Ѻב{ ([.-zJ$ѓWHٯz5ʇʝy{ˇ Q"٤Z08yGAU/`0@[: yFuIIQRZK k S?w 6)SrJ0v#QN|gjD5XЋcy`CR5r )J{]M ݬ(oPjhHR=XMOu4EG6PA8(.cf+zE_Ʉ8$oP9pC*w[[s65NjNj$m L$/Tȥ:֩EJa;aZ G22E`OiOnbW09I}J#ƋƦ;Q%X]Nd\Í؏:n|ˆF)&aF>XM#ss\A,uyJgaF&(/xS>r9\.exT6bbłz'锎`l!e<w>[Ǖ db!:ODDSnLOl妨u:ib<FDQdeeOs֟4l^t~usA0krMdXgVܮ n91JDZ*ץfd5^> ϒÔG`z!3 Ӂֿzp?θy䯵c>žRZe}Dc"ů]Mǖ[%=c5h A֞lQn K=hg|wFWXGwpj%`A8v~>hǹM-G6P޻KMզ˙GK! 'Q aftXk$vtжyur9- ^eu/Ǘj-`l)av e&%9'Kg]\B/$PYNpkr-#fq.% [~'àyd Swj=xUN鏦w$zR;`F,[$;1J.{ecl  uU\׸}uі L\9` iw{)[\fҡ'o)!lw<ɏ|$ O. Y@1 CS=Wu` OV7_VpSioR@3'C>_b.WlclyB5ME͌5i g9N=8gVkssjTuTZOwJXufޯI`ĽDWlZ\%qj3$ lZ]vy?,onX\ \, ^(JR@ +/.33Qo&P4 DqP33]u^ хL4^alf\O7(RgO{\?}SUVJE~:/YgD a' t].WUK2ngJ0=M0ћ3츛zJOj)v'V0;pзQls|DtƒLG(sfik9A7O`3gVmziR))@1"Q?(tDJZYa$z=2a-gΥ]y4P 7)nM؜0o诟]Z'X+(`%!=X"7B"|^\ϐXM{zM !_W$# I"9|){аn 0ty)Rј./=4<Y-'f& |JjgKpbm+x[cPBGWr+`Q7a&SQ=5Ӊ[qi&J&%AՖd#qPl K$6~qT,fX +V,[ũS;] DC:} ̿B%' <݃ P_2[g넾 ;Lv._DjWݙKh}-0Яj?$hZ3Ofҫ)bqCЗsFtywݬEONfu-ˤqODQM|Q~v> ;mGXq~J΃q8$aXt~_%KFth5p \(>ppȃԯrȐm;`Qڷhf΍tcvLw>Ż1 roO^h~}PZc2/¥Ŏ}l?M=va(o TU<_Ől JʚllToM-3ytLӘΥ?#==m鴴2#xY 80ciaVr|GW iҟc]0{-_L,;j6ޒH4L|̸iG"8䂞g0.!Wi1(z#"o7SGm,8/O1]({GQ؎ "r˞BJI>p2= VjiSQŠdT EQsVV=ƱW1,u1 4| H,Ǖ$AtCA ;b*HT$:7uR٨a奥qmL]^SpI4$H´ |`%4KɦTݣ(;_Ÿ) |?x̘pc9i~h1S3^aOdW쟥lۘ-.IaI{i6oضLL&\JŒ3FE Xܤc,0Bp] z=m䜂ׯADY%V#D^Sp$EN8>1dY{4KK=Ge&7x}uӿ߾})q^*ډ#amM)HJ Qq7Ȕ7D!p ǃ+xE<i5?~),5PVUJӿ: Ƅ(z~ pW꒤,Mõn67v[RjOpBJN;;NoI51s*I7e$kap$ e-=)$Oh@>tgb܍St܎\h{9i #O [}UaX&mڻm"³lysn2O[p)߰ r;nokHPCk_06=l!E=V|CP i UUOھ^1M}!LXv<^L<| MOG'W7D {qI*?bjLb9TdvJb;)MW1 JxU,:9$p^kǞV Jѓ_m4v6Geaџ>}_hlo?s ǝ/[t`{w< 'zdWV/wLuͨ4Ba#YmDf` ۍdojW ͐8Ul!i[k3xyDN"YAR,F;`ۥ)Rv ] xĉ(>L9ysїYFS`h Qeу( w rv i0f^3L, 4||ۓ۲DB2`1R [Q_#z4VD U<3 v肱>o=<>w&HA@j4O{MaR'BL$tPHaZJF.7fwA?TOD(g˾73h6} I:S.UCjZ3]yo?y(TηmZԖjaJCYV-ۆ[lW$QE[޽g°Tr]T?de6—„6܇{A[5Ǿ. Җg'+`_iEU>PAEy!/A^E=l ׼{R*!kCTX'x@riW,dFգ'ZDe 1ײ)$ kB{qXaC/* ܯGit1W]sM hۦڥgVӠ\"c8vd~l@s^jnysV]hgLӕdwg\@ݒeu0 K$B$NrtQ?Xb|BxFY&k $A ,a3yZbnh9~+#w pI[jpA]i?7Lv=Xi)KG| zzQ7иYSUL1" K!!_*,h}ߞછn)wSN c!؋o, P:0l64gL'\?fAH~d*1ܸN5XnP+z|SG!@)*چ!#I; N7MqXI&D:`4*RIxBV~Ia:K&i;V305ͽdg{$гam_D߉k> >1sD 0&_ Rc99~·Yizt]9~M9 Uk^/^?i_go#!n)B/jT%mbg^P!ɨ~<"bz'DnZȚ&E!k̿=ir֯u/PziA)FO.لҾirW ֛2/';n׶] ^KmFnJj6 HޭW}C'SCHWgQ,!=,hTү_/zKwt>g ͲO'F|6@7rh٣d#mWֻcv$tPLg9?ڌlȆo~q -|X橉; v)AIx &tAƽRG'L$/it݌M07mAf)Jx'8"Mq]΃GM MGY9ᦣګCm$Acyr:W۩IKV衏5i EP vQaz[9x]Cn]ӆ#<m{4qcn2:F*:.oLxs4tҁ?5r-$%TViK:}Q>1t`*`y%a#"F-[ 3E7#8uZUN2vRQO2lF"~xD)(*i`s)B0$.v_ ѿla|eGlHlX V?>f1qc|mS+ҥnH,BO*.o) B%k!I\E0Qvۑ*߼`FQ}܉3MYc(:ϵ]L{ ^&zT`o l)L$۱m\<~Dɕ1AGJiqp^$}{3Lr4^[)?Sy,j@Z)Ol;L?߮V ҍd'pJ TrnCVCO{P+>F_)qu8͕٩14q*ș3qh=/gףx&R؄ CHS(b;Dllwvem[uXDg~9{S- ZpRS@oDClFB=M5GWN)&hn5+c*ST-L(:F5JG;K&C8T+68v,c۷o3RvBaɱ-w辵L:ڴ^EwА<\²39QruBbIi}V*v;_Үp0qX%y1lD&#ƬQz3S=r`=JQ.1"UsܜT}UY4Χ 9&MM0YxJVKBuJ7tě_/3*Dq!N=HDHSwüpqQLXW=v![%٨X}d pwLRҧcِ/ב:+ ^) ӯ"T>BxXS~l٤kp?4xY_DQhd7XS)|i۱576PiPpd&o$JĚ!$u~jti0vcȼ*YDzB[/p. `dsx+/>ڥg!H )GܘG@t*u=_ 4W8Tsl8I;TaJd˻)Oҟ ,FVӟcd+-Y^o*U tN0]4`L9E#)^=$-a9[eBO`YER+~fzX9rRO^t4IG*i&$?呈#9sqF ,I f;w睲t=kkkĭwk,/ɭ9[!RF/T"!57qlwD.\4O!5N#3Gx*"n״x!@2s5gꁙ^-+&DV,Bl5۱\1N[^o\Gɨ]s]7s2lm= kї>UWFG3,JaisAiKsr#L]rjK`\xٮ#>mT`"Q=h&%(ŎBxTy^vaW /`Yv&:,wB)o x^ yg>w~ײmw}}Xq)5'h'!c ht jW] ]QuQjt5~.NX)mǜ9UFȵ=DN@:Ppx~n$A}sO*(OohVkC$[9 MT:7 FfHAc4"Q:yf` `r#>~uߙTVEui؅˘t tĊ9Dc57q t3l,buswZug3-Ak& ,e ?(dlNɌ3!>nӄFȵˈei<[ `$\0ePTۜ/UUU6r%ӚXfi:dU9S 8>ؗ(=]\!+aX`%cթ T r6p4{헶ڗ*a]5I4AD=?}hzzZFFD㹹8YBa BjUU]bl4Uu;HDg?F l%>~1<)jJ?n2Sh} -Ay5K(Σ:2)מK 8/7rc/9ӹmܫϣ%י N|{ ՛G hWVF]tA|팄 WlxO:9Tj6 <C?)euյ@>^co\ݵ,g8&$-є O_QUM*P՞W|a[4(!nzQCj|H#m`:ɔŘi0+c\fmtgD!2iH{ؔ J z;L%6a/-8;kz Nh(QaUhBɸ >#+߱p!EL,CWЖIB$qAt&^W6KˏvZ\G tMК`~8MşQ$Iz>~G)HE e$H\} 2T=jn:tHwRQ:20TC>ֱ^WTlLL̆n"]h_cE򤄘j}4{複뗩Sհet]ZNVE#J'hzg ss]7eYUߣ*Wy]Gd8 ~HD3x(v6.][P˄p Kڭ*?˥I @,cA3GE+*{w̯ ~([a/򲬿SDƽ~gc3LXqT^HN"/DOIrpYR_5MWҾskܡ7@b ҋ;ݕH[<'4PP;DL1) "W?ZހPqx7H_j $l{^ѢYo454-SsSn0B:o6ۜ0\ M:dyK5p8G]of^% #Ј{H?2X%NlhهbZXkR12MQN9nw&zJT->n#䑥yU谞yEn6n|1g c S7`sdNX(WUoHGw< pWS]5Ӊ%qZW)0xGnBxy 4]tI⥙jCc5> @&2\aJ$N HTTITۏ0'QYuܼ^Ȳ@HvDN% Vǟ7LN]5Qͯ>uYaMk#js=3q5Z7MKL҃kg^IRLx#.@z/.S32z|]_' {t]V 1:'am0P:HmM0U赼R=8TL=$9O)2OM(i pNf$'ss:..zk\vUXT7BECߥ;;f/fP?qN§d;8obIljet݆x%qu>%+x@OB>|y7޵2m]ьP9vjd%Ж[V9Z]xfT.rKYR{/ OIt]@5ɡ`\/YhsLIXk&ʪ?/r7cL56pc+s۽"Aas 9?hg.籮b9;Y H7׼sHɺ~@?$Q9{g>x|hQ ~Ky0iw/~-u^mzCoFUG滕r6AY%I ',hL U<`9W@y49i\ppTQh2!4+ Ue G_2@ >P@Az;%!D]h{O!>P9qh&/!(lzzttߍB^v*&PV/!dJ0 z] }Lзm1ahl 0WWR۵qTP`AB_^3A!AJ}Pz{0R %ރ)%vgƲN7Dc EC#;T#To:\M 7E<-*y2^Jhj0;O 4|*y'ғ 巾RT 0_>w\9 P0дQtI%V4Aѩ<ũ?4Mz(b˲mliRMeY0AI6ms,%qb*s}L<[GhY{RG9.V,+b?76\tZo\H)o~줠)n!M-.Iץ1-Ʈ`2v@hiX/ Y5JL[1E4Mph^6 >F 7ň&amcQPUӐUQd ŰH45ǶE#D—|xXe>YoU~dgZf-XBo$u,\IBR ^4bQ ZlX+ YfZ+tei*63Ha#< ͧ` Q6=zR3t$JK/G4D;We h{k> W?\pӪ8p*FRq&-4MI 7#q- w)ԺowMP-ޚGy=lIt&:]y! o]ڳ”\>^}#ǂV^Z=j%u:N[s nr w,T5h\nKVǞY{E>h?^h 4Z E_ qy(?׳RV3-:jM?OWDv>}"sC#3ORqN{cG4S5w}_:u#>4LS'5cwKm۶=:sx"@v0,HiZG'I+JzG ]*є4jAʀ}aFRʫR>񰎡6a>ׇ;c@ǎ;/+ر_•W_}兣Gr9 kkk0ZG椢$L[FZFCFjz&vRTo;w.6 PV+QυI m~k[GfVgox}RN8W5H zكD1$Xrc_u KWgz v)CR,K.[Ӽy枌rƤ-{\. |94%`;M+D`KjҼJߡNE<8M- LnkNeɦ!wPlCN)X1!>uDOxHCyeҘ*O*íhZ=7BƗoH窟Jd$ 9SU6<|pWϟ?ixʂ|u4uυ!~s>Cw56qJ5z=G &$wT3<3ϱ7挕xg>_.d?,>VrUC>VlY/Y8%^CSptŋ>(˚&ˋum4Dj O0`Ӓ(*$Q%$=.5<ґ,3YWe;@Q$McvVEg̪Mt5 l:Mi1,ͥF&XBhh &ڀ)0fQZƻ|k(m]]d* l |wBKeY% *B55TP52SZ,LBtk*pjdD)v>o+Ld]cz[B@-ѠdD O]1-ЊGSJgC]~ӅEw/31 ?vzO 4 4K4$ Fsp/u /=k /pkef8_KKo|M]w"hyg*ԗt}iu8N.pg OsLҿwZyZh!nz~k\W[${8OOD1gK-[ޓ y7~c2jYk>6LE ^%L2Soms 2"2(T ;JE?Kz2p4^r3@e^zMq%Ӻ3Ve:nfKon6}Sy\nëJ$NZT|j2p;0u/*7>d eaS?4E8wa5mfQxMsՋRd5kK?τr YNz:sD~OǃPq: W:AY\LГ\6 }~Bx09fptĎқxɛϴ d+PtߗAN>'!żbS6٬SxZy^{aVeRꕻou=Mgla~4) nxL B!1L 8%L8, bl#6y1w$I( ,JRe*i;4T '>Ts0M5B1[(B]ˆg8  %-~^y E޼6#CZ "K.mAkٱ\uxsW{p(xW8|x jCa] }ew&&&A#a\ Aq#EOԗĻ-C~UWmśU_hD^2AgHMsS縿v"+枤c0"2C1=I @TΝ,q0.7M(`\1?B0{a6666a_&v|e5?-F9?l ~iҦ#С&Fv{XxJBKl] >ZrΛD֜ ;d֕&`sy}p @Fz51u,Dfa3V|_Pq8!<&pJtƥ< LL FͳΠ5z?z=>- B.Syk3]ҵف5>7\0M| )]hz}/)Kb~RoKOj68YvG 6%$sB" ?Cۜs ߋ38\$o[ 8﯏1/}KҡT6J= Xah#֤Z:XͥΛ) vKCj|=sױ朳|]`ݙ}u]wƩв3Ve_Jzq޶-yN4nṡa>KٳղL΃ y~$8kQLCCGȫg*4N=?^ e3ji'N^pPCS|(D%?1Y=0H3.\eXv21Q-jcjyи,24ˏ(47n"6x =8>[/MxsV+ ˺t! q5i 4s vP g UwVc "]G]txs z.! +@E~Ѝ{qV8N #; @cIFʥi{kA6 U]1%=Ò`.ŀ[w2=N/DBſʹWodӳd ( z,bҹGKYc1O@7#F+#$M]&''U xRL2׻?JHqƃ2FDK Hy'@Ǩ:D"s$A4eztVZW)$OBh"l!Yy wAfzn'+*m+W@vxm2i̓Av/v3QB#`>ix%n%v҅վ,62{/mO)ڎ\q9M}YU>i`H.c@x=S:ކx&6N.2r/A㽤Z_n&*f4*T%d%;=4i\],>5|Ӂ~Fb2Q (є~6R4+$f'hS8d4eY|LQ wRyx/ G1S6,DĘ Fi$(ˆ'j_ 8S){|7 F e-Qs~0OٝGMt7]fDa %z;{nq $Qv ;VxR"5?"0=y_}o0iK]Zry 4ϟ?~t <С8}!2SyW'4+o<:߳ ix]:zRpz9бKmv qBxarL8oyx,︰J^ng#4FB3 1w;&^ҁᐄup!U zUKlntin7=@b3t=c6mj7+- >-E-,HϽ(% 'iW":n; +q&cPNT7IV:|l4Ҥr: w #6/Ul@View #Apl #EH %R3eiclOcxMZ[u1B9!iċ|%&jS0s0ʳ0'z8Gծ.T%$)ks$ ¼ЎjoVŜ56'a(^u,o%Kݎ` cp!\g< ][<֎#J#-{@I3M{3hx;Zgx*(:GwMH9eRWNwB-荛ḿmQVVȟўI:;\-xq AM5\Ms8-uWsFu}#UMyjAr(4Ip+BːU!yI|bkL8'O1;O,T1"q㛌4h)lN88lo‚~kBB,eKR4pKՆaa8GaXOx1?E/ Wmե}J@X¥rYjj7QKF{چ,781/T8 XVh?ӝ-Wjlk?(Jym35M&ݫ.8TWn D-q،C@va5Q60z5:Qp!‚4OUujϔ9 ~_CZT!aÂʉǸ~"bQj:s]<`N98RUT[68CSdt }\2pgE$Q͐?RMƜ11k03eUwMU9TUMWWea'LXlX2$5n3F2&(5C JLR6`9KL;(ߣҩ&$6%<p}Q (7hK X]Xl}d3<#QA?!TO߉svB7sHϑF{~0|RHs#vFP 1e}Ązs'&vE{i+s==ΞXމ~N= >Pt:j?f'`LeubzڑeOvz;7wnIZ[^T׎JUz5ײKo2ϗڒ=|s_T`'8zlbhFPZWT]cRBrdGS{B{&&Vcʀ R0m\lVkv_T87jTC5U i=P>18mGҹJPc_A(0zOzok18zĩ6k<8M6 F}Arr[J6->~uʊ2Tu FRAR9WW:jjTwj.?|ƊBn*8-F=VEVwSX;LM/;[Cwc p̭1#Oz3Jatuʑ?D^~.5-_dթr>/)h?r>DiTV#;wTrF9@R#^w"/'=YR*ܻ%Do[N4?(~`M߅ڜ*NWkA0`Z5y ʲSaCUQASti}BkaBUrCڋftzaV>_:\ѿcTgNUnLr)WQrRӞ5pX"PNQkS>͡8{"Z&* %x`'oĚrkC-_{~sʗ/Š,k-Ty礜j|:-s}rj+ ~G߶,$%o=}LN<&w-z"^8E" *@Q,N4)P:>Vt AZ y{gYPgD)zmk^NO+q}RLԇ914Oz~k05g@F/fuW-kU~ Ey܁vN G H&aOB+Ĩ[Z϶'xBy Һme39;; r$l0?( zG5U*٨$dzۃ>!Η:4} ?uwt#:\,W֔!>k'NRX~5?wz 7c|c!ы(}GNxgN߁|0p\zuHO}T#$$Lm @I<:m27x f&G' !`t*Z\o ܐKtts&,OF{!*T(%`m= YfBK9dx-,,Q,)ykng g Xc聈RX^&$EӡNk[8c: bsx#ǀQ2q05x֚9<:ϢsųglD~jz65J[`A}@'s#[d'òg>>i8yR_^ Ԏ}}IU35"ug=hro_D+A];fb(9f|][ud>짔yޚ^{Xzv{P^|1+$%o c J OG89@8`uIJ(&r4W;`Y`pyV[GSضim[Lᑙ^Z-ɓ=5u]ƶ@ਆY-֬Z섩Y\7Ja9dӆc;Tŕ>}x&4>- dÐ%fB2ká4rcWmjchDXiޞj{OT:r)fq* _:lK2;]Tl xPF)ZtV6r۰Fʲ6*R{&}i=ڴec̬B\bX`;¾ !7?T;iE׾H[ڑl1&̺b1D:z'|!@=vμZ OjHjEN'd?sD D NDZv6F.nc(lh{6N'X eoJՙ(|"zgoatwtOL8Չ~ʴ967LSQiʹ\9LINbSgo{ix':=qJ ,jAqa-*@^YJ#K2Nq&*V] WU\qvoS+lS[Bp!3F,"1I\Ȭ̓8:ֹ)BkE٩'یY5EuMYt|`ӆQyѬ@>;f XqzMSS^N. U9>g/caItn+֚2? C#h<tGq=u/x)H2IAMK: >Tc~MDeYÉjXwf]jp]LMҞ;1B;01_XRvꛙĆ,^Z4UaL'Ǹ_Bi[nSZQ*y ѧ>-=l*┤:R؅%IJTyV׏ pЦ84JuBK >{XhU[w KiP,N# q?XJO,:Z>\Xy y QҀ8 K>Wk45{5IFaEMC]\gir/O\ ޫ2 `{A`A? {_WӨ ҥTKy(zsf#;!+ԊESEB(SPSP^(.Dt07"^_CǏ?pP%M4xp[T&]fhseٙ-k? /QpE y19LgB+׉cWWP7ZI6˷FLa J>+YQ tLٶs\z{@,3R`ZDL=N^W/I2ˉMOs~›9=ܧ}8l6Ǫ lsԒq1FRfD5B`@/M'#G΅#T9zZp76Gcwӽ_W)?3A 9r(I!%tRDxd45"߿BmOU1ͳ yaEnjbR}޹ivGּu ''''\sq-|-D.-ܿ 5C i)\V IT-~޵YހKq/q۸R9%JKa qDҿK깲ο&ED!nb{\u=qn"Fo@oGEFѷПA2( r=2rY~Ow6pe\ap/?-N0;2\]SQwyDŽΊu >J=C&{z7le]7sWN}UZcq/^f$mM$-&qBґ^_Ҋd!'Dv>%4HyGwtQRFi.*u][[Qҝ8O]2 44tcYog.)Tչ5I3wS~^0W%|d("|޴-I$+e[RVw*w<1c^KXQ".=5OW g.2~ ic EB]F"&_BZ4 ABPGr' ;@:FvHg[d)쓻>U'&F㊜(-kR) "u[Wk,:}!}R?*'{b 3S"|LQ>fi'f""GʺiU1:hX<~hM2LmvR&Ј~7a?q$U~NٵDq=Lúmm-;0؍忩ۗΝ;w;;ʻR[z˥~WAy6"<]k>e"D(Q_TD|)z-z{O VtFکJ l:͝4im(->=C+,Q,r;L,d I{lКV؎A$}K|bn$z}BSd=hXnmyuxt "ls1tR6ʳSS=,ER˯csN]VT4 \w9lϾ;eSv zPq \1y]7KJZ%p d2Zo7ĕ"`IlbW64*.:0'T6H!f!Jֈ{`GW X66LN2Bu@hC *}I W0jYo2!¿gBOm09g~!5EL OLJ?{wȧFR3h7p2<=<Drv>1gp3$|, *B=ԵыةlWK=tBk=6YyD ҇<8 b.a|'V\an {@ŲIoi]J6HQaq[QFPE:(T:'gE0Jud,eI 9UU%ԼpsGxͫ'Ju%kp;ޣ`EupIDn%pOԻlO؁TA9#fO#BK Ѵ^Vh1GhJũY33 (_LUfgf|hY/LCP}T\,L%x@>D4H/cDīC@oNH.O0>1rˠ8aW@%bư% -ѡPE)/2J R9y77Pg5N{Hg;+Ci>!Ût_aP|xM$)¹5]CߓƳ(wN70DQ[`zoqVe idQ 椑DZ 'iljTw.tf~byU+1LPFlFzdORKkȁ] {moK6^GD†4E2WX-ecٗ7phI EQ҃l o';赖mӑ"wP}9IbÈa7Զ];'~UUw xM)Q}ЃU-aNk8*,?=(;{&܌h|ǿHᭌ1kcN!D}a8R*CJUE _E&z78CoϤ5^x yaY^xݻ2w,u18&D򵍶}d!“Ҿ(j4F\ yy4;Jf 0d^ hiv{d4OS?u0Zh(FXn@Ƚj*D`DYE$}a!!ÙwkM@&TNh-:?֕$ EJ5UKe5&j^V32w7|8b9r|]ǰ?н~X >`3_R{W@;$ǰ 5Fb>Nd:*7U{O1Tt{{ADfd+fz4TsO>o0.Tt%VbT-*>2aLޟNգ u06mPZgK8zZ0Zjzh1/ک(A 01\@΄#;g§!#@r@[#E]&'kSR|##Ix-A< ʃ4,Gw%//Wnn ϼc`b =goA&{z5Ӵ0X,HIg5f^xXI4N?X$){Oc2q@h}4NjEM&V5=C7}$cD[y iS } tx- 7R,Xy|V݁bnlۘeb9 |F1h(\uuN`ih.X2Ie(Έ$PMco~aKIe(I(ҍ_*"EĶj=zk]lQ3l@6c1K]J#$y}mQGҞv=N!0!4 XcXIQDP%QѦ߃i""}7jcY\fȝhP{W NFH!u~~}}~w]OD^bIb=%tJRw:tzT4We!*^yqS:,8^/# !+;CX)6rg_~^M ,l)d2q/ w<5] @ϓI%/NuM~Tҗ牢_1X߽ p5FS0 Ԟµ oX[:Lm 3P2%ЊjTն/mٺj|U(d n*kw5q|jێ:þg޳ vÇk |ọ:څ^pn_"}dZ`чq(O(t+, ( Ueoh /궄vGG4fѼ54MX܉X]֧v#(jg=كac2DГ&d5<䐻{ nQ{äA̱_J7E}p犚iZ0vdjUϣbzW>\Y9i7R Q+QJشo%vV0Bg7eq5ީUD7zf/;DYZip>]Dؗ"cisPtIY fĊhQyj(N䃇\D`l!C=vmC2Ds_|Sӄ1a6Z+GTC̶,6ꊰ$1F"wgP"U p[m&=qk^vp\YIͮWj^^ZJx3+^nkC$c;vR!70 DrL6.ӜӫYDI:/_&KKCf@ϧ^`Uq0(ץ~.*~WkD0F YeS}F\$htM(%vZGyb9p\x3 +8H;Ol9,//? F'N|:HN N2Q[<< oIH :ÕvG zf,N;JYH3 ɜY֔JtuGsNz'އ>϶KlaE۸.UJx ׌j+Me/]!mӺX5{g#uC 3Ԛp K}855%n$6䧥,IrA,fpQ+ӨVlۢxHl$kDMf3[[ZZ"~g K//,,hRe2#B8 փmX 5'ګFQJFQ |ܱks(h5iNCig8 X<7ZoQU}R8cӖ0cю_7X.ftxzS] tM)*'hj^ [v殃 ?@O~ZvR1@fga.Z9p_ E߬Ҵu6~7j GͣZOl9cNab/w5ՒRR5PmrƲv%ۻmqgJGQg:YT{0pyLu]wQWUQ`Pp6V\#VDxvqu]wZ *BR9e,C[#ʾOc;IU:XZ^W>z~ɯ^~u(W+eqpQ 1.b綁ephHai5M?'nw;+FBcE۷*wl]}Y:_+ڝ挦z5Ao~|sgytx0Sp T9¸7\EISkf]>`Z2h^zxSLG%ϳe0LaS"I): cu ,l:*~`mEV q=s }LR$u"ԕzW.VP3앻n=e˗|eXc+ϟAqb .n2l !;Qeo$u9/'&&H;|swB]%0mb)d x&kɬYo }Yo⦽a~ X܋PLnmg}Kf'MOZ)i%iԱ n#(M#DMO<}59 &uxz 4XRq@ W]e"ܵPGpÈ,Kl21~!­Hͫj >araN_Ļ炷$ɒ`K`Fs ,3qas&m-4 hȋkTn\x4==1)m}# e:wuD Uͭmnnre;mY.gf&k9-6]WWyƯ?BA14P.CwuiϓiSsgJLB)މi,?wp4] |TEEzKn3HC%r7i)D>bEIlq/DED>J$V5U' ۜ!B) 4#|cϫ&l/;;j;]'實{Ȁ&Ma~Y\{+5 a:7 .\US/fXHV7AlEКv`2bTa Nzb K8T3}샰M0Yz>גʐf,f2ƦVB}ܤ\V4, }t ;9!ُcT fJ5 멪1p^T[{6:ۮL4iƞճ:k=B$CEKYN1?M\ u0T;e!ϴՄ:.ʧ8:{3"YwٝUUJD"OpU.47gutDeUU2eC$p۝fQp]2Bd"lڻFhjH`u؀/m$ZuOb}+g1mVm! ,Z-Y|FLxn(7Gr^eXAD;BΊG$0 [.*.2AKh9\Igl΋n!4Jbb]|Ch+9/ >"Wވnʣ߉~%.|`嚳~xA3d}2NN>h'}ǐMs0ǟj{;!~onlP6TU>fIS]-ys ,0"!+&:CXD]ebX)M#k3$THW-5aD/u˟z鿥E2&| l,ηYSTUQM>APn9].-8mgszɇ[V(Vdʨk(R'/dMjԿk/mIZU]{$5EwPS:&-VR76M] lQECl,ЋLT!t$z;8YJf~mLMM38sƲ8?̙3YJS6[(*f$δM!=3 6QV"vb)D 0N%X8 w WX҄;U P-U4@lY%q^ \tY_k Ef9co8~bNd>KB76okCG ,ZHAߒu %ګDDoEFԚ,as HUm4 4[U9%$9ɫSe1E>'(t^k6EXvMC]n ^D5cݽ}6 AP}ptOЅ68w)QDQ~/պsZ -USz`Pb SSQTyI6juI(آwD)נEaJՔ\d l Z%ֺanmWÇP9hJsB[i cwiԑ vITIB$?΃ I ijQQo7MEyϪUv uiVrvGt_ssd4>aŮ'DB?0Bg]G 9Qʷ2 fxz~KwuTcހ9ɒ 2݊x1W$=#W1ƛYTTQer5*^S3! fڊ:޷Q`d~NdbѳVOKdzSgzs,݆{JZ\fLAI՞^~fkˀ0,upY) ,nJ474+`}gTpSar:JWUd^I"exCR)N$JEW4#[  g&&lb2畊dAxgb'\ofW0>$eV WgwDsj !6z}ժN,S72ٷI!E/yJ4ރkmFnKGwث' I܋?.`E1M~+e"a5Mb?V/@EQRF|1 %iN ]m>^QtR6u@*AoЇjb"L?/F}Y8&-lhL?H,6w de(pլ yJol+ctݷkp;Hy(\WLX3XDe]L=W6} ]K .Awt 3WAo}ivllz%E"l3oq2箫L~,SBsqvX剝:al^w:zz[%rV;j=@3O  s2RWm'%4i[`z!4Gt}J^x49ZB=P, ; A,4}(=p ,_9?07,Ge9tʅT4F)Ob33S(w:,?*-t}44Jdy̠7f]JH9ö$g:a~Sc^%^4y h|AGbhƯr-Ng/%Zy*>CPP vEQx#v:8iU5I!2cLlǸKwuwW9yW9"VtdĔ^g%sg\_ cser*7$u/=ՙ7Q$zÝ]8% F2F.+XX<$QR,s$!16g岑uP-*Py% PiP'ؼ6띃8_u3&w[[_] fB_{ PM)]ޣv[)ʿ#)}SxnzdD)oN'L[vnY+sӣǏߨ`S:,IL|}Ԭs;"Z/_6[׆ErUK!t=a}!;Բ9k9ﴃG! z/z F`ˉlkpX-u)enTx]2{5k4ݲ8qZ BR,5c\>₩="rO9߄/ٟ{gl>I1aKC hJFP ^rwsSK *@ߪ09Ukv2hҮQKIUkbFxN&&wόzX.Pz4SE)Npa`_h i[W@GLWgI:bʯɧ]F#O]Gd;ʊ^ U(LNfڜa^T{Y~ 뫶Wvdݧ ա䬰=߹xd_0DƅΨ)t$?]iʮ3Ma㋡% sg19GryBYOUYbG T0 c]9ˏǧNҵ>c~c&꺪 K}x6^teL$g Ujx z&&in3$Mvgnócy4) * D+)g H.kwضI9iW{Ѯ=QpLc|#t1Q Mm}EN䇬d ,6UEA4@Iv=VZjQ?Q.ځ*(lrvddm %*TΏB !$G*0YY 72j";llN ”AO3+c4k<}a,-|ҝަ,ݯ<`mzڭ# .)t‹&x*Y0Ӻ: 6~qb1ޮ^@1:mb7]6tl(jkY50U"SM#2UMd"K&Y:!,Q4LDӨLT0t*!fdpn<ڇN"[.V;ri66w ^|^ `HDrY=j?t3]| a1ާie45N#mC~ސ0'ߞi\nT؞.tsG2nz& ;i.Zr GU-϶ۥ2s@vT?2[xz nsRs$ g7ܲV q~O$I_*d MD9;dvK;i5kR :cP&DǑmw*J!rĉYI?(GttRK;3Fu|^/YP&*۞m\ogpI=Tъ☕ *w]7 [-BG5@EgJktc# ݺ]ؽ%ե:}/SmN5n*IR2US*WZ7N]IFT6ot4\*Ifp]$}9Y:νp5;gb97+-2ל'Wo+5z>g9R|KZ2WQA8W8 Z8cx~,2ɉdVޝhSΥ2tճ,޷FVfi@gD?!!]f8u\E,<] v<ivނlsApۜ1vqC3O\PUs; 1nwRR*ec5z8v$ވdl.nm֐~H<3Z_5G%L%EOvjZ}:SۊMMr?;Y9^ ,ڋ^rH\ O2#B< gRN E)HuTFu!҆BK ":` `xhZhܵ4 2t;CػKUCo{$eMyߺ,|q;10hIEnS袏0-`,膡R( ! wrr2aEbiY XJy" "b0TEQ0 AaEQPE$,I*CDDA%V! ;*D\eS,x dY)ƺ@TsyyEU dGG05MX4Sxƭr>JUYeȌ1ƚh2&aDeYY{vJGeK8f,XǟRQ5I$үXK:<ŧ :dd󮜄~=cC5k(mD5$OiW+&ff+*kWnx l%ܨo8;M 6ܣ [ɫl(uHB3Q׽N;?+|8+J%$J(-&"AkX펕 䍈B(WQ|yWa[lA_gr_ ިX揿uqK_8-Uijd}}ĥ1d uOR{-ISa"`~0^g0n;UmG} dh=5AOiFM&ݔ@ha]TǷnq /:mY(FIM2ӭZͷ@,*J;+J-3*j04$JDRQWUeYvw1IŒR,(eXʲ,"D #DS^D9+-QHo#qGi ;d} HT@kyuۇ[k 6sh$}7&fC?gS!}U UVU#I4M;Bl(LETMϭpvig߻"KݠT dit: mzΎLBmqIZMж5i8Oml]*~.XXH9 lRv-eJZ(<Dn&"Cv aT&aadLGѲ2ƽ-i0dgY}z4sĉב(=(؜)V-McajGHkb^J߅KJ8%+x^u @zIȽ:||/ 2 [98͈7n] st6Tf]}(u?]L0F]4jmC4Ͷs#IR [~$Ʒc8`duhѕfDӅ(Sz ށJyD-3+\nDࡅ<цd3gT f$lKT؝3:68^"P_rPD{?kT+A_dwu=fMfSi_@~?D kͼ M x\yoW /c=!Ȅn<~8a;ŗTZ9T*)g!~:fzVXeT>BY%3xUK[nE6O`R sR O/ +$Ͳ;Qr+O,DIEktӡͭ26{:|Иy&{mx/ /{.MՐV[Wv%S>O yo wv󀔹ZH^KI|jW{^%x3[&Ko_Q ZF~A糰^0V[Y76箴!>v0Ae-5hn5&ɍЎdi'?nXb?0΄KG 6D+Mhd//M8!T"QRiwM;R+L`%&¤ ^Ȭp~.lI(U=U\L *f8=[ hVg%_&[zեWĔM:AfQa,f( 5?֤/?cK,L<(i+k]2rX-ϖ+/dvtaJ9D955p{%ݙPSSS`5лJꚕ [+i1Mھdc1 #9qyHu7gNwkXGͮX52iMC\D`VxAH[ 1vTZ\ tt V/)ǹc1 /@̖ )1XE)ۄ֣PE[T\e[j¢& 0Jo$P\i7P~c|N)V`eejΉ^3,~zn;dreepgbg?sPgXYY9@P9ᕕ:CAi/h?md>'Ұ zF|H *P|>7Ҩ/{*Tq3tW0AT_߫)*/z!y?5c;u|.U ShtFȦke ޛWU ;%BM?jнmh@yZ$/EVඖgzؤͻRgHᥩ A΃8PR{QBi*‡޴iz0Nmz~ Z^3L-:ʤ"܆9S?H⳰)$!%gE>SBQc7||&gV(&О$ql }Fhi&܁vٽ{ǎm(޽gͤ ` !h 1KrpU eߨh, Qa#3CdhfŁԜ{e.iRB=݊w5yMP5&̌)Ir*SĻ>*IiXʾ"X) Q(Ald_ym K?(J">",Tɘ,'*JZt:~|"=6mRP3:%| D`ĺw?K~j$;E.O;UK uFs}m L aS P`SJ=5Opα@lKA%APۆ LvӃ @EI@Trz/|Wf4ᛄ75"Oӽ~XmLRݱ"F3|P5mgasؒɂGkzo4s$I3h tba|}Иz $ Ie'QZAsK7-Oz]{&Q# RP.]9ۻ/pV-q=H܌e0tc8(+{/\~A.`c]P#u]^w謪fXҽX̽'TڒӇ_t|w\=QV\xF_\R._xJW"o- Ekq)8Yλ2ONeQCor~p;%EN~#CL϶ۭ-R)--wDa;Cnm1ЩakƇ<[V$Qjx(_x1R"WV}B3q:Kva4Gy ?0$XezP^rx5RI<(h_nqnE"RXuVZje^&H2'ˊɅB_eaʊ_5K>z0,9أ%`z |E3sĘ$fֈCuT#']Ukkk>%rr!X{H~@vY&<ވX3#ThP67¦48>vj1_>! ** Tv ~RZ (_va%I^9w/f:{f[] yŨj?LVV+z2FᖶYyT&% *"{#䒗q ##^Jk ٯt&HIP1J̗c},HT .*cG"t! K&ZǡvxP*] &@B Z⌖˄1UBTJjt\#)R- G2w&TZ9G1졈"5sgUQT~j<&Aؖ~_ͩumo/HH !'2F8^S#g50YՃxvy`"}Xs{4f7vx=H†<=;qƒb.7$,yXN / EB;\Ox([3"oZuo `ZKhb0&h>KzC+WJiҴU.M-ŁZmlҴ`K8ƵRC-8v;nNj1#tX%x91懪`FabxİL[G!b Xܬ4V$&3Bl `9ƠwyUioA!nEI_)C8*#F1 [ր)wol/:͸?Kl7-b Z&1#v$ KH Vg9!061UW\W~k[OY8c錶Y"Q\<-94sCcUz 9Փ֓ҳ6:cWYBEځlOoR͵_<%^ 6L4 wyp \pQA p] Ɔ0C01AIkU >52"(e*],;.`9CQ Rz7k3jV`ogOs8p@jMSh DlJR]w*vMl\[Wv:#1=C(Pg\wn ;֝0I 9<*|ZϽP/-_]! (H-Dwgv<-ӹIn e%qޱ+{{1O *J%Hs;SOUD7li}5Ym<ua@TmM~p`WcM^c[R\.Ç{^!c(]} R\cr9E#]zCJ/1(Ӡkts,ppR CS9JaIRh @hz%K3}Nr;]4W\uR!%0I}Iqi. S겳 (FjBbuqNUw;f*)G(ipc@ 1Z-ȿz8U iٯe8ډPשk0t7 #LP#rb#,Gz/xX "ĘRǮW>X\(8FUrdkk(̥ 30#wsODkeS(i5m! ݛIaKRP < B2ZRYHbLPahou=վ1Bqr17,HDc:@AYi1^jYR:jqpGTRډ@ ` |7刺L\”#HlJ2e)y^ 6gH&PS!F{S‰9?$LNj}"IJ;mha=zue0͔R:W\T Mi]r<ґ/ޘ*w5liq> 0jT*GzRL@sƑ!oS8\BaWs@1Dfv~{|/bSu)2Uƥ9cs^5 m% !zAaA(5aS]zxa`S>s3(yXҥKwOifǬ)v-m#h{ )9F!qx, Ї]b!5<#:'mΤ9;Ϸugm3zS2]UY"tҦyꛄg+IYt:!f\n?hfLuY\]@p K,!g2 ǡVWȃ+9 ? _jn$:x[*MW2t[z8Q~Ju=eQ};I]J>xC륧~>uca"N #(N:8 +EBQTbRiEYYO+Ἐՙ3.i`iOcHq2 P&ى ҃@ۨާ0g \im\Pm1|fH1Z~<{ ;J#w=~@dP(cnMJ c#/^cgmփػ6\6P vi^2 ݂Oΰ>8&6!6&xFퟍ>f8M2|3'6qL=\B͌uVOFCn0L=ք97 q?8Y=V,. =g9.xn ]Wԯ C5\q\,(豛' +_:|0H_Dx)r.e00&{(yĘe̘:QL&lpq0tT9.1sn>vtߦV W>ΞDZ +y)A2R6`2f~ٳ1ٷz:e= _ +mJ/ "p c>%™o- 8BҔ‹mDHO[n@]Rcc,bJtE@o)`Yϰ>bYxEyx&xhMFU['IQEŠs_K[2fm}[kٔ{qP{7u {o!ff|vL!pÌB# Gx۞{x`>YnZ֔01s};1BƉreŢ`8RV}R  Rnr9ui#w[c֣=nҤ,rz(?x>˄hQK^vXe3XWޖePc<i8C (%X:ws|߾b\\LË-K})/n 2t[,o(hz;zÚD_]I18ѵ?HA_IQc^i8g9KvDYӌ3>ndXsV8`?O .YdUZ&8/Yvi9eEh$B ({=5 Rqхr-6vѾrß% >BT֔N\D>@kk'ki^_J-mnoq`,?M3ܐ4x$GAz 0SM~%0_hm#3~ZKؓ bO.'?EFkgD屴!iSlد"ȀdMK6+=IiH dHe(1Lf}0'BbH7Bi.B1!i`qD?&2j#6 ǠS.uQpjnckfp -, ӝ ֨K?h 8Q0KI ]..PX2pf7gC|izsPWʹX_X*DIˇ&3F(|'۰KeL $%3I4JwLL<%vzZ(0Y y6dzFB,$03$ôxyǮK>">lH{>Ji?C%**1545e*e.x$ad5i{o 詟$gLJ!y>ڇwhzR">0|i?E4p/~wB*Ϥx@]3jsW0YF;SXzͅt 1#i,t^ҍgзL"ƸIb+(`}"H#y(\Ja[͙7?df/sVYmV|UwZ!bfyb^}_U/9'*Χfv4qj~+,7jS c_/ YWܡ*ϓ*UEp=koLs;}WQ+R4R)KIq~?P1û]0iGnwPQd1b рk4%Px]j|J+Ha'|mQ+m ._ٯ ]c0YY4цD̈ %{'|p@I7*ʬTR#QJ(ƁIT8 SCX#ӎ63`rC㒩*==lsiExzKöByL>f5,8z6F@svElA*% {$q5O6E6GZxH ON% N7X {̮P_ʚ~W gvXlQ|e&Pk }6EӔ#Cv^q#?;-/LQ 5zx^B q0ܔ߃&rgd[HJG̐1M^riݘG!Qj[tW8g 'ݔ~A[܏춯A{DX J[T;JbGʴ!J{QTqN)2/TJ:T}Of LR)OXa&o)ɪSS)yԀG/Z9Z)@1V` L(mHv}AäR:P~g(N1q^.M2P EyFw)|Ytmb4q 3ۋM4iZ_4YUzU;M'z :wULӋOm߷gM(xZfo}R':{(O {M qu?e 5 qTQO@=`Zq2'\ζݳ)=[~+L7Jq ]3333+N>Bv6~pBX/rYl8q%.+UFN#ۖĻ5n|2R.&N/Lsv@w;vdp+oϹ%`w~L o [nY4{,/,rQI?k5gne\*-E^סZ3ȣ4;pta  YoYzCVuLUV-^ %8z!E%Ƥ qB<&^(bҽWWg̫MhiX&Kη@$8:tG!KV.b`}}zЈW9]8zI\!l_S7m-&$R,n۱Y' :Nw_t3`>SGK`8]1 .<\`|ҿz'KKƷ@ppC^>ԿF;Ufh 8m D5ZuF}޴Sw}sLvϰb5&2B&;ɟ1V ]Me$urfW͏u?0s+'hiFJIYj6L< \>و4뫯pi m8w$w]ӧ@O:wbVE:8ě[]?['GDࢁMx.E`aX%~QyQ4-mن\ %o蘚ƑG:6U;ޱo$%Dk+`h$f <1P +iu\X>_[x.@?xUeHZڷ.6U9Y6 ;򴑍Eqݚ\A݁|Vz۬_N7NϽ2(:މꍣofyspK ^ I?"!L?',IͲPj_G7I ,[\Ҟ)'-u% {~}oW?޻Nxz{^7/vm޽uժcn[@<:U@/^x10&b]C.(P!̑s!;A7RS-8캇w,G rbz,ML,9dIi$$`{g<1L~YLz~ʂt̄( zh5 uקwKImkal;N+/j`v[-xl@׼}٭~H&i=S/F7 )ʒ!*e;}8=J9pa&fOŌ+ʝ xKx<x)B^fV=YYq D#M_G*eV<Ǝ. yg.; `T %2#\k&ndg"ryG`A=%Y7VVz`p1/_/gyDMxMEjz #ө'3p 6ZiAO$V@22Hp$u K o iFiEN>P *s+|撷K_h*۷jj֊T)+f묊veJQQv~Hu"V,,\!.}0_假ҥv<7=oTʊV8:WڠLܲlS_36aD6S쬦P,\ N L3l*Ѐ`kWr沃M~t"5!+ ɭԮ/yXuZEx<5eKhMe o F}䰢\:+qD܄nZCPPs56# eRLEơ @R-YkCӔv=NW+L&? kwS2`۰ݫqosC_-{ DGpJ%&apeH\*h f;.L۾ʸR0ԃRMiyvƓߪlO.dߚѳ$&0ZʔD-X7Bpg~%cR\ 3x.Wxo:\Ӷc>~g0kWajHF,>,6?] GebRP9?+ſƹR3-ETv;STǕ)XU֖pKl Imgw =bc0p0[> ȼ Qۥ~?֩HeT˒cK *JS͒課/[Λ65 | CT)|.bIF%ix9?DtbW뉰 00Ife1r( رc3ȐAAqM"sm_^JB,IP^иW?c9cGtrا #ԑvfGّU5] ꁤȸTG6Þ-N ,6+l'af7 uov#[Z0 Cg.y ˮk 0!abo`&r%dcpknTel?xK&}I}GF tMZF`piEtkuNCBĤ6ǶBS]KhwO;hoR~EA c6VjRR kVUM*( | cOUc7=rȟv~=>0;MY&RPN\:$ΧSgI,&cttE/c-iRKص&nWKG>*h]COOQKN].b< 1*6t?D)iG-tQKё gx79*`:?6r}o[]:犮;:C&piG PUq;q/"޹fCŭ1MD5|3#7s<G0*Gv hPji/cvH h? bDtun8%\# ҙ" -yJ1 5 J߸=X d0FD):`lCX8NIXSuz(`''c (A|tfOs^g>c ȊX]yB@].dRR}+85xA ɻյh}7)sy8@3XEGw?p$MbtШi8Eܼ\0w'_2g Tg ҵ(JL4s}d:AS #sP9>j);jAiMCpK%5sc{aiα94Ki0}64 3MXsj*u 9Q ,"29>1IJR'Wp]xQͺ|D Ṕ>. ҩx:e`HN C#˔ccxmEN2hT?~zdOB8;I0tohy_6mĉ^mvsM=qCL.wIޙquNpRPL8da'E8ݣpL1b%lYe[ WyDĥ@ Elm%gQvC> e)#JoNSD(Vb( x'Dl@= PnQ:# )PzVzIίSt*UEu7Y!UqJt(B ]UEf*rb̿% !~(p]Q~^z9=|Vb EY#LoFCPPٿ?Z;H^ݳ|Mqh2O~/{碨'} 3M&AX3AD`|HҜbneD4v% zwWeՆSΝ;WL%h'BB( fXt,_$i805׿>,^M[E|* 91Mu3/9n=#jS+0]'aw0؛]:? .B0|c#RƃL/ 1eQx9uMB9Nv~xFX\uh3-qERBT:.87F6 QS]+h *JZ9pjU3~UEYN5 H~5̀EE說”#I6x)<ߝ܇0c u33 MC~x+H!$8^iRzb!&"t^z%ِI^ kͼO$Qыn(snGhJ1^+& DCUiz3Y~O9Fϯe}өׄlɾetyX_V9\@p_F9(a۾>yiʁ>έ<-nIn6*Vg ~rK\+&r4IڅIuӘT'8IKU΍ KBnA2g`?&erjx|kya!l3]Ybr$:&]Sn+-m8#5U`Jl}BF:wF0rxLMKscQK~]]$Hj=qmo5Jq.gw&Yb~Y]fI~SRh/r=vS-Y 49~]e#pv"GjG3g$g?jy|M+1x?ftݎވދ>^M8. AH*7F9 I+DVv\v(Gؤ)VV(%ݙPB쨹1ǹ1܌2)AoxK-IZjtחŒJ}1%> 5Vri Ly}AWГE=^RH5[駯4]+0IR$pTzm߯#+Btl:z}V(gL fZX/ԇO 62ZY08:ԫ|u}džΤQQM^e%:߳W{a 5-C6(FP2z0{ oqJ# `{&$|vcuA]u7! QW@OS!&XXD-p&%G IHv BN/|zvBN<̘e:Pthzfz&sǏOOsXݚap[&S0[DY3/p]LaV+$Ijw$|NĂmwPG0)ض("jrf~t#I0u] aI?7M& 帪\1>4A f`) nȒ)K%LaA,[-bE0CX BHDe&#tM#.ì2^QrTDKYpXpn˻jxb6LKv GCZ =  !,g(5dK͕*EBK\q_^lyџp>r:RVZ:wi*j*+뷻~}xK… R qn89av> s~U>t=[ݾ6[-&v!ڣ YqڷT%@~7jrGy6kFj`Ж̞ɨvԓ;M{ B8<)GLˉ},O?3Aչ%}`{r$ʷ~l(u qSʨO-H!θ/Zz0I Vq6-φ-޺kӥRIݡǔ>2#=^XK.lA:%^|tYvd:wPͤs/&ݣsGK e 4vXKԅ so6KC6Fkp~$!?ٜ(!V96QJs  LM1=Y]FЕ6> 8=Ƽ(/7C2V| a{/Y5]'QԑcH{B%0E/=~O!;XL85}?>ݲlr#HۏfW^>1OCO5xr縲PzC#ЙnrW*{ʇ_NQ{k{q?ؔNۂ}E EkYbawB/̦]%'#s[z퐝ʬ(WVvNֳS3:%MM?oA]y Չm!'NitWۡ.'@?X(Ė~~ xK`ھ2!&qqxR$Inɒ ZmXy>~h*Z9K:֘c\9%8*Q2&,zޝN]MG<‰1UX-2p`0"ߪ:R9ݱܬGiXq zsf? 5Kng/Q)^#TP ɩ_ O7x?͟5y 񋞕fz;xzhH>!+re$8&L%tI0Nt|脡[{~_).|ḇk TYVOYcg 5?O?yuAnh1wDӤ""]"ѳ_tݑjGcw!mjuyy>zеvo0ڝX?[dx.>ۢŕiG|R55]Zey 2AI,7ԪBTk]-zҶ2(]>R;!.#0jU*{N-dJڀ)Ŏ0T=(pZUbR pB_B?XIƎ%XaF1xUS `G.z e{ቝQ>lGw!AH%ؠ.M0,SUpDa^;]o'KU6!4;8bowggwG!̎sY.,(ӓo$8K@fj[nQHVvE8c:Q$rZ̈́~U]goAPL-wZݚ*?oV+6cvp.j{Ȧ7f b8t0 :hjRr[X-CNo@\^r~Sn3pMDioQAȗrYO0+*L9o&]B㱛$ oOVP~mWD1F=q%|b1-{`/0&zJ :(Czfl;^r$i*q*wVC*wVXG yK9L  LY:=0ji?p q_[츮o)ƽ!@ޥ}<}MEvSQි˒aҌEz ^EtPFq$;0*)#y@ir2-)L v17(h4Ę9SƯh.Us]IPKRgƁ5\ٍ7f],]0^SNKJH"]fC8$ƴh ysJI)/  9}LT`϶f[M-)YciiHH]Xa]/XZXZz0X .-5VZ6mu>?n@OCPH"-x<&(jQGHiQn{/qĂ$ǿ`H+-NWEž!yA{i)ާs?݈(Pg@ؗ=c֣@MJ &`c1gL*ZxxiR!0J٘`,B *p.eU& ϒ$<2:痹Rǘ`BH1cj>I% 0.B:c}%Ƙ8t֍lR Z8:gXCQF+LwP ۙe%/z#zabqS@%+i4G;8:/C S0'$R!]aeČ!p;ˈ!̝3'pܾCS0Z5[[[[[[rR^|LO:3D*Ob|ROb\毝b 㲈EM1אH216N#8G=T-?5/NGbu$B5J׃Fd4p}d:Zh $tRu4â_eQ ! ]txDN0G\pmeQo}2N | .@@Q2MoLcQo)bzJ{75 LXXʃF`Ůza0Z|$fpY`okוps<7\T LXRpA~s5SY5_ pk<\`BXN1XZKh2LEaԪoV`In ݈̿vHc]{c~ ԩ{W{?/D@F_ (c}X6ѲL:x+dx58p*aUsҢcncx[b"% F`gA@q'{p2?::2%6;]?D}1My?~\^^^^Ϝp /ST!|,[ )E_uDнLr2Җ+4tu@6섥*/:LUX6uTikpAZD)GRnט꒘\0'YN j5ٟhU]gqޱ&ږpNaBHkh.O[Uk>Gtq;|8fa21Ao1op#Z"dc!AفR?8N6t2xX0u+tE씥h c^oLw0cRq\a=F!¬Qob(IzQ\EYA98+or#ItS_,^aYޭ)@b@dt`ҫkFP㟵~su YU`)Ɣ`cI^aIogqXo$QER1COd [gʔAl#+  ̲Dz-Lذy cв_;2"^iٕKH@%&b UN*PeNmk7fTt IIiAT悼:3uw;&%d# 6vz.խi Ɓe^f}~=2V$Vҥ2)S+cz*/ĄrFZ%'a 8^9.W' mdI8vKn1v!yZ0N#$ sJZ.FRQ?*I\ܯzf\4l+f6^)_M0c lèQ3Ƌ*{kF-kJ ߫D qB'@C92r1Ɯw L߉l X[ոO'p_#BE:ztEErcGcLTnQܽ8y; Pw=Y\ʱgp~G}xW|Ռ6?~Q_12_} "ޭ-MZ:X`ѥX$ 3?I5YRZRۖ~17'Z-̩oԶR2IlTJNaee/NsiF.S,X=.,} _l4w`鄗w}dG?k\|Ioa` mD,kvP i}f0hfz69 tAO׵١~+sCu\F.f\hx,>x|5Y‚q3$,ZAa?Vcdj(B5Q5ZvsOaL[>b@m/,WkD5غ*=O`Z]- 7h0H[0&[QZf2񔦫v2m\)K2!_}֧KV{*$2ֵO珍5c=?WM,zK "2!,JG&1G:uӨ1<<ÒZu^q(=J Tq E- jijYRZpm"%IT&MtJ)Lz QC-.f`D20Saxs@>p?*0gؖucb 0!Iziwoʽ횲JhYa](*f//Jmaw[JVe s¾32m2: KcEĔJ 0=zȒCZgٮ[~id>F}h…<4ח B>%AP y8t `_#9;C(88WIaJ+b|>*,^^*9Bx+lDװ3o ~1y!S0,a"5bcT.Euzh.Up,FPHz lJٿ/X)iG iVɟ 礅LGFaJsF&#o1JC3};i7Ìh` ;)!mۄP~!+fIH<#BnF6C EfdZJ`@'!/(48/]Ht]d wp#Ӳ zad哫1,MS\sALe7%Ye8p l|sLnO>5wZkӧZ@t}[nlvot:WVVV ]!7&m,jr2n'Tm@t|Nx3Ef3wL~ym:lz MgLVM!ܢGܛ^ ?J-4_USVؖI3߰Ado-Gc]k\"$ލ3zע;G-(Hỏ ba-%dj^SrCQSEUOs.ع2MQȇ遙i^#lݓ*ƉL m:aܘ_y Ho5JLlJP>ESdޠ`C- iH f=mkG}]D?Fb=LgPCP|6&2ͽ^/d!0ϗ!zڻCLFq[R"KgAZbcWGW30B ~J(&rL|5@b~M.&ռ SJ0F?gBJ!sa^1zlggG.ǿx_}09 Ќ06ߖk UqV^.ϓrJ 25Fc-,p`- Xg Ò0ł}Zi +\ yt߇I0> M)ʈRޫۄXQRYUNsS $q0Vx [qB@ vgk!Kehӽ) I .BZzb0uܧ_%Uxed&f[#GѤ1:hVG祴V(t1r|q.i5Wmdiҙ?OYTKbt,K%lb׿q:$J{՚mJvlJ8i2ޅ0q+)N#0-^5pUxVx5ڗ9%)a}JuvmeaBCF<`)֖_q{n&j`Q$iwHa70X1ig0oӼd<ubBp.M$~]MV`r/c/in~ǦmvnQ77>^.O'@/%q,RiCX1%~>1nzsq+z*u9*"-SH3F`leR sBxMɨǎ ClpQ˽CעFQD{H)pG}6z' zB'PD t'O-+ 'iJ}\ElT0$:')"wo$?k_xR~RJ ǥ"|DzvR,gRlgogg?RNR~?Rl.3Q-?<(%SE+J%PPؙ+T:ōO0IӔ7"'tlcϽVV**͋K oy[BЉIh^_ Ў_A隑 /EP)D/[;DnFDuY G(44lI&/kweTtWtA:bgv^ĸagccCcK+P`yPq8 MsU@ޙu9Pq7s^_y֢DŘ|5\mbq., zǍ9BU^Xo8c. tuՃci6 gaPeP8Tm;mj ]^;,m灋OSM{*1\V}֭>`* j o lK Kkt;lYK)+ 1uxq3zNz(iA~}} C : i eJ5Q%Ӎ%Fa)Pq4e%5Q3P[_Xͻ14 3wbX ^ 1j-*ʨ7u(mHp."՜<UJ 'ZuJkQHN 0uO!XaB^WSfѫ\iY9%z;4hIEmH2`mM(O0`,-hLnsL'G2ZkoJ`躻D@bPjlEt7zܲs(=,ˎB,em>/ zAA``a$z:@>B,_'sPNM< O. se|X٫1rpYnɘ5UY^;T ~@Hxy3w[.RBz$%= FhvoFT{J3"oTVuJF SfʎLfЙ|jIʕ}O!m!rӎuv;Ϟ ;eA ¸lvcDME'+5dK-bm`3˲mbR2/ʼm[:S)'TJQV[i.MjrByU[3Wg@[ J  VEzRZ7V'}2 8ҟg?}5]&h+´b ғS sߗ[z)!?W|!E :qg:\^މ>@+BJ~#\:#IC8)0Y6wdrߣ^842*8gŔ3ssWx\*8ܴ}}hoH5E[{syHEcn"]JB2pJuk4my*ۿOg/@S`,.,Gt+o̊S_V*cT&ScZvC6dV4`^җ)0"?5^teQgw󘱘oJsύ[wRʧö/ )],VȌM/HcDžf>q jQ1# (0T`bS`HQ0; p%{^WZӯB^ ќy|Km.,,x9UGuj 5=t3aUԌᢺ9AoRA՛f' nbĉQ(p`/^Mp*?axe a-AIn! ;x@Q}-A-&]vsݰʡ3"+R)[+ᐆ,dpR7o){R>|wzt2(d qhd[V~^j uK^\=aԂ)G<]>ij{9v XͼrD <,Oyg_W `U 9tXjUvx !|vǾU0ٙIqˇF9jdDCvpP<u`;zzVM^cDXC{!!Ǹ(Yё#GS^ {e1ҫugϞ}MŘ|#wZdPmLI%.ux.I zlʠh<:P=v8D{KZK׻j)mY;Ct{QϾe??GK2evQDIhqA; v%sI;PN2NJ7?N`B-Jsa.)ÆM59*He 5ضlMH–c˜pM'gˮ qܕP'zaX(#ȫuf2)yu)KEAm(;āI+*C!/rx@ G^/6aFaSicrk:ʬ` Kw(23rr&MCw )DbE,jܯ/񾅝u( 5ȌiK:Hbq#x֯zo*?ݿP"0Q` OiM;ŻZ<@`)27BУ1o۴DKb䪯@Es) p>cK;NF%Jׂ30wmoz !}NCs_:P=F]^gSΜaf^}uyȆ8ثWNĠX ]Ϟгi7?#:NOe=(aTm J(ނBИ [uA/}N뱌њ$RÆvMO0|:ն*ORUPetȢD@OXm<4XOsqk50v$Dl9|56-4tm P' ;m(*|\p1|,rثTj:Cc/RD>/Rvh.]*xʹ$o76;Jyf>ogԆ=udwd8ˢ;7(Xf]:3&ܠL}ܓ)K: 7^; oL1\y0(&YM :( K)$Cxޤ2gF.|FjNArj-A 4Ct/j?sGНx|nEGybf>m Ƴ4uʺ4w\af\L'E0L*e?S L*FDDpB.!]! 쓆d  )\6H=첪L*Pnho}paaZ1o!D'<-G1,oq9Yݪ'\7eE5)Lxf$rk c]9eb3 plbhф=z"cҲ8?Z4PǴ3FIVk.w"cZ@ipZF,={TfnQ8MëV;iw?e*vw>gnV/߶ىhGNF߈L>*u736ߝ?Su2QXS0p) *ᛀG'ݘֽ9${ `|Q~o..hJN S:&9rJЇV :12ҕ`"8>V4},lwE7`c7X[U@Ums\/M "d\)f֭W(Ⱥg=<5=rgx4bZ )GkE,#n&*НqK௒(#~C$ʭ\4cXP%r7|lW^puϷ.5f{bfwj'*9=5j౥ 9Ոl_Z㞦? hP;|J_59û*TYꐝ6XDUCJ]GZê.[j\+xТj٘bI '"ƼӼ>Hѡa>(j\ 2mig+Kc{pw>uAu[s յy ѭl9'tz&ㅷIR`Y ƿU"/qufIPv]S -%΍ 'W~;gzUf8ARo8ϬTf̝Rn{]wu`y.8)EؔBVjImVq zꋢy^nfxN}A$Y,HXPUr? w]pd5ۘ`$oMm05{d VrD,'X0Sn_|Xxo 6LUX WSL~yK wnw + `^SLc7Aݥ)^= = 0I.?ذVpSX-f:\>zB"1 >Z;+Pӹ:ٳ۬ yU=͝{wX)j ›.w.ɶc'wh̕(BA JVU^$2l@mWmWm۱0}/>*Q%+ǣ:Nj~ D3䈁M<"%Uu0wqA۶ȍ.Wcz^@P07A.0"hoQ׬u7-]Zk!jlƮAИQ Y 0Je]v6H.W\qG+ |FXP KCTQ6Ud$FNaIoEg;%!O1Hg0`j/W_pNWi4Uہ`lQFk2 6hFBx1[K=B C,-wbvB8]ⱍek(H6Kv]_=9Ou ï8w4f:oHB pMzatq \թІїd5cϷ?8w\Z6ȯh>A3|̳'2NJ琺A=}s2TS(m%̫EtT8[6桚¤?lPR{=kZ225Pho*_&7Irb/pg\3~_)'  "+]q kQ }]S0$Wk4ݴqt:Q|o'CJl mv&9-"9;WJ9i4+D~u|+dB786*V7;$<59U~n~v78QƸ,hc]˹\NC0^aG 3?;lB|MtVK,)8У,#3Y!ĻQY]sΈ8n9c B;2s5NO7\r+fx+ z)wTrrۑ}"w^fagr!杆WxiD\_pEd4%ԅfg{,n͚bv; n"`mp,(رӆc@hyyy^Pcmؖ+Es[,Ʊ*B\ Pb^ mV4+UsgǽJv~X vV90]ĦU(Mڪݲj33=٩%'o-VgBV#*ab1j[1*(mmm=wӵgF79h 25n& tg'NJCЬMYvH܏ L[N?%Ylի .`N.nkJ`,,+[- T-N۫-<uY.Ter@x:'WW+Q\]W!Bkj+T{>VeADlrJv``*q-`absX* V >~&4͖:*!j'J)FcJ:B' jIVq~Q<(Du_:,Y%$c#ҥ10WF X N"b*^ppM~w>5vfA 瓩Uz$AVb)<P}@\"!m߶C9<c}tNoif?ה Kw>},Z|TE=-1y-M 6J4Ei2~l+Rx.6O"{Ҥ6o`uqKu_-Op gEQOe-_Jql+b`koMke]6@[0!&~ol:yR:"+ _,?ڎУ1?K''p@t ݡvFtUR4tK*KE>XL2M]DqEw YkU1Uۯ'~P9& N-VFd)MZʹی#r3縿)^YlFL%C'_ I}1NA~? j1xʖ^\?9Wpr68ׄЄ|`Z p]Hs:VD%4J߫h2qzUչ!^kɟ-c[qfZk =uZk0Θe-ж/eZ=ˊoX뷛j{{9&.,g1cljSZmȑZ2)_l,؜Qlyex_eYvY>F}0h([ʴsGk&pq6/|tܮHLǤbXonr^-mOGzqb0h4Ts+4狘 BgDkS;XLWKgq~%8ʖ'?1Jκza&̯,,t{@O4|$@R  { 7mL3ȡ)+0E :@։ !,h59|I H0N={91#H}8  Fݾ-HmVG*o$o|lZQ0<>f 7>RƮCG+¤T{MJ90*߫J-J2{ ;64zߕ!Z&d&_%A6/ΟU?AgKx .@#a EBO74t/ԁyz :6 Eډ/ƀ5.]H+VSelZU}Vz~o>r~k:k+JPh9Ʀ2y-xJ ۴RKD\x ERLH"uVn_ a:N]^Ѡ 꺴Qgf7`Ti22YBֿ;yiuº\TEѣ:={ar@ BF 2|AkJBɬMz5enD0~޹iLR={ `Ak`xJB=e¯ o^~Ã>Wh4 iT櫅Ana4j5M| -ht)xwt07]|[UV78nhc(W7V1ohM}!t&\J4*U๬W rA}Ǡk:hiJ&@r-ظ0~ٲPd9j$"F?}:B"޻Ej%K1'֍ H_(I'@Vˏ[x h0]* l7 "]uZN dƅl stUS_iq]i9 ^C}ʌX|ե[,]>/u |S5s&Zc_E(6m 3=W,tA 4kVVV̰V56 :?DCs9qƒ;wj&ɲiNJx/4kĮ$W1ED!Ǔ;2 Pρ-G?I,zcMA7RLj'+/N脈%0W! i]5[D zVB4Ib8h]C8v圮d|mk᲏HDxETM1t\ o*AQQZ+U&5P m-6Ų vJ'r~ٜ'zՠFc\lj3i,쐞Εy%xe1mOw`|uOMj47?f,=}x;6LS\A+m`I*ap`phՋFM!dv-;,ܸ8=둋/~(_T1QSε{P^U]ʕMgpEs;X}}'˸-d"D6r5&!gQ^>ڝs n9ꀡr9Q:Q}  |N'Yi5YWfN!3VvҕޖDC3Hű'5W"̦(~lEa h@``_z8 sS솂= qf3i=sF mCjs.f}ݤCAj@wڦMgx!g\ @aiqa$&&cCuU ؁r W|0glԩST r a8Aw-IF˲vEQIt\U.v䔎_W>hD*j R5y7ٛ4+}`6Fmcz:{aڶd]'r5\N(9lB~@u0['pP^he\WQdj{ߐe Vj[ VJ̶5A8ݚh>tƕO,j~8C2B]d$TDXOZHЎgiP# -3BׯӤhG4#_h嶥VS79`<1RMF 0ʲl%fj5 Q"_ [\Iȓoȡ&yƙ/n#9BYgEM!R;u:xՊ8xz-a1@K\r,,v(QwNg:5VoC-Ru!Jэc tYEqZXuX̙;)΍ƍ8d؁3$ASqIq;aD@{B nz: 5\,}veBȤd-%cvi ;.SoPO[|}}}]jM5kgv,JdYT}e^T0Nҟr% FK)gɓi_Ƭ"ȓS޶mQ=ЬZkuV>ͥ=o;~e렳&nQjo}'b -ЫR %_ދayIz5ǸV_}M"H1m\qJ]JбpwEDƒ1Y~ޯ"Y}%Y5.7v z#Q)+vbT-ZSZ/okm^ k^]x0k7#' .EQ~^Ʉ}V҆[Z#-XWrputqVn2nbEВI-Y=Bg>Q,y+F}B|ʈbZGU$m.SrI T卂X7E'B Xea2w(^:Ņc͢^ =z~w>}:Xz$$:;rÉ(A :3[KB#4Q:ܜ@vݽ7~tH)eQykPKF*ӓOm1l (~pS_P|8+s5x4$LdELQ/ႄ1,;tfUYg*mэ.LGz2.0~ц=6 7 JqYfqs $ O+֒*!R۾y8 L$'O'IZ/{1ǖk!1qcݐ$\#8bٔ$#D߮oetyv[b tu/ O(EoӖ _ّLR'oEdߢ$FQaܯ^3_ly{"$1q6K׻big WZfϪj%{^xpmSWȇ'jN28ɨ1WB `‰ 왨b893S*s|$j}%L(YGfW7|Ab9?9sI2g4Ӕ9!)d}]דD͜Ez=~ˌipӬZW* xpbR𕃸RVbGHSn$?~!¤EE;v$I6"Y芔qHN;"ΣhWW\E1aHy@Q~"KII/u3Gώe4Cc o~:xca,}9W].[b0BP=?]w(X6t|LIbirP4zn0$SNv#01𑹁l hQ`lg-2|'*4ߊo}j珊xҐ-._uCmNf'3mؐ^; Kr. sk^ TDmSQ {L+,Zyzr /k2pxue9ްLlUBptT`uV~6 lͦ.LP5;]@4*Ղڣ)f(6Т}2¿"@OZg웁6cKʬd\:> ^UF VM`GͲ_X03$Oh{B=lA-\EU]*OZ43"ċ:`kX Cj1{} u395^o`ޅ5s8|\_ T \ JulABGZE)pA ִ"視ZɸD*@Nn^4MӀ\>xPxl͡P)NB`iYs$TZyFҷTݢmn*t/G'3Ĕ(S6<:óQR%BC'ulQ3K[r˚  @˵n6$|r90?A=%A>h:٢qe^ôo[e~ze6Mx&l#aaP$QӸ5$}}K grַ-*gl7^Ot"_#:$s4]qs!mFM޶ eT5e6F/>y4h'J})h/^D\8ɬ*[h"X{gMdUg!~*xHҡX\-F:Uq1u_AӴ?7ߍwZ݆ɪ!CΝ-!su6 LtRcT;e"6"KζoGr^wv[f/fB\]4c_4pK%Ӳg{9(+f@mSDbN6RG҄޽UV SYE&ۭfVŸݚH Ea뚤PqTsW>I% ^#M_E1N^@4>{Y*I)[uQF>Z Vr6aN5cE&&t2 ,@+Ҹ[ 8YChdlY$`)_A&Ci1v5^㶟'i13)sҿ }!G pP{* PQjy6p%vo DtlEBh;鶶ˋv!.yR$$Ƥ"bq9I9//J[\ͶUR.8ftYi|^W)3urn0QHYLFiW֮ų aBba8y)$aУ#iP9֒pұ <jB=!u"CVP}bLgy::V>-U`^:,eAZP gߔ$/  F*]B/9JXxF".})HLc|ܡŇ7G3=3 r?W%5D%QLqQ)i>JC47K^Nvz֮k vLDQNd:4,mڗ6Qܶa^1bÆ"nQ7.oG$C^FsԶg/oρA `ZxBq.'$tf'yI-]ezԄZK_I?T> ͕7?v`SzcV\ƭ_rw36._= iKHUwNʇpi:wU3P4]Z'Paơ f v )JA2؋D9-7vB}$`r(Պ]UW-SA`+*T0.ښ j.[SC̭Y$Tޡxg8]^[q8S ~TN)´ FjHL.R/ Q Sz x]/3uEZ1~9탅x.mmm=z.~g~5i2EtNX rc] HI0b'j>|J sqTIJ̸:mp-;ivZL+V UR_jnUQ#EQ)BQXo*F*֐f8̓P`lrj(ߐprK|kUT&SY8vE9Tʾ(.Ɩ_d8q8%ԖFZuPӀ:JSH7>!AH"ElXh'},95mۍv0.:vHsQ@w71 ZHOYJ JIJ|k)s@G#^+K@e@ ޴?N-YU#XsJ+@6ͼAvYk-5>cy|4npJ=yXp;3ari$xmJ#j<  ~Ľ.ĢQ'mTܹ_o%%^*q=ߴt]$wRyu~'d\5_ɒLl ,y&^un{N"n;LiWM wex4x8j-@8:lR@!_z#`u7%R$^7,8X ęx40@4s{Lր!d紱:ٴ7XI.8+Rb.cl J3sNNzS!Mƨ~B/jb0ܹٝ;ӁM`5*<1]hrEQ\NL`"Q 1871^jm´0BQ10h$`($6SCkIbا7UUU1~4U*YVN/(O:]em۶AbN4 U..{:^Pۿ,6XXq Q/tn!4=T/K.173c<3ϼhbKF)U 0\ђG"Qd_7{,ۢI]h`%W+~vzn;pxDo6#X:coSX \EЄ.L8q=瀲,ujM)i%21L42Zr ' j qkc K,vTr zئR]b:透(;_svjm7ۇn@ssv k-h6 πؠE2j PDl#tr0 (y4\Q)[G;Ţ)CO 6b>"E\"B£!B!$3BBeCH $B)"B\w @0 0(CC0SM16\p{)8#S0*0+Y`&;>,@pf&aZ?30+0'qX4a1Xaia$(uAiyM kCB( Uqx0K †2x6yK <6 O$<O;l[5P~ MށHb|^(K"/V˓o6^}sn`)|臏GA< a^ ;j`g@> _n%UvBU@ L/}a8P p8 G+DTK9T_+t{8ㆳ^8! v ff>?)9Z>tLT{. ]QP$jXAx!j| TG6 "ZAQԾu):QWVuwԣL#{)SB~a4`ACRhh >y=7t[^FGhLDRh M&ChJMAwѝ9J](D"hztY-h+Ehf(A˜hy8'Ah(6Bt? z0:އ֕Іr Eѣ(\=@OCOUhsm͇Qy z68 Eb uh%zasATQF/P̋^^^i^yUfknzz#ڌއ2Qg/A>َ! ڵ%7g y%?їhww;rkPU+,E{Rq( LmOeDߕr4[yU@С(:GБ tl:G3D MBG1~ZrDIW/:^Dl5:7KA at2F@|>t;CW\AcDZ 4a MLI!41MIOGдhzf&Ь N9A *48DynE ©hQ>LDKۣeϡ8Z1LUњhmo(Q%6uyкZwO ghD9E[nqSK]3vE=} @ %EGCqt$ :DB8t2NN%Ls[Bst1.GЕ]CNDE/Co6GoGo]G< B3ччbSPy}~}A_^93 0)~~݉~'?T{g7 O}o]]ݜn I t/Ѓz=mTlŏ]i8myn,N_g _⌯LQΒgI{q 8GL\!9Γ́q8 @, E\,WƥrK'n _a۸tً~}˿+++%q:WKSq N\5.s-qwq+a7 Ƶqn7 qWqŷemr+nDq[pۉSݧ}w;p D m% rw nqT#{=W}>}øo c_o_A4xH #J7xt{<13OD,xr<%.A<#qLY<{+sCx^e>v>>ž3ogG3uE rP(Flb]E@s x#QR(?(N*JG^J 𡔵P(u>9JDiϢPN(^ʜeIE޳(I@"(OK'GRTx**D%3Q\fT~$0UPZPT͋A5v9T׃C F~ăfF͒cQ j9JZB_Pr}bԡANWQKuQs+9DBk?4C[A`/ a4pQVYb.zz\;\̓؉qkD @||==)zSw|=nA~c ߟ`4Od_4Qx'x7swGw}]c ĶO?FS[⋳Rwbz?ߝTab|qK-5GmaRhj.L5WnB|d"?JmvU5~)fGfQJz?jCWmA軺Sl6mϵw2mTv'f)wZږXf Q,&b54p48L<":)ap8THyNݧ')2ò-# Ec]sXDYIg׉3klbBw9I!KYةuȖ,*>)ZIe}u5feg<쏨8yOmkdocs-1.6.1/mkdocs/themes/mkdocs/webfonts/fa-v4compatibility.ttf0000664000175000017500000002512014664334534024777 0ustar carstencarsten  OS/2OP(`cmap"$glyfXXhead'wi6hhea$hmtxGlocad@Pmaxp0 nameci#$}postV'Q_< kvkv@@@''LfGLfAWSMAzG> @ @@@@@'@@@'@@> AGf~ #>ILV^acxzAGe} #>HLV^`cuz}{zq`_\?:-& , R `*2<Bbb  T $ . v , \ p: '.5!!!"13!1276514'&#'17''3171'#17`@ @  ZZZZZZ&ZZZZ&ZZZZ @  z L: :)6711671167&'&'327&'&767''66RR66''  $$$$3!87;;-R6666R-;;78! s  a "1311#151&'&1176751311#11327716'&'#151311771654''1&1#15131676'' @  `@ @`  @ @ `@ @`  @ @`  @ @ `@ @`  @ @ `@;3#31''11''1&771'1&767#3#&'516761716111X 'W W'  'W W'  'W W'  'W W' 96111#1&'51676173#31''11''1&771'1&767 W'  'W 'W W'  W'  'W 'W W' +&#"1311#11327716'&'#15131676'' h 88 h h 88 hp    pp    p<D+%654''1&1#151&'&117675131177p    pp    p h 88 h h 88 h 7Mdz2111!12#!1&'&'147632111#"'&551476375#"'&551476322111#"'&551476375#"'&55147632   p"      @        "P @ @ @   ` ` `  'U'1#"'&551#1"'&5514763315147632'#3#"13312##1&'&'16767312#z{{{ {     @@@ @ @))@ V{{{  { > @ >   ))  S11327711767514'&##111!16767514'&#"1!1&'1673127654'&##` * ) ""@"  p p) *  """p p@  'U'1#"'&551#1"'&55147633151476323#3276514'&##1"'&54763311#1"'&54763{{{ {     @@@ @ @))@ V{{{  { > @ >   ))  2$7531513171#1514763251&'&#&1#113PtWi' BBb"&Y+aK\w7'11176771677167514''1&##1"''1&'&7716176''1&7716''1"#&'11165!671167632#"'&'&': : +"  G55 0!"<=CC=<"!!"<=CC=<"! ('      ((@?8-  2F::$""$::FF::$""$::F"+E#3#5131%111!1676751&'&'!5!151!%111!1676751&'&'!p    `p    ` ` @  @  @ @  @  Y#3#177111'1&131676''17111316751&'&1'171176751&'#111'1716'&'Ȑ (OO(  (OO(  (OO(  (OO(  (OO(  (OO(  (OO(  (OO(   :Cc7113277171654''1'1&#"1113271654''1&#"7'171113277171654''1'1&#"1113277171654''1'1&#"1&&&&&&#}#iiii#8998`8998&&&&#}#8iiii"99889988@#-7A\w111!167671&'&'!#3#51'55316711671#7&'11&'31471167632#"'&'&571#13367&'#151&'#1@@@@@@@@@@@L@@@@@@@00D-J]p7671167632#"'&'&'%4'11&#"32765671167&'716'&1"1"14'11&#"327652711654'&#"3%4'11&#"32765!"<=CC=<"!!"<=CC=<"!   @ @P   P  `   F::$""$::FF::$""$::F          !C!!!5167611'&'51!1"'&54763211#!11''1&5477161! @@` `  ` `@`@ ` `@   @ ` `@,5671167!11!1&'&'4'11&#"32765!!!1!1@   @@  @p,5671167311#1&'&'4'11&#"32765#3#131   P  @+';&'1111771176''1716'&''1'1111'1&#6D o o D5 vVi   n II n 22l U x8767116727676'&'&'1#11!1676751&'&'#15"  "",=)(@0"   %()=00c.6''1&#"1311##1"13316767513167^   X P P6%$X      $%6 c.%1#"''1&76731514'&##1"'&551476331131^   X P P6%$Xq     $%6;111!1&'&'16767!55&'#1111327711367@@!B$B! @牉 !B$B!@P471163332##1312##11''1&767312767#1"'&5476331&'&###"'&5 @ 8# $ !!.  P   @     ,g     ''Nqx#"''1&76761147632171676471163311312##1&'&771#1"'&511'&''1#11'&'&77171673#3'1  X    X  J3  J3 ` @ X @ ((( `  $. $  ` I  I     ((@'=Si#"''1&767611476321716763#32##1"'&547633#32##1"'&547633#32##1"'&547633#32##1"'&54763  X    X    ``` `      `  $. $  `         @'=Si#"''1&76761147632171676"'11&54763312##5"'11&54763312##5"'11&54763312##5"'11&54763312##  X    X     ` `     `  $. $  `         '(Sf27716'&'&114'&#"1'1&'&13%&17711#1"33327654'&##1514''611'&'&76777677165&'&' X    X #0   00  !    1%% `  $. $  `  4   `   q  B$%% D"71327716'&'#114'&##1"1#1   H @ Hq    C"6''1&#"1311331276513167>   H @ H      c"7''1&5477161!121#!11      "   H @ Hc"%771654''1&1!1"13!11O    "   H @ Hb211171611716113167675167631#1"'&5511'&'&76771511'&'&76771514763` w  w  @4$$  66N`   )  )  #" '" '""5  N33     6 0=JW67311312#!1"'&54763317!!!1!1&'&'16751&'316751&'316751&' x `  `g```   n@@ 3'71#731'#3!17%3#3'1#"'1&771633121WWWXHHH92I8  p p x]]]]MMMM}0MM( 6I\o%6711671167&'&'&'#01111111111367673'211#"'&547633211#"'&547634711632#"'&5H9:"""":9HH9:""/ ,&#08    `   //::////:E4%        N%%+h%2", , % 4 J% o V J% d D} X .A :K oFont Awesome v4 Compatibility RegularRegularFontAwesomev4Compatibility-RegularCopyright (c) Font AwesomeFont Awesome v4 Compatibility Regular-6.5.1Font Awesome v4 CompatibilityThe web's most popular icon set and toolkit.Version 773.01171875 (Font Awesome version: 6.5.1)https://fontawesome.comFont Awesome v4 Compatibility RegularRegularFontAwesomev4Compatibility-RegularCopyright (c) Font AwesomeFont Awesome v4 Compatibility Regular-6.5.1Font Awesome v4 CompatibilityThe web's most popular icon set and toolkit.Version 773.01171875 (Font Awesome version: 6.5.1)https://fontawesome.com'      !"#$%&' location-dotup-down-left-right"up-right-and-down-left-from-center down-left-and-up-right-to-centerup-down left-right chart-columnright-from-bracketup-right-from-squareright-to-bracket facebook-fearth-americas bars-progressmaximizewand-magic-sparkles money-bill-1 gauge-high right-lefttablet-screen-buttonmobile-screen-buttonstar-half-strokeunlockturn-up turn-downsquare-up-rightindian-rupee-signarrow-down-z-aarrow-down-short-widearrow-down-wide-shortarrow-down-9-1 down-longup-long left-long right-longturkish-lira-sign trash-cangem comment-dotsmkdocs-1.6.1/mkdocs/themes/mkdocs/webfonts/fa-brands-400.ttf0000664000175000017500000062614414664334534023443 0ustar carstencarsten  OS/2_x^w(`cmap*Q nameW postS&_< kukuO'LfGLfAWSM!JB @@ @@@@@@@@@@@@@@@@ @@@@ @ @  3@$  @@@ p@@@@ @ @@@@@@,@@@@@ @  @     @ @h@@P   @ @@@@@ @@ @@ @ E@@@@@ @@@ @@$$ !%+9Zabcdefghijklmnopqrstuvwxyz'1'S'T'U'W'IRW@`:J1p +/=A\cgi(*6L^aknp~\u} !#%1MRWY,16A?B1]{=B!#*0<abcdefghijklmnopqrstuvwxyz'1'S'T'U'W'IRUw@`:J0p +-;@\cgi(*6;UZfgjkprsy 017:K^`cmp|\hx#%&MRWY ,16A?B0]z4? )   Kz t?$QF76+) fD@#  }|{zynmldcXVUTQF865 ~ } | z _ [ W V ? 4 0 , # !   E   p g d a _ Z E D = 4 ( &   q j G @ 2 ,VRL86vr@."rrld !"#$%&'()*+,-./r~  !!#%*+09<Zaabbccddeeffgghhiijjkk ll!mm"nn#oo$pp%qq&rr'ss(tt)uu*vv+ww,xx-yy.zz/'1'1'S'S'T'T'U'U'W'W''0123II4RR5UW6w9GIJ@@K``LMN::OJJPQRS01TppVWZ \^++b-/c;=f@Ai\\kcclggiimopqtxy((**66z;<{UUZZ}ffgi~jj~knpqrrsty~ 00r1277:>KL^^`ackmnpp|~   \\hux}%+-016=?BFS]^`abefqrv}~  !##%%&1MMRRWWYY ,,1166AA??BB01]]z{4=?B 8 dd@    P @<  00 0x !p""$%x'('(*/`/001@123@34578::;=t?@XBBC\CDEIJlL0LMNRRY[\^^_a0b,c8cd`hnop4prsttu\whxxz{}(~~d$`,<<8@0XL$\dXPTd0@P,X4XLth̘8\Ԭ4 \lߐ\Xx(0x@ \lD H h < x <P@D|4T <\ !#&()+X,8/00,1 12455849T;8<=>?BDEPG I8IJKNP@Q\STpU@VYY[l\]_`bbcdxflhthioPpqrsttvwHxyL||} }d~<~0|Dh(lxd4HX,TDøļƬplDt@ϸ|0xDH<T`$\x ,8   844Ld   T !""$&h'L(*+,./p01L2|34579:;=|?|@AC0EDGpGILNPTH_ `axd`gimnoLpprsPtvHvxdxypz<|p}0txt(|X0tTD Đɀʐ4ӈ`P$xT| 5777'13#3'17'17#3#17%671167!11!1&'&'@ZZZZ'ZYYYYY3YZ     ::   `  M"4'11&#"132765676'&'@       `js11131716761312##11312##11'&'&771#11'&'&771#1"'&547633171#1"'&54763317167673171# _   : E: E   _   : E: E  __ ;E ;   E ;E ;   E 4~2111230111''1&1211#"'&5510#01#111&'&'&'&76767676'&'&''11101&'&'&'&7676767514763 0  /0 1     1 1   $       ! #       # "/65114'&#"1327&'&767&'&767w @    I @ $$$$$$$$J211171611''11#"'&5511'&'&76771'1&'&76761514763 p  rs  p  o  rr  p  C DE C B EE C 14'11&#"1#1"331132765513127654'&##15      p      @,6711671&'&'57111676751&'&'--DD----DD--))))D----DD----D`)))))&'&17711#1"33327654'&##1`  .@ `` @ @    `@0"1#"'&54771671312#!1&'&77167&'&'" +<>())  "` *)(><+  ""@D47116331131#1"'&''1&76761316767&'&'#1&'&771#1"'&5  :&''&:O   Oh   x'&::&'  x 96'11&'&1331132765513127654'&##1514'&#"1#17       kr  P P   @?67312##1131#1"'&''1&76761316767&'&'#1"'&77! r:&''&:S   S !  p'&::&'   @#>6'11&'&101016767&'&'711#"'&'&54767632  %--DD--*+@?   k  +9D----DB,-K  D471163!11'&'&71#1"'&5       P @"Dc&'11&'#13167674'&'673#3#1&'&'67673101013101015011101#10101&'&'6767310$%6 6%$#$%6@6%$#@   6%$$%65$ 6%$$%6 $5@@81132767654'&'&#"&'11&'67671'&'&77@   XA+*--DD--$ @  -,BD----D7*  K1111'%1&'67%16}   @ n     @@+"113!127654'&#!"113!127654'&#!0 `  ` @     11117%167&'%1&   @ n     0<I6711673111132765514771676551&'&'#132765676'&'P +'  *$%6 6%$  P   "0  !6%$$%6 P]112#&'&'&'6767671&'&'&'6767632113276551&'&'&'&767R6666R H9:"""":9HH9:"")-$36%$$%6+    66R@  66RR66  "":9HH9:"""":9H )!!$%66%$ P   R66$$$$!(&'11767713117676''1#3#71 x(   (x*HH`  LL  ` @/>11113167674'&'67&'&'##3#51313#3#15@6%$$%6`````````$%6#"06%$@, "327632#"'&'&767632#"'I1<<1//1<<1 DVVD,,DVVD 1//1@@1// AA-9999,BB +67116731#1&'&'3#3#1316767&'&'`?2332?`````D----D`32??23@--DD--@511113127654'&##1513127654'&##1513127654'&##@       @-111132765513127654'&##1513127654'&##@        :116767#1"'&54763312&'&'&'676767'&'D----D;++ }  >>Z?2332?X=  ,?`--DD--$#8  X9:32??237  (2%53276551514'&#"1!1514'&#"13276551!@         @1"113311#1"3!127654'&##113127654'&##  ``  ``     @  @*2111&'&'51476321676714763  --DD--  ))  D----D   )) B565114'&#"11514'&#"1132765517117676''177 .   A j / x kC  ˍ @2111312##1"'&514763@       ,617161#"'&511#"''11#"'&5167      $611476321'11#"'&5167    ( = 5"1132767654'&'&#11#"'&'&'6767632+%%%%++%%%%+45;;5445;;54`%&**&%%&**&%=3333==3333=@.67116731#11#"'&55153#36767&'&'#1`D----D`  @```))``--DD--` ))@71167'1&7676167&'&'&'&'&'6767671'&''@--D,#H G--DD--5D?2332??2350 .D--V  U*7D----D"32??2332?V=9  8B+;111132765513117676''16767&'&'##3#5131@  _g T(()=pppppp""   x$#.=)(""Dh013'1111&'&'&'&#&'&767627676'&'&'01&#&'&'&'&71'1676'&'&'711&c 8 :7E    9  8  :7E    9 W   $@     $@  #"1133113276513127654'&##        `  *2111676751476321&'&'514763  $%66%$  66RR66  6%$$%6 R6666R 611116761&'1&767     9   B.6111167116761#&'11"'1&767 nUUn  QQ   $&   16'11&'&1'1&'&117677117676''17y  k     %&'11&113276551716'&'&1':      ז   &471163!11312#!1&'&71#1"'&5 @         L  ~011&'11&'0&'&'&'&74#1133233167&'&'&'&'&76767674'&'&'&'&'&'&711&'&7067676'&'41`    #/ ,=-3    &   !77D\CB @-* #"""  --&%     &D77 !98X5## ( $H_n767&'&'3#351#7&'11&#113127675531131&'&'&##1131#11316765##3#51311#11311#113''#11#17131'!!!1!127676'&'&'#3#1312#731'~  (OOOO"++-_((_k-,9997 "J   z@@67kk==;:pT G..[[[E>!! S+---K[  [[@:9n+43&%U21ge34 F%67&'&'276274'&767'71''11'&771'1&7637171632112.?>__>??>_)&2F:::;;:HHV5IV::::VW::& ,,,E))E,DD:7716767!1"1111!1676745454545 "!3GGCC13%$%%$,+   (I3!"<<<H2"",-9;22;%&2 ""210A@10B'1''1&77151117151611''11171'11'51477161151'1PPP_`PN_PNNP_Nd...88.\w.]8p/.ww./p8].w\6%&#"327654'&'%!1#3#51#1#"'&'&54767632517+    I555(  8   @@   N  [h776'&'&7&'&'&"#"#"#&0172323237676767676'4545456'&'11&''&76767&'&767676#11"'7&'11&'!11!16767##"#"'"'&5&545474763632322    C%)*(%)*(@[''''  E    -././Z@'''++'4&'&11767716'''716'&'&117676's   \\  \\\\      t {} }}}{  =JW4'"#&#&'&'171&'&'&'&''&'&#"#0'0'&11"#0116767'267671111"'&5017136765&'&'&'&767610'&76' ~ c &- /8     /%   2  _ X O66HH67"  /##  ,+88**4@ '   $ ,   %9   @y ")07>E%3#351#553153#351#3#351#3#351#3#351#3#351#'3#351#3#351#53#351#}}}}}}}}}}=}}}}}}}}}}}}}}}}}}}}}}}}}}}}IeHHHHIIIIIIIIIIII77111016'&'&#67676#1676776751'&'!1534@i;: 78M  9 !!5BDD&+??21:B97@@Y0$%4./E70/ i?4?A-Rax7531#"'&'&7116763671&#167674'%&#"16321&#"32731131514'#'&547632'&##113151312725676'&'##15131277#1'1#111317j9)+""      ^?' ''  $$$%4O)))  002      OY    L? A \\\\x@ _ "%''&5716'&''1414'716'&#'1"1&'716'&#1&'716'&1&'714'&1&''14'&1&#'1&'&1"''1&#"1#'1&1"##'1&11'1&10'1&1#1&10#1"101111111312113711771177101771223177120113277163176771236317657143671765'167176''1671276''1674371276''16571676''14771654'&1#"''1&'&1&'3125514#17131231&'6711#&'6731'77676''1311#1&7'476311&'77312#"'&'&'0'6767&'&'&'&##16713277111#1"1'6731&'"'&76311         %)(& -0  O  X 5   ?     +>)!! #            ## 6#    x#%$ $$$ T    / %(   2%"'1'&'&'&76761&7676513111D70100#!,-3X +$'4)) ''21.-Z] 3%5!1513113155#3#13@}}}@n9f%''"'&763716767714545&'&&#&3!1010127716'&'7"#112#1130101312765&'&'<>A@( j  23 $$5"C"A  (  c  6#$+!!!7676767!131&'&'&'&501!16'JJ !))U8 %YQN88 @## G&&,8 '*+,(DZ%''&#"11327716'73312745'1&##1"''&##1"11331277145#3#"133127716'&#'CoBCCCBBBmBm `+276767654'&'&'&#'71'1!31@     B/.`@    @./B 3#371%''#1'71t-vvvuuutg 9]' b%&511476'&'&'&767676776767676767676545&767676'&'&'74'&'&'! ,HAA   ""          c%,,,!"F$& &   !   9P`%#3#13127654'&#'#3#13127654'!!!1!167671&'&'#!1"'&514763!12#3#13127654'&#1:::: :::: !!!!?}:::: b  b  a!!!!b  *S\eny72767654''171654''1&111327655113"151&'&1'1&#11327716751&'67&'767&'67&''674'&'67&'367&'3767&'67&' uKdtJJ ee %@?? @ >  E+ :s UC++ ::, T  T $ RH2Yq1111676767&'&'&'&'11&5477111777276'&'&'01&311'167632''71654545'1511C66  66CC66  66C( g N   I//80+* "!!! <=[ 66CC66  66CC66 c--5! N +$% \=>h1D]p7#3#'1111#1'1311117131131713211#"'&547632711654'&'3111'&'&5476721151311#'11327654'&'#3#51#1#"'&7513113'5133#31#%%%&-&#$/   "   "" &&&&luuttvv,h    >f   fLF$AW% 5777'13#3'17'17#3#17%671167!11!1&'&'@ZZZZ'ZYYYYY3YZ     ::   `  3 3#3513#351'5'1151#117113SSSSIRRRR|yT p/AA/PII{{iLj"-8Zmx7"51&'#11331276551327654'&#&'51677674'K56'&'1327676'&'&'11#"'&'6763267&'11%"111&5632701716'&#"&'&1132765&'&'"5&##&551312751&'#1514'&##1"111#1"11133113276'V .   # "! #V''''2  #` + > $"l +  !;Z---  -""  ""k       =3@) t0BIb~74'&##1"'&771673167716'0#01#112331677145054'e#1133#371#%#1"10013167141#3#1"3013167716'&'01#3#10010131671417761#1101013013127  "   Q)3i4443,)[)\))) ) 7)))\)\ * )< f)!h)3Qz^))4^))))5Mcy1!1&'&'51676731'1&547632131716321311&'&#!1"1!1676751#"'&55147632131#"'&551676321((( IXK ('  @         X'(+'  EE  F   + ! ! ! ! LHZjz%11#1'&'&76711116705#1"76767673167676#01#01"'&''&'&7676"771633121#'"771633121##3127514##1"%451145&'&7674145   !< e 70)%-,+! 8.&""6,& pq/KD?, %&   + ->+  -+4(,     - (+[761311#"''1312777''1&##1716321#1"'216771633111#1"''1&#"1#1'1&547713 Mab L L baML  M%;;%M  L :: MabLJMaaMLM  M::M L:: ,111311!16767111#111&'&'3671167!11311--77-,7-,7--6$$$$6$$6$$6,11132771654''1&#"#11"'&547632###%00%##%00%""""%00%##%00%##""""3K]%11#'&''1&'&'01'"'&5676767267671%&'11&767476716'&'&'"1715-"", 1##&7))5%##& '2))0'0#"5/0&*E'(K5 V''CI??''0'&%>>L~.005J>/H`@?N>E&9DO\111111111''11'&''1'1511671'1717111111'%7731171'7'''17'1&761* + ED +   ^^^J +)))/)  *   4 '''{z'@c)))ma*MMMBooo U`S;_'&'&76767221231716763221#"'&''1&5476321511##'&'&54767632323214711651167654'&'0'&5&'&7416743436362"#"'&#&5"5&'05&7671#"'&'&541&5511"#"'&547716321#"#&''1167676'&'"'&'01&7&7476767231#&''1&747632167&'&'&76761"'&'676210#"''11_98 HJa,,W@>3$#*)$$  ##W8. >?J,,W@> 34U)0F? '011F? ')NPaaB@e//Y<=WWG" k!!&& "&'++'&!"%&!"&'++&'zD:IICC('c//W<>VWGF1#E>!%#0V#10#F?!$$ 'O6'&''1&'676321674'&'&'&7671'&'&5476761#"''11 ?"!!"?    S2  ?!!!!?   S2  -88=?88- EW.,+$ @-88?=88- EU0,,# 8AJ`~67&'11#"'&5476326731#"'&'&'&'3167%&'6767&''&'&'6767651'6776767676'&'&'671!&'&7677'1O"x""**//*+!"x"#..#ny##  !! !Z! !![..*)  )*..."    "  "" ""   )JS73#31#151315131513155#1131131131133#31#151#11#113151315131131#3#1315`  @ @@@@ `   @@@a!!!"1!167671&'&#1111#&'&'&#"516322751#&'&'&#"1&'5167167632276767@@0       @ `e!167671&'&'!1'11111001#&''1'1#111&'&771716763601320130131716767632@R,,, E67C -{`@@ ttt3))3t\\ 8AJu~ #&'&'76767'"#&7676765&560127'&563''6"'47674'&'#10101011101301'76'&771'1'171711'1111111'01"#0#'&'&"1&5676767&76'%6'&7356#"3471166'&'3#3256'&'"'&'&5&7620#00101AVU@@%      `\:!   ==   8  $%$' "":9HN> U   Y 0/.L%     _ME`3,-#%!  =  //*+&  H9:""(}(    )B7'6763271!171'171'171'171'1!11#"'&'&'&#&1:::   /********P/   #"  >0 88888888 /3 ? ELeq%6516'&7#1&'&'&'&6711216'011101701116#0111"711611101011111111111111111#13116"'1011111&1111111111717131'111030103&11�'&'&'&7&76'7167115132767614767716767716716767031167763160131727316'1127316001031116'"10105"1&#'111&'&''1111&51101411111110110&'&1&7011163&'4'11050111&510654#1'116'0111"7'4'&'&76711115111116767672&'&43011101010111016571671111016767670711110343670711116'11&77165654161#'111111&'11&'&'0151&'7'7111&'672'4'011101"54701111117716717&'&311011&'0151&'71171'1&'17677%0311016"101111654511&7011|       1)*              :C  $$&e  ##O8  \     #        '&55;%            ,)   /     x   "  *x )  %677167677163271631161001""##&'&55167676321&'&''1&'&'51476321#"'1'&731477145&7654'&#"67'3076744#"""331657410121076577145&''#3#117&'&''1&'&##13276767 ! .-5I-5,6$ *'"0$ " '+<o t "%1&&B4$$u %' %>*&% $%  2 1 &  ! )$. xP "+/Ym%211##1&'&'11116767311&'&'27676'&''&'&7676&'&##1"'16731#1172767&#"1L, #3[i7117ij8 ) ,VV+''+VJ' /$-    #:` (''%5E>ll>EE"0 &662]]26) (!%% ,iE - m111!167671&'&'!#11&'&'111167631121&'&'27676'&''&'&7676&'&'#1&'167311271167&#"#7#@@ "=G$  %FG%:991  &@H    @#.)HH)/. ##">>!$    FD  2;111!167671&'&'!71#1'11#171'1311713''#113@@)hhhz_KV/oubCO/&@TwwwbbZZ!3#311#1'11#171'131173#31#1GGGoGet(((*𑑼䅅N|c11&'&'01&"76'&'&#32767&'&"##"'&'11676'&'&7631&76731&767667676765254##01&'&'01'&'7670567&'&'&'&'�1'&7676'&276'&#&511471 '(0'67K 2E      9.%"1 1@   %   Y  , / '9    !'!!3  )# K      S@A^11"'&'67&'115167673#211111#1"'&'654'117167673#211111#1&'&'6767 3!""!3    3!""!3@"!32!"########"!23!"0I^111!1&'&'16767!116771'1&547&'3116771'1&547&'3116767&'&'@' 'w' '' 'w' '@ )2;D55!15131513151#11#11#11#11373#31#1573#31#1555311#73#31#15I%IIۓIIIIIIIIIJJJJJIIIIIII@IIIIIIIIIIIJJJJIII0%01&'&'47116767677&'11&''1%11*+??+* +G3' *+55+*__#?****?# 3 --MMJ3#3167630111"11111&'&'&'&'&'&'&'&'&'71'12767671116701070367676'&'&'&'&'ї"0110115111672111716'0145&'&'0'45&'&701410567676311636362123231111"011111#0"176'&''1&767011163716765110367&'&'&'01"#&'0111"'&'&1111&1101"'&#1131221111013676767674'&'#&'&'&'&767672165&'&'01"#&#&'#1&'&'&723236763310011111111031NN,           -N              +      +            3  ,**.-  -.**,  3h        ..      {21616110"1#"'&'"'&#)&'&'&'&'&'&'&'01&'&5&14771'1&7436567676767602171633#3#1'0#01"'01&110332767676701676767676767676543'1&771&'&'&'&"01"1''211#&'"'&'&'&76767676356676701'&'&'&'&'6767676767674'4'&'&567672767676'"#&#&#0"#&'"#&7474767656'&1&'&'&'&""#223'&767456'4'&'&'&'&'&'6767670167676013*&        &'         'E                                  , &  <  =  & ,- '! 3    L! ' -                DU111!167671&'&'!11#&'&'1#1&767511'14767676767&'&'"1@@>'')(;!;()6.13@T"#66! 4!+, .u111!167671&'&'!111127654'&#&'671167110#01"1"111&'&'1#171&'&'1&'&'51311327655131@@   "## % !"%  ? @   '*$$ Oo5%#NN  N*#171#15176767#151311317131131713V5PQp##FIqqE+*  &0;EMU]eow''1673771&'167'47'171&5''167716'1''167'17'7167'71&'67'1771&''671&771'11771'''71&'1717171&'"171767676'&'&'&#" !&{" !&  l "%!d ##&&1 ##&&222  19p""" !w910U*10..!!  ,,1  t!&" && &&=" !&[D1 "%!aG 22 @"! 521990U$$/000''S111!167671&'&'!111&'2327"'&'7&'&551&'&567&767676701@@)*<9,/" #") @-*+  #  =1113151#1513151&21&#"1311#113167671&'&'!@b55~   TEN"G N@"5X!!!"13!1276514'&##3#5131'"'11&547632##3#516'&'1#151311316763  BBBC"   BBBC@1    hj ,u t}&'11&'!11!167674545&'6767&'676'&01&#"&'&#"'&'&#337#&'&'6767"7'432"'"'672#'&563''&76''&76''&76''&563'@        2--GF//3 [  `@  .    .    *+8F----F8+*7  :1101&'367&'&'327&'&'51&'67&567676767#"CBaZG K8$  %,'87B,/$ !(GDD--.,' 90 , % ;%&'11&'11&'51#1513151&21&#"1311#1167671"":9HH9:""56U55~   TEa??H9:"""":9H\CCN"G NFFd7#"5632'76'&7365&#11'4545"'&'4'&'&'&7632767&'&'4767&'&76016324767676767&'&'&'76'&'76'&76'&'76'&,BkDD..M    ,!!  !    L.-!"89F ! 3DDjU@@    F    0 #%  @@UF77 #p%1111"'676767670136767&'&'767676'&'&54767&'&767676'"01&'&'676767!!88E&# 9##++BP*) 5.!    G++!!88EE88!!E88!!   ,+B?'(,+=   + -3    >=PE88!!!!88Em!!!131'1&5476701674'&567636767&'&''&'&54767&'&'3167671&'&'@I   ".5 *)OB**##9%" # 2-+   =++'(>A++   @B[&'11&'!11!167676711671&'36767#15131&'&'5#151#1513151311311#@+)  9^,+#`@+  " ,+ s'@%&'&'67671&'&#6767#151355#11#1131131513151#12TR6666RN24 3!""!38m877888T3466RR6602 ""44""C88888888:7#3#13'&'11&'676#3#516'&'1#11311316767d]]]].]]]"# ]Z "D+)+)'(>Ch{711&'&54767%'"#"#'&'&'&747&5476726326763&'11&'#"'&#&'73176767'1167654'&'    &#$*)&&++%%)",-)'!(@$#""$0$"#S  w32-%%-2@1   2@3""++7 {"%#3#716'&##11#11#11#11'1!1aaa410 1'17131117171!171!171!171!@@@RtM pPP_),,aR5RH`t%6'&'&'51#11"51#11#"#&#12361'"#1232#1315123011315167676'&''271161111'"#555236'"#6- /11     @11=&%#>*OMNO4 :DCCD8.l  `jjj  1:A&'&'&'"#"#23012367676767674545&'&'551& %22++++22%  %22++++22% D%  %%  %֣QR3711##1&7712#'1&731277111#1"''167676331 A E,A -ܐ[ A ]!] B +1  zL  M  ;  /J&'11&'!11!16767&77101'1&73121##71111#1"''16767676331@ 1 . 0.B /B= / g`@ W6  7U !w  xj  *711'171'1717711'777'1711111'LUUUTTUTTTTUUUUTTpTTTTTTUTTU} "1%''17''1''1717#3#13!!!51#11!151##; w b'(g()))')~ UUU%T ((x%2[116767&'&'&'11&'67677&'476324'&#&#"#""7236776565454'#"#"#"'&'&'&'&54545476767676232321 !! 11 !! 1    L%'6%$$%6(%%'7%$$%6'%0 ""  "!  !"  "" 3! 11 !! 11 !    7'%%'6%$$$7'%%'7$$$%  !"  ""  ""  "",?!!!1!167671&'&'&'11&'67673&'11&'6767`  `     ` #2'#171111&'&'&'676767''131713113AAAA!!88EE88!!!!88EE88!!d""bbbcYE88!!!!88EE88!!!!88ES44"1!16716'"#!#3#'131DF D-hhhd ֓::11&'&'&551#1"'5147676763311311#117616 $; /  .G S  T!  ! D "!! s R  AR&'11&'!11!16767&'11&751#1"'5147676763311311#11761#@7  ,44 `@Z+  H4S(|.A%&7&'&&'&'6767676767&'&701'67116'11017?38  ,"#- 9 '7( !!C'*   *##771#15'51#1'51#153151b"""Բ|"@@9%&'67!&'67%776'&#"111&#"'1&#"111!1&'&'0001;@@;10?&'@'&?SSSUUS#;:KK:;# )s311327&'01&"32327110721256#&013&'1141&'&'&'6'&'&'0'&'&5456'&'&'#767676723117676767676'63112&'07676'&#&&'&7'2116'&#16&76767116743676#"'&'&'&'&711'&#&'&7116'45&7676767676761'&'76'&'&'&76767667676767767676726'&'&3"#0#6'&1'%11'&7676767672176723603116701676'"&'&'01&5&'    &+          )                         E  *% !     =      =          $                      )8GVet1111676767&'&'&'&'&&'6767'11&'&'6'11'676745767&'671167'&'&'11&'6E88!!!!88EE88!!!!88E.++7 :8322'L77 -z ??R :005R++A 4980 3%%$!!88EE88!!!!88EE88!!r8L0#" #!""02&'((-:T#%%;++% )):,%$ a%65&'&'"&'276767&'"'11&'476367&'&'"'&'&'&'67632#&'&'&#&#::W'0 ::W'/ 2#" )  +!"(+!!  ( !!"+W:: 0'W:: /'[   +,   &,})W!!!1367676760162131676725716'7#11312#1"6516731C  ?S 0:  k[I :NI ! @J<<<    FS5O!!!014!167671&'&'#1"'&'516763312711##1"'&'51676731PPS  S  Q  Q HGP  p   61111676767&'&'&'7'1&'&76727676E88!!!!88EE88!!!!88Esqqqq  !!88EE88!!!!88EE88!!♙      *T111731767676'516'&'&'&#1&3#351311676731#1&'&'1#1&'&'++KK++++KK++-333005M)*++KK++++KK++i@JC11X7Jat6'11&'&76'&7"'11&'11&'676763272167&'11&7676'117676'&'&11'&'&7676'&117676'7&76' ' 611J3-- >## C=>g..BA()/.AA)( %  *)4O!   V    !   &+DK20 3 33+,*!!+*!!+ $3++           )11&'6767&'67677&'11&'51()B899Z)A5+  ,5BB)(Z998TAB!C]^CC'(00('W!BATCC^]C\%11'11&'11&'&5476767'&'667#&'&'66765&'&'&7&7676'"'676760/; 1()6$$ ""$#;"!  < .""!! ''-2 >$# 3 6$+;%%.&& A)%"(:7!!!1##1151#1"'&555!!!51!15!!!51!1%!!!1!1514'&'dWdddd[tZZUUnUUF&'11&'!11!16767#"'&'05&'&'"'1676341676767676'&6@B-   %  B2?`@T33 7`- N?.R'9Oaw711#"'&'67673134711671&'&557"'11&547671#211#1&'&'676334711632#15#11&'&'516767211&'&'5135"'11&'676731##^   /    /   /  v  v   /    /   /  v  v   /  v  v   /    /   /  v  v   /     P[h&'&'67&'&'&'47632321&'232763012171'1&'&56323276301217167677327&''716767&'1111&'&'&'676767#&'11&'11&'676767>eee6 !R ;U8./M/!  L @@@%"AA0=!!88EE88!!!!88EE88!!  65BB56  65BB56 32@/(L& 6,[G& y -00<8.fE88!!!!88EE88!!!!88EB56  65BB56  65B)%7&'&'676711717''71&'5171DDDY8955T7""&%;D%(F2#  ((96(' + %'T!+ a"7'1#111317674'73179998`j'^ & ##B]]]h]3ZS"# &.%11&'&'&'6767671&676767#15131@AmE88!!!!88EeAC/::,++,A1lBB!!88EE88!!?A*)*FC,,V"_p76711671167#1&'&771&'&5%6711654'&'11&'676767&'&'&'114767113211'"'&5676311#'&763211&'&'&7632"":9HH9:"""":9H 1#^  9*!00GH00 +9       0H9:"""":9HH9:"" 1#./5f    &6####6&   ^  & 9  Ran{!!!1!1&'&'167672711654'&#11&'6767674'&'&'11476711211''6767''47632&'&7632@@@ 2$)*??*)%2    *('@   !//!  Q  " 1##Gf1111676767&'&'&'1&'&'513116751676711'151&'11&'&'5117116751315E88!!!!88EE88!!!!88E :" ":!!88EE88!!!!88EE88!!k  ..m { / /0!K%5&'&'5117116765513''7151&'&'1&'51#1167675147632 /0 "4 V###3 // V /0  FFF/  /FG H:$/.EF/  /  4F&511&5&'&'&'&'01&'&'&#&#!113!1276514'#151#151673113  `|  ` ` &/@IR[#3#13151#1#3#5131%5311#113151##3#51313#31#113151#173#31#15'3#31#153#31#15RRRR3)RRRRRRR3{44444444L]])]]))]]u33L9Pi11"'51632"136767&'!1&'&'16767!1671167&'&'"#11715134'11&'"#1715136765  5      `   -4  4   D CD  `  `  !" 3! 3"9KR 7&#""1117&'&'&'1101674'&'676767671#151"'&'6367715&'11�1&'&'&"13"'&'&'517165&'"#&'"#1276767327676763676551&'&'&'01&'25276767&'&'&'571'''71''27676745&555 '  f-  19 ;##8  !  5       !"    % %! N G -  ^"  -##                 %$/".===3 "H[&'11&'0101276745&'&'01#1"'&10111&''1&7671167671111&'&76767#7111#1&'11&''1'1&'&5&'51&767110*##65SR88##*  +-P*  ~; &T(11CS8866RC11(  ,2%( "j= $+%.*X471167261&#11&'&'&'&'&'&7&'&5'0167676763216'67654'&'"&6'11&'&'&'&'&'11"'1767674'&''''#"'&5&7'12767767676767672., d,&  ,,,  ,-  --d ,T,,,'   ,,  %d +-  d,& u,,, -14 -,d  , 5---'  -/4  $ @v!/8U[765&'&#113127674''3#36##15#3#51316#%#3#51314'11&'27#1#&'3165'67#0 !/2$%AIII OSSSSU6g8 =;$###=\>>54s546Ee  Sb5 ##:('&&;=$%W @55 9BUx77&#113'#3#13127&'&#3#3&'7!!!1!167671&'&'#3#5131##151312711000#1276731#&'&'6767.-(((+ ???i@@"NNNN#][v!d" "2! 4- K@; '  ' " /! 8Rex%1111&'&'132765712767&'&'11&'16767''7676'&'&1'7"'11&'67632#5671167&'&'!!88EWA@_T)'(; EDeE88!!        E88!!12O'<)((V 7b@@!!88E        Ubo711''17676'&'&%&'11&'!111671516767#1&'&''11!16767767&'&3476'&5 u8%%&OY@    0 Q%%&8%a@d!!!!  3Pi1111676767&'&'&'"'&'&"#&56767"'11&#&'&"#&'47676327"'&'&"##&'67632E88!!!!88EE88!!!!88Ee/556 >=<6  0?@?dM 9POA5A765+ !!88EE88!!!!88EE88!!  B - L  @,71311#1111#15171'1#151317171676131@bbb[ ,]]V+bc T]  T]5K"3DUfw7'1#"5'171477"116771'1"1132771'1&#"1132771'11132771'1&'7"1132571'14#7"1132571'14#7&'111132571'14'&#"11411327655171'1&'"1132771'1&#&'&'"1316767&'&'%116571'1&''116771'1&'"116771'1&#oox'&7""6AAAEEA-iEEiDD`####9899 DBBDFDDFo @ /:DD>7#$ "!<AACCCC5%5#'&'&'&'3167&'&54767'"'67&#"7&& !"K&+!&18 %%6444;++ $$MNuFF-,?&'12 !!+*.2< "+2;DMT''&11177165514'''1'15#51'17'15''7117''711557117''71 ବM_,_M7777M_NNNNNN_M7777   asss3?gggg?3s%%%%Jsss3?g444444ggg?3s%%%%J@0]%&54'&'&'&'&&'&'&323232767676'&''"##"'"#"'&7676'&76327676'11&'&'&'&'&767676'&'&'6767676'&'&'&76()120).'' %#" ""\\( ",<='('(C ""&(244%$ + X  "# &   3 3)0!!$#'%!!#< (( ''? **&P   # -  p&'11&'11&7676741272767016'&'&'&'«014'&'711016767011017676501676'&'&#&32G78 7.   ,,  & ($$BCl8"#99F<44$$$232  32  %% $&'"#.-YoDD '9Ma~31&'1&'777&'47'167'171&'&'1&'151"'7'67'16351167''1#16767'171111&'&'&'676767#&'11&'11&'676767'711167&'67167'167&'71&'1&'71&#"1'11171167' ;00 (>  >( 00;x(>;00 6(>;00 ]!!88EE88!!!!88EE88!!  55BB55  55BB55 '  3 @@ 3  4 @@ 4  0  .  1::1 p .  /9- 0  . /  E88!!!!88EE88!!!!88EB55  55BB55  55Bk  /;:1, ,CC, ,CC9Bp7 "'7674'&'01711654'7!!!1!167671&'&'"'632#3#311#'1032&747&7470311&'676'1#151632'516'01&#&'7131137'751454#"#51673170301311#110117y@@^111 *EB y I  5j,  $&p  v@   -   &lKi  *B(= ,?Pmv#3#&"13676'&'&'7176767&'711'11&'67'&'11&7116755636765514'&'&'7131131'&'632"'&551416#&516767317311#1107OOO! 7mC  %? % 3      T?$$$$%$ &9= "(.   H' &   d w! $##$#j$! )a  -!11!1110101015#151'13167676731@P%  #Q@@6eeeg8   7gG11'&767&767'111176'&76767'&76767&'&'H 6  2x@++   #$3:'&&')8..//G0bPP7"5IHY%%877 /.-'':.!"   )(4G//L%"'11&'11&51101'&''&'&767&'&5#"5&7676767&767#  $$$$   '&VU''     4 Z=>==[ 4 3)8Sbq2&'&'17127&56767'"'&'6763"'11&54763&'11&'67631'16767'"'11&547633"'11&54763 76IS77LD ..Gh    00CH....H6k<&&..GQ3;"B+,5 0 <'(('<<((0!%g"1167654'"116767&'&#751&'&'!11&'&'&76745454537676'676'&11'11"#"&'&"#'&'51476!16   P!  !O 0('"'&/ =,&Z %#H*+ $  $ *+G$$  / -#3#13'#3#13'713117131717#1151#11!&&&&j''''aaataM'MMMMDW5Ynnn[[[[[III@@&:M`7'1'&'&767676771&'&17'7676'&''1&7&'&1771676'%1767514'&+dddk  ,$+   J;;; " i ! > k  h  :6111 ,)  o R n^^^' " ( [    (U71111##1&5167272"#&7&'"#"73167410767676237676'&'oK ;+=, $$3  "#%&  @  6&&   t &&./4 g#"  ?= *;&'&'6'45#3#31&'&'1131&'&'#7&'#16765&'7  0]]] >h !05''r &&9m YI AYI30(%%#%'I Ri401,XQ]^dh]]ND  FL.445of@+BKt%11#1676707677!1&'&'16767!177#11'1'1&#1113377#11374'&'472171&'"#"''116767''#1&131476731013!j     Y???+'@$+^(("      <*4% `  `  jH 2 !  #2  @!Vt&8Jat %&'67%67&'731&#67&'011120#0011"15015"101&14141430141030303012010031101410501"1#11315111131'!1&'&'16767!11127&747&'65114'&'&&#"51#113145&3231&5&363157#3#1&#271315 "'63271&32#"'1767''#"'513151#151#11#113113773#3&7'1'&'7&51#11315147674711671&7'1'&57#3#1&713153 "51#11315147677#3#1&713157531513151#113450'01"50#01"10##101033230303052141417#3#1'1#1111511317113157&'11&'36767    v k  jK     (';)#76#);'(5555   -(    $   ;    B  "(  (':*#$ %#*:'(&        Y`  `  :('0CD/'';l,@@--@@,M%%      % %%4K|}P;''*+**'(: @ $<S`s%4##1131257!!!1!167671&'&'23116111#1'1#11#'3#31#11311#11311#''71311#1''211#"'&547635&71'&'67627116'&76761&'713#3#513123#3#513!1676767%&##113127654'      ,8----E$#'  1a     f  Do`YX>?*     ` #!!RR7777TT     B   R  R"! `6 @7fm711!1676751#1'11#151#17131151311713151&'&'!1%77131'171#11'1#11151#1513151#1513151#1137'51'7713151#11'1#11'1#113171311315113'771#  > BRNbK   +++*3DD3*)3CCSQQSza''''%%%%'< =@3>+ B R%"'  ##@@00  ....HH//IG! !H***S)\ddddYYdd=.... @(B]{7"'672'#3#"13176'&!#3#"1317&'&7!1&'&'16767!14'11&##11331677162367#3#01&6733167714'77454'#1"1'1&'#1"316774'11&##11331277162367#3#01&67"33167714'74'#1113316771167&#i      @ ( -U    (@@@  ( -U   /Z0 `  `  f-    @b\\\'&  kf-    @!he4 @+Le{%&31&167&'7!!!1!167671&'&''5127&'&'&'6721&#&7#3#13271#"'&'517113&11"1#1513116761#3#51357517&'1151311672#7#3#7271#"'&'67632$u        j/  .  E  #J$ ,$$$$$$$$J#FFF 5   ` ' "  '"  82 r!U} }}) !3  1QQ7''"'&56762767&'&'&'&763671&&'&'&'&'&'&'"676501#* "#J7!! '$(*; [*F <, NA!"~1Q333*63 +,1$M0; ! @&&'&F r&'11&'!11!16767&'11&501&'&#&367671&'6737&'&'01&#&#&7676361&"3#&'&'@     NR1  % ,9%"/`@ "   UY)   % 0  )P^#3#&'&'#1316767674'3167&'11&'&'!167&'!1&56767!1!1%3#3#1&'67hCCC<=NE88!!5C<=NE88!!5`98U9..98U9..* D)*!!88ED)*!!88E`U89/U89/,@Tm%6711671167&'&'&'&'&'&'&'67676'&''671167'17'47116111&#&4#&'&'&'1111&'&'&54767#"'&'&767"'&'&'676'232367414'&'67676767&'"#'&'&'&7636'112&'&'[      5--JY32 ##  "! "    ,A-"!             b  !" '' -,"89-,98X! k  ^< -e  1*!       %% ~  /'#177!1&'&'16767!1#11317113+++V+   ` A____[p[)G`  `  **[[2SZe| &-7K%''65&''165&'"#1&#"#1&#1021112731327313674'71674'7167&'''315#3#&50171570'"''1650145712715''650501715771'1'171'#17'''7117711#1'111'17'7'1713#67311'1377631157711'15'157711#15&''151311#3&'#171311#77'131777317#3#71177'171101'333 8jj86  7 4jk4 7  s,,,,,,,-333843...,,,,,F#@b  SSSPSPOOOD|q:bSu qqq9{K3ht36<<<]EE#rQQ""RRs<0/!.'56 hLL##A@V>23$EF^#RQrsSS"&-!11<86#NMi VBB#9/I'#1&&#"167267"'&'"&###116766'&#&&"167632632 8//8!-/=*(;%!48<++<84 %*>G9119G>*+"""14;,,;41"#&8//8&#Q +*))]""-''  z$4DTd%65&'&'&'!16767&'&'#1&'5167313#1&'5167313#1&'5167313#1&'516731/0G;,-$!"#4~4#"*  YZ  W  G0/##9# $4####4+!!  oo      ' ")07>ELSZahov} ")07>ELW^7'71''71'7'71''71'''71''71''71'7'71'#3#13'#3#13'#3#137#3#137#3#137#3#13'#3#137#3#13#3#137#3#13#3#351#113671167&'&''671161#1&'&#"36''7111327674'&#'&5'#3#133#351#%#3#131717'11!1!!!51!1#3#13#3#137#3#133#351#53#351#'#3#133#351#3#351#'#3#137#3#133#351#113'#3#13d#|FX!!!!/""""/""""!!!!_""""/""""_!!!!"""" F""""F" ''''0       y V 5zz u!!!! !!!! !!!!0""""S !$""""&    - * 0   & P " "''''o     U""+!Qjjbb}VVVV+;;! ! ! !W B!" " !4G#3#"1#1514'&##11!1671&'&'11&'67673&'11&54767jjj  j (( L|h%11&'&'&'&'2767676701&'&'6767676'&'#&'6767&'&'&'67676363!!2>**$#*)<79!!!   )(*@,,*+BI10'!$$01.  !2  ='&/ w3 &%10%% )*    ('AB))))4, "!"" 2    &%= /T"11367654'&'&'6767"'&56767&'&376767673676765&'&#P<=''=4!  "      5""54I0/T5  >%&5#$ !))*+#*- --/L,,5|&'1713116767674'&'&''1171'1&'676727&'11&'&'&'&'&7676'&'&'&'&"1"#&03767676'&'&#}B[>22v19>23 3+F54NL6755Ne  ' _@22><3s22>-(( D-5N4566LN54        .5#3#1#1'1#11#11311#11311713151#1713151#17''31@@@Q^Q@00E RgYYgRD006p0 00 0p@@@@ v':116767&'&'11676711&'&'1167654'&'M3333ML3333L ''&&  v34MM4334MM43 00II0000II00,+AA+,,+AA+,!11!77#11'1'1#111315@NNN!. -#M@@[ [^\F +@M  1DU%6&'6&'4#"&4527676'&'&'"""'ʤ512767676'&'&'&'&'&'&636'&54'&'&2""&&#31&&#&&&277367674''656&'116'&'6711#&'2301&711676&'6767&'"'&717143677211&'&'676311'&'232'11#"'&'&71123#11"'&747632311'67'&'&7671125772377637767201&'&'6'11#&'&'476'&71167676'&70367&''15111677677&'673111"'&'67676&'11&11611767676'�&'&'117676'&%"11767&'&'&117674'&'=       6BB;($    !   J     Z    0    t 6  I   j$    #''2/&&!      *882R5<=7 5;9/ j   F8                  $+    !!     !       !     ! !! 6  3      $#  B- @! ! -  {$$;      C   * %H%11#"'&547632'"11327654'&#"'11&'11&'7667676'&#     $WV22' JIy&&#%*%G"#~  .   * "#)&:%$6FXo116767&'&'6711671#1&'51&'&1#1&'5#1&'516731'5##1"55147311##1"'51&5476321111676767&'&'&'"'11&'11&54767632#Z<<<{  #`  `  p%1 $&''Z @*D\116767&'&'&'11&'6767355!!!1!167671&'&'#3#&'&'676731K2112KJ2222J(  P      [[[Q7777Q[Q:;.-5p12KJ2222JK21 $$ $$ H   ` `66PX4554X5++A^q77&'&#"271'&'676237&'&#"27101'&'6762'1111276767&'&'&'&'11&'6767!!! ! .!!! !  .H88 !"88DB88"# 88GV:988ZW99;Qd%1111'&'011'&'&7676771&'&'&'&767667656'671167&'&'31132767&'&#"L .L  ,, $%77%$$%77%$Br L .L         7%%%%77$%%$7 &3t"3276'!!!1!167671&'&'&'&76761111'&'01111'&767676771&'&'&'&7676676501  @@....;   / 0    7i@@')(((()'    / 0     B!!!"1676767514'&##11"'&'&'&767636676762o 32??23  $(      '# ?2332? #&     %#z5#1'1'"#&'&'&'&'4545311676767&'&'&'&'&5131167676#6545232323111&'&5111) $$R #$%#         4"%;z  &%@SSG#$><RQSS  !865#-    !  { !!7K]n.%''1111676767&'&'&'776111'11&7'776111'11&'&7'111111&'516761'&''1&71116111''1&7111673111#1&'7'&'11&767716117111''1&711617'&77167611&'516711111'&''1&711617111''1&71161'7717111''1&71167617#3#&'11673111&&&GZE88!!!!88EE88!!!!88Eb:K@  9(^BC@  mt#&&&mR!!88EE88!!!!88EE88!!Y"*  I *  mttttC 3F76713271&'&'65&'3177#3#'167671671167&'&'!n%L`=>m)"":9Hmq0"" M$44>H::"%%%%G:FFcB$;%-3G::""--"#:%%%%%&5115111&'0''1010145&50105&5050#4'514#45&145&14101&54'0101&'114#4'0501&50'050'4'05"54'&5&141&10'41&101&5&5'14'0'4#050''1"501&'4'&'&'&'&'&'01&'"# "#"1&##1""0111111110101110167710103272301216'&'476767&&'&767&672767670145    41//% /.&   (+*)-CC^E88!!      #&)() "" ?./"9"2:BZ9:!"88E&?1111327"#&'&'&'67676731&#'11&'67654'&'676:V343&%-7,DaB65!!88EaC,7f "#++ "# 55<'./7/+&#"2222%# =((+-*(FH](!--5,* $%*3-S%1111#11#151311&'&'&'6767671''&'&'676771&'&#"6767 &1 9:ME88!!!!88EI87"&===*P@****@J+;..8=2112=<00 ,aE)(!!88EE88!!$%@mb E**?@**>"012==214#%'1'177#3#117%%11773171d%%%`TSY(.YYY}T&`:L9%#3#"1#151&##1"1#1514##1"1#151&"#516323767514#"#"'&#"5165&#"1"#&1#1514##1"1#1514##1"1#151&##1"1315167613151&#%##1"551433123##1"55143312$%%   $$$   &<  p   `$ $`@@@@p%1#"'&'51#1315167311#1&'51#1&'&'&'&'#1#"'&'67632237676762367#&'#1"!1514761Y YY e  %%  7Y5$Y ,< "!#6-B%11##1513121111&'&'&'676767'&'11&'#113151316767F FF !!88EE88!!!!88EE88!!%x2F% J %E88!!!!88EE88!!!!88E%%J%e$AJ7#3#5171#11#1'1#111#151311317131%75171'151131711111'1#'#3#5131!!! &=& !B$ $BKVVVIIV VIIV re?>>>&44&>>&44&> !!$M7&567631'171&#"76'&'&#&76&'71'1113767676'&'*0/GF,,2&8C(#"#"">&#^P@!#=(115' ! 3L&'H'$%  ?/'G# %$#"  (A7'177'171111''&'&'476766#77'11'1111171171'%+++,,,,,+*)99--,-9V22OOO}J]]JS+++V+++++Vf7777fe9987XXXI]]IY&&777'11'1111171171'7751'15]]]VllVb)222222222gggV ll Vƕgg222d22222dE%'''1&'&#&1#1'1&'&'&"1131111101670171717131676'F//F "j5  5j" (*)O((P)*( (1?H%1111"'&'"#"##&'&'&7&76767%3#351#155'&'17'3#351#11 0&=GNW`gp#!1"'&514763!12&'#11'11'1#11!167%5#15135#1513777#15#15135#1513'77#15#1513  j % o==n jIIII 666v@T@@@v6Tccuj j jjK22K%%%%J&&&&,,,,I%%%%J&&&&,,,,%%%%$I111111111#1'1'&'&'&'&'&111132'&'&'&'&'&'&'QRQF "33:0 P $$1# ;&'9888$RG+'33L5F. !/11 '&#-((.s'"#&'&54767637!1&'&'16767!1&'11&'&''16767&236'676761&'&#36767676367227     ` @ C6T   %  + ** E`  `  A''+S;  !  Ri%&''167674'&#3236'&'676765&'&#67676767676763227&'&'&'''"#&'&74767632 59'&%$B    (:('    !  ,-6 -.+C##? (,-5!   TCC %&'  >a111&'716'4'&'&'6767267&767676'1111676767654',!! &&=n 02%%<  R006#/0/0#)m  $!! ()OH+,(y<('H97/9:01 &%5:))  54IH=% %/67-     " #$00'Z}&'11&'!11!16767&7116711672&#67676'1145&'1#127674'67#"'767116767&5676743016767&'@!4&  E& "/0"     `@&-. ! %! $$ 2-"$R.%""##    %&'&#&'&'&'&'&7676767676'&'""4'&'&'&'&#""'&#726767016763217676767676767516'11#&&'&'&'&"'&54'&'&'&767676'216'&'&'&76322354'&7676767671723676763203 "   "**"   !  "     7   ))   7 Q           $      !!!"13!1276514'&#111'01"01#"'&'&'&#'&'&'4'&'&'&'&7676767676'&'&'"'&'&'&7632234767676322363232'&'11&701&767676'&#"#"17056'&'&'&'#&1"'&'"#"013267676327654767676'&'@@               $        $     @    &   &             ,=&#6767&'"'6767676767676'&&'11&567672+H/6X;;;;XX;;: ,22K/) H22K(%2//0 :;;XX;;;;XT= 2CK22 U+*2##'K22.GGi r70111010117"1'11'11'11'1711711711711327'1167'1167'1167'11654'171&'171&'171&'171&#1'1171''111715''11'1517116767&'&' - 3= @DD@ =3 - - 2= @CD@ =2 - ʼG////GG////GۄD@ >3 - - 3= @DEA =3 - - 3= @D uuuuvvennnnnn3/0GG0//0GG0/@R3#31#111#1&'&'51676773#3516765414'&'&'311#167311&'71[, &'CCC+% !-$)>2f 0>t%&8pKb11 3 ,,g*0; u 4711632&511#11#&'&'&'"'&5&'67&'7&'&'&74767672676767676767672632#63%116767&'&#"4767654#"'&5&'16753&'16753&'16753&'1675711&'&'4767676767676774'11&'2766765 0 %%     " "!   ##(  /       2)!0)112M*)4I++#    ! ,/ 1  h''      %% ,@    i)**  2        -34G4<.**&'+d*"5))%I`1111676767&'&'&'"'11&'&547676321&#2767#1513175#151#151315131131E88!!!!88EE88!!!!88EG!!0#!!!Fu 7$##$#!!88EE88!!!!88EE88!!!! !!!+ 6!!j####$##$M#&'&'51672751#&'&'"1#"'&51476321676763276767 !------   --! P @      L71'11'1'171'11'171'1111111111&'&71676#011151717111717n;;;'al(K\}* BN !.:%%%%( Ah>&1,'!e NF6 7 M"$J,%@%#3#&'6765&'&'767676''&'11&'163#&7&7!;:ON:;%%89<%(#/  nnp= "''1Z5556YC10 :?%=%j654'&#"327654'&'47135517&71167114'11&'2&'&7676767227210167676''7&#"32767674'&'a   CA]+ &#     (  AC  `"&&23''!$ ?f\>##$74&& / %$  *)8 >\f? $!''32&&"[1111676767&'&'&'1111'"'&'&'&'&767676767676'&'"'&'&#&5676767632E88!!!!88EE88!!!!88Es    e  m$2!!88EE88!!!!88EE88!!"!""   E  /#1111676767&'&'&'#3#713E88!!!!88EE88!!!!88E0U!!88EE88!!!!88EE88!!!6A^%1''1&7716'6'&776'&7&'11&76'7&1176'1111&'&'&'6767674'11&'&'&67236'6'&1"1676'&'&&'&'&767&'&676016'&#"41017674'6762765016'#014'&'7676767677-    H  0 !!88EE88!!!!88EE88!!B   $                     ,tE88!!!!88EE88!!!!88E+             #$ m%1111&#&5167676567454'4'&'&'51237670#1&'&'&'#1"16727676731#1&'&'&'2'"'13312767673WVVn  (@@DD6  W2-Y)d &<<>=)    ( '+ '@Sz7#3#5131777311#1511#1'11#15131553121##752765516'&'"#"#155311676321'"'&'1#765514'&#"13271111001!101&&'167!100111!16714'&'!Z$$$$B / .D  +#:" -8  || ||IAAA]][[ #I0rYYY5 r,&   #  $   |  l%4'11&'&'&'&'&'&'&'&'"#41"1"#"##0122333123636767676767676767676745070151&5'"'11&#"1#1513116         II 3         % ^ &Fy!!!1!167671&'&'11''&7716'&7676'&'&0'"'&76'&71111'&'&23'&'&'&7676716a(())2''&        %        % ''&  ((((%     ('%      '(%%   0111676767676'&'711'&'&7676>??>F/.W>?>?F/.WP+,==&',+=='&  11G*&'W  11G*&'W=&&*+==&&+*=9BYbk%1111&'&'&'676767#&'11&'11&'676767%'1'17'#1'11#171'17111'''1'17'1'17""::GG::""""::GG::"" 32?>3223>>32WWW%W%n///213D EEEDP7777G::""""::GG::""""::G>3223>>3223>%%%W%W^^^ddk uDE+77 #,5>GP}7'&7676'&6'&7&76'%6'&76'&776'&7&76''76'&11''#'&'&'&'&767&7676766 &'11&'&767676'&'&#"1"1'&'&'&'01&'&'&776767676767676767636576'&c     V   z        u   '  P      !!"!)10-5((F                "   H         :    8   J    "$$# %##37 K     %%       \  Pj1151&'1106745455167676727671#&'&'"16327676751#&'&'7!!!1!167671&'&'11#!1"'&514763!12        @@  @ (  ` x@ @ ATm%7'&5711'16'&'&'"'16771'11'&'&77161712'671167&'&'&'11&'11&7'17'1#  ))(-''"/L+3D"!"!  :j A)( ))9:4'z&?+'!'&( V. = B $$"'(7C))'(1b%55'103670167676701010145&5477167676731176767676'&'&'&'&'&'&'&#"#"##0#&&'11&'"'&''1&'&'""2176767676'B3 !!+2&' ] (( !",/%$  9"##$,-<;-.  B ! +1&&  "x  $%00%$  ++9;//  J  Tu!!!"13!1276514'&#&11'0#&'&767676'&'&'&'&'&'&7676767676'11'11&#!1"'&54762323236"'&'&'&7676765101&76232361#11&'&7676"#11"'11&'6767676#;;    >? ../ % u  *,+ (4  z    )   0   T#  D31 G#23 #+711'&767676%11'&'36767674'()* '()* '_:KJ:% +*6&56>L=>$$70/76//79^)(21#"-%$>>M Y1111276''1&'&'&'6767311'1&'&'&'&767176'&'&'&2717651&'#G99#""!::HB9 '-X:::;Wv6$+'&%8?,+)(=2& !"99FH::##<;YV::h'$,&8%%((?=** FW"11767672167671232323236'16'&'&'&745&7676767/01(  *),) -22)( 6%+*  /.d2 /& !!"  "&  ##  )=%%    1N$-4;%7117111171117111'171171777711''1171'&767672717167171111711117117171171171711111'111'7&7677177612767777''17'''1117171171711717114167676371716'1711717111171'111'11171'11'11%67676'&7676717171711&'&#77'1###"@ /  ]    ' A$$%%7 K :(~,   8 ( 9 & ' +"% (&9m  "?  qsvPSxx$$$&  uoV\F  G<<<!-&&&(Kzfh?B)    +.O,-+#'%'  *(?BR#     &' ,Hex776131#1&'673171'1&767'&771673#3#11'&'&'&7671111676767&'&'&'11&'&'6767 W?4B O 555   $ZE88!!!!88EE88!!!!88E==\[>===\[>=G  s$ """ >" ." ? !!88EE88!!!!88EE88!![>===\[>===\#Ea!!!1!167671&'&''&77167#3#&'673171'1&7617161313#3#1'&'&'&76731`  `   3A  V>b    4   `  "6r#   " &%!7 W&/Pc721111516#&#147661#171#1'7&'6&773#313167632''#11#154'11&&3276573#311167632''#11#154'11&&327657476321#1017'311''&77456&1373#313162#145016"1#15*&&.'++N&&&  'Q  :&&&  'Q  5 ! L& $' L&7'''# '   L'%0  _     F==     F=$   ) .   Dw@@N%654'&'&67676'11&'&76767131717131'167131'167''1'711:+,Rcml[O\8984sH2+ /!d=*D"e"#!-fI!#"fO=72$$ 3*ABP))." =+(63"%5 GnQ)))5|  -F%51%1511%77&'&#"316766371&'&#'6711611171&'&'67@@///--67,-GQR9 5!.="yCMNHH31)ABOOAA*6666H+*8 G. /4  E>%$$$?J!!!1!1676716'&'7'111'1'171167'1'17171116760118989: s)4:E g  _4n @ =0dq  w9N7111#01'&'#'&5&766516'&0#&'0#&567676766711676'45&#&7"''1&5&70103231714763316171476331604#1"'&501'1101'#"'11&'&'5163676743676'&'&'&'"'&'476721#&'&'&01'"111#'&'&766767&1111"1&76761676'  & % ' V    2 $!!%  !!    !    )6EECXRQB~s   !$$      "   E     $$S       i'<S0!  ##  ?Y!!!"13!1276514'&#11#1"'&'#11#15131131676312'5##1'&551476312  @C @@C@. .   & #K %#  o%1111&'&'&'676767'6'11&'71'11&'71'11&'11'1123130#"'1'"'&'11117111717676'&'67'11&'11G37'11&'11&'713!!88EE88!!!!88EE88!!   %     #   # > E88!!!!88EE88!!!!88E# -+,-  3H -,-- #W< X6 +>Lq6711611'&#"'&77116'&'&76'&767116'&7'55&'1671111#"'&747&#1776751&'"N1==>=2 BTTA cU)) ,+A].. ((P>  G @? $#--#$},/ >: ] JIV@==..!QQ`SFG OHHH H   A<G44G s 0@P`p11#171317#3#131676'6'&'#3#13167654'&'3#3#13167654'&'7#3#131676'6'&'#3#131676'4'&'#3#13167654'&')GD ~DDDF' DDDF) DDDG' DDDF' DDDF) DDDF* KY (Y Y Y 6Y Y 6Y 3l763116323"#"'&'&7&1122371716'01&'&##"#"#"'"'&'&'&'&5&545454747672723233'&'&'"'"'&74'&'&#"'"336367676565&5>'  0   ', $$PM$$   (22AA22 U     *   _ ,   $$QP$$ '  $$RV)(- $.4Mi%&'&#&'&'&7&'&'&'"'"2327676765654'%67116323##"'&'&771'&'&'&76763016 (%  2C " 0011 /#  #    + M2  ?@  2) I;I &$% #"!!@   #,5>GPYbkt}53151##3#5131753151##3#5131753151##3#513153151##3#5131753151##3#5131753151##3#513153151##3#5131753151##3#5131753151#xpppp(xpppp(xppppHxpppp(xpppp(xppppHxpppp(xpppp(xppxxppxxpp(xppxxppxxpp(xppxxppx-@%11'&'&7676&'11&'11&767676'76'11&'11&'767IVJ78 %%8SPP56##<>HA22%>>[J;;!! #17$%'%   LT  >3223>>3223>D----DD----D& %&7 +  Xp  23>>3223>>32--DD----DD--+%51#1'1517131271167654'&'&&389%  %%  %9998 $$  $$ o5r711732767676'&'&'&'&"11#1"'51#1"1311'&'&7&'&'&'&7676&'&'676676'1'&''#3#&'5167311'&'5167311#75567311#1&'5#1&'516731'(<(56'4#" 8!"%%+ / 16$% )* %%$   ((((v    p    4!&+0,,, + ( "      $$ !!" "& (h(((    ]     &Bt7&'11&##1131677131##1131676'3#32771#1"31714##1&5477#3#131111#1&543316771#13167716'&'%#3#"12767716'111#113127713113127716'&'&771633121##113127716'&##1131677% #     (%  NNN: # 09 L$ 0   b! 5 / C    `   )# 4 " c#b@ (!J   (   71711!71113111'1'131117171'11111'17171#1'13####9so bc156p{tt44P///2J&=.//*%11#&'&'6767267&'&#2767&'X,,C"//7E88!!!!88E7//"C,,O'&!!88EE88!!&'N*<a&76767676&'&'&''&76'&'&"201"01&'&7&'&"7676727#10#0#767476725010'012410767672323#00#05716760767676510#0'&'11&'11&'010#"'&7676767&4747656'670101&7767676'7&'"'67676'&'&'"'#&'&'&'&'&#"#"'&'45&'&#"#&'01232&7677676767'6017676'&'%&'6&7&5&5&'&5&76741671&'&'&5&76767056'&'&#"#676'&2767633763'67'1676'&'&67&'&'"'67&247676'&'&01"#67676'7&'S " 9       ( , %    $% %))          !   z               #  ] )  :#    $ {  . + )" !$1 $  &/         %!                        +DWq3#31#151'&'47676511327654'&''3#31#151'&'47676511327654'&'%2111#!1"'&514763!5!!!1!167671&'&'~4444) @   3333* A   D  84 h  4 h    )eo7727676'4'&'&'31#"#7271167#113'5#11#1&'&'&7&#1'&'&7514763310363274'31'6'&  O& w+J!   [R T6 @@@  @&&&  % ੩7     + ! 8 8C3#351#'5315%&'11&'&31676761111167676'55#11311WJJJJ>>)*8VJJ..`//7 ''4S>?__"J=====8)*?>S4'' 6//`..JJV____sH[n&1&'"&&'&#02767054#&'&543676332720"3367456'&'11&547673&'11&'6767 :>CC>:8CP IKLH ODfz   UTSR1 !! 1"711110131676767&'&'&'"'171&56767>33>2222>Q$%66%$$%622="",,!!33=>23 K"6%$$%66%$##3#515##1131251&##11312551#^r__` dQT~ #,T]fox%#3#51315#3#1315#3#1315'#3#13153#3#1315&'11&&''11!1327677676747'%#3#13153#3#13153#3#1315'#3#1315^BBBBBBBBNBBBBBBBBNBBBB $ #M 8nwTT) BBBBNBBBBNBBBBNBBBB;;==;;H<<<CLi%''1#167676'&'&'&'&67654'&'67676!17'&'67671167676'&'2[ $$4,   8*+P"////3,+* "   2RRRA())0)) " ?.-@m012! !!## ,?JYs11767&'&'7116767&'&&'11&'7'11'6767&'67&'&'611&'7!!!1!167671&'&'"'11&'&54767632#$#2$ !U) $%!15)("&H0 ! "#%v@@+%%%%++%%%%+;     &6& !;&w1$ @%&**&%%&**&%"5315131#1131676765&'&'#@kV//-,\Q67=Erwww7/0><01@ !239[?E#,5!671162&'"561171165&'&"67&'#67&''11&'01323721&5676676632'"11''1#"''&571"#&5473&''&7676767&5&'7676363676367&7676676222'%4'11&&767676'&'11&'&327677&'11э"1&76767676'9      >h00    D0    ,_   5  =#  " 4       j h        _    $    *      :T     3#3#131&'671131&'&'711111!16767131WWWWdL@#$1!!J3&%` QkQtL %% @bU67*0.#2$7531513171#1514763251&'&#&1#113PtWi' BBb"&Y+a$F1176767676767&'&'7''1&1'&77167617716lEF%  NIH//EEkIII  : OI  : OBCj6-.!  ;;XjCBttt  ,< t  ,; -:K#3#1#11#15131513151315#11#1131513151##3#13151315315131513151!@@@ZZZZ@&Z@;Xw73#31#11311#151712'51&#15131516614'&#"13#3#51712551&''1713111'1'11'171'1713171311311r]]]M; &i%E   ! n *+ & &3"# 3c-  "  ("[---  -% &&!#7#3#1316751&'3#3#1316551&'7&'&'&'&'"'&'&#"00111011111100120101000321111312010201010110000111011010101212322123032320321232303212230303232323012323232321212321230363230323212363032303216321230367670121474707014707412547250503474341056701016565070147416141654371470525710741470565674701054165654345054345414705414741456501417105056501054145654501450505505250545454545&'51&'&1&'&'&'5147311315147311315147311315162351&'63216323276321#"'&#"12361315167311315167311315163312v*44),))12))- ((    4444}   ?Q'  )Q? L L GZ 1%F671167116'&'&'&7'&'11&67'&'&'&7667&'67674'0   0)   -6\====\[==`    1j  =<\\<==<\:0 H&516716767&'&'&5167&'67676751&'&'&'"#11&'&'67676'&511&'&'476'&51716767674'&'67&'676 @Ac Q43""9  3'&>  >&'3  9""34Q cA@ $%>?M M?>%$J  ,1hHH|h@@XE88  32?G77\  %  &&  &&  %  \76G@23  88FW@@h{HHg2,  06N@?''''?@N60/)9%#3#1#&'&'6767271&'2767&'&''#3#13151&'&#D &48&%%&86(>A[>2221?0+,$ ( jjjv4%##&&99&&'?A23>>32*qY)10w11"'&'&767627!1&'&'16767!1511451145#11"'01&'&'76747010301'&'401#176765,  #Pv' 3- !!%$$% -#gPP/0Z($;+  "  'cCZ73#3230127676'654''1'&'&7676735131501'&'&'&11727676'&'&#+ 3)(3 $FN-. ('<. ,8787 )""*# 6-3 1!"A,-Y$"6 =HH<+, .n !E.)) **,6 !%311#7!171!11'SQQQ6Q0QS%%''1%11''1171654'%%'1E<;;;AA<<ݡ< F """@A#  < @6o747116711671167&'&'6'4'&'&'&'&'&57&'11&'11&'1327676701270367674'q/        $  $%-$# '!    ""' ~,7fsJ_n9LSho1111121677476567'&'&117'&'&7111101&'&767767650765&'1167&'&501711'&'67#3#"327676'&5&5476767276767&'&'0101&#&'&547676'&'ǂ#&747676371'14'&'"&'&76701&&'&7&'&545#1&'&'&#011201""&'"11676767676'&#63"#"&'&'6767&'6763%&'672&'&##&'&54'&'2&'110'&'&'67716727676'&'&'&'&76763011'101&'&'6763201171016767672453&'1110101"#&'&'&'&##1"6767"'676'&'&7114731"'&'&'11&'&76731767677#6'&5&'2767'111676501#"'#3#"367676'&'=       >                        %++&  +       ,       **      u    %.  o,v,Q L%       >      -      - f                       $+  +$        (                          + 2  E   @S771#"'&''1'1327''67676#&'01&36767716701"'&56767"'1676771#'"5676767&'&547676760#'41"5'"7'&70567621276767676727670147676326767610161474767632676760##36707676571'&'711#11"'11&'67672717161114'1#"'413167"21!       &%        0000#"--#" !1 =9 F  9PO }}}        O^          .   1@<)!B&'11&'!11!167670101011#3#51'1310167016767311@UP%  #Q`@g8   7e!!!1!167671&'&'"#11 "'11"#"#&547676507676'&5&'#11"'&#"##""#&7472767676551&'&'&76723322327630#31676'654545&'&'"1&76722232363272313st%   p        n    rk     =f    e> :1111101#16767676767367116531#1676767j )b !*b<*b *b A)(4A()54A()5A)(K^%1&#"327674'7136767&'&'5167&'&'1&'&'&'65&'&'67&'11&'6767 '2  2!.7%%0  ' Z%9-!2  2%$82##>    = s]w116767&'&''&76723670125454#'&'&7676327674'4747636767612#3#131676751&'&'&'11&'6767I0110IH1001HO    ( *,,,,yR7667RQ7667Qp01IH1001HI10   8(%  % B#/  ,,,,d67QR7667RQ76^%'&'&5&767676367016765&56#1'&'&76767276767654'454767636767612~ +  ,+++ !   N/B<)  "!N R/2  )((" {DG`{*9OXbG`m|%&'11&'&'&'&'4767676'4'&'&'&'&!16767656"'"#"676767&'&45&767&'676'""'&76767674'&5676'67676&6'&'&'&'&&'&'&'&'671123&4'&567676&'6'47''61257674'11&76''&'11&732&'672#11101417271167#711#&'&5&'&'05&76#3#4'#1&'67677623476#7"1#167&'&'654'&676767116&&747631127&'&503'&'11&7'&7711767676'&'&'&'&'&56'&'&7'&'11&'"&'&7&611&76767117'&''&'&'&'&'&3723 !01(   i" %    %$             h  .8      5   $S      `      , \     4:;*       ]         +))      }  ! :&     %    I  @     F               / 3Z&#"767676'&'11"'&'&'&'&767676323'&'11&767676'&&767601"'&'&'7&11'&301676767676'&##71716'&'z>D?88$$;;AA:9%$;4016 M( * $@%%*2SSN9 --11    .%9;AA:9%$;;AA:9%2    V "  MHL.$99?7  I!11!11#&'&'7175131&'71674'&''1&'&'676761&1#@"*c:"   (!  @@! @(  #  0\&'11&'!11!16767&'11&'71751311#777674'&''1&'&'676761&1#&'@"*V"""   (!  :`@ !+  #  (!A`7777'&'"'&5676%6#"'&7&'&'01674'7%11&767'1'&56762%11"'1&'&'1671&547672'&'&76767131'167&'&'@<<<.Q.( 1;B4   c-    @ . '-  i   ?2M.(1;B4)<## --<<##('8; J ';;;A  *   08E4    6F,&h 0,;,&18E4  -  ?9h0((0((]BB!!88EE88!!BB]d*/C .1MME>@A+ +$)*',87/1(p((0((0#3#31#1533#31#153#31#1533#31#15,76751676176751676176751!@]   t   *:H1111676767&'&'&'1476327&#"5147632&'5147632E88!!!!88EE88!!!!88EP0  x  x 0  !!88EE88!!!!88EE88!!    :  1%3#3&'&'3151171%5517113165&'&'&'3`lll!78DD87!lhhK !!88EE88!! K@7  7ii0П&*E88!!!!88E*&)K`y%&'37671#"'&'51632'63112&#"&''53276751654'51&'&&'23116367676545"'&'111122301&'&"#&'&01327014'*d,'01@@11',33+3@@2 -11- Y,, ;;JJ;: ,,*8887+33'%J  R))))R :.-FFF01\--.-Z01E..  )7 ) {  T"''1&76767676177165514''1&1117675147311"'&''1&55147716111#74'11&'&'&7&76723312765&'"'&'&##1"67 >  /2 5 0 +)   WR&, 9$ ;Z<%kjj  8  k k  k  A:   >@@ *7P%#3#5131%5!11#151#151!#3#131513113153#3#131513153#3#131513113151311315  @`@ @@@ @@ `` ```` >B9k73#351#35551&'&11311167#1&'&'#111331276551#767#1#"'&'51#151676131514'&'&#"13%217151&'011&''111675151&'&'&'&'51633#351#&'6771'1&'1111675'6321#"'#"'51632''#11311113151#h5 O&%!#01"" !  !!   (%   )&  `  #" $%I/;;;?   %%0#""#0%% %$ -     qD    4  :  ZZZ)^2K^q /B6111147676'476767&4'&'&'2'&'&'#"'&'&74767674'11&#"3276554'11&#"3276554'11&#"67654'11&#"3276554'11&#"3276554'11&#"67654'11&#"3276554'11&#"3276554'11&#"67654'11&#"3276554'11&#"3276554'11&#"67657&511&'&'67X  *#!%8! ,,00,, ! @``@       H      H      H       =SS= B^^B8   * ,>J: :J%!"/0"!%h   B   B     B   B     B   B     B   B   (  %,7B[j{&'11&'11&'676767213155513567#7715131516'7#11'3#351#11#151#11#151#1#3#516'1315571151'151715'#3#1315131&'&7'1676'E88!!!!88EΕ`F)o9  sD)*EEE EEEEEE$$$   8!!88EE88!!p ]]]? 6  480M<=Np0!!0 g E  9G%&'11&6767031167"'&567674766'11'&'&54765'11311!176771317676'&'#1&'&'#1514'&'#1&1#1"#1&  , 8&'  ! A V  " <<)H  ##  5("!<( 2211 U #"&'11&'&67676767676767 .9BA7?5)  7 !&2%$ ;;D'>>21%  ('97T&'676767676767&'&'11&'11&'676711&'&'&7116767&'6rf ) 01I!!!1!167671&'&'5#516731#1"#3#"1#516731a)))) 8 888  ))))888  H 8 1111676767&'&'&'#"#"#"#"#"'&'&'&767676767632370176763232327676767632323676#"#"#"76767632323232E88!!!!88EE88!!!!88E  DE          ; !!88EE88!!!!88EE88!!34   #" .. 1     3Wbs#3#&'&'516767311'&#"#1'1#113151676327#"'&'3165654'&'&'&#"32767''#167632327654'&#"327654'&#"@6$%%$66$%%$6  $  t S " 3 P     %$66$%%$66$% Z"h  %"G   d  BH%67116''1&'&117117167611111%116767674'&'&'''" & ZAB4 $ ] 08GE88!!!!88E&&&% ' 6b944T@ .%)! " %P"!!88EE88!!I;>%8m%"11327654'&##"11327654'"11327674'&'&'&#"&'&7673276767654'"'165676'&'6767   n     )(327$$2))33))2$$732()-,3ABccBAABc       8$ 4BB4 $)..)  8,(8@****@@+*A1111676767&'&'&'#3#'1&76731'11#1716321#"##"1E88!!!!88EE88!!!!88EZZZp KTUZ  e!!88EE88!!!!88EE88!!\cc ww#,5>GPYbkt}''711'7711'7711'''711'7711'''7117711'771177'17177'1717'1717'1'17'''1717711'7711'77711'_777JNa..."7A %  " <& )))#.'UFFF7(T***3)===5P"3CCCBY,"...',)$#$X####TJ " !- & %; / 1@ )*r@ D9996_ l--_W OVB? $_h75117117'711&'&'6767'&'&'&'&'&'&'&''1717167654'&'511'&'67DDD66DT%;&%'&;8  &,$,@**   >t`5 #(6 ,+>>,+ A  1 &*4,,B3'  #71111!167676'731&'&'&'X+AA98x3%&/ 0+11'(`FEPP623A&%3418N"#22@mST22)''67&'&'6717%&'11&'6767//FG////G<-7$$$$76$$$$6+8H/00/HH/0%v$%77%%%%77%$Z7&711676'&'777&'&'&'01'&'17767676'&'&'&'&56766@;CEVV?;C *@?@A0''' )  (  8FUV?<BEVV?2))) '  *(   -_%''1&11711611''1&1107716'7''&'&11177111716''1&11''1&771617716':DT^- +29_\-,ARJ"}*'7\H$5Tg11&'&5476323111&'&''15116716767&'11&#"#"1'&'&'67677&'11&#"67674 1m!:aG 01   &!  !0 O!k'f0  1  !!  @%"3'&'11&'11&'&'&'&567676'"#&'&76'"'&'&'&'&03207676567276'4'&'&'&'&'&5&'&7676767676767633632765672327&'&'&'&'&7676767676747676767676767676301667676545&'&'2 6          N          )                   j'1111111167676722371111171711717171171'171'11'11'11'11'1'11'1171'17171111111'8P  C]8Y8}Rsf|1.+l &  ,ND% '$J .3E6 {l&Jc&Tz8a %   E`)Wl $%11"'236767&'%6711672&#&'1167&'&'&'672131514'&##&'&50175#"'51#116751#3#3513167&'#113175531#3#3513167&'#113175531#3312551#11##1"5514##1131233312551#11##1"5513151#15131131514##11317531513151#1137531511317113151#11'1#DEg&" gEE2.EEg "%gED-2<      y "'  9'  9 & ?'4;1! $$6-!#6$$!!2!-(     J777777VH++H+" >=    @LB!!!"13!1276514'&#'11&'311316751&'#11#16767| | :**^DD^&%66%&""9  | ""9D6""""69**!1'1511117151'171'''117XeWeUUUYVX@-uKK:5:O1117/5(/6=DKRYcjqx67#1'55#113145#3#31&''#3#31&''#3#135#3#135#3#13#3#13#3#135#3#13#3#133#367#173#351#3#351#53#351#553153#367!13#351#3#351#!!!67!173#36767#1731014551#53#351#Ee  s  %  R xFo11111111'&'&'&771677167676767456703655143610"'11"27676'&'45&'"'"'076'&303''&'&'&'&'&'&'&1767676'   1      > !!  1    ; 5P%11#"'&'&'6767632!11327676'6'&'&#""'&5516'2713221##1&'&###654'&54771'17117113311654''1&547416167133351&'71131'1&'71131'1&'71133276765514'271#'&511123'7&'&547#&'&547&'&547 99?@89  99?@98 734::4334::43  Q        WB77! "77AA77" "77A<2332<<2332**   $$5  0,('H&%  *&,/#"39&%    !    8e"..((4   8`=>.   !%&T/  65QQ!+ !%=! %$Bb 9        @!!!"13!1276514'&##"'&'&'&#"'167676767676'&6f f @B.  %  C2  f /RV45 8a. N@`3g7&'11&7'1&'&7311067610171676731011#!&'11&71101'1&'&73110676#716767311#'1111011#1&'&''10'&'1011#1&767017147673i 8! $ $ !8 # 8! $ % !7 # 8! % % 8 $` p KK p  p KK p  p KK p m711711116767&'&#'11&'&'&'&10141&'&'67670563230101601767676212217&'11&'!11!16767771&56767"'\ 2$8&&''68%%    @TTT--CA/.-.C)#& 0 %%87&'%&8K      @R%+C-,..BC-,`s55'1'171'11'171'11'1'1#111'1111'1111111111711117111317171171'171171'1717"'11&'67632#'11111'1111'111#1'1'11'171'11'171'1'1517171'171171'17117171311'1'1111111111127673371713111717171'1'        wH///7'6'' * $%7&66'5%$ *  $-&           -( #&4(66'2#&)'$4'4. '-$ %0t1111676767&'&'&'471&'&'"'711#6765&'"#"'11'1676'4'"#"#6767&1"#1'776'4'E88!!!!88EE88!!!!88Ek9""!CD#'    "0R  10;Y> PQDDD3!!88EE88!!!!88EE88!!1*55C » G_.9 ))J/! 0;>32"Gj%11'&'&'&547676763'&'11&'11&'&'&7676767&'11&'"767676767654'%211113276762&'&7r!;3*    27 "$$ , 1>=>!)   !  %%. !!! & 33>?<#")881!     '77#171&'&56763311#151##3#&7315WWW@`"+*?R7..#%""9P)( ?=.55131113111#o7R^4y3@*<C=P[~#4767"11&'&'3676736767676501&'&'676703&'531513167654'&'#3#3#156731131514'&#"316721137&'67711#7116771#11#1'1#111'"'123u            d*I###))#&5 " f 5#$3!      %B&%Ma  &  J ss @ /8k%#15131675117!1&'&'16767!127650111&'11&'476721&'&#"&'&'6763236765017&'11&##113151312767&'"3167211671113157#3#1#1'1#111'"#12377.0     @  <       3 Z& %  f$ %7?  `  `  v  K 6 /  DQQc"hfCQd71100&'&7676741672&'&#33125276767676'&'&'11&'&7676771167676'&' !  &)$)#"!! #$! B     i$""5)++&'%%()#(44-,/.!(55.$%%/.,Ly Ph"''1&3676177125514''1&111551433121#''1&'5167716111#74'&'&5&763312165&#3#"54##1"3277&'67#&'67#3#&54##11#151316#01201'4#11312'%4''1&##1"11771655147716321117655%51''1&55147716175161&1'1"#1"131771055365514''1&1117716''1&551477161177"131217125514#'10#554''1&1117716745'11131#''13<::9 :::/ 7    >=$%P===%-===%>$M    ==>=KM !B!!B  BB B!!B!B  2      $$_,  ,_h$$G$ ^   $$G##  ,GGG##G##|4g76711676'&'&7676'&'&'&'&'&'&'457117676'&7676767676'&'&'&<NxN())))Tj 2   QQ/9 / 84L8g%4711656#113161'1#1131'4'&5&76751&'&7&'11&'43271&'""'136765&'&''51#1&173151#1745654'51654'45&31167'1'017&'11&'43271&'""'136765&'&''11327'1#'3105674'&'63#e**j$     K*)  $      "!_!9 0 "" 0        ;0  0 "" ";      E'' $ !B?Xq%77"&'&'4'&767616'&'"&'&5&767654'&'110501111&7676765016'&"654'0#&14#&'&'&54767676'&'&01727676'&'&#767674'05016767677676761"67671076111676767101017676765&'45676765012767674'6767676'&'11'&76767676761630771111#&'&767676'47012767670017&767.      :K44 $#3 *0 89E)'($              ')  ,S  o V  EW           #*)++ "      $         .!\  5  #3#1'1#111#3#3171311eMMM80[555sr6YY !73#3'1771171#3#'1#11#1LLL&&& N111n0[[JJJbbBB$ X("+<aHU7''#11#1711#'731'''3117131755311#75#151#151311##"'&'&'&5476767276323#4'&'&'&#"3276767675571165657114101&''131131'113171311""01'11'11167&'51113274'5111#1131513113151#151111#1131513113151#1512767711#1131513113151#15171127&'5171167&''771#1'11#k4>>-'q>>>-->Q)d)          _YAA >? @@Y   P   &&   P   ****c++++g``ttttt 3       a  ))               X++++((~t8I`u% "1101#&54701454'&##1456'&#'&5276765&'&001676'4'&676'&'&101"&56567656'&011'167674'"01'1676'&#&1"""'&10127676'&&"#'&1376771767676013137676767013176767677676101765"767713176701076567116"101%471167116676701#11&'05476201270511476012#01                   +       T        %%!       #    #      :  |     p#7#3#1317#3#1313#3#1313#3#1315B2222e3333e3333d2222}CLL M)%,Yj7'&'517'%671165&#"3#351#3#351&'11&&3012767676'45456'&'11#"'&55166'&'11&&&'01511&&13151&'&'5115147671514'&'5132767676'45456'&'%5&'&7611#"'&55166&&&98'-  ::::J::::    'k9-) *: "       "*`  s  xnn1     H)    *  'J 1 ^ 6    1???()  x 31711317'1#117Y>>Y,,,-Dqo$ttXXXX <D.5Zw716751#"'513151#''#11315163651&77174251&#"#&'17767&'&'&'4'11&'36751#'&'3165'6711632''1#1171712767&'&#&''16323#351#+++   ""Y&,  \,,,,S !  VX  ',   ,,,,/  "?& g ) H % D  *   (    "#"( !  A 3 *'{B  ! u26251&#&'&'132767&'&'&'&'&'/!&%"GGX44 !$*)%KQZ76"!!%! **L/   &'M4 "94711676767'01&'&'&'7&11676765&'&622 )(& ! {  ()7r (8877%%'&=32>>%.#..##*)+ q0l%j76767676"##1"#&'&'&'&'4'7"5414'&##1&102367454151767656'&'&#&#"#01&762'&'&5454545457"111""#76367600#01&'&767433232745514'&'&'"#&#"#'&'&76762&'&'&32367276767676765655'&'&'&'&#"#"#&#"#&376767656#"#"#"101&5 =B /0TO /5%&)'QA  "  /       #       $#"{ !  :  I* *  j     {65HI  YZd@5O%\745114551436'&'&576725454545454#&#&'&%!1&'&'16767!1#&#"#&37676767674#"#"#"014501&'&'&'&#"#"767433232545514'&'&'"#&##10#0#76367621010#&'&'532327450151203767656'&'"'"##10#"41014'45&##1&&'&'&'&'&'&1323212131030367676701676'7&'&'&323716201367436767670145}  (                   BG((83 6D # ,' 2  $     `  `  &'?> T f  Y  c<  0    8%7'11''1718]]]]z\\\\(7!!!1!167671&'&'3#3171311#15''1#151311#GG```>oQBBB`XvGWttrrrr%.7@71111676767&'&'&'75#151333#31#155#15133#31#15""9:GH9:"""":9HG:9""++*G:9""""9:GG99""""99Gj++U++++U++ U%''177!!!1!167671&'&'11"#"#&'&'&'&'&50147676767672323____f@@!""!!""!666l6@!11!#3#1#11#11!1@fYYYZY @@ZY Yw=t4##1"133125'&#"514#1"13312551"1&7670113125514'&''1&76767514#&#"011#&'&13270327676'%&1111131255136767&'&'"'&56767'"11327654'&#))_$))"" : '  5!%)!//   " Q  {#n  -  "  )Y/.  h9La21111&'&'&'6767635"11113276767&'&'&#11'11"#712363#371232767676'&##173#31232#167676'&"#1#1711'11"#712363#371232767676'&##1@WDD(''(DDWWDD(''(DDWYHI*++*IHYYHI*++*IHYf y%%%  G!%%%  %%! y%%%  G!W"#((#""#((#"&&//&&&&//&&Gl,,& `jGl, 13J#3#&'&'&547676765&'&'&'27&'&'117"11767654'&#:+$%%$+I-- !77DE77!  !77E##N )%&)*&%33H-4E77!  !77ED77!   )@/?O_o#3#"&'&##1"133127676331276751&'&###1"551433125#1&551433125#1&55143312##1"55147315##1"551433125#1&55143312% %  ZK  KZ  $$  &&  ==z==$Afy%6711651101#"'&7676301&767'&'11&'11&7676'70111"11111127676'&'&'&767676'&67611'&'&7676&7676''11117&''&767#11"'01767672'11'&7677&'$"! "%%>=3V -2  %s   4>    ./;;9:    #gRQ''%005 =?@-*066'' 3+,)76?   &)*! $   >   )  a     \1111&6'01676762121'&&'&74376767626766767676767013  G559 ,144X5 =56051717335 !&#   $ `   h,+  %$*/"?R%5#11#151#1514763312'432#"571111&'&'&'676767116767&'&';Mff#""##G88 #"88BD88"! 88HZ889:VQ<;99Wfffxxf?##""{!!78FJ87! 88FC88""-;;RU:976]W99It1111&'&'&'67676767676701'11#151"'71374'"'&'&'&'7&1116763513111&1654'&#F88! #"88BD88"! 88H :9V=''])"" -,`/0-_" " ;;U !78GJ87!!88EC88""$U:9) &&" +=+ ''!  9V:<SZ1111676767&'&'&'&'11&'471#1131#1131367'1#"'&'3111'#3#31173#351#1'167671&''16767621'I87 !!88EB88#" !78GV9: A ##,*  ['&;MG '<$Q $# W99""88CE88!!78JF88! =9:U# 2. 8  / ) %.99W<KTu1111676767&'&'&'&'11&'471#113111#1131131513151117#3#5171755#171#11'1'1#11'16767'I87 !!88EB88#" 88GV9: :@@=AQ&&9X:::7&?B+(BR+*DW99e""88CE88!!78JF88! =9:U 8' '88$$3t` V3$#99W -/8A1111&'&'&'676767116767&'&'5#15135#1513G88 #"88BD88"! 88HZ889:VQ<;99W^!!78FJ87! 88FC88""-;;RU:976]W99++++P****Kk1111676767&'&'&'&'11&'11&7132767'1&'&517''67671&'&#'16767"101E88!!!!88EE88!!!!88EG23O$  K,4..:(GK,,5V98!!88EE88!!!!88EE88!!>''==B#1 ,! /ddd*1!*89V/?Oam1111676767&'&'&'&'11&'6767#3#131767&'&#3#5131036'#3#1315131676'4##3#5131H88 !"88DB88"# 88GV:988ZW99;4 221!!78FJ87! 88FC88""-;;RU:976]W99)2((9./(,11/1111&'&'&'676767116767&'&'61117167147147217163311#11#&''11'41'&'1'05'&'1"''15'0145'11'&''1"#151317161716701617147632171014767G88 #"88BD88"! 88HZ889:VQ<;99W   :3       4- !!78FJ87! 88FC88""-;;RU:976]W995l<   :@ a , ]  7H  ?_  W  Y9 Lb  E\Pb/1111&'&'&'676767116767&'&'1'1&#"1'1&"1'1&#"1'1&#"1'1&#"1'1&'&1#11312713277113277113277113277113277117713151##3#1&551#1&'633151471312G88 #"88BD88"! 88HZ889:VQ<;99Wk      +3      3;N!!78FJ87! 88FC88""-;;RU:976]W99 ] 3E  -^ TC P9 Z I +N FI QH :@ S,/KZc1111&'&'&'676767116767&'&'1#1&'51#1&'516731133#351673151#17#3#1315G88 #"88BD88"! 88HZ889:VQ<;99We  6  6))) 7lllll!!78FJ87! 88FC88""-;;RU:976]W99  6  6se (X/BO[1111&'&'&'676767116767&'&'11676'6'&'21&5&767"'&77G88 #"88BD88"! 88HZ889:VQ<;99W<<<< 6) =!!78FJ87! 88FC88""-;;RU:976]W99<,,44,,,,44,,6d. j@@Nal7'1#11&"316761"#"65&'&#&51#11316536767731&5514'11317&'11&547677&'&56633#3514'&#2767#1'&'7#3#676^7777% ,"(A !  %'=$ct  3-d#*+!____mmmm "# 'P   B t6|/. '$     i%67&'7&'11&'&'6'&'&&767'11&#&#&#"#511011717676'&'7116767674707765&'%''11'1"'&771676011''11''1&771'11'&'&771&'&'&5676167&'p$      -   .-AA= #  #"Rh  $011+!  >^];:D 8""  7,++,7I45 >= Kr#$)8&% EK *+ (&777IHw!11!'11&'&'"'1231"#"#"#"#51272765514'&'"'5176327"'11&5514763114'&'"167#15131#"'516301@           t  $&@@..m  %   -E""36_01016767&'&'67636''17676'&'&'&27676'&'11111'7676''1716'&'&767676''1&'&'05&'&7654'&'&12111111#'1..'08:\23 KK_=;&$=JMRSNJ=7$  $7=J NSRM!!88EE88!!!!88EE88!! 66CC66  66CC66 12==2112==21P;7$ $7>JMRRMJ>6# '+7'177711151'177'71''117171'1'`$$$##T33))P###$$T****33,,,,+y::--/,,,,+Z----:: 9CM&'11&'11&'676767"111132767654'&'&#571&'#1116755'111#113111711315167171'1673151#1&'71'11&'51#731&'!3167'71&'#!167#751&'3167'11E88!!!!88EE88!!!!88EA4444AA4444A.%,989,$/  ;;RR;;  ;;RR;; ""*"",9/$$/9,8!!88EE88!!!!88EE88!!44AA4444AA44" !3RRR;;   ;;RR;;  ;;R%.9,,9/$9,$//$,9z"""9P 5675147676321&'&'51#''2676767363&''&7&''&7&'111"#&167670101327010167676751&'&"#&'&'5111&'11&'&'6767"11327654'&#11#"'&54767"016316751676726501&#01"10101#"'010101"1&'&'         $@$        #(** *# #* **(#         s   ::RR::   )&""&)    !    !`         C    %67116'11&#6'&'&'&###015&''171'1711&'&'&5511511'11111715"'&'&'&7"'&'&767&'&'&7"'&'316767676'101- &# ????" #& .--LM--J>55 !+''@32##!!<++ 20 7./HG8999GG0.7 0$2 ++< !##23@&'+! 55>-$$$$- #>&51145656767454'454'4'&745&5476767676'01'&5&'&7674'&'&111"'&747676567674751'1&'&''1714545'1'105&'&54'4'"'&'&'41&771'1&'&'&5&76767676676'4'45&5&#&'&'&'&'"1&'&'&''151'1716763216767&#&'&76163276367633771312727711#&376767676767674767676111111111111#74'4'4'4'&'&5&76#'&'&'4'4'&'&54'&547611#41117'&'&7677116'"'&'671'               GW A 4 "! =,+@         <                          '-      &    5) 345(! # \S>231123222333"####"'"'"#"'"#&'&'&'&'4#&'&'&'&'&'01&545&545&547454745474747676747676767676723632363236323"032323727272367236767676767676767676'4'45&'&'&'&'&'"#&#&6710"#&'&'&'&'&5&'4'&'&'4'4'&7676767711230#"'454545654545454545454545676767676765&'&'&'&'"'&'672330213676745054545454545456545454545454545454545450103747416767676323013236767676767'&'&'&#&'301"1"#"#"'&'&'&'&#&'676767'&'&'&'&'01&'&'2232323232721636016567456767654745656745454545454545&5&'&'&'&'"#0'4741676767011161110#&5&'454'"#0#"#"#"#"#014163252767036345&#"1&'&#&#�270125476772723323001""#001220001"#"#"#"#"1"#0#4505514545651167222#"'&'&'&'&'&'05&'&'45&545&54765476767%11310#&'"'�'&' ( +    4  +   +   (!  '/  i             e      "          l      '  2#  ,A  &   -<  #  1                ; 7778               &&-           v671162&6727676767676'450#&'7676767677676'4'45676''&'&'&'5167676767#`#+*-,*$%B.5"*/'+"2 )L,15/.!Q:K\''1117117117171'11'11'16'711711711&#"'11'2#"'&54763"327654'&#FFF;FF;Fw [[ wF;FF;Fw [ [ w2&$$&22&$$&2####www [[ wF;FF;Fw [[ wF;FF;Fd$&22&$$&22&$$#### 9Vq+>1111676767&'&'&'&'11&'11&'67676755#11#1131131513151#15135#11#151#1'13151311#1'''1111711'17'771'11111717'11111711'77'11111711''1111676767&'&'&'5#11#151#1'13151311#1'11#11#16767&'11&'47131131513151#1513151'''1111711'17E88!!!!88EE88!!!!88EB54  45BB54  45B›%v0TTIS|O  4   t  ?4334??4334?_T4u(ƒ .''Ǟ76H[<< ,s@TS0<<[E  !!88EE88!!!!88EE88!! 55AB5555BA55 I///R./#-P8E       Y  33@?3333?@333332R3RA()U<<[ 8?39P[<<  !&/<'7111676767674767&71'11'11'11711711656'&'16'4'1&'&'&'&56767676'1171111'11111'171'1'11'1'1711'1'1&'&'676'7171711711711'11'11&7'167675171171177''677&'6705&'7&#&'65'116767&'77&''67&'0547'6367&5711&'&'67  4      :l,! ,k:        4   O           $$%#- "&"!#  $%/"#>']<&1xx1&<]'>##/%$  #!"&" -#%$$  _  2  J$.  2  J$.&S7'&76&76767323231"'&'6'&'&731450567676767624'&'&67116'&'&&'&#123632767676'7671165#1'"'&'77676'&'&#L $ #$-J..l  ( "**81  --F,"# s) "++9   N 8++" *G   ./K,#"!"  ) "#$+,,C-## %    ,7BiQx%66'&011176'&767201760156'6'11&7711674'0111'&76'&#"276767674'2#%4'11&511&'676'&'&'"'&74'&'67&'&10'&'&#&1376767654'&#&'11&'&76'&'&'&76767601""11"'6367676'&'&'&767654'&'&'&767631227256763"'4#&7676'&'&'7676''672100156767201003&0'05K 6   6  ,  !- ,,)* AB@A  &-- A  )##  '#   $$!  5$$    O    ! ..-. CA  0  r4   4Qe                '\7517151'51111676767&'&'&'7'151'1111'151'1111'151715171517111111!!!E88!!!!88EE88!!!!88E!"!";<<;BBB!!B"!!88EE88!!!!88EE88!!bA!!AA!!AW;X;LL;X;Wr(;7&'6767&'7"11'116767&'&'&'11&'6767O'(-22LK2323K9%%%%98%&&%8$L1221LK12%&78&%%&78&%E%11'&'&'&767677111&'&'1&'&'6767171'1111315" "."-,CC,,)(=mmR6589Uҭ -('#")C,,,,C?+,(??&99SV9:&E#&'&'&'676767#&#"74'&'&#0101017276'BRE88!!!!88E_Gc=<((,4#c&#"&(! .0-1!!88EE88!!?'(L6"!  6;!<d|777163213271171654'&#"7&1#"'11&1111327716'776'&1#"'11&5471171&#"111327'7716321176'&#"11w('('w('X('iw''hWw''5+DNXiz6111''1&'5167"#11"#1315131676'&'''676'&'"#"#131513113'11#15'11#1571111676'&'1111&'&767k     *C " ## #l  mm  \fe###f""T!&6j"11&'&&&'&#767767676767654'&'7&''1#11&''1&5476313171671317167 & <= 'AAA $# (' "$ A ,- -,$~*  *! 4&;, 55 ,A(3 %s#!uu!# " C>Nj111101476767217'1&#"1'1&'&123276767676767632371&10327676'5111577&#"01'&'&'&'&#"011172767676760137'  s### (& #B    Bs  SSS  SS S<  #m00m  %'      U|||      |{      {71111676767&'&'&'11&'&'&7667676E88!!!!88EE88!!!!88E''44''  **  !!88EE88!!!!88EE88!!22  ((  6&'11&'11&'11&'6767676767654'&'&'11&56345474'45#1'"#"#745656'51"'4767#131454'&32322'&!! ! '''' ! !!&'P P@  $$--$$  $$--$$ 2/.X CG&' 2+''716'&##1"114##1"13312551711331270E33nC62m2?!!!1!1676514'&'#3#511'11#1513117131''31513113R$  $  >>>=>>>=>=\\\=>=   . xMMxMMlllii+8EN#3#'111#1171311517131715113171#17751'1113311#11'11___lVb(m{WaCHU4N4PPPOIH(66SPߌHHHH@\?q?2335';;;er5FF=fff5{/Qp5311713151##3#1'1#15131'#3#653145&'#167"032767656731#101317677671476'05&'&'167316'&'1%671167&'&'&11110171&'&'1"11"#11"#11"1512767676'&#763631#1311'"'"'1365513167651*1za Iv4443X  4 B@  6 =      = +*67$  &l  -z,^)! ,  K2$A     ;  Ge d G ,I Uf!!!1!16767&'&'&'&'&7676765#1513151#1513151311311#113151&'&'116767&'z44#--/&&04>7H \nn3mmX &'$$ +'E(2"33#   *]v%'&'&'71676'&'&'&&5&545&11&'&'&'1&'&'6767&71'1041&'&'&#&#1111711107136767610767171&'&''5721'171'6767671&5271216&"171&'1#1&'716'&'6'311#1&'7767711711167671&'23012351'116767676711163151'1&"#&#112331311713167513216762111&''&'"#111012&'&'&'1&'&'&'71&71'1"4'1'16711#111&'1&'&'&'1'1'&'&'"17'11&'101&'&'767037271'17&'&'371'16367277#3#100'111'11#1'11'111&5&'&'1'"5&'71'11'&''11676767&'&'&'6767667415'31676367171116'171&'&5&711675171167677151'131171'117111312111"'&'"#'7'17167276767&'&17&76'&'7511&7017101&'&476"''7116511&7&#"7#3#12&'&#1111'1676'714'&&#1012767&'&'767676"''1'145671111101'&771'1&0167017#1&7631'11    !#   5-  !  .B\^?? Z     (      '         -       -  ;,, (@       s!  !/.,-##      5/    )          -(  D      *            ,   &  !)*/<9:^              % $          &%)          ,'         T     g $ /  23       8     8ycE~111111#1&'&'&'&545454545476767676711101011'0'&'&'1676767623270131551014#"#'&'&"#&303"#"#&54323274565456&#"#&72360125514720331&'21"701651"'4'43676767&'&'111&5&'&'&''"#6727201'&'6'&'"3'&'&7672'6567654#"#"'&567433232'6545456#&5676432327'6113"741&'&767674721'&'&767#3#"'63545456'"763207254105456#&73160#01"30013"#"#'&'&7%11#&#"30#"#&76'&'4#"#172#1&7276767676343270325415454#"#"7010323"3'6&72323236'6&#"17012370160'454'"#&7765656"#"301&76156'&01'1'4'&7674560101#"'&547601"1&03765476'01#1&703274545&&#&72323'71121"#&721545&#"#&70323230#"014767676767012#"#"#"010'&'&'&7476#1'32376'&'&#&711'&'4745765&'01'11654'376'&'&'' *+  "!(()32%% %*"! aa      !    ()  XX W   ++4           P    h        &  % &  '&Z !!) [ j    P }~""./'' 87      0   FG   32&% "JK           W     A  %n   j   :! .     hZ%0;r$)Cn}'L%67&'&'&'&701&47456'11007201&5437&110127&#'6''&'&'&#"#&54'&#"#&'&77'7'112632016&'#16701#47016311167654'&#556'%&747&7654'"311667"362767"#&7017"#66654#4'&'&'&'&'&'2#"'''&#"11'27251#67116'1101&'&##111#111123276765416'&''231161'"#55236131'"#7'5171#15131'111#11113171#71111676'&'&'11&71167'77#11111'171#111131''1"317&7"&701&6763&'&"#"#&'012311611'"#'111&'&'#111131'1511131517'"#11"#11&'010676"010351236'0111676'6'&':  4    '  !"-  '  8    )   e%4IQ<& &' %[,,,*-,*#    '         4N  L666!  m    ' NLN   BBB&&B '    - *  M0  U `     *<Yk7&##11312765514'%!!!"13!127671&'&#11#151317#3#1311#11311#1&'516731'11&''13117131xh  h   /0 e555 5>?h  & !&h F  h GX&&}srr9v7171'2511071167676&'&'&&'&'11'&'&'&'676776'&'&'41&7676761216767117711'ߨ:              C:      <       e}1@%|NW($3@N71176'&01117676'&'&111676'3276565'111131676701767&'6763&'01167&'6776'0161&'&'&''11&'&760177711'1711'#3#6'&'&51671101&13167673110#&1171"7"11516'&'4'11"#1'1116767613111&#1701701111151&''11311#116'4'&'&'&'11276711111672731'1&'51236711301751171&'&'4'3167121#161131630731111"#&11112767317#01"'&'&76767676'&'1712160171&#"#&5&'&1171111'&767610755214767611&011&'&'716'014767&#&76'"'11"#5171454&1114#�3010'63112716'"1711&'&'7101#&'&7&#&'01073176'&761"511&'1111'171716711&1𜥷117''05654'&"'&'01711'&'&'&72017&'11&'11&'"7111'1676716571171'11171'1276'&'&'&1711&5&'&'171'111&'&'&"101'167671'171171'171171171'1711714'&'171'116767121'1161117116762'%27101&'&1117'1113101676717654'&'&'6'"3767&1176#231134547 Q/)11110/), 2fJK**09:!*==I=""    ))??Kc       7  -       %         *       #)(A( !U[! =    "*$ )!  ( _ ;  "  %6;<h    ,  -[DC&&!"GGq =f L &+    !"$%  12[6$%    7-, Gu     ,       X  s   Y   O     ,       P+% & D 3X +^%  ;   * $  +  =A= !!Jr '&| !!327 ,54'&  + )%77#111113#371131XXX 8 ̕ v!'_bi`D%S}'9Diw 'D9L7771'171#1'11#1771'171#1'11#1#3#"'551463312'45&11&17117456##3#513125514##1513125514##1"133125514#'6751&#1"133125513113312'''#15131274'&#1&13312765713113312''77553125514##1"13311331257#3#51312525514#4##151312165114'0##1"#1"23312161514'0#'#3#"133125514#'5514665514##1"#1023312161513113312''#3#513121#7#3#0#1021310361513125514###151312''1#111711'177&'6'&'&67601&'&'&767&''&'0#&'&7367676'&'676'%6711636&67&'05&'&54711#'&'7676767017&'"'167&'01'&'&'#&'670#'#&7670167&'01676767667&'011167670#'#3#&11'55105&#1&1133125510'&''1#111711'17''1111711'17'#3#513127055141&##1513123455105"##1"111003312161514'0#'7#111711'171#=]Q  * O  P] .   V   $$(( *+7/0    6 ! 2##0( B600    r]++1//+* 1++2//$  $$ 88  $$vj  <  89 < 2!"s  &9 $ ( < ;& ; 6666??((4  $   ?  !?   F;(('&  !"= K"" $$& } -&  !"=K!" #$,%A" JA">  ,%(%#01 %&" &r2  244U@d7'!1'7&'#117105676''''+++;X) ssstGKKKg##@G-57&131276'&'7111111331276'&'&'&'&'&'&#" } 2\4$  #"$# >KK8ULLEFA//FFGG12%6711671167'1&547676767'&'&'01'&7476765'&'&'&''&'&''&'&'&'01'&'&'121276767601314'&'&563010'&'&76763         `            -4ETcls'15'51#73#311715131'''#151115131773#351'''1#1113117%7713151'171#!#3#111317155113'3#3'17'1#111135#3#17''13'77#1#3#51'111#1'7751#11'113"LvMMM- ,,, -8 88 Ollla888 8!!!Z[ P=NNNZ[M -mmmL!=[ZNlllM=LLL-LLLm--- ,7o[[[Z!P^MlMMMl 8 -87, -a888- ,7PZ[[ZlllL L [Z M =LLLl=MMM-g 7aZZZ[ O&M7170167670501716'&'&'&6''1&1'&'&'&010117676767 j +*Q2 tHI)* j **P3 tII)*$ B 4(  r6 ,-'8 A 4 (  r 6 ,,( -6?\es|73#371#1'53171#7"51147110167676##11316767#%77#113#3#1317711013107676'&'#113123#371#1!3#371#10133#351#1773151#3#351#1'7#171#113171#33171#;;;;RW3)dD=(((>(>u___[o -vpIIINC;;;; ___ZMI VVVQ:(':!^ 7 5555 9 N55<t7111111#&'&'&'47676767&'&'&'4767672254565456563232367676767"&'&'&'&'  !!!!  !  ]   !"   \Zbs%77#11'1#1513151#11#1&&'&51#1513151#11315131767#1'&'31673113171131'%6311#&'11&71167#3#51311#11311#1131'5531511151#7#171'1311713111#1'J555>w8  7''!!!!!!!!V:999WB55f  f55B----d%6'&7&76'&'010132101312367&'&'&'&767676232727676"#'"'&'&7636323237454'&'&'&'&'&&'&'&'&'&7676'&'&'"7674'&'&7632'&'&76703316'&'&#&'&72323236Q  /p    -.64+((!  "33      !!$  2                  %"'    %$ $  (5BU&'&767&'&7677&'&'&'&''&'&767'676'%67676767&232%%&%%%&%%%&%%&%%a@AM (!! #%%&%%&%% 3-''-IA@$ u++++++++iH++$ %Z++++T#@QRD!,11+ % "#?{->P`7#11"'51#1176751#'567676751&'&11&'&55167653151767&'&556#&'0171111"'17674'&'&'67251&g ! !c21UT11;EEAA0f)*WX*)NZZS    O  hg$ iJ&%!!&%J >!"$$"!>D lE70veee- W      %` ?c%6'11&#101632763276711676#'131&'&"#1676767'1111210!1    pE !)43GGp&*40&`34$B2w10  ))<<<<((D  ]0     @f%11&'&763&'&'"'&76701#'&'&7&767&'&7601676760167647676771111&'&'&'676767&'04'&'676'&'&'&&'&'0101&#"117276767676767676')       #  f!!88EE88!!!!88EE88!!O            g        $   YE88!!!!88EE88!!!!88EK!%       ?l7&'&76'11&'676'&#'&76767676767676327&'11&'11&1767701676'4'&'&5&% 2"* ,0%'   !! /? !42', 2K/$,,$/I A-,),85' && 07DC1 <;  i455&% (- %&5 \enw%6711676'&'676'&'&'&' &'11&014767'7767501&'&'677676'&'6'67'&77&'67#&'6767'6767012'&'&'014767037&'&56&'&2&'&'1&&6766&#7676311#&'547  "  %9  ;"A   '0" ""Y ,N!,3    .' '## 3E0   8;;*+(-A   !# 4! ' 6( * " 1)- j8$ 8  &. - ,?5OJ 9--    $,9'   9 -9 =Wc%&'#1131677&'11&76'&'!11!16765&7676751&'#3#513121#'#3#13167&'N*3+2 '' H '' bbbb! ' 222446!G$ 0000mO'&3E%7''1&77161771615''&1''1&117716'%'7716''1&1//////hCaaaaCCCCbbr[[[[[[!.<L!!!"13151!11#113127671&'&#1111314'531&'&'3#3&'&'&'1 +  U@.+**@+++ 45BR66 @@+ * @U***-?+*A55 +66R11#11"1"#"#"1710&7116732765116'&'"#&'&''&'"'&'&'&'67232767676545&7601212'01"'&'776'&'&y   mO        #"# "  ! A   Q <o         %   "=66""8 @k111676767671167656765676751&'&'&'"#"#11"''767676'&''&'#"'"'611667601'&'&5''&767676711711327237511&'&'H  1**3788   +JJJI*    ") ,, "   **)  "]    :988  98:9 6##/ -  - /##0   $3^ C%07#3#4763670#11&117216765&'&0101751&#"%11'''&''&767&7676767264'11&'1101&'&'632707674'&013#"'01&11016571013076720&#&767016551016'&'705"1#10#1112131030570111&'&2765'14#"#&'&7413125054'4'67&'&'"1&#&'4720767654'&013"'4#1130174##1476762125716#01&"#1"1331"1'4767676767312501114'11&'01676'7&11"510'01#10#1101131070151&760125676'''&#''&5&76327416741&010127657&'11&#72765'14#"#&'&7413125056''"1131&   10B#$/+,*+=##2 /<&!0 0,,        /  8 %$     B   6.   /  6   % D(( 01 %$33!)('0" $$2  + "O25  :   86  '  `9Z7#3#"'&'&547676331#1312##1&'&76731654'67312765514'&##1654'311rrr  r   T* Av""    x3x""1111676767&'&'&'&'4767&'&#76'&56''&'67633674167676703&'&'&1'&'&7676'&'&767667676016E88!!!!88EE88!!!!88E   '  '      $   !!88EE88!!!!88EE88!! +  *%&!  /J     4 .U`k%11"'&'"#"'#&'&7&'&76727676767676711676'&'&'622323676'63112#"'363112#"'&711611367676&'&' >  9+ =43%%=$1G       8=co&'&1111151&'&1#113117216767111111227676''111171#1&'514''1&76331217167271151&'#11111'131675117111'1'15171717171> gg , n5554  %% n7s&Rs T3x'!XDgg0<aa[[[..\ FF  =PC4+RB4"H TTC%''&#"11616'&7'11#"'&76751&'&7'11132771654' (32  /  2 )42.z  {  3  BW^e711#151317!16'&747334'&'"'01&7#1132774'11&##11315131676777#17#3#13  @1   0~ 4!11100*@@      &8 / ] BO`iz%11516727654'&'&'&31&'&56763231&'&'6767'"'67676'&511&71167'2&'671111&'&547&'67#67&'34QI/.$$#$./Je779:kV77>=auAAAAua=>?I+)R $ $+*++H$ # I? 5*4  vF&&1J/.# !./J1:9hk::&'HS--AAuuAA--SDI  b##3IC&'    86I`p1111676767&'&'&'71312&#"73#31#1'11#17131#3#7136767&'&'713113%#3#13127676'#3#13167676'&"# N?@%%%%@?NN?@%%%%@?NUM/ ![ $ % ! \5h     32??2332??23#" :Z##Z%= R$9c0  _9!,:Q_o7317113171131'1#11'3#3#13176767&'&'&#556'0176'&'&#1131276767&'&'41101#157751116' ,-. -)*0000 4.3  PPMMvv0.fff !" J !   m,3<L#3#131676'6'&''1111676767&'&'&'#3#513'&'67#3#5131'.../2+'E88!!!!88EE88!!!!88EQQQQQ94 !!88EE88!!!!88EE88!! '*J454'&'&'&'&#"##1"#"#132331232767676765455145 ""#1#'&'367&'&'&'&'&53676'&''      F&%)B'+((+## #)))@/. : $     = !''$   ,&&?!"%''"$999%m1111676767&'&'&''#1'&'&'&74767456763111013312767654'&''1414771312E88!!!!88EE88!!!!87F 77      !!87FE88!!!!87FE88!!)  )  )) #2X , A 4S :  F : d 4 X/ . * Font Awesome 6 BrandsThe web's most popular icon set and toolkit.https://fontawesome.comVersion 773.01171875 (Font Awesome version: 6.5.1)Font Awesome 6 Brands RegularCopyright (c) Font AwesomeRegularFontAwesome6Brands-RegularFont Awesome 6 Brands Regular-6.5.1Font Awesome 6 BrandsThe web's most popular icon set and toolkit.https://fontawesome.comVersion 773.01171875 (Font Awesome version: 6.5.1)Font Awesome 6 Brands RegularCopyright (c) Font AwesomeRegularFontAwesome6Brands-RegularFont Awesome 6 Brands Regular-6.5.1      "# !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      exclamationhashtag dollar-sign0123456789 less-thanequals greater-thanabcdefghijklmnopqrstuvwxyzfirefox-browserideal microblogsquare-pied-piperunity dailymotionsquare-instagrammixershopifydeezer edge-legacy google-payrusttiktokunsplash cloudflareguildedhive42-groupinstalodoctopus-deployperbyte unchartedwatchman-monitoringwodunotdefwirsindhandwerkbotscmplidbilibiligolangpixsitroxhashnodemetapadletnfc-directional nfc-symbol screenpal space-awesomesquare-font-awesome square-gitlabodyseestubberdebianshoelacethreadssquare-threadssquare-x-twitter x-twitteropensuse letterboxdsquare-letterboxdmintbitgoogle-scholarbrave brave-reversepixivupworkwebflowsignal-messengersquare-twittersquare-facebooklinkedin square-githubtwitterfacebookgithub pinterestsquare-pinterestsquare-google-plus google-plus-g linkedin-in github-altmaxcdnhtml5css3btcyoutubexing square-xingdropboxstack-overflow instagramflickradn bitbuckettumblr square-tumblrapplewindowsandroidlinuxdribbbleskype foursquaretrellogratipayvkweiborenren pagelinesstack-exchange square-vimeoslack wordpressopenidyahoogooglereddit square-redditstumbleupon-circle stumbleupon deliciousdigg pied-piper-pppied-piper-altdrupaljoomlabehancesquare-behancesteam square-steamspotify deviantart soundcloudvinecodepenjsfiddlerebelempire square-gitgit hacker-news tencent-weiboqqweixin slidesharetwitchyelppaypal google-walletcc-visa cc-mastercard cc-discovercc-amex cc-paypal cc-stripelastfm square-lastfmioxhost angellist buyselladsconnectdevelopdashcubeforumbeeleanpubsellsy shirtsinbulk simplybuiltskyatlas pinterest-pwhatsappviacoinmedium y-combinator optin-monsteropencart expeditedsslcc-jcbcc-diners-clubcreative-commonsgg gg-circle odnoklassnikisquare-odnoklassniki get-pocket wikipedia-wsafarichromefirefoxoperainternet-explorercontao500pxamazonhouzzvimeo-v black-tie fonticons reddit-alienedgecodiepiemodx fort-awesomeusb product-huntmixcloudscribd bluetooth bluetooth-bgitlab wpbeginnerwpformsenviraglideglide-gviadeo square-viadeosnapchatsquare-snapchat pied-piper first-orderyoast themeisle google-plus font-awesomelinodequorafree-code-camptelegrambandcampgravetsyimdbravelrysellcast superpowers wpexplorermeetupsquare-font-awesome-strokeaccessible-iconaccusoftadversalaffiliatethemealgoliaamilia angrycreative app-store app-store-iosapper asymmetrikaudibleavianexaws bimobjectbitcoinbity blackberryblogger blogger-bburomobelexperte centercode cloudscale cloudsmith cloudversifycpanelcss3-alt cuttlefishd-and-d deploydogdeskpro digital-oceandiscord discoursedochubdocker draft2digitalsquare-dribbbledyalog earlybirdserlang facebook-ffacebook-messenger firstdraft fonticons-fifort-awesome-altfreebsd gitkrakengofore goodreads goodreads-g google-drive google-playgripfiregruntgulpsquare-hacker-news hire-a-helperhotjarhubspotitunes itunes-notejenkinsjogetjs square-jskeycdn kickstarter kickstarter-klaravellinelyftmagentomedappsmedrt microsoftmixmizunimoneronapsternode-jsnpmns8 nutritionixpage4palfedpatreon periscope phabricatorphoenix-framework playstationpushedpython red-riverwpressrreplyd resolving rocketchatrockrmsschlix searchengin servicestacksistrixspeakap staylinked steam-symbol sticker-mule studiovinarisuppleuberuikit uniregistryuntappdussunnahvaadinvibervimeovnvsquare-whatsappwhmcswordpress-simplexboxyandexyandex-international apple-pay cc-apple-payflynodeosireact autoprefixerlesssassvuejsangularaviatoembergitterhoolistravastripestripe-stypo3 amazon-pay cc-amazon-payethereumkorvue elementorsquare-youtube flipboardhipsphp quinscapereadmejavapied-piper-hatcreative-commons-bycreative-commons-nccreative-commons-nc-eucreative-commons-nc-jpcreative-commons-ndcreative-commons-pdcreative-commons-pd-altcreative-commons-remixcreative-commons-sacreative-commons-samplingcreative-commons-sampling-pluscreative-commons-sharecreative-commons-zeroebaykeybasemastodon r-project researchgate teamspeakfirst-order-altfulcrumgalactic-republicgalactic-senate jedi-order mandalorian old-republicphoenix-squadronsithtrade-federationwolf-pack-battalionhornbill mailchimpmegaportnimblrrevshopware squarespacethemecoweeblywixello hackerrankkagglemarkdownneoszhihualipay the-red-yeti critical-roled-and-d-beyonddevfantasy-flight-gameswizards-of-the-coast think-peaks reacteurope artstation atlassiancanadian-maple-leafcentos confluencedhldiasporafedexfedorafigmaintercominvisionjiramendeley raspberry-piredhatsketch sourcetreesuseubuntuupsuspsyarnairbnb battle-net bootstrapbuffer chromecastevernoteitch-io salesforce speaker-decksymfonywazeyammergit-alt stackpath cotton-bureau buy-n-largemdborcidswiftumbracomkdocs-1.6.1/mkdocs/themes/mkdocs/webfonts/fa-regular-400.ttf0000664000175000017500000020464414664334534023630 0ustar carstencarsten  OS/2_n^^(`cmapJglyflݘhead'g6hheaJ$hmtxPloca|Xmaxp namePpost9; }_< kuku LfGLfAWSM!H? @@ @@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@  @@ @@@@@@ @$4$ 4!%+9Zabcdefghijklmnopqrstuvwxyz#(##%%%%&&&&9&Z&[&\&]&^&_&e&&&'' ' ' '1'D'F'S'T'U'W'd'+++$+P"$.>DEFY\]ginpsu| #(*3DFGJNRU\e IJMPR[]txz{([%:?ACEG\},16AVgz!#*0<abcdefghijklmnopqrstuvwxyz#(##%%%%&&&&9&Z&[&\&]&^&_&e&&&'' ' ' '1'D'F'S'T'U'W'd'+++$+P"$.>DEFW\]ginpsu{ #(*3DFGJMPU[d GJMPRT]qxy{(X%:?ACEG\},16AVgy3.- qha]XF@?) s740/. z K  p l k j i h T  ] M < 8 / (     "* 6::.00`dbNLRjjD^FZ>B^fF,,(4d`( "Bjl..(  !"#$%&'()*+,-./23478;<=ABCEFHLPQTUVWY[]^_`efghijmxy{| LE!!#%*+09<Zaabbccddeeffgghhiijjkk ll!mm"nn#oo$pp%qq&rr'ss(tt)uu*vv+ww,xx-yy.zz/|#(#([####j%%P%%W%%P%%P&&i&&_&&L&9&9Y&Z&Z&[&[&\&\&]&]&^&^&_&_&e&e2&&W&&W&&y''_' ' Q' ' ' ' '1'1'D'D'F'F'S'S'T'T'U'U'W'W'd'd2''+++++$+$W+P+P301Q234e5]""6$$7..8>>9DD:EE`FF_WY;\\;]]<ggiinn>pp?ss@uuA{|BDEghF2GP8HITJNOQAERTfmUV WWBCX[7##F((**33\DD]FF^GG^JJ_MN`PRbUU[\edegikVmnwxxWyz{{| }GI~JJMMPPRRT[]]qtxxyz{{H=4((X[%%::??AACCEEGG\\}}U,,1166AAVVggyzjKKGmU7AA>MMgNNhdd42222SHOBCe\\zT{8l44W55WSS5Q2OIfrBCefAE      Z  ""&&++,,--..3366BBXDDWWWWW  22##))2aPr*n2j&>dJzb"T B r  ^ 4 X F v  n*"b,z.$6l.(2N##$B$%&"'J'((\()~**`*++Z+,r-$-.l./8/01 1|12p334 45,5v6067\789:X:; ;l;<=D=>t?(?@A`ABFBC>CCDnDEpFdFGdGHIIIIJRK$KLNLM0MN NNOxOPQQRRSFSnT*TUVFWWXY&YZ[\v](^^`.`abchij jkl@m,mnn 5777'13#3'17'17#3#17!671167!11!1&'&'0ssssssssssVss     *ЦLЦ  `  @ &'1672711654'&#"38   X   HQ131716131#1131#11'&771#11'&771#1&'673171#1&'673171673171#oGQNWoHQNXooKUKUKUKU 4]&'1"#31'&'&'&112231675167676'&'&'&'#1&'&'&76767676'&'5$!  4 !6 3  4 *0*     21 5    1 %6'&17&'&767&'&767q@O@    0171611''11&'511'&771'1&7615167    Q  TT  QQ  TT  Q&'1#131167513167&'#15x@,6711671&'&'57111676751&'&'--DD----DD--0  00  0D----DD----Dp 00  00 4'&17711#13367&'#1 h DPhhP@  )x@+1'&7716731131!1&'&77167&'&'#*$$+><(', 'p$#+'(<=* ('@:67!1131#1"'&''1&761316767&'&'#1&'&771#1&' (8%&&%8[ ![$$d  &%88%& $$ '6'&1331167513167&'#151&'1#17   ((}}  hh@76731#1131#1"'&''1&761316767&'&'#1"'&77 8%&&%8_  _$$  &%88%& $$  @,%&'11&'16767'63&'&'67716 02  00 ~D----DD--) I0 #'0  0--DD----D@, ZC67!121'&71#1&'   p l@"Dc&'11&'#13167674'&'673#3#1&'&'67673101013101015011101#10101&'&'6767310##5(5##)##5H5##)|  H  ((  (  $5####5:$"5####5"$:|  0  @,11677165&'&'#&'&'67671'&770 02  00 ~D----DD--) I0 #'0  0--DD----D@, Z11'%1&'47%16~%   P s P0 !167&'!!167&'!(pp0117%1674'%1&% P   s 04G6711673111167514771676551&'&'#1672711654'&#"3@" "4#5%$6 6%$`   ""&"* "6%$$%6   JW11&'&'&'6767671&'&'&'676767113276551&'&'&'&767X;;;;XH9:"""":9HH9:""'1#63""""3,    ;;XH#$$##$$#;;XX;;"":9HH9:"""":9H'%%""33"" P X;;))))&'177131176'#3#71 "" F\\p QQ @1B11113167674'&'67&'&'##3#5167313#3#1&'585##$##5lltttl  ttt  ##5%#65##Ȑ 0 ( "3276'&'&'&767676'X6EE6226EE6,8888,,,,8888,<446FF644++-9999,,,-1316767&'&'#67116731#1&'&'8hK1221Kh8h?2332?hp21KK1232??23P@-11113167&'#1&'513167&'#151673167&'#8@#111167513167&'#151673167&'#82116767#1&'67312&'&'&'676767'&'K1221KD00   >>Z?2332?X= 0Ep21KK12+*B Y9:32??237 ,"%5675151&'1!151&'16751!P p@311#1!167&'#113167&'#pppp`@ 1&'&'516716767167(--DD-- 00 D----D((0  0G!&'11675171176''1716'&150P vP ڗ @131#1&'1678$61161&'11#"''11&'167  p@ 611671'11&'167 &  Np ^5"1132767654'&'&#11#"'&'&'67676320((((00((((045;;5445;;54p)*..*))*..*)=3333==3333=@,3#3#151673#36767&'&'#1116758ppp,,xxxxA*++*App,,+*AA*+x871167'1&76167&'&'&'&'&'6767671''021K6+[ [*21KK1208H?2332??23:6 6K12k k0DK1221K'32??2332?Z>A @G#61111675131176''16767&'&'##3#516731#8nw e.'&:x%%  $$1:&'%%D^201'11&'&'"1&'&767676'&'&'"'01&'&'&'&71'1676'&'&'711&[$#; 96G >&$#: 96G    >&e!  $=   !  $=  3116713167&'#x 1676751671&'&'5167()==)(66RR66=)(()=R6666R61161&'1&7 [ p D$611671161&'11"'1&7 wccw aaJK pC 6'&1'1&11771176''17z   y    &116751716'&1'+    67!11!1!1&'&71!1&'P  /    i3@111!167671&'&'#1'1&##6731213311!15!!!1!1&'5@+ - ``+@-  ` 5777'13#3'17'17#3#17!671167!11!1&'&'0ssssssssssVss     *ЦLЦ  `  +b'''1&'5167676676701016111#"'0'1101'10101&'&11716751&'&'&01011001#"'/! 5>2 2>5 !/  # # -A6(' # # ((6A- C%,,%+(G1111''11'&771'1&76771716771117161'1&771'1&'' D o o D555 vVj i Vv 5  n II n  Olll U x88x U l '5L&'&767#471167632#"'&'&5!!!&'&'#167116731#!1"'&50'((''(('""""/^^#$2\2#$123K\K32  |  @----####11K3223K   5I%11#"'&'&54767632!113276767&'&'&#"75176''151&'1177111177110!"<=CC=<"!!"<=CC=<"! ` U9////99////9F::$""$::FF::$""$::F @ 9{@)<IVcv1!1671&'!671167!11!1&'&'4711632#"'&536731#1&'6731#1&'6731#1&''"'11&547632#4711632#"'&5@@@@`   hH     p@@@  ``@   @  -B&'11116751716771671&'&1#"'&15776711'&150P@;EI"  $&Uaaa)'*--+53KPE(1Xd"  N  $+6711671171611!151!11''11'&'     0w\ \0 Hnn9F1'1'1&#"1'1&#"1111167!%111!167671&'&'!676'&' S PP  p l+ p@0@ 9k'1'17167711171677717716771654''1&#"111!1676751&'1#!1"'&5147633167&'# .熆.:  d  %%%  pp .ņ.:d   '%%%pp  5V211#"'&'&5476763671167654'&'&'11771176''1716'&1'1&9////99////9F::$""$::FF::$""$::FQ////////1177111177110!"<=CC=<"!!"<=CC=<"!Q////////5G211#"'&'&5476763671167654'&'&'6'&1'1&1779////99////9F::$""$::FF::$""$::Fqo/@1177111177110!"<=CC=<"!!"<=CC=<"!/o/@5_r%4'11&'&#"3276765!671167632#"'&'&'7671163311&'51477165&'#1"1'&754711632#"'&51177111177110!"<=CC=<"!!"<=CC=<"!:  ,: 6   9////99////9F::$""$::FF::$""$::F[ $     C"Ih1167676767&'&'&'&'671167&'&'&'&'&76767671167&'&'"10#"'105211#"'&'&5476763 1(( ((11(( ((1$00==00$#  #$00==00$#  #"""####p!""!## ##!""!## ##!"""""""9Iiy&176''167676'&'&'&'&''67'165&'&''''654'23''&'&'&'&'67'167'''&''127' P i  #$00=3+*!p6L1(( 6$%61#.RRR"3***&.1(( &" $#00=H6X888%8$%6 0 R  ##!"Xv)* 6%$$@@@ " !!!$.$ ##!"F,,, !,6%$ 3<ENW`kt&'1#1111!1676715151&'&'#151&'1#153#31#153#31#1533#31#1533#31#157#3#51315#1513#5#1513#5#1&'5137#3#5131(@(hPPPPPPPP````PPPPPPPPP@P``@P````(00(((88h@@@@@@088(((88888888(88O7636767&'&'676767&'676767"'0#0##01"1#"'&767670101|(0_8888__88$  g/"":9HH9:"""":9H80# 9/0>>0//0>1( )%4E:////:://  76711673121311!1&'&'71!1671&'#1"''1&##+@ - `+@ -D@3#367716'&'!1116731213113151&'&'#1"''1&##113000 p p Dv!/u0uu u  #1?1!1!1&'&'1676731#1&'3#3#1&'67!!!!1&'67`h`hH`9t76'&56767"'&6767'676736767&'&'27676'&'&'4'67&'&'1&'&'&#&'&'X!++II++++IX- B9X;;;;XX;;9B -87UB'&!/##21>"+2&&&&22&& @. 21KK1221K  .@I11%%/+" -8+11'&771'1&76771716711171% o D  vV]O n ;;; U x2 0[n"'&327676767676'&767654'11'&#&'&'476'&76767676311'&767676p,..'&  ,..'&  "--;:; "-.::; y( &'3p &'..,  &'.., 0" ;:;--" ;::.- (3'&@ 2>J1!15167!5!1&'51!%111!167671&'&'!3167&'#33167&'# @0@800ppp @!>GP163!1251&'!5!16751&'!1#556767!111!1&'&'567&'7&'67@0xp``````0 =my#3#13367&'4'11e#11&567&547&55167167515'01110131#1##&'&'516767367&'##373367&'#1#3#3367&'#  3""$ R"@G0//0G@0@  (((0@ ""30(  ((((P(  /0G0G0/@ =my3#31##&'67471163010131165&'654'6551&'1&'5157011101#13133676751&'&'#&'6733#'##&'67313#3##&'673@  3""$ R"@G0//0G@0@  (((0@ ""30(  ((((P(  /0G0G0/@=o}563315151&'"1101011316767#&'#"'##1&'673167&'#01110167516767163636311#1&'&'5%&'11675'25151&'135675151&'@ ""30(  (((x(  /0G0G0/P@  3""$ R"@G0//0G@0@  (((0=o}75533111&'7"'11&5010151676731&#&#"&##131#'0111011676751367367367675151&'&'#1&'5151672711&'5137556711&'5@ ""30(  (((x(  /0G0G0/P@  3""$ R"@G0//0G@0@  (((0-U%#3#&'16731113#36767514''1&##1111131676751#11#1&'1673151#DD0 pD0D 0=FS!167514'711!1&'&'1676731211'1&11#1&'51#1753151#676'&'0@"J"JP   `@"@J"JdhPPPP$$$$)1!1&'167!%111!167671&'&'!@@p@0@$>113277151&'!5!167511#"'''671167!11!1&'&'@$$0P duuT3<Nj#3#13151#1&'167313316731&'&##1&'&#"67&'#3#&'16731113#36767514''1&##11i)))`` H,>)'0DD0    hD0DpFYj%67&'&'11#1&'&'1111&'&'676711111#1676711111167'11&'6767&'11&'51311)$%66%$1 21KK12 1i """ )6%$$%6)    +9K1221K9+   y """,AM"11111!1676''1&'51&'&'514'&#111!167516767#3#32765 8#$+ +$#8 0 (' 0@@@  ++;F7  7F;++  ` 0J==J0 /R111#11111131111111111131111111113111111111113111111111311111111111311111111131111111111131111111113111111111311111111111311111111131111111113111111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111311111111131111111113111111111!3113167671&'&'#151&'&'#3#31#1311#1311#1515!3#31111111#1111111#1111111#111111111#111111111#1111111#11111#1111111#111111111#111111111#11111#1111111#111111111#111111111#11111#1111111#111111111#111111111#11111#111111111#111111111#11111#111111111#111111111#11111#111111111#111111111#11111#111111111#1111111#111111111#111111111#11111#111111111#1111111#111111111#1111111#111111111#1111111#111111111#1111111#111111111#1111111#111111111#1111111#111111111#1111111#111111111#111111111#1111111#111111111#111111111#1111111#111111111#111111111#1111111#111111111#111111111#111111111#111111111#1111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#111111111#11111111111#111111111#111111111#11111111111#111111111#11111111111#111111111#11111111111#111111111#11111111111#1111111&'513167&'#1513167&'#151677673111#151&'&'1#15#11311316751316751&'#151&'#1XhXXXX8888XhXXX8888@  @X (0hh0(8@  @)K1!1671&'!671167!11!1&'&'55#1&'67315167131#11&'@@@@@@@@p@@@@@@@@5%4'11&'&#"3276765!671167632#"'&'&'1177111177110!"<=CC=<"!!"<=CC=<"!9////99////9F::$""$::FF::$""$::F5Pcv%4'11&'&#"3276765!671167632#"'&'&'1167676&'&'&76'6711632#"'&'7211#"'&'67631177111177110!"<=CC=<"!!"<=CC=<"!   (( "      9////99////9F::$""$::FF::$""$::F>  n     5Nat%4'11&'&#"3276765!671167632#"'&'&''&767632'&'&''6711632#"'&'7211#"'&'67631177111177110!"<=CC=<"!!"<=CC=<"!  #",,"#       9////99////9F::$""$::FF::$""$::F %%        5H[g%11#"'&'&54767632116767654'&'&'2711654'&#"374'11&#"327653167&'#117711117711F::$""$::FF::$""$::FP      9////99////9!"<=CC=<"!!"<=CC=<"!     x @);K]m1!1671&'!671167!11!1&'&'3#31#1&'5167'67311#1&'573#31#1&'516767311#1&'573#31#1&'516767311#1&'573#31#1&'516767311#1&'573#31#1&'516767311#1&'573#31#1&'5167@@@@H@@@@PH`````````3@&'1#1111!1676715151&'&'#151&'1#15!!!1!1&'(@(h``(00(((5H%4'11&'&#"3276765!671167632#"'&'&'7611'&551471177111177110!"<=CC=<"!!"<=CC=<"! 9////99////9F::$""$::FF::$""$::FmX X)71!1671&'!671167!11!1&'&'3#3#1&'67@@@@p@@)=1!1671&'!671167!11!1&'&'7''1&761716@@@@Q@/op@@q@/o0m%5551&'##&56767336751511'3#313312771654''1&#"1##33167&'11410#&'05&'&1&'&'&567673'111!1676751&'1!1&'1673167&'# >'  000jj@   0D--  P@@ $0  __0 }  | ---D-  @@P5K^%4'11&'&#"3276765!671167632#"'&'&'7'&771677161'4'11&#"327651177111177110!"<=CC=<"!!"<=CC=<"!3 8  8    9////99////9F::$""$::FF::$""$::FE888  8  E  )<%671&'!11!711!1&'&'16767!1'"''1&767311#@@@ h  h @@@p    p)<1!1671&'!671167!11!1&'&'21#1&'&77163@@@@ h  h p@@@p    p)<&'!11!167'111!1&'&'16767!1'&'516761@@@p    p`@@@ h  h 1671#1"'&551#11!67116731211!1&'&'@P Z PZ1=I&'1673113311!111!1676714''1&##3167&'#3167&'#@ PZ8P %Z`j&1111771677161331#1"''1&13312767674'674'67&'&'#167716'&'"1113312765514'&##D  4 3    a> ="a\ @ @9 8        ) ) !    j'11&''1&''1&761176''1&'&7673167&'&'&765&'&'&765&'&765&'#1"1'&77163312#11%"'11&55147633121##D  4 3    a> ="a\ @ @99        ) ) !  ]   ?q&'&1'1&11111177117677171676''1716'&''1'77111111'1&1'1&''1716''171677117271167654'&'&#"3'676'&'x SR b 99 b SS b 99 bjAAAN- -NAAN- -NA@   99 b RS b 99 b SR bZ---NAAN- -NAAN- p$$$$S#&'&'676771167676767676'&"#"#01&'&'4767670367676'&'&#"#01"#01#!))CJ21,>Y::32?H8 K11  ]4AK8921K4*)B>>[?23( 21K)## )<7!1671&'!1&'11&'16767!11!7477161''1&50@@@p    p @@@ h  h 5P%4'11&'&#"3276765!671167632#"'&'&'%211#"'&'&54767631177111177110!"<=CC=<"!!"<=CC=<"!  9////99////9F::$""$::FF::$""$::F`   7GYi{131516767131671&'!671167!11!1&'&'67311#1&'573#31#1&'516767311#1&'573#31#1&'5167@P  P@X000000000000@  @(00000000/ISiu3#31#1&'&'1676731211#151#1"'&551#1173#3#11&'51516767&'#11373#31#1&'51676751&'#11376731#1131#11&'515@0000Z0P p  `     P0  0Z Pp 0PP0P @ @`p 0@@3W7673113311!1&'111!1676714''1&##&16771167716'&1'1&'1'0 PZ700P %ZSSTTTT3S7673113311!1&'111!1676714''1&##&11771176''1716'&1'0 PZ[ -- %% -- %%P %Z 99 00 99 001IY&'1673113311!111!1676714''1&##116751316767&'&'##3#51312#@ PZH,  DD,,,,  P %Zh8  h8 1D^&'1673113311!111!1676714''1&##4'11&#"32765&#"1'1&#"1333276''@ PZ`   E)  ( 0 HP %Z  /<@  h9FSky&'1673131673113311!111!1676714''1&##3167&'#13167&'#1767674''1&'#13#3#1&'67@0 0 PZ0      P %Zp@HXXXXX3M^!!!671#1"'&551#1167116731211!1&'&'5''1#1&'5167317167'&7654'&76@P @Z $$ V    PZЀ #0# &&  1[671#1"'&551#11!67116731211!1&'&'471163312171631"''11##1"'&55@P ZP ` -  - `  PZ  h  `1CU&'1673113311!111!1676714''1&##6'&1176''177&117716''@ PZa00`00P %Z00"00 ;IWer%&'71327367&'716'&1&''1&1177167176'''''654'717&#"'1677&'6717676'&'6KK6PPD99  D__D  99  D__D  "PPP P,,"PPPP6KK6PPP,,P #,,P PD__D  99  D__D  99  "PPPP6KK6$PPP P,,PPP6KK6P1  (/7111132771176716'&%%11'''71  >| @@4VV{O0  :g J4 3EEE5<@HLRm%''"1#"''1&'&#1&'71676''167132771113#3#1367'&'"'377''671167654'&'&'&113167716''YYYYL"*EE*"LKKF::$""$::FF::$""$::F0 < 0WWW&/0S"::"S0/&9  !"<=CC=<"!!"<=CC=<"!F # 88 #5ESao}1!1671&'!&'11&'16716716767!11!67311#1&'573#3#1&'673#3#1&'673#3#1&'673#3#1&'67,`h``    p 0p(0XPPPPP'7LX&176''16''1&'51&'&'514'&#"1'6711631'''#167'111!#3#32765' P X+$#8  B$0 === /+@@ 0 E 7F;++  7t 02-0002;% E7  5X211#"'&'&5476763671167654'&'&''&5114763276'&#"3276'&#"'9////99////9F::$""$::FF::$""$::F9 '33(%%(33' 1177111177110!"<=CC=<"!!"<=CC=<"! &&'33(%%@)Jm1!1&'167!%111!167671&'&'!76'&'676'&&'&'676767116776'&'676'&&'&'@@@ ,)),     ,)),  p@0@ ))   0  ))    '7Qn&'6767!1671&'!1&'&'6771!1671&'!4711633121##1"'&553#36767513121##1"'&550 X   MF   @  L    @ ` ` `  KTdm|4501016723&''111276731367674'&'516765&'&'"#1&'&#!67&'1#1&'51673&'67"#11&'4567%3#31#1&'51#11276731367674'&'516765&'&'"#117676'&7'&7676&'671101"#0  0    p+   ;  ...  0   EY    -  }  j  j   j  j   ( j  %%  j        41315147633151&'!#3#&'&'16767!1111##@ P@ZpP p@Z'9S3#36751311#1&'&'516767311#1173#36751&'#11'556767311#1&'&'@0@@@@@04>J67!1#1111131!1&'6731516771'1&'51#1&'31&''176551#113P+RQ,,QQ,oRQ?-QR,??,RQ-?RQ""3BQ311111#1!167&'#151&''17167513167&'!'1#1516775''&'51311,QQ,P+RQ,RRRQQQQR?-QR,??,RQ-?QQQ++RDQQQ++Q 67763763763116751676551&'&'"&'"&'"&'11'111711116751&'&'171'1&'5147716716751515       &&&   +    hv#h@  " &! m 6   B@:&#1'1&#"133323236767454551&'&'"51&'&'"&'011101516710101167510101671010116751010167100"###&''1&76176751671675( X$/.4F/0 ($$5V>W , "X$//F"`  8PH5$$=e-.00---.N7111716331671&'!11311111'&55151115151##&'&'16767!11#1 I `0 00eP 6  |  0 L5CQ%4'11&'&#"3276765!671167632#"'&'&'75&'516735&'51671177111177110!"<=CC=<"!!"<=CC=<"!p9////99////9F::$""$::FF::$""$::FH5O%4'11&'&#"3276765!671167632#"'&'&'73#321##1"'&55147631177111177110!"<=CC=<"!!"<=CC=<"!  9////99////9F::$""$::FF::$""$::F`   s&'167171671111676767110127671101'&'#1&'"7631012767676771511511"1'&'#1&'#150 $1 #2$1 $2(pL        "    71##111111176767613276567676''11#"'&'4771671331##1&'#1'''&''1'1'1&'##1"'&551673327716731255#1"''1&#17716#113&'6767&'333 $   L$F+:8*'P   U# $   (<+: 0 %&'FHKK 333$     L!B'$   $ %!B  C K,G210301111#"''151477'327711!1&'5"11!1676751&''1&#ώ$$p   uuuu   )6HTam1!1&'167!%111!167671&'&'!676'&'113167&'&'#%&'167516751&'&'1675  $$$$ ""@00   ""@@p@@@@@)6HT`1!1&'167!%111!167671&'&'!676'&'113167&'&'#73167&'#3167&'#@@@$$$$ ""@PPPPp@0@   ""`'BO\%&'11&'#1&'6767&'676731671167654'&'&'&'&767'767&'& )@) 8;;XX;;7)0>>0@oF::$""$::FF::$""$::F  X*,,**,,*0$$:VX;;;;XV: P!"<=CC=<"!!"<=CC=<"!(2222 :LY5##1"'&551#11!1671&'#671167!11!1&'&'3#3#1&'6767'676'&' @ @@@@@""    ""`$$$$@2?KW#1&'&'#1#1&'1!%111!167671&'&'!&'&76773167&'#3167&'#"@" 0@  hPPPP ""@$$$$0`"/11!167675151&'&'!1"#!!!1!1&'5 0`f   7!167&'!0-9S#3#"1#1516767311#151312765514'&#!16751!1!!!1!1&'&'16767 0"""  """0  p@17161171716171611''11171611''11''1'111''11&'511'&7715111'&7711'&771'1&76171'11'&771'1&761'1&761151'1&76151679B% % NBBN% %B99B% %NBBN% %B9.9M'M  &&  N&L9..9L&N  &&  N&L9. 7HVdr731'1&##1"7'33#11#1&'&'1#1&'673371673133127651!5&'516735&'516735&'5167^$$$8"">%^  PPP777""07g0 0@@#=Uh!!!1#1'1&#"1'1&#"1#1&'51675!1676751&'&'!1&'1!167&'!1&'&'54'11&#"32765``g 4  E@`0'&:@%   p P ^:&'%  $@I3#31!1&'&'1676733676731!1671&'#11##&'51#767&'((((  XX@0@5W"'11&'&54767632#116767654'&'&'65&'#1514'&##1"1#1132779////99////9F::$""$::FF::$""$::Fy:   :kk117711117711!"<=CC=<"!!"<=CC=<"! ` ` cc5W7471167632#"'&'&5!&'11&'&#"327676736751312765514'&##151&'"10117711117711!"<=CC=<"!!"<=CC=<"! ` ` cc9////99////9F::$""$::FF::$""$::Fy:   :kk5W%11#"'&'&54767632!113276767&'&'&#"%&#1#1"133112771654''1177111177110!"<=CC=<"!!"<=CC=<"!' ` ` cc9////99////9F::$""$::FF::$""$::Fy:   :kk5W211#"'&'&5476763671167654'&'&'31133127655131674''1&#"9////99////9F::$""$::FF::$""$::Fy:   :kk1177111177110!"<=CC=<"!!"<=CC=<"!' ` ` cc 3'71#731'#3!17%3#3'1#"'1&771633121WWWXHHH92I8  p p x]]]]MMMM}0MM( @3Ni111!1676751&'&'!671167!11!1&'&'471167632#"'&'&571#13367&'#151&'#1p`p@PP0@P)J1!1671&'!671167!11!1&'&'6171611''11'&771'1&7@@////////p@@O////////@QZt131514'&'&'67676767671771131516767&'&'&'67&'#77311#7#3#133127654''1&'h 0  B:  0 8k      -.6!  *%% B:'-  !6.-  0 P4   4AJb&'1#1311#1131'1&567331317165&'&'#1513167&'#153#31!17%&'!113!127654''  64> >46     .  ( }  } ( h 4   4KTnw#3#1111771611#167&''1&'5147#1&54763311#17165&'&'7!1'1!%'#!1"'&5477167!1&'67nnn  2 26 2  vP651'(<6<   )    [  $ $' "([ 56P <(' 444   4@ 4=U&'&767#3#1#1'1##1#171#1&'67&'67673#3'1#171##1"'&54771673#$$##$$# 0 ## 0 ""33""    ())))xPPPP)3""""3) P4   4 ENf676'&''#"'&131'1676767131716'&#"'&'&'&'&'3#31!17%&'!113!127654''  _  ^7S#::# S7^   **    . `  ** ## 4   4 HQi{511#171'1&'514763!12111#1'1&7716551#11&'51#11&'51#!!!'1#1%1#!1"'&5477167!'&'51476321#P3  1 ) 0 ) 0  3@@@        pppp']Ux xU]'p P4   4`0 0!11!%#3#1113!51151#``00000``00`000Obu7&676'&56767"'11323271167230167673676767&'&'&'72711654'&#"374'11&#"327652711654'&#"3   $88__8888_0( #08H:9"""":9HH9:""/v     P  ? (1>0//0>>0/'  //::////:E4%        5Pct%4'11&'&#"3276765!671167632#"'&'&'1167676&'&'&76'6711632#"'&''&7632'&#"1177111177110!"<=CC=<"!!"<=CC=<"!   (( "       9////99////9F::$""$::FF::$""$::F>  n    5Jg211#"'&'&5476763671167654'&'&'76'&'&'7677'27116545176''1&1374'716'&1771327679////99////9F::$""$::FF::$""$::FH     `   `   1177111177110!"<=CC=<"!!"<=CC=<"!v    z          5Bc%4'11&'&#"3276765!671167632#"'&'&'&'&767'6171611''11'&771'1&736171611''11'&771'1&71177111177110!"<=CC=<"!!"<=CC=<"!$$$$9////99////9F::$""$::FF::$""$::F    5>GS`mz%11#"'&'&54767632116767654'&'&'67&'7&'673167&'#'&'&767676'&'7676'&'3&'&767117711117711F::$""$::FF::$""$::F`   ----'((''(('9////99////9!"<=CC=<"!!"<=CC=<"!p'((''(('P  ----5L_r%4'11&'&#"3276765!671167632#"'&'&''11&767632'&#"'6711632#"'&'7211#"'&'67631177111177110!"<=CC=<"!!"<=CC=<"!     "(("&      9////99////9F::$""$::FF::$""$::F       5?HQ\r"1132767654'&'&#11#"'&'&'67676323151#3#351#1355#11333#367&'#1'3#3#1&'&'6767'6711632#"'&'7211#"'&'67639////99////9!"<=CC=<"!!"<=CC=<"!( `       117711117711F::$""$::FF::$""$::F@000000000PP     5L_r%4'11&'&#"3276765!671167632#"'&'&'611#"'&'&76327'6711632#"'&'7211#"'&'67631177111177110!"<=CC=<"!!"<=CC=<"!^ && ,22,      9////99////9F::$""$::FF::$""$::F4   d     5L_r%4'11&'&#"3276765!671167632#"'&'&'611#"'&'&76327'11&'&54767&'11&547671177111177110!"<=CC=<"!!"<=CC=<"!^ && ,22,~   `  9////99////9F::$""$::FF::$""$::F4   t@5L%4'11&'&#"3276765!671167632#"'&'&'611#"'&'&76327'11111#14101&'&'&'010#1111111'&56767'1113111#14101&'&'&'010#1111111'&56767'111111177111177110!"<=CC=<"!!"<=CC=<"!^ && ,22,9////99////9F::$""$::FF::$""$::F4   O    Md671165&'&'&01327'&'6767674'#"'&'&'6767&567676'11&#"'&32767'1111111765&'&'7111111314101676767010311311111765&'&'711111131410167676701031111    R=NH9:"""":9HH9:""  ;;XX;;;;XJ7 ,22, &&B    U("":9HH9:"""":9H6/-7X;;;;XX;;,    l    5Li%4'11&'&#"3276765!671167632#"'&'&'611#"'&'&76327'111''1&'&7676171676'7161''1&76761177111177110!"<=CC=<"!!"<=CC=<"!^ && ,22,A  { A 9////99////9F::$""$::FF::$""$::F4    A  A 5Lf%4'11&'&#"3276765!671167632#"'&'&'611#"'&'&76327''1'&54771'1&547611''1&5477161177111177110!"<=CC=<"!!"<=CC=<"!^ && ,22,YYYY$$$$ZZ9////99////9F::$""$::FF::$""$::F4   000 0++ ++0 0/H_y63112"5676767116&&76767'6767767676'6763112'&5&767677761'&5'1'1"'&76771121'&771676&5114767672#"'   ASTK?HH75)) >) >ASTK?HG85)i  """ &#$aaa 88a       => ))67HH?KTSA;KTSA> )(67HH?] """  #$&& a89 bf   5]211#"'&'&5476763671167654'&'&'&#"11117711765'1716'&''1'3&#"11117711765'1716'&''1'#"'&327676'&9////99////9F::$""$::FF::$""$::FI&""&&""&,22, && 1177111177110!"<=CC=<"!!"<=CC=<"!{"%&""%&"   7Rs%&'&'676767676711&6767&'&&'&''11&'&54767676721!r#0105&'&'432''11#"'&'&763276'111#14101&'&'&'010#1111111'&56767'11111311111#14101&'&'&'010#1111111'&56767'111 !<11 4     4 11>F::$""$::FF::$""$::FP     %%% %*E`z%&'11&'&551&'&7667616767!671167632#"'&'&'74711611'&54771'1&5%61111''1&547755&'#1#"'&'#116767;;XX;;5% 11 *  * 11>F::$""$::FF::$""$::Fc0 0++ ++0 0%%% %(CT]jw%6551676'&#"'&1&'&'6767671167654'&'&'276'&#"76767&'5&'&767676'&'11&'&'5167313276731\  ,22,  5;;XX;;5\F::$""$::FF::$""$::F`      ----  4     4 11>X;;;;X>11F!"<=CC=<"!!"<=CC=<"!$   H'((''(('% %5L_p%4'11&'&#"3276765!671167632#"'&'&'611#"'&'&76327'6711632#"'&''&7632'&#"1177111177110!"<=CC=<"!!"<=CC=<"!^ && ,22,       9////99////9F::$""$::FF::$""$::F4   d    5%4'11&'&#"3276765!671167632#"'&'&'"'&71111111111030521676767654'&'&'&'0#'11111111111&547111111111111034121676767654'&'&'&'0'01"111111111&7632'6711632#"'&'7211#"'&'67631177111177110!"<=CC=<"!!"<=CC=<"!1          9////99////9F::$""$::FF::$""$::F    J     5&%4'11&'&#"3276765!671167632#"'&'&'"'&71111111111030521676767654'&'&'&'0#41"111111111&547111111111111030521676767654'&'&'&'0#41"111111111&763'11111#14101&'&'&'010#1111111'&56767'1113111#14101&'&'&'010#1111111'&56767'111111177111177110!"<=CC=<"!!"<=CC=<"!1    W9////99////9F::$""$::FF::$""$::F*    E    -%#&'&'6767665&'&'&'27&'''&'&'&'"11111111030210#1"111111111111111111111030210#1"111111111113676767&'&'&'676767'2711654'&#"37276'&#"767&'11&1771676'&'&1'S&-X;;;;XX;; "":9HH9:"""":9H5/+    x       b U ;;XX;;;;X"(,H9:"""":9HH9:""      L      Y 5J]p%4'11&'&#"3276765!671167632#"'&'&'&71163312&'&'76711632#"'&'7211#"'&'67631177111177110!"<=CC=<"!!"<=CC=<"! ""..""       9////99////9F::$""$::FF::$""$::F:  **z     5J%4'11&'&#"3276765!671167632#"'&'&'&71163312&'&'711111#14101&'&'&'010#1111111'&56767'1113111#14101&'&'&'010#1111111'&56767'111111177111177110!"<=CC=<"!!"<=CC=<"! "".."" W9////99////9F::$""$::FF::$""$::F:  **U    5Jd}%4'11&'&#"3276765!671167632#"'&'&'&71163312&'&'7'1'&54771'1&547611''1&5477161177111177110!"<=CC=<"!!"<=CC=<"! "".."" YYYY$$$$ZZ9////99////9F::$""$::FF::$""$::F:  **000 0++ ++0 05J]n%4'11&'&#"3276765!671167632#"'&'&'&71163312&'&'76711632#"'&''&7632'&#"1177111177110!"<=CC=<"!!"<=CC=<"! ""..""        9////99////9F::$""$::FF::$""$::F:  **z    5H["1132767654'&'&#11#"'&'&'6767632%6711632#"'&'7211#"'&'67639////99////9!"<=CC=<"!!"<=CC=<"!      117711117711F::$""$::FF::$""$::F0     5Ban211#"'&'&5476763671167654'&'&''3167&'#1'&'11&'6701327654501676'&'7&'11&'67327654501676'&'9////99////9F::$""$::FF::$""$::FX    ----    ----1177111177110!"<=CC=<"!!"<=CC=<"!h    '((''(('     '((''(('%@Qbx%55&'1#&'51&'1&'&56767671167654'&'&'276'&#"76763276'&#"75676751&'&',44,;;XX;;F::$""$::FF::$""$::F`        v    *vvvv&&-X;;;;X-&&j!"<=CC=<"!!"<=CC=<"!$    Z      1FSfy7"'11&'&'6767"''113276767&'&'&#"1132767&'&'&776'&'71132767&'&#"271167&'&#"32;;XX;;;;X+%!"<=CC=<"!!"<=CC=<"!    /! .B0      8QX;;;;XX;;F::$""$::FF::$""$::Fq  A *`     5P%4'11&'&#"3276765!671167632#"'&'&'1167676&'&'&76711111#14101&'&'&'010#1111111'&56767'1113111#14101&'&'&'010#1111111'&56767'111111177111177110!"<=CC=<"!!"<=CC=<"!   (( (9////99////9F::$""$::FF::$""$::F>  Y    +';&'1111771176''1716'&''1'1111'1&#6D o o D5 vVi   n II n 22l U x85H[h%4'11&'&#"3276765!671167632#"'&'&'7211#"'&'67636711632#"'&'&'&7671177111177110!"<=CC=<"!!"<=CC=<"!      0$$$$9////99////9F::$""$::FF::$""$::FP     P  5Nh%4'11&'&#"3276765!671167632#"'&'&'67''1&#"1'&567''1'&54771'1&547611''1&5477161177111177110!"<=CC=<"!!"<=CC=<"!11"&&"*YYYY$$$$ZZ9////99////9F::$""$::FF::$""$::F@##000 0++ ++0 0PI!j2 , I 4 6  B 6 d+ 0 XI . & https://fontawesome.comVersion 773.01171875 (Font Awesome version: 6.5.1)RegularCopyright (c) Font AwesomeFont Awesome 6 Free Regular-6.5.1Font Awesome 6 Free RegularThe web's most popular icon set and toolkit.FontAwesome6Free-RegularFont Awesome 6 Freehttps://fontawesome.comVersion 773.01171875 (Font Awesome version: 6.5.1)RegularCopyright (c) Font AwesomeFont Awesome 6 Free Regular-6.5.1Font Awesome 6 Free RegularThe web's most popular icon set and toolkit.FontAwesome6Free-RegularFont Awesome 6 Free      "# !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ exclamationhashtag dollar-sign0123456789 less-thanequals greater-thanabcdefghijklmnopqrstuvwxyz folder-closednotdefheartstaruserclockrectangle-listflagbookmarkimage pen-to-square circle-xmark circle-checkcircle-questioneye eye-slash calendar-dayscommentfolder folder-open chart-barcomments star-halflemon credit-card hard-drivehand-point-righthand-point-left hand-point-uphand-point-downcopy floppy-disksquareenvelopepaste lightbulbbellhospital square-pluscircle face-smile face-frownface-mehkeyboardcalendar circle-play square-minus square-checkshare-from-squarecompasssquare-caret-downsquare-caret-upsquare-caret-rightfile file-lines thumbs-up thumbs-downsunmoonsquare-caret-left circle-dotbuildingfile-pdf file-word file-excelfile-powerpoint file-image file-zipper file-audio file-video file-code life-ring paper-planefutbol newspaper bell-slash copyrightclosed-captioning object-groupobject-ungroup note-stickyclonehourglass-half hourglasshand-back-fisthand hand-scissors hand-lizard hand-spock hand-pointer hand-peace registered calendar-pluscalendar-minuscalendar-xmarkcalendar-checkmapmessage circle-pause circle-stop font-awesome handshake envelope-open address-book address-card circle-userid-badgeid-cardwindow-maximizewindow-minimizewindow-restore snowflake trash-canimages clipboard circle-down circle-left circle-right circle-upgem money-bill-1rectangle-xmark chess-bishop chess-king chess-knight chess-pawn chess-queen chess-rook square-full comment-dotsface-smile-wink face-angry face-dizzy face-flushedface-frown-open face-grimace face-grinface-grin-wideface-grin-beamface-grin-beam-sweatface-grin-heartsface-grin-squintface-grin-squint-tearsface-grin-starsface-grin-tearsface-grin-tongueface-grin-tongue-squintface-grin-tongue-winkface-grin-wink face-kissface-kiss-beamface-kiss-wink-heart face-laughface-laugh-beamface-laugh-squintface-laugh-winkface-meh-blankface-rolling-eyes face-sad-cry face-sad-tearface-smile-beamstar-half-stroke face-surprise face-tiredmkdocs-1.6.1/mkdocs/themes/mkdocs/webfonts/fa-brands-400.woff20000664000175000017500000034517414664334534023672 0ustar carstencarstenwOF2| =16$ `T~ʋ|ːX %q<֟eDi{TUUo ݫ o_bَ0؅^ vju/ea"dT*O.o 7`׉/꼚"e#ɕ2?` C+8U.K "G#Dv6-;J- X PYɝN`KGӏ ^GЛ<$KY5ˈl_U3]Y=;Z?$+Is2/!#}#"#3"WEv4]Mʒ- R| xG\ml)ml6@B`ؑK$ );>Zk2U{uJmQom DA̰'#$?yac Ĝd2^e+pybm@%K`2`w-Qc ߵ[|עok/q:aѮR!4zdIoo26.Bm)%nKd i/N>ۙO *ZS!Q`R}NT넦'cĘo9AЮ6Yh%Jt1Ζ d/ 5H^jy\]omv,Gc;B:~ \]V?;Sr [1 0sO~H%JH2gw-X7UW\#~M|_b~0 c qfiN A][q= !m|(m|4+h;.߼f[݆]uѶq4>)tqv֦~DnJ}oOt;p+%yJSN?iHEdBd##:-6Ee ӮGˡg>)-4b߲,f Df9@C9H}<7ǹ \zC7i\2_.j]v"nh@v&?n6SK}v!ͱө5H]~F0؊}1h<m6S煸:o8y dt@B=_'vbOŴZmA_&r]s9j %NY`I/0}y Yp@\@%=>Aa !0p#a10xaRRZhSm֨jjQ Vj{u:ߙ<ɞ#C\9QMSJH9rO լZVMuzfV6޸0Ǫ;a?pQ8 Kp5M9c)RI*M:5nԓ0Ah&-D{t]H_I.<|^x#o|uw?7N?3s*gI?&d.G擥dSJ"5GERzyRߪ'3UXnin~~l29c`0N+4<<<[={==/=NrA( %*^ۿ)mS2eDᔻZъiU4;np|]*q8 GDtl\@?mĭOe|;E)©$ TS7Ai()ٴVZKhtyMo ܅γx>/˧:|C~/;YuΒ& #d#)/Yj|FWc_}8f2.f$yzjҫzy?yy0gs;GRg9gomR[ [zzzʚעYYV[ZZY*X[X YKGIR*:կ(v%*1J(J^)2"Y8KL<7UqI\fQ,S1YL01T }DoAЇ'Xz\\Sx5<G@? wp+ps.\8Na_vaN(:@OcmeA^Z|6d3?3722f>ܓ+3(S=S-N>^^^nn8Qj]jyjHo}¥ܼ;y8y09Mn-t=w&9Nʛ޾TX5`-,;Xu`=:X6 `#%l bft96l-[bVv564i@qLX"M&Nլn/%ȕ\- #W}j/Ёܰ:?N&䶐;rG g ZFpm#^f\_`,oY`o[`<nF;LZdn<΍'1p]"!LUl-x[oپ|ٗK},’JPX6Fq (dT8 p~npWX W+,t_+QSNAI@QvOmG݂ Szcg[[rA|A)Kz/{˴ -tsmBStDHw -NXН+tgѝGwFwQ)p<84g pG :; ?8{*#ppv~vKg8}^@Jgo[@g\@{6+T* CͶUdDMjJ4Ruq#Ԥ ӤS񶊕RI+lȨ}`I*uI=Seh-E4vPӉSUFD.7MR _Z=n^UF5Ej A ߯1'Khi JE/ 8z9\scRfr.n45q*eä%M hmi0;Bh=v$nSTf(H4&dT^XBl!DbOm!lƦ8`K~/=1g pBE½MJ=>Ո8XJ~jس)4:fZ\8ς]\{4Jwc_ hyq7pMW^2("PŪMM;TSvLu&qz`׮=>K$) rXwϢi$#>'i *e0ߗN$qpAFXi!4F X},|+IlHW&VE2f~vvZxY+:3¹vz۟oc$Fenwp:cʎ`6!8PED2 )u:<ؙfg!k&ԙ<'$Eoۈvcއך0<{ LO<<T9: |s]s2l:Y,+&U(T8 %0^l_msaV]vM>?=rM]7m CM'^<aa(,pm0?;KysÉp8X4c^;K8A!9?0*]sF߫Xx:^mm-?X/nil aRrU卽} 1f=;c bB^gB3^f YR!Zl/l![[4p0hlf~wճ݀XI`2{Q  '6f7C]nQo@?9 oT@u=)IOwnm!׵u] 6"/]\wk`+)Ȗndct^HwU2->:cOa2L F#7<7[n|_,(xf 5GhS4Cwc1,o፦U?M/G8ۍsiPv}L1nqohpX0ͫM: !o=dg/jO2q4bY\8>c4e<${q: `lطxM) /~yʧ=#U o}Eruٯ%1?0*ggÒ$_[ 8·!TMa糥x0,!=ϑ ,M,O˗w(^.FD =G6 Ҥ.7$O:( NgmNܹ<Q'Y]M_ȲŅ,Pa'HQdgn k;lp8 !Qaad28ܤY2(y/ LjRc(iR qd!:J z[dK;B0 ѹopl{On {M{o ὰb tr)r?\ZʅgMֵe6` y O"o)޼LNv[F9;৸ DnH(Q06B F%x~jKBQ]5CktUZ |LAbbϿxn6~q #.# cFlVq2T_XT#YD;BN44I,#o)9i:Y\JuIAT,$b@ح11S|$ J^<. ?^˲d~AF.N 7Q|G^l8mpcG-Ey#0%2~dzdz@Ns89ĎȝvJ iFټ EPy֕RI&K.^"ţ:A1saא7UI&v}Bzu꯯_5BVVɁ w(hAah Rh(2N#l6ۭ ou:8&c1eϫke9kqxSFw= Nҭ-4aD-R jj@mk~k'8}_ Y>(TOQBT.%R |PIS <<<#C Ƒ&GcKȮo>|$x[/|2.1> ]U9@'_jaNpYRo092yYiGmQl;BÕf[iIslk¶v'LSr?śkMNV+Ims:`Xy|| >-l tGSR'j55-F(!NvFuBF )He~=m6LdlP |gY5t2l'q$#F1WtjR\ĵc*8L GWVt#0&PJ]hB[BpF)Z F [q,t;y~e:Z{v)B09gR tnPlzZOO FfSYijeH7QƝwE+;NvȾ+(l+ݗ= z5>\?D3R~Ctw |qEI!r,"/*"zl\L]~9RHQud1靽E|QvPqYeEKc9eynZ-xW\4+@)T BBMj !`c9|iؓЩJ"mxQ຾-DZK'ax%ݠp6 wbq̢b6vوbc}ggmk,`N$E=e\ )z#Ԯ& ,A ʲQŁ" 3-2B B.{vU2&9LN2*k}GΜ9sf~쓶>לN8ʕyu ǣeZOnw:}fڹc'NGLJ;jgi2k>Y0ҧՎ!D9($Ƚ佄TD[LiU^6:~VpT+-Ex¼Rd▻Ó4h2O7呬d%(2I>qyRyqwګzI^7;0p?B0\H Fu5\3 'FYv_ƖaaE~4S}l,3 -; ; 6Ԯ6K> 6;~w1i]^QhɊrPˡ|Unv[a35( ԕn\ [^2*i94-o3tr&8*ݴLbx9-No?cXZ.;I'4U9IeZ&IUiZi*gE,ʷ[MfC/0-32ˋnݴL*(ca.B+,4[N$-*rBU1R%EZIrMR1.RjP\lŔKDf j:y:РOo?$` "k QRјR QRCR21q) RuPc4!^qH |/@oyČfj+Lz0f!)E%땖8 v&x[T48c54OIek0lbupq~03 8]cp~qJ}h@S ws6wLY඾YH_o"M?QoJ3? cWh:hߙi/;CPpupȘH C ln[uꪖV,yծ/w2 _Iu oBhPԧ":1FK XG~9-yHڭq9g}ki-I\qӤ:mhwlu5-(&f;QTKP*°Msڎ$dOj;$jC4)\Yc>oo>Ɛ]&S PegsWfO 4+C vx*Ќ@,Wa&|r/0+2uD:jt̴J = }H>KKi]# "^i/ri4)u't(Bt Knyyl` d$#EPx(I#?=?6E@ *{jw;vw8vKؼ$뻋awZ5]]\$k:!e8:LRbQnKUǪHscզ]0]P;=gq)uY4QFd*DW"W_+_f>y:"G|:"_EDĿޘAAY#KIF8ʽy^I˦IlT&Y  s-7'+/8Np0nn' ~>4yYVh|a/|_~o_<]|'~~74<=r!|^352G#fVYc` xl2/ fqіf̬b2" #5}1)Fe RxRAGJdeY`dOiwڝSü4ͼ }.`,n4bЁ)0'9;A+'i(2 #pBdXt>r \[~PlhMh xڷ1l%rcP߿ݱBgZ " Oa 4c|}Ǝl'I^Hkm_r6r ޓ{'wȳKk{RqXpqY+ĴL@r^R9oF ]8J+*/LJ$]Ty͊Ϗd?ݟH-\y'U]"^T Pb8Fw^ߑRݯ;$_NjvwkE8NQ<_ H:׭#SP nZå\/xm~cci 9Xzbq|VT?:52(4dlg{{gk.c?3OlnDR&SJQJ8RX^opK&f^acCJr\$7&ʦYQ[ _J|~R\2-/'U˲'XIZv|V`ΠR8V紘&żlٗFQoNֆpi!"?j[m;͚=u<)t}!끛6 6a<ϟ|G^t`Ar=Lϵ,QS<ײ,,Ď^sãZJ{OoRoqAI'3zpܹs^~7{o= 7ٳ|^O'DBKMC "/&_$MH52/RȘ-gq^>i&bRXYs89#]z? K!ZVI:em,Q562tmD sg"˹?9zd)[qMCL-ud[RڦHt|[>!zp.4PD4f0L-FzQ4FQ0<COpMEq]0AR!C%IQd-JѥA-:,(RTGa8D3Z{}<I`|h0({ 5Zyy]A+aCkDmZIv44!LU*C)"4U B{F,19FΒ+ fEeȫ\TrQUg2+"N Sy8t*q6}jIqcx6,g%ͦ0RnRKn*|ٸ䕬K<4:3lR)5e] M`Ai4W9$ӧf6rV9 U>juuÝiatV9D*EZ 1%7_1Ɨ?]|f]U(ϙeZ]]v6$„#2'גxްRܼ2-\fK|2/ϬN9"g)[n]Ш,Ro4+ڶۮtTR/chm8?Z6 8Ưqp 5~=nzѬCC9IOZk~146okS;XkpA"/%o"!ddYZ>.Ve74YK3C (m2-'1¼I닲,ԙ;FfD+R51 ͹НF2~L)A f UՑT 8[流V>;Xlue 0n/|R|Հ'AnL)Q E@D!yd۔C C0um4ꛇ{ McSfc}a ŀTm Uf\oL;ZB(!{߂=BbN.R-|4 > D@+f=ʘXnQٴLHJ>I׽3:5i\tjn^\ػrZ7HĽr]/Oh}m &}5W)umroޛ\{{`\uy knm?q/btܾ,iQZBn& AkJ3UrZKtsW3աܤK W.-Cr)[H-^".*jel %'9r$deoǣ7̿`7z^  .eoxG~/ɔ\M.2 %GYAk_Tr_ 7Uj@ IUvk9l`s](,:]VW,˛^1Y]`n^6 8?|{Zǯ:Y@{4h6xKM#Gx\k^x< 0Cx#~dZCB{˽_W}IeaYq)KY S(ʢ@_+"CKZ#JNUYTie"~LRš%^CשaX'O؆AkWR՚?J9r}q߳W\~K~(^Ң+˳]kc{s{p'$߅: I)($4&iPؠ|eKmTٽ4Qa.vz^"#Y fQ2.9#bZA6(,y1F~\IC|>+#Pp̯x,Vv[@_U|j2-UC\mXr,e7=Lci)ןJ!fv UK "pR@ TROJNklU~e(DOz0xag2:}Ζֽ#WaN&ԑ0Fe~~a-!hJWav* RY Pr|U# ^wý۽6> J%F&8[o==HS<!7HS i-/׋O%@ >S@BE &(r g_):ħ4rN)ݦ#lӧ2C'㔱ÍEgf[0+zrF#M9cOdCϑ\O,x6Qr"Ɠ_YQ!^(7 oA?8 S mfsb Jie#:UV<4[MpΡ#;;@}M['oXJ2 nGFOWW~ـGzTb).{_2Bi "qn.;kwi$̯lU4]6FJ+;,}sm*sj?a]=ڽ~mz5=xt;Ͷtc+lcyjxOSuwΡ.S7v8 yˇ}߼9MLZiⲩ2Kj6} `"ǼVeR7%rIS7XMTe9 z۴߿5~79f!f!$N ].:Ϭ,#6$L"B2(ar]%h4B8ߩ:W]ۂzm2A >`Ƨ7eۖ@Ӫ 6YlU @{1j׫tY5W} "a~Ӏ6BI 3 o],o ,'UOj7Y,,//^HDv}mʥs!(8\]կ/pzb/>{otq9Jź}4`2!ElyݲU֫|UXC]~TM[IܴVu>Ʃm}ߤtv u`G#K!cv6"C&vKws7O9Sbx9m& cӬ4ڨv„ͬ~t-ס'ctO>q8{]'v͡i{Dojۜb:O8>qƮbFvq5;i[šnt:bqGolސ$x:[021:7|:)a:͕U_;;]2bLc%11Z]jMC<ņ"~.ij9.t$Lm3wRu1ssӶ!KXjy}L'x+;Ĉ/357vXPjL96mKRTd,bY2Su*_̑Z# 0Fl;sMm6t]2^V%r月$$ "֥ L 5?L2*Ǻu fX(3)VkyL(tES7uH G:J9gl% W&!X^W} 3^6`JL`YJrf$D?I _U.vA`fjE6@49Rz0O]IFpK6'FUXg p;&kwʢQ>g& [f#,Y-ffC[yjDIQ*%M3PqQ4 Vosa<=W19>K8r$ / 2ʆ  @Dw/N 5î(jRlVQp3y$ț VF+>bFiʀ%vW8вB {zyeSP]駥{OBmp$IK<`[MK啿蘚tp:= US:Zfk_t) 2!;qҌ (]x1-j{%Jpg_`mF=3gVҞl@68|?^`"PW<pBJk[(ItSs\5PL3Щr4طXNwK; X}_zշl?~;ԧ>L ?Kw''B4~  l*˜9fSZfe=}_;xk{~wҟ7u/@ƗSȇȧ!F hxQ (VBxQS"OҴYn,X~|2e6o2*"xy6 c ) 0R8%.VŢn'rn&'c!e- B+plG)ApeUF]i°Vt-!hຊ2Ff;$n6qr (Jݮ(0 (FVRVRy4- n(5 ʴllQ~پVsMPn=6LRQ@i%է^N"%[xxƃeQ&8i1`,XXܔq:6aʼnaVvliR!r/.i.B IK2؅yQ|s qcH,|VYJY2nz&xz^k4 ίhy'5of٣(ηgE8[ڼzI܏7{pbl8wX< eJ5cX+Yٮ`嫶"Ë?.P/ HBa_%WqI`]]^Vk%PVuyEKf`&Xx|x,)Ţ=էT DdxZ0L'=_ar{dE_^ÿ&aIw=W@5iVv&moߘɛ9',u{r:=k? ,>.o#{BMHFEȒ`t| lϟr4H_- ~kxM~"\@>d֞c%mv^y62%o"3:bA<\z量y8+c!ZcjvOh۪KsBkYSl*V0Ԉ#3 1,`rW>QѩS8ztC)b}>Nkc%&ZZš"յZ4UC5Sa{zJUUGZ 4ezsq40Mxi>˪g0ueTLIĔBJ\RW % fcίrY!Sr;C8O)ijm\Y(x,7KS "Koۆgy$c"S. ֦)C"xƂxe4><{GSB[#"I.gŲ,UezLU-ry?{~wGO/H0 0e!Fg&HQXQ((r ԊFW16[̞Y)+[56#&$Ux4\ F ` 1X-В| AUaf/̬1`)wb$EaBݙAD8FLA(_Uwp1h K]LG@̒=bMNvYn>#\pNSe>Nkp mƜFf}Q竐?J2+ S6IzK@ XcdݮrI\`8KUc[[z` !49B~HֹeDdz!]ty& ^.b])0M|Nuꅈ;S{4O~fQi17We6AKH))XyLEUYU"|΋U$rQ2/'JQ2joK/2ǿhH2)ǖ9(sy!$)VUQ$`s7!5c !vQSD6 QL˲:1߿r~VSA?2qaيô,8xwE2i7O&f""cBȒ;ӣR鉇ozyѾrjvVJw%|=MSDG9tsp^k%>!DMڅۅe{S[,k'Bcӹ{\) OTv{R79jpx<.$BZeYvSy1NG6vN' [[(rs }Jm;JgUv*'5|smhl+B %)@F9>nV Y&rƂ)jd}pEWp|}0c|eVX^O_7x%"iN뺟kCw7 srGORMAN\ i>KD^pldi&2Kp)оސ]cǎyx7Lq1^Wzya//نֆ lC//`o{FyC?hۆ &dIGȣu>E<)E2 q0UWiɳ&i9 DIq2MG(2QO'U1NH 9($s> v; tNyIg @ Iڒ*ױV`2s#IIyX,@)ԡQQ-* m@Xp8˰Sqz*Ѳ,Ak-9-F45\k3HFTsjs`sZ*c]a R@4̖]cD4`oH1H@d::Q$5{8mW  C=JSb:llw]m']X+ml@uV@ ڵq,k`3m}_ i}|ȃ-EU"'|q]=r )n<~< ΩS~Ĭ߆׉">i"o '!A@~x  1Eh_@!WPe RyfT2c7vMJ;V$4@/-Q6V)^_Cio& cGCfˢ3j!nCk={M_FmyQN}Vk[/3G.Euʗsv5ȸQ008c ښ\Hj2돭!dپu%R/ӳ48`h?s!qBˆNwlv)SV:P>Et]φ hn3bO}\h-w%@#SŨ`DARiq3./AhFAm۸.zcdM^NWop@fZڟ'`χK IdCaލTxa\?v,B9i\č0l(h^7vjgg <O C`0 Vz\LZB|+$Y~[ܢ;@kŋRh4 MM/^Di;@'D Upݴ9M]fwj踀O q y!U$RȪԊG=^W93} ƑLlYj3X (c9MP+Hi1jN|}}4bXA^\-z_2V`p$B$iY`0YPkPkAAO'#òfd=t I嘦WO'A2P V'TJ&zA)\?G /#`ⳒZRo{3W܄G֘g_CkH?rܛ&$ iU}F3ZPH?0c%IeP}1w./,-w5{:\$\Rɾש]*ᷢsׅ/{pc7pƽbOrC!dmY@ic,.']1d9N|0?yQФ&v~†faX]ainEÈ97v((#I00AaXrq&voDׂ]-\w= (ϢO?~xg+g fnpϿ?ChZͦe"!H\BKd?9JE^ r4:vNrb|<-%֨6S>FodN}ӭiMG槙QR?G>r9{$L ]\U(kJV,C_ND~k~SGmv`;GM=nEqfK ^c}G?Z"P}o*eWe.Ȧsմ2cK1?F6iz 745^O=LY^9{wl{ghJZpͨXDp.VF G(Z#݉RcHAͽ$L.ezq VGJJeb ?|*Oy ess~Uw1{'cprPcZ~Y^ra?@7DP' 9F0Uuv瑖ӟ=zUG ,b;ᄃܞO:A"~wW;cf8ҽ6b!L'lz&t|ևp3 \L ~B;nn]Hlq9'cavҤ앰0^ϲ5[ap^/DŽehZo>f0?=}NkiQqT B9*懾B\W06-!fBL3f(=/ v;ĺfG3g{R*`+I)Ge{O2"G UP >nD%H 5 G`} yIR^Ǯ+6}!Ģ媳s./N;MP 0N툏֣Pa85!=xY6#$d=@Zq`KKI>qYF.h|ݭ`_+_ P.}x!xTIN<˻y6:"- J_Hx1q@0)R!hy`w@IHGB,#?I;Ο?9777s #{__P1i-BhZg";3dJ8&dr9.EL>4!Fivk \0'qcKIL˺E(a!y1 ss&͋*h@rGiT.dni2yjSh4meݖR\E)%xT}Pӌ.H\I(20 gN4OpDx(I*y Yy!?X H)۶64PyR&'rN SQFv҆囶hn}G9V6@)5Q)*!s ,JR CK@pLpmDXZ'I]q]_$c 2"aRPiqƘRۊsl @JC% JiqMӐ0 Ιmg3nq$" ҅=h*=ݶ<4 Ϭ+iFi:~nǔfb~ϯ7rj1bS̜,*3 .#6<Řy^ 4Mm8Hh@a(rA(-L#Ju RPpΘFtm05hm~v-M{Fc#RF'تմԞv,K-R*Lc?µSD%Ji[/E\p@HefHIrB D J#cp[]=dҏMH醖d0[m`eG e vS~3NoݿY뎋]/A=`0pݺmh\@F#QeJnmy~k\=NrMRVA0+N1X Y!|e"-!87 u(u~ϲ,j?#/<t\ ,sTg{}ض WHo:z]Ǐ{\~ڭbe<^)ZmMqBΰ(E]nq_ wr#*y(+L4`¥vU6vIakW`civet6\l@9+mBmðY C{nFՎM(Q с_|_=꬜dzzeeb0׍fsTZ n//jŁ\ם^B{.4ɀPV(2-e9-THw<}ܷo=w=2ڱ/>xow7 k5l/??؟#:r!Y)݌+<w>K$}98z|{uGNu[}ǎ]ctu Ib/9 w+; DEm5͋|>g|Kŧ ]%bNܴD ܗi"ߥ9*o/N>SN`o`LY]eYVY&m>[sx|xL{_}2>k+ŚV+ݤmk c{I xmq jҪ̶O Z/4, Za~=Ye />ՠcSGLTg$t}4 _hrDDNZ9|6y!aOR(V:yiʾ.~ 'SQ'+y)zR'1[տ 4J]&C'H\tuȑUMg41LOcJI:RǠ^RzUc!uy-5L Ivn;q}ˢM0&BMcv 1cN; "gNZ4yj631H7-. ۧ}q^V :㴌hujyhwq&1 R>a}8oy} g"m֖=݉q75؃v'tMc}P2DZꜫ\x*c9x J-O z^3YR'YMkue蕴Lvԩ^>yk2<nwGjFw.pt\#Ph; 9>_N|ƈ4228EB+!U~ʿr@`BX QQpbN|E+{EbmKΒs!!jqLpǣLƣqq^Ri#X/#ϝ;wnۅs^sns]|ŋ.^|tz?_9/e鄄rnsPW>|i+lGFLS33*.7M)M[)itB+q-9W ͙lw9vҙn/L fqvixaAMc4MƔC"rIjjr1ЄEiI d[Rs^Ph- iO4sW>BV~ԲlǔJ#(7t?"Z*Cٶi\H J)![4 dNh zj A y?J?#F~Ǣjw;APs)+BM#B>IPһ˜J J,;³~n._eʕ֎0fyq:YTkHZƘEmʡ`Vj|DZmWB;ujfQmvtBj[f}!ga˲)吧e0ٻ?/_=C.zS̨i'6ABi˲,.P| e"W4⼘o\~&D$ie.0̲iY\((\nް Ӷn`Qa(x~wnj4V\)wvbqeCF`2c F'?mԏQ`4<䇀QM?}h+ ]#ג2ĤOeR\L۝ =E  Mn#$o)*r0Jn:+X 14f6bT^rW.dks]0mS)H+766d$0]4SzXшz-U )eGi7[ yIuқ666 L twcÉl|x.I IM u7rL 7j4lll$Ia뺛y~+WBFv*z""aq&Rض onn%F3>I !C-87d#1q^H'dܜέjVl]rΊ v3MqqmZ9+bZ.2_g&}ٳg׳ϟyyuxc=Nw0,;tg|0|)3gAkU-5}wY+B84Ҹ+dw8' ŚE1r3y1!URe#LڠpNi^O!%ԃCxuH(?YYncZThSlom򕕕ZdW9r >>A5/^>4^Zk:&0ޫق+7SyUz_c_1V( NzI26DaGPv0Vw9yq4J?2fFfVyE.SvJANi)̥7e"o=ðщh+E5Nx}gݮ(Z( {\fQ،5 Qd,'5ϋfcuC]I], V*H+e q]!ī h4݃}6`Gù g8U=ҸLE[3617Bs:YukcB8VAJ)A./GzQϯ0lОjwZNn<\yfخÅ| 0RZ߿G1Fk(w:akvy~n[]!gE^6ÁY Mb!/F6AlbxZFg \@0Ç. Ad,@/5Jpbn,ϰ&grS]f;pBKk F75'UԳ^]‰l J@^,2+N崌a~ޠ.^|Y|_6.Pů2~V!2Kp5ɀL1wv~*yy||[dBYF`^U9IJLH3&"-8F8E@|SjK]xMc"EJpL[Np~-0*_B I AG(Axq Co* 把P^i**p$Q!\j:yFN8n6ʝ$FiFߚfi;r8Wԩ͍#Q^^__k!Q{krٴ!DKH;NdLr\Kn" 5[Lx)A崌_&y<- '?\{~W~O{9{~J}PX44?h{Oȹ ($jt*IVM* `;,À 10]ڱe۔F~nθm.0DX;d:8 p8NRvCh=q N04Ѩ#y1A}k8D8.} vK^A>@H3ǚDyARi d(Ae%)3/EEaur1Mt "g,hb*5UMmI1  UFtQqfrMT(|x%0>q+i]4ۛϏi(3[[[[g- Ņ*H1: jp0N8=00"o4M)ƃ Jq 8m5!3Nf+F)X @yi3kk[C@j@Crá% ba*YںoMpWu}+#G_lľ\1ؖD@J}IuPO^yPQGGsŵ^{[a? _pgBaUx%|$'ɵ䞜,)GU&R}AG4 R{Q(ߑښ7Aa*auCK``;UP0 dO 0a q?h.Je_4?+caNM9gH0osV7pjcF"d->CTHs3lZ G<v2:$`Wy^|j[a1ŋM~}3|߳+:ph 8湧冼Ƌwŋם0k^lAޓ O1r5yQefmwZTMR*CтttNˠ4Ei>XSO7m察2S=9ށ'ۏ9^0;P w[ UiY :ڽ0z+1 3@Rs=:?<q >0iڰ@@_<V*)ǩM>6Кq.|볾[#mg"W >?F/u2q4Jig4de&qBQ9(|\y9+glHI<.DZīōWòLiYeP̠ϦlъGmAnMy>(<.be3!tRܦ-Jf QD W̊E*3%0I4i6%EDb K[T!p.t>tZU@nzXcl>.`gQ&4N^?8Ze[bm-kԃдg (6;O3Mx3Y1w}M4W+ŁլEzX'mHAJQD6Pm*| 2G5LRR M 嶭l6=Tcҡ=֜#50MLJqL)%ݛ'H5@ΩR1\ DJr`Y>BR_ˆmYlmy–0 gm>{?eJ(3M{[E52*Fr|Q.*,.sBu# \tRűv.Dg "i5]_犔J"q_ T4K!z/8b}r(}4,-˄fL3 ȚW1䰋Rlc@f]QlܩSxnyӨAb.]ifL)1Р4eJ;0nAi࣏RʖU1}ϛz wR"ɍTEZGJҠgXΫ\3!Fy$k;_ʟaGY7 !NZkaPn ~+RXYc k.)-۾pp#I FNnNX-嬷aQ@P. `| JE=(nCz= u1f ;1؎cXS8Π`hIW)U#ۆe˜yivZAĭ%:Y%7dL>'fhQƗvj.^hOQ7L~#F[T;]~Vk75dc \!&,{/ hţi *}1A~!E\Uc[2r96J.~ h+䮕؝`wb2LϘBn~5'ѻ]˗/_>VEX[֖?psr |'wcɧwo#N?g 9lBW4w˘wN|D/Qtqׯ9Rxx%{g~_CAWveQ1UUg[[z+e6ރI:[աx/3Fj)u V j!Z_\s57!G=wΧnoo3ޙ\׽`?TeYy-t9qܹ-&cr|K^r `@DXDO/y_s-ww[RJ;':t2y$$,\! "i&qI '!Agi+1ş<V[k> AY<}ܥr ڰ߾le?+!&YaPRȑuBPއ\TIL뵋'OfƸoswkxUNaփ\5;[hL;mÓfy#AY;:kn[&&JBpd%𶩭Vdžd.?`YGXI4y\$%1/}ju͝~nnZ[9Qsp}ά7çӇA9;q`Vn7ɻ nWhX_B̓na&Ԗ?Z EG.!p"ėe2$3rD'd%hE4\vzM96'l1>ֺôleF}mӵvp 1ފv;߶vgYPev:Ydl7F :ϱ8klD#RD5X庯L^ yy!y|6ߓ6DЄ*8 'KP&Ve!7e,v&ͬלrqGy0x 0"!YLanTLp60A:E>'L±.\B}O˪iv_K6G9 b!+vY7v X˧8vc~`ืn]æiTţ-b&c=I)Z gq($hJ) n|vއw{-r 8˿^717|4t`&!F\"}2# luߐ}rYڨ_j$? s7 fi䡇2C5uvimVSg]aA3cwpIIseŔ k˯kpM anvvR!Ӡ;9%x9y0V`pH %rU'hfeYpR ^i$=^~rxmmZMh&24!z+kkΖ?K-63%ןTQ>TA`>*ǣbeH CH[R= :hI -L%|t09;ۄ!{߅K r!M*FΆe 'lp*dk5ϋ< QH2&EqhhEvд4IԚvsLӠ܈h>gg68JNxxZV6l4V+{ZX][X*tt@kh77 JȞu"s|{y.36Զ`)7: &UA# \\.Yޑ2/ ycO&6/,L;އTZu,*up3.(S p~0B@k 뵢Ḗ,&lp.@3>8}~9![~ ,8!7X\s|oR \J*8M!9he(nQ4n6C"F)9it0LHXK7ux|>o9x|l.pʕǽO{㇗O4RBbw(GuM؜@d|q:kWz7h'lku//kgS|k8=;_3G7`@'V<Ďzt,NC؅뮻%]v#??}NBHm~ OeiK%I4`vZx  ?A{X BB,\擫lnȳEHfIђ}j 2,$œ4Ir s@57 X"ep]g Z0L=TsjqΆ ȵQ@TBJd;6i:443r pmggB8b}۔Bf2Cﻮm k/zvN,>6lm an⸀i=bW!L2 /B0neh@w-PM)ILNahV$LnhPδ麎cۊS(8:c<3~ )7~uŸb.0TðŒkCS[rS} A@h3 Ss;m19`Op|q^| )S(pv,Q{̰;ڮ}_ aD}t7Yj7L!c55L0tc_ W+؎Ra_ۉZ06|SR*%q(J!!c$ #rQ$Rr)jzZЂAjHPM|ܶȶm; m{i/ u-I\u/sFnwB`6 ڜ`1fKc (seKQ짂o|} jjql—yj[yA/4`5_Xz!C ywGQ NKB^:>zuAB.BuG.isf* yyr:×]}՛֖Lv-->x*aFѹ6 szEc1 L1\m!c}`AS3 >s0 uIn 25t Й$K_q;)϶u~[5ư{0LNu3fXS1V5lPZf|H$)vȲ,+f\䟒UQJ6E.~sv"gM`{'xWXkCu_(}}3e+ϼ}ݥI34PYUS 3TUaRUT Ƙ IiT* :5as\lt&2x$`QEY$YCSST͠2UՀQEEĂ⽌|-Wp#N`:ombt;K7m?P}tR RzRHdڕ&rͪV,I(aITոXgQTV"׬JTjpK&)J}ʽ<݋ uev#DI2H,@R(zx4 (r4U|.<[dFv]?ϲ5 v˞,Q}kf+*KlC(5MEBK]"g^nPN?i: Z֚]/'O? ]IG^alTQ/Qoԋ(Q۟t4: ?}atz^6zh.Ӽ UQ:aˆqo˲X8$d517l =s39p zvˇ#`wX2cF:km+7@E>;gUfgf*)%ojrb˺eJK>1u [8MGI"%X@R)IbJ': Ij- 1}v*V["`_8ܙ#0B;_i=yδGꗲձFӡqԤ$|a`H頒&E[uznquק(1*Y5wfujKE*?a} z{J.{w,E?h8 $}KhEL[.52>R!j ?+.?F50 :k!:=&S틵0gmIjߎkɉZ meCJSаewNӦJj{E_Z04@Vo8>xd"Q6-hDS>jC}g&oBB<zȆs7.㝼"Mk2 z]eY_p: en&*7 EU4aqC|j%:j|^Cף'W/~ ;}x~A̬X΋q*\ b 2Cs,Mq4Jn.I9.W[Nk  Ē 0z\a&?U+d"ueǍ"W@64+DT,bL{{= i22GJrLDN{q'~40ocMc#DI,:% @%KZ01aXdJcQgaP&jU' ieyMF6gi @ĂQx`{`ӑeH3 "2 രqў¹e^#{:V0\yL[_ eU\CO*{&!avF/<(>.ٍxd7϶ڋ٦R D'nsnFyݨpEI#O. ;x5Wg(svԫȲa.g?Sӓ$\HŐ̊t?s [0hb&!qaP& ?A fb,f)Jb,W*_6ѹrt'zn{?5-eG۔D R'md nk~1Z8_.S0Ạ*Y\X\$6B{$aKl@ULSITE`q ˎE+R4Mp݆gYjq*Y%`6ISKU0<0v4ב$9=WtͰ$9n!$>dBhܔ?Î #ZNqst)9m C~IG*K]~}GUۃ¶ó~&rZfs3SVyvw%,[E@wz'1L ,Ƥ-d*  7pM蠙l`cSYQ v궥ʲ]l+zT8s]F*'ZMWYѠ l8Mm7([D~A˦ aN渆 ]T50|0qӲʁS19/14ZA~DэOWnDJ \[3ea> ('wגr?5e"ɢ/K 8A9^ B|n-b?B%&g03@E4ljdJ*Җ+pرc.}޻}|޽;K=DxjqSU6TgҌR1%6]yw>Wl np?V;qKQjawl70.>g/<ef"ˌ>RJ3}þrv$넑a*v-].0Ezl[ A㖋B5v> GC꠽{,g5}"K5\?_$SSSX&'秧 ;=߇W}ُ9?=n LMMM{EAN,|抗\pOtxm[H@iH4*:JxǏ?XDŽ^>W}X>~e~%|sxOrajweœ@ԧr$=d.v0,ƂflڂkG 9k <ഭDgw;D+܇:(G{4^!9bȧT ^@hĺg?rG,SNi (ZLE^FiZōťncrrr3y3NMozӛN M+5  ntw+GoR#hI}la!$v~gsFh7ZGgѥhݜ];s R)|_UWH\.g/{iM_lpj P馥e @Z ޿~e<߹~w^qܱbvŶB[UZ @_Lcn|4M_v'?$k97uSbG柳5? 7EЫ=Z.Ijk0XNI)K";n籀uIkྚ+pnm0 Fk3 p~< VOw:Uff)vzbz D; =C \3O' Ję nGsJA U_H#:"(/B3B)aB@ЈLM8y-Z&cx! F' ,2g;,QڎF}OkvöiN6fṭz}Tv}D;'DܴǠ@ Nr#SDO)[:N1n…S$8!HR)$Lg &iO^45-ō`!V WKQ燻_gy2@ a9b$rOh""RF0 SaW@4M `\PH;Pi)m[nnZۦTr'R,^"7G -lY9hoҾȂڵiK,)l 34ЬzDQxU.i%-LVZG]ÁOZxvv}t_6_cU+_×z;%qw;}Ս7o֍<[_a;P-rPyBRntA<(_aR$T s/J鑖bMEN'kUS5~:UIl[UtЉ`&v=vu L>|.ƣ/P",I$I )I))ICAszѠǑ@0Br]ϲzj&8mCq%\W+]W鉪#&;A%!b` a0xmmmuvv}D'2U?Qml|Kn- TBJBJH8=[k!$uSA$hn$E T$Jk"6vNFvMWuL4wZkk6@h 5 ^H1ꍽEOf t:;]nu}Or[y~Z 8fFQ!VW(8(َж@I HDU/N1)N-V?q۶~6zB[0ˆa{~~I' 8N}0>x(^whםZV־v 6!{ Ɉ2ʦNr6}]KVQ)Di32"˫!ot:oG8nξnVˆ x̉l;< M!0(ۏ(r> IbO\01”?#9<dD"'$Ԑ/Xcx|bVI9Խa1k!f-N>7iPۢ.6y>gB̊cismSfos`yT(b '.83 ב\TZ eBϧ6; mFn6^q%1ɴ(CƘ<_knٰyPVs[`Þe:oۈtmu -%~A);zVa(<WBa@3XlO@ֻQ o\&Le̷,ץhP F0d4MMi S(fd4i,JM)do}! I)\S1d%=id:)Ňqկ~毾k֫nv[2ۃT %YiҤBf'?T~3Į}.w-E^v{(u$# h ,MxY Dl/IiW(6Vgŷ*ؔPP0c7Og\!y4 6f ^^ˆ-/$A(x1_Ġ(;/'SV|`)A6y>iZX(\Ť`MYgE5KP5~-<[ɺiR!]=qbJ MF ha &EQ8ټ}<ΓenX >pmu@)Ժ[L[Q25-xs놅I $*QO>O^J#_!k[e싘te.zQ)5c@H $v<rd[.4eJbB GAgK|1f,ey>8%PLEp8<:BvQWes2BZB1lq!%] {dRci˗Cf ^zMg=/\xBfg7QLhHAnv\S{ӛ޴"e!g"GBPHiH@J%[#tM˕Bk7b=_ $&dT3lV~Tረ$Lc´l>RŴEϐ8wL FxP 8CyNvM7L(R"u@"]{f9ZGR=kNaAa)Kw\#F8f#<۷=֮6"LjM)~h]Q&ߠ3PhPM4*I_y:&sH@=QiRKZ]M2thJq . n1Z$E<3(ZqؖFd"#ÌN"tɋRk#//(rn{lt/VMX~gdQ4æ$$/Y)FOhn"So7\Fk_¡6d0DǑ"pD``q\9|S[]s#LTo:7*rJ+e鵼hߪѡϣr63Mǵ9Nv蛄u !.PAKJֈETgĥJ ["ܶSi}!1Lp]`Ik&$|;2 J 0uZyM"h +  b;o( p)شAJx`PR&|z$:>C3ү &JvQr˲B+.eKr0k\mSucՃՕ6fchk֧rC}jQ4?h&0jE\]ݷVԻW>E+_4Vzږ%9l0 QysLhy?8N8,?p8(V㫫B+]Lfo5\#VvfQRJPpc#y;r~jQɴ` ilV\gyv'MR#Q=iVQp}N86U$/3nfդ /b{pِRf\>鮬t;THFѐHy=QjZY4zC Y6䀊=.f5b˃b LUΕ=k~^*A`,WqMXHi23/>|7B`DRoWٔ>|3&7.F"jP/@m 2_2h.\C0uWyZ+XH 3qӚS.( 4  /"B+eH66Fcղ-#\4MsaSTzk@C" (iG-ȤL(:1-mϣ,>22hO 9^GX=Bp_Do$Y',=?AFM' K͊+kil{{WYE>_Wŏ鷷}wtk2_k[:+uͷIL6瑣_Nm@c`a&o^d@Nۗ p߿̱}ՔQl޶?n}Rtzb^4 xWR <Xg+&@oߩ3gv%_7C㋽pC1 kQD M[[[x'uS1@0  ^> 1\s)X[xngn{iRGs@RB;,HA!x}G6vMIZd,ZL8_ܸcߢK#!b8;)7aܚ|"Hو|bH~xН+p:63B _$ 6M%BTy&BdvsvRDG_Sm aZlzݜ M'DUR2uly.9GL㬜͓$jyRQ\|KQ(Dgahz]BI/1$972f[0n[T^l(K3-mu &! 0-RoU})30 POJu 5aX` w6cZfX4S<9k)XH!C]}64LS]U౭(TRH@ċ wd\g|VQ!h-qRIn ZTʙ*~sOy3/\ξ[3^_n?vb@27[ͧmſT7Zo>TMCI2n?[i5Vʢ=͕qAr\嗛0B /Ezd"dc^yˑdy6BNEHT.IZ]%^]+E$ _\^Z^Y^]v{ssQml7G޼C3gP=vGyO/L^5Jw tV;m~Ln$t%'eR'W~_HZ6Ӱ:ɀpNTNXq՘VZC4إ㰳|>{^i3o'C4ޥ瘨kn!:uh?u8γ]k>4^й͟:F)"{{xG#%]]Sme3 TD\ԋImXc9MdXt7I*%%5$N utq<&p:EƵo ^=ژbLPRizb. Bmɲj+ۯF \Z $qe% ml2Sz,)5qv>mD籂g J9 rh EG2גpl P )=i aSaZ"4Mm!RVc8ymn<)?W<`\uáZLDsP#0Ѳm^d[Hm `hƅ LDRF֐o}+eߎTj8H6o ./S.qvwGq? RַrKR/W˽5[ca@~UY&1Q,]$ r+ppQVo+Nr46z i4I \L +΄`lZi6^TAKVF@KYL$q):H0WճfuћbDmDaLH@nJ+3o bSI٩{٭ 3-23{ ZDŽdwa \&qMk|TSUHCa!OHvIiz^10a4\rIG%СÇ&Zn:jkrݼcs6֏V+`5v5_ vt\:L;+$;v{`eimgu,:)M+Ruuk'QM=ȮR h12v.gE:ˣFu bX٠buʶx7ۆ@hӒ>ޮ?RIBJӘEaoJq𙣓IsF_~~w/\xn)"WsxrP_KE:- l¯9A4roq'.p(.:ɻ(Lk"L7(ȴ`U_/8ȤYݤ(6M*z- dbemXJa/]wEo?C3bq@8T+ Pг-&PR?28GUP m'@3}Vv0Rq?MWq8ZJ0Re0G3C@6"30a^ )$]RHPFU;#,4&RІ> R ;W;$Nx!"deQNs|qΟca2_ ۓnlmmcZ8tKɆv\;9F{uFÉfPmoGo.tn"fUI⼸Aap/ְMHWQm<5]($x\H]´Re8wo Kr\Nbt2UXO8KA0堅rN6.Q1Vr2/#UBHR[EUeA/J3/%GG0(tw#E%E:K"}?ȸL?z2+U*Gal˸(ꇬ-'RH_$q6VԑBOXLN@( 4C@'V}jQIK}pB4L5}g20* f +>7{!Rl6\BЮ$($xv=W4@34-FiKΔjakj-[h@ˏIdIhΩAIT"mrFQ!G p(eT;Vo"@BTZ ^LKWiʥp] ڎC)33ݞ0 )u `*#c Pm39l3%PǵMnhL(9NrDDZQQBr]Sϲ]4xiִZ kZ`u(V{5 !c-,sZ W}=|!Qvh6;sck @N^>lE0M@5˓)lsҲlmQdq="؆KMa`Q֨Rٶag#\דÙ(}~ xJSiA$Y0e9M)ib:6RYO854E%$@JڤI^ \y(6듧6PJ@09ERf|YHurJKLx ;ܬ!s)$2ܿ M(&'~Wf*5؋cWk㯗tűFM388H'lVS{i8Kb@0Vuq(YyG!m?КGVH6tGV1OH+$|*7]VҸP9|'9Ξ[ OkTJ.Ո%L99-[ꪫwk;\uvIR3pݢ?|Ѭw:tСCY] ƑgEẁ&v UWw}݄P=χ @MAvB%〶[T̃餚I:}^TF$j6_(1IFhJ?. PKNg pI ןYȺnuǩܳ[x)4Lp=\0pMuH}fnpBw,|^=߫בN p^W2ԹZ6~l˽,⍈ qhW1̲6+{ҼLe<΄m|5eo{yw~˿[{ի^u?܈7%+w'|0{HJ bmSsh[ e&?ڗC;pױ;vرCG::Zag覛Vf3%<0Po8Cq_!Ҭe8I]Xlld泧=nց<(+? @ɳ/Ҕ qӦ|~G(82"Q@oz{B׫ՕLi z ko j(s# j4X_kmk&:BF3Mɹs玶VVWǫ)s.2{iDbcB)jYft vl6=roҖe9ngYiq)(jb襜FrᬵY "QS߹+AaYLBK=;wSMY&O}s99ҠH4 (-niYh4t ![Bm94o9H0[ZuUɃ? 0AKdchj`h 7 ߾;H mK`zf ^knRhI PJ=Vk%k#őJD j.4Ep*oA7MQ)0& r "?L}gx0Цm!PTR@4{R,_ d,'Bq وr1]A+@h~(Gz\Pt$"AYR'0_)H%IS$2cx%l?%x1IO{ʗP2yꕉ.Q&>󅜖z ^g$e7C45in7-qkFCFiz>ݼݵV"w&m2$1 tڝ,Os#OnYq,;߿o>N)ϭO0o.$METrJ@\L.G3"4M,K$3O81騴gO|ƻΞ==ޯJ 6i-6TPۆLpQ8pCǏ7yR!A.z@!9Bvƥ]hqK.-}qNѸt_tRܱۀFK. #o%mELwzX-X+eZ̥|ŋkQr>7$V(qַL}lIDz,cmݰ:<8'?KAF2Bq7U(a=D\TT<M#I͑NF }!Ho0nNI& \\IҲrlw y@k"QcZ7dHS2\:;q'q1M7GeZ&$N~8eoդ8K2)qR&17tRN!ө:%<;^\ϳ.ƎrrRΪY5Wr2Ux>Ϊٔ^-KVrV.iUΪ|2q57L5.ٳt6q!fʪ㘋wx>G|2k G}Kwc w³sC,t^&$kNt^mi2]o-^uNE WL٬|Ej@K hcLAaֺCv9I% 5 F+4TUۿOV0˂VK0uq08#Шޛ4;MX$F*/;geQ6,Wd+Yρ+W+8<.:^_*!4Mu/1ֆa6F,/>$.Z@W.E] (P{? |{\Imwlw[E$V+DMс''#8(M3׮Φ)יlwc,ӟVSoه+LCz~BHT`P2VU jyX]J3a.L&ֽuLH[gXkWg{_=r-~Ø9nˑ=Y\NOGL_-ݳ۵_۹1yc_mﹾ\ltzz_/deѽzyl3Cׯ5{X]_vPe灶nOksѽvBӠsj^N|}:7\8:ރ׾_nA={j:…k7^HV~ `ش;G`|&`(z/s&Y ą>TH]ZE(K8,|)]%yvE^io(n}p_Y>#I @q;V(w{v{4}uw N/^q^Y]*FRH5A@)ez_Ix9 ^*/ٚfƷɥ(HHyo^˼Ze¥p"f9[W^뽻:9G`C:ݝw0ć`Нz/T=s6s&vr7`oB+6^y׽v:p8Ν90u0v3hdTaqcLQdM ~>~ŷ? gݳ?h}|@|>5}m}\`&Fά[Ѐ\bp~"&܁l5b ׆W6#yE1+v,BV2[׺(ʋ$cyZY=)8S>dȾ,u\ SBУ: #,NUUp&G~7;봋i;%kyDDQeRXTQIeE`q0A[9|ղ ^!x/ρ>/|kY6[!BN䅼gPTTMY-OVr*?l^\~Bqp.͏i30np v5mxC:3U(Øt5R&1!%KǶsspkdީ/͕]1qt~~tTX5N$br57MX 0&9Ipڞ**4#1ł%qFF7\)! pЌ)ˉh\|\J&N^EKk+g9e,g)/,IpfK),f,5]FP+su0B@˅B!R[$ ǸR ) x)H3TXyPJ3I-J1DC!iT$BX(zqe I ΅s"$3% wscƒ|(%42fdws@$Mn"Ҹ&{G.b,"wP0$jD'P#4NZ;:#Pþh)@̏"D-u襔H blYIB*ES]ZKvHo2WZvj9j \bRȼ,]G7R6F0pyY/X ⸪e`l ck60:u%oWiUZ ,wҖm?jdl'u9P3&$t]^87ӉKNx3:B˰vY5R=$YŤ(ZkGnY=ϯL]F5qˢSg_o8g^qx#eYlgąo1^11?Y5/ŁyhL-`TGn )gȹB03. n} ^/Yuohjb L ;ݮa{H&X+ ؑJ1*#+V^[IS)I-HBƯ+N8g- ' GػBݰp";, ^ U9 ՂAYƃV ^v՚m4[7[vk}cjy9ₐ?l @;:@ΜĴ6oڎ/;W& I}5tR&9'.vpBfUսBªԇ}}//ax̟.h]%IJtwjl2B0*uodceJ_[Izs3X[4zCkG@Ј4 i!k[.{WrswA @fh}(0] +ˢ@ "aE>i{oo1_n=/= fekqf;UP?~5S`zL0"9=5hXۿa;ţ!Q~y3l7ϛ8 )) Ā mu[z\W4&-"m`KJ)dkU$i1ҢB,.Hh㢈- @RC19,J!yI"T^V).B퉥_v=Tyn= ,x_WB</G1{qlr&>(̸Ϯ /|`N l+I|Y6bYHEw%WI8eNZͥ:ȋꟌX^市,J9zWz,7z*ܑ@n_hVH . lV6#s %N}t5]8E/uʂUR"ƌryŀf>~n&cfZXhv,ϨnFI<- rZJI N3 陔Lj-WG,\* Pr'x#eT!ӻ.H M dTVpOJ@qGu ,┗ʰjv:)#&YV"! WLq&sM("ƀimۭ?q,5jS")wQ%LKc-+*)'B+m{$U FK'8I.I?"չpeXuwi!H mA VE RPo0EK`z h( [jCdDBrBDP2J YUBR$Dž`DSUHrh#rf}1 0 lX0eKJ*k,ӪԋP, Dl]ƴ=Fw )%$ImX c6 [{KA 8QDb9! nDJĪX;8'ƙ 8/.Y۪P4MKƌryN;@IUijqeޚr~tp0"Hie KK ]_AMC\rF9)q{qƜTRjEPR `Y:os!U\()M,$=w0#9\eL 䖨Yx- \QF DTV9Bd(ND̥'# j byf0j!8"b1"(I=!C%9J!ZiyU9Ne (R%cB9"@bT2-7 ko bbL̕r%򚔥rEGV2Q x"M, V5|; .ݸql<.1!|GZvɨYw}6K.} ONiUUyf4r$T+Q.0 /o`gqiXKy\xDc-N{8,qy~n…kզY(KgRX?Yh*K!zwi(0V)? 7V/"?#׎#9QY /Nܠ JE =@I2F!d׬gR:-r!9z>IlN?5aZ }؍A= I{dz臶{tGGygM7 'qp#x+NHdizTV%pFċHDgt0u7"-(%># \Cv5[Y9ó˗=|n_hͥkmNCt`d6iCwpit҉b2asJ]N>9|y:j>C{P_tAKh#CZk B_tB/eqz9 a{xF _:].Z֠Oyz7rxTK^ʥT蓓˻xɴQ <|<+0qn&,; puOs { &1䉵pĉ}Wxh0.ZZ^M?o3bXo@WD_beY6eA;{(#M_`^<(1/(Ldi5PgR<$a''6qq1絣Ԣ9^r(دR(&Eqz4ѐ)Դ(@ E1ڂ'?TN8gk]HL:-(@-Mg.SzWKe=kvAamgΜRK_Rgpi[>X |Z\\,&K#i~ZZZZZ^o/#p\,z=^PxéA5bmb&cH-swc\h$+,-7 &[ XHyFf}i/JjbQCI4MfÄL&B&t߳jig&c l-q9`jٳg)(,,g ܢܫI =KL &5{~*T{1^UDJHY׍xFf-&ڔ Ɠ kkpx\p7&xIחp8C= \|dzSȊ>}ZJ8XIj?_C$ Xp V6m)3 S%5LJFQtE/0SqZ$yu/b=!D:vͫ5M@Elv#J, mn!g?[oZKI{y{&l5N GZ@ @0MjCځfYf+3Gb:}*"<ҵp"10ʷ`KI8%TIsN@y>6-Ise3,#@qnu[;X tN@E Ce#1l4 ɎP팍Odۃ_7ϳ'dz8cÍ΁eiN1E˭y_C} Uέ9!:3>(@vΎ#\.?ٹ9FCi.N }[LǞ +rc/U"_JZL}7"|~>`N~IgWbmih#aY8cL0am{?TSJiJTJT&URzm ^Ck(@(A.\=LQb9= uum~Eo78n"Orhou~v{a`JD{1OZ _Z|ʕvrJپ{/f5Olrv>J7yd~1]֞@wgK84r_t4s3U%Sq> _ _R/'z<@4S/u wPs ޅfNVQ༱0hkkbQ,*c}5sa!̭BWr6B~\~e y4"Ss羠Fcmi8,>|pcP4/...-^hd;$`34^lr3 R#OKP ĦqRy=\~Em,g hA}`fgGE2X;AF'M=_M7O1 eB^B^ d:M/j 5tMk `s8 5 ``=  񛀾F?ɟhhB2 XHRoң? 7WcJ) 0 Bi>eIC !$J*z(`rT3 Kzhagjk㭽˻[www޸vVj}~kkڵkֵ˻o^|.R}xvGuބ~-*bZM‰9c(FiнoN.IB:`lHw#D b֗цY=zO(e؛ӑ2fG,P$<5g8]ٟD^AMZe*闑ҋ}]_]DiT¾T%Т^ɛ5LF;?YKv`t}2o%VAEsB~ƹe'P <#)`j[/o4 )ވ,/*7n* s;E+ut׵,eZ3:80MV4It|-;e Z{pwcL /~4c,F@>rI8('/I89،e B0DiS0LiLs({bƩLMws>ahdsCYeZV"8tСCͺݮslEe0VOW׋ckֺ;?$)֥R0^F=xQ$@0.O{j` DWx,t=Po+ RcZQF/:㋚=E;.%Jߋx7l 4W^/uj}$wV<ބ0w:q`2#֍^ht^ L>BtJ9UL!ComNo$x6a]o>Gi+ӒMt?g/fj-M(ILyF A&16e/8=_w,n߂?~-&4W?܅7v:meFcreDѥKwW.lTu~}! } ~n`vjz\M*!Y-fロGI/?0nYEurzzxzO! OFCp9]wn2  <&3w~tŀq_HdEJ:ګEshH82b7ͧ\i]@]]]HOQcaymq)[OjMΣQ+Ak4z JJ_b'lꙠA+j '8Kn$IR: pH>>>WIG|#z2RJIW) ~>C^@JO<;?`o Aӵܡt4"(yow&ͤOcًhX C^Uϒf+fQPq.jI1iT].r>P27 E3dNEĄ;m+:]Ѻ~n)x,`iҬ?vբiOIh֯Ve5f,R@If@w>x'Tgu=A۫:ެ߫4Y  iڧqI {izQqq$E\(4*́ioߺWgN~=T5a ZGqHd8 u ޚe,T:ɉKx9[EʶB K,Ndy5Ie.SQ'ObF>,AiY1+y,sj0nw8i̖$E\.;d>ie*'uކ䀤#=b ¿0"ia:2r/9/zj CRb QrA(@Kޏg a @Q믈1ù w,H`h(Y@᝼F.][u+ǃ4p7eyy]!EͰ2;n滦hDLNn8|p8FJO3fSxho־ng?72DQ{pvkSlj/z{f=GX4ϋ78FvjI ۟ ,8 .wUk\FHQec-xISgF#^4n+x-/{BalxN zc33'DيgAW1H>OX:FcLj? /ڏ[]ߞ}XHȞi?&A]Mk7F%VA,u SIJ^TʋvW ?!!˺=9.8׽rVgCLu{] Qya9^ U xV3Ȳd@LEe9Q""AW''qT"}uðo(Z P](mr,`96Ϭ0ߜ00-d ^X~{Fʏ)gP/-a{m6k1s^EZ#Ӡn8g܅zSL@tGYJ,[SJd&K^ >ΌeՆKG#.XijZ햣l{:aR5d{{v ޹篔lM)eٚRCsZVS]X#RpVkwvƍZB rJ٥cnzVYYYٚxnnkk~{55ݏ-O%mfG{V%pc&oqϚ4}?]|{~4_=ފwo)9l3uxB[ a9Rj0[i#7gzX|ʲ<~---udj=#4nuJ"xa_^귒wzR:1lVS0o¼m3ꖭ+2DzQZ?l1_X*m12) |y!e:8EaKBS+*u~{{u{ۨקl5EXÇΜgh G۬v;puá Eh!XEٓ] `a;m,@c?.n9sͯ]`4ߒzdIoï/b3\ j\I_H8pzX7uf[ۃ<ߚV10o`ڶ5F8 10懡gضXroPs )`xOfgg09¶9ԝ 6J7c؎i0&R@] 52ZDrbx2O-ty *0st'Y7i$kB)ǹ\_L꫘R Jȡ|U/1~Q/p(0?ی1v}/a~79ryc9?rB!"MyB#ţ*? }".1,*xuΕ%KR=ݞ ch4qGp5(Z-^J %/B248x}q8|*AqW2 \^BԤE0?jl!8\RFKOD.=qpۻH^I̤ v;Mqqr+dGWvʹ4P Y"/c@J)d" v;e_=2OOdfL8 9%}< >+w ka36CaG10uA[4e~r!RHa1x2(CJ5:qӑ}P^Ēnp0YG2 Cb; Q0/Xs7c.9RX4Epqm.9x~08tp)MߞLJ=`HCؐªHY &ea]c\.p]ppvq;8ͥUxJ Z_ǚ~KLRXr,1RcbnatTz6v10hJi/cs¤AF)t)P ,],7ʛPMuthe|)7 ,h1'-i&84c̔I9'>e18:gv;(F(BM'E} 4Np{c=r! JYϯ͉;p%{ii Wk'hN;2]z-@@$  '^0{緾ronT$&Od톢(8[17=5 ZFSrDWv=GoCr>~5iQ7LpTđ ۇC^87eDޣ0_]D" l-1GŠO&}zmcO7n{' C>C? yy#aݴUOi89J(1<$&~|F.NMvUY@&LHɋ( @tD"ANᰴ$>W;y'[S3`po61fX -K0"<^OQ(%V06$uD?xs='r8 045fV9#l}e1.ڞ|[ QobÒI@kS 0*֐`{+\HB(2mRX WoGr Hg7зC(TUeN =k{ qH9d\8.+.g>_M:׬k)c8=!%_okSxϠ!pk;k9p8qp7=~^`G|@`K@.~zC~)?v y,$0^F*1=[3ظse+gPO&5[̳T] Sۭ625L|w:t6d4a@gl r'1d 3@Ɣ?lf_z]xrrǍOq0/<@fQ,\"8^BόQ'>")81Wʲ|dvt1¹s789L%x_2<ֵ8Z`D*-!7ZXI8QRLw!CFw܈]ؑcq颜O6+j56uSí/eVXYJJlNf U9QI[Jm/jEXoä ˽Y9nE]lhWCW f'-{U0{=%rLJEm+ճtXaZeUry*USzJ癓'qnqqa<վnE].h:/Ã(xb}NKA׫O=J89& 3`1xs\ ?WwY&~o\\Ь*u;?͛IմMQ\Mm}*{݅>5q'VAcgiTLTʬB ť\!&zwyg9d*Csx[OSA@q8|=:^.n9~ťB'?8ƩD-+* WniZ) ޜ2bRăHcF,>iG^vڗVUn ^v<_*`FvQ#5z'%q}p0$Rzj[ꕫQHBc-gsݲ,o!X2SsvwJVW]N1NOqqqf^a4`x/}+8[A+`'wrʾnBM3%V|O=;wO;|L?3? drYgπNڕV>UG8զ1jY5͟{%/Y]>8C(>aNf/e| Tp%xVX{LLId+vaۭ΃Os(J2ºl*j@ hyAe'G"-|i ?#M._4yU;Ź2y!BB:'RIIikW8+^18$iL!ӎbVTmĘUwz3pE"  S$e T}2TбySf`h&$i&Ё Ъ(w.Ϡe3*˰^7 _ Ow:| 0ANOA0eŽrUwV6.´"ϊ;80I9¶iu5J_[ Zo-4UNnk1b["mA.p5Uk I*A*Mg\jƬJ3.Ce 嫢_8/yb-d0hCC17?:<`?{?<~ [/4&c eJ;ːҴ(9CDQ¶s<\jL B\DI㺷oৃNpG"^ VseC*;V+&|Jie0K8-R83X AQow!vtSxjXު(r{(ݬ*0 D. ^\0(&Ѽ!@g6?'j͹٬ϟ; hK7 ?w< {}AHlLJ.& o@V8bؗ8hM$bl"\מN6qe4K||jq'n+1%k9/5HxYf1j c,hrRX jnurd*mi/6 dY&wlQ4n'\6 uJ)6 pQ?i;oD%!/z!G^HL9(E!.";(PN;$HE`c`GY?$M)5] (qQXPSY@W>"6p/_` R،*b!g8pwٿtQJVo&f&fdc7QT' 4ADPJ/?4ҽrZ w`9E@u @vQh vO؏ؐpQcM=?Z& AM )b0eP =L# >W/3%R.\80fQ\3x53b/Kk>yL4 ʂ3gPtO'e8ǣ+ yIJ-3*`ƨdSثo^4wx?h.rû6, NI[4C/1_ڌ'a;Bv"yqVA!CO- y-Vz^ϥ%Dj(Yx|AL ~fk[HRL^k벚LV%Eߓlwi(o,g~NB5M"Bj}ntsY!b8!I9\H q תcL'y%*a-4kUUU:ceUz̿J˪T(BW`Eo 'cI̵#E1UDyc{&@OvEQ-IQe1d)& {E PUoμ>˼>YcB06ֺHi0/,"Dg#!I5ƺXJ,ZUGii-T[s׼C^VN{_wY!fY^Edy^/*N?ī KHc:H)f<D4bG8/+SZax;dytvFQlj,,0OaPyX8NrjvPjvpC/n?xlx1#w-?򑏘࣌[U~ao~p_08S|<~( QlAf k.:e/;qW^ل; לW,SQb;&ϒf^ 敺E(+)kKNP40՜W+09Z0ID %V`'Ee}C/"+ ($<0 0 nEZ0cF%IL^ܼlNLp5< Kp],v[Y%lŘͣ Y-߭8Fje|Noj+7nKwvk/};/Z qE.` {T&I~ s\0|hD-W"c aIJS)tՏc&p]pX~(tJQ-rVS ()q0rR @LeIaaM!2=S)W#mUCG8ҚXR$" vvD.% Re $ebP4 y7yÀ6JVcFĄY^& 9@":eF*BD,<,SVW-RrELH8;<8:r ˲?μQA V"%i%byN*%zo,gJH y3SW'fq|@Iq2ފ0+hwqE$!ZELDaYZ9gE"eQ ˒B( rr(Iz8 vd5& 9QCg<~ӏfy<=O>O8|GI0Vڧ41uf?}|Nwc~^޼ {Hr)ž{0(<pEfrTʹ|)g6Y)~{E3mhFM$uk8~5Q6f•lMīv~YtRٔWMR9)i^Uݼe(3u".{lNyX+70۽߁; 堊k˲l%W&'Y_z599I>E?G9ڹ0tNk90tb29Rcg~T$x /XV\f5:, ւ K!8㌃bŞy><<<|[_~ttt귾?VSO=7otn5XnIR;Zmhkcτ ) #R^[r*bB#ֽtfzZa4t;IY8iVb󏎎mYL 7)1hp/5 DJ+#XIS8\ +@j=< vsƘ1 HxAS~~2= |B"V^naF JEOg5 up&c1*C.8SJ{.X4J.:*>,[#b;']^ꌚE"aCy#*%U2dR~0ˮwe6!6ԛ|%bSZUs7yz!;'mN+vr/^ŋY>.>Jb|1HB"RIynK@eOtQMtț\&D1'AJ#I )mxDN/.T¤n(%cN֎Os 6QtS*:# %WlF3slc7aXBX09Ib2>0v4Jlu<,x3   DcṤw -ji+MaD/`.& f8gs c0D!4}j{)"6 .׆E zp2& Y.c:6}NIn9-Ǚ#!Oxr^](h8N0o!v `$ `g/bR wtc2.EPޯaxKq:b-|Sde-0_5xdT|JRXr]c"aFhA'j^p(]$5]U uB5)%&@"Nbۮ2X˜``cL9AR,GrRꉮaMĮg*pMxSn=?s?Is{~$Wzπk )cx}e0$:rG^Y)!Ꞩ|'4G~”2Vkr}_"󘽋3V>~'kwq/^|~_&|%h6.ybErVL|$b ޽"{1uMHI${r}/\v[ދU#-O='xwצp~S%TԔx0P{0Vojvo쵗8J#k4?;q i@#ts&f uҥKqHO.ݩ1:m'[0g 2Řz2 ?ḵZF%iM@[hG7KQNk^(>ä1sΖ$vƞkqL13jUMV{ϖv^8lih %f{C@<8yJ?GQE~'4-3r{@HLH,; y;![m+PmwA/oZuƒj!8鉶CxqP(haIS$|WI*MIN>hKj ݶTI!!N;)- q'mn*tq))AIZITʺ4i&&?,Zr暦Ԗ1హV5,KyffyFmSqs֢m <'شF f3 ~9ohgJBpئmUjlsi5 ӴQo?IMnd;Oaf%@p))D\`\HgmIH%3K(z) T K5\~.pQ\\𯬡iNs`PGM 5peZNEAkLAwGO10ʔt\KPM#ɪa.@L9&EEբ&Pw\ez?%IH_XQ) MRab?0ftu}OOPGot NIy:Od{zTQq?gɲ#++@YY9i4[++G/^]Y`mo |gY4+e n>"Y_?w*rz-c^uxݬB CQ9GkQI4ep'OP@);G~\͛yp>Tku"0&pZcyxI_Z(JUN~vrdʡ~ٽimC%$ljZ7:$JbݜuC)5JVk27ٸa 5. 08ʌQ (@{M6FEa-%13Aܷu`Y~ַiWU-J}A_7yS)JaaqѕlkܲL}Xi^Y 0ID U}DRc[~x -J-WWo%Dwr-aI1;)]f¥>iKǷVdJ{gmommnkkk;N\0?wU,[bVm%7VV㕑yO]V7Y-v/<91Jcm[U*ڿ~axq333;Y\l􇄐Ø 2QmU7s xiqyqǵ_ZzǞA`oY_Q[ꝳ#".j5݀fk}d0MCgPpf:8 W<7>37'\T  y&AN4 35)JaF0XSXv3G )7aY'XJOaBD@DB@!;1?ݡ!❺~YUꂡj̏)}>gږK r!o88 称w@=DG&)71 #_7LLMLcvvW\_6)b`0OgOO/xݐ;;O.ƝӤ>d(@*Q9t8\JL1٘B6tMeqYXSֽ]i6R%&|x/B] 4$N BZ(v҆!2E2GQs M#@nŃdO SesNf۰d¬[f0,˲ Im@nqZj/y `={OŦeqdY}Fx1ݍl. `E-0ɥK.(BիW*hZth&qz'\GS Xv24ה2K=5;IJ׾AH0{>acLiJ!Đq/ۼ҇{ZL-)IVNm2z~"D-$%9 R>!RyB~?nyׁ0N<&V3VD D)4%1E]M-,cnꔚ&ZJbZJ)& K4,  nCvٶM3SZƙCXr9Ř20'c T1ȥl%=mM>膶 E1߮Ɂ26NuN{#? !()a=!4z2Ӫkӽf03~PJ2K=[_/ȄEz;O("ĢY sg>ntryYWx,Lq)j;!| vh7aGVr\Zo68 c;4@6[afhc`jHaYQ 4mmeun޶ ǘu0(l~"RJi2yY)ĎU$)VT>7H%0T$E  Pˢ’|ēp2d9}N?|`{ƕEoߝwa|)aQYt-8W3 VsZ^.̧)@/s&NK^z|K4M̲aߣ;ϲT9APM!$6aU7`X3@a]0?!hEL`z EI+;"f:=h^$\D03jiӭjz,M=8 `]8 `]jctRS{!eGy!$DB/øWdPJ)dy&/>Ү5$"ŋII o4 Kt'yv@ 0I} Y2 /S88,8 IuI,>16㭒pڔaQ yaQ K-Hs$4|_~ݦODZMZʪ.*Pڕ٘Iskv(ĦImwzUH_PǢ/@i,0,9QUV%Ns. ayY0ֵk0KkZ(|acSʪ"cY[P!(ʄ,ʓ3NNR Hh|T׭\_-4A]>:Bia w{FD.sN2M, Ft\]V{^GUH ӴKu{p8 ۷{,: F7 aAbt{׋%_,޺Sk ))-Q٢.19c7РYoꦆށ:wzԊt[g-]o曹5:h<|ʁsl-:qKAmW5Qb.\ieKea䡘ϢE,1p.SC+|XZǁH5բw %#FVO _\@tm+!ɧ.R DhkE"k1(v+ZJ,Llĸ]O4vE_@ Ƶ A O{EL=!@6FAaĒSNQFbp0"1nF0v x]+)Ctqg\ 3.&'`ďjaj%  ʝ_>}=p\y1Jⵟš+pFHs(N;NR jmuqFh,B\I76Ҍ:6qND*$ RG$8LV^ {Y&ic X0 Y E%<5? (8GD&Včps,GZ܆/.BfG8E|R)Ь<,ieU 8K3MBWGa H'"b"J)GCi@IA@A6:$291b,ˈ8;A_: J18#i1Fe14|8R" a B*Ř 5Mz=\7:,xT8L14ퟅǂ/Gjerh-WiUA`>'/rPfHLfj .#p ,s LGV?]`1bf1w@jկokI[.Ϡ|[bXa_tbq!A -y0v"0"tŔ̙ ƠudQx+>' byn(R.BtuX24ZvZ֣a# mpz5[[L_#ݒNdєU,V\dؾ/s Mb2{u=׫Jٮsv̧ :$Z"kOwnCW HvR F}8/WI3^& !fٔ>X1nyX`ũz.O|7n^lHW\ϧ1nݮiɍ΅ ~t8T'o?PQgh4g`$=99(8^8'7uv.fEFyCk,:αG!i\'|""R2rRmIn;y!ZHx2ȉV{F1:H+-7UDۏ>ǁVyW!itI/'bBE9+!讬,d7r{$wc47N^p1iCF$qZJZ;+DhE#@cRL~bkW#MHp! 9| @S8 F̈QɉR 3?ܬ{KK"n'WB[SlG`ٵYB_; WYڕPpX"e TEv3V07Ph jS!g%]ۂr6"r# 0r>wr{`OYRŋe.ճyViGyA ߭~1p{oBR8)4v5 (:Ćܡ)| &~y:DrH,(ʶIbѱu#l bg3Jp5AJg:pIz1kb8n;nM9|C0#+׀#3x5fR:k!rv,l r~G. -.%qj# Z1I`Ì RzK >iZ09A> L˦l?P,eT5w"1R0COzOϭF̓JR>Kq`89Xd ,n)`X犣bGu'өd:g<ֺgqlig M$d^gq;zmlI"3eoEQ@e:{{ X3Rȱ,z| gYӔ ( E/ϹٛO&ӫ/K6qqL^~q}u: è"4 b5qJS+XN|FtQ¸vYtQQZ+9$"< HJ爥"Vrg0T  t> $6JJZL(*כZx.8. DǓiR!"4M31oH0VkE9VIC$1CoӼUQ^(ҚYp Ν #>8LV$Y{t$?4(S*8G}4?9rucWPJmqE{0F .DWRHBM ! zb! pb8K[} CagH&Z(a~+=V@‰qAsV%<9{q!i8 D]@CE< J\Uܹsbn(aX&0MiZR4cׅ'G%A-M#A1&l#Kc0&ca9)Fp34iI}r/Nٓmc]".4T?_n$4R& @u秢^O]UX ƒ4IdUrqJ-n,isggx[ 'Ano{'}-Zׯ6KtӇb 4:,$8}N`!?%z>,jq{+ nw?8ݿb8y߇^ȿ !?fMK&憟nz&8/"X}[RNP}x}X\8p`aիWVozgR}}gzeY2x}ٿ/WWoyu}^@}t![ۂL ms\k; S6 2v/G~ι KGZ i:30~ϸ.%Ҡp!Ua?LN; -ҙ$ix.?cϢ6@w'*dd!~숲3lK'e1h>7)N6 a6rFb$<.~ղ<3vضI;덙xg?=׶3y㳖ϟgƹ[!ϵX'm*1(=RY5 -{yn_hRjgͦǙ&<|y^ceaY$q$ =@*u],˘X9-.8MңK7I0y    U ̎b.ZFsD|Ī0e4@-PO4HTSGFqTMЫU4 U?H W*y6tնԕ[ (Z- <>g\ ںn$鸿` i.lόd/>~ۀ -SJ=&@: Q PNO AX+upfHljO.jF[Enw#ęq;Nĥ((sBO+=@ihԓYմevuM .)Q\tv|ǡO9! c4MQ ?|7bϳ4M f+Mڞ7ވ=R:\2J&m72tMX@`p&?R&$U|D8M2XÊsЏSiǴw. 3 c"LCt nHi,j@Na% ;|&[ ON>>y)*;h\70]Emh9o46vJ%1a_d .4\v`eu p`a Tzꯕ v4ovPJ+KL5,RL0 \>ؑ~zR bko_ChoV|[mV6bX~g#)GLR>Jg q=,vB%hr.p.93*6:k?eso雖ee۷d/^ܷ YUߏ%4aշ:WOz\r塇]yM5/%ub!WY~)[ׇ(FB܂q*|ҥKWn{ӷܵw7o{i|̙3ѣGn}~OFo{Wï}6h4B!w,P=vD'Xvˆ SքɳQ6d;hL [%D\L;NT @$HWS)nMRd}mücC`  Q4;8 ctSǤXoV՘q-@$,Tc嘖ЧVq9 >X$l?*5 )aLC^UfDi@ef >F+86M!koi_;g۠!!D՚É!%Tvt)0]|0\=b3BL2=O&RJf܋D!1ƪ7eTXs`8i1-?f졹ϭIw{s׃J?G0W5<2zV~B7~ɴF?43 WǀJL*DZG#̴L5^w](N~ gc D:#w@ nJjW8a[E`â-¼N4S}'hྃ0) e!p8Bq1R8)rF8mFqY D_tc]?X )qure`HNX6璇H a'lIbS!3ꊂ9\!" >*YT " 1hhjb;؄V4-< + ^ ܉CQEt̋蕸+dBԟזck=S71rVT:b D关L[I w&Zu.6d1Z&QG8;ŌEF<-M:zgQ֩Ga'b*f{q.Jh\Dp?L&\DDO25HGWt;vQ A0nd$EŖqþjzMOٌ%#('vȋd \ c.Wbpi# 8حj a:VdMDe[4-ۙ40]IdQ(A 54tݦ vtߦAZ jib{\FD<@B&$*C~'q@"I(Cp*FH6vTF PX!DB)9tdh@H֑('X"9hÌ)tHܢ^ U1G< x$s8)#n}$!%B1p$HMS޵/wIy ܺ}Ħf9@19#rRp Q@ DD@I2PJ@=>tZǰ/OqYMyn;HBv7Iz^ZU0?$nA7H1xIiQ<!0C^kI'(R cC9K,*ʻ0l<1ajS2$؄T¢ .>1AȵZJ(I%,9}c(]3&TI!" d_1ʲSh (f,HU%8.kg|.`C:(44byQF-u9Y!UQg{רּc̓BZyi~19 % 9$3pLHd@9j)< DO W6$`P"n߂ SKGGԡ+C?-@h.ޘ yC`tYoԢ+ 8_rE*YQ#Y-VBgYĻJWx,Dn6ͺ*w :D[AG^NX,)dkC^NV r9O2EX+u㊋f[r n bw]-bUTk\Nvk E3[ݖ7o z*'ެ'V'ʢhwnoݭm^.XޘfNؕrkQf:NVŎ.L'SYgнh~\Ufm3KX,&'_rl$ (D~3Uшϐ.ZMGB$;BJɶ6+r墩[d,zӸM 6,夙o/W%ЫE?׷|:(]%˦bܔMO޺ Zk4n~XHtn\ 1~:O'xoWM%z|5yhjZlֵB? yΫQ.FG2'Aj9!gO<1qr!idpBJ 5ւA3 C=Rj 0!XqBs,D c|Phm<aZrY ZژNdQ7RyNBjm.gPApszEWF}8?Qti9P& z0,9S>+˲ %ڙ+ ΕRi@AL ИGJ"; vdS2 J6aWB$DJ"BH"r1x*!C̅`8FoH@FHг⋇GA0feBߧE5F /jq fvzqlU>>y!N!LC%C"J` $T2PZ4|b."9" P)@f! FP cH!-RZ;qasBT(|& XOs=rjw5zHeۭBз'(6N2DH@'peZ]]'$!>e!g#!VyNҼ fDAL 8hp=t}M9˛?>@BJ,5=!h}J :sS,`mCf{';A%0 x]vF'C'\T:mLw y=Nj+*ܪ_,D ^;Vx[3VK<X=X l6j]{҆3I݊Ի[xu(|Wd8xC }rΡ}'̰'Y@ ) =o޴ [m ~!HWV*VIZp|@]<ϱˤNmmcGĜijVUeE% K}_YCjGfY<7wVg?s{>UX"D!QKi2X2IѪ,e,QXqlK$(mMzm" !0Atn   >a_oif{lŮ4*kK.af݅U|1ݠ- H47"֋mqr/J+a;ё&!*jjodP tb[<ӕAd1K[N~Wq\rk0:-`pd.tnEecZFIwӕN'?z `"}1ڎ'}[;\MY,i 5%n(Lp!ɶx']%v7.`DKMYV.uF`ۣ%$zjRbU6ǰ_&XgX1uOٟ WߵvcX6Ob*4jddk[(c(aJ[8e5EOwXeyUE^||<(G]hٜi_[GLnl<ꌜsPz֡\~jval/Q@aUQ! ܲo"dd)ɂq a X1^rߕhpcþ7:8v큗kR -kfIrd1#y"`C#hRHp픊 ,uvK q#>&@"bEd5-jƍ!q q%,pyP)+h 3ιռ/Nƒ.t!can;R9`wup@2LyʍڭG RQ)hBe$tnļ8|7BH $ e%K.,'b* 僈"%>Xuؾ*#nƓp>ڭA/Hqt$a;9tQ$d$@4M.W_@Zᦦ4%R0bQ9f<ᨰ@CC<3812 HRO }4)Ŝ hP^0<fU$1K1z!ĔH$ h*ScxJ?}YF&\GN78d‡PnztQ[#L" 4L1ƫ59yI35+;X0` ò*ǘᗐ$ѧrI$AM&b$gA]ΏfyN9#̭Dw"Y1D,ȹRm^2CbdPyD-Ctx'aݽ}741V <o X_;NVI0`%ax,I_E_qdꅑ(Ay4g.Fop4Mx9y~q\xh?5xxaG]b%"ޖ+%P3Md e6,-E&o!FO GgᎰtD: ~׿}ԑ>m`t89Z(2' &\<sr[d8元! 06_m # <C;GwC[ӡ' #E+@g/EɤL6,5[CUKsy*h|~A<*xwk_c\-8xEr v!GZʁVsj*;kYNnQQ:'DH  p`@5aRL)eg$!)c_tB*&2VJՒf[M˃R~3v[tʕm+Е(;_C1K׳8Knwjܚ/X׉ XM[miRae޺w_6'c XJ6?_,/cx~3ne?fwڌQ N x+B@iʊY Vv$LX4nlT4)Wj̙\K6 .Z؉yv&;kjS#Ys=\3yAx$w@%3Q*ŋgU` 'MB6ϗ6uBо&RN0ɕ z=N;%jIơsլ˚5bL Yׅ^4RV7BWt}fƶl;gcljDt^vv%iփ@n,ʼnvtœlnZKktyiwo`_F?0DF`^Qwx=*0A6(Z yqbKE0|*?,:61[nBp> maqoc-1vH&FqK~P7uy O9qDB:d)m/2NVlA9jԸf@oK.R&q;O?7T9,{xq V&~VB\:,*%)8}'NM'O:]J!$^^>|ȑbȤD!@k_iz +(C,edr}0 9<:I)\:BfƳXTFd$Icb y"+@ mM )4(5Ilt`TQQ0=$I2 Գ8$w88+q02;$k ?LhuY(+}Y8Fs52;YA"w0+%k.m(AkAl|˩S‚/u]]YorJ󮕕]]]{Wݾ:On^oo3W^=نfy}yʕ+'O\vɫ\\\oݹ>w6SWNv]yCŕrAw,Byl^oo6o/4+WN~d[΅ևN6O(Zdq cǎpjo_t(7|YqkmL9ޝ~`ZYXU8c%d"8İ 0V9o`Ĝ7~rn4d E!@7?S#+[ƸTiٌϣ$d0Ɩh9D#n`i0 Blg@vK!%F4BƆrvfI0MݨF[J0L+L; T=˶- Qnew~I%`t(`pJZÀ]/&TJR0 m"l0Z6?x=EB(c0j&氿*APfrѮWW(6 8$ T35r$.̋ud_uc`esUI,74m69q&8IdDto[._89g_tp4MKK3i_\MhccRq'"/\tlƽu<#I6lN?XS[hT*%h4FFcsMWj;pxAq6UnO3Ɨ=Zݭy~^β=߫mZ.߫<e@gÞ7K.|ɯ #Ԙ]xAh4S>q777fԌl2Lچ&k;-ea߲o%kl}utdMӔVJw^?hw:A3騼8Z%[2g@3m[9ezc XʱIa ~O7 ݃GOOtjH4gB:S)7 וLm 3PNBCZTAU Rv=?O=2&B?D/xZ}{B[.$JQ ݙQ8(3jB]L1B?_P-"4H`> ZN6cc0zo]<π)1v݁a'd6W`1Xօd%wVH-pq܉[e4[)xZN)Ӷ[ND*,1辙-!SIʦz  ]Y*+GIjF:a6zoٕJ3iW*5L +rz8viC fg l7=0=dvvi$AHzSg=qg njaV{^AY) ~ F7¿0)( ; Ff[om EЅLúyMO'mu25EQ[e9Fr֍Ƅ?rfHR?..~[Yˮ XijZ,!g*SKH19LUޣUi.\fxqLZ*d7j[1zQb-z[uو^#D8 zf%kU2s!RX=2a&%;_l ! oE.ፌ1fX83hVq'dV!:˩d$T!>DV33=l`2qg0 SOVIUrZB,+($J, *U9D 8I69 `I 3%(y^k-yXqKh%1ҪFGqDjnz2 YfxZ Hdb# rD/Ɯ9;0T:xo!ss"ZޓȃR1g.I"t20*<% ^U%gj%)Iy N$nwɋ8BU(U)$M 8ns)SBĵ`r7@ݍ"&B˰\9D4vRd̘I$e94 Y Ekxh<=OͦxUb,'͓8ⓓ(xz"PA}kRA]S(5n i˚6djĀӽ4sl{KÛ 0tKCGXK-.4|m=w/QiI;~x䟆F!ZDkR[gO<,A<. W I }o z7 3E'"%9>LXaq`:=gnun 7Q+$ -84rhJ SORtpRtFC~ ޔRד;n[]y .C|}[l @).]̆iH׹m&TE-܃˨{M-bpTE30 JR9|i$FGсWI‡ `^i +?<Ɉ7o95jfH J -)~Yu]Lǵs:nGٻGAw)xUM\Ŭ.Kǣ(Kؕgxc GiZ,\J&2~,{38w\zw>'UYW|>Z(0;v˗B׬7I?q6ߐ1ZB*ngp+xQs/ ~6wv4sOՙ\ Gډu׬Jl4 Ud-tT̮ʩ|Ly5dQF\V)NJV+Ɂ\jdGy ߴBf*d+SɲOQYc@Jjn^Éz?iE: 'Cֵfd8mIDt)!dfL$)'?~h̎9EۣQ_ckĺߦ( IbZOQi#R\ꮅq!П^sKGvOz7ho,s@ie)$0|qJөuy `[p,}v6a\כdH#Ģ ?uQ}^gdaiyCJYK2Њ@ bwgSA_89fqSk`i8;Ѓ!uxHiwh?x!JAA@4^&N¨lrL*0Zz?b1ť ev;iU1ZU#Bd~f~{='ytEf\qځh (N&ZL[t外tmsso.ƁxtEehBH<*0-°,|QXa/`Ujwz5 3$V.FgIb(9ֹIL[Fq2<<?3\0/&74l Eõ.Bm[O'i on<]|4/q]sa (lU#RZB 7jӥxe[Ǫwͤ6iMG]7y pwzAevI2kE]`)VӒfn  uJ8ľn=}P֮tC;m&E hĢ^#+ 妨X%Rt"7_O]4n;B+ ~v2ͱ/N ssS[=m.V\c!ߥD`jfc[v9HoY܌{ˣãt _N'Z G7+P.`AFXF ˊQUdc xGrpJ !ǔWJ  rư @@@Mp$@LBuʄ2@"/'D[Σ3vIɞW1ϣ5jQ gQGbJ8"n*lI((rxD-%@;]7ME%Ig{`vNr-!ˀ@9 8BrL#Y,Irr9LRP<`YnJ2> )7~[e(w{FbPT{`W"!(( (%2?w ГJuR|>a%91璚Hx<#xfޱVe0ȃX*F`] f7Xهia 6_y_߭ozG[MgJp.Fѻ&P 'ê鴪C=]JR\^ӄB}"-jIWl55𞦅eL1;?&1MTaUEŨmMM-:1@WSt2 K3+e5[e R VH&ƨEF]%IE1dEaXN,g,aVVIJyx6Y>Ce}4!$9K3!gq[)W U-ےeUҊajmKh%ضm(DBV@2b3nBћ2d*2lIRs$#B82w/D4.S*:"ePt2_.j4i] mdfㄩeyM"8u77߰allO )}^?A∐(&o&QDiA7(ܴ긔 H.+ 핲U C"Az˴jQ_ioеfZoA1A;}57F]$x*Dh4',E^H644SσqV}QM~ooc laL]5+Оin4 26EQ4h6Ʒ0cz5-Mci+% KBu懖A7;>tmQC(eދ>N(Day"vD>fɠ ȸ8gRjWSd.`0qGvA@0$S'I\MV/{{%&jsk,,r|E 2ԨQG: FNN: 1{%jȯ8Ο)0,i6/ NP% QB`Ҥܶmj L;Qgfh{;4泬lv6ն0%hVPf`|g^4{7--]ѳf؀1w(/?p`~ƍ+)߭[YLU;7(G+k56WP`kjtD5[Dt[{옭Ί=$1iS^(-)Nw^ݽ{SueiIi$zλ;n dP nHӍu~*Vե7RRuUHfo6J;iH% R"EXJEK )/PR.:AMkMQ{*?Pw//Ұ et*:W^s4>Hj"giEӹkI_Ks\&/%K+ZKs閥ۅtOc=׃>>)JW?&1#`/d1IZn5G면KYߍ2!äҍ\%K6ϳlQdOvYvx?e"%^vcyodIr0R8CoTrl^ENxO<ʴ nd:f~A0A(1\ _e,+Y2JOd+9Yɲ;k^d희ϳS639\*vp\ {pY˳\^Y*!ɍ nq.mwvGF9{]xh#?9$/ʎ[ejQ}(ꦉ7ECh8U4)?E."E:#Ϳ*,ѥMtPtCt%O=*EϼNW&bbh6V̊01VzT**E{F*ƶq{ c3Ť?Ubʣb[.bZXb'>Įy*DZbϜ+)&/>GbwgeAi#š'C-"}R8Zq§E q6bZQLA̚%f׊1gXKbb,^N2#V+N}Uk׉u[ Iq q޵;Iq*qi⚂M\{-6ö|m9mm؎휈*힊ۻ;v8;r; ;;;;η.xfإؕؕvm(v=q5S[ {{{r{:{{{`o}}܌E~@om_bFj Qz(T>Q宍FgBQNHATd;*J:ɋxGerSQJT) U,E"?}UEQL E֢Q?/_G x(j:5ۍG-cPVmQK7}}?% Dߣԕ(}-f" E(T!o$ LF/AA4DF4C EEњhsn,ZA맢\mɊDޣChwQsw%{h<: ωD'A3#ٙ|].FW~AWkэV^t{zT=^DO/gыm>z  [n ( 0{I4Chv3ǵ)Ί٩sPRɚ1 Xl ?4Enx0m,hƟf"YfZv`lTSֱaߩ%Nj> uDӽg x]jZA4ϩTy)/P8 8>_X_l=_ʋ΋T6ph&\ǡ.-TL ̡<(E'$L&6'Qb޴/=$R>㾸߹w|ƱCp8!?}9x7xDzo۪Ԗ-DFoUH*Σ?O0m;Q(b%G{+lE[|6xbmkdocs-1.6.1/mkdocs/themes/mkdocs/webfonts/fa-v4compatibility.woff20000664000175000017500000001127014664334534025226 0ustar carstencarstenwOF2 'm6$ `ʿP} Up~?򽱥Ȳ,M/dyeBGkySp)-'@;G SO/X-mEz8h'uti+ݜ,h?g!pDF{"^ڊcj;J;()Q0Mi?a͞#t "zkҺ4|h7?>pW/Ӥo #~4)H$(oȲspV`^@@k\;C#]䔻O1g x ~& B+x5 C x.~ I-Ţ~ uTWXa@] n@A 84aY'ϝ&/r2e&p_&YoY?'_~3_wk)&Msn`6:{5O{vi~}9}¾Oo;fnK=Uy9YJ[E~<@]K$aQsTOil=28RT *JiN%"V91ƱHg?~cǓǏ?>vKxTs,9c'{Ѫ]Y9eeee ZB/ѩD+;C"SvӅ 4IKy!YvYFȦRMͩYug?i߿JO]c|1,| nxd[_0(UE<JdBҽϳ|juTBBL&2VR}{T )[,ϤDaf)!n`.Q^@ a,5d E|wFiS:եTTR$ϕTI89PY r |JP>)>A-yqΏȖw>4}[w$-yqHs㎮׈[6G"3o@`X8O:tp$/FjiJ8VU=@7uM,a+'ݾ0MFSMuƲORncm@M azU >@ʕGFW!.k =G"T zTCD:jO(zT# UɽW5p 8chX8iTK1>V(LqƊZw\eW(/"3V2[buuUI[ G!gl&*lsȷ$\BiURj`CR5dڔ2Q^gyMvEQ!۞ٴifƶϺG%;5%$N4ZC'p:6K 1|Ns7v v]BLf` O%x!@ ω[H* x:9)UѦ9]0zO1/tͅyFx:uV% tq8^TyZmC+Z}M~.bi֟%_Np0tPXI&rBϣ2q^F&=}0*@ v\p6*!tacvr 5ϝڳ̓HkU֚S Qr`sG* ƏS(j=1- N] Sq;*UNǸvL?kkkke"՟#۰GHNN@(T*pxR !{̨mlkMbY'ۖEf0~ntH A87ogsevP}nm5+@|ٔ ~噌؋W}M[mjjz7#vqKb&;>-j65ݲ[|۰FkAYB{r|fEMej>%^mţ6EnƆ1vqo<-Y-[|C`s&<1шݲTp'Ɣ-/_ULRBdh zi/&[h OY0SC-,pwSI/jƤ3/9 p  .{kxŀcocDI'⇯ܙi/$Y/ !cBUֶ޶i-awRι:97msjmMlޤ)9#LSU8BU5&3IXsVY8N>p9~f $c'TlR].nVʹQPuFb*3aMxcau(7tf1OH^M;zpF坻Θ5 I/`dZi%PEBzrl؎A1`,h} ?$48k*,[78|Z;l!/1f(eق{4~WDB8-6l[Tpo9a~ku-~s.6Z2~גˡᇴ>Dpa/4L-Uitެ" qj͒jlp!QݩN|anN&ITb4<E Y269c{W#fޠv/R.M{9K3vo4Kd-E?5JY0ly^(Ep~-,5.tvdr^,,;}Ǒ;q'ʤcnR{ c}sIi1Ɵy8dRȖ35,5z1_x-o31G<͸RD́$Qr՛SB'_sVIц#:/㲀^;\/20\XkLϤ{bTRC~͛7Xs='N2H/̲دYg_EuYg-ܱcǎK?4cGo& g`i#(b DtE~]kX[&xMŠ'B?żkUtOaR:MNVmŜ4XL!ݙA rR.h!ƆB 3M%'%p|ߋ{HP^eʧjB=YjCLe-ƐHlDo G DN,q xo$ B Ca5D{Q*JESb=h@b!:Ua  T))D!&0ߒX$L>*@ K%E<0pO>/AG,y(kEu4PB9}fgC5?-mkdocs-1.6.1/mkdocs/themes/mkdocs/webfonts/fa-regular-400.woff20000664000175000017500000006155414664334534024057 0ustar carstencarstenwOF2cl c6$ `Pʃ˃* eAQQaI=jo_q<:/kA͸k^w^tsd/镗vJN`Y .Oؕ j[JUVViƲk}6YJG?{cA0 &!e1ш~J4I0@Z:jˠ%?P-Mh֭RWwKj~~_z?nd D`Ot 6Dٓ& M!2 AC1Z9UX}Z\ݷbm^c̪,ʴLV%f$Kei1fݟ#'-?._ 5beC?EcB2\)Oa:p^vay5{'5:6'Wxߣ/%^ܗqKuJn|7路ۦP/yIJ#v= uM=Wc<"U8W.%;nڋD]%0 */k}] ɤMUЛ>@1! eHF11eD&1)xjFg;O ⭪VnzZgWM;. vv{]aefeeqޏG_4L#4Rc4V5E4Oki}m v:PcuNSPb]unӝ[F}cO6h/!%$ĒDRIz(rRQJM#2]f\"ܗH^G.?֨ZA+j56_ tNѩ:SbݫCzXQ='Xoxѽ4^AW+y!%~;?_wI|( NaZВV miG^ 2{>w*R]H#i-c3ω˝D{hpOyBO sgG{;H)i.gUǎ+zT|7:qus\19s3%]Mffoz77-J`[buZ``X&&&[^wH魼tZR׭=V" Ar$'4J2^yp'@@dHePR 8 g aWAAA|AY+.P׻>CoG$%^_R0!F8DE41G< $D2)F:6dE69G>ESB9UN jRԣ iLsZӆt#t+AOz1Gp^Oe0,a%YZֳlb ;0G81s"h-" K7& *@o(`8``I$`I`IF4`IF cl`ƙL`&l`&\`|?h f]!60RC }'* 1'hݼ=U VX]`uN8 V(X=c`: Tu`=,> @| X$d1l n ÏP@P_PP ;A#@)h 4tM@Ӏr< h-*h}hh TfjA~#Zڠc7 : 1@}@@ڃ;ng(v.P<]<@+SPj뀊`ϘT{y޾;!#O@MAp;`] @bP$N JIIlF I| |*\ck+"f U@YT9RgK H#cLZ7d ع"X2= 3@fnnA]@N\;}?G`^W||`k 5C@ˁVV4p*(К#06h8)70@Z;Q@yIL ;,Щ ;@X9@x)(t/0tdCf#eHAn'L ^ ,m _U pySTөf: pSpR\4{(=%J?p2\ W)C50p2ܠS(WMwgl @=+Cȩ69C\Fr'#x" |J1eFQ{RQD"B&J_QP2@9΢즜 (aHX= $QPnrRS۔<%e((Dy2W7)EyKrJ)kD֧LـVdCJw(KDvLE@"r e}"0_nw@!!eǔU"s| G%(GE~E9"7S{ߦM.PH eMPfn(m4wv p+`עz<#`w;L~ Rv nP3<,( 9 vnn\؍(;SUolo< S8}bgA|9< /Bӗ~-<>(qov(o=)iUl$@Gb40ah1C%_ Г~T<JE"<4 A(+=zs}}}C޷w4Gpz0pn{Nwmܷ}gM0&,c 0`ƥ"/e+5a:cD,/tZ'cBo5[ՂDZ?=a+MUӸ UA5u<+osyM=1:?1F܄y{ƾ>'mtt#rhFĚ}eD#8l6ֱZ5yƵ00-UUk.*8i }8#b_ƍ%JiM7Y}H&'\>/,ݑa'@5O@ҔcycӸAQ|yJӭt*%0xBRq3iX%HaF6,cI-O%=d!e€<1孺~R:BH˽>z5R H).æø^$aBo})m˲ "TjMN{K GbICGeiR!]KC}etA׸퐃ꯉJނ$Ty/ ey]=\*WuW?쬛KmhwT,X+Y^ysu'\?Uה[+*4{uX;xd5ojeH{$ʺѻDž7tob[P=`Q],8ZAԘu\ (,#yB#?EcP,BT.ܧW% 88͈1b2S %r TtE a> D12jb(&/sjv^[,V[ZZ%hυbX\\_14!?-6[1Cm`KK{_* lii5? !+] 2Zuե%v8+X#x"3BY1UMy(L~͏wfYwLqq7Q wnuxf]%Z#rQ,%ߘoPk!e"VԆmJաn۶ w۶m税S9b M+G ?5 xsx^JqgyJjnQ[dI!fggbֿjnףwu!dn4MsfnaaaavœRyHl9pr&]-ZyGU}Gc6:86Zx S&\C޻#}QU`hZy\uҧW>ןYix}uݤ"_o$Fa5}2 &zczk (A+oqTݕV?]lnϰk9eV;|noV}:833#b"a3Y=Pvn.3:+|Pma?<^&?G[a\M:\R'hֺ":^kn[d {ȏub$fW/ZL X&ju:u= H43&[XE%`ΑW1m+sBH|IWWY~|)x~0NsJ$'s *=xs'[z'JPι%;le(Rq0TDkH-^ [d /QMh.;sWC#{NBbz4JCU*{PT`'0IR1&u6?QJR}#'O5QJ‰ qi(Q7|{{y_^d 'EJaf^Tqƙ,8\Z}i^ïR<x̙S:j7~z $a'UJ9Wi1CFb{x}?/$lm{ܓ>'spN!<}6PoEg:B<+~Mw׮jiwsrc2 ̗ˈFٜ3Zxtn7|x?ǿZ|g|(ٛ um/nIn,LE,m AE>Q%UI\5.1KeËAIQn&]mTbËV١L#3LY>VlfȐss84%MQ JigC_,ošIdYQ ILJ%pYn-rs!sx#mieE)Ez? ׮ ȧPWoa/vb_#4?]ܙJJ[T(& ;i04>P#1D9.vCIƛ^7aSQ{Lu\E%R3A#qDoή9ҊFYTt" Xgf|}=oo}1f~csG~6c9M|$"I7|~k1á3n|/pKQLb11e8U \q@e3kמmfO@H]@ůD$T]m(E˙j"ګ;U=8Y{s1A^.[9v`gxWMY G鲅#[33Ex@i*.>a1,2 ׊RgH֯UX"Rf"Td4v$IW[>3UMQ%um=T$Q盈QTJ%Cj4 |r4쥦6U91^o(Y$,@ZKKO~$WTѴ @J@xdЃűEG/ iAV4ކGHSlrz["VemY!+[Q> i>aD2)$ƌg|:g Ƥ6SO{nXW~+OS,HaWH5O,zÀhjIKP5iv`i>ʡvk*>2>% ϷDlMr)JGHj5uZ-Y>% FCxy~mk^_2.d lGb5Ui Kq6 Bչ1˰>u[-S3ӻDnjGi;n=tdz>xkDtծ%8,) AAK MkQDx?eI;r]$U v*Dy-\ mpG8|6Az:a>{Qt5aC>%8FA9Qp~&JftyͅpSXN`mrEvĨ}5yI‚MͰv'atvlWtIq{l!=X5Ѡ7Cٝ|]KS*,\.~'/w|o3`[T k iЫw,x7cmol q?`6f7=3^8{U3P2a-l_-S^5:S!~kUh48/JM6 ~9 VflV*̗R7tge2{>˲\RcfO/2s_ ])QYabv3+ί()g_;r!=ّc8~0WA09S)^ df[R#/5n6 R#Jݿ[e߬z.byokIC# !C_[^DHd3Zu T=$?F-?Cdz#r{ze„ *8BbnJ(XQD ,!$ UvbSzZ|~e[[YIR+{bqֹE$yUM(n!իZjպoV;J9˚KϿ5FqGiUC؎#) @9!pexG-Dl&\itQiki?iHE Ox: dS"吱-Zܱ{'Z{42.0<*'—ˢW0 aDz< U{mfӤz^u:Iag|48wwwwإNv ӅLy"n_ql}q\"82.bGnE* f} ;YqVJ$K$minۂR/{t}q}GױcW$*X_$CT)R͔%*D`VӧUIZNm,re~\:\C%hT$F(PHTZB/~"ҩ_yvH>M㮵LyA96api=(:UnRsb1Y/^>K,B&Sz&~oB316Q}&#ndm+E;C ~~#]g%WmucHxαY ke5t1[%d5X2mF!Mț%E G 0]v;z%+ vc׍qy7FWzjZ3oVln!爜-MLtIHn:,|*:8@ TSѰFZƳρ@ΧAR.B)CTam< o÷ !4d&D&0x}ԤI;U&s Gԑ n/\zQ]UF`4nNDz3#vfwvvQ5!MGh_EL w<FHU LOt63H1S-& YbX5cflq~ss~`.ݹZWsmmu)t+[q:y=i0 <"0 )7͝|fEn1af>=7@R;aJZ5QHw+M( CC [z_uXrQ*D8ʋݘ`@ ant=o?ݺnļl#~gw4/|: -}R͋>wߒSN&;4ϊ3癅BdY4iVXq`** TU`L!9!Yq5Ӳ$UЍ (e3gpɹsYחt$~y?VT8ROeGf/ms3EvJ=IޅfW{ؕ{d !&߉iBd0˗ie$jb n;`tMް3ti ʲ(Rm!QU ((\;QO^;N~l"ʒn IRFTdAu" FJݘ4@fyڨK.2:9Srr@\h29}3JٶmGQe*r®mGqW#"#ՠ<o48gdts=>ͫPD#cP ' ZsܷhF e-p=Pb/*ZФW%?V2 suqUY!CJhFJk)ڐw(˲Lk64<"fDH8JAg%&FT}WA Y)ƜPfǦ'p qoQtG:َ! ungx[70KIbL33bY B9S]W-UU39elT?Zt :w :& :ݬj mc-/[iұsɲ{~h3]ŀvy"Ο;diYEpH\I^_44h9xd~ͣ$ Z7Z/i(4+,X+=YVl_Wd]eTuuJ)_FTtM2Gn> o؁wrPi80C]G+Fe6uR$ HƼDfsem$ԒwhDN=vbxgNL%^q]ar+=pͰͥQ\D .=HbJ'j6}jrDv}gnY>db(MdJrۭ{Rغ'<Kl "sE0 Qg u2]_dє7\o:A󺉤<̿ cp/Xlպ(BCŲ1c2hyAD0׭dBƘ6G~ay '2>B8ae61EƖaFfW[),e|)42EcA\h5j5 dbus>zr]Ƭ˴mqWm;v?q.D?:ݿ:w:#X|ЃUBkZx^"i!$E}7N۶4"Fkxŷ]g~=q1ݰXS 0M*_җ?g?Q)nuk4 `>ӶơnM8DEDv\r:?)ODtX8NnNsECa,ۑ_}7CȚ q꧱7C3E&Tr;-g/Y4*.rMQ JXsy̝׾XnS4hh8X {H~Qv<'Ӎ8.7ea,|/S\lzlJ%<ۭucojx:͸62S*TU%@{nә+,ws]:!^SƉjk4YiA0;q_S$'̣uJnk4\vu 54PYåW{?*?(׮~.8 ~ODۖ^[_]0kWoI4Br?W۾~?ʮaPQ0B9$hqZ9 ꝇtkjxW^֮qV^Xs^Nmx8 `&6/!T:MƂb\:"_p7v)Ffb?݁LE9,"Ws=,{y1cm0Vv ,ݶE4 ']NU]:^ޒ i.YSҖ:k|?(WN o"_T=6%yssNGS;iB?k Ky*:42 wt>]+XT3T4  q=ЮMѦAt# W c $٫vͅvbv6UQ|2HrSJgVL<7Q?~ܑTjKU#DJfJA"uޮ':yD]PE,vSϕIf N&P<r lP cg&Ky>I2P5vUˮTXjVKqjjzCYrr9rs0ˎ 1i(Sf˗5 oL|x㢦kz:T#5d\n(lⳕ(Tˮ%vGC>#?8o7"C1[q_jE ;}AՐ)(hit3)0Kq1Ύh$Y)iRٹ]ɉKA(8Iz~0 c6AG.JJ1J)oE#4?,,> v9_KGy= GEβGFIh$͇4omu qQTdh k?t`ug7nܸ߮Y[:֖L5 ǎ:-v'87e?z6,//cme'' jp'@L\ŗNQBy `6^sڷ|7S\Mt עv9Cm̎8MY6B*=I vXDq~%EC sŘHI*ljf箧u$= ӠQϺp:]g4NN8[_%qSLpP>p?Vs U8+b \ kS_EECIE.HRTE)FqdkJ4b~g.QX"MC%;יZWeIr=IBT!Z()+?4 %-%U5Du6e jDD; N=<0yjE, A$VčLD I/3u~XN6(VY^&0PB">%Mo^؏ eX~v@'ث:aЌ:jZ2Lݴtmr8cW:a_X\?QOu5}^EKT=RɫҎf:k2]G;%AUt2uMsK8nsy{D;d;͙wy:%6C.I$馮k& 5,׽^/M;U䇋^VL= !#)#﫭2VjI-v6%2eX~_dy&c@8m.Zesq{@V TdoMABl"Ir4dл$MޝQP1x{O0@Cu.bD&!LFxˈ|_14-jAs"aUz ex~vU㿼׸|GZ_y8~P✯+&;;Ks6T aH+(bpG]6غ7 $-;#*yOyMC-<$zW D+1cLF{iZHaJAixz؈4){eXVZ]H1)N.}x *JqE[\Hb7C ^2_ I`rj /,}}aznz[;=#}IWܜ,Wظs8!Գ(!^7;lvhU0.\p ML` }0Wl.Q`HWunڙ=IXAuԶM-_! кqg& .6ΗxHJ9v  G4|ryh^ܻIe^cF)Hi& ,)̩Rqp|< 3EOtqo_3ɤ 8z}1MWڹ"ł[>9F Hl/piV=.p4a]7 .}\HqEt_@Ιh=C8ΨB"`JUA^|a@_qgqZg|D)a:p(C?N7/yh}O3b2RnfC6n*!/_fv/^= qY3&DU1R & gx-ܲ}]ZZ:{.\ٳgw-…}k²,yg>|pꫯ;~qIyΙS[(݉T"+Z{'쩍9B#Er"x)c+ep3d!\K,lvEJR?ڥysRQ3e$.%pYi*D{vl e_Xkq+q1WN:t=wt@8B Ih`!͠Ir!6sK4}g(Ў*-%JP2Z{@JRqTmpx~fٖ߲YY#N}n~8h!NZc.;=O\h+!tEa41;6#XZN ^/_@{Yvol@z^MdyF a5ǫ˞ l `_jtO~⎾B,~Z>.M"f:zezzc xi.{.t}Q\(!C㟇uTzT I% l2Xz,&Zq27g"b?_oDefM &\Z4MS_*h%Ma-E1#mi5 VP2Kf2VLCy=ٛmnfU1 I`qhy-&g#壔 7 ^`i:W Gm3TQ%p;{qJ16.=6W[s'ZF'c퇌8R5RaZVV-[kLB ȶEl)#9P&L:ܣQI3h@67` ;-7iYrUe yVj4-ͩ^ќy5zEmTͷSuliÑ#+E e$DώIƙ`m\pD(jvVv cTU2MlY'|P=Q\ cS9Eah?^2}ڰ^zמּYܨN4[I2YV'@`ʵ֚S @)'k5c0\(N1 W0r> :?*D>X8fDR+Yʾ)h2 c!s2L Pa:T{ YIziEe/H4KÞ24WCeiGJp͹aI ~5~PiJ`8ٴicԳc$&n{Imsùt]@N#.0:2qsflԠ'%h|ɋNz0 c?ʸ _6'UO˴zP.ڲ)ߝ<…VM3i{-Cږ\jIu]JڲG=먋6$Pn!O31 tB&<| (, 7~8$ y7 g<oHӔ&M !!DRUHGH\f o!^60\40pRXlF@ʩ&\lLxpۃ3[H}F'A%nǦ yij?d1Ri1BcBXLXy_UUVxFZrt=z#B`S˩o'mg&Ѡ"V>]EMYoN5X}0hy H$%K(ؼy͛'hп kEG*W\yWTY̯Zkh .1]hHEî Jt{ no\)F- 09y [6%讅y< BA Ŧ_j/]&% ](8 6Mu`FC3%hE mKhd6b\Y A8`'7z.|jU٨MSHEdU769^%3b$^{,+ۺo;۫U_,Z0e.Z4}V2&+ t *P&[`k=#Qk.櫖6K.ߚ0g  8P\+UzCt%''S`gJ%!DG3a49u ݈Уj -@2ʩ>Vqw9D)8߯A| ۪ /e&ą!'wHNjyVZ+;Պ}f9<(}*Z)]8JζIt/}c;m]kZ+`ܒeX'/i}߾i.FJP$F/&gYtE=8ܪ_7z_,Iw"5Q)fac`@08p0Dp>0JߝKM^>xŨdv}wl fV~~ޗNC<Nv±ߊ^{w2zMLs5t1`vEIAtG7(|RO?)aSfY>נ;4(Nm4X NyOƳ60F !264#19-D9 x.¯4>t])mV$7??!X0ƍsE4w$<"i}֫ w}}?5Ω_Sco8qz |sxP .E;K?uS=WXwl}hɝhdctu.N=3ͧWz&90>܏ŅO{A`vpz??܆}6ٛͯr+SU<\YJ]]VWQ6uo kn68qC> 'A^[E$'Rp&B'l7"g%| K!1 Au y!| vaU/6 ElGٿ!emkdocs-1.6.1/mkdocs/themes/mkdocs/webfonts/fa-solid-900.ttf0000664000175000017500000146361014664334534023307 0ustar carstencarsten  OS/2akbS(`cmap DHglyfzu head'h6hheaL$hmtxloca_maxp nameM} post@Lud_< kukuooLfGLf AWSM!KA @@ @@@@@@@@@@@@@@@@ @@@@@@@ @ @@ @ @!!@@@@@   @@@@@@@@@@@@ @@@@@@@  @@ @ @    @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@:@@@ @ @"@@@@@@    @@@@@@@@@@ @@@@   @@@@@@@@@@@@@@  @@@@ @@@ @@@@@@@@@@   @  @ @@  @@@ @'@@@@@@@'@'@@@'@'  @@@@@ @ @ @@@ @@@@` @ @@@@@@@ @ @ @@@@@  @@@@@@@@@@@ @@@@@@ @@@@@@ @@@ @@@@ @@@@@@@@ @@ @@@@@@@@@@@@@  @ @@@@@@@@@@@@ @@@@@ @@@@@@@@@  @@@@@@ @@@@@ @@@@@@@@@@@@ @@ @@'@'@@@'@'@$~$ ~Z !%+9Zabcdefghijklmnopqrstuvwxyz    9 : !"!!!!!!!!!!""####(#)#*#+############$%%%%%%&&&&&&&& &"&#&%&*&,&.&/&8&9&?&@&B&Z&[&\&]&^&_&e&f&r&z&{&~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''''' ' ' ' '''''''''!'1'D'F'L'N'S'T'U'W'd''')4)5+ +++$+P Av1<@Rcim{ "-=@DEFN[\]^fghin~ "#'()*.5:>FGNTUY^ex -69IJNP]lwxz{ (28[]`c"$%46:JLPS^cmy}!#*0<abcdefghijklmnopqrstuvwxyz    9 : !"!!!!!!!!!!""####(#)#*#+############$%%%%%%&&&&&&&& &"&#&%&*&,&.&/&8&9&?&@&B&Z&[&\&]&^&_&e&f&r&z&{&~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''''' ' ' ' '''''''''!'1'D'F'L'N'S'T'U'W'd''')4)5+ +++$+P ?Y19@Rcim{ !-=JLPS^cmy{ + % !~2+(v_UFpWON+%#!  ~|zxwutsrqpnlkjihfcba`SRNMLIHEDCBA;:987654210/.-,   ~|qonmjfe^VUSQNLJFC@10'}qnh_NM@?=<:9876310.*'&%"! ~|wrqolic`\ZXVRQPNJGFDCB>=<;986*)%    { y x w u t n l j i h g d c b a ] T O M K J I G A ? : 9 8 6 5 1 ( $    ~ o<>\P6 $@^zz8r~t|nL"nnRn`Vxpxrrxj*.."$$8*.*""j,"<HFt:$*,2 ||JzJH42~8tl8:4  jr4@<jj2dRzHrz|xvBDfdb`t\|`fHpnf\4 !"#$%&'()*+,-./#-.0567;=CDEHIJKOPRTWouwz}    %'()*,8:;<>@FPQRSTUW\^_ioswyz{|}`a $&-247 0!!#%*+09<Zaabbccddeeffgghhiijjkk ll!mm"nn#oo$pp%qq&rr'ss(tt)uu*vv+ww,xx-yy.zz/D E    O  P 9 9H : :I       4 !"!" !!!!!!!!!!P!!Q!!W!!.!!!!5""""##J##K###(#(W#)#)#*#*#+#+##############@##########$$%%%%%%R%%%%%%&&&&&&2&&&&z&&$&&& & &"&"&&#&# &%&%&*&*&,&,&.&.&/&/&8&8&9&9T&?&?&@&@&B&B&Z&Zy&[&[|&\&\}&]&]w&^&^z&_&_{&e&e&f&f&r&r&z&z&{&{&~&~&&&&&&&&&&&&&&o&&&&&&&&&&0&&&&&&&&&&&&&&&&&&R&&R&&&&&&s&&2&&&&&&#&&&&&&-&&&&''''''''z' ' -' ' ' ' ' '  ''F''a''`'''''''''''!'!'1'1'D'D:'F'F:'L'L'N'N8'S'S'T'T'U'U'W'W'd'd'''''')4)4_)5)5^+ + Q+++++$+$R+P+P0 23?A4Yv7UWYZ[\]^7_`a11c9<d@@hRRiccjiikmml{{mnpqstuvwxyz{|}~ !"--==<<EEGHllssvwz{%'/2OQX9ZoAqtWv[mt~->RUu!>@@FADEE}FFzGNP[\\]]^^`fgghhiijnp~;"$-.08<=D\ L R OQiSX "Y##$'\(())`**+.a05e7:k=>o@FqGGwHNxPTUUVY[^`euxTSC;R !-3689@IJJMNPPQ]ll qwxxyz{{#%'(())**+,-5o9;<=>?ACDE IMN((O2278PX[R]]V``WbcX67Z\]^`abcfghijkmno""p$$q%%%24r66u9:v<<x??yAAzCC{EE|GG}KK~NNPPSSXX\]__abffhmprttwy}}=~% +,,-01125667@AABKVZ^fhkov{}!!$%)*.077;<AADDGGJJOOQQSUXX]^bbdfikmmoottvvxy{| ""()++./;=@@CCGGMMQSVVZ[^_iikloprs|}  !#%'(*+-/2348;<=?@ACD   GHJKMN'*O//S>>TJJULLVPPWSSX^^YccZmm[yy\{}]`bfghjkl mn    567 !!/&&''))**--H112266LKKNN~OO~hhIjjtt<wwxx4bvtX1Yty=L  1AAMMNNQQUU ddee{{]4DNLhhOMK)dkY?        ;%%''((,,44R55RGGIIJJKKLLMMNNSSkknnqquuww{{}}\-G`E\j659RA:;<>    j  =UNPOBDC  ""g&&3++w,,8--f..r33266ZBBSDD[h>#71U 523gdc(RRRRR  ##?))@AA"BBCCDD;NNsSS9UUZZBwwxd~i :Lyyzz98 dd@    P @<  00 0 D !("x#%@)*+,.1235 6X7h89:=x??@ACD EpFGHIJLpMP0QS0STXU8V8WDXlXYZ[\]^|`a\bce,ffgi8j0jk\llmoPp pqrsXtuXvTwxx@xyz{|\}t~\dd@l\L( PH\X$Pt@ 0lTHx`„À<ǼX֔؈p@ߨ8`H$0@tTT8dD`d t h   8\hT\ H"T#$p%D&'()*D+,-X-.0<1l23t568:4<=>?<@4BCEG$IJ\KLN O8PLQRSUTVXHY[ \]^`0abddepfgi\jmnopqrtvHwxz{\|}~P@ \D4DH<0tX44@h$0T( xŔ|ȸ,ɤ0̜͘lL|`҄ӸԌp4tڸTܜ݄ޠLTxx h|xdP@l,L\TD,4$xx<,x xx @ \ \  4D4X,0D$ !""#P$$%&')*X+--.D./01p233467`789:4;;<<=?P@AxBBCDDE E`EF FFG GHhILIKLLMNtO8OQDRSDSTVWtXYZ[([\p]]^\^__`_`0`a8b(cdLdefghkl\lmnnopr$rstuPvwhxHxyXzH{{|(|}@~\$$ <l|xT,0p8dL0xttlPp $X$|XtL4¬ÐČnjxtʐL4,(Ӏ4Ռl$ۄޔߴdlxDT\D|$L<4t<   `   XLdl0 8#%0&(d*++-d-.0012345679:;<|<=>P?ABC$CDEFGdH@HJLKXLTLMMN@NOOPQRRxS(STU8VVWxXXXZ Z[X[\P\]|^_ _`$ahbbcdcdeef fglhhikkmln o0opqhrTsHtXuDvwwxy z{|}~$X8d$dtd|Td8(Pp,0 4xpL xt Tt<̴`фҔ\(l֬׼@ٰڐDxD($t\$p4|( hX h T    |<(\XpL0 X!d"#l$$% ''()*T+,.01235679;$=>@$A|B|CEXFLGxH(IKM@O Q`STV W$XYZp[\ ]4]__`@ablc cdefghijl0mnotp4qrsXt\u@v(wdxyz{|}~p$|L(`XT\<<4ph4l(<P X<H@lƌʬ͠d LxD(Dd HT$ p4p0LH     L D,8pD\(`! !"#%|&( *+ ,../01h3T4l5\78 89:;=>?AlBHCEEpG`GHPIIK|L\LMNhOPlQSTUV`WdXY[T\T^_`abcLddefghilijHk8l0mmo@opqrsDtv0vwxhyDzl{}x~< Ph 4$hdX  5777'13#3'17'17#3#17%671167!11!1&'&'@ZZZZ'ZYYYYY3YZ     ::   `  M"4'11&#"132765676'&'@       `js11131716761312##11312##11'&'&771#11'&'&771#1"'&547633171#1"'&54763317167673171# _   : E: E   _   : E: E  __ ;E ;   E ;E ;   E 4~2111230111''1&1211#"'&5510#01#111&'&'&'&76767676'&'&''11101&'&'&'&7676767514763 0  /0 1     1 1   $       ! #       # "/65114'&#"1327&'&767&'&767w @    I @ $$$$$$$$J211171611''11#"'&5511'&'&76771'1&'&76761514763 p  rs  p  o  rr  p  C DE C B EE C 14'11&#"1#1"331132765513127654'&##15      p      @,6711671&'&'57111676751&'&'--DD----DD--))))D----DD----D`)))))&'&17711#1"33327654'&##1`  .@ `` @ @    `@0"1#"'&54771671312#!1&'&77167&'&'" +<>())  "` *)(><+  ""@D47116331131#1"'&''1&76761316767&'&'#1&'&771#1"'&5  :&''&:O   Oh   x'&::&'  x 96'11&'&1331132765513127654'&##1514'&#"1#17       kr  P P   @?67312##1131#1"'&''1&76761316767&'&'#1"'&77! r:&''&:S   S !  p'&::&'   @#>6'11&'&101016767&'&'711#"'&'&54767632  %--DD--*+@?   k  +9D----DB,-K  D471163!11'&'&71#1"'&5       P @"Dc&'11&'#13167674'&'673#3#1&'&'67673101013101015011101#10101&'&'6767310$%6 6%$#$%6@6%$#@   6%$$%65$ 6%$$%6 $5@@81132767654'&'&#"&'11&'67671'&'&77@   XA+*--DD--$ @  -,BD----D7*  K1111'%1&'67%16}   @ n     @@+"113!127654'&#!"113!127654'&#!0 `  ` @     11117%167&'%1&   @ n     0<I6711673111132765514771676551&'&'#132765676'&'P +'  *$%6 6%$  P   "0  !6%$$%6 P]112#&'&'&'6767671&'&'&'6767632113276551&'&'&'&767R6666R H9:"""":9HH9:"")-$36%$$%6+    66R@  66RR66  "":9HH9:"""":9H )!!$%66%$ P   R66$$$$!(&'11767713117676''1#3#71 x(   (x*HH`  LL  ` @/>11113167674'&'67&'&'##3#51313#3#15@6%$$%6`````````$%6#"06%$@, "327632#"'&'&767632#"'I1<<1//1<<1 DVVD,,DVVD 1//1@@1// AA-9999,BB +67116731#1&'&'3#3#1316767&'&'`?2332?`````D----D`32??23@--DD--@511113127654'&##1513127654'&##1513127654'&##@       @-111132765513127654'&##1513127654'&##@        :116767#1"'&54763312&'&'&'676767'&'D----D;++ }  >>Z?2332?X=  ,?`--DD--$#8  X9:32??237  (2%53276551514'&#"1!1514'&#"13276551!@         @1"113311#1"3!127654'&##113127654'&##  ``  ``     @  @*2111&'&'51476321676714763  --DD--  ))  D----D   )) B565114'&#"11514'&#"1132765517117676''177 .   A j / x kC  ˍ @2111312##1"'&514763@       ,617161#"'&511#"''11#"'&5167      $611476321'11#"'&5167    ( = 5"1132767654'&'&#11#"'&'&'6767632+%%%%++%%%%+45;;5445;;54`%&**&%%&**&%=3333==3333=@.67116731#11#"'&55153#36767&'&'#1`D----D`  @```))``--DD--` ))@71167'1&7676167&'&'&'&'&'6767671'&''@--D,#H G--DD--5D?2332??2350 .D--V  U*7D----D"32??2332?V=9  8B+;111132765513117676''16767&'&'##3#5131@  _g T(()=pppppp""   x$#.=)(""Dh013'1111&'&'&'&#&'&767627676'&'&'01&#&'&'&'&71'1676'&'&'711&c 8 :7E    9  8  :7E    9 W   $@     $@  #"1133113276513127654'&##        `  *2111676751476321&'&'514763  $%66%$  66RR66  6%$$%6 R6666R 611116761&'1&767     9   B.6111167116761#&'11"'1&767 nUUn  QQ   $&   16'11&'&1'1&'&117677117676''17y  k     %&'11&113276551716'&'&1':      ז   &471163!11312#!1&'&71#1"'&5 @         L +i5'1"37171331127654'&#1514'&#""111331673123312765&'&'#1'1&##151'111#1"1#` `` `   d!;;!$ @ --D    ``      @ ..  D-- ,, ,j2111712#'1'1##11"'&54763151476347116331716331517111312131##1"'&54'&##1&'#1"'&5563211#"'&551477 ` `` `  `    D-- @ $!;;!d           ,, --D  .. @+ +A8H%11#11!1&'&'51#1&'&547%162151476331211%1316751&'#@    k   5 PP   ^% y. ?PPE-@Sd "13127675131676''67311#1&'567&'&'&'2711654'&#"3'67&'&'f B/0   F@@N4444A   %'&: 00Bp@@044NA44   %:&' %D[}6711671&'&'4767571110016767&'&'010151&'&'671167&'51&'1%#3#14'&#"1#11327716'&'   "" 00 ()==)( 0  P   @ @P  ""p 0%3=)(()=3%0 ` ! 33 ! @  @ @ %D[|6711671&'&'4767571110016767&'&'010151&'&'671167&'51&'13#3676''1&#"131132765   "" 00 ()==)( 0  0  @ @   P  ""p 0%3=)(()=3%0 ` !  ! @ @  )4AMZhu1113167673327654'&##151&'&'!15167"51671&#55671&'71&'51675&'5167676'&'5211#"'&547630  ++x @ @ `Ppp----    **   @ qq '((''(('p   bk~&1&'1&1'1&1'1&1'1&10111111111"3211'1177117712327176''167176''167176''16767176''16'716'&1&'716'''112337211#"'&54763767&'771767176''167176''167176''16767176''101656745614541515111112#"'11145716'&1&'716'&1"#"'1&1'1&1'1&1'1&117717111&#&#11#"'&5476321            000   @             0                P   0               6'&1&'1&1'1&1'1&1'1&10101111111"311'1177117717176''167516751176''167176''16767176''16'716'&1&'71111'7676'&'7&'67 !     '  %     #     44                 $  +  #HY3#331211!1'1'1&54763'#13!67&'#171311!15167673!!!1!1&'&'5]sss  U $/ 00   O `  [@@ @@@@ pp 0  0B)]g5#11311316751316751&'#151&'#167116'&'&1#1&'673327654'&###"1#1"1333277%3#311"101880880P  wy@ @^-#-% ,$88808808   X  $ @ ^^~21116751476321675147632111#1&''1&54763214545147632167514763&#"11113277171654''1'''11#"''1'1&5477171632'11#"''1'1&5477171632@      /@]Cq  <   000000000000  p   &?k  :  00000000  %2l|2711654'&#"32711654'&#"3&'&767545015147677167716'&1'&7716'&111111514'&#"%70716'&7331131716'&&'11&113167&'#1&'673167&'#1&'673167&'#1&'673167&'#11111#171676'  `  .< .  N >  D+  ,   /   ? <''3\  ||    |].        0III'#"7..%O   k uK1 G***2 @/// (  %('.      Aa&176''1&''11'17161131676751&'&'##'1'1&#"1'171&#"1'131176767176767' P  M  *  LH!YR#~wu  l\  0 j {<   /IBc_%%  S 7Odm&176''1&''11'17161151#1'1'1&#"1'171&#"1'%%131176767176767%''#1133127655&'67%5331276551&'#67&'' P  M  H!YR#~w\ 777   0   P  0 j {< /IBc_S ,,,  DW`ir{76711671167311##1111111#11#111#1"'&551&'&'!2711654'&#"367&'7&'6767&''&'67767&'&'6732?I77 * mk P( .`  p(((>32--E5    I=M   xx6]fox%'112121#1'1&76167311##111%671111#11#111#1"'&551&'&'&'67'&'67767&',,, +'  39MI77 * @;>+ "P( .h@(z""" "  (,--E5  f:1" I=M0  ,Xk74711#1"'&551&'&'''6767311#13#311311#1311#1311##15167016372711654'&#"3  .56DI77 * !8   0  ! I=MG:##--E5  @   P   6w76711671167311##11#11##1"'&551&'&'7'&766767676'&76767&'&'&76'&'&'&'&'6767&'32?I77 * @  .        (>32--E5  @  I=M        `PA7DW%6711676''1514'&##1"1'1&#&1311!16767'13%&'&76767116731#1&'  5   j  A $$$$p"@"  /y %^    ""-6X631121#151&'#11311#1&'&'51#1&'&7753151#'471163312131##&'&'67315 @@   І0   0   &@ pِ   _2111&#"514763&'11&51676721"''1&'7'11654'&5456301636767&'&'"'"'4547654''&&'&'&'&76'&'&'67676'&7676767767#&'&'514567676767671&01#"227767&'&'67@  } # & H            HHH & #  qH | |  '&,,,&           E&,,,&'    l 4Ag676'&'67116731111#1&'&'51&'&77%676'&'&'673111#1&'&'5171654''5315167611'&'51#11''1&7716@  & ,+@0      *,     0@` @@ ` @@ $$$$ @/I  t2$$$$ 2t  I/@(  @@   @@ $E%3#36767&'&'#1'1&'#11'1&176''%%1131277131131677IIIte 8( P NA  *+g19 B 0 > nn :r!%?a531513121327654''1&##14'&##1"11131676''1&'&'#531#11&'51#1&'67315167<" "!< @ c    ``` " " x    !%?V531513121327654''1&##14'&##1"11131676''1&'&'#11#"'&'6767632<" "!< @   ``` " " ^gp&#"1767676'4'&''76'&&'&'&'&76'&'&'67676'&767676767&'&'67  /.VV./          HP3EEAB+ +BAEE3Pm         [m471163232765&'&'1#151&'&'#1311#1"33327654'&##151673167&'#11#1555!11!16767   ))@00P  P88@@))`  ))    )) ,]s676'&'676'&'74'11&#"32765#1&'&'676731&'#11!1676751&'&'11316767&'&'#  p$$$$`   )))X))@)) `    + )))&))))`7N\"1133116767&'71654'&#"1&'513127654'&##111&'&'51676756751&''"1'&771671131#1&'5147716551&' L11;;XX;;  +9 `p   t  %' ,@'   "88PX;;;;X@1 # "  ``4```  `  ",  , /=X_&176''151#11'151#11'1!127654''1&'!11'3#3'113#3#51#11131676751'1111111' P 7@@+F Lt#UUUe @  @ 0 +ʘd4"  r O  P  A3$5Q]&176''1515111#"'1'1676727676''1&#!1"1'''#151#"'11&'11!127''327' P W  ())*:8ܕ@jjj! 0 Dd %%%[ $,vvv@ SSS'?R&176''16767&'&''165&767!1'%%31276767711&'&54767' P n&)); "&9H,        0 V55MR6666RK5.&,243'0-L55  A1EUb&176''13167&'&'#1"'167&'&''167&'&''11310101&''1#11!167'1#7676'&'' P .*)0)"+'D. I8&&J@---- 0 . ."#)$  "".+9&&8'((''(('4'11&#"1''1&#"1#1"3311327716132765516761327654''1&7673127654'&##1&'&771654'&#"1'&'5676'&'&'67     &   &        '   '   p  &        &   '        &   8IS&176''1&7673127654'&##1&'&771654'&#"1'&'514'&#"1''1&#"'63'%%#1"3311327716132765516767' P    '       `  E   &      0 y     &   &  K 7      '   `i|17716131#11''1&1&'51&'&1'&7716'&'#1&'6731676''1&761767516767&''4'11&#"327651176'&&'&'&'&76'&'&'67676'&76767674'11&#"32765              00   @                         @  P        p  jx7''6711316767514''1&5515151&'&'#10101"101&'&'&'01"10101#1111113127&551477'''1&767761'&7888//F  0  0   000 0 000 0 ӧ   H J  J H   "x000 0 0000 0 kx'11##1&'&'5147716551515167673101010301676767012101033111111#1&'&'514771&'676'&''11771176''1716'&1'1&513367&'#151&'888   0  0 F//7        z"   H J  J H   ~      @`9%"113312765514'&#"1'1&#"1'1&#"1327711#   i iS`   S j j @`9"'11&547633121#"'&5511#"''11#"'&54771632171#   i iS   S j j)W "132771132765511327654''4'11&#"1!16767514'&#"1#!1"'&55 I  I  ))    J J  @))@ @ @U\e&'1#1"3311#1"3311767713117676''13127654'&##1'13127654'&##1'#3#713#31#17 H[ @ 3     3 @ [G@@@ [vvv    4  LL  4   MM@ @>GS\k"111#1"1111331132765513167674'&'67&'&'514'&#5#1513555#15135531# J F  0  0  00@  @00@      z*v    0%0   ````````  @````````  @Yhy4711632131514763211#"'&551#11#"'&551#1"'&55151515147633153#36767&'&'#1#3#1316767&'&'#0   # 0     ppp  ppppp        '%0      v*z   `@`  +7776731213121##1"'&54771#1"'&5 .   /  {    5F6711673117711767513321#12##!&'&'113!151!1")` 66     )@  `) ++  @  )@ @ @@%Gi7#11!167671&'&'#1'1&'#1#1&'4771&#"1'&771677163673113277161&'1#&'5 KK "z" M #21$ M #21$  "" M@ "" M a;G4'11&#"11327655167676'&'&517676'&'&'55&'&'6767  F,--,F  /$    $/@** # 34II43 # #  #d "!..!"  7Mdz2111!12#!1&'&'147632111#"'&551476375#"'&551476322111#"'&551476375#"'&55147632   p"      @        "P @ @ @   ` ` `   7Mc2111!12#!1&'&'14763471163312##1"'&53#32##1"'&547633#32##1"'&54763   p" ` ` ` `  @@@ @    "P `  @   `   %5F#3#11317171"#554'13'#3#1131717#111317171#!!!1!167675VVV\@hv\\\\F@@@h@&#11#''1&##111312771621127716136767514''1&747636133167654''1&771654'&'#1"1'"'&5&7716551&'&'"1''          3<py''1&547716131676751&'&567671#1&'67%67611'&'51#11&'&'476751676731567&'@  PP   "" $%6  PP   "" $%6( H H ( "" 6%$(8 H H ( "" 6%$(h]fo67&'7111331276551&'&567671#11&'&'476751#1&'&'51&'&5676767&'&'67PP    "" )0 "" 0) ""xX ' ' "" ')G "" G)' ""4=clu1311&'&'476751&'&'#11''1&547716&'675&'&'476751&'&56767&'6767&'2 6%$ ""   PP  ""  "" H($%6 "" ( H H NI "" ""  bU_i6'11&'&117677117677167676'&'&71676'&'0#&'716'&'&1&'77&'4767771&'   B)*      2'  6     \... ===>   -33F,%&G  4  *   <  0g(% R76711677676'&'&'67676'&'&515167217676'&''1&#"&#"111&'&'`--D?,  =X?2332?X=  ,?    +D--(  732??237  (`   7 S&'2@5>111311#1"3!127654'&##1'13167671&'&'!!11!@ E  E @@    @  6CY"11#1"3311&#272765515127654''&#676'&'"113!127654'&#!    #6%$$%6%     ` @    1$%66%$ `   $$$$   +8Rly731276''1&111!167671&'&'!&'&767671167311##1"'&553671167311##1"'&557676'&'77716'&'#1"@@@ @ E`  P @  `  @  ` 5 @ @@@@  @ {`         @  @@7W67!11&''1&551'1&7211#"'&'&54767636'&1'1&11771176''17  k=''@  '!!!!''!!!!'; %% $$ %% $$ //A)$0 O""&&""""&&""k $$ %% $$ %%E"111#1"3311#1"3312767713127654'&##171673127654'&##; 7k P- % % 7k P- % %  l    l  )!!!&'&'51!11!!!516767311331@   @@ @I"1111#1"331132765513127654'&##1513127654'&##1513127654'&##P    P P   `  @ @  @  `  :FP"1111327655167674'&##151327654'&'514'&#5&'&'67675531 F,--,F  F,- " *<  **@\ " # 34II43 # # 34I \  ) # "!..!" \\\" @AM[&'1!1"13311331677131276771312771312765514'&##15#3#71311#'!!!!1&'67@   ( `h C \\\i p   h K  P @; `{5&'5167'''1&766176751476321'&''1&76176''1&76176''1&76176''1&767655167514763211'&7716Pc   f|   %166)d5 ]] uu ]*%)%  %   @@@@000  0  `| ' +%$'d5 ]] uu ]**0b( +%$ 0  0 A(5G%11#11!1&'&'51#1&'&547%1621'&'&767113167&'&'#@       `""@     $$$$`""@P471163332##1312##11''1&767312767#1"'&5476331&'&###"'&5 @ 8# $ !!.  P   @     ,g     I67116'&'&1514'&#"1#1"3311327655117676'&''13127654'&##17U        h  z    z   j211163251476321'&'&'1#"'&551&#"1#"'&551312###"'&5476331&'6767514763   *   #    .$%6  /2  !! 1#$. -D __ D%?6%$   5K;..1 94'11&#"1177113!127654'&##15171676'&'&15  )      w     ' "B"111132765516767132765113276551&'&'514'&# F,-  *  *  -,F  # 34I .!"   "!. I43 # ,>P]kx"1###116771676751&'&'##"''1&#''&'&55167311%76751311%6731#1&'3#3#1&'676731#1&'@*"% X)l5DD5l)H&"*(##(U* #" *UU0E55E0U0P]6'11&'&1&'"&'"113276551676711767712765517163213276551&'&'7. "  0     N  $   +  _!  P   +  < d -6#-7ANf5!1676751&'&'!111#157115135#16767'3#31&'&'676'&''&'1!167&'!1&'&'5``@@@@`@@@@@'((''(('""3p`@@@@@@p----X3""CJQ&1#1"33113276551311767513127654'&##1514'&#"1#1'3#31''#3#51{    da    9w::::      @VV 5777'13#3'17'17#3#17%671167!11!1&'&'@ZZZZ'ZYYYYY3YZ     ::   `  .A^"1113276767327671&'&#"&'&'&#4711632#"'&5!21'&''&77163217163.  EFllFE    EFllFE 2    | FccF  E W    d         W ! 5AL"111"31132765513167673127654'&##1&'&'##3#51313#3#15@    `;++   ++;ۻ`   ` `  ` `$#8  8#$@@@OYdl"111"31"31132765513167673127654'&##1654'3127654'&##1&'&'##3#51313#3#15#1513@     P4))  ))4pP//P @   @` @+    +` @ ` A671167111''1111"#'11"#&'514771511'&55147715: nn :bBw 99P+*   *+P99 wB+:Zj471163311'&''1#11#"'&55153#36767&'&'#1%3#3#11#"'&551514763671167&'&'#113 P=)('4 8*  @000""0PPP0  00  P  00 ()=-#"   ""` 00 `    `@E471163312##11##11##11##1"'&547633151476331514763315  ` ` `  ` ` `  ` ` `  ` ` ``ir&'67671165&'&'1#1"3!1167674'&'51!127654'&##1516765&'&'1!15%67&'&'67  "" @  ""  @ "" Hxa "" 7  7 "" 7  7 "" 77I1?Re671167!111##1"'&551!11##1"'&551&'7!1'1&'#14'11&#"327652711654'&#"3"`"            p"")0   0) HHHHH     b211171611716113167675167631#1"'&5511'&'&76771511'&'&76771514763` w  w  @4$$  66N`   )  )  #" '" '""5  N33     6 @)6Qg111311317131131713167671&'&'!676'&'5211#"'&'&54767635&'51&'6767@@@@----+%%%%++%%%%+   `'((''(('%&**&%%&**&%ssss !  !   :Cc7113277171654''1'1&#"1113271654''1&#"7'171113277171654''1'1&#"1113277171654''1'1&#"1&&&&&&#}#iiii#8998`8998&&&&#}#8iiii"99889988 6'&177'&111&''1&111&''1&111327711327716''1&'711327716''1&'711327716''1&'716'&1&6'716'&1&''XX      E E '& ", &' ", &' .;  :. XX '& *! &' *! &' D E  !  !  .< !!:.  Lg676'&'&1'&'&76771611311'&'&771#1&'&'6767271'271167654'&'&#"3@s )  )&,Z&b  F --DD----D7*-    I + + z"D----DD--6   _&1111#1"331131676751&'&'#1"33121#1"'&5513127654'&##151&'&''$     ) R66)  $%6    %    )66R )   6%$   &  (GTao|6731#1&'3#3#1&'673#3#1&'67471163!121#1&''1&'&'76731#1&'#6731#1&''3#3#1&'676731#1&''3#3#1&'676731#1&''3#3#1&'67'3#3#1&'678  00`x`0Hk  6))))6S`````H` P&'&767&'511'&'&7716763332311###1#"'&551##1#"'&55  H :-" (    7  a'!$  ` `` aAk%6711676''1514'&##1"1'1&#&1311011331232323332765515147633121133323233127655147'13  5   j    @ !    /y %^  Ep @ @ A=%6711676''1&#&131131'1&771'1&76111316767'13   f U< v Q&{     4 GS ] C@A'O%6711676''1&#&1311!16767'13%67311311#11#1&'51#1&'5167315   A  00 00    P0 00 0 aB2111'&'6761#"'&551&'&'6767514763 /$  !,6%$$%6,!  $/  F,--,F  # $%66%$ # # 34II43 # 1H4'11&#"1#1"331132765513127654'&##15113!127654'&#!1"  p p  p p @   p  p p  p@  = 46761##1&'1#1"'&7716&7!11!1&'&''  ,    "!,,!"    @Q  **x6767676'&'&'&'&"3001111'&'&'11&'&#&23311317676'&'676'&'&'&'#1&'&'&7&11101#1&'&'&76761A(  6,/  " ))   5,/   ) M) ( # `   6 *     4 &      %6>JZc11313151##"'&54763!167&'!3151'1&167'17674'1#3#131271&'&'67&'@//E8 pH@ 7)Vy&}[ ++8D--  XH "#F@/@W$ ]0@`21111''1&##1111#"'&551&''1&'&767613676751&''1&'&56767514763471163311'&''1#11#"'&55153#36767&'&'#1   !4"#     4"$ p P=)('4 8*  @000""0  #%'     #%(  @ ()=-#"   ""3M671167311#1&'&'671167311#1&'&'5%3#31#1&'&'16767            p      p    `         1l11#11311''1&7673151#1&'&'516767!155#131676'311!1&'&'5167673131#11311327713. FF .@S GG S @ FF @@@@@@@@@"V%55!11!!!!&'&'516767!1111#1&'&'516767331311''1&7673151&'#1"& FF &P @@@@@@@@@" FF @"V%55&'&'!11!1676755331#355311#117716'&'#151&'&'##1316767@P& FF &" @@@@@@@@@@@ FF "@Vly671167654'&'&''''&1'&''1&767716771671771632111#"''1&'7'#1"''1&7677166731#1&'7'''1&767'&7716F::$""$::FF::$""$::F/'''  #       A  +  '  @!"<=CC=<"!!"<=CC=<"!         P 3;_x&176''1653127654'&##1&'6771654'&#"1&##1"'''167%#1"33113277151'7111331276551&'&'' P @ @ @ @p ___8'@ @@ ?%5) ) 0 x  @ @ RJJJv&  % @ ?!m)  )@#*Ee6711673113311#!1&'&'#3#51211#"'&'&5476763&'1#131167513167&'#15 8$#"0'!!!!''!!!!'0000 '.->-%%@`""&&""""&&""P0000<Mq!!!6767654''1&'!113#3#1#151#111316767515152111#15147635"13312765514'3&'&'%c// LtL [@@@@   @ P  ""  rr  P  P  00 000   0""6731#1171'1&761''113151671&'51#117161'&771'1131#1&'673151&'11''1&76171&'#11&'516713167'11'&7716116751#1&'&'&76767&'P/# 8 "" 8 $.P/# 8 "" 8 $.0@" 8 $.P/# 8 "" 8 #/P/# 8 "  hU&176''1673116751&'1#1&'71176''1&11&'513167&'#1311'1716'&1'''#151&'16751311'1&176''1711#13167&'#15167' P "" 8 #/P/# !_j"" 8 $.P 0 |#P/# 8 "" !Ki P/# 8 ""d11#"'&54763267&'&'#1"3311#1&'&'51176''1&177113327&'#151513127654'&##4'11&'&#"3276765'1''1&761716@   ))))   0)88--DPP "   +""&&""""&&""M H ( = `  P4))4  )88D--%P  '!!!!''!!!!'+ H ( < d11#"'&54763267&'&'#1"3311#1&'&'51176''1&177113327&'#151513127654'&##271167654'&'&#"35&'6751&'5167@   ))))   0)88--DPP "   '!!!!''!!!!'`  P4))4  )88D--%P  ""&&""""&&""`PPd11#"'&54763267&'&'#1"3311#1&'&'51176''1&177113327&'#151513127654'&##271167654'&'&#"3771''11'&771'1&761716@   ))))   0)88--DPP "   '!!!!''!!!!';$$$$ %% $$ %% `  P4))4  )88D--%P  ""&&""""&&""%%%% $$ %% $$ fw11#"'&54763267&'&'#1"3311#1&'&'51176''1&177113327&551##1513127654'&##2111#15147635"13312765514'3&'&'@   ))))   0)88--DPP 0    @ P  ""`  P4))4  )88D-- !  @ 00 000   0""@Yhw3112771654'&#"151!127654'&##1511327654''1&#"1327711##"3311'1&#"3#3514'&#"#3#1327655 ` )` `) ` ` ) `) ` @@@  @@@@  7 ` *s  s* ` ` *s  s* `7  Uds77654'&#"151!15147#1511327654''1&#"1327711##"3311'1&#"1327554'&#"1353276551#72111#15147635"13312765514'3&'&'``` ) K) ` ` ) @) `  @  @ @ P  ""7``` *ss* ` ` *s  s* ` 7  P 00 000   0""+=M_o6711673113151671311##&'&'5316751&'#11316751&'#5316751&'#171316751&'#5316751&'#1%'1#"'&54771#1"'&5476331'1&547632  ` (  ` @          PPP P s s   HH     P  p    p  PPP P    B*av%271165511327654''1&#"13277113&'11&7676767677676'&'&'&11&'&'#3#1676763635&'11&'#11116765   P P  #+*#  &,21  12-&  #**#N    `  P P  F          0   Ba111#116767636367632327626551&'&'#1511327654''1&#"1327711#151&'&'#&&'11&7676767677676'&'&'&11&'p  ! 0 P P  #+*#  &,21  12-&  #**#  `       `  P P  Z        F)6CP]jw"11331132771132765514'&##&'&767&'&767676'&'&'&7673&'&767%676'&'&'&767676'&'%&'&767'676'&' 3  0  0  0  0    3  P    P    PP  0  P@?j%!!!"3!127654'򺲺'&#"1514'&#"1'1&#"13277% "1514'&#"1'1&#"132771654'    )  ) ` ` )  ) ` `   * * ` `. * * ` `  v'4A1'1&17716'&151&'&'&767&'&767676'&''76''167711331276551117711331276551176''1&'&##1"'1&'&##1"1&##1"1771133127655'7716'&151&'1'1&@@8    $ 0 $   0   & "  " &   0 @@@@v@@v  `  (j111 D16 61D 1& &1 G ? ? G 1& &!@@@@vvUk2111#"'&51476311131'1&54763211#"'&54771#11#"''1&54771632%#"'&5147632    ** ` ` ** ` `      @ I )) ` ` )) ` ` )@ @  :Xu13167514'&1&'"163'76751&'#1"131&567#3#'1&131276''1674'&'716'&'#117712751#;*  p "=V|!!! p "5A#ZAAA#! p "5;*  p "=V`#! p "5A;  p "=V;*E;*  p "=V#! p "5A[#11"'&547716321#"''11312##1&'&'&'&'#11#"''1&54771632131251 ` ` )@ @6%$s* ` ` *s#)) ` ` *  $%6) ` ` )*0=n6311215147632111##1"'&5476331'1&547676'&'#3#"'&547633111112111#"'&5511#"'&547747116321716321312##1"'11&'&511115'#"''11#"'&5511101014767630111312## i  ` j    `   i j-  i j ` mjjj i   `  j `  i $$$$`  ` j i j i  `iii j `  "Df2111311#"''1&76731514763776321#11#"'&551#1&'&7'3#35167611'&'51#1"'&54763&511477161312##11'''211#"'&54763  @ @ W@@@ @     @ @  ) @   @I    @ @  w@@@ @     @ @  7 @    @7   ;Hb}6151671#1&'6731'1&76711671167&'&'&'&7676'&'6131#1&'516717&771#1&'67311&'511'!''1&'516731#11'?`&?w %%11%%  %%11%% $$$$?&`??&`?@???`&??&`?  L  1?`&??`&????&`?6m6311211#"'&54771#11#"'&551676731'1&5476311211#"'&54771#1"1#"'&551676731'1&547) ` ` *  $%6* ` ` ` *  )*  ` ` )   6%$) ` ` )    )) 5kx631121311#"'&5514'&##11#"''1&5477'1#"'&54771#1"1#"'&551676731'1&547632676'&'%&'&767 )   P PPPP P   ) y  $$$$ )     P PPPP P     ) g$$$$  @?j!!!27654'&#!1"31132771132765511327654''1&#"3112771132765511327654''1&#"1    )  ) ` `@ )  ) ` ` `   * * ` `. * * ` ` J"1116767&'14'&#111!167671&'&'#1"1&'&'514'&##      P )) P %%        ))   7L11316767514'&'&'516767&'#11111#11111#"'11&'67676#`p@   A !! A        >KW3#31#151676771633121#1&'&'67&'67&'67&'3167&'#13167&'#xPPPXL@````((  Hp,K67116703036767267632632121!1&5471163!121#1&''1&'&'      00   [  6))))6#>N_k671167!11#165516751&'&'#156''1&17711675117%67!11!1&'55#!1"'&551!3167&'#     p; @ @ %% ``  @``  `  !  P @ @ $yy$   P @@OXaj"113311#11133127655167671331276551676751#1513127654'&#!5#1513#5#1513#5#1513  (H)   ))   )H( PPPPPP  @)@ @))@ @)@  @@@@@@@@@@@@@ AJS\w"113311#11133127655167672676751#1513127654'&#!5#1513#5#1513#5#15134'11&'&#"3276765'1''1&761716@ (H)   ) ))5A/H( PPPPPP""&&""""&&""M H ( =   @)@ @),'H@  @@@@@@@@@@@@@'!!!!''!!!!'+ H ( <  AJS\w"113311#11133127655167672676751#1513127654'&#!5#1513#5#1513#5#1513271167654'&'&#"35&'6751&'5167@ (H)   ) ))5A/H( PPPPPP'!!!!''!!!!'  @)@ @),'H@  @@@@@@@@@@@@@`""&&""""&&""`PP AJS\w"113311#11133127655167672676751#1513127654'&#!5#1513#5#1513#5#1513271167654'&'&#"3771''11'&771'1&761716@ (H)   ) ))5A/H( PPPPPP'!!!!''!!!!';$$$$ %% $$ %%   @)@ @),'H@  @@@@@@@@@@@@@`""&&""""&&""%%%% $$ %% $$  BKT]n471163!12##11#11&'1##1"'&551&'&'513151#1"'&553151#55#113'53151#"11131514'&#671167121##1"'&55147635  (0  ,)   )H( xPP0PPPPx @ P""    @ 0 )@ @)@  @@@@@@@@@@@@@@ 00 ""0   0B=t471163!121#1"115151&'&'11&'3&'&'"'&5567116'&'&'&'&''&'&76767611676   )) 3#**#  &-21  12,&  #*+#` $ } )) } $       !H5#1516767311#151&'&'#1471163!12##11##1"'&''1#1"'&5`0+*A0A*+0,0,`     (A*++*A,,H    CU776'&1'1&1#1'1&13111177171671176''1&''1513167716'&1#1&'776'&1714'"1'1716'&111'1&177117117716''17117716'&1'16'!!!  " &&&& LBBB 4  % #  "     UIII :: I ( 8((8 ( /// %?P  '   - $ & 5    +;M]o671167!11#151&'&'1#1&'&'1316751&'#5316751&'#171316751&'#'5316751&'#171316751&'#5316751&'#1471167632#"'&'&571#13117716''1&   3`  ` P  P  p    p  P  `""&&""""&&"" YY 8 8   ##)L2P  P       p      '!!!!''!!!!'C  8 8 +;M]o1113151676713167&'476751&'&'!67311#1&'573#31#1&'516767311#1&'5'3#31#1&'516767311#1&'573#31#1&'51674'11&'&#"3276765'1''1&7617160  `  `3   p  P    P  p  p""&&""""&&""M H ( =  ` P  P2L)##             '!!!!''!!!!'+ H ( < +;M]o1113151676713167&'476751&'&'!67311#1&'573#31#1&'516767311#1&'5'3#31#1&'516767311#1&'573#31#1&'5167271167654'&'&#"35&'6751&'51670  `  `3   p  P    P  p  '!!!!''!!!!' ` P  P2L)##             `""&&""""&&""`PP +;M]o1113151676713167&'476751&'&'!67311#1&'573#31#1&'516767311#1&'5'3#31#1&'516767311#1&'573#31#1&'5167271167654'&'&#"3771''11'&771'1&7617160  `  `3   p  P    P  p  '!!!!''!!!!';$$$$ %% $$ %%  ` P  P2L)##             `""&&""""&&""%%%% $$ %% $$ '7IYk{1113151676713167671&'&'!67311#1&'573#31#1&'516767311#1&'5'3#31#1&'516767311#1&'573#31#1&'51677"111311316751&'#14'�  `  `    p  P    P  p   @  ` P  P              `  @ @-=O_q11131516767131&55167516751&'&'!67311#1&'573#31#1&'516767311#1&'5'3#31#1&'516767311#1&'573#31#1&'51672111#15147635"13312765514'3&'&'0  `  Y    p  P    P  p   @ P  "" ` P  P%/              00 000   0""'7IYy1113151676713167671&'&'!67311#1&'573#31#1&'516767311#1&'5'3#3#113151671#1&'516716751&'6711671&'&'5''51671''11&'516760  `  `    p  P  X000  0    ### #  ` P  P        @X         )444+`  4+`  A9I[m}671167!111##1110##151&'&'1#1&'&'1316751&'#5316751&'#1'5316751&'#171316751&'#5316751&'#161'&'&'&7677''16767   *& 7 `  ` P  P  `  p  P   x 6 6 xh___2   -88,P  P           r0!))&&&&))!0V&&&*)('7IYw1113151676713167671&'&'!67311#1&'573#31#1&'516767311#1&'5''51671''11&'5167656751671&'&'51670  `  `    p  P  ### # }   ` P  P        444+`  4+`  @@@@@  @ +;M]o11131516767131&547675151&'&'!67311#1&'573#31#1&'516767311#1&'5'3#31#1&'516767311#1&'573#31#1&'5167&'&767113312765&'&'#10  `  Z    p  P    P  p  0'((''(('  'f' ` P  P$`             ---- '''7IYk{671167!11#151&'&'1#1&'&'1316751&'#5316751&'#171316751&'#'5316751&'#171316751&'#5316751&'#15#1516767311#15167673111#1516767315#1&'&'51315#3#&'&'513155#1&'&'513171&'51675&'5167'1&'5167    `  ` P  P  p    p  P  """"""""""""`  ` P  P       p      P""""p""@""`""""hh@    ?&111177116771176''17167&''1716'&1'1&'1'& pcg5 e!!e 5gj G"   !e 5gg5 e!"G jcp S\er&'16753#31#17167'7111331276551!113312765515151&''1&'&##1"&'6767&'176''1&!77716'&^  K       000000PP 55  OOO%(@     @(%OI000000:FT]f1111131&551677167633121131676751&'&'&'&551#113'731'1&##1"67&'7&'67H9:""+ t +"":9Hk ֬t"":9H p!@ @!p H9:"" (( ****  F676'&'55311327655117676''1&'#1176771132765#3#11"13311316''1316751&'#151716751&'#11151&'51&'$$$$   44 44     <,05 @     R,,R   d   `\ T8m tr Ta&'&76755#1"'&7711'&'&771671'&''11##11#"'&551#11#"'&5&'&7675#"'&5511'&'&77167311'&''11#"'&551#$$$$H :%::%;     $$$$   44 44      PPP]%  N..N  %]P PP   ```   R,,R   `+7671167&'&'1&'2716767&'765711'"!"""""!%% ""!J"" ""+J J$7at11#11!167671&'&'#1&'&'211#"'&54763671163311&'51477165&'#1"1'&754711632#"'&5  &%    V:  ,: 6   @@    $     B$2?MZ2116731!1&'&'676767677'&7716%1'&77167'&771671'&771667116'&'&'&'&''&'&76767611676 ")S000  0  G 0  0 000  0  g 0  0 1#**#  &-21  12,&  #*+#)PPP P ! P P !PPP P ! P P        >Xfs5!151!%111311#1"3!127654'&##1'131676751&'&'!!1113167671&'&'#3#3#1&'676731#1&'211#"'&54763@u K  K u  @  @       `@      ` @P   3Mg53312765514'&##1"111771676''1&'&7"1113312765514'&##"1113312765514'&##53312765514'&##1"'"1113312765514'&## @ @ m   7   7 @ @@ @ @ @ @  @ @@@@ @  7   7   @ @ @ @ @@@ @  @ @ 1L_11177167677167&'&'!#11"''11!1&'47%4'11&'&#"3276765'1''1&7617160 :'&3 `('Z""&&""""&&""M H ( =   +.   /A '!!!!''!!!!'+ H ( < @;Xe617161#1&'&#"#1'1&76167'1&761632371671111!111312#!1"'&5476331&'5167 a WG   PL a?f  L     7W4 h XK   00BKT3#32311!1'1&767314763!!!211#1&'&#"#1&'&'01'1&55147635!151!67116'&'&'&'&''&'&76767611676 K  K  33  @#**#  &-21  12,&  #*+#    |H H| @````       @#*EN[6711673113311#!1&'&'#3#51211#"'&'&547676367&'516751&' 8$#"0'!!!!''!!!!' '.->-%%@`""&&""""&&""PP@#*ER6711673113311#!1&'&'#3#51471167632#"'&'&53&'#13167 8$#"`""&&""""&&"" '.->-%%@'!!!!''!!!!'@#*ENz6711673113311#!1&'&'#3#51211#"'&'&547676367&''56751673111675171674'&'#1 8$#"0'!!!!''!!!!'@ (   (  '.->-%%@`""&&""""&&""      A#*BL67116731133111#!1&'&'#3#5161'&'&'&7677''16767 ]!7 ' x 6 6 xh___2 /%%-::/@b0!))&&&&))!0V&&&*)(3q%&'11&'67676321716727&'11&'&32767471163312#1!151"'&54763312121#!1"'&551476352711654'&#"374'11&#"327652711654'&#"3@D--""$ . +--D@                 `--D:/0 .  ,%%D--p  0  @@  ` @ @ `        D9L&1'1&117711771676767676'&'&'&'&''4711632#"'&5 ] .. ] N)#"  "#)Nm    17 PP 71 ;;  (Sd7#&'&'1"'&54763332#153151#%3#32#11!1&'&'477151"'&5476335131'1&551#) @ 1O@@ v  v  01@;)   PF````@    @ OO ("131676716'&#!''3111'&''  !! )!! l   ]]]]  (="131676716'&#!''3111'&''7&'11&'&6767  !! 3   l   f *U67116'&'&&#7676723676745677&11237676'&'65&'&#"&'&'11&277676'&'&'45&'&'"#&'6'11&'&"#767367674'67%47176751&'#1"176'&'7'1&131276''167&'&'&  !              !          <  !]! =  x   !   =    !   !          !H=  ,! ';'=  -! B4>s}7&7116771633321##11###"'&547633367&'#11'&'%11131010#111###"'&5514763317163332###31716111#10103  $- %-#-NP @yw v  $- %-#-NP @yw  ] @ $  X  0 ^ @ $  X  0%Pk4711632#"'&5211#"'&54763211311&'&'6767&55167314763271167654'&'&#"374'67&551673147632311&'&'6534'11&'&#"3276765211#"'&54763211#"'&54763   0    +--DD--,   5  +--D/%&     P       P ''2D----D2''   `'"3 ''2D--'"'  `   0    `u4'11&#"111111#13!67&'#1716551515151514'&#"111'&7716'&'&111#151514''1&'&1''15155315131131513167&'#!3`  V `V  E   /@/   E@@    @;$cc$;@ @1\  #   4&> >&4   #  \1@@  3x&'&767'"''1#11'&7711'&7716321''%21111117676''1'1&547632111111#1"''1&'5151514763!2111111##1&'&'51677111717163211771655151514763@  -   &&  3     Cd 0 dC    3 YYY##Y  d (P(3   !.O d'f@8 8@f'd O.!   3(P( _211#"'&'&547676321111117676''1'1&547632111111#1"''1&'5151514763!2111111##1&'&'51677111717163211771655151514763@#### 3     Cd 0 dC    3 """"@ (P(3   !.O d'f@8 8@f'd O.!   3(P( @-He7'32771&'676726551&'&'&1'1&'&1271167654'&'&#"3713121'&771#1"'&77160  21K+$!!4#!   !#4!!/'!!!!''!!!!'0$`$` +8K12 6&'     '&6A,""&&""""&&"" 6H6H@-H[7'32771&'676726551&'&'&1'1&'&14'11&'&#"3276765'1''1&7617160  21K+$!!4#!   !#4!!/""&&""""&&""M H ( = +8K12 6&'     '&6A,D'!!!!''!!!!'+ H ( < @-HQ^7'32771&'676726551&'&'&1'1&'&1271167654'&'&#"35&'6751&'51670  21K+$!!4#!   !#4!!/'!!!!''!!!!' +8K12 6&'     '&6A,""&&""""&&""`PP@-HU7'32771&'676726551&'&'&1'1&'&14'11&'&#"3276765##1&'67310  21K+$!!4#!   !#4!!/""&&""""&&""@ +8K12 6&'     '&6A,D'!!!!''!!!!'@-Hj7'32771&'676726551&'&'&1'1&'&1271167654'&'&#"37531#11&'51#1&'673151670  21K+$!!4#!   !#4!!/'!!!!''!!!!'0000 +8K12 6&'     '&6A,""&&""""&&""000000@-Hj7'32771&'676726551&'&'&1'1&'&1271167654'&'&#"3771''11'&771'1&7617160  21K+$!!4#!   !#4!!/'!!!!''!!!!';$$$$ %% $$ %% +8K12 6&'     '&6A,""&&""""&&""%%%% $$ %% $$  )7i%3#3&'&'1#3#16767!1151&'&'#53#367675174'11&#"1327655131132765514'&#"1#15AAA = l '';M]m111163311#1131676751&'&'#151&'1#151&'&'#3#31#1&'516767311#1&'567311#1&'53#31#1&'5167%'#11'177&'1!1676'P G Iz  ( `        <<<=0J  {  \w z""  HH @  p  `  P  ccc@)z,: ,676'&'!!!67674''1&#"1'1&'10----E   0~   '((''((' OBYb&'11&111'1&'1151&'1#1"3!127654'&##1'111#17111#151%11771676''77311# ! l  C>BK5)Q !* p   ['#'   NKX^  !}  1Q^fsz676'&'571##1"'&551&'&56767315567&'67311##1"'&5676'&'5654'%&'&7675175654'111##1"'&551&'&5676731H. @  0 %.% 0  @ x$$$$P@ @  0 0 h   T2*B4' "0 '4B* 0" H   TTT  T*TTT*"+ +"0  0 /<&'&767676'&'"113!127654'&#!%676'&''76''167711331276551117711331276551176''1&'&##1"'1&'&##1"1&##1"1771133127655h  p @     $ 0 $   0   & "  " &   0 x     j111 D16 61D 1& &1 G ? ? G 1& &C 676'&'11132717676''13117676'11230176767410171677103271117676''1&''171117676'&''1'1&'&#"1'1&##%676'&'71327716771'1&'P      9t  G 2   "#&5  r< =(`   {  6 @!NX  \ 6A  %"< >>>; > $-2?LY11&'&''1&'&11327655131132765167716'&'&676'&'!676'&'1111132765513113276551133127654'&##1'1&'#     ;    ;    X        0 &+!#  #D  2D#  #% `    ;$(5B%'%11'&'&767%16&'&767&'&767676'&'''1##1"'&5511'&77167633127167633121633121''11##1"'&5511'&771&''11##1"'&55111'P    !    8 0   & "  " &   0   $ 0 $    `(  111& &1 G ? ? G 1& &1 D16 61D  R|676'&'55311###3#"33!27654'&#!15117676''1&'&##1"1767715'1&#"132771654'&#"1514'&#"  @XXX x  :  : X P P   `````   /  a a  / P P   R|676'&'55311###3#"33!27654'&#!15117676''1&'&##1"176771''&#"132771132765511327654'  @XXX x  :  : PPP P    `````   /  a a  /GPPP P    Vc&'&7677'&'&7#1&'514'&#"11''1"'01&'&'&7477167633121'&'&767----??? <(  f  C $L#3 u'((''(('OOO  -% 03  P eG  3   J676'&'55311327655117676''1&'&##1"176771132765&#"1'1&1111771176''17171'1716'&1'     :  :    L (B  N ;; 28( L` /  a a  /  J E-  P 66 O)&E J Gc&'&767'7676''1&'#1"176771132765513113276556716751&'&'1675/// J-$ :     X  999  Y" a  0  pp l676'&'553113276513327654'&##151311#151#1131676751&'&'#11##"176771132765    8P @    MB :   `   @ 0    P a  0 @ E`s676'&'5#"'&5511'&'&77167633121&''11#"'&551#471167632#"'&'&57&1'1&17716'p(   :  -   ""&&""""&&"" = ( H   Ѐ 0  a J#/ '!!!!''!!!!'+ < ( H @ E`iv676'&'5#"'&5511'&'&77167633121&''11#"'&551#%211#"'&'&547676367&'516751&'p(   :  -   '!!!!''!!!!'  Ѐ 0  a J#/ ""&&""""&&""PP@ E`m676'&'5#"'&5511'&'&77167633121&''11#"'&551#471167632#"'&'&53&'#13167p(   :  -   ""&&""""&&""  Ѐ 0  a J#/ '!!!!''!!!!'@ E`676'&'5#"'&5511'&'&77167633121&''11#"'&551#%211#"'&'&5476763&'1#131167513167&'#15p(   :  -   '!!!!''!!!!'0000  Ѐ 0  a J#/ ""&&""""&&""P0000@ E`i676'&'5#"'&5511'&'&77167633121&''11#"'&551#%211#"'&'&547676367&''56751673111675171674'&'#1p(   :  -   '!!!!''!!!!'@ (   (   Ѐ 0  a J#/ ""&&""""&&""      @ E`676'&'5#"'&5511'&'&77167633121&''11#"'&551#%211#"'&'&54767636'&1'1&11771176''17p(   :  -   '!!!!''!!!!'; %% $$ %% $$  Ѐ 0  a J#/ ""&&""""&&""k $$ %% $$ %% Z&'&7673#313276551311327655131276''117676''1&'&##1"17677113&#"1'1&1111771176''17171'1716'&1'    &" 5 5 "& L (B  N ;; 27' L  ` `` `s8  YY  8sn J E-  P 66 O)&E JB3@w4'11&#"1167632716771676'&'&1'&'&'5676'&'&&'11&7676767677676'&'&'&11&'   !i  i?=&$$$$ #+*#  &,21  12-&  #**#  )$# a   (          :JW211111311'&''1##1'&''11#"'&55167676765514763&'&767  !9W, &`\   .     )##P:  3  J J1((   }IV4'11&#"1132765514717676''13317676''1&'#1'11167655&'&767'76''171676''1716'&1'1&#"1'1&110113121117  .   \P& ,G9!p;;; O A' L L (B $'   ('2J J  3  :P##) 0  666 O  -F J J E- 1$B /Y&'&767553121'&''11#"'&5511'6711671111#"'&551#1"'&7711'&'&77   ;   n  &" 5 a  0 ` `s9  Z@ HU}676'&'7713276551311327655117676''1&'#1"1767%&'&7675'1&17677113676751&'&'3167&'#1&176''      / J-$ : ) 0 788  0 0`000  9  Y" a  A  h;;;* `  87f(2   # 2HY316751&'1167674'#1"11331171&##7315117676''1&'5331276551#"" i6 M   b""p  Y.Z    Rnw67711#1&'3#3&'&'47''101'16331271&76111111'&'#3#"'&5511'&'&771671#'67&'""6662_  8 $L  V 6  L 9""ZZZn  ` @ 4 nZ  -;Hb~316751&##3#67674'533123'16551&'&'#1"7676'&'111331276551&'&'#654''1&1#13117771767513167&'#151&'&1Goow{{{ @$$$$   @@  XX  @H@  XX  @ A   o+ j       8    8 8    8  IVbo}676'&'5#"'&5511'&'&77167633121'&''11#"'&551#61''1&7!61'&77&77161'!''&761'(   :  ;   PPPP0PPPPPP  Ѐ /  a a  / YPPPPPPPPPP  &l21#1511'&'&77167633'676'&'%1171516731111311#11#1&'51#1"'&5514763516751&'673 ' 6  L%2i'((''(('  50,< ԮZ  p----Pt m8U \`   d%2`&113276517111327651&''676'&'553116751176''1&'&##1"1771167       &  &    -nn @ XXXX1 G G 1 Vn676'&'4311271117676''1&''171117676'&''1'1&'&#"117677167771327716771'1&'31127654''1316767&'&'#1"331#171654'&#"1  TG 2   "#3  < =([ D----D )) P P`i@!MX  \ 6A  %5   >>>; > $-w --DD--  )) P P Vn676'&'4311271117676''1&''171117676'&''1'1&'&#"117677167771327716771'1&'% "1#1"331132771654''  TG 2   "#3  < =(   P P`i@!MX  \ 6A  %5   >>>; > $-    P P Vn676'&'4311271117676''1&''171117676'&''1'1&'&#"117677167771327716771'1&'% "1#1"331132771654'''16751&'&'167516751&'&'1675  TG 2   "#3  < =(   P P`i@!MX  \ 6A  %5   >>>; > $-    P P00x00"# Vn676'&'4311271117676''1&''171117676'&''1'1&'&#"117677167771327716771'1&''&1'1&117677167716'  TG 1   "#3  < =(> 6 @ 7 @, `i@!MX  \ 6A  %5   >>>; > $-> 7 o   oL 6Qd11111771111237112367&'&54767'151&'&'4'11&'&#"3276765'1''1&761716: nn #M""&&""""&&""M H ( = Ti B1G+*  "#).&%,T'!!!!''!!!!'+ H ( < 6QZg11111771111237112367&'&54767'151&'&'271167654'&'&#"35&'6751&'5167: nn #M'!!!!''!!!!'Ti B1G+*  "#).&%,T""&&""""&&""`PP6Qs11111771111237112367&'&54767'151&'&'271167654'&'&#"3771''11'&771'1&761716: nn #M'!!!!''!!!!';$$$$ %% $$ %% Ti B1G+*  "#).&%,T""&&""""&&""%%%% $$ %% $$ ?Pt671167111'11111"#'11"#&'514771511'5147715"11131514'&#671167121##1"'&55147635f@: nn :P @ P""  bT:"G+   *+G1B iT 00 ""0   0  .;K^p111&'&'51673#3#1&'673#3#1&'676731#1&'7671&'&'57111&'&'51675&'516767'1&'5167675&'516767&71163!121#!1"'&551&'&'""x0000 pppp00""""P""""`""  %  %"" H`""""""""""  & &@!Mh"11131514'"11131514'&#"11311327655167&56767654'&#!271167654'&'&#"3713121'&771#1"'&7716` @  @  $#8  ##8 '!!!!''!!!!'0$`$` `` ``  ;++ C C=.- ""&&""""&&"" 6H6H@!Mh{"11131514'"11131514'&#"11311327655167&56767654'&#!4'11&'&#"3276765'1''1&761716` @  @  $#8  ##8  ""&&""""&&""M H ( =  `` ``  ;++ C C=.- '!!!!''!!!!'+ H ( < @!Mhq~"11131514'"11131514'&#"11311327655167&56767654'&#!271167654'&'&#"35&'6751&'5167` @  @  $#8  ##8 '!!!!''!!!!' `` ``  ;++ C C=.- ""&&""""&&""`PP@!Mhu"11131514'"11131514'&#"11311327655167&56767654'&#!4'11&'&#"3276765##1&'6731` @  @  $#8  ##8  ""&&""""&&""@ `` ``  ;++ C C=.- '!!!!''!!!!'@!Mh"11131514'"11131514'&#"11311327655167&56767654'&#!271167654'&'&#"37531#11&'51#1&'67315167` @  @  $#8  ##8 '!!!!''!!!!'0000 `` ``  ;++ C C=.- ""&&""""&&""000000@!Mh"11131514'"11131514'&#"11311327655167&56767654'&#!271167654'&'&#"3771''11'&771'1&761716` @  @  $#8  ##8 '!!!!''!!!!';$$$$ %% $$ %%  `` ``  ;++ C C=.- ""&&""""&&""%%%% $$ %% $$ (B\v''&#"11117711765'1716'&''"1113312765514'&##"1113312765514'&##53312765514'&##1"b4& // &4b       0000%54%   @   `@@@ @ )6C^"111327655171#1514'&##3#11317173#37171#11'71317171#3#313276514'&#"1   UU uJJJZJZ*JJJ[JZZJZJ UUU   U    @   6&2?s|!!!21#!1"'&51476316751&'&'167516751&'!!!1#113111##1"'&551&'&'513151#1"'&54763#3#1315`  @(()   )H( PPPP @  @@@@X@@8@@`)@ @)`@  @@@ Idw3#3132765513121&#"514'&#"1327#1"1#1&'&'4716763471167632#"'&'&57&1'1&17716'KKK  K+-%&   v""&&""""&&"" = ( H @ @ x#+ @  @ L '!!!!''!!!!'+ < ( H  Idmz3#3132765513121&#"514'&#"1327#1"1#1&'&'4716763211#"'&'&547676367&'516751&'KKK  K+-%&   v'!!!!''!!!!'@ @ x#+ @  @ L ""&&""""&&""PP Id3#3132765513121&#"514'&#"1327#1"1#1&'&'4716763211#"'&'&5476763776'&1'1&11771176''KKK  K+-%&   v'!!!!''!!!!'$$$ %% $$ %% $@ @ x#+ @  @ L ""&&""""&&""%%% $$ %% $$ % <Rc#3#"13151476321315167516767'1&'&##11#"'&555#"'&551476322111#15147635"13312765514'3&'&' KKKv  ,K  @    @ P  ""  @ @%-V @ @@@@ @  00 000   0""^'=671161516761516761516761#!5!!!2#!1"'&54763@ c c c  D@ @@  K        =F3#3111111##&'673151#1&'673151#1&'673151#1&'673151#1&'673!!!1!1#1131#1131#1131#1131##51515151515133 8 X``  XPPX(  ((  (XPPX8Y3#3716'&'#1#3#111101!16767&'&'&'01&'&''''11'&771'1&761716/ /*) )@) )*//////////`G  G "#78R))R87#"//////////ASex&1#11!111#1516767113167#&'&'676767251&'&'#1'3#31#1&'51673#31#1&'5167713167&'#151&'4'11&'&#"3276765'61''1&7617Rv  @$%%%,;-%& v     @""&&""""&&""c H ( = [  `:) %%% #{ [@@@@ '!!!!''!!!!'+ H ( <ASex&1#11!111#1516767113167#&'&'676767251&'&'#1'3#31#1&'51673#31#1&'5167713167&'#151&'271167654'&'&#"35&'6751&'5167Rv  @$%%%,;-%& v     '!!!!''!!!!' [  `:) %%% #{ [@@@@ ""&&""""&&""`PPASex&1#11!111#1516767113167#&'&'676767251&'&'#1'3#31#1&'51673#31#1&'5167713167&'#151&'271167654'&'&#"37'''11'&771'1&761716Rv  @$%%%,;-%& v     '!!!!''!!!!'$$$ %% $$ %% $ [  `:) %%% #{ [@@@@ ""&&""""&&""%%% $$ %% $$ %@=JZl|3#31#11311#151&'&'1#1&'&'5167673171514763&'&767%1316751&'#5316751&'#11316751&'#!1316751&'# pppOYf  fZ 0  p      @@p  p@@   @@@@@@p@@@@5GYfz61311&'&'1#11113111!1&'&'167673175316751&'#15316751&'#17676'&'7531#1&'5167"11131514'&#671167121##1"'&55147635.v  00 @@  v    2222  @ P""   [ 0  0%` @ [@@@@@@@@H*,,**,,*x ` 00 ""0   0+9@71131514763311&'&'!17'&77167'&7716#3#17 ``` ` ` u  u``` ` 뀀?HQ&#"1767676'4'&''673121331277163111&'&'567&'7&'67  /.VV./ m (0( ))8`P3EEAB+ +BAEE3P 66 v))vEYb&#"1767676'4'&''3676751311311#11"''1&5477'3#311#"'&55167&'67  /.VV./ l, @"0 c ((0  P3EEAB+ +BAEE3P@ "3 * ~  00:&#"1767676'4'&''6711672171631''1&'  /.VV./ }S SP3EEAB+ +BAEE3PR R6Vb671167!11!1&'&'16751176751&'1'1&5167513167&'#1513167&'#13&'1675@L B B 000@`@A fn  fn @@@`P &N111!167671&'&'!676'&'6711671"''11'&'&77167615@@`P7 1 )@p  hf78  ` *;Zmv111!167671&'&'!76'&&'&'&'&76'&'&'67676'&76767672711654'&#"3&'67@@   X@>   531#1513167&'##131#1513167&'#1111&'51'1#1"'&5476331'1#1&'&'6767131'1###1&'&'676733'1514105676321167&'A))(((())+' $)# #b ))P))Pd+  )$_     E@M`"1'1&1111771132771176''17167&''1716'&1'1&#&'&7674'11&#"327654711632176765&'51&'&'1&#176765&'514763211!1"3!127654'&##151515 9 7 7 9 9 7  7 9 $$$$   8     """     X @ h 7 9 9 7 7 9 9 7 `  @   5 !   ! 5""" !   !     `@$7&'11&'!11!151476331577#1211#"'&54763@@`   @ @   @<CV&'11&'67676'3#36767311#1"1!1&'&'1676755312711654'&#"3               A'611###&''1&#1###"'&71677    P d          @K1''1&7615167171661112#!1"'&547633151716773#3'1&# PP (({    PPP= PH H $zz$      z v@+S&1!1716'&1176''1!11771654''&11333276551672133276''1&'' "m! PP !! PP    D <    H H  H H  v   @'O6'&1176''1!116751&'&'!17&11333276551672133276''1&''x PP !q""3!    D <   H H ((3""}  v   ?5]&151&'1'1&17716'!&151&'1'1&17716'&11333276551672133276''1&''(( PP `(( PP     D <  P $zz$ H H $zz$ H H7  v   A71131276''1&''1&&11333276551672133276''1&''       D <  zzz )     v   @,:5!1514'&#!1"#3#11675131167151#5&'5167@  (  @p@@@@@*7Ibo3#321!15147633#!11&'51#11&'1516751&'73#321!15147633#!11&'51#11&'1516751&'        `p@@   `p@@@5[dk|&117676'&5476'&'!11767654'&'&65&'&'1767713117676'#3#7131''#17'6'&76'&547%&7654'?         Q&&&L&}   &    2::2  '--'  '--'  2::2   --  . SSSS #''#   #''#GNY`gs61#1##11312##1"10##1"101#1"'&547633171#1"'&551"'&7677''13'7171'1#771'''1'3167&'#    E _` E    I;;;:uu??t .#n--- "vP P   P PC111155SCCC&&&&C+=M_o6711673113151671311##&'&'5316751&'#11316751&'#5316751&'#171316751&'#5316751&'#1%#11#"'&551#1&'&'67&56767  ` (  ` @           "  #))  HH     P  p    p   )# #) ))-%711'&71676171&547716321#"'XcccB  P Ac _`  cccA P  Bc  `_ (B\v1316731#1&'#11''1&'677164711633121##1"'&553#321##1"'&55147633!!!21#!1"'&5514763YX  XY/   ``` `    H  H `  `  @ @ @ @ @ @ ?JWd~671167!1131211112##1&'&'#1&'&'#1&'&'3#351'1#1676'&'%&'&767&1#13117716'' @ 3M  )))) M3  p''PP  0M @  )))) @M`0  A''PP?JWdy671167!1131211112##1&'&'#1&'&'#1&'&'3#351'1#1676'&'%&'&767%671167&'&'& @ 3M  )))) M3  p   0M @  )))) @M`0  !! !!MVcp671167313113112##1&'&'#1&'&'#1"'&5476351"'&551476353#3'1#1676'&'%&'&767 %4)5  ))))   `VVV++  p`$w  ))))  ` ``0  OXer111"131"33167673167673127654'3&'&'#1&505'1&'#1&'#3#31#15676'&'%&'&767''51671''11&'5167656751671&'&'5167`   ))))  5)4% ++++Vp  ### # }   `  ))))  w$```  0444+`  4+`  @@@@@  @<fr{111117711117711&551&'11515151511151&'&'513167513113167516751&'&'!167311#17&'6767&'{2[ZX  PkQ @%R( !"Ra! +((+ !  O11a &;Ohu67!1!1&'67!1!1&'676'&'671167312#1"'&5&'11&'6331##'##1"'&54767633127676'&''&'&767PPS  3`V ` Rg3  0 ` ,  q--..0H$$$$     >0 /$$$$@'((''((' !5N[h~&'&767113316767&##13#32765&'&'#1"'&##1"3312767&'&'7&'&767676'&'"113!127654'&#!   V`RRR `g ` 0  3  --.. @ `$$$$    >/ 0$$$$`'((''(('    &2?Xew&176''!77716'&7716'&1!76''1&%676'&'31674'&'&'&##1""'676'&'11316767&##67&'&'#1"3'676'&')HH.HHHHHHPHH$$$$l&P($  8 FpF 85  HHHHHHHHHH  P  # %p  P p3@Qcx111!167671&'&'!471163!121#!1"'&5&'&767316767&##13#367&'&'#1"'&##1"31674'&'7&'&767676'&'`))))@  @ 8 Fm888F YP))$$$$)))@)`  @P    / &  & q  P   !3CXer3#367&'#1"1675676'&'11316767&##67&'&'#1"3#&'&##1"31674'7676'&''&'&76773#3167514'&##155&'133167&'#!31276551&'1#0XXXh   8 FpF 8Y)P)$  P  xXXX h8 hXh X hX  P &  &  p $$$$Xh `XXXh  hX"+FY471163332#1&'&'1"'&553151#471167632#"'&'&57&1'1&17716' @ 3) `@@""&&""""&&"" = ( H   ,9&!')  ````'!!!!''!!!!'+ < ( H 1:}"1131674741&'&'676705&547675127654'&##55311#11766767676'&76767&'&'&76'&'&'&''&7211#"'&5476367&'  ), @@@@xh  (  )r  ````X   ` 6'&177'&111&''1&111&''1&111327711327716''1&'7117414567&'71167&'716'&1&6'716'&1&''271167654'&'&#"35&'6751&'5167XX      E E '& ", $. +F.;  :. '!!!!''!!!!'XX '& *! &' *! &' D E  ! "2(  5 .< !!:. ""&&""""&&""`PP JS67116731111&'&'514'&#"1&'&'51676713276551#1&'&'7&'67)&&'&::&'    '&::&'  )`)&V:&''&:P   :&''&:P )+Ll"113!127654'&#!"113!127654'&#!'11771176''1716'&1'1&!&11771176''1716'&1'311771176''1716'&1'1&  @  @ 777777777777777777777777     777777777777777777777777A S&'&76753276551311327655131276''117676''1&'176771133       ;%::%: $$$$PPP PP P]%  N..N  %]r O&'&767&''1&'&11327655131132765167716'&'&1#"'"1"'  g% +   , $$$$i   ) `` +  @#*EX6711673113311#!1&'&'#3#51471167632#"'&'&57&1'1&17716' 8$#"`""&&""""&&"" = ( H  '.->-%%@'!!!!''!!!!'+ < ( H @#*Ee6711673113311#!1&'&'#3#51211#"'&'&54767636'&1'1&11771176''17 8$#"0'!!!!''!!!!'; %% $$ %% $$ '.->-%%@`""&&""""&&""k $$ %% $$ %%/^kx3#3110101#1!3#31#1'1'1&##1'14#67655#3#13167671&'&'!11!117676''131##3#01015147&'&767@.@ DLG)"I...+    ! TJ(JJJEJ  ('2J@[?##) @ `   2  ~0Jg  [67116713276765&'51&'&'1&#13276765&'516767113276551515 ..""33""3""..  H 66 3""""3""3 66    5>%51#!"'&54763!151!1"'&551'1&'&5477167632155%11! P@   $$$*)%F@   0 u  /! 9IOi|"1'&77167!11''1&##113111#1"''1#11##1&'&771&'5167673151#"1113312765514'&##4'11&#"327652711654'&#"3W  **  q()#B( 77 (B#)(qI     `      0)/B 77 B/)0p          '.11#1"33327654'&##151716'&'!''!1  @ `` @ @&ֳ   ӓ211&'&'676725111&'&'67672515167%16 ))))))@  H"""M"""H` 7%1#"''1&'&'6767271167654'&'&#"3' ~5FX;;;;XX;;'!!!!''!!!!'F5~ ';;XX;;;;X""&&""""&&""%7'327716751&'&'&1'1&'&10  /!!4#!   !#4!!/ ,A6&'     '&6A,,'&'1111771176''1716'&''1'=  @hh @g DD g07271167654'&'&#"3113!12765&'&'#####.K32    23K\""""023K   K32 +;M]o671167!11!1&'&'5316751&'#1%1316751&'#%5316751&'#1%1316751&'#%5316751&'#1%1316751&'#53312765514'&##1""1113312765514'&##0  p    p    p      `@    p    p     @@@ @  @ @ #=5#15135#1513'#3#51313#31#15111!167671&'&'!ࠠ`@@@ "+4=FOXaj111!167671&'&'!5#151333#31#1535#15133#31#1535#151333#31#155#151333#31#1535#1513@XXX8XXXXXXXXXXXX@XXXXXX8XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"+4=FO671167!11!1&'&'353151#!!!!1!1553151#!!!!1!1553151#!!!!1!15@@@@@@@`@@@@@@@@@@@@@@@@@@@ `111#"''1&547632171632 i W j  ``165114'&#"1'1&#"11327711327654''17W ii jj ii jj) jj ii jj ii<%1#"''1&'&'676767513167&'#151&'1#131' ~5FX;;;;XX;;@@@@F5~ ';;XX;;;;XX@@@@(%1#"''1&'&'6767%3167&'#' ~5FX;;;;XX;;F5~ ';;XX;;;;XL4'11&#"132765567116'&'&6767674'&'&&'&'4767    ) 66CC66 (  21KK21  Y "/08C66  66C80/" ##)K1221K)## `-CZp2111#"'&5147632111#"'&514763#"'&51476322111#"'&55147635#"'&55147632@    `     `    @  `  `   @   @@@ @  `m111''11#"'&''1&'1'&''1&'&771&547'1&76771676167716763217161676'&' ,,   8  8   ,,   8  8  ---- ( (   ::   ' (   99  '((''(('AZ%11#111##1"#"###"'&551514'&##1"11###"#"#"##1"'&5514551#1&'&547%1621@  ! @        @ @ pE   .11&'&'&54767675176''151&'F::$""$::FF::$""$::F ` U!"<=CC=<"!!"<=CC=<"!x @ 9{@8N#3#"131514763213167674'1&'&##11#"'&555#"'&55147632KKKv  vK  @     @ @ L @ @@@@ @ )MV4'11&#"1'1&#"132771654'&#"15111!1676751&'&'#11#"''1#&'67  I Ie.-fp J J  --8!:"1111!16767514''1&'&#!!!!1#11#1&''1&'#17y9903  x  30 \\ @F#3#"3312765514'&#"1'1&'&767654'&#"#"'&547632222   ,9999,,,,9999, 1@@1//1@@1   3,,,9999,,, //1@@1//<7676321#1"3310101112765514'&#"1'1&'&76713276551111767676'&'&#"'11'13127654'&##1"##i 1@@1" p  ,9999,% B  ,9999,%  1@@1" p"//  p #,,%.  Vp #,,%.  "//  @,?R^jv671167!11!1&'&'2711654'&#"374'11&#"327652711654'&#"373167&'#3167&'#3167&'#@       ``@        ``653151&'&'5567671311!1&'&'5167673""@()==)(00000""0000=)(()=054'11&#"11132765517167716751&'&1#"'&15@   @@;EI"  $&E  p "  B11631&'&'515151676767111&'&'5167672&'&'Q99   """:9HH9:"""   99Qp32O  "00H9:"""":9H00"  O23@&'&1#11311767@DD  x@x  -1''1#1&'&'51676731716'&767&'&76-DDp!!     x@x //  1B_11'&767654'&'&7611'&767&'&76'&767&'&76'1''1#1&'&'5167673171611 )) =!! 33 C66  h`"!7 ./9K0:$$''BAQA7 ;6676&'&'&'676727676'&1'&'&'&3)% 32??32++GC%      1 &.  @55  55@,9F6731!11#!11!1!1"'&'1&##1&'676'&'%&'&767." ) 4.P  H  0!!!!67671&'&'#1"''1&'#11@    D1771676731213311!167!11!1&'&77YYYYvu$  p p p   = "1327711'1&#"132771654'&#"111327654'' ` )) ` ` )) ` ` ** ` ` *&* `@@=%77654''1&#"1!171654'&#"11327654''1!11327``` ` ** ` ` *&* I``` ` )) ` ` ))  7Mc2111!12#!1&'&'14763471163312##1"'&53#32##1"'&54763!!!2#!1"'&54763   p" `          "P `  @   `   ?L77311#1&'#1513127!167671&'&'#1"1#151&'#11676'&'222s!,,!s 3 @*,,**,,*G`@ @2222,9%671167&'&'113167513167513127713&'&767PK1221KK12P(( !(  `21KK1221K P((!xan6'&''1&'&1&''1&' "1'1&11117711327677167176771676''1654'7676'&'76771676''1677167654'&''1&'716'&''1&'&1&#"'1&111111771327'&'&7675                        )  9              )            (U7671167&'&'1#11111676771167676'11111105"1&'&'&'67&'&'X;;;;XX;;'  " /:=>Z66I:/ "   '66S`21KK1221K;,   V88 9#$   ,;G11111177123#  @hg D)W%65114''1&#"1#1"33113277%2711654'&##113127654'&##1"'&5147633 J J  @))@ @ @ I  I  ))   .=471163!12##111#!1"'&7716771#1"'&53#31#"'&55   9  9  @@@    @ @ ` `)]"11331132771132765514'&##111!16767514'&#"1!1&'1673127654'&##@ S  ""@"  p p  S  """p p@  -W3#321##1"33167671&'&'#1"365114''1&#"1#1"33113277`@@@ @ @))@  J J `   ))  I  I @M[h#3##1##1"33127654'&##1"'&5476767676767&'#1654'&'3#3&'&'&'676731 j#!%%    %%""j TTT&##&T E21!       !12E pC//!##1!//C1##(LU5#"'&5511#"'&547716321#"''3#36767311!1&'&'51676767&'  I IpS J J  h2E&'11&'"'&27676767676'&7676511'&767676 998,+ 998,+*  %%2 `+,899 +,899   * 2%%'&'11&167716'&''1&1&'&'716'' X< ?  //  ? > -- > ?  ..  ? > --  ? > -- > ?  ..  ? > -- > ?  //%<R211##1513211##1"'&547633711##1"'&54763312211##1"'&547633'3#3#1&'&'51677167311#"'&551&'1 Р @ @@ 0 0 ` @ @X  D--. %5  `  @   @     `--D>B/ %X 88%<R"1133151#"1133127654'&##'1133127654'&##1""1133127654'&##7#3#31676751&''1&'#113276551671  Р @ @@ 0 0 ` @ @X  D--. &5  `  @   @     `--D>B/ %X 88%<R47116321#1547116321#"'&55'2111#"'&551476347116321#"'&55553273271#1&''1&'516767312##1316767  @   @     `--D>B/ %X 88 Р @ @@ 0 0 ` @ @X  D--. &5  %<R113276551#171132765514'&#"271165514'&#"1371132765514'&#"'56326763251&'&'#1113127654'&##1&'6731  @   @     `--D>B/ %X 88  Р @ @@ 0 0 ` @ @X  D--. %5  4%&'11&'&#"3276767%6131#11''1&77!"<=CC=<"!!"<=CC=<"!GGppF::$""$::FF::$""$::FGGpp47113276767&'&'&#"'&771#1&'6731'1&761!"<=CC=<"!!"<=CC=<"!GGppF::$""$::FF::$""$::FGGpp4671167654'&'&'''11&'511'&7716F::$""$::FF::$""$::FGGpp@!"<=CC=<"!!"<=CC=<"!GGpp4116767654'&'&'&761516717161''F::$""$::FF::$""$::FGGpp!"<=CC=<"!!"<=CC=<"!GGpp  $4>L[cm%#1&5473173#3#1654'7#3#&'##3#676766##3#67673#3#1&547&'31''&''&'&'3!11673`{{{{pttt(<-,   ttt,-<({{{{  <(<-,tf,-;'t!!!!@!!!! b6'(87(##(78('6b !!!!(77(##_b6'(88('6b4=%6711674'&'&1##1&'5147716'&'&#127713&'67`D--M9MD-- --DL9M--D X)@Wn{1#"''1&7617161#"''1&7617167471163312##1"'&5471163312##1"'&5471163!12#!1"'&5'&'&767 H (7 H (7H     @    p  P(= P(= f      067!111''1&551'1&7  @    0 O /P3#31#151675#113!51&'&'#151&'&'#1#3#1##1"'&551#11!1676758@@@ @ (((((``(   a "1311#151&'&1176751311#11327716'&'#151311771654''1&1#15131676'' @  `@ @`  @ @ `@ @`  @ @`  @ @ `@ @`  @ @ `@ 0Fat&'&767!&'&7676711673120101#1&'011101674'6331#'471167632#"'&'&567116731!1&'----p----.*))*.ֵ   `&&8v8&&'((''((''((''(('. ;%%; .`  8&&&&8n={%65114'&'&177161#"'&'&7716'&'&13277%11771676'&'&1'&'&547716321767716'&'&#"D**'43,  q  &-9:-p**'43-  p  &-9:,q-:9-%  !q  ,43'**p-:9-%  !q  ,43'**p(711!16767&'&'65&'&'"&'&'01()=p6%$,)$$-D--+p=)($%6/"# )$--D$$0.@#3#"311!167674''1&55127654'&##553111#17165   m 6 l   `@#"    Ņ$88$0=JW''65&'&'2711&#67674'16'&#"'3276''1'676'&'&'&767''' 00  0''0  00  vvv @0  '''0  00 '( 00  0 vvv @  =3#3211#1&'&'167673#31#113151311#1&'&'16767|||D   PPP@@   D    @ 0    N&11"1327716321#"'&547716321#"'&547716321771654'l !++! 3AA300%//%##  l!++!  003AA3##%//% 5B111!16767514''1&##4711633121##1"'&55&'&767@@M   $$$$M` @ @  671167!11!1&'&'@`@-D471163!12#!1"'&5471163!12#!1"'&511#!1"'&54763!12        `        "8N[h676'&'7"113!127654'&#!"113!127654'&#!"113!127654'&#!676'&'7&'&767@             00P       P  AWm6731131#1&'673151#1&'&1'&771676131#1&'&7716'!!!2#!1"'&54763!!!2#!1"'&54763!!!2#!1"'&54763 P?  #!X H      x`  &  N        Bu6767676'&'&'&'&01#1"3!127654'&##10101#1&'&'&7'&'&'"1&'&'&2111111117676'#1!8    E7: ]  7 !8  E7:L 0   @#        @ F]471163312##11676751#1"'&54763312##11&'&'51#1"'&5471163!12#!1"'&5 ` )) ` --DD--      ))   D----D   #=755311#3#31#1555311#7#3#5131%111!167671&'&'!@ࠠ````@`````````@"&51147163211#"''77'11}##Niiii}##iiii?JWd1113167673167673127654'�''1&##151&'&'!3#311#15676'&'%&'&7670  ))))  M3 p333Mp    ))))  @ M0 M`  0@#-7A\111!167671&'&'!#3#51'55316711671#7&'11&'31'211#"'&'&5476763@@@@@@@@@@@  @@@@@@   @E731127716'&'!1   I E@ "1!1676''   7 e7&511477161''    @e765114''1&177    "+671167!11!1&'&'311#!#3#131@`@@E'631121!1&'&77''&767!11#"'       R E#11"''1&767!1    E "1!1676''    ,11177167&'&'!5!16767511#"''0  `0   pУ F3#32##1"'&55147632171676'&'&547632327654'&#"~222   ,9999,,,,9999, 1@@1//1@@1   3,,,9999,,, //1@@1//9[ "113277111132771654''1&#"1'171654'' "1132771654''171'11'? x  j  x  j  p 0 p ;-; x  j  x  j  p 0 p ;-;6'&13117%16'&'#17]  pM oL  @671167311#11311311#1&'&'5167673151&'#11311#1&'&'5167673151#11311#1&'&'516767315167673151#1&'&'5 @    @    @    @   p  @ (  @  @  ( @  @ (  @  @  ( @>>_2111'&'&#&'&'&'&'&'&'"'&5676751476321"'&''1&767613675163  eEF  FEe  "      @@`    `@@  s"    s "@I#1131167673151&'&'#1&'1111316767514''1&##'&'67%9  "0 9%p   DL  "    DXp0A%671141116767&'&'111367116751#11&'6767 21KK12 P""P 0"@.' +9K1221K9+ '/""P0 ")S65114''1&#"1!1"3!11327731127654''1!127654'&#!171654'&#"1 ` * 3* ` *3 * ` `) ` )  ) ` )  ) ` `%A&'11&'676745676763!7'7716'&151&'1'1&=)(+--D-$$),$%6OPPPP'' ()=0$$D--$) #"/6%$PPPP''%?&'11&'676745676763!777116751176''1&=)(+--D-$$),$%6O''PP ()=0$$D--$) #"/6%$''PPt}7271167654'&'&#"3113!12765&'&'11#1&'67514'&#"1#1&'51476751&##1"1&'&'4767567&'####`9##    ##9     \   """"7.->   >-.3( (9A; 0^q1111676751'1&'&767611676751&'&567671&'&'&'&'5147677162711654'&#"3 ))   #$7,0  "" 21KG119#$  R    y))y  y;+* + 0G "" GK12-.F ++;y    &8J53151&'#155676731111!115#3#31#1&'&'16767#3#13110@  ((((((((( ` ,7"11111!1676''1&'51&'&'514'&#65##327 8#$/    0$#8 -@@  ++;H7  6I;++  ,B471163!3#1#1&'&'53#36767&'&'#1!!!2#!1"'&54763` @@6%$$%6 ))  @   $%66%$))   Ek671167311#151&'&'1#13#31#1&'&'513167&'#1513167&'#1516767!111#1311#1311#113%1#11311316751316751&'#151&'#  P  Ppppp PPPP   PPPP pp  0P  P0` @0  0@  ?JWd671167!1131211112##1&'&'#1&'&'#1&'&'3#351'1#1676'&'%&'&7675#11311316751316751&'#151&'#1 @ 3M  )))) M3  p00 00   0M @  )))) @M`0  P000 00 0 '8Iq3#31#15167511!115151&'&'#1#3#1313#367671&'&'#167311311#11#1&'51#1&'51673158  @   00 00((((( ` ((0 00 0Xd6731#1131211##1131#1&'673151#11##1"'&551"'&5476351476331213151#1&'3167&'#pht ff thp 7     7 P@@&&7 @  @ 7 )6BNZ471163!12131111#1&'&'776551&'#1'&'16753&'16753&'1675   3! R`888 3@@  !f %"`f =111!167671&'&'!51&'51#11&'51671315167@@@xhhhhPPPP;111!167671&'&'!55#1&'67315167131#11&'@@@@@@@@@@@@@ ;7111327654''171654'&#"%71327654''171654'&#") ` @;%65114''1&#"11327777654''1&#"11327  ; "1327711327654''''&#"1327711327654'   ;#11"''1&5476321716327#"''1&547632171632  `  7111327654''171654'&#") @ %111#"'&54771'1&547632  `@631121#"''11#"'&5477 7  `@73112771654'&#"1'1&#" i )111311!11311&'&'!!16767&'!@@m!!!!,111!167671&'&'!211#"'&54763@@  p   p,1113167671&'&'#211#"'&54763Pp  p    `/_7671167312##11311#1&'&'51515!671167312##11311#1&'&'51515""3 @@""3 @@3""  @ H3""  @ H `/_%11#1"'&5476331676751#1&'&'5167673111!11#1"'&5476331676751#1&'&'5167673111""3 @@""3 @@3""  @ H3""  @ H &3@MZ&'&767&'&767%676'&'%&'&7676'&'&76'&'&77676'&0    `  0  &671167654'&'&'F::$""$::FF::$""$::F@!"<=CC=<"!!"<=CC=<"!5H[671167654'&'&''1167676&'&'&76'6711632#"'&'7211#"'&'6763F::$""$::FF::$""$::F\!! ))       @!"<=CC=<"!!"<=CC=<"!    v     3FY671167654'&'&'''&76767'&'&''6711632#"'&'7211#"'&'6763F::$""$::FF::$""$::Fa  ""..""   ##       @!"<=CC=<"!!"<=CC=<"!{ ((      -@N671167654'&'&'211#"'&'67636711632#"'&'3#3#1&'67F::$""$::FF::$""$::FP      @!"<=CC=<"!!"<=CC=<"!P     "/O11!16767&'&'!&'&767676'&''67131#11&'51#1&'67315R6666RR6666R0  h    66RR6666RR66h  h    @+;M]o111!167671&'&'!3#31#1&'516767311#1&'53#31#1&'5167767311#1&'53#31#1&'516767311#1&'573#31#1&'516767311#1&'573#31#1&'516767311#1&'573#31#1&'516767311#1&'53#31#1&'5167@@      P    p    p    p      @  p  P    P  p    p  p  p  p  p  P  8y211171632771611'&11#"'&5515115147637711171675171635111'1&'151151&''151&'&'1"1511771511'755#177  E;7#&&$  "IE;@@   @@@@1' * ! ) @@!   "` PB  BA @ @C G F@ > HKI HNGGG E@3&5114763211#"'&54771'!!!2#!1"'&54763     i   5T&11176716'&'111132771654''1&#"! "11327654''171654'   P ZZ p p p p ZZ  @   x YY p p p p YY @D&1176''1716'&'&11767513127676767&'&'#15  )  21K0    @)  %%8K12@ 6'&13117 d `T77654'&#"1#1131114'&#"1#1"33113151#171132765513127654'&##1777 6        S666 7@3   @   Ybk67&'71116331676751&'&567671#11&'&'47675151&'&567673&'6767&'PP #` "" $%6` ""  ""X X "" 6%$ ""  ""7Adl&176''171654'&'&177161'16'&'&'&'611'7771676'&'&1'&'&54771'7'' P [**'43,  `  )55,sz999**'43-  =2h-&&& 0 oZ-:9-%  !`)+,!'!s !*Z888-:9-%  !>(R>0  9676'&'4711633121312##1"'&547633151#1"'&500 @     p      !k4'&131"33327654'"1133111#1"3312771133127654'&##1'1713127654'&##1"1'1&##     @ ZZ   VV   ZZ   VV    P     zz   zzIk"1133111#1"3312771133127654'&##1'1713127654'&##1"1'1&##4'&131"33327654'  ZZ   VV   ZZ   VV          zz   zz  P   ' #.7133327654'&##171654''1&#"#3#'1711#Pi | rP|DP  P}Cp&'&'67673116767&'&'1#1&'6767&'&'#1&'&'51676767&'&'&'5167673167  9      9  y      yW     9  y      y  9 pH111676751&'&'&'11#13367&'#151676751&'1&'&'5))))+*B0HH0B*+$%66%$))))(D00 "" 00D((6%$$%6('Q&176''16751&'1'151&'&'1'''#&'&'51'111#13367&'#15167' P ))j+++6%$/+*B0HH0 0 |(1(( ))6i"""$%6 %(D00 ""21'&'&'&747677163 /.VV./ P3EEAB+ +BAEE3P->5#11!151&'&'#1514'&#"1#1514'&#"!!!1!16767`0  0   `@@ `   00       @QZ1''1&'#111#151476751'&76767514763312131677165#1&'&'51367&' A8 ! *   A `p `  #""5 &    g  @5B7''&767#1"'&7716731676767611'&551'7676'&' j5)R*2211%<"Y    ? Y"<%1122*R)5k ,%&'11&'&#"3276767'611''1&77!"<=CC=<"!!"<=CC=<"!WWhhF::$""$::FF::$""$::FyWWhh,7113276767&'&'&#"'&771'1&761!"<=CC=<"!!"<=CC=<"!WWhhF::$""$::FF::$""$::FyWWhh,671167654'&'&'7''11'&7716F::$""$::FF::$""$::FyWWhh@!"<=CC=<"!!"<=CC=<"!WWhh,116767654'&'&'&7617161''F::$""$::FF::$""$::FyWWhh!"<=CC=<"!!"<=CC=<"!WWhhG|11#"'&54763267&'&'#1"3311#1&'&'51176''1&1771133676751176''1&17711#1513127654'&##@   ))))   0)88--DPPD--88)0   `  P4))4  )88D----D88)  8N111311!1&'&'51676731516767'&'&'&#2711654'&##1"33"()=,""    @ @"00=)(%     5B]p%4'11&'&#"3276765!671167632#"'&'&'676'&'5211#"'&'&54767634711632#"'&5--33----33--@!"<=CC=<"!!"<=CC=<"!----'!!!!''!!!!'   4,,,,44,,,,4F::$""$::FF::$""$::FP'((''(('""&&""""&&""   &7676'&'3676'&'7&'&767       8 &7676'&'5676'&'7&'&767@     8Xh   ,=P111!167671&'&'!67&'&'&'&'67&'&'&'&'4711632#"'&5@@ E88!!98UA*+,   @h!!88EU89`+*A,x  -7671167632#"'&'&'71771654''1&!"<=CC=<"!!"<=CC=<"! F::$""$::FF::$""$::FmX X@-?Y1111!1676751&'&'676751&'&'!5!16751&'!1'471163!121#!1"'&55@@@  @  @ "" @@ "" @p  '111!167671&'&'!3#3#1&'67@@X@`57"11331676711327654''1&#"1327711##  `)I I `  )3J J `5"'11&54763311716321#"''1&547632114'&##  `)I I `  )J J3 -111!167671&'&'!7''1&761716@@@/o@@/o+?111!167671&'&'!'1'17163277111'&77167@@ G  iiiGi < @l  G iiiGi < 3111!1&'&'16767!31177116751&'#@^@pf06h%#3##1"'&'&'&'676731514763211##1"'&55%1!16751476321!1&'&'16767312##`...#  ()=P   @  """0 0#  /=)(= |  } @0 0""@"  0C671167654'&'&'77'&771677161'4'11&#"32765F::$""$::FF::$""$::F3 8  8    @!"<=CC=<"!!"<=CC=<"!888  8  E  ,6711671&'&'!11!'"''1&767311#@ h  h @p    p,111!167671&'&'!21#1&'&77163@@ h  h @p    p,&'11&'!11!167671'&'516761@p    p`@ h  h @g711011#1"3313127654'&##1&'&'3127654'&##14551453127654'&##167673127654'&##1#1"330 66H ,##~  ~##, H66   @'(  $    $  ('@  BQ671167217676'&''1&#1#1"33111!127654'&##15165513127654'&##15p Q  Q6$%    p p  %$6@  -2  &,-  @+:471163311'&''1#11#"'&55153#36767&'&'#131'1111&'&' &#&'&'&76761107676'&'&''1&'&'&7676'&'&'& P=)('4 8*  @000""0   $"'     ##'      ()=-#"   ""   +    + BY&'11&1#1"3311#1"331132765513127654'&##1513127654'&##1716'&'&1'; _4 PP P  P PP 4_ ee    @ @    GW"111#1"3311#1"331132765513127654'&##151316767&'&'##3#5131`       p=)(()=pppp""       ()==)(""OV]d&'11&1#1"33113677131127713127654'&##1716'&'&1#1'1&'1#1'3#31'7771#3#31'> 2 )9*.*9) 2 9@**@9N m`       ..@@..$6711673113311!1&'&'#3#51  @$2@N111!167671#1"'&551#3531'3#3#1&'673#3#1&'673#3#1&'67@  @@''Nqx#"''1&767611476321716767471163311312##1&'&771#1"'&511'&''1#11'&'&77171673#3'1  X    X  J3  J3 ` @ X @ ((( `  $. $  ` I  I      ((''Nqx&#"176771132765117676''1133113127654'&##1716'&'#1"11767713117676''1'1&'771#  X    X 3J  3J  ` @ X @ ( `  $ .$  ` I  I      ((((@'=Si#"''1&76761147632171676"'11&54763312##5"'11&54763312##5"'11&54763312##5"'11&54763312##  X    X     ` `     `  $. $  `         @'=Si&#"176771132765117676''3#327654'&##1"353#327654'&##1"353#327654'&##1"353#327654'&##1"3  X    X    ``` `      `  $ .$  `K         '*Sf&17711#1"33327654'&##1514'27716'&'&114'&#"1'1&'&13%611'&'&76777677165&'&'0   00   X    X     1%%  4   ` F `  $. $  `   q  B$%% '*Sf1312###"'&5476331511'&'&767716%21'&''11#"'&511'&'&7716367116'&'&7&'11&567671'&'&77  00   0 X    X    )%%1  `   4   `  $ .$  `   7 %%$B  <V11131#1"''1&'515151677167716763#321##1"'&55147639    a&*#) @@@ @  (#   "  3&0.!3     <V67116''1&'316767&'674'&'65&'65&'&'#1"1111117%3#32765514'&##1"139    a&*#) @@@ @  (#   "  3&0.!3  _    `)3112771654'&#"114'&#"1'1&#" I  I 7 Js J  `) "13277113276511327654'' I  I  J sJ  `)7111327654''1!127654'&#!171654'&#" Js J I  I  `)%65114''1&#"1!1"3!113277 J sJ I  I B Y&'&767#3#"'&7711'&'&77167633121'&''11##11#"'&551#11#"'&55  H&" 5 5 "&    s9  ZZ  9s` `` `B I676'&'5#"'&5511'&'&77167633121'&''11#"'&551#p(   :  ;     Ѐ 0  a a  0 @[v111111''11'&''1'1&'&771'1&76771716761716471167632#"'&'&534'11&'&#"3276765jl>>lZZl>>lZZ   """"lZZl>>lZZl>>  ####&1111676'&#&'&'47676'&'&#?2332?]> J21(  32??23= 21K2(( *7!!!21#!1"'&5514763!!!1!1&'&'3167&'#1 @ @ @     P111##1"'&551676763112106331247716321312##11#"''151&'1&'1#"'&5477167&5#1"'&547633167&''1&547) ) @p@ @ @ @@ ?%55%? @@ @ @ )  )i @ @ @  % @ ?!!? @ %  @ ,711!167671&'&'!17477161''1&5@p    p @ h  h 5671167654'&'&'211#"'&'&5476763F::$""$::FF::$""$::F  @!"<=CC=<"!!"<=CC=<"!`    -n676'&'6'&67676'&#&'&'67677''&'&#131233121771676'&'&1'1&'&##1'13127654'&##  G /--D.%%  !0 !  ^ $ 0   E ? L` ((4D--'  0$ G  t a  D0  Bi671167217676'&''1&#1#1"3311#1"3311!127654'&##151673127654'&##1513127654'&##15p Q  Q6$%      q pp p  %$6   2  "    Qc2771#113''&##113!55#1131"1113#1131513167!127676'&'&#!1&'#5#"551432>5kkkk5>   ) 5.." "..5)  @``@@@ ```` 0  0 `,,t X )A111!167671&'&'!''67!11#&'771#!1"'&5511327@@  @ddddYYY~ ~YL_71!16751676''1&#3#1#1!1676''1"1"551#11#151#11#151#11#157211#"'&54763 s@@@00@(@0@(  ```  `     @V"11117676'&'51676771611327%167&'%1&#116767'11#"''1@ : @     66RR66e'1,%B*.$ > =:ee33"8?6711673!1!!&'&'!!11!&'177131176'''#17%133#111''1&'1'&77167'1&761167##&'67315167@@ @ J @& ,     #H4@0    9++++E$      7M`s53151311131514''1&##1331276514'&##1"!!!13!1276514'&#211#"'&547634711632#"'&5211#"'&547634711632#"'&5@@     ` @   `        ````CC`@ @    @     `     '7IYk{1113151676713167671&'&'!67311#1&'573#31#1&'516767311#1&'5'3#31#1&'516767311#1&'573#31#1&'51670  `  `    p  P    P  p   ` P  P              B G676'&'5#"'&5511'&'&771676321'&''11#"'&551#`  0   ($$(   $$$$``` !  ??  ! `%Pcv11'&'&767611'&'&767667116711661#"''1&1#"'&55147%&'11&7676''&'11&7676'   $#"!!"#$ XX ap  c! !! !j  F'&&'F  v   ] !! !!(16111''1&'&551476777171'77511   DDDD<>>>>>>9999@ =FR[eq'1'17165"11177117716751&''1—&''1&175171'1'1716557117611'17751711#NNNQQN`"!`qr` "`"``"RRRRNNNQQNRRNQQNfMMMR ,ppp$&w#* 11 *$w&$p&$$&vY Z(ddd `$"""d [)Z6717161''1&'&771'1&'1'&'&776111#11''1&771613127654''1&767%''&7677161''113312##1&'&'47744' W &    )` @@ `   W 3    )2,,> X <   ()  @@   ' W R   )P GZm7!1'1&'#1776763312111##1"'&551!11##1"'&5515147674'11&#"327652711654'&#"3&_###  #     X      KKKKKPeeee0 00 0[     M[n"1110101111331276551!11331276551514'&''1&'&'0101514'&##3#31!17167211#"'&547634711632#"'&5  #   @   #  E       e0 00 0e  KK     A7311311311327655131674''131674''131674''1&#"ӕI!K  K!I I Z     Z I *>5&'&'516767671&'&'516767671&'&'5@?__?@@?__?@7 @?__?@ FccFw FccF @?__?@p000""0"" f""f   V""V!(BLbn6711673113311#11#1&'&'#3#513#3#11&'51516767&'#11373#31#1&'51676751&'#11376731#1131#11&'515 0  `     P0   @ 0PP0P @ @`p 0@@$J111!167671#1"'&551#3531''716717161"''11&''1&76@ 0!!0 YYYZZY__$F111!167671#1"'&551#3531''71611''11'&771'1&76@ d$$$$ // $$ //  4444 BB 44 BB $>N111!167671#1"'&551#3531'3#3#11&'5151672711654'&##113@ xDDD  ,D  ,,   8hh 8$7R111!167671#1"'&551#3531'4711632#"'&521###"'&77163217163@   X X 0  0     PF$1>Kam111!167671#1"'&551#3531'6731#1&'6731#1&'6731#1&'67311&'&'4773167&'#@          0@@HXXX$?Xi111!167671#1"'&551#3531'11'&767654'&'&761''1#1&'5167317166'&7654'&7@      \ $!!$ 3    ##   #0##   $>P111!167671#1"'&551#3531'4711633121##1"'&55''5171631"'@ ` ` ----    ` `n@ h $8L111!167671#1"'&551#3531'71''1&77167'1'&771'1&76@ g00p0000 00"0000 ,:HVc%&'71327367&'6'&&'&76776''''654'717&#"'1677&'6717676'&'o0??0::[44 B[[B 44B[[B .::::#".::::0??0:::##:2#"": :B[[B 44B[[B 44.::::0??0 ::::##:::0??0:5  6116767&'&'&'&7676&'&'&'67676 <&&66RR66&%=  Q22"":9HH9:""22Q  12BR6666RB21 BAYH9:"""":9HYAB &1''11'&'5147716'&1'1&'4716@ xD X `1J T ,   9L''&131676''167&'&676767&'&'&'"1176''151&'K""" n 6RR6666R>0  ?SH9:"""":9H5/.#HAu""" n 666RR66! -"":9HH9:""#5h HA^n471163332##113151#1"'&54763332##111312###"'&547633151#11312###"'&54763315151#1"'&5 00  00  00  00    pp        13#32##11#"'&51#11#"'&551#1&'&'6767@@    D----D   ` `--DD--*=P{711331327673127654'&##1&'&#"#1"34711632#"'&574711632#"'&57"11#1"331327673127654'&##1&'&#'"'11&547632#7&'11&#"#1"331327673127654'&## 7     7         7 7   I  W W              P       0   @      :%671167&'&'1&'6716767&'&''1654'71`)))^())(^)))(^^()))/))/)))//P111!167671&'&'!11"'1163&'&'45'1&'&'676771456767@@@UUQQ@./-- @Z''&#"111167717167&'' "1&#67674'71654''111&'51676731#.... "%X;;;;XX;;  P,'&:------5  ;;XX;;;;X%! PW,:&'5Pd%''"1#"''1&'&#1&'71676''16713277111671167654'&'&'&113167716''GGGG= 0770 =F::$""$::FF::$""$::F0 < 0XFF)5&B'..'B'4)!"<=CC=<"!!"<=CC=<"!F # 88 # #3CUew7''&767671''1&'51&11'67311#1&'567311#1&'573#31#1&'516767311#1&'573#31#1&'516767311#1&'53#31#1&'516767311#1&'5&=%/%5567#671167211&'&'&'''130?23:9Z 6%$$%66%$;;; <@1 0eeeeSS  Tfw111121#1#1##1"'&551#11##1"'&551"'&551"'&5514763115111516767533151#1"3#32765514'&##12711654'&#"3!2711654'&#"3&'#13167 f<=         =,9Fg6731!11#!11!1!1"'&'1&##1&'676'&'%&'&76731167513167&'#151&'1#1." ) 4.P  ,,,,H  0,,,,>CP]31213!167&'!1&''1!12767716'&'#117161''1&76151#1&'#676'&'%&'&767.4  ) @@#.  Pf@@f0   "1132771654''      B;H471163312131111#"'&#""''1&76771516767315776151!167116'&'&'&'&''&'&76767611676  0 , e!e , 0 llll#**#  &-21  12,&  #*+#   \ \  $$$$[[       Ljs|&'"1&'#113!127654'&'7165&'#1654'674'&'&'&'01"1#3#&'&#"#1"'&5513271#'1'177'1717  $> < '!    !' < >$  8     +55+ X 0@000 @#  a%%,   ,%%a  #  ` Qk3111'1&##1"13131&5476716767&'&'"'1312765514'&##1"1'1&'#'76''123&'&'4711#&'&'6767231&'&'6767#2711654'&#"3:b-e `D--F-$%66%$$%67>  / ?  C ""06%$$%60"" C;  R-  --D(!!%>6%$$%66%$f   (444 5A  -$%66%$-    2k&'&767111331131677131276551&'&'#6'&67676767&'&'&'&&'&'&76767@  `  &  @\2   "EeeE"    2- =``> -$$$$`0 dd 0            !Y''&'316771127711311#"'%#3#"''1&'1'1&#1##1"&551676761716761䴴W$ 1*"h  )3 k !!4#!   !#4!! n  U /  SrL6&'     '&6pT471167632#"'&'&5671167&'&'1#1"331132765513127654'&##15P?((21KK12((?       0/BK1221KB/0 #     #&-H67311''11&'&'676771'1&7111111271167654'&'&#"3"p !521KK1221K8,4! np !4,8K1221KK125! !pFa61167676131#11&'51#1&'673151&'&'4767&'&7671132767654'&'&#"H //  #+*B    B*+$   ##   &&.D00  00D.&&  `BId67311''11131#11&'51#1&'673151&'&'676771'1&71111114'11&'&#"3276765Rp '&&;;&&--D=+' n`   p '%0=,+    +,=D--%' !  k211716116771'1&767311''11131#11&'51#1&'673151&'&'67'11'&771'11'&'516734'11&'&#"3276765p )66)E ` E&&;;&& `    E ` E)6=,+  +,=6) `  pU7271167654'&'&#"37111312##11#"'&551#1"'&547633151&'&'6767676767&'&'&'671312##11#"'&551#1"'&547633151&'((?      ?((21KK12'0  0'-;K12((?      ( pB/0 #     # 0/BK1221K 00 !21KB/0 #     #%,G11&'6767&'71176751&'#111111471167632#"'&'&5671167&'71176751&'#111111110#0"'38 !4,8K1221KK125! pX0K125! p!(!$ 0" !521KK1221K8,4! p021K8,4! p !)$ 30  U7271167654'&'&#"37111312##11#"'&551#1"'&547633151&'&'6767676767&'&'"&'6371'1&767311''11&'((?      ?((21KK12P-0  0 8,! p !21KN2pB/0 #     # 0/BK1221K 00  ! p !,8K125 9@[11'1&11&'6767&'71176''171176751&'#111111471167632#"'&'&5x !,8K1221KK12! pX !21KK1221K8,! p0@?Z61#1131#11&'&'6767414151#1&'673151#1"'&774'11&'&#"3276765 @ (  ;&&--DD--&&;  ( @k    @  +,=D----D=,+  @   wpV7271167654'&'&#"3711&'&'67673151671315167611'&'51#11&'51# 00DK1221KD00 "  PP  "PXB*+21KK12+*B888 PP 888p8471167632#"'&'&5671167&'&'1327655P?((21KK12((?   0/BK1221KB/0  pp5211#"'&'&5476763271167654'&'&#"30((((00((((00)*..*))*..*)"+ENW111!1676751&'&'!&'6767&'111!1676751&'&'!&'6767&'@08@@H@@H1S471167632#"'&'&567116731#!1"'&5%55#1&'67315167131#11&'`""""`23K\K32  |  @@@@@####K3223K   @@@@@@1R471167632#"'&'&567116731#!1"'&56171611''11'&771'1&7`""""`23K\K32  |  ////////@####K3223K   S////////4A211131514763311#"'&551#!1#"'&514763&'&767  )   ----  )    `'((''(('1KX1111312771311331676''167671&'&'!471163!121#!1"'&55&'&767`)#.( 77 (.#)     )%. 77 .%)` ` `1Kex1111312771311331676''167671&'&'!4711633121##1"'&5573#321##1"'&55147634711632#"'&5%211#"'&54763`)#.( 77 (.#) P P PPP P       )%. 77 .%) ` ` ` `       @`5>1!1&'5167!%111!16767512765514'3&'&'!!!!1!15""" "p`` @""" @ "` @`5>1!1&'5167!%111!16767512765514'3&'&'!!!!1!15""" " @""" @ "` @`5>1!1&'5167!%111!16767512765514'3&'&'!#3#1315""" " @""" @ "` @`5>1!1&'5167!%111!16767512765514'3&'&'!#3#1315""" "p```` @""" @ "` @`51!16751&'!671167!1121#1!1&'&'5PP"" "" "" @ ""@!277117676''131674'%1&# R: 8v s_t  r j1111#1"3311#17716717676'&'#1&'&'513127654'&##151676771676'&'&1&''1&        4!!4         4!!4  `  `  &&   `  `   &&  @'9Sp&'6767!1671&'!1&'&'67%!!!1!1671&'4711633121##1"'&553#36767513121##1"'&55 %R%%%RR   @  I%%%%@ ` ` `  '7k&'676731671&'#1&'&'67571316751&'#&'&'6751311316751&'#1&'5131671&'# %%%%W%@. I%%I%%r%%rrr%))r%r%,111315167673151&'&'!#3#1171717@ p--p @ p C- @  :%#3#513151#1131676751#1'3#3676751&'&'#11 @@@@@@@`;BY`u3#32##11312###"'&54763311&'#1"'&5476331673#3'1&'11&'&771631%731'&771631&'&' r %  % r ))8HHH0#"  __  "#0IIIH~ __  #"00#"   (   '(  ||`" "|||| ""=M"1131111"33!27654'3&''171675127654'&##5#15167711  .DD.    .DD.  DD  B/DD/B   B/DD/B  K (DD'=KU"1131111"33!27654'3&''171675127654'&##55311#1&567711#  .DD.    .DD.  DD  B/DD/B   B/DD/B  K DD=M"1131111"33!27654'3&''171675127654'&##553111'1&'  .DD.    .DD.  DD  B/DD/B   B/DD/B  K (DD(>M\4711633!2#11112##!"'&54763516771'1&'51"'&551716751#3#351&''11    .DD.   .DD. `DDDD  B/DD/B   B/DD/B  (DD' (DD'  J11111&'5111113312765516767515151&'&'"&'&#"&'&#"&'&#  -2  $        03&;'*` i )P     S4'11&#"1&'514'&#"1'1&#"1316767514'&#"1&'514'&#"1&'5    <  qC]K12      :  k?21K p ?7"1133133676751&'&'#11''111'1&1#(     @6%$+$2." K C     $%6q?,# @B<671167331111##1"'&551'1##&'&'6767336767&'&'##&'&' p9#q ` N"  0P  Pp P /# 0 2      "Y&'11&1&''1&'&1''1&#"1330101676716'&'&1#&7716'&'&1&'' 5 + ?7  qC] -!" R % $  &9    5  k?+     ?KXd471163216367263111##11#1"'&'&''1&76761&'1675716751&'&'1675  !    $%6@*$$H   8p0P     006%$"`  KC``````'=M2111#15147632111#"'&551476347116321#"'&55%'#1'1&767655332##1316767513273271#1&''1&'516767 @ `  @   SSSFG F 88--D>B/ %  @ @ @ @ @      D--. &5 d+P&132765511327711327651&'&1'11331132765513127654'&##1"Z  V  V  vv @  @  S s s     8G671167654'&'&'67311''1#11&'5153#327654'&##1F::$""$::FF::$""$::F`X""" %=0@@@ @@!"<=CC=<"!!"<=CC=<"!h",K RH`pX  @"8!11!#671167!11!1&'&'!!!2#!1"'&54763@@       ->_5#11!151&'&'#1514'&#"1#1514'&#"!!!1!16767131#11&'51#1&'67315167`0  0   `@@ ` 8888  00       88888.?K21113151476321311!151676731514763!!!1!1&'&'67&'#13  0 @ 0 @  8     00     .?_21113151476321311!151676731514763!!!1!1&'&'6'&1'1&11771176''17  0 @ 0 @  1////////     00     q////////.?Q21113151476321311!151676731514763!!!1!1&'&'6'&1'1&177  0 @ 0 @  I_/@p     00     q_/@p  /"11111!167675151&'&151&'&1514'&##@     @ 0P  T?T 0+=471167632#"'&'&5767&'676767553271#"'&5""&&""""&&"")   0'!!!!''!!!!'@)p #EU#3#"13!127716''1&##14'&#"4'11&##151#11#1"113!12765555#1132765ࠠ y0 0   @0 0y @   @ 0 0  0 0 @```` @'''11771617711'&'167  o 7777}2 :|:::}3 O#1113117713167671&'&'!@` {P ] 0F671167654'&'&'5#"'&5514763235#"'&55147632F::$""$::FF::$""$::F     @!"<=CC=<"!!"<=CC=<"!@    4671167654'&'&'3#321##1"'&5514763F::$""$::FF::$""$::F@  @!"<=CC=<"!!"<=CC=<"!`   6?H6711671#15#3#1!1676751&'&'#151&'&'&'6767&'0@@@ )) @ 00 P000 )) 00  000@3AN\6'&1#1"313!127677127654'&##1'1&1#175&'516771&'51675&'5167  ]V 44 V]  QQ=`        ``````````N[7671167632#"'&'&'7&111771632176''1&55167716'&1#"''7676'&'!"<=CC=<"!!"<=CC=<"!       (++( _  F::$""$::FF::$""$::FV  3V II V2    FUa676'&'"1117677111132765514''15117676''1&'#776771'76''1   / #M  2F M/(  5C vv` ]  F+MS Y2^^  g%}}}  X5  @18JY111!167671&'&'!'''1#11'&771672''1376731#1&'55316767&'&'#@@HHH R H*[8))80    @    k****`))```  ):b1111&'&'&'&'67211#"'&54763'67&'&'&'&''6111171611&'&'&'677A4444N   :&'% ( 1)*5(` }ee<<X44AN44   H'&:%w`(5*)1 ( X<  D+     .   ? <'+*A\  ||    |].  III'#"7..%O   k uK1 G***2 @/// (  %('.A*+    9AQ&176''167676'&'&'&'&''67116'16'&'&''1672301%' P i  #$00=3+*!p&11+. '   Z S2 $#00= 0 R  ##!"X"!442"  F  V ##!"M#&'&'51672751#&'&'"1#"'&51476321676763276767 ------   -- P @     !Rdm777161151#1'1'1&#"7'&'&76771&#"11311767671767677676'&''%1331276551#&'67%5331276551&'#67&'C```  c  H!444TH\     P    P kOOO   N /}(((C0S  {R  +777111#"''157"11!1676751&''1&#@0u u0     +8DQ]111!167671&'&'!3#3#1&'6767'676'&'%&'167516751&'&'1675` p@@@""   P""`$$$$p@@p@@@@@+8FTb111!167671&'&'!3#3#1&'6767'676'&'%3#3#1&'673#3#1&'673#3#1&'67@@P@@@""   @""`$$$$ @@/<%&'11&##1"32767%671167632#"'&'&'676'&'$@$$%++%$q!"<=CC=<"!!"<=CC=<"!))))@F::$""$::FF::$""$::F#$$##$$#+8F111!167671&'&'!3#3#1&'6767'676'&'73#3#1&'67@`@@@""   ````""`$$$$@ 1>KXe!!!&'&'!1!167671!67116731#1&'7&'&7676731#1&'6731#1&'6731#1&'@@@@v p$$$$`       @@0D[11167674'&'51&'&'67116710101&'&'67670101511&'&'6751671 ""  p 00 ()==)(   "" 00  0%3=)(()=3%  !  !0D[11167674'&'51&'&'67116710101&'&'67670101511&'&'6751671 ""  p 00 ()==)(   "" 00  0%3=)(()=3%  !  !0D[11167674'&'51&'&'67116710101&'&'67670101511&'&'6751671 ""  p 00 ()==)(   "" 00  0%3=)(()=3%  ! ss !0D[11167674'&'51&'&'67116710101&'&'67670101511&'&'6751671 ""  p 00 ()==)(   "" 00  0%3=)(()=3%  ! 33 !0DQ6711671&'&'47675711101016767&'&'010151&'&'676'&'p   "" 00 ()==)( 0  P  ""p 0%3=)(()=3%0 `3FYl4711632117716'&1&'&'1&'1327652711654'&#"34'11&#"3276552711654'&#"34'11&#"3276552711654'&#"34'11&#"3276572711654'&#"3@   !)+    @     @     @     <  !+ <   @     @     @     7\67217716'&&'"'1&#1"3!127654'&#!15513276551!1132765516751!`  h  !  @    @s  h !   ,(  (,.Ojw%671165&'&'1&'&'6767675167'&'&'67&'&'&'6767'611#"'&'&'&'67635&'&767?%21KK12%=%%32??23%%= )) 1()==)(1]     L&'/K1221K/'&67F?2332?F76& ,)), *D=)(()=D* )))) /111!167671&'&'!!!!2#!1"'&54763@ @@  @@    7"113!127654'&#!   @   'AX#3#1#1516767311#151316751&'671167!11!1&'&'1133127654'&##1"@"""P@   """@   :111!167671&'&'!6171611''11'&771'1&7@@O////////@////////&'1#1311#1311#131167513116751311675167673167&'#1513167&'#1513167&'#1&'&'51&'1#151&'1#153#321##1"'&5514763#3#1315((((((88((((((88  (88((((((88(((((h   21117161171716171611''11171611''11''1'111''11#"'&5511'&7715111'&7711'&'&76771'1&76171'11'&771'1&'&76761'1&761151'1&761514763 1=  D<=D  =1  1F#C #$ C#F1 1F$B ## C#F1 7&5676767"'1#"'&5477,+1)$$)" !)$$)1+, &^g&11111311327655151514'&#&'"11327655167674''1&#1&''1&'1&'51111151    "  "     0&'Gp p   # #   :7#3#&'516761676'&'&547632327654'&#"1#1  *,9989,,,,9999, 1@@1//1?@1) w *,,,9999,,, //1@@1/.) 0=JW67311312#!1"'&54763317!!!1!1&'&'16751&'316751&'316751&' x `  `g```   n@@0b631121310101316751&'&1&'&767675111771767676'&'&#"'716'&'#111#11?@1) x *,9989,%   *,9989,%  1?@1) x1/.)  *,,%.  !x *,,%.  "/.) 7E"1133116767&'71654'&#"1&'513127654'&##5&'5167 L11;;XX;;  +9 0  "88PX;;;;X@1 # "  'U'1#"'&551#1"'&5514763315147632'#3#"13312##1&'&'16767312#z{{{ {     @@@ @ @))@ V{{{  { > @ >   ))  'U'1#"'&551#1"'&55147633151476323#3276514'&##1"'&54763311#1"'&54763{{{ {     @@@ @ @))@ V{{{  { > @ >   ))  :%3#36751&'&1&'&767654'&#"#"'&54763213 *,9989,,,,9999, 1@@1//1?@1) x *,,,9999,,, //1@@1/.) BUh{&#1#1!16767&'&'67&'&'#167&'&'#165&'&'211#"'&547634711632#"'&5&'&'&56731 "p$M  `   @))  "$$%     l    @5H`111!1676751&'&'!'###&'&771632171632'4711632#"'&5'&'1!167&'!1&'&'5```` @ 8    '&:@%k  P T   :&'%1O]%77'1'1'11111771677177171677113711111717171654''1&#"7'&7716 ">" # x O  ">" (0 ">" y $N } ">" ' $7171654''1&#"717716771'k1111(G# x1111(Gx #G'111'111'1'1'171632&1'&77163211111111'&7716771'(((4`4ff `Jf I (((4`4`ff `I fI D"71327716'&'#114'&##1"1#1   H @ Hq    c"7''1&5477161!121#!11      "   H @ Hc"%771654''1&1!1"13!11O    "   H @ HC"6''1&#"1311331276513167>   H @ H      @!(:N671167311331111#1&'&'#3#51'1'17163277111'&77167 _  G  G <  ^ <@l  G G <  Y#3#177111'1&131676''17111316751&'&1'171176751&'#111'1716'&'Ȑ (OO(  (OO(  (OO(  (OO(  (OO(  (OO(  (OO(  (OO( $7E11#11!167671&'&'#1&'&'211#"'&547633#3#1&'67  &%    P@@   <D+%654''1&1#151&'&117675131177p    pp    p h 88 h h 88 h+&#"1311#11327716'&'#15131676'' h 88 h h 88 hp    pp    p>116767654'&'&'7#"''1&56731514763312131F::$""$::FF::$""$::Fykkkk:   :!"<=CC=<"!!"<=CC=<"!dddd ` ` >%&'11&'&#"3276767''&547716313121##11"'!"<=CC=<"!!"<=CC=<"!cccc ` ` F::$""$::FF::$""$::Fykkkk:   :>7113276767&'&'&#"%'1#&'51#1"'&55147633151672!"<=CC=<"!!"<=CC=<"!'dddd ` ` F::$""$::FF::$""$::Fykkkk:   :>671167654'&'&'776321#11##1"'&551#1&'47F::$""$::FF::$""$::Fykkkk:   :@!"<=CC=<"!!"<=CC=<"!'dddd ` ` S11327711767514'&##111!16767514'&#"1!1&'1673127654'&##` * ) ""@"  p p) *  """p p@  ;111!1&'&'16767!55&'#1111327711367@@!B$B! @牉 !B$B!!C!!!5167611'&'51!1"'&54763211#!11''1&5477161! @@` `  ` `@`@ ` `@   @ ` `@*U711327656767311771654''1&1#14'11&#"#151&'&1176751316767  )@ @D--  )@ @D-- )  @ @ --D@ )  @ @ --D ` 6%676'&'711&'&'#1"'&54763316767312##@---- ++;;++   ++;;++  p'((''(('08#$$#8  8#$$#8  IR[&'67671165&'&'167674'&'513136767&'&'"#1&'&'&'67%67&'P  ""  "" )7W "" W& a "" "" W "" &@5>111311#1"3!127654'&##1'13167671&'&'!5!151!@ E  E @@    @:6331211#"'1&7711121037167&''1716'&1'1&u p   p&:9ZZ (`  `aac.%1#"''1&76731514'&##1"'&551476331131^   X P P6%$Xq     $%6c.6''1&#"1311##1"13316767513167^   X P P6%$X      $%6 @;67116713276551&'&'1#11!1676751&'&'#15`""  ()==)(@ 0""0 0=)(()=00)6711671167&'&'327&'&767''66RR66''  $$$$3!87;;-R6666R-;;78! s  p/d56767#1&'673151#1&'673151#1&'6731&'&'5&'&'51&'11#13367&'#151676751&'`))PPPPPP))$%66%$+*B0HH0B*+`))  ))6%$$%6((D00 "" 00D(p,5671167311#1&'&'4'11&#"32765#3#131   P  @p'1113167671&'&'#3#3#1&'67PP@@@@Pp&/671167311#1&'&'3167&'#1#3#131@@@@#-7A\w111!167671&'&'!#3#51'55316711671#7&'11&'31471167632#"'&'&571#13367&'#151&'#1@@@@@@@@@@@L@@@@@@@00D!961'&771&'&567716117771611"'&'Y  0X ( 1\\\\(` OGF: 0 z:HHQ `(' eHHH 1 ( X-&=&'11&'!11!16767676'&'67116731##1"'&5  0W $$$$  0131#&'676767&'&'#11''1&547716pK12  )`  @21K8%%  )@   +21'&'&'&747677163676765'11 /.VV./ D'&P3EEAB+ +BAEE3PCz#669:.J,5671167!11!1&'&'4'11&#"32765!!!1!1@   @@  @'111!167671&'&'!3#3#1&'67@@p````P@-671167!111!1&'&'516767&'&'5@@@ "" @@ "" @0%271167654'&'&#"3113!12765&'&'#'!!!!''!!!!'_D.-  -.D""&&""""&&"" -.D D.-:111!167671&'&'!6171611''11'&771'1&7@o////////@////////96111#1&'51676173#31''11''1&771'1&767 W'  'W 'W W'  W'  'W 'W W' ;3#31''11''1&771'1&767#3#&'516761716111X 'W W'  'W W'  'W W'  'W W'  -:"11117167716771654''1&#&'&767%176''1& I %3&t)X'((''(('@@t%3% I )P----!@@P]j7#"'676727654'2323&#"3632&547&'""#"#&'&'&'4532765&'77676'&&7676'?::UH9:"" ::UH9:"" : E! ;E! ; U:: "":9HU:: "":9H !E ;K !E ; +8AIW'674'367'7"171&'"'71'165&'11672&#16767''''127&567WUUU#B1,;*U ,=Fc>=4H>=4H;*U,#B1U===Ed ,UUU*;,1B#UWH4=> cF=,& cF=, #U1B5*;,U===>H4-@S671167654'&'&'211#"'&547634711632#"'&5'211#"'&54763F::$""$::FF::$""$::F     @  @!"<=CC=<"!!"<=CC=<"!     @   ARc&'1#1311#11#131131'13167&'#17165&'#1513167&'#15731674''1#!731674''1#'51131'1716551&'#11#151&'#11#151&'#1671#154!!4`++++ ++++ ~P  TT p::::::::444 HH 4` @->"11131516767&'1'&771&'674'&##7!1674''1# $&&d j&$ @P)))) !:;J#  #80c j:! P)))  )bkt}111!167671&'&'!531513113151311#11311#11311#151#11#151#11#1513151#1513151#15133#351#155#1133#3#131513#351#1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R2111312##113121!1'1&547633151#1"'&547633151476377!11!1&'47   MM   ))) )   0  0   '))))  09I711771677161!1716551&'&'#167&'!1674''1!1`  2 @66R ar))   % W R66  D  ))0'77671165&'&'#1"131'1674'&##31674''1#1 ,,     )),, pp   )) 7>O&'&76767676732761#!'1&767632767111111!!!1!1&'477   z,,  kk  z  ))%%   P)  )9M_5567311316751673113167516731111!171'1&53#367514'&#"177!11!1&'47 @ @ @ 33   )))@)(((( && `0 0))))  7ox471163312111##1"'&551#1"'&551"'&54763514763315!531212#1##11##1"'&551515147633125#1513`                   @ @ @  @ @@@@ @  @ @ @ @@@@ !.;H1676767'6'&'&''761''1&761''1&761''1&7b- b- WD߽WD7 @ @ 0 @ @ 0 @ @ 'N-2'N-2WEݽWEK @ @ 0 @ @ 0 @ @ '8Kt11#1&'&'676711#327674'&'327654'&#711#327654'&471163332##11#"'&551&'#1"'&5''66RR66     4    q     @@    3)**)3R6666RA    2            '%&'11&'6767671&'&'5167mHHHHmmHHHHm&HHmmHH&OqqO))))))@ >K1111#1'151672171632'#1&'47716'&1'67716&'&7677 "l " vvv/+<3 "1C---- " l" vvvC1* q 1#/u'((''(('!!!1!1@HFa%"11'13171676&'%'"##1&''1&#1"''1&56771674''1&'5147211#"'&'&5476763&<,9999,3 !,5% :   C  $o   <,,3CC? #$  C   : &5"    *7DQ%6'&''&'677'&'11&'6323&''&56767&'6767&'677#()6Q32 KRSH$:=@A>.(.E$%B=I//%&>F:&&$..P0M= AKKH#--4PGF4BBY#0)$27$ 7E;;-.KJW ##;;I K<;!Z;E$55>+SED&w')%- !S\enw4'11&#"1&'514'&#"1'1&#"1316767514'&#"1&'514'&#"1&'567&'&'67767&'&'6767&''&'67    <  qC]K12    0P0p0  :  k?21K p P0 `+4=FO%3#3676751&'&'#1!!!1!1!111311#67&'7&'6767&'7&'67```` ``xxx @@@px '73151#13#3'1&'#1!!!1!1676753333r3r@@@eeeee @$Jp#3#131676751&'&'#11#1&'511131676751&'&'#11#1&'51#3#3676751&'&'#11#1&'51#1"13(((  (0(0( (0( pp PPPPPP 7_3#31#151675#11!167671&'&'#151&'&'#167311311#11#1&'51#1&'51673158@@` 00 00((((((0 00 09%''&''1&#"1167674'&'&'477167716321u4oo4 76QQ67 [)))  *gg"P6666P"1((6)  )6F;KV6711671#15#567675117676''1&'&51&'&'&71167611'#110171"@  `@ 00 ,,'',,(* 00 )  CPA0  pp0  0'--('!20  0@ b8_$7K11#11!167671&'&'#1&'&'211#"'&547637''1&761716  &%    q@/o@@   р@/o$7@NWd11#11!167671&'&'#1&'&'211#"'&5476367&'73#3#1&'6767&'36731#1&'  &%    xhhX@@   pB GS\enw676'&'671167131517676'&'&'&'&'47&'00"'7!167&'!767&'&'67'&'6767&' 2222 $$  # ;G[E    7hp*,,**,,*  mm      [8`\fpv2111111111131&'71716767#"'&5!1#"'&5676767&'&'&'47632!14763#3#!1&'3#367!167# ,6 v&    ,66,  @ M   8 v -$$)$  $$-  -$$)$$)$$-  0B.P47116331217161&'&'671#1"'&5&7116771171'171611'&'' I\.  ()#\I  .=. 1  1 #C D()0 g == 1 Eq"1133113167674'3167674'3127654'&#!1&'1&'&'#5!1676751&'&'#11''11'&551#1  "    C 0" @  ` '' `   "       "P      $L111!167671#1"'&551#3531'67311311#11#1&'51#1&'5167315@ ` 00 00 0 00 0 CJ111312171632131#1"''11#"''1#11!167671#1"'&551#3531'`p 2 FP 2 f  #c 7 #c 7 @,T111311#3!11!6711671&'&'#11367311311#11#1&'51#1&'5167315@ @@  00 00@@@@@00 00 0>671167654'&'&'51&'51#11&'51671315167F::$""$::FF::$""$::Fp@!"<=CC=<"!!"<=CC=<"!hhhhhPPPP@CTa3#321##1"'&55147633#3131676751311!1&'&'167673167&'&'#17676'&'@@@ @  ` @p vp$$$$ @ @ @0  0@  U  C[76767!111##1&'&'71#11311316751316751&'#151&'##1&'&'516713`:00 00 :&'%`:0 00 0'&:%1:C7"113311#1"33!27654'&##1513127654'&##3#31#1533#31#15    @   @`ࠠ  @   @  @@@@@@&;N1113151&'&'6711671&'&'5#11''1&74767&'&'676361p ` p 00  00 +  #,D--<#,D--  ` pp 00  00  0  --D,#<--D,#  H471163!121#!1"'&55!!!1#1&'&'513167&'#1513167&'#1513167&'#15 @  @@pppppp    ` @@@*T471163!121#!1"'&55!!!1#1&'&'5#11311316751316751&'#151&'#1 @  @@00 00     `@p000 00 0)gt'31#1"''11"''1#1&'673121716763#3176771311#"'&551#!1#"'&5147632131514763#&'&767)))\h / ){ .    R)    ----666 d  = $a  )     '((''(('aly111#133##33##33#1167673167673127654'�''1&##151&'&'!5#15131&'&767676'&'p 0000))))  M3 3M   0))))  @ M0 `M0  %Ken511#"'&5514''1&'514763255&''1&'5147632111#"'&5671167!121#!1&'&'5353151#%2111#"'&551476332111#"'&5514763)   <  )   <  ` ࠠ   `   ;+!.   =V   ;+!.   =V   `  @ ` ` ` ` %\'1''111''1'1&76171'1&7677210111121##11'&771514771176''171176'' &7HH7&===88Y99+9 9*9 9 &7HH7&===8899Y,9 9*9 9-;%67&'&'176''1&67!!!67676'56'&'&'!f--D1& / --D1& +*;;*+  +*;;*+ &1D-- / &1D--J7####7 8####8:7554771176''171176''171176''171671##11'&77`9 9*9 9*9 9.+,YYYBYYY9 9*9 9*9 9.,+YY+4 "111316711327654''1'1'7711#W )' ` 3`f () ` 3` )JS471163332#1&'&'1"'&5#3#13157471163332#1&'&'1"'&5#3#1315 8h "" 0000 8h "" 0000  ""0    ""0  -;DM4767%1611#1&'14'&#!1"1#1&'!!!&'51!11%55!11!555!11!    0  0P(==kk 88p@@@@`PPPP>U471167632#"'&'&5%&'11&#"#11!167671&'&'#4'716'&132765""""##))##88` " !  ####p@ O N  *}471163!12#12#!1"'&547631"'&51#1311#1311'1&##1"1316771654'&##1"1513167&'#1513167&'#151&'&'6767&'   @  PPpp3 x 3ppPP0P    @   0G    G0  uD63171211''11''1&'&77'77111''1&'&5511767713; *SS*777    7  T .. TV[[[$ 33 $[6I\o%6711671167&'&'&'#01111111111367673'211#"'&547633211#"'&547634711632#"'&5H9:"""":9HH9:""/ ,&#08    `   //::////:E4%        ?&176''167&'&'&''#0111111111136767327' P v="":9HhGjU/ ,&#0880 0 \9P://6SW  %*E4% Q671167!111!151&'&'567631##1"'&5!1##1"'&55167672113!515@$%66%$    @      6%$$%6"00"p!      !0 0i%#"'0141&'&'6767"11#&'&'&1111167516767&'&'51&'&7&763276'&'51&'3#3#113351#167311!1&'&'516767G"%%".!8;;XX;;8 ,G        *HH+  `  , ":VX;;;;XV:!@    ' ' @  @ PY51&'&'&5111111&'&'&'&'"12771316767517165&'#17&'67)%#  ,-((  )(>LJD-- d"P_.A@/ ""8 ""0:*) &=--D- "B3@%67116'&'&1#1&'673327654'&###"1#1"1333277%0"141050110  wy@ @^-#-% ,$8   X  $ @ ^BR\&511476321716321#"''111###"'&5514763317163332###31716111#10103e f  $- %-#-NP @yw 7g g ^ @ $  X  0B[5'&#""10101311&'51&'"#&#&#&763276565116'&''1&'&'67675167111###"'&5514763317163332###31716111#101038          $- %-#-NP @yw   "    #   ^ @ $  X  0BLV63211&'&'51477111###"'&5514763317163332###31716111#10103B))C$  $- %-#-NP @yw `))` ^ @ $  X  0C4'11&#"1111331676751&''111'1'1&#"11''1&551515!5111'&'&77171654'&#"111111312771655151514'&#"P  dC    33    Cd  X 8@f'd O.!   3(P((((P(3   !.O d'f@8  v:%571654''1&#"1&##1111327655101015133010131'5&'&'511113277123033127674'3127674'676511&'&'0101# FN(p  "JN%    xEN)x H"8888w9IN& +f777161131676751&'&'##'1'1&#"7'&'&76771&#"1#11311767671767677676'&''C```  c  *  LH!444THP  l\  kOOO   N   /}(((C0  S  {U45&'&'311#1"'131&547673111316767514'71316'&'&'311&##1513&&22&&o xD#$  `  $#Dx pN2//2N0))--) `  ` )--))0 w676'&'511'&''1'1&5516767115147633121717167111'&'&77167715111##1"#"'&''1&''7711'&'&7&'&767''&''17P@3  O&/  0&O  3 <; 0001%   N000 %1  AAA3 [ VOXGL LGXOV [ 3A  www1^  www  ^1@s|5&##1"4545676723673113121##11##1"'&551#11##1"'&551&'#1&'&'676731#1316767633&'67))-         6  -@`)) !7 ` @   @)G-!! @O%111'111'16767117165514''1&'#1111111111771676''''1177M58U(*L(&8S\6 XSSS_ 7L}:  =]%<#!5$@`i  `X```h  RHfy1111'#1"331!167673127654'&##1&'&'676731&'&'6767111'&'&'&'676774'11&#"32765%2711654'&#"3] `))   `))( ))u ))       `  ))   ))))w ))     511&'67673124711633111#"'&551&'&'&'66T 633@   ?23  ?23W== Q:4 @ 32?  32?2L2111!12#!11#"'&51#1"'&5476331514763!!!21#!1"'&5514763` `     `      `     5HY671167654'&'&''1167676&'&'&76'6711632#"'&''&7632'&#"F::$""$::FF::$""$::F\!! ))     $$ @!"<=CC=<"!!"<=CC=<"!    v      @#>K%671165&'&'&'!127654'&##211#"'&'&5476763&'&767}32??2332?@   @   ))/?2332??23     `$$$$+Q&'&'1'&'&767%1167673&'&767%&711677117716''171611'&'' 0/   @@ .. )  *pp0 .d W"p    M M  * CNat111116767674'3367674'3127655151514''1&'#151&'&'!#3#51312211#"'&547634711632#"'&5'211#"'&54763@"))"""" ;1 iii129     `  P"""" @  G0@=p        -=&176''117671&'&11111'151&'&'#1'1!167' P W` Kpw% 0 D   @ ;d''11:67116331211312###"'&547633151&'&773#3'1#1  40 PP 048  7)* d   d *)7c@@*&176''16767&'&''#3#'1#13!' P %()=5'& ;D.-  0 "",=)( 2n-.D &@a&'11&'167676765514'&'5#1&'&'51676731''&#"11113277171654''113315147633121312765&'&'&'13151&'67&'s''22''   ''22''  #) )  L3  b  b  30??0? ``++ @ ++ @ 0))  ,,9  @ @  9,,""00 1E471167632#"'&'&567116731#!1"'&57''1&761716`""""`23K\K32  |  q@/o@####K3223K   1@/o0K^211#"'&'&54767633#32!1"'&56767471167632#"'&'&5713167&'#151&'####.\\\ #  23K""&&""""&&""0 """" -%&  K32@'!!!!''!!!!'P@0r<211#"'&'&54767633#3271!1"'&56767%676321771611''1&1#"'&'51&'&1'&'&'&771654''1&767676176754'&765####.\\\     23K                \""""   K32V                   2DV7271167654'&'&#"3113!1&7716771&'#% "1171654''17716771'1####.K32  % (1J\  G  < G""""023K  < (0D G   < G1K\471167632#"'&'&567116731#!1"'&5#3#65514'&'012331#&'674'67`""""`23K\K32  |  a !>D.- 0&0  0@####K3223K   .''-.D  )6)! 00 /L6111&'&'51'111##1"'&77151&'677617716#!1"'&56767M$%66%$0 k G G 2 ~ 2(96%$$%69 AOOG( L L ))7 7))0Ae7271167654'&'&#"3113!1&55145&'#%2111#15147635"13312765514'3&'&'####.K32  k 0B\^ @ P  """"""023K  )@ 00 000   0""1?471167632#"'&'&567116731#!1"'&53#3#1&'67`""""`23K\K32  |  ؐ@####K3223K   .MY7&'11&'&5676767&'&'&'436763671167617716#!1"'&53167&'#, !      &6%$$%6%$; > > ;$%  |  '      $%66%$?./S S/.?   0JT7271167654'&'&#"3113!123&'&'&##%7767676'&''1&1151####.K32  9\5xxx 6 6 x h2_""""023K  ,78.N000!))&&&&))!0V()*&)&176'%16767&'&''113!127%' P *$%66$$H//   0  !"-6%$$#5x21I  y2NW7271167654'&'&#"3113!167'1&551&##7"111132771654''1&##67&'####.K32   d\ kIkS""""023K   d!!P SkIkPT1132767654'&'&#"'1'1&331"30133"301312765&'&'&1'1716'&'##`""""_!$ 6!" v "!6 $!  @####| *+9 9+* | .Cu 676'&'!676'&'310101&'47&##167676765&'&'&'#1!1&551&'1'&'&'5111'111#1&'&767714545'7#3#"1675147676321716&'&'6'&''1&'&1'&'51&'&#"1''1&1111771613276751676176771676''1&5477676'&'----p----)*.@%)))Ah8&&,   ***      -\           '((''((''((''(('%; .)))< &&8       ,                      9@W^u67116'&'&1&'1771133127654'&##11677771#6711676''1&#1%'#171167676''1&#1  q."{    ! ~RHHHHH0#"  __  "#0IIIH~ #"00#"  `_  %%") -  '"*||||`" #\||||"" 9@W^u&'11&76761671''11##1"'&54763311&''''13&'11&'&771631%731'11&'&'&771631v  q."z    ! ~RHHHHH0#"  __  "#0IIIH~ #"00#"  __  %%") -  '"*||||`" "\||||"" 7@Zm6711673!1#1311#1311#1311!1'1#1&'&'5''#113!!!1!1&'&'5167672711654'&#"3@V |jb W FR         @@@`      `   @"E7116514'&'&'"176763367116727651&'&'&#17 ,&!!  !L!  !!&,  y     r  @1Jc|'&'&547676%'&'&7654'&76761#"'&51&'6767''&'&547676%'&'&7654'&7676P         %   '--'  2::2  2::2  '--'  l% )%3  $))$  $))$    @=65114'&#"1'1&#1131674''17''&17716131676'7 " l"vvvC1" 3=+/ "l "vvv/#1 q *1C@?111311!11311&'&'!5#1"3!127654'&##1514'&##1"`@@          1L^671167!11#1&'315147633121311!11211#"'&'&54767633#3!1&'6767`#d @ @#  6668&&&&8'    1 @   &&88&&7EU&'1#131111315167671311&''1513167&'#151315167116751&''113X  q``q   Pg7 gP.D``D.\ 8 \8CTx&'&'"'1&'6767632010101011111101#&'&'&'676767&'676710145""'&'&'5167676767431135551676714567671&'&'51%.M=W %66RR66/'(&('0\8%##9+!+ %8\0'(%=WW=  7W=66RR66=Wp""Q  O! # ` #   # p #""# -H]7671167632#"'&'&'"'11&547632#'1132767654'&'&#"'676767&'"67!"<=CC=<"!!"<=CC=<"!  `   @+,7" F::$""$::FF::$""$::F     7,+ "~@I111177131176''1312303176''167675151716'&'&##1&'&'67%  J/ ')/ *>&'Q 2*% 9q _q f22C@ @@M674'&#"1''1654'&#"3012113!1276771030127654'&#"1'&''5  9 Y  --  Y 9V   s  G      G  s "+4=Fbk "1132771654''67&''&'67&'677&'67'&'671131676751&'&'#117&'67Kh`rtPt"x,?Rex111!167671&'&'!211#"'&547634711632#"'&57211#"'&5476374711632#"'&5211#"'&54763@@@       @     @`        @     ,?Re671167!11!1&'&'4'11&#"327652711654'&#"374'11&#"327652711654'&#"3@          `@@          ,111!167671&'&'!211#"'&54763@@  @   ,?Rex671167!11!1&'&'4'11&#"327652711654'&#"34'11&#"3276572711654'&#"34'11&#"327652711654'&#"3@               `@@     @     @     ,?R111!167671&'&'!211#"'&547634711632#"'&5211#"'&54763@@@  @     @`     @   ,?671167!11!1&'&'4'11&#"32765'2711654'&#"3@`     `@      /&'&767&'&76772711654'&#!1"3!  ``       @%8671167!11312##!"'&54763312711654'&#"3`@ pp @         @.M4'&11#1"3335111#"'&54763273#3133127654'&##11&'&'#1@   @@  ```` @  ` -       @@ A%%77131676'&'&'477167716'&'#1&'47716765&''1&'117169DL? Q p,-@@-h$ 9( " %@-,,h$//37 @^g11111312##1"''16'&'&#"177111116761312#!1&'&'676767676767&'p U \3 @ n !)) J J%Z &&AAR "S\  oF G%  TEE,,hYk6711673113116751&'&551'1&7611111&'&'514'&##112#!1"'&547635316751&'#1 %  M   @% @  M      ````@16710113111111111011713167111&'&11111111131070307676767'1&'"1'&7716321111#1&'&''1#11#1&'&'515151474771676321''1&#531276771&'&'0155&'&'0#1316767w& /2!  (   2/ &  , 0,. & .,0 ,  7 , $%%$ , p         )0 .. 0)   +++  .  *+++  .  3&'11&767611'&'&76771'211#!1"'&54763!4  @  l  b    bb   @Ml471163!12##11311###&''1&''1&''1&731213151#1"'&53#351&'&'#1111!1"'&54763!12771632   D-- @ H &Р ) &5    @--D@ _7\ 3@  )i $    `%8K7671167171671&''11&'&'5''&'16773'3676751&'&'")(><+HH+<>())(><+HH+<>()HHH""""HZHHH""""H>()*HH*)(>>())II))(>HHH""HHHH""H@<E%6711673127176751&'&'#1&'&'&'1675132716751677&'67#8U $%68,7R66,< z  6%$ 66R6+,B.)3 367116'&'&117676'&''17"113!127654'&#!  @    b    bb   @%^t1111!151&'&'676751&'&'!!!!1331516713151671315167131516713127655%5#"'&5514763235#"'&5514763235#"'&55147632@  @  @@ 0```0         GG  @     @@@@ @ @@@ @ @@@ @ Em&176''16751&'11'151#1'1633151#1&'673151#1&'6731&'&'1'#&'&'51'111#13367&'#15167'' P 9#PPPPP))?6%$/+*B0HH0+ 0 |(1( -  ))6$%6 %(D00 """@!4>HR\7676767671&'&'&&'11&'6767#11#157115135#16767'3#31&'&'ABAA<<<;AABA<<<; """"@@@@@@@@O5   5   ))))@@@@@@@!+5?I\w7676767671&'&'&#3#51'55316711671#7&'11&'3111&'&'6767'1#13367&'#151&'#1ABAA<<<;AABA<<<;@@@@@@@@))))O5   5   @@@@@@`0  00  000D@'4F111!167671&'&'!3#3#1&'6767!1!1&'%3#31#1&'5167@@0`PPPPp00@'4111!167671&'&'!3#3#1&'676731#1&''5'&'"11211&'51&'1111&'&763327656'&''101&'&'67675167@@\        p    N111312##11312##11'&'&771#1"'&547633171#1"'&547633171676r *? i@ A *? j@ A  >  `  b  >  `  b 0CVi|%111##1"#&'&'&'6767674'11&#"3276552711654'&#"374'11&#"327652711654'&#"3b  H9:"""":9HH9:""        `   "":9HH9:"""":9H   `   `  `   (H111!167671&'&'!3#327654'&##1#3#1#"'&55151476331@@000 00000  H))@  @@  @x ))@Q67116731131516767311#1&'&'51#111311#1&'&'5145'1#1&'&'5 `  `  ` P`  ` P` p    `  k `  `k `4@MY61716171617161''11''11''11'&'1673167&'#3167&'#173167&'# ((((((    ((((((   R "" "" "" 0 "" "" "" p(4@LYfx2111311!1&'&'16767315147633167&'#33167&'#33167&'#'&'&767676'&'%3#31#1&'&'516767!111#1513@ xx p  `  `          @@   (H `  ` A#11"''1&54771176''171176''171176''171176''1716321\30 0*0 0*0 0*0 03\.\30 0*0 0*0 0*0 03\`1133!676751&'&'#11&'51#11&'51#11&'51#1&'673151#1&'673151#1&'673151&'&'#11101 `@  0@@PPPPPP `   ` PPPPPP@@0  `@@K711!1676751&'&'#11&'51#11&'51#11&'51#11&'51#11&'51#1    @@@@@@ p   PPPPPPPPPP A671167311#1311#1311#1311#1311#1&'&'  PPPPPPPP    0@@@0  -?Oaq~&1#113151676713167671&'&'#1'3#31#1&'516767311#1&'53#31#1&'516767311#1&'5%676'&'713167&'#151&'Rv    v    p    *,,**,,*X  [  `` @ [@@@@p@@@@22220 1&111713127716''7132771654'&#"h V V6 P (ppp @ p P 6V  V h(ppp @ p 1Rc111113276767&'&'&#113151#12711671167&'&'&##1%113151#1!%%##))$#341 143#$))##%%!  ((``(( `@MZ%671167&'&'&'011131516713151671316767510501%676'&'%&'&767,"":9HH9:"", 0@0   $$$$1--6?2332?5.-@ 0000 @$$$$@  /Jcp'11&'&'67''311#3#36751&'#1'167'671167654'&'&'3167&'&'#1&'&'''#113dOOO`\0?R66# S3 ###|0?R66"0mF::$""$::FF::$""$::F    *```v/OOO`]"66R?0 @|#66R?0/!"<=CC=<"!!"<=CC=<"!  ```@9#M''&#!1"1367676727676'111#"'1!151#"'11&'11!167675151$::::*))((()*0 @X[[[ [%%%%%%@@6E!!!27654''1&'!113513167675151#11#151#!327651#%66 LtL   @@  @  rr  P  P -D471163!12#!1"'&5471163!12#!1"'&511#!1"'&54763!12   @      `      7671167632#"'&'&'%&1'1&11'1&11'1&117711177111771176''171176''171176''1716'&1'1716'&1'1716'7711'7711'77711'77'171!"<=CC=<"!!"<=CC=<"!9 "" !-8 9." "" ".9 8-! "" "-9 8-" "" "-8 9-" ------D------D------------F::$""$::FF::$""$::F "" ".9 8-" "" "-9 8-" "" "-8 9-" "" !-8 9." ------D------D------D------ N|53151&'#155676731131211#1514'&#"1#1514'&#"1#15147716335531132765513113276551311!1&'&'04   4   h(((((((((4L  L4PPP  P=67676731211''11#1&'&'511'&''1&76771633  !!  "  8 43 8  ~"   i  @ ++ @  iB Vm676'&'#11"11'&'&771677163211''1&''1111'&''1'1&7777111#"'&5477!  3#"   2  G9(= <     5%  A6 \  XN!@>>>-$ > ;)<111!1676751&'&'!1&'67!127654'&#!211#"'&54763@p `      3Pk7671167632#"'&'&'6'&'&'7676327'27116545176''1&1374'716'&177132767!"<=CC=<"!!"<=CC=<"!S    `   `   F::$""$::FF::$""$::F     |          ="113!127654'&#!"1133351676713327654'&#1!1   @ @@))@@ @    ))   #4CJQlt|671167!321#12##!&'&'113!151!1"7''&'&'31767315#1&'4'11&'&#"32767653#3&'7#3#67766#16767)    )@   ? *  $$  N"""" $  $ 9 ? `)  @  )@ @  ##  &++&R####&+ +&L ## _l61371211111111#'1"1''1&#1"''1&''1&5714''1&77165'147716771631277&'&7677721371011''11'&7''67714112771431''11#&'              b'((''(('+++ )% !8 %%%) + 8!                ----ggg$ Y 1=YY=> ! ':M`&1111177167716''1&''1&''211#"'&547634711632#"'&57211#"'&54763"J$<"S"J$<"S'  @     (L"R"; (L!S":      @    0CVi&'11&1111177167716'11&'&'&'&'&'&'211#"'&547634711632#"'&57211#"'&54763 "J$<"S"J$'  *1  @      (L"R"; (L! & )t     @   %K4'11&#"1#1"33113151#11132765513127654'&##11&'&'#1131           @`@   @ 3@MV_hqz111!167671&'&'!3#321##1"'&551476367!1!1&'!6731#1&'%&'6767&'7&'6767&'7&'67@    @0P0P@ @ @ P'Hi671167654'&'&'5&'&767'6171611''11'&771'1&736171611''11'&771'1&7F::$""$::FF::$""$::F$$$$ %% $$ %% $$ %% $$ %% $$ @!"<=CC=<"!!"<=CC=<"!   $$ %% $$ %% $$ %% $$ %% J\o1'11111132767676"'11'&5514771&'&767671&567676711''1&''2711654'&#"3` 5$44D $6-- (::E508 8< F ))1(,8 (u  `['Yv '  2b  7 h  x))!L 7  F   3W6'&1&#"1516715167167516716751&'77771&'&'&7&767632 i4>mHHE2>>2ELD@@@ o =ee= >?/:  K !  845& .==<* $2@t111!167671#1"'&551#3531'3#3#1&'673#3#1&'67#1&'6731677167163131#1"''1&#"1#&''1@ @@@@@@@@6 #   6@      @@  2'     8!$@111!167671#1"'&551#3531'57161''1&7615167@ (HH fffHHfG'@G6711673113311#1311!1&'&'5531'1&7611'&771#5#3#51 n'PP'n p000'PP'Ѐ5@G6711673113311!1&'&'513117716''1&1#155#1&'673%#3#51 'PP'hh p'PP'000$2@Zcq111!167671#1"'&551#3531'3#3#1&'673#3#1&'673#321##1"'&551476353151#3#3#1&'67@ @@@@@@@@  @@@@ @@` @ @ @@@@$1>111!167671#1"'&551#3531'6731#1&'6731#1&'1'&#"111111011&'51&'1111&'&7601111111227654'&''111&'&'67675167@ @@@@        P@H      $^h111!167671#1"'&551#3531'3#3171611''11'&771'1&'01#11&'51516767&'#113@ HHH +" "" !AH44 (  <,@PP(@_fx111!16767511"##1"''1&#"1#&''11#1&'6731677167163131&771677151#1"'&551#3531' "1171654''17716771'1@<@     #     _ &  G  < G   8!  2'  < ^,  G   < G$>111!167671#1"'&551#3531'&'511'&77161''1@ (HH hfHHf'D "11132771654''1&#"1''327654''171611!1677W R\u&&5QQ111 25*\ Q\&&u5R222 15*\@(F]6311217163211#"''1&54771'1&547''1!1716''1&11#"'&'11&'6767632) Q5&&u\R 111\?*52 ' R5u&&\Q 222\*51   0Ql7671167276'&'&#1675%&167514''"76313676551&'&'&'11"13676551676'1113676551676713676551&'&'&'117716550;;X0() #22;H9:""  6%$ 12Ki $   i)    )  $X;;" )"":9H((5(({  $%6&% )*K12E.>$$ ++)  )64 ;=66 :<)`[T ]cDp0C671167&'&'&'1'&771'1&761674'11&#"32765''00''  ''00''Z .. Z   25 PP 5r  '4AJS7671167632#"'&'&'3167&'#1'676'&'%&'&767!67&'367&'!"<=CC=<"!!"<=CC=<"!))))#$$##$$#F::$""$::FF::$""$::FX#$$##$$#H))))-@W671167654'&'&'211#"'&'67636711632#"'&''11&767632'&#"F::$""$::FF::$""$::FP      z     "(("@!"<=CC=<"!!"<=CC=<"!P       '011#1"33327654'&##151716'&'!''!11#  @ `` @ @@@@&@ֳ   @@@@a|'17716132771611''1&#"113113277165514771674''1&761761&'&'"671167632#"'&'&'     $  '     !   66I*$!"<=CC=<"!!"<=CC=<"! )      0 "  ! C**F::$""$::FF::$""$::FK\w7'11176771677167514''1&##1"''1&'&7716176''1&7716''1"#&'11165!671167632#"'&'&': : +"  G55 0!"<=CC=<"!!"<=CC=<"! ('      ((@?8-  2F::$""$::FF::$""$::F5^y7'77161676''1&7633167716''1&767716771&#&11"1''1&#"1117716167%671167632#"'&'&'176''1&77716'&7&17716'4         !$X;;   $95!"<=CC=<"!!"<=CC=<"!  \j         ) ;;X    .I,F::$""$::FF::$""$::F\     &2;DMVal671167654'&'&'7#3#5131#7#3#51312##3#5131#3#5131'5#15135#1513'#3#676331#3#"'&'31'6711632#"'&'7211#"'&'6763F::$""$::FF::$""$::F`7 /777 G@@@@@@@@P@@@@P777  7      @!"<=CC=<"!!"<=CC=<"!p( 8( ((8((`((((8(((( (8 (     1DW671167654'&'&'7611&'&'&7667'6711632#"'&'7211#"'&'6763F::$""$::FF::$""$::F ((43(( =GH<      @!"<=CC=<"!!"<=CC=<"! -- i     1DW671167654'&'&'7611&'&'&7667'11&'&54767&'11&54767F::$""$::FF::$""$::F ((43(( =GH<     @!"<=CC=<"!!"<=CC=<"! -- y@1h671167654'&'&'7611&'&'&7667'11111#14101&'&'&'010#1111111'&56767'1113111#14101&'&'&'010#1111111'&56767'11111F::$""$::FF::$""$::F ((43(( =GH<@!"<=CC=<"!!"<=CC=<"! -- T    ;P#"'&'47450367676'27&'&'&'676767&'&67676'&'11111765&'&'71111113141016767670103111131111111765&'&'7111111314101676767010311    N=! "":9HH9:"""":9HASTK ) >ASTK   l 238 -0/&# 9 b a8    KTSA> ) KTSA> )     733  $%/0.S8a aaa 81Z7671167632#"'&'&'6'11&&'&6767'"11117711765'1716'&''1'1"11117711765'1716'&''1'1&#!"<=CC=<"!!"<=CC=<"! Xr111&'516767671#1#1&'&'67673131276551&'&'3#321##1&'&'5167673111#1"'&55147633X;;"":9HH9:""%n    n ;;Xp  ;;X((H9:"""":9H%   X;; p 00 p  /A%77'111115167%163211#11#"''1&54777711##1&'5147;V  7 H 2 y???G EVH 6   2 ???G >LYgt&'1116751&''1&'551!1676751&'&'#1"''1&#5&'516771&'51675&'516771&'51671116751&''1&'51&'676'&'''U )PpP(''$$$$5$  5$ p @)@````````````@5$  5$   8JZl|471163!12#12##151&'&'1#1"'&547631"'&55316751&'#171316751&'#5316751&'#11316751&'#5316751&'#171316751&'#27116'&'&'33       `    p    p    (  ""     0  0   P      P        %Kt4'11&#"1113276551&''1&'5113276551&''1&5514'&#"11&"##131023316''1&'3#36''1&'##"#"11''6765514'&##1  <   )  <   ):1)  )(/0-Cf Ff%0g%ggg#   V=   .!+;   V=   .!+; h   {{{{{{ P 671167654'&'&'7"'&71111111111030521676767654'&'&'&'0#41"111111111&547111111111111315121676767654'&'&'&'0'11#111111111&7632'6711632#"'&'7211#"'&'6763F::$""$::FF::$""$::F1          @!"<=CC=<"!!"<=CC=<"!    i      671167654'&'&'7"'&71111111111030521676767654'&'&'&'0#41"111111111&547111111111111315121676767654'&'&'&'0'11#111111111&7632'11111#14101&'&'&'010#1111111'&56767'1113111#14101&'&'&'010#1111111'&56767'11111F::$""$::FF::$""$::F1    W@!"<=CC=<"!!"<=CC=<"!    T    $%65&'&'&'27&''1&76766'"'&71111111111030521676767654'&'&'&'0#51#111111111&547111111111111034121676767654'&'&'&'0'01"111111111&7632'211#"'&'6763 "'&7632'&'11&1771676'&'&1'"":9HH9:"""":9H5/     x    $$ ? U l(,H9:"""":9HH9:"" Y         :    v Y /BU671167654'&'&''&71163!12&'&'76711632#"'&'7211#"'&'6763F::$""$::FF::$""$::F  ++::++/      @!"<=CC=<"!!"<=CC=<"!  4!  !4z     /f671167654'&'&''&71163!12&'&'711111#14101&'&'&'010#1111111'&56767'1113111#14101&'&'&'010#1111111'&56767'11111F::$""$::FF::$""$::F  ++::++y@!"<=CC=<"!!"<=CC=<"!  4!  !4e    /Ib671167654'&'&''&71163!12&'&'7'1'&54771'1&547611''1&547716F::$""$::FF::$""$::F  ++::++%YYYY$$$$ZZ@!"<=CC=<"!!"<=CC=<"!  4!  !4000 0++ ++0 //BS671167654'&'&''&71163!12&'&'76711632#"'&''&7632'&#"F::$""$::FF::$""$::F  ++::++/    $$ @!"<=CC=<"!!"<=CC=<"!  4!  !4z      FShy471163311!12##1&'&'47#1&'&'47#1&'&'1&'#1"'&555&'#113#5567673111#1555311#%3#31#1&'&'516767 " C    " P`P     "      "  @((((((((    @1CQ%6711671167&'&'32777671&'&1177151&'&'#"'&'115/""33"" q to {q!!"#%%3""""3%%#"::: . <3 1D117@0BQ^1111#"'&'&'&'676767456571611%11'&'1677671'151327'676'&' ""33""t  {!!(  H%%#""#%%3""""3P . :/> 31171$7 "1'1&#"1771611171654'''11771677%% VV t@J fJ@ VV t%%ÂAIf IA 8b&567311'!7&'716731471167632#"'&'&57&1111771617'1&7716''1&''m EJ2ffff2JE mT)*..*))*..*)2 $ --  $ 2r 44 r0((((00((((0_ . #11# .-@7671167632#"'&'&'74'11&#"327652711654'&#"3!"<=CC=<"!!"<=CC=<"!       F::$""$::FF::$""$::F0     (C^671167654'&'&''3#3#1&'67711&'&'67327654'&'11&'67327654'F::$""$::FF::$""$::F@ $  $$  $@!"<=CC=<"!!"<=CC=<"!)   )@)   )1611!116773167&'#!!!2#!1"'&54763 P((PPPx@@   PBP   :&'11&13171674'"113331276'&'676527654'&#! ёj(  =  =  @ i  >.. ..>  Q671167!11!1&'&'547116351676731276551511#1121##1"'&55  " ) @ @@ "  Z  )    07=MTo{671167!11!1&'&'&'3111111&'&'31767317&'#'11111#16767#1674'11&'&#"32767653167&'#@, ' ) 0 ) ' , , '8 / ) ' ,""""1-  ++  -1g-1P ++  -1W####8671'1'1'17'111171327654'&#"171677v$" @ @ `  _2S"$ @ @ S2_  `<7171654''1&#"71171&56767"'17%1677171'p777}8.P  X      ,888}7.M,      X  %Hk'1'17163277111'&7716777'1&5477163210#017712105'"101771214111#"''179r9Xr h  ̒WN@ @----@ @NW9r9r  h WN@ @----@ @NW+ATg556111'1&731111'%1&''1&5!!!2#!1"'&5476374711632#"'&57211#"'&54763#)( mk#@A R @@  `     ccc0&  M T   P     ,C''&111'1&1133127%1676'&'#1"113!127654'&#!1"}.c: ! I G 9h @  MIII  _2 U %K5  GW"111132765513111327711327654''171654'&#"1'16767&'&'##3#5131   3j ii jj iV& 0pppp   ` @i jj ii jV (0 `  '8Ka#"'51&'1&'&'67676751&'76'&#"763236311276'&#"75676751&'&'`-33-:#""":9HH9:"""#: $$ z $$ m    -"::HH9:"""":9HH::"        f      '<Ob7113276767&'&'&#"67'&'&'"'11&'67676#711#"'&547632'211#"'&54763!"<=CC=<"!!"<=CC=<"!E/ '5P          F::$""$::FF::$""$::FP3 *P        MZg53151#1''#113#55#113#3#&'&'#1&'&'#1&'&'5167673!11#&'&767676'&'@`XQQQQ``)))) xo @  XXXX`X````````)))) l   0Scoy471163211167716771133127654'&##1716'&16551&'&'1327655771#&'5167314551#67&'!1!  T) )^   T {))  111((P L@ )) !H#GO&  6 %))   3/H?(05l671167654'&'&''1167676&'&'&76711111#14101&'&'&'010#1111111'&56767'1113111#14101&'&'&'010#1111111'&56767'11111F::$""$::FF::$""$::F\!! )) 6@!"<=CC=<"!!"<=CC=<"!    a    }5>GPYbo"111311#1"33127654'&##15131676'1&'&#!3#31#17#3#71313#31#1733#31#1733#31#1'7#3#'131711z4@  @3tvvv ;eee[ njjj t iiit `eee [@   @@hhhhh0hhhhhh0hh@"5767676731##&'&'&'6731711&'67676323# #3DU $#=?^@ @)!  #**#  &-21  12,&  #*+#www ]=>  $$$$       BQ6711671'&''1&'"1315167671'&''1&'"1"#1151#11&'&'567116'&'&'&'&''&'&76767611676)%   )%   #**#  &-21  12,&  #*+#@)%   ``)%   `a        *=67%1765&'&'&'&##1"'1&176''%11&'&'67@R666R!!''   P ~"0 @79+R66/??77 !!* 0 b#" 0?Yr671167654'&'&''6711632''1&##1"1'&56767''1'&54771'1&547611''1&547716F::$""$::FF::$""$::F[ )++) YYYY$$$$ZZ@!"<=CC=<"!!"<=CC=<"! 000 0++ ++0 0 ;&#1116771671677167716551&'&'"11''1' ) $$ +%  %)/zz/* @0La%''1#1"3!127654'&#!173717676'&'1'&'11&'&#"1&111716'511171677167Z<<00P""<10 01>>>b  7DQ`m|%7767&'711'#"'&''&767&'&76676326276765&''674'&'&'&'11&&6767"67113&'&'7&'&767'211#"'&54763  "R R""R R"B  S     '((''(('P  1"!!5 (( 5!!""!!5 (( 5!!"C    0Y  t  1----    @`F1133127676763"'&'&'&##1"#&'&'67654'&'67672  "(("   "((" /  "00"   "00" 0E471167632#"'&'&5'1&''1&'514763316731211   P0 #` bP Pb `# 0`    77  0a111"'&'#&'&'47&'&54767&54767&5476767633211"'#&'&'16767    p       K]jx3#31!17167#711331276551!1133127655167514'&''1&'&##1"3#31#1&'51676731#1&'%3#3#1&'67Z###        #  ````  h  `KKeeeP%9 00 9%Pe  1Q^471163312314763312311!1&'&'5167673&'1#131167513167&'#153167&'#1P @ ` @ 0    ```  `    0e0>x"1'1&11117717171677167&5&1'1&#'1'1716'71111767711117677171716''1&'&''1&'&76676'&7 L (B  N $ ,) M   F000#          J E-  P !#'.< J $$$ 96/ EEE#&>  B  >'$T$ S  N[h3#31#17167553121#''&'#1"11331676731676731276551&'&'676'&7%&'&767555qeQ Cddd. ) !$$$$! 1]     ``L```` T}}}#hp #### 02## @i111"3!127654'조1676751676551&'#151&'1#151&'1#111&'51&'&'#151&'&'#13121'&771#1&'&7716`     %y : p : p     | 0000 | %S K ` K `=6311211#"''1&5477&1#116751673117716''   W @@ P P   ؉ 8008 P P)e5310101'1'111"#&'&'67672311717111#111&'#1&'&'6751&'6767316711111`   %%%%  )88%%8  8*>R671167!11#11!11#167!1!1&'&'%71''1&77167'1'&771'1&76@@@@Z!!00p0000`!!00"0000  ,F611''1&'677'1''1&'67711777711''1&'677117     555    5%%5    5%% ee eee eFFFFFe eFB]j2111312##11#"'&551&'&'#1"'&547633167675147631132767654'&'&#"7&'&767 =+* # # *+=  =+* # # *+= """"---- # *+=  =+* # # *+=  =+* # ####P'((''(('x2111151676721"''1&'&'51176''111'1&'1110177111#&'&'5145676767676317167514763@  # & H![  l, ,_  [!H & #   .'&,,,& "I: E < :I" &,,,&'. *R`47116331221###1"'&5"'&5514763!!!6767&'&'51312##!"'&5476373#3#1&'67          6%$$%6R66/  P      `$%66%$@66RK5   @ ?H2711654'&##1"3311##111!127716'&1'1&##15135'1513@   P` C 2Q 00@    A  $ PVVVAB63131!1&'&'6767&'676731&'67673167674'&7 $"%$$" +F&'131676''53312765514'&##1"271167654'&'&#"3;  `    `   ####ؐ  """"U47116331217161111''11##1"'&5511'&''1&76771'1&'&77167615   z  zz  z   z  zz  z G  FF  G G  FF  G5H[n7671167632#"'&'&'4'11&'51&'16767'2711654'&#"34'11&#"327652711654'&#"3'4'11&#"32765!"<=CC=<"!!"<=CC=<"!@             F::$""$::FF::$""$::F`   P       -J]p7671167632#"'&'&'%4'11&#"32765671167&'716'&1"1"14'11&#"327652711654'&#"3%4'11&#"32765!"<=CC=<"!!"<=CC=<"!   @ @P   P  `   F::$""$::FF::$""$::F          57671167632#"'&'&'4'11&'51&'16767!"<=CC=<"!!"<=CC=<"!@  F::$""$::FF::$""$::F`37671167632#"'&'&'&'716'&1"#6767!"<=CC=<"!!"<=CC=<"!@L  MF::$""$::FF::$""$::F`  @-BVk671167!11!1&'&'5316751&'&'7111316751&'&'5316751&'&'67116751&'#11711676751&'#167116751&'#1175316751&'&'67116751&'#11))))0   0 0  0 0 P  0 0 P0  0 0 @))))08888  0 88 P    0  0       @.BWk111!1676751&'&'!111#1&'5167676711671#1&'5'111#1&'5167676711671#1&'5!!!676751&'&'!115&'11&'516731175567311&'&'&'11&'516731175567311&'&'`)) 0 P  0 0 P  0)@) 0 P0   0 P0  )@@)@ 88 0  88  0  )  )@  0  0  0  2Kj711767&'&7'&76767637167676701&'&'&17600'&'01&167671176767716'&'&'&17&'&'050167611''&'&'05056761011'&'&'47676K -,-    ',,SS'' *W     d$#,-,- * &'SS,,            &&%23,K6<   :'   %%% ':   :2      c"& @$1>11167671&'&'#&'&7677'&'676'&'&767@--DD--`  00  D----D `  PH531'1#7'31212#&'&#"#1&'&#""'&5476351476331516767313#36111'#1&'&'''1&7&'&'516767&77166767676'&'%67316111'#1&'&'''1&7&'&'516767&771667&'&767 0PMMMP  !!((!!@!!((!!   `                    P@@@@&fff @    @ P                 k  Tan'#1513'5#1"1"33167674'3167674'3127654'Ȃ'&##1'1&'#1'&'676!'&'676qLLLQ  ! 00 B 00 !  1la  `````ppp @  0  00  0  @      @18A]111!167671&'&'!'''1#11'&771632731'67&'7556711"'#&'&'67672@@HHH Z  H*  @    A****,`0@M671167&'&'&5711#1"331132765513127654'&##16767&'&'`    @6%$ / `  ` / $%6@  $%6' !     ! '6%$#3[111!327654'񽋽14'&##!!!1!1"'&5476367311311#11#1&'51#1&'5167315`))     p 00 00))  @ @ @  00 pp 0 5Ni|3#31#151675#11336763251&'&'#151&'&'#1#3#"'&551#11!1&'47#4'11&'&#"3276765'131#1&'51678@##)@``` ('@""&&""""&&"" 0(((((`!(  /A'!!!!''!!!!'P0@ ?Qcs&'11&'#11#151&'1#151&'1#111!!676751&'&'#155#1&'516731#3#&'5167311'#1&'516731%1#1&'51673%5#1&'516731'1#1&'51673#1&'516731#3#&'5167311%5#1&'516731'1#1&'516735#1&'516731 ` @@     p`    p            0        0HHHH `     0      P        0    p  6%6711671167&'&'&'#011111111113676735'&'"11211&'51&'1111&'&763327656'&''101&'&'67675167H9:"""":9HH9:""/ ,&#08        //::////:E4% 8    *U11&'&'&71111110521676767&'67676711674'1311111#&'&'&'&'&'11#&'&'&1111167516767&'&''1&'&7&763276'&'5;;X:/ "  ';;XX;;Z>=S66'  " /:I66        K12   ,;K1221K 88V11G;,   $#97    9111#113113167675131676751&'&'#151&'&'# P  P   P  P   P        P   y%771&'&'51656'&#"#1&'514'&#"1#1&#&1#1"331132771132765516731376'4''1673127654'&##%671'671'&'71&'717'1677'167'7&'71211#"'&54763R000A "  -;  ;- "   "  -;  ;-  "  $ +A0AA0h%+ w% +A1@A+++ %]  +++$ ;- "   "  -;  ;- "   "  -;  cA0g%+ x$ +A0AA0g%+ 000Ab   8Sao#3#1111'16771516767317163213111151515151#55132771111!1&'&'13#3#1&'673#3#1&'67GGw` M21M ` l` '(YF, % % ,FY(' Ρ  @!-!!!&'&'167673113311%3167&'#   @ !A%11!1&'&'16767311331%67513167&'#151&'1#131  @@@@ @ (@@@@@767!11&''1&551'1&7471167632#"'&'&576763276'&'51&'11#&'&'&2131111167516767&'&'11&'&71147  k=''@  ""&&""""&&""y        //A)$0 O'!!!!''!!!!'!       131516713151671315167111212121##151#151#151#11311311#151&'&'1#15131513151#11#11#11#1"'&551476351476351476351515167"11131514'&#'531514'&#"x(0(   @ P  P @    @  @   @ @ ` ` ``0  0`` ` ` @ @  00 P  Mh{73#36751476321675147632167514763213121#"'&''1&547633116767654'&'&'211#"'&54763#---      - V )*..*) V            _""_         'H17161111''11''11'&7711'&771'1&76771'1&76171677''11111716171671'1&761'1&76771'1&'&7711'&'' L '\TB Z55Z AT\' L       Y5 T 'A\ LL \A' T 5Y        07''&7617167177161111''1&16767&'&767654'&76131201131&'&'&7316''1&5&54563316''1&76767671&1'&7716''1&547716'  &&.'  )  . #@@QQ@@# .  )  '.&&   > "#09% # ))2/D))))D . 2)) # %90#" = #4671167!321#12##!&'&'113!151!1"7''001#"''167671#"'&5477141414'1'&771&'&'113276''171654''1716' "#1'14#"1'1&111101327711&'&76'&741')    )@  Z% )) %           `)  @  )@ @  && $#  po!$@"LXdx'71'176111111'%1515167%%%1177111'%1&'51176''15117'&176''6'&177&17716'&1''< 5 + + 5 @ @` @ @ '&''HGGGGGGvPYYPUUU.  PP  .U           3<E611111111111110011111111111717167654''1&76167611111133330111#11111112'&'1''11163&''11#"'&567511&'67271'11'717111111#1'105"'&'&'&'&'67676767272171311111114'1611151'1&711111111116747674705&'&547674'&'&'1111111111&7767&'67&' 0  *$)    L -(  (- L    *"*  0  H  (   $""'0(   (("" +     + #"((   (0'""$   (w##j##P61111!1&'&771517173#313151311315131131513113011!1&'&771212550@0@@@(@0@(@0@0b  b   `7Iax"1113151676731514'&#!"111311312765514'&#!3#31#1&'5167"11116771514'&#!7&''113!127655 `  `   P      `    @    ss  Ueeee  /Ia{0EZ63211#"'&551477363211#"'&5514777763211#"'&55147763211#"'&5514777763211#"'&55147763211#"'&5514777763211#"'&5514721113315147632131276551476321#11312###"'&547633151#1&'&'514763321111#151514763321111#151514763321111#151514763321111#151514763  `  N  r  N  r  N       )  ) ` @ ` @  @ ` @ + ++ ++++++ ++ ++++++ ++ ++++++ N     )@   @) ` ` ` ` ` ` ` ` *ey2011111!1&'67676711110167676355&'1#1"'&5514763!121##151&'1#151&''111#611#151476773#311##1&'&'15!!)--)!!p0  0@@ F @ "7,+7"HHHH   HH::    %   c&117716''"#"0111267676763015111311111654'&#"00#&'&'0#&'&1"1163#1133&'&'&'&'45"5114'&'&'"#"010110267674'316771633121#&'&'&'4141#14'&' 1100103676751&'&'#11##165&'&'7{    b /   !    "  & 56%$'  &  ())( 1  0&      >      g       $%6# `   )`) 0   &'673163271&'6767"#011172767516767"1&'3276763#0#"'&'&'7&'&'&'#"'&'6776767&'1#&'0111&'&'&'672327676767476747&'&'&'51&'&#&'671376771676767'1"#&'&'67673&'670%%       #  &  &  #!                           %@7551'7751''167765&'&'1%671167632#"'&'&'^(6F,-%^^^6()-,FY!"<=CC=<"!!"<=CC=<"!yyyM# ^nnn 34I5*2MMMy #2*5I43 n_F::$""$::FF::$""$::F+9I5113151676713151&''1514''1&11315167116751&''113)``) L L  Pg7 gPSmmm``m L L \ 8 \80F]111!167671&'&'!2111#"'&5514763747116321#"'&552111#"'&5514763@@@  @     @ ` ` @       0F]&'11&'!11!1676711##1"'&54763312211##1"'&54763311##1"'&54763312@ ` ` @       `@@  @       C&'&767'771676'&'&1'1&'"11#1"331676''17`  w  X   8* 06W  t-$$$$  H   -$! ]'  VZ:u6761111''1&'&'5147632167514''1&'&767#1167514763211'&551677167514771676_ x  O +  W > W  + O  x  I ` - "!-v PU    UP v-!" - ` I #3Sv111!#"'&5476351"'&5147633!!!1!127654'&#'711177115'1716''1'1&11276'&#&'&'6767276'&'`))      N      $%6' )) '6%$))  @ @ @     *6%$(($%6h%1#"''1&'&'6767'&'11#&'&'&1111167516767&'&''1&'&7&763276'&'5' ~5FX;;;;XX;;        F5~ ';;XX;;;;Xh    1D%1#"''1&'&'6767'&'11&'76767#4711632#"'&5' ~5FX;;;;XX;;"" p   F5~ ';;XX;;;;X ""&'( ('&  ,CT&567716551#1112773#35147&##15127716751#755&'&'#1132@ @%) / ` @%) s2 ` !?'0  0/)  0/)W'?   @+^671163312##11''1#1"'&547633116311217163211#"''11#"'&54771'1&547 i f. .$AUn )) ** )) ** r    p" ** )) ** )) (\767116711672#&#232#&'&'&'%631121111''1&1'&7714''1&76771677"":9H2,  X;;;;X  ,2H9:""wG3 ?? 3GH9:"" ;;XX;; "":9Hw@ 2F!!F2 @LSZaho%731''''#1113173'##11&''1#1"'&54771'1&547633171671312''71#'''13#3#17731''71#*!666z66z6B555 n8  8n 55 n9  8n 66*d6****y6""""6XXXXXXWWW  \\  WW  [[  WX####8,,,,8##""""Z,,,,!6Ko6111##514'&#"1##51516777163211##1&'&'5147716327&1#111311771316''1716'#1'6 yp  py@ @@ @    e%r` `r%e  G  G y     5fmz&'&#"132767!!!1!17"111327671&'&#4771'1&567317163213111#11#"''1#1&'77#1''3171'1#1731'7#3#17'731''71#''13`    P    t9 99 9|*AFF!!!!`*`!!! @ @ @ @  106 6016 66$$$$p444444L<$$$$<h9j1131131513113151311315131676751&'"1#!1"''1&#53276551!1132765513127654'&#!1"33 @`@`@  11 @     @  p @@@@@@ C   C     7767632112##11111"##11#11#"'&551#11#"'&551#11#"'&551#1&'676751#1"#&'&'&'45676767716771715151#1"'&'&'&767637167#3#133553351##11#3=  &' -(    (- '& =3``Hx$ 8 B#         #B 0 $j@@@@@@G>1''1#1&'&'51676731716'71611''11'&771'1&76-DD|7777777777   x@x 77777777775H[11&'&'6767671167654'&'&'4'11&#"327654711632#"'&5))))R6666RF::$""$::FF::$""$::F   @   ))))66RR66@!"<=CC=<"!!"<=CC=<"!`    9.H[{7&767!11#1311#1311#1311!!!!1!1&'&'5167672711654'&#"31''171611'&'&7676! |jb        !!, 11 ,`,, @@@       `    :AA:  6EEEE6 #4MV_671167!321#12##!&'&'113!151!1"&'11&'131675167'&'6767&'&11771176''1716'&1')    )@  ""@p0z MM jj MM jj`)  @  )@ @ 0   !a !! .. !! ..@/86'11&'&1'1&'&111336767514'17#3#711#y '' 0    0Ywwwwxx  11  <  % 5P#-66R0")#) " !")?)) 4#-Q76P")%) " HU|111"#"51&'&'271'&''1'1&'&771'1&76771716761716676'&'11!1&'&'6767516767263&U&#))) U22UGG  ")#) "U7)))  TGGU22$$$$")%) " v75133127655116751327167516713312765511112767716''151&'1'1&'&###1167675151516767&'%&567311&''`      *  5#3"" w"00"  X  X  2 ? fRJ""36  (&@p  !! #5GYj~'7716'"157716''1&%'771654''1&#&'11&11767571237165&#6751&''1"123''276''1&#"1%''&#"171676'776'&##117'3#3276''1&##1"131555N !< .&NNN 5 - <1    VO NNNV OOO OZ P  P B  b .{{{\    b  \{4@ ^4 @xxxx     )=611''1&'677'1''1&'51476!611'&551477 ` hh ```` W  W `@S\7767213121311##1'5##1"'&551#"'1##1"'&551&''1&76761337&'676 48" %pj   $,,$   -  p0! "@a ss 1  @LXb~''&'&771'1&763331#1"''1#111#!"'&'&5476763%1674''1&'515701110101011''676711611#1&'&7711'&77`444  ), p0/9   !j /"0,.///  E ~C    %M   'B/$-/B-95 %  W2+ < oC71#'&#67674'&74771633127676'&56767276'&'&'      Y   0  /0BK12     0  ?()21KY 2K^r011771676'&'&1'6'11&'&#"1763277111743676''1&'&3167&'&'&1%&113167676''#3#1316751&'!1316751&'#1316751&'#!1316751&'#'&'167&'16753&'1675QD       C :P E PE2PPPP0PPPPPP@# -  L x  LL0 .  L )$ . L $) .00000000 !(^6711673113311#11#1&'&'#3#513#321&'51&'#11316751671##1"'&551476333#3#11##1&'6731674''1&'47633165516711#"''1&55167 0   #### % ++ % c @ P P        ##  5,,5   6L2111#151476347116321#15347116321#"'&5547116321#"'&555532732711##1"'&551&''1&'516767312##1316767 @   @   `   `   %X 88 pp @ PP ` `@ @ @X  (!!` N  &5  5H[7#&'167671"''1&1#"''1&#"1#"''1&'&4'11&#"327652711654'&#"3( 66RR66    x   `   R6666R  # #      G/C%''1&551'1&5677163311171611''1&771'7711&'&'67-#'P /9*-$ X}& $ !& ,  &*%1X&  $%6IZm~T1167&'&'&#"1167&'&'&#"67&'&'&#"71167&'&'&#"67&'&'&#"71167&'&'&#"67&'&'&#"71167&'&'&#"67&'&'&#"11315151&'311315151&'311315151&'311315151&'311315151&'311315151&''4'11&#"1#1"'&5514'&#"1311#1"33327654'&##151316767514'&#"1##15:>R..R>( @ @  @ @     )  )  055555558````````````  ` `)@   @)` ` 6Vl777677163111#1717167&''1'1&'1111#&#"11113277171654''1'!!!2#!1"'&54763@iii1<] (  ( (  ( @ @  5^# (  ( #    M_w676'&'711#"'&551'1&77167613151671010101011&'51#1&''7711'&'&77''1&'&771676331232  J'$$$* 8$$$0    LLL2Y SJ#T +8񊊊*d  Z [ 612331271611#1&'51#11#1&'51&'&'&'&'13311##1"'&551#"'1##1"'&5511'&7716567671133267'1&7&'6767&''&'6767&'    @   @ "" @  66R9 IXX0  )  %"  @ L L w) 1R88 p@bk%5531176751&'3167&'####16751671131676''1&771654511331276551671157&'67  P 6%$`K0!  "  T   0NNN#L$%6'"88 *,24 ?   .AN%11#11#1'1716''1&111#1&'&'51#1&'&547%162151476331211@ {&Q u 23"@" 8  Mp  2   0%   0d%  33F?2332>'  & v;7676'4'&'&'67&'%671167671&'&'&'5@GhhG 7YY7 G43HH34G"HeeH""HeeH" %%    ((%##%`%##%` Vm&'&7676323111767716'&''171133127654'&##1&''1&''1&#13277#3#"3316771'1&'@W 9   900" #;;; F    ^ 5Y  e$R   6!   )@/C533351&'&'7167675167673151&'&'!671167&'#113 0  p)`0 )p000 P  0)@ 0) 3Fy111##1"'&551&'&567672711654'&#"374'11&#"3276567116171611''11'&'&76771'1&'&7p ` ()==)(         @" "6%$$%60      YY CC YY CC  61'1&7P   0 6'&11'1&''1&111177167711176''1&7716767117716''11176''1&''17167716'&11716''1&11514'&'&1&'514'&1'1&77 ! 9P  <<  P9 !   ((   ! 9P  =<  P9 !  0  0  U"99 8  8 99"U T (( T U"99 8  8 99"U T0    0T `2ENW`i11##1&'&76767656767!&'11&'676756711654'&'%&'673&'6767&'7&'67"     )D))))  @0P&442vFE  55LR6666RR6666RR6606711673121315147716761131211&##1##111#"''11##1"'&551&'1#"''1&54771&'#1"'&55147633167'1&547716515153#3#133'676'&'67&'&'11&'676323`j0j  8 +=#P          jjj q'Z----`%#"% x"%"  " - .            ```'((''(('@%.#%!+ETc3#3&'7&#3176711674'#1131'1'7'31312765&'&'#1"1133151%&'11&'#116765ggg C&) R[66%$$%6d >:!///D"R  23K\  "@ 09 p2D $D$%66%$8h`OOO"  K32  #$) _ '4A!!!13167716713167671&'&'676'&'%&'&767@x'  &y   $$$$"@@"$$$$@  +Ln6111#1"1#"''1&547716551673127%21111#"''1'1&547717163%'111#"''1'1&5477171632721111#"''1'1&547717163 V  * p# 33443344x ` *  c4334444334F*U113312#!1"3!16767&'&'#1"113316767&'&'!1"3!12##1"3#36767&'&'#1"3312##1"3    @))  @  ))    ))       ))  ))   ))    6H631121#'111#"''1&5477167677171&547'7716''1&1 @ 1  X1  BBB b B b  @  1X 1 BBB b B b <7113167632367232316767&'&'0#0#65&'&'&'&#4'11&#"&'&#"01"#"321230"3276701327654503327654'&'012327654'&#"1"#0365654'&#"0145676'&'!676'&')--))"&!0               )  ))" 0  `          C$JWdq~113676'&#&'&'47676'&'"#671167&'&'65&'&'"&'&#1!&17716'3&17716'3&17716'3&17716'1###6$ &   q"" )#)  `  `  `  /  ## &  " " )$)$ 0 0 0 0 0 0 0 0)AYs7&'11&'6767&567672672121!63211&'&'51477363211&'&'514777763211&'&'5147`) 0!&"))# ## #}#### )  0 "))4A    AA    AAAAAA    )6CQ^7&'11&'6767&567672672121!1'&771631'&77167'&7716'1'&7716`) 0!&"))0 0 y0 0 000 0 0 0 )  0 "))" p p p pppp p  p p6ER_ly1&#1'&''1'1&'&771'1&767717167617162&'67671'&771631'&771631'&771631'&7716711!1&'&'6767516767263& #) 8U22UGGV E  `  `  `  K")#) "?!) 1"'UGGU22  0 0 0 0 0 0 0 0 t")%) " Dk6763217163213331'&''1&'1!1'1&1##1&'&'4771&'&'3#311##1"'&551#11##1"'&551513'&#"11"117711765'1716'&#'1'7"11"117711765'1716'&#'1'1&#&#"11"117711765'1716'&#'1'@.. L ?'  ( * L```     `  k  u   ,,  H 2   W^ ^ @@ @@ @@   211171632771611''1&'1177111''1&11716177111''1&11716177111'&11#"'&55151515151515151514763&'67367&'&'67367&'  E;7#&&$  -BA!LO"-BA>C?F85LO"-BA>C?F85LO""IE;@@  P     $  ! > ! ! > ! ! " "P @F!?!?!9  `09L767116761"'51&'&'&'4'11&'&#"3276765'211#"'&5476301LM1101LM11   `  O98 ? 98PP88@  98P0     )\3#31312#!1"'&5476331676751673#3131513113151311315131131!1&'&77121255=+*    *+=@@@(@0@(@0@0 *+=   =+*   'BU^7714'&12767716'&#17165&'"211#"'&'&54767634'11&#"3276567&' /9:V7./f K ####   KKK f/.7V:9/  """"`  `@%6`m4'11&#"1315!4'11&#"13276527116551#113"1176771327653276514'&##&'&76755133127654'&##1'1&'11132765511132765514''  @@    @ `      I C)   &  @    ڛ     P  HHH  )7 `+5 ; 4Fc&##1&771632131316767&'&'65&'&'#165&'&'&13117716'&'#1716' %  !  % $-  F4  F4  !! :%! % i  i 4_11111#"'&5516767671#"'&551&'&'&'111#"'&55167671#"'&551&'&'5#"'&5516767671#"'&551&'&'@H9:""  +*IHYYHI*+  "":9H  $%66%$    32??23  --DD--`"":9H` `YHI*++*IHY` `H9:""` `6%$$%6` `@``` `?2332?` `D----D:b671167311!15%"1111771176''1716'&''1'1&#&#"1111771176''1716'&''1''"1111771176''1716'&''1'1&#3#!116751476321&'&'51#111##1"'&551#11##1"'&551513--DD--        "" @ @ D----D@@@    P0 0""0 @ @@ @`$2@N[113167316767&'&'"&'&#&'!!!!167&'#3#3167&'#!!!!167&''&'#13167 ()={#22#0  0%2#&5=)(HPP@ppppPPhh0=)( 00 ()=`H-Kr211#"'&54763271167654'&'&#"3%6711671&'&'47675711101016767&'&'010151&'&'671167&'51&'1       ""00 ()==)( 0       P  ""p 0%3=)(()=3%0 ` !  ! -Lr4'11&#"32765#471167632#"'&'&5'11167674'&'51&'&'67116710101&'&'67670101511&'&'6751671      ""  p 00 ()==)(  `      "" 00  0%3=)(()=3%  ! 33 !8U71131716321336767&'&'0#0#65&'&'&'&#&13117716'&'#1716')/ @))"&!0 J  F4  F4 )u :))" 0   i  i !1A5!1677165&'!1"!!!!1'1&''31654'!113277167#a& `R(T/ uuu  N  &  `6*?EEE #v!$$ N&AY&'11&'676726763"'1#"''1#77632132771'1&##1"17767311#!1&'&'477$$  000  ;*<+*+ h 0 0 0  BC`@$F671167!11!1&1'1&17716'671167311!151311!1&'&'5`   9o/@g     p  0/o/@  `  `B6m667116'&'&'&'&''&'&767676116767116'&'&'&'&''&'&76767611676567116'&'&'&'&''&'&76767611676#**#  &-21  12,&  #*+#%#**#  &-21  12,&  #*+##**#  &-21  12,&  #*+#z                      5Lc676'&'67116132771611#151&''1&'&7'11#"''1&'&777711#"'&54771'#$$##$$#p $)33)$  %$ Z<<<  0 2===2 0  h))))9     $$  555&  0  H5555H  0  % 4AN!!!676767671167312##11#"'&'&'&5335&'&767676'&', u    ))-,*)   8..   @&$##$&@0  ALYhy"7627677676'&'&763676'&'&'65&'&#&'&'&76'676'&'6'&'&#&67"6326767&#6767&"."4*89&!786587!&98+5".  11  C:   " j,%  &+   " /G(!4&:=00  00=:&4!(G/ $&&&&$   ( +$$ b    ( $$+ 9e11332765&'&'&'"11332765&'&'"&'11&'16767&'&'#1131&'&'5 ?23  &'AAP 6%$  66R `  ()==)(()=    32? PAA'& ` $%6 R66   =)(()==)(`   .?O21113151476321311!151676731514763!!!1!1&'&'1316751&'#  0 @ 0 @  P``     00     @``.?O21113151476321311!151676731514763!!!1!1&'&'1!16751&'!  0 @ 0 @  P      00     @@@+5?IR[d63117%1676551&'&'"177'6711'771&'''167'1'17'1'17'1'17] T#*+@+%3  Y... .===> V<<<=l====g====< "#)@+*Q =>5/// .;R&&&&C&&&&A%%%%,S110136767654'&'&'1765&'&'&#"1''1111771'1&761716765&'&'[      f?'< 7| 4 =d#%&7      .= 7 ?4 <. '7&% AO\enw"1113311#1"11!16767514''1&'&##151312765514'&##3#3#1&'6767!1!1&'7&'677&'67&'677&'67&'677&'67&'67@ P9P   `0xHHH @ FF @ 0hhhhh!Aa%#3#&'51676171632111111#"''11'&'51673!1''11#"''1&54771'1&7673'&'&771'1&5477163217161#Ȑ (I$I(  (I$I(  (I$I(  (I$I(  (I$I( @ (I%I(  (I$I( @ (I$I( @ .c13171#55#11333#3'1#133#3674''1&'#1'#1"331132765!132765713127654'&##171!2^[c| }}}c^^^ZS    @    TT       %@e13171#55#11333#3676761'1#1763112&501'1&'#11676767!11#1"33113276531&'47676711676'&'&#1'1&#"711#"'&'676762^[c| :::cZ      0 D--+ . $""--D@ TH T@ K   6L--D%%,  . 0/:D--p  a7533151671315167131516713151671312765514'&##1514'&##1514'&##1"1#1"1#1" @@@@@       pppppppp      ;Gv6'&1'1&1'1&1#1131&551476767&'#1716'&17'#1&'672#1131513113151&'&'#165&'&'1'1&'113151#13#3676751#1#17163       $ 1 \   ##0  `1      0 &&&   P``P  (( P0 P8& W`i617161171611'&'&76771'1'&''11'11''1'1&'&7676171&'&777171'37171'}}O %)  GG  ).$%  $%.)  GG  )% O,Z KLLLY..+,+V  V.AA.V  V+,+7555 :: 5 "131676716'&#!''!11!  22 @8v W m7127716331111136771632136''1&771676731#1"131211133165&'&'&#"''1&#"''1&##1"1113316767%671167632#"'&'&'7&17716' !!!  *           87U    6++J!"<=CC=<"!!"<=CC=<"!             "V::  ! -dF::$""$::FF::$""$::F ` +7"113!127654'&#!5"113!127654'&#!          +4'11&#"13276534'11&#"132765@         5B&111&#"767676767654'717167716''&'&7670M#$$ '"*+33# M)0(  0)M #33,)"' $$#M0(2611176''1716''1611#"''1&'516767w$!2Lp>L 7--BBB`@@@@@   B`~~~;""~yyy . F: P  P :F :%!!!'1&56767311716331471163!121#!1"'&55` ;'(;2&& O    @;('1~V@    :If167&'&''1&'&5&'"111316767316767&'&'#3#3#15'&'167&'&''1&'&5X    8 ))0  00              )) 00 @  `      &:G#1"'&767676271#"'&'&77137#3#&'71676#'&'&767& ( H(H .55. H&H (   / 5,, } }  } P/} ,,5 05E[m211#"'&'&5476763671167654'&'&'67'1&'&337327676''1#"'73#3276'&'&12711654'&#"34,,,,44,,,,4F::$""$::FF::$""$::F8$ '  H$$$  $  THHH  ' $8  --33----33--@!"<=CC=<"!!"<=CC=<"! ? #5 1>>>  >1 5# >!    AN[676'&'5#"'&551'&'&77167633121'1#"'&551#1&'167676'&'55#1"'&771"'&'&771676321#1##11#"'&551#11#"'&5P(             ""         Ѐ  dd  `00  P``` _  _ ` `` IR[&111&#"11&#"327654'7117654'7117716''171654''1&#"1'''711'''711`Z%,0( l  l Y`Y7 0 7YHHH>H>HHH>H>`Y l  l (0,%Y`Y7 0 7YHHH>H>HHH>H>Hc471163#"'&5&'&'&'"'&5'71&547632#"'11#&'&'47676711#"'&5&'&'"'&54763 PAA'&  32? hhh  h #)X;; R66  $%6  &'AAP ?23 hhh  h ;;X)# }66R 6%$  )7E#3#"11!167671&'&'5&'516735&'516735&'5167@MPPMX000000000000)2@IW`n3#3211!1&'&'16767"1113151#3#!51##%4'11&##11315'53151#27116551#113'53151#1133151#1@M  @ PPP  @@@ @ @@`  @M  @@@ @ @@@@  @@@@@@  @  9Kbz676'&'47116331111#"'&551'1&76771#1"'&57711#"'&5471##1&'6731675167'&''1&7617716` " J<  NK /WWW R CYY; <     P F<I CM VVV S `  < ;   3q676'&'6171'1&7111177161'%1&77'716116771611''1&''111'1'11'&771'1&76} .Km(  2 ,, t  7T 4  :       fEK4' JC    ! 3   I   @ -v676'&'23111#171'1&'1#11677163011121#131210331210331676751&'1#171674'&##1&''1&''1&#17#1716'&''171133P  mWX) ; 6j8+E  900" 3, 9 `@^ 5RX ~'  6! YL$R Ee"113113151311315167675127654'&###"1"'&''1&'&'&##4'11&#"1!1"3!167675  )@@)   911#") I   %  ) )`  )1#   %6a%6711671167&'&'&'#01111111111367673'47116331#1"1##1&'6731654''1&'%3#3#1"1##1&'6731654''1&'4763'7161&'511#"''11&'51676H9:"""":9HH9:""/ ,&#08    ####  //::////:E4%     %    //// `00` Zkx611111''11111331#1"'%1&''1&7611&5&76771516771'1&''1&767'&7716''11&'&767 *~  HG! W J". G5 T%   2b 8 K! 5'2 === K ," ^R[dmv715167171611##1"'&'676'&''1'1&761516711676'&56767'67&'&'6767&'&'6767&'51327716551&'U 0 8I0..0I8 1  )) u00  3 (    -GE--EG-    ( ))-P0 ^t}'#1'1513''&'#11#1"1!167674'3111327654''15151716'&'&11#1514'4'11!1&'&'6767!&'6767&''&'6767&'+EEEp@kWWW){    00  +6 79 9@M    8h@`% p k"0  037 6SUG  G5m    0;471163!12#!1"'&5471163332##11#"'&551#1"'&5 @            /QXf31113!1276''16767&'&'513167&'!#"'&'&71111&7676320111155113#3#1&'67$  $ph/PP//PP/8  #F+< <+F#  @+;hq&113311132771654''1&'&'1514''2771&7'1%4'&'&1##1&'5147716'&'&#1161676767&'O( P 6m p @ pm h;v >@9@=)(U%8 (h mp @ p m6 Pyv !> ?9@()=U#",%Uew211#"'&547634711632#"'&567116731511'&77171611311!1&'&'531316751&'#5316751&'#171316751&'#      Ո@@@p@@@@   8  B*00,L@@@@@@@@9776311#1&'&'5167716316767514''1&'47 U$11JR665 &% Q#/.3J1166RL6Y&&5+"C&O6111"11'1&7676767017167677767670171676711317111''/U--/.Y# V--/0X_11''N+ L#%23b+ 0**1/11/ ,0//1--6 14410%%  ""01663 ,#4^671167!321#12##!&'&'113!151!1"5#11311316751316751&'#151&'#1)    )@  00 00 `)  @  )@ @ 0000 00 0&&11111!16767516767&'&'&#<<11   11<<###?  ?## %5!16771635!1&'&'51! X;;  ;;X0A8`%11#11!1&'&'51#1&'&547%162151476331211%1#11311316751316751&'#151&'#@    k   5 00 00   ^% y. ?0 00 0$7DW11#11!167671&'&'#1&'&'211#"'&54763676'&'67116731#1&'  &%    @  0"@"@@   $$$$""6^%6711671167&'&'&'#0111111111136767367311311#11#1&'51#1&'5167315H9:"""":9HH9:""/ ,&#08  00 00//::////:E4%  0 00 0ET111327654''1&#"7113277167716771010171'11'171'1'1171677) `"""c c l#J-4C4-KCCC  M  ###l b c#K-4C4-JDCCC M  I\ex7''1&117716331213676751476771674'&''1&'&''1&'&#211#"'&5476367&'211#"'&54763 < > *!%# "L          '   P   -&'11&'11&'4767676'&6747676++*+@@+*++6% #0//6:>?+,,+?>:6//j #21,&-,@!Ce4'11&#"113151#1513151#15113312765514'&##1"''1&##1"113312765514'&##1"''1&##1"@    c  C  c  C  `@@@      $-6Ma7"'11&547676767#!7&'6767&''&'67671167!1!1&'&'67!11!1&'&'5=  0/XX/0  zSp       %%""""%%   `0    ` D"111&#11&'51"1113167675151&'&'"&'&#"514'&#  -,:v6%$       I8&;'$%$6@     @-?"1111"''11!151&'&'1#&'51514'&##676765&'!  08""!"80  @DDDD d T55C@BC44T d @1[h11131#1131#1131&547675151&'&'#3#31311#11#1&'51#1&'5167315167&'&767113312765&'&'#10    hh'((''(('  'f' @P $` @---- ''y111#"'&5471632&10#111111111#176771036767676771676771676767677167673167676'11#"'''&5477163211' ` .                   `F               ~   !,65&'&'#1336767&'&'#'6771!o()==)(  6  iiii =)(()=      *R671167!11#11!11#167!1!1&'&'%67311311#11#1&'51#1&'5167315@@@@Z!!  00 00`!!0 00 03?K671167!11!1&'&'53!12765514'&#!1"3167&'#33167&'#@ @  8800@ @@@ @ ,N61'"''1&'#1&'51&'#1&'&76326''1&777311311#1"'&547677167  *   I%+# ]]]( L=Z[k; 2:  ,A   P  P 0R./   5"6I\o&11121210071676'&'&'&'45&'&'&'"#0117%'211#"'&547634711632#"'&54711632#"'&5  YHI*+, ./JK\&'AAPe |  @      ,+*IHY  \KJ/.gPAA'& e     0  8#3#'1&767313#301!1&'&'6767670111116767&'11#&'&'&1111167516767&'&'1151&'&7&763276'&'5@/ /*) )) )*T        `G  G "#78R))R87#"X     #3:kx111!#"'&5476351"'&5147633!!!1!127654'&#''#17'733113277131276''1716'&##1'1&#"1#1"3773111#1'57'137771#3#31''#177'13`))       7 8  7 8 88*E7))  @ @ @  000 00 00 00 00000000H0"+E#3#5131%111!1676751&'&'!5!151!%111!1676751&'&'!p    `p    ` ` @  @  @ @  @ !2O3#31312#!1"'&54763317167!!!1##1"'&'"177116751176''1&#xxx `  `    P''P     S@P''P!2O3#31312#!1"'&54763317167!!!1!1&'&'"177116751176''1&#xxx `  `  P''P    @@P''P"2Oy556771611111&'&'5145111676751#1617716#!1"'&567675#11311316751316751&'#151&'#1`` `$%66$%0""  G G 2 ~ 2`@::: $$ :(6%$$%6(0"" L L ))7 7))E471163312131514763312##11##1"'&51#11##1"'&54763315  `  `  `  `    `   =Jer676'&'''&#"11132765514''171133127654'&##676'&'34'11&'&#"32767653676'&'34'11&'&#"3276765  >>> S<  +<) @ 5#$$##$$#""""#$$##$$#""""`@111 @&o  1!  ))))####))))#####=5#15135#1513'#3#51313#31#15111!167671&'&'!@`@@@%8K^q /BUh{"'11&547632#7211#"'&54763211#"'&54763"'11&547632#211#"'&54763"'11&547632#211#"'&54763"'11&547632#211#"'&54763"'11&547632#211#"'&54763211#"'&54763"'11&547632#211#"'&54763"'11&547632#211#"'&54763"'11&547632#%211#"'&54763%"'11&547632#%211#"'&54763"'11&547632#   `            `                               @          @                 @     @     @   @     @   @   2EXk~71132765167!127654'&#!134'11&#"3276534'11&#"32765#4'11&#"3276534'11&#"32765'2711654'&#"3"11327654'�'&#"3  P "     `            P  "               D ;^676'&'6171671171631!1"'&771673171%1&7'1#"'&551'11'&'&77171 2' #O"  `     Sppp  =% 0   &+%g".   \000` Ko  !@S"'1#1"76711323676'&'131276545&'&71514'&#211#"'&54763B""  r  56C  A""  r  56C    56C  A""  r  56C  B""  r    *O\z1&'&'67675111&'&'6767516771677633121311#1&'&'5167673&'&767%73121'&771#1"'&7716%''1&7676171676 ` W >     u'''8  '8   a `    9v   `   p  p h  ZZZ p Z p ; d d'671161&''1&76771616767'1&77[ X<''Nqx#"''1&76761147632171676471163311312##1&'&771#1"'&511'&''1#11'&'&77171673#3'1  X    X  J3  J3 ` @ X @ ((( `  $. $  ` I  I     ((''Nqx&#"176771132765117676''1133113127654'&##1716'&'#1"11767713117676''1'1&'771#  X    X 3J  3J  ` @ X @ ( `  $ .$  ` I  I     ((((@'=Si#"''1&767611476321716763#32##1"'&547633#32##1"'&547633#32##1"'&547633#32##1"'&54763  X    X    ``` `      `  $. $  `         @'=Si&#"176771132765117676''7"1133127654'&##"1133127654'&##"1133127654'&##"1133127654'&##  X    X     ` `     `  $ .$  `         '(Sf27716'&'&114'&#"1'1&'&13%&17711#1"33327654'&##1514''611'&'&76777677165&'&' X    X #0   00  !    1%% `  $. $  `  4   `   q  B$%% '(Sf21'&''11#"'&511'&'&771631312###"'&5476331511'&'&767716'67116'&'&7&'11&567671'&'&77 X    X #  00   0   )%%1  `  $ .$  ` `   4    7 %%$B  @")GS^|11767713117676''1'1&'#3#717513316767&'65&'&'#1"#3#51313#3#1565114'&#"1'1&#"13277pC  Z B &&&} P" "@ `  00 I `    --```` "$" @ @ J ` @` ,97&'&767367&'&'!16767&'&'#7&'&767----x()==)(()=`=)(()==)(p----'((''(('#-=)(()==)(()==)(()=-#'((''(('&I6711016763#"'&'676767201116767676&'&'&'&76@    *+55+*    $44EE45#& +%>>\\>>$, & ((34% %43((  :+'',9 %=763312116765&'&'&''1&'&##1"111!1%1&##1"1 <2$ &)3 .&&8999#& 4 ')  *3#351#1531676751#755&'&'#113D----D@D----D--D D----D D--#0=JW6'&1111!167671&'&'#1%&'&7676731#1&'6731#1&'6731#1&'S ----````~ !lQ'((''(('@@5Pc7671167632#"'&'&'%211#"'&'&5476763271167654'&'&#"352711654'&#"3!"<=CC=<"!!"<=CC=<"!  ####  F::$""$::FF::$""$::F`   """"`   ESao&'1#111131676751477165514'&'#14'&#"#14'&#"#153#3#1&'673#3#1&'673#3#1&'67p      0H \  \   H@@)D^k671167!11312##!&'&'#1&'&'53#351#1&'6731514'&##1"'"1113312765514'&##676'&'"PD--   ))"@  @   `  P"--D  ))"`@  @ @ X]2| ,, X 4 2   > 2 dG , XM . &  Font Awesome 6 FreeFont Awesome 6 Free SolidThe web's most popular icon set and toolkit.SolidFont Awesome 6 Free Solid-6.5.1FontAwesome6Free-Solidhttps://fontawesome.comVersion 773.01171875 (Font Awesome version: 6.5.1)Copyright (c) Font AwesomeFont Awesome 6 FreeFont Awesome 6 Free SolidThe web's most popular icon set and toolkit.SolidFont Awesome 6 Free Solid-6.5.1FontAwesome6Free-Solidhttps://fontawesome.comVersion 773.01171875 (Font Awesome version: 6.5.1)Copyright (c) Font Awesomeo      "# !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij exclamationhashtag dollar-sign0123456789 less-thanequals greater-thanabcdefghijklmnopqrstuvwxyzfaucet faucet-driphouse-chimney-window house-signaltemperature-arrow-downtemperature-arrow-uptrailerbacteria bacterium box-tissuehand-holding-medical hand-sparkles hands-bubbleshandshake-simple-slashhandshake-slashhead-side-coughhead-side-cough-slashhead-side-maskhead-side-virushouse-chimney-user house-laptop lungs-virus people-arrows plane-slash pump-medical pump-soap shield-virussinksoap stopwatch-20 shop-slash store-slashtoilet-paper-slash users-slashvirus virus-slashvirusesvest vest-patchesarrow-trend-downarrow-trend-uparrow-up-from-bracket austral-sign baht-sign bitcoin-signbolt-lightning book-bookmark camera-rotate cedi-sign chart-column chart-gantt clapperboardclover code-compare code-forkcode-pull-request colon-sign cruzeiro-signdisplay dong-signelevatorfilter-circle-xmark florin-sign folder-closed franc-sign guarani-signgunhands-clapping house-userindian-rupee-signkip-sign lari-sign litecoin-sign manat-sign mask-face mill-sign money-bills naira-signnotdefpanorama peseta-sign peso-signplane-up rupiah-signstairstimeline truck-frontturkish-lira-signvaultwand-magic-sparkles wheat-awnwheelchair-movebangladeshi-taka-sign bowl-riceperson-pregnant house-chimney house-crack house-medical cent-sign plus-minussailboatsectionshrimpbrazilian-real-sign chart-simple diagram-nextdiagram-predecessordiagram-successor earth-oceania bug-slashfile-circle-plus shop-lock virus-covidvirus-covid-slashanchor-circle-checkanchor-circle-exclamationanchor-circle-xmark anchor-lockarrow-down-up-across-linearrow-down-up-lockarrow-right-to-cityarrow-up-from-ground-waterarrow-up-from-water-pumparrow-up-right-dotsarrows-down-to-linearrows-down-to-peoplearrows-left-right-to-line arrows-spinarrows-split-up-and-leftarrows-to-circle arrows-to-dot arrows-to-eyearrows-turn-rightarrows-turn-to-dotsarrows-up-to-line bore-holebottle-droplet bottle-water bowl-food boxes-packingbridgebridge-circle-checkbridge-circle-exclamationbridge-circle-xmark bridge-lock bridge-waterbucketbugsbuilding-circle-arrow-rightbuilding-circle-checkbuilding-circle-exclamationbuilding-circle-xmark building-flag building-lock building-ngobuilding-shield building-un building-userbuilding-wheatburstcar-on car-tunnelchild-combatantchildren circle-nodesclipboard-questioncloud-showers-watercomputer cubes-stackedenvelope-circle-check explosionferryfile-circle-exclamationfile-circle-minusfile-circle-question file-shield fire-burner fish-fins flask-vial glass-waterglass-water-dropletgroup-arrows-rotatehand-holding-hand handcuffs hands-boundhands-holding-childhands-holding-circleheart-circle-boltheart-circle-checkheart-circle-exclamationheart-circle-minusheart-circle-plusheart-circle-xmarkhelicopter-symbol helmet-unhill-avalanchehill-rockslidehouse-circle-checkhouse-circle-exclamationhouse-circle-xmark house-fire house-flaghouse-flood-water$house-flood-water-circle-arrow-right house-lockhouse-medical-circle-check house-medical-circle-exclamationhouse-medical-circle-xmarkhouse-medical-flag house-tsunamijar jar-wheatjet-fighter-up jug-detergent kitchen-set land-mine-on landmark-flag laptop-file lines-leaninglocation-pin-locklocustmagnifying-glass-arrow-rightmagnifying-glass-chartmars-and-venus-burstmask-ventilatormattress-pillow mobile-retromoney-bill-transfermoney-bill-trend-upmoney-bill-wheatmosquito mosquito-netmound mountain-city mountain-sunoil-well people-group people-linepeople-pullingpeople-robbery people-roofperson-arrow-down-to-lineperson-arrow-up-from-lineperson-breastfeeding person-burst person-caneperson-chalkboardperson-circle-checkperson-circle-exclamationperson-circle-minusperson-circle-plusperson-circle-questionperson-circle-xmarkperson-dress-burstperson-drowningperson-fallingperson-falling-burstperson-half-dressperson-harassingperson-military-pointingperson-military-rifleperson-military-to-person person-rays person-rifleperson-shelterperson-walking-arrow-loop-leftperson-walking-arrow-right&person-walking-dashed-line-arrow-rightperson-walking-luggageplane-circle-checkplane-circle-exclamationplane-circle-xmark plane-lock plate-wheatplug-circle-boltplug-circle-checkplug-circle-exclamationplug-circle-minusplug-circle-plusplug-circle-xmark ranking-star road-barrier road-bridgeroad-circle-checkroad-circle-exclamationroad-circle-xmark road-lock road-spikesrug sack-xmarkschool-circle-checkschool-circle-exclamationschool-circle-xmark school-flag school-lock sheet-plastic shield-cat shield-dog shield-heart square-nfisquare-person-confined square-virus staff-snakesun-plant-wilttarp tarp-droplettenttent-arrow-down-to-linetent-arrow-left-righttent-arrow-turn-lefttent-arrows-downtentstoilet-portabletoilets-portable tower-celltower-observation tree-citytrowel trowel-brickstruck-arrow-right truck-droplet truck-fieldtruck-field-un truck-planeusers-between-lines users-line users-raysusers-rectangleusers-viewfindervial-circle-check vial-viruswheat-awn-circle-exclamationworm xmarks-lines child-dresschild-reachingfile-circle-checkfile-circle-xmarkperson-through-window plant-wiltstapler train-trammartini-glass-emptymusicmagnifying-glassheartstaruserfilmtable-cells-large table-cells table-listcheckxmarkmagnifying-glass-plusmagnifying-glass-minus power-offsignalgearhouseclockroaddownloadinboxarrow-rotate-right arrows-rotaterectangle-listlockflag headphones volume-off volume-low volume-highqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalic text-height text-width align-left align-center align-right align-justifylistoutdentindentvideoimage location-pincircle-half-strokedroplet pen-to-squarearrows-up-down-left-right backward-step backward-fastbackwardplaypausestopforward forward-fast forward-stepeject chevron-left chevron-right circle-plus circle-minus circle-xmark circle-checkcircle-question circle-info crosshairsban arrow-left arrow-rightarrow-up arrow-downshareexpandcompressminuscircle-exclamationgiftleaffireeye eye-slashtriangle-exclamationplane calendar-daysshufflecommentmagnet chevron-up chevron-downretweet cart-shoppingfolder folder-openarrows-up-downarrows-left-right chart-bar camera-retrokeygearscomments star-halfarrow-right-from-bracket thumbtackarrow-up-right-from-squarearrow-right-to-brackettrophyuploadlemonphone square-phoneunlock credit-cardrss hard-drivebullhorn certificatehand-point-righthand-point-left hand-point-uphand-point-downcircle-arrow-leftcircle-arrow-rightcircle-arrow-upcircle-arrow-downglobewrench list-checkfilter briefcaseup-down-left-rightuserslinkcloudflaskscissorscopy paperclip floppy-disksquarebarslist-ullist-ol strikethrough underlinetable wand-magictruck money-bill caret-downcaret-up caret-left caret-right table-columnssort sort-downsort-upenvelopearrow-rotate-leftgavelboltsitemapumbrellapaste lightbulbarrow-right-arrow-leftcloud-arrow-downcloud-arrow-up user-doctor stethoscopesuitcasebell mug-saucerhospital truck-medicalsuitcase-medical jet-fighterbeer-mug-emptysquare-h square-plus angles-left angles-right angles-up angles-down angle-left angle-rightangle-up angle-downlaptop tablet-button mobile-button quote-left quote-rightspinnercircle face-smile face-frownface-mehgamepadkeyboardflag-checkeredterminalcode reply-alllocation-arrowcrop code-branch link-slashinfo superscript subscripteraser puzzle-piece microphonemicrophone-slashshieldcalendarfire-extinguisherrocketcircle-chevron-leftcircle-chevron-rightcircle-chevron-upcircle-chevron-downanchorunlock-keyholebullseyeellipsisellipsis-vertical square-rss circle-playticket square-minus arrow-turn-uparrow-turn-down square-check square-pensquare-arrow-up-rightshare-from-squarecompasssquare-caret-downsquare-caret-upsquare-caret-right euro-sign sterling-sign rupee-signyen-sign ruble-signwon-signfile file-linesarrow-down-a-z arrow-up-a-zarrow-down-wide-shortarrow-up-wide-shortarrow-down-1-9 arrow-up-1-9 thumbs-up thumbs-downarrow-down-long arrow-up-longarrow-left-longarrow-right-long person-dresspersonsunmoon box-archivebugsquare-caret-left circle-dot wheelchair lira-sign shuttle-spacesquare-envelopebuilding-columnsgraduation-caplanguagefaxbuildingchildpawcubecubesrecyclecartaxitreedatabasefile-pdf file-word file-excelfile-powerpoint file-image file-zipper file-audio file-video file-code life-ring circle-notch paper-planeclock-rotate-leftheading paragraphsliders share-nodessquare-share-nodesbombfutboltty binocularsplug newspaperwifi calculator bell-slashtrash copyright eye-dropper paintbrush cake-candles chart-area chart-pie chart-line toggle-off toggle-onbicyclebusclosed-captioning shekel-sign cart-pluscart-arrow-downdiamondship user-secret motorcycle street-view heart-pulsevenusmarsmercurymars-and-venus transgender venus-double mars-double venus-mars mars-strokemars-stroke-upmars-stroke-rightneuter genderlessserver user-plus user-xmarkbedtrain train-subway battery-fullbattery-three-quarters battery-halfbattery-quarter battery-empty arrow-pointeri-cursor object-groupobject-ungroup note-stickyclonescale-balancedhourglass-starthourglass-half hourglass-end hourglasshand-back-fisthand hand-scissors hand-lizard hand-spock hand-pointer hand-peace trademark registeredtv calendar-pluscalendar-minuscalendar-xmarkcalendar-checkindustrymap-pin signs-postmapmessage circle-pause circle-stop bag-shoppingbasket-shoppinguniversal-accessperson-walking-with-caneaudio-description phone-volumebraille ear-listenhands-asl-interpretingear-deafhandseye-low-vision font-awesome handshake envelope-open address-book address-card circle-userid-badgeid-cardtemperature-fulltemperature-three-quarterstemperature-halftemperature-quartertemperature-emptyshowerbathpodcastwindow-maximizewindow-minimizewindow-restore square-xmark microchip snowflakespoonutensils rotate-left trash-canrotate stopwatchright-from-bracketright-to-bracket rotate-rightpooimagespencilpenpen-clip down-long left-long right-longup-longfile-penmaximize clipboard left-rightup-down circle-down circle-left circle-right circle-upup-right-from-squaresquare-up-right right-leftrepeat code-commit code-mergedesktopgem turn-downturn-up lock-open location-dotmicrophone-linesmobile-screen-buttonmobile mobile-screen money-bill-1 phone-slashimage-portraitreply shield-halvedtablet-screen-buttontablet ticket-simple user-largerectangle-xmark down-left-and-up-right-to-center"up-right-and-down-left-from-centerbaseball-bat-ballbaseball basketball bowling-ballchess chess-bishop chess-board chess-king chess-knight chess-pawn chess-queen chess-rookdumbbellfootball golf-ball-tee hockey-puck broom-ball square-fulltable-tennis-paddle-ball volleyball hand-dotsbandagebox boxes-stackedbriefcase-medicalfire-flame-simplecapsulesclipboard-checkclipboard-listperson-dots-from-linednadolly cart-flatbed file-medical file-waveform kit-medicalcircle-h id-card-clip notes-medicalpalletpillsprescription-bottleprescription-bottle-medical bed-pulse truck-fastsmokingsyringetablets thermometervialvials warehouse weight-scalex-raybox-open comment-dots comment-slashcouchcircle-dollar-to-slotdove hand-holdinghand-holding-hearthand-holding-dollarhand-holding-droplet hands-holdinghandshake-anglehandshake-simple parachute-boxpeople-carry-box piggy-bankribbonrouteseedling sign-hangingface-smile-winktapetruck-ramp-box truck-moving video-slash wine-glassuser-large-slashuser-astronaut user-check user-clock user-gearuser-pen user-group user-graduate user-lock user-minus user-ninja user-shield user-slashuser-taguser-tie users-gearscale-unbalancedscale-unbalanced-flipblender book-opentower-broadcastbroom chalkboardchalkboard-userchurchcoins compact-disccrowcrowndice dice-five dice-fourdice-onedice-six dice-threedice-twodivide door-closed door-openfeatherfroggas-pumpglassesgreater-than-equal helicopterinfinity kiwi-birdless-than-equalmemorymicrophone-lines-slashmoney-bill-wavemoney-bill-1-wave money-checkmoney-check-dollar not-equalpalettesquare-parkingdiagram-projectreceiptrobotrulerruler-combinedruler-horizontalruler-verticalschool screwdriver shoe-printsskull ban-smokingstoreshopbars-staggered stroopwafeltoolboxshirtperson-walkingwallet face-angryarchway book-atlasaward delete-left bezier-curvebongbrush bus-simplecannabis check-doublemartini-glass-citrusbell-conciergecookie cookie-bite crop-simpletachograph-digital face-dizzycompass-draftingdrum drum-steelpanfeather-pointed file-contractfile-arrow-down file-export file-import file-invoicefile-invoice-dollarfile-prescriptionfile-signature file-arrow-upfill fill-drip fingerprintfish face-flushedface-frown-open martini-glass earth-africaearth-americas earth-asia face-grimace face-grinface-grin-wideface-grin-beamface-grin-beam-sweatface-grin-heartsface-grin-squintface-grin-squint-tearsface-grin-starsface-grin-tearsface-grin-tongueface-grin-tongue-squintface-grin-tongue-winkface-grin-winkgrip grip-verticalheadphones-simpleheadset highlighterhot-tub-personhoteljoint face-kissface-kiss-beamface-kiss-wink-heart face-laughface-laugh-beamface-laugh-squintface-laugh-winkcart-flatbed-suitcase map-locationmap-location-dotmarkermedalface-meh-blankface-rolling-eyesmonument mortar-pestle paint-rollerpassport pen-fancypen-nib pen-ruler plane-arrivalplane-departure prescription face-sad-cry face-sad-tear van-shuttle signatureface-smile-beam solar-panelspasplotch spray-canstampstar-half-strokesuitcase-rolling face-surprise swatchbookperson-swimming water-ladder droplet-slash face-tiredtoothumbrella-beach vector-squareweight-hangingwine-glass-emptyspray-can-sparkles apple-wholeatombonebook-open-readerbraincar-rear car-battery car-burstcar-sidecharging-stationdiamond-turn-right draw-polygon laptop-code layer-grouplocation-crosshairslungs microscopeoil-canpoopshapes star-of-lifegauge gauge-high gauge-simplegauge-simple-highteeth teeth-open masks-theater traffic-light truck-monster truck-pickup rectangle-adankh book-bible business-timecitycomment-dollarcomments-dollarcross dharmachakraenvelope-open-text folder-minus folder-plusfilter-circle-dollargopuramhamsabahaijedibook-journal-whillskaabakhandalandmarkenvelopes-bulkmenorahmosqueomspaghetti-monster-flyingpeaceplace-of-worshipsquare-poll-verticalsquare-poll-horizontalperson-praying hands-praying book-quranmagnifying-glass-dollarmagnifying-glass-locationsockssquare-root-variablestar-and-crescent star-of-david synagogue scroll-torah torii-gatevihara volume-xmarkyin-yang blender-phone book-skull campgroundcatchair cloud-moon cloud-suncowdice-d20dice-d6dogdragondrumstick-bitedungeonfile-csv hand-fistghosthammerhanukiah hat-wizard person-hikinghippohorsehouse-chimney-crack hryvnia-signmaskmountain network-wiredotterringperson-runningscrollskull-crossbonesslashspider toilet-papertractor user-injured vr-cardboard wand-sparkleswind wine-bottlecloud-meatballcloud-moon-rain cloud-raincloud-showers-heavycloud-sun-raindemocratflag-usa hurricane landmark-domemeteor person-booth poo-stormrainbow republicansmogtemperature-hightemperature-low cloud-bolttornadovolcano check-to-slotwaterbaby baby-carriage biohazardblog calendar-day calendar-week candy-canecarrot cash-registerminimizedumpster dumpster-fireethernetgiftschampagne-glasses whiskey-glass earth-europe grip-linesgrip-lines-verticalguitar heart-crack holly-berry horse-headiciclesigloomittenmug-hot radiationcircle-radiationrestroom satellitesatellite-dishsd-cardsim-cardperson-skating person-skiingperson-skiing-nordicsleigh comment-smsperson-snowboardingsnowmansnowplow tenge-signtoiletscrewdriver-wrench cable-carfire-flame-curvedbacon book-medical bread-slicecheesehouse-chimney-medicalclipboard-usercomment-medicalcrutchdiseaseegg folder-treeburgerhand-middle-finger helmet-safety hospital-userhotdog ice-creamlaptop-medicalpager pepper-hot pizza-slice sack-dollar book-tanakh bars-progresstrash-arrow-uptrash-can-arrow-up user-nurse wave-square person-biking border-all border-noneborder-top-leftperson-diggingfanicons phone-flipsquare-phone-flip photo-film text-slasharrow-down-z-a arrow-up-z-aarrow-down-short-widearrow-up-short-widearrow-down-9-1 arrow-up-9-1 spell-check voicemail hat-cowboyhat-cowboy-sidecomputer-mouseradio record-vinyl walkie-talkiecaravanmkdocs-1.6.1/mkdocs/themes/mkdocs/content.html0000664000175000017500000000031414664334534021260 0ustar carstencarsten{% if page.meta.source %}

{% endif %} {{ page.content }} mkdocs-1.6.1/mkdocs/themes/mkdocs/nav-sub.html0000664000175000017500000000072614664334534021170 0ustar carstencarsten{%- if not nav_item.children %}
  • {{ nav_item.title }}
  • {%- else %} {%- endif %} mkdocs-1.6.1/mkdocs/themes/mkdocs/css/0000775000175000017500000000000014664334534017512 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/css/fontawesome.min.css0000664000175000017500000023563314664334534023351 0ustar carstencarsten/*! * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ .fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} .fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} .fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}mkdocs-1.6.1/mkdocs/themes/mkdocs/css/v4-font-face.min.css0000664000175000017500000000331014664334534023174 0ustar carstencarsten/*! * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ @font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}mkdocs-1.6.1/mkdocs/themes/mkdocs/css/brands.min.css0000664000175000017500000004555314664334534022273 0ustar carstencarsten/*! * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ :host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}mkdocs-1.6.1/mkdocs/themes/mkdocs/css/base.css0000664000175000017500000002041514664334534021140 0ustar carstencarstenhtml { /* The nav header is 3.5rem high, plus 20px for the margin-top of the main container. */ scroll-padding-top: calc(3.5rem + 20px); } /* Replacement for `body { background-attachment: fixed; }`, which has performance issues when scrolling on large displays. See #1394. */ body::before { content: ' '; position: fixed; width: 100%; height: 100%; top: 0; left: 0; background-color: var(--bs-body-bg); background: url(../img/grid.png) repeat-x; will-change: transform; z-index: -1; } body > .container { margin-top: 20px; min-height: 400px; } .navbar.fixed-top { position: -webkit-sticky; position: sticky; } .source-links { float: right; } .col-md-9 img { max-width: 100%; display: inline-block; padding: 4px; line-height: 1.428571429; background-color: var(--bs-secondary-bg-subtle); border: 1px solid var(--bs-secondary-border-subtle); border-radius: 4px; margin: 20px auto 30px auto; } h1 { color: inherit; font-weight: 400; font-size: 42px; } h2, h3, h4, h5, h6 { color: inherit; font-weight: 300; } hr { border-top: 1px solid #aaa; opacity: 1; } pre, .rst-content tt { max-width: 100%; background-color: var(--bs-body-bg); border: solid 1px var(--bs-border-color); color: var(--bs-body-color); overflow-x: auto; } code.code-large, .rst-content tt.code-large { font-size: 90%; } code { padding: 2px 5px; background-color: rgba(var(--bs-body-bg-rgb), 0.75); border: solid 1px var(--bs-border-color); color: var(--bs-body-color); white-space: pre-wrap; word-wrap: break-word; } pre code { display: block; border: none; white-space: pre; word-wrap: normal; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 12px; } kbd { padding: 2px 4px; font-size: 90%; color: var(--bs-secondary-text-emphasis); background-color: var(--bs-secondary-bg-subtle); border-radius: 3px; -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); } a code { color: inherit; } a:hover code, a:focus code { color: inherit; } footer { margin-top: 30px; margin-bottom: 10px; text-align: center; font-weight: 200; } .modal-dialog { margin-top: 60px; } /* * Side navigation * * Scrollspy and affixed enhanced navigation to highlight sections and secondary * sections of docs content. */ .bs-sidebar.affix { position: -webkit-sticky; position: sticky; /* The nav header is 3.5rem high, plus 20px for the margin-top of the main container. */ top: calc(3.5rem + 20px); } .bs-sidebar.card { padding: 0; max-height: 90%; overflow-y: auto; } /* Toggle (vertically flip) sidebar collapse icon */ .bs-sidebar .navbar-toggler span { -moz-transform: scale(1, -1); -webkit-transform: scale(1, -1); -o-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); } .bs-sidebar .navbar-toggler.collapsed span { -moz-transform: scale(1, 1); -webkit-transform: scale(1, 1); -o-transform: scale(1, 1); -ms-transform: scale(1, 1); transform: scale(1, 1); } /* First level of nav */ .bs-sidebar > .navbar-collapse > .nav { padding-top: 10px; padding-bottom: 10px; border-radius: 5px; width: 100%; } /* All levels of nav */ .bs-sidebar .nav > li > a { display: block; padding: 5px 20px; z-index: 1; } .bs-sidebar .nav > li > a:hover, .bs-sidebar .nav > li > a:focus { text-decoration: none; border-right: 1px solid; } .bs-sidebar .nav > li > a.active, .bs-sidebar .nav > li > a.active:hover, .bs-sidebar .nav > li > a.active:focus { font-weight: bold; background-color: transparent; border-right: 1px solid; } .bs-sidebar .nav .nav .nav { margin-left: 1em; } .bs-sidebar .nav > li > a { font-weight: bold; } .bs-sidebar .nav .nav > li > a { font-weight: normal; } .headerlink { font-family: FontAwesome; font-size: 14px; display: none; padding-left: .5em; text-decoration: none; vertical-align: middle; } h1:hover .headerlink, h2:hover .headerlink, h3:hover .headerlink, h4:hover .headerlink, h5:hover .headerlink, h6:hover .headerlink { display:inline-block; } blockquote { padding-left: 10px; border-left: 4px solid #e6e6e6; } .admonition, details { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; text-align: left; } .admonition.note, details.note { color: var(--bs-primary-text-emphasis); background-color: var(--bs-primary-bg-subtle); border-color: var(--bs-primary-border-subtle); } .admonition.note h1, .admonition.note h2, .admonition.note h3, .admonition.note h4, .admonition.note h5, .admonition.note h6, details.note h1, details.note h2, details.note h3, details.note h4, details.note h5, details.note h6 { color: var(--bs-primary-text-emphasis); } .admonition.info, details.info { color: var(--bs-info-text-emphasis); background-color: var(--bs-info-bg-subtle); border-color: var(--bs-info-border-subtle); } .admonition.info h1, .admonition.info h2, .admonition.info h3, .admonition.info h4, .admonition.info h5, .admonition.info h6, details.info h1, details.info h2, details.info h3, details.info h4, details.info h5, details.info h6 { color: var(--bs-info-text-emphasis); } .admonition.warning, details.warning { color: var(--bs-warning-text-emphasis); background-color: var(--bs-warning-bg-subtle); border-color: var(--bs-warning-border-subtle); } .admonition.warning h1, .admonition.warning h2, .admonition.warning h3, .admonition.warning h4, .admonition.warning h5, .admonition.warning h6, details.warning h1, details.warning h2, details.warning h3, details.warning h4, details.warning h5, details.warning h6 { color: var(--bs-warning-text-emphasis); } .admonition.danger, details.danger { color: var(--bs-danger-text-emphasis); background-color: var(--bs-danger-bg-subtle); border-color: var(--bs-danger-border-subtle); } .admonition.danger h1, .admonition.danger h2, .admonition.danger h3, .admonition.danger h4, .admonition.danger h5, .admonition.danger h6, details.danger h1, details.danger h2, details.danger h3, details.danger h4, details.danger h5, details.danger h6 { color: var(--bs-danger-text-emphasis); } .admonition, details { color: var(--bs-light-text-emphasis); background-color: var(--bs-light-bg-subtle); border-color: var(--bs-light-border-subtle); } .admonition h1, .admonition h2, .admonition h3, .admonition h4, .admonition h5, .admonition h6, details h1, details h2, details h3, details h4, details h5, details h6 { color: var(--bs-light-text-emphasis); } .admonition-title, summary { font-weight: bold; text-align: left; } .admonition>p:last-child, details>p:last-child { margin-bottom: 0; } @media (max-width: 991.98px) { .navbar-collapse.show { overflow-y: auto; max-height: calc(100vh - 3.5rem); } } .dropdown-item.open { color: var(--bs-dropdown-link-active-color); background-color: var(--bs-dropdown-link-active-bg); } .dropdown-submenu > .dropdown-menu { margin: 0 0 0 1.5rem; padding: 0; border-width: 0; } .dropdown-submenu > a::after { display: block; content: " "; float: right; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 5px 0 5px 5px; border-left-color: var(--bs-dropdown-link-active-color); margin-top: 5px; margin-right: -10px; } .dropdown-submenu:hover > a::after { border-left-color: var(--bs-dropdown-link-active-color); } @media (min-width: 992px) { .dropdown-menu { overflow-y: auto; max-height: calc(100vh - 3.5rem); } .dropdown-submenu { position: relative; } .dropdown-submenu > .dropdown-menu { position: fixed !important; margin-top: -9px; margin-left: -2px; border-width: 1px; padding: 0.5rem 0; } .dropdown-submenu.pull-left { float: none; } .dropdown-submenu.pull-left > .dropdown-menu { left: -100%; margin-left: 10px; } } @media print { /* Remove sidebar when print */ .col-md-3 { display: none; } } mkdocs-1.6.1/mkdocs/themes/mkdocs/css/solid.min.css0000664000175000017500000000107414664334534022122 0ustar carstencarsten/*! * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}mkdocs-1.6.1/mkdocs/themes/mkdocs/js/0000775000175000017500000000000014664334534017336 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/js/base.js0000664000175000017500000002006214664334534020606 0ustar carstencarstenfunction getSearchTerm() { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == 'q') { return sParameterName[1]; } } } function applyTopPadding() { // Update various absolute positions to match where the main container // starts. This is necessary for handling multi-line nav headers, since // that pushes the main container down. var container = document.querySelector('body > .container'); var offset = container.offsetTop; document.documentElement.style.scrollPaddingTop = offset + 'px'; document.querySelectorAll('.bs-sidebar.affix').forEach(function(sidebar) { sidebar.style.top = offset + 'px'; }); } document.addEventListener("DOMContentLoaded", function () { var search_term = getSearchTerm(); var search_modal = new bootstrap.Modal(document.getElementById('mkdocs_search_modal')); var keyboard_modal = new bootstrap.Modal(document.getElementById('mkdocs_keyboard_modal')); if (search_term) { search_modal.show(); } // make sure search input gets autofocus every time modal opens. document.getElementById('mkdocs_search_modal').addEventListener('shown.bs.modal', function() { document.getElementById('mkdocs-search-query').focus(); }); // Close search modal when result is selected // The links get added later so listen to parent document.getElementById('mkdocs-search-results').addEventListener('click', function(e) { if (e.target.tagName === 'A') { search_modal.hide(); } }); // Populate keyboard modal with proper Keys document.querySelector('.help.shortcut kbd').innerHTML = keyCodes[shortcuts.help]; document.querySelector('.prev.shortcut kbd').innerHTML = keyCodes[shortcuts.previous]; document.querySelector('.next.shortcut kbd').innerHTML = keyCodes[shortcuts.next]; document.querySelector('.search.shortcut kbd').innerHTML = keyCodes[shortcuts.search]; // Keyboard navigation document.addEventListener("keydown", function(e) { if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return true; var key = e.which || e.keyCode || window.event && window.event.keyCode; var page; switch (key) { case shortcuts.next: page = document.querySelector('.navbar a[rel="next"]'); break; case shortcuts.previous: page = document.querySelector('.navbar a[rel="prev"]'); break; case shortcuts.search: e.preventDefault(); keyboard_modal.hide(); search_modal.show(); document.getElementById('mkdocs-search-query').focus(); break; case shortcuts.help: search_modal.hide(); keyboard_modal.show(); break; default: break; } if (page && page.hasAttribute('href')) { keyboard_modal.hide(); window.location.href = page.getAttribute('href'); } }); document.querySelectorAll('table').forEach(function(table) { table.classList.add('table', 'table-striped', 'table-hover'); }); function showInnerDropdown(item) { var popup = item.nextElementSibling; popup.classList.add('show'); item.classList.add('open'); // First, close any sibling dropdowns. var container = item.parentElement.parentElement; container.querySelectorAll(':scope > .dropdown-submenu > a').forEach(function(el) { if (el !== item) { hideInnerDropdown(el); } }); var popupMargin = 10; var maxBottom = window.innerHeight - popupMargin; var bounds = item.getBoundingClientRect(); popup.style.left = bounds.right + 'px'; if (bounds.top + popup.clientHeight > maxBottom && bounds.top > window.innerHeight / 2) { popup.style.top = (bounds.bottom - popup.clientHeight) + 'px'; popup.style.maxHeight = (bounds.bottom - popupMargin) + 'px'; } else { popup.style.top = bounds.top + 'px'; popup.style.maxHeight = (maxBottom - bounds.top) + 'px'; } } function hideInnerDropdown(item) { var popup = item.nextElementSibling; popup.classList.remove('show'); item.classList.remove('open'); popup.scrollTop = 0; var menu = popup.querySelector('.dropdown-menu'); if (menu) { menu.scrollTop = 0; } var dropdown = popup.querySelector('.dropdown-submenu > a'); if (dropdown) { dropdown.classList.remove('open'); } } document.querySelectorAll('.dropdown-submenu > a').forEach(function(item) { item.addEventListener('click', function(e) { if (item.nextElementSibling.classList.contains('show')) { hideInnerDropdown(item); } else { showInnerDropdown(item); } e.stopPropagation(); e.preventDefault(); }); }); document.querySelectorAll('.dropdown-menu').forEach(function(menu) { menu.parentElement.addEventListener('hide.bs.dropdown', function() { menu.scrollTop = 0; var dropdown = menu.querySelector('.dropdown-submenu > a'); if (dropdown) { dropdown.classList.remove('open'); } menu.querySelectorAll('.dropdown-menu .dropdown-menu').forEach(function(submenu) { submenu.classList.remove('show'); }); }); }); applyTopPadding(); }); window.addEventListener('resize', applyTopPadding); var scrollSpy = new bootstrap.ScrollSpy(document.body, { target: '.bs-sidebar' }); /* Prevent disabled links from causing a page reload */ document.querySelectorAll("li.disabled a").forEach(function(item) { item.addEventListener("click", function(event) { event.preventDefault(); }); }); // See https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes // We only list common keys below. Obscure keys are omitted and their use is discouraged. var keyCodes = { 8: 'backspace', 9: 'tab', 13: 'enter', 16: 'shift', 17: 'ctrl', 18: 'alt', 19: 'pause/break', 20: 'caps lock', 27: 'escape', 32: 'spacebar', 33: 'page up', 34: 'page down', 35: 'end', 36: 'home', 37: '←', 38: '↑', 39: '→', 40: '↓', 45: 'insert', 46: 'delete', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9', 65: 'a', 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y', 90: 'z', 91: 'Left Windows Key / Left ⌘', 92: 'Right Windows Key', 93: 'Windows Menu / Right ⌘', 96: 'numpad 0', 97: 'numpad 1', 98: 'numpad 2', 99: 'numpad 3', 100: 'numpad 4', 101: 'numpad 5', 102: 'numpad 6', 103: 'numpad 7', 104: 'numpad 8', 105: 'numpad 9', 106: 'multiply', 107: 'add', 109: 'subtract', 110: 'decimal point', 111: 'divide', 112: 'f1', 113: 'f2', 114: 'f3', 115: 'f4', 116: 'f5', 117: 'f6', 118: 'f7', 119: 'f8', 120: 'f9', 121: 'f10', 122: 'f11', 123: 'f12', 124: 'f13', 125: 'f14', 126: 'f15', 127: 'f16', 128: 'f17', 129: 'f18', 130: 'f19', 131: 'f20', 132: 'f21', 133: 'f22', 134: 'f23', 135: 'f24', 144: 'num lock', 145: 'scroll lock', 186: ';', 187: '=', 188: ',', 189: '‐', 190: '.', 191: '?', 192: '`', 219: '[', 220: '\', 221: ']', 222: ''', }; mkdocs-1.6.1/mkdocs/themes/mkdocs/js/darkmode.js0000664000175000017500000000507214664334534021466 0ustar carstencarstenfunction setColorMode(mode) { // Switch between light/dark theme. `mode` is a string value of either 'dark' or 'light'. var hljs_light = document.getElementById('hljs-light'), hljs_dark = document.getElementById('hljs-dark'); document.documentElement.setAttribute('data-bs-theme', mode); if (mode == 'dark') { hljs_light.disabled = true; hljs_dark.disabled = false; } else { hljs_dark.disabled = true; hljs_light.disabled = false; } } function updateModeToggle(mode) { // Update icon and toggle checkmarks of color mode selector. var menu = document.getElementById('theme-menu'); document.querySelectorAll('[data-bs-theme-value]') .forEach(function(toggle) { if (mode == toggle.getAttribute('data-bs-theme-value')) { toggle.setAttribute('aria-pressed', 'true'); toggle.lastElementChild.classList.remove('d-none'); menu.firstElementChild.setAttribute('class', toggle.firstElementChild.getAttribute('class')); } else { toggle.setAttribute('aria-pressed', 'false'); toggle.lastElementChild.classList.add('d-none'); } }); } function onSystemColorSchemeChange(event) { // Update site color mode to match system color mode. setColorMode(event.matches ? 'dark' : 'light'); } var mql = window.matchMedia('(prefers-color-scheme: dark)'), defaultMode = document.documentElement.getAttribute('data-bs-theme'), storedMode = localStorage.getItem('mkdocs-colormode'); if (storedMode && storedMode != 'auto') { setColorMode(storedMode); updateModeToggle(storedMode); } else if (storedMode == 'auto' || defaultMode == 'auto') { setColorMode(mql.matches ? 'dark' : 'light'); updateModeToggle('auto'); mql.addEventListener('change', onSystemColorSchemeChange); } else { setColorMode(defaultMode); updateModeToggle(defaultMode); } document.querySelectorAll('[data-bs-theme-value]') .forEach(function(toggle) { toggle.addEventListener('click', function (e) { var mode = e.currentTarget.getAttribute('data-bs-theme-value'); localStorage.setItem('mkdocs-colormode', mode); if (mode == 'auto') { setColorMode(mql.matches ? 'dark' : 'light'); mql.addEventListener('change', onSystemColorSchemeChange); } else { setColorMode(mode); mql.removeEventListener('change', onSystemColorSchemeChange); } updateModeToggle(mode); }); }); mkdocs-1.6.1/mkdocs/themes/mkdocs/search-modal.html0000664000175000017500000000225514664334534022153 0ustar carstencarsten mkdocs-1.6.1/mkdocs/themes/mkdocs/mkdocs_theme.yml0000664000175000017500000000064414664334534022113 0ustar carstencarsten# Config options for 'mkdocs' theme static_templates: - 404.html locale: en include_search_page: false search_index_only: false highlightjs: true hljs_languages: [] hljs_style: github hljs_style_dark: github-dark navigation_depth: 2 nav_style: primary color_mode: light user_color_mode_toggle: false analytics: gtag: null shortcuts: help: 191 # ? next: 78 # n previous: 80 # p search: 83 # s mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/0000775000175000017500000000000014664334534020344 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/fa/0000775000175000017500000000000014664334534020732 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/fa/LC_MESSAGES/0000775000175000017500000000000014664334534022517 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/fa/LC_MESSAGES/messages.po0000664000175000017500000000555614664334534024701 0ustar carstencarsten# Persian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2022-03-03 15:49+0330\n" "Last-Translator: Peyman Mohammadi <@peymanr34>\n" "Language: fa\n" "Language-Team: fa \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "صفحه یافت نشد" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "جستجو" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "قبلی" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "بعدی" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "ویرایش در %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "مستندات ساخته شده توسط %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "میانبر های صفحه کلید" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "بستن" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "کلیدها" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "عمل" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "بازکردن این راهنما" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "صفحه بعدی" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "صفحه قبلی" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "از این بخش می‌توانید اسناد را جستجو کنید. عبارت جستجوی خود را در بخش زیر " "وارد کنید." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "جستجو..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "عبارت جستجو را اینجا وارد کنید" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "موردی یافت نشد" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "فهرست مطالب" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/pl/0000775000175000017500000000000014664334534020757 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/pl/LC_MESSAGES/0000775000175000017500000000000014664334534022544 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/pl/LC_MESSAGES/messages.po0000664000175000017500000000545514664334534024724 0ustar carstencarsten# Polish translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2024-03-21 17:46+0100\n" "Last-Translator: Szymon Rakowski \n" "Language: pl\n" "Language-Team: pl \n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " "(n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Nie znaleziono strony" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Szukaj" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Wstecz" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Dalej" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Edytuj w %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Edytuj" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Dokumentacja zbudowana przy użyciu pakietu %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Skróty klawiszowe" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Zamknij" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Klawisze" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Akcja" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Otwórz tę pomoc" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Następna strona" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Poprzednia strona" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "W tym miejscu możesz przeszukiwać dokumenty. Wpisz swoją frazę do " "wyszukania poniżej." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Szukaj..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Wpisz tutaj frazę do wyszukiwania" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Nie znaleziono wyników" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Spis treści" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/ru/0000775000175000017500000000000014664334534020772 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/ru/LC_MESSAGES/0000775000175000017500000000000014664334534022557 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/ru/LC_MESSAGES/messages.po0000664000175000017500000000607214664334534024733 0ustar carstencarsten# Russian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2022-09-13 23:23+0300\n" "Last-Translator: Alexander Krasnikov \n" "Language: ru\n" "Language-Team: ru \n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Страница не найдена" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Поиск" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Назад" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Вперед" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Редактировать в %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Редактировать" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Документация создана с помощью %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Сочетания клавиш" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Закрыть" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Клавиши" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Действие" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Открыть справку" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Следующая страница" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Предыдущая страница" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Чтобы воспользоваться поиском по документам, введите поисковый запрос " "ниже." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Поиск..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Введите поисковый запрос" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Ничего не найдено" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Содержание" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/ja/0000775000175000017500000000000014664334534020736 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/ja/LC_MESSAGES/0000775000175000017500000000000014664334534022523 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/ja/LC_MESSAGES/messages.po0000664000175000017500000000544214664334534024677 0ustar carstencarsten# Japanese translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2021-07-31 12:06+0900\n" "Last-Translator: Goto Hayato \n" "Language: ja\n" "Language-Team: ja \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "ページが見つかりません" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "検索" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "前へ" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "次へ" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "%(repo_name)s で編集" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "%(mkdocs_link)s でビルドされたドキュメンテーション" #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "キーボードショートカット" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "閉じる" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "キー" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "アクション" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "このヘルプを開く" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "次のページ" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "前のページ" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "これらのドキュメントをこちらから検索できます。検索語句を以下に入力してください。" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "検索..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "検索語句を入力してください" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "結果がありません" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "目次" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/nb/0000775000175000017500000000000014664334534020743 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/nb/LC_MESSAGES/0000775000175000017500000000000014664334534022530 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/nb/LC_MESSAGES/messages.po0000664000175000017500000000526714664334534024711 0ustar carstencarsten# Norwegian Bokmål translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2022-10-26 11:10+0200\n" "Last-Translator: Per Christian Gaustad \n" "Language: nb\n" "Language-Team: nb \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Fant ikke siden" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Søk" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Forrige" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Neste" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Rediger på %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Rediger" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Dokumentasjonen bygget med %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Tastatursnarveier" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Lukk" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Taster" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Handling" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Åpne denne hjelpen" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Neste side" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Forrige side" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Her kan du søke i disse dokumentene. Skriv søketeksten nedenfor." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Søk ..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Skriv søketeksten her" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Fant ingen resultater" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Innholdsfortegnelse" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/nn/0000775000175000017500000000000014664334534020757 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/nn/LC_MESSAGES/0000775000175000017500000000000014664334534022544 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/nn/LC_MESSAGES/messages.po0000664000175000017500000000524414664334534024720 0ustar carstencarsten# Norwegian Nynorsk translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2022-10-26 11:10+0200\n" "Last-Translator: Per Christian Gaustad \n" "Language: nn\n" "Language-Team: nn \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Fann ikkje sida" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Søk" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Førre" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Neste" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Rediger på %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Rediger" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Dokumentasjonen bygd med %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Tastatursnarvegar" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Lukk" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Tastar" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Handling" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Opn denne hjelpa" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Neste side" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Førre side" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Her kan du søke i desse dokumenta. Skriv søketeksta nedanfor." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Søk ..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Skriv søketeksta her" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Fann ingen resultat" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Innhaldsliste" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/nl/0000775000175000017500000000000014664334534020755 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/nl/LC_MESSAGES/0000775000175000017500000000000014664334534022542 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/nl/LC_MESSAGES/messages.po0000664000175000017500000000532614664334534024717 0ustar carstencarsten# Dutch translations for MkDocs. # Copyright (C) 2024 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2024. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.5.3\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2024-08-12 11:34+0200\n" "Last-Translator: Jeroen van de Nieuwenhof \n" "Language: nl\n" "Language-Team: nl \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.16.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Pagina niet gevonden" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Zoeken" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Vorige" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Volgende" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Bewerk op %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Bewerk" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Documentatie gebouwd met %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Sneltoetsen" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Sluiten" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Toetsen" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Actie" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Open deze hulp" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Volgende pagina" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Vorige pagina" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Vanaf hier kunt u in deze documenten zoeken. Voer uw zoektermen hieronder in." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Zoeken..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Voer hier uw zoekterm in" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Geen resultaten gevonden" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Inhoudsopgave" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/it/0000775000175000017500000000000014664334534020760 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/it/LC_MESSAGES/0000775000175000017500000000000014664334534022545 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/it/LC_MESSAGES/messages.po0000664000175000017500000000533514664334534024722 0ustar carstencarsten# Italian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2022-06-05 12:23+0200\n" "Last-Translator: Francesco Maida \n" "Language: it\n" "Language-Team: fr \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Pagina non trovata" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Cerca" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Precedente" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Successivo" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Modifica su %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Modificare" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Documentazione creata con %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Tastiera Rapida" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Chiudi" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Chiavi" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Azione" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Apri questa guida" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Pagina successiva" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Pagina precedente" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Da qui puoi cercare questi documenti. Inserisci i termini di ricerca qui " "sotto." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Cerca..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Digita il termine di ricerca qui" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Nessun risultato trovato" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Tabella dei Contenuti" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/tr/0000775000175000017500000000000014664334534020771 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/tr/LC_MESSAGES/0000775000175000017500000000000014664334534022556 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/tr/LC_MESSAGES/messages.po0000664000175000017500000000526614664334534024736 0ustar carstencarsten# Turkish translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2022-08-21 18:58+0300\n" "Last-Translator: Mustafa Sami Salt \n" "Language: tr\n" "Language-Team: tr \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Sayfa bulunamadı" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Ara" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Önceki" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Sonraki" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "%(repo_name)s içinde düzenle" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Düzenle" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Belgeler %(mkdocs_link)s ile oluşturuldu." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Klavye Kısayolları" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Kapat" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Tuşlar" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Eylem" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Bu yardımı aç" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Sonraki sayfa" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Önceki sayfa" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Buradan belgelerde arama yapabilirsiniz. Arama terimlerinizi aşağıya " "girin." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Ara..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Arama terimini buraya yazın" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Sonuç bulunamadı" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "İçindekiler" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/fr/0000775000175000017500000000000014664334534020753 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/fr/LC_MESSAGES/0000775000175000017500000000000014664334534022540 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/fr/LC_MESSAGES/messages.po0000664000175000017500000000527014664334534024713 0ustar carstencarsten# French translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2021-02-23 23:56+0100\n" "Last-Translator: Alexys Jacob @ultrabug\n" "Language: fr\n" "Language-Team: fr \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Page non trouvée" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Rechercher" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Précédent" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Suivant" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editer dans %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Editer" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Documentation générée avec %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Raccourcis Clavier" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Fermer" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Touches" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Ouvrir l'aide" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Page suivante" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Page précédente" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Ici vous pouvez chercher dans les documents. Entrez votre recherche ci-" "dessous." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Rechercher..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Tapez vos mots clés ici" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Aucun résultat trouvé" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Table des matières" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/zh_TW/0000775000175000017500000000000014664334534021377 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/zh_TW/LC_MESSAGES/0000775000175000017500000000000014664334534023164 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/zh_TW/LC_MESSAGES/messages.po0000664000175000017500000000533214664334534025336 0ustar carstencarsten# Chinese (Traditional, Taiwan) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2023-09-06 02:13+0800\n" "Last-Translator: Peter Dave Hello \n" "Language: zh_Hant_TW\n" "Language-Team: zh_Hant_TW \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "找不到頁面" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "搜尋" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "上一頁" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "下一頁" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "在 %(repo_name)s 上編輯" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "編輯" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "使用 %(mkdocs_link)s 建立的文件" #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "鍵盤快捷鍵" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "關閉" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "按鍵" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "操作" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "開啟這個說明" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "下一頁" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "上一頁" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "從這裡您可以搜尋這些文件。請在下方輸入您要搜尋的內容。" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "搜尋..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "在此輸入要搜尋的內容" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "沒有找到結果" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "目錄" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/es/0000775000175000017500000000000014664334534020753 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/es/LC_MESSAGES/0000775000175000017500000000000014664334534022540 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/es/LC_MESSAGES/messages.po0000664000175000017500000000536014664334534024713 0ustar carstencarsten# Spanish translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2021-05-07 12:06+0200\n" "Last-Translator: Álvaro Mondéjar Rubio \n" "Language: es\n" "Language-Team: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Página no encontrada" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Buscar" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Anterior" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Siguiente" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editar en %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Editar" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Documentación construida con %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Atajos de teclado" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Cerrar" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Teclas" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Acción" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Abrir esta ayuda" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Página siguiente" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Página anterior" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Desde aquí puede buscar estos documentos. Ingrese sus términos de " "búsqueda a continuación." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Buscando..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Escriba el término de búsqueda aquí" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "No se encontraron resultados" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Tabla de contenidos" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/de/0000775000175000017500000000000014664334534020734 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/de/LC_MESSAGES/0000775000175000017500000000000014664334534022521 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/de/LC_MESSAGES/messages.po0000664000175000017500000000536314664334534024677 0ustar carstencarsten# German translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2021-10-24 00:09+0200\n" "Last-Translator: Marc Dietz \n" "Language: de\n" "Language-Team: de \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Seite nicht gefunden" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Suche" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Zurück" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Weiter" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Bearbeiten auf %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Bearbeiten" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Diese Dokumentation wurde erstellt mit %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Tastenkombinationen" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Schließen" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Taste" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Aktion" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Diese Hilfe anzeigen" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Nächste Seite" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Vorherige Seite" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Von hier aus können Sie diese Dokumente durchsuchen. Geben Sie unten Ihre" " Suchanfrage ein." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Suche..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Geben Sie hier ihre Suchanfrage ein" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Keine Ergebnisse gefunden" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Inhaltsverzeichnis" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/uk/0000775000175000017500000000000014664334534020763 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/uk/LC_MESSAGES/0000775000175000017500000000000014664334534022550 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/uk/LC_MESSAGES/messages.po0000664000175000017500000000575514664334534024733 0ustar carstencarsten# Ukrainian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2022-09-17 15:51+0200\n" "Last-Translator: Oleh Prypin <@oprypin>\n" "Language: uk\n" "Language-Team: uk \n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Сторінку не знайдено" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Пошук" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Назад" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Вперед" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Редагувати в %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Редагувати" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Документація збудована з %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Комбінації клавіш" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Закрити" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Клавіші" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Дія" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Відкрити цю довідку" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Наступна сторінка" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Попередня сторінка" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Звідси ви можете шукати документи. Введіть пошуковий запит знизу." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Пошук..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Введіть пошуковий запит" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Нічого не знайдено" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Зміст" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/zh_CN/0000775000175000017500000000000014664334534021345 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/zh_CN/LC_MESSAGES/0000775000175000017500000000000014664334534023132 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/zh_CN/LC_MESSAGES/messages.po0000664000175000017500000000533714664334534025311 0ustar carstencarsten# Chinese (Simplified, China) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2024-04-26 06:34+0800\n" "Last-Translator: xingkong0113 \n" "Language-Team: zh_Hans_CN \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "Generated-By: Babel 2.14.0\n" "X-Generator: Poedit 3.4.2\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "找不到页面" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "搜索" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "上一章" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "下一章" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "在%(repo_name)s上编辑" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "编辑" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "用%(mkdocs_link)s建立的文档。" #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "键盘热键" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "关闭" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "键" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "动作" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "打开这个帮助" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "下一页面" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "上一页面" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "从这里您可以搜索这些文档。在下面输入您需要搜索的内容。" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "搜索..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "在此输入搜索内容" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "没有搜索到结果" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "目录" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/id/0000775000175000017500000000000014664334534020740 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/id/LC_MESSAGES/0000775000175000017500000000000014664334534022525 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/id/LC_MESSAGES/messages.po0000664000175000017500000000534614664334534024704 0ustar carstencarsten# Indonesian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2023-03-12 13:50+0800\n" "Last-Translator: Kira \n" "Language: id\n" "Language-Team: id \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Halaman tidak ditemukan" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Telusuri" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Sebelumnya" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Selanjutnya" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Sunting pada %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Sunting" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Dokumentasi dibuat dengan %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Pintasan Keyboard" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Tutup" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Tombol" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Tindakan" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Buka bantuan ini" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Halaman selanjutnya" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Halaman sebelumnya" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Dari sini Anda dapat mencari dokumen ini. Masukkan istilah pencarian Anda" " di bawah ini." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Telusuri..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Ketik istilah pencarian di sini" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Tidak ada hasil yang ditemukan" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Daftar Isi" mkdocs-1.6.1/mkdocs/themes/mkdocs/locales/pt_BR/0000775000175000017500000000000014664334534021352 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/pt_BR/LC_MESSAGES/0000775000175000017500000000000014664334534023137 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/mkdocs/locales/pt_BR/LC_MESSAGES/messages.po0000664000175000017500000000536014664334534025312 0ustar carstencarsten# Portuguese (Brazil) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-18 21:03+0200\n" "PO-Revision-Date: 2021-09-07 12:06+0200\n" "Last-Translator: Nicole Buitoni \n" "Language: pt_BR\n" "Language-Team: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Página não encontrada" #: mkdocs/themes/mkdocs/base.html:117 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Buscar" #: mkdocs/themes/mkdocs/base.html:127 msgid "Previous" msgstr "Anterior" #: mkdocs/themes/mkdocs/base.html:132 msgid "Next" msgstr "Seguinte" #: mkdocs/themes/mkdocs/base.html:143 mkdocs/themes/mkdocs/base.html:145 #: mkdocs/themes/mkdocs/base.html:147 mkdocs/themes/mkdocs/base.html:149 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editar em %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:151 msgid "Edit" msgstr "Editar" #: mkdocs/themes/mkdocs/base.html:225 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Documentação construída com %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Atalhos de teclado" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Fechar" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Teclas" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Ação" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Abrir esta ajuda" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Próxima página" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Página anterior" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "A partir daqui você pode buscar pelo documento. Digite os termos de " "pesquisa abaixo." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Buscando..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Digite o termo a ser buscado aqui" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Não foram encontrados resultados" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Tabela de Conteúdos" mkdocs-1.6.1/mkdocs/themes/readthedocs/0000775000175000017500000000000014664334534017727 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/breadcrumbs.html0000664000175000017500000000466714664334534023123 0ustar carstencarsten
    {%- if config.theme.prev_next_buttons_location|lower in ['top', 'both'] and page and (page.next_page or page.previous_page) %} {%- endif %}
    mkdocs-1.6.1/mkdocs/themes/readthedocs/versions.html0000664000175000017500000000234214664334534022466 0ustar carstencarsten
    {% if config.repo_name == 'GitHub' %} GitHub {% elif config.repo_name == 'Bitbucket' %} BitBucket {% elif config.repo_name == 'GitLab' %} GitLab {% elif config.repo_name %} {{ config.repo_name }} {% endif %} {% if page.previous_page %} « {% trans %}Previous{% endtrans %} {% endif %} {% if page.next_page %} {% trans %}Next{% endtrans %} » {% endif %}
    mkdocs-1.6.1/mkdocs/themes/readthedocs/404.html0000664000175000017500000000025214664334534021123 0ustar carstencarsten{% extends "base.html" %} {% block content %}

    404

    {% trans %}Page not found{% endtrans %}

    {% endblock %} mkdocs-1.6.1/mkdocs/themes/readthedocs/toc.html0000664000175000017500000000074614664334534021411 0ustar carstencarsten {%- for toc_item in toc_item.children %} {%- endfor %} mkdocs-1.6.1/mkdocs/themes/readthedocs/img/0000775000175000017500000000000014664334534020503 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/img/favicon.ico0000664000175000017500000000217614664334534022632 0ustar carstencarsten h(    4J&-"2jM/|iA 3o=d9-lÃmkdocs-1.6.1/mkdocs/themes/readthedocs/searchbox.html0000664000175000017500000000050614664334534022574 0ustar carstencarsten
    mkdocs-1.6.1/mkdocs/themes/readthedocs/__init__.py0000664000175000017500000000000014664334534022026 0ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/main.html0000664000175000017500000000060014664334534021535 0ustar carstencarsten{% extends "base.html" %} {# The entry point for the ReadTheDocs Theme. Any theme customisations should override this file to redefine blocks defined in the various templates. The custom theme should only need to define a main.html which `{% extends "base.html" %}` and defines various blocks which will replace the blocks defined in base.html and its included child templates. #} mkdocs-1.6.1/mkdocs/themes/readthedocs/base.html0000664000175000017500000001735314664334534021540 0ustar carstencarsten {%- block site_meta %} {%- if page and page.is_homepage %}{%- endif %} {%- if config.site_author %}{%- endif %} {%- if page and page.canonical_url %}{%- endif %} {%- if config.site_favicon %} {%- else %} {%- endif %} {%- endblock %} {%- block htmltitle %} {% if page and page.title and not page.is_homepage %}{{ page.title }} - {% endif %}{{ config.site_name }} {%- endblock %} {%- block styles %} {%- if config.theme.highlightjs %} {%- endif %} {%- for path in config.extra_css %} {%- endfor %} {%- endblock %} {%- block libs %} {% if page %} {% endif %} {%- if config.theme.highlightjs %} {%- for lang in config.theme.hljs_languages %} {%- endfor %} {%- endif %} {%- endblock %} {%- block extrahead %} {% endblock %} {%- block analytics %} {%- if config.theme.analytics.gtag %} {%- elif config.google_analytics %} {% endif %} {%- endblock %}
    {#- SIDE NAV, TOGGLES ON MOBILE #}
    {#- MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #} {#- PAGE CONTENT #}
    {%- include "breadcrumbs.html" %}
    {% block content %} {{ page.content }} {% endblock %}
    {%- block footer %} {%- include "footer.html" %} {% endblock %}
    {% include "versions.html" -%} {%- block scripts %} {%- for script in config.extra_javascript %} {{ script|script_tag }} {%- endfor %} {%- endblock %} {% if page and page.is_homepage %} {% endif %} mkdocs-1.6.1/mkdocs/themes/readthedocs/messages.pot0000664000175000017500000000511414664334534022263 0ustar carstencarsten# Translations template for MkDocs. # Copyright (C) 2024 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2024. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: MkDocs 1.5.3\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by %(rtd_link)s." msgstr "" #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "" #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "" mkdocs-1.6.1/mkdocs/themes/readthedocs/nav.html0000664000175000017500000000224314664334534021402 0ustar carstencarsten{{ nav_item.title }} {%- set navlevel = navlevel + 1 %} {%- if navlevel <= config.theme.navigation_depth and ((nav_item.is_page and nav_item.toc.items and (not config.theme.titles_only and (nav_item == page or not config.theme.collapse_navigation))) or (nav_item.is_section and nav_item.children)) %} {%- if nav_item.is_section %} {%- for nav_item in nav_item.children %} {%- endfor %} {%- elif nav_item.is_page %} {#- Skip first level of toc which is page title. #} {%- set toc_item = nav_item.toc.items and nav_item.toc.items[0] %} {%- include 'toc.html' %} {%- endif %} {%- endif %} {%- set navlevel = navlevel - 1 %} mkdocs-1.6.1/mkdocs/themes/readthedocs/css/0000775000175000017500000000000014664334534020517 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/0000775000175000017500000000000014664334534021650 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Regular.woff0000664000175000017500000025042014664334534026260 0ustar carstencarstenwOFFQhGDEF:@ > ?GPOS+UrsGSUB-t9A"=OS/2/T`*cmap/j|cvt 5.8)fpgm5 zAgasp:glyf:J )head.46Vhhea/ $$ hmtx/(wnloca7:%fmaxp?  name?plpostB $F[2prepPxc`d``a&@Ȩ$#Sd%c%c@r*t y #ƻxڔPڶm۶mo2ڶm ֶmD33"FzEjMaB8'ԧןl@J:J9V΢>QBH1Qbw67֋B',zJs/'˕rWߪXlߖd-Aeo Hkd6Z퍮S1]ll7*([cwY5͎P'+be[YVEz*MwBjI1;sl͵[kS+VvQnmjt=oYLqй>A}J" H/ó?]-'K__ dfLP#R}/rO +,-;)݃p0\$i!vWy1I4Jeo+Û^k8 {r_Fb;/Q?{\92ϋVo;SNDFC#!,ȉȍ"d+H*ԨHDzGcd@S"+ZmCzl([(D' %pPg8[(;D-OP 񖈧 j۶m۶m۶m۶m۶mC*#> ;'~&I2(1C>#3*09S12-1=ӣ9Z%[5Zss1sWp:r-ס7rp+w1%_?` ?)2)b`*V(c2*#+2c*+v*crvʫ꧁O##;2C83c:&C90;8S18;2;82 1KS2+*ӹk0k3 s3;3 {{Kzy x'yᒿ@.A! yu1V@%AΚgV ζm۾m=kiku/ެCկ*U9Mw=oa9Oe goxIeHzŮu!4A HxiZ"4FdNeJ]R`L֠ަSMJI35"m~еxu3Amҵ7}e u5YI"֋ށuk;L,iY`r⸉"F-X$:s`+S4mvR;n W¯C#h>BΩȱ25>dEF#+Z:ͩ/fD:$H!ݏt` 0qV8s < fMfM@ +t6]&MZOבo*ֻtaJ*d.qhnE@C B*VPЏ0{%]%W'If0ɬ,\MZF$S#쫉s|H¼,aA!bUU:b${-hkk! aA m,BĴت bl5X@h)D4UVCqUKNz"%:}}#7S j27 l),IɼX"N2A{:w,Ix˻:J*NK#t2=_l4J!~[^ W҉BCl[gXv6l7a MK'j4dLquN3įo!QH,o&%\ƍs3k@~!hNsI gX~!<**Ckׅ?ߟHo6ےҗM΅|_Q~cc+L5L"M<3ߵ|{a|}|T8[\du𲎳 Y* cx>8u|'s[8s]a"r3}  h|ȧ:fH*GA?%d z,{7.eKhD\>ӱA.v3{ so| oP8 [T͠o 0ѹ[8L;eci5` Y1YDƠL=k',5[:\Xlj{x6e XփK#_07`qj𧢮mb/vpVqtr4QVɕp<_}[ލVep[ϐڨϒƨ]dA4 &q஁F>̏}:}ܧ} ~:}ܧ NlkF#[oGCp pꫩPAd#2Va.Va!Q\3Qe)K 0b1y+H!2.f'Йe*DD+ZRH$dpdz})9sǨMTRt0 I bEWvb*jB4MB!dpX97Cٓz+|ׄ d0#ͥe8f꿐EڗeնF}|^ۋ%׳2lys% 4ocElSRDg.+ݔ{v\<|!r(cSz8AqXlBSx?MfpmhK;!V&3ɢ#89S93ɎMv+g9\y<_ S^̕yBrӏ 9XCe7(Ot9C͚\9,`!YrǼJFcY*cEl+Sq:Qr7yƏo;_Fr-ϧ+aTگvFZ&(hT:7p#3EΒyg,`r뮰JyG+?U/A|X>"IZkS / Qnow=@rP˭#Y!r)wg|WQTSKIDXZ׳QO8!'gqHf,SrVrxyy5-v3.ȏUO$wp}!cEu$9Ka.bUTۊI*NrbEj@J bEڮ_~!V::{_g:{^@:{'9Ka.{'H 9q]H^)~!{BF8]&7$ӂrnvN$֤c>f+ `Fe<[Ε4Йn18d$J$&dLH'. Q@!}1"߰҇!d3W3븁2^^ Rvv[/ }0fxXOU3cC{ՁLH'. Q@!}1"߿҇j&p7p#YS`3֛36fS6[kiAKZq9q;wp'Xbg1Z7N'j֤ jںjN[Liu[۞{3w4sJ֛~|R]LJl06Mn0= Þ7|PH"$%Cٞf\jtLK$&Hvgy!ՙB3 3G*1TRM}Mz2,e AڑE'Е\HД8f'ȥ?P&3":OO.e&z66>elv_7dӃd!KYf&#Nt+1M6)q Xb<~xmP/+5Q~J7p#m> X/o Og|WQir|f\m(U~QnT68$J$&g;$;nHvg|,eyl},O(T0H gW0,? b߰J˫u̾He+ˑۋ7{Zۣ8M%LdCuw繓9S9"ٝ)1,-:zU>P[__-_7kq|]2,nw{蘣.Ua\E 2Oy> X^)o{74V{w 0Q\:0Nȫ/gzӵO{~ղoiH%rb)X&yny.;yg"%WjղF7b<~]SMk܊tƶ>E /R^_wk=d~|Mvg<_O *J|PI54~&i+gݞk?ut`HΑ%0RT 6L9K/ ]]I1MvYަ~K/վ_*jhi?_S]f38;Goaf/d)]#27+oQ.W%bBl&ysNvЖ%;хЖ+(z8AqFW&48gɳmv)?D|%} :%0RLt^䙮9ԋԯr,;X~WOZȈi 8}AO\2"Fz5Jv{q̴Bi_*R(?>ʛ-'[{ /Ke1qߑ:Qr7y>=/O=_{^o_{~WK3޲?*_jk]mg,9[y<糀/.)9^%^5`7X$ߖw{},,[vC|ܭ/=|>*k5^Oc?BZЊt6;MOO BGֶ2-6ƫZΐ9ui9ᐞl[u<=4TצdSmڎޏɱWb&j>ovNgqatO~,g%pyGy'YhD ö^ZepBHOs\gPyʔ(mr]j=%ms>#gkgR"! {l#]Rԋԋ|Yv;wD.J=ק{0I dpBܟfdG#wr,.~:DD>#9̍_2r/įJ.JWjϜUZ betLG{[>,9p ӆ[-짊beގ7R(.wzURZ-= 1M% 2Jqz=yp{e?G&iYRd=qw"~B"=jN>X_SOvg;xg 0~5^<泀Jb!l6׳c4w6Z{Xϱk&_:ɼɜ©wku1#~ptJr#2/gngUgf6跉wẋrVknNgUh%j9@32n ?(/y^T_/kZgz]"km?w#! e,šULbrhLw2863IIq[dNTN9@zG".b{ӘOA|r~\m}dvŜPpFw輐@TӹNnۛ-oVצV7r?_xGx'XZ3< +lM{|f>dlgn9%͵<clG\AN-2,b YN6ZbVFC`^LH'. Q@!}1"svmɥ}L:nFf0H-!+|xxxT4ZHHW0bi#R/R~rD9E}7)/.+xU<<<V99qxjAmuԨa_4Vնmk۶g}f{.r6KH*!5%Ay)5Eol%4c59gy5TRLlhpH Cs^ݻ(f/gI BTlLdG 2fwi"M9"M3Н~.Жs䰉xT҄[0\jIFH \3ї]c36:::sf0#Ϥ7Q+X&:P<@(3ޯG륃WQ퇍_NPҥ?V%ͤ~4Ip8'e4@VwqTمrÿwU n 9b0UªdWޫ'7EQx'UI`Z'bb~Mȍ/ao4zfV8JjkUC<)H&ݮg_|s*Uޞm϶mֶڶcQSmTvڝ? s!D iB& !=4hcp`)=(=d4t8rp.#WYnB] !+cVY޲j|b5jP'1 1$1,1"1.1ObYh3c(1V]K[ҽ[{wJ+ݻOwtރҽ]ҽҽ=ҽҽ}ҽ{H=&{\tISҽ{H='{w.H^xxxxx 卖卑卥kKHIfIHJHIN";[w\)yRKxJ.].ŻRw:)ލRx74*g0'˜@ B* y#Y0͂|(`@2 `T0TTPTp4H4h($F?Os8 eUXf8̮DYx(V/֋\z3q3qEW~eW.ʥ_W6*Zr'sֻzFA/`#2md57?_$4crczEǑ= 7Qso^j۶mcPvWSw7s8W+_$ eCJTVJX*2&TڨVVmj:;5hаQg'4YMjCMi4=zVy ZkIKhYQЫZ״FkMzK[tèӑhaEAXTTB! ,': TQ3:/tA_ꊾuX7zꖾ}{A4E0 "' b1Š(bA,wzc4IOB/zf~wC#я~C_2g'8\T8!G ]D8DK]9ÖߐT"J4,K5K5O5l0ĝ=!7>NQArN< fc!] ({Kqzu- @DRUU (Pw?݃}{ܒ)$v,(24u.)۫[SY$z.,ʪƦΡUm߇IM .3d8DDضmFSAm׏<'3ɧe!!bclM26G(%[bT]5׳N]7h&Mݢ۴u=zO_!C=bnj2uOGFQ*ם!DX?F\"Q%rȕ*[;[kvr \}>eWEa?ٷ۶mc &cm-rl;;<:94(*Ski".BE]|%ڕdN"x@L"Iiɑzd%'Mf@ 5F~/t3E<]@)SZzK>d')K I#Eh1L`9T)2MB ̐*3fI0G`1OK,g KeY.!+X j Y#VcQlfɳ. -Gts$ig%9Es+UrM1nIJ{<JG'OyFx+x#!o;=(Og)Ew0!4 uVcNyKXABQ:J`%+leU~0YAWnƵ۞cmی3{`xSj8c;=GbQcTYO3zx~!^`@ R˱XΚq=TL9үkx=ޤߊ6WLoƷ4f2ӲL4f7f)-~_ՃQjSS~S~jO|P KQ#(Kc' WѸJM6W5mj\|9_htE+]FW4赹VMux9AO$=StN39CRIk(?Rj,6K5eyh,Ec)K[rwU{'bͽG<@̃QMJrMIpJTxNxn!l7Z7Zt'^ͤ$н^}~=avpyC!<Qqq&XSe%e4֤&5iI_EKZ),Yn&+T۬SnZϚ!+W~Ǭ_iyZ_%+Z~׬km޲eu[D-[VnYݲeu-[VnYݲĺ Z7kYײe]˺u-ZֵkYײe]˳Ye>^"/e?3+`WoޫaE#??+YjVy-kuofnvYU`W=QլYUߪ/j:ښ rGΞqk('94|3U]Ow=di}U{y 6#m6Zk6ަ}i35u z[xڝlP{qζm۶`f8ۮճmln) ⨆`N=( (0P ȌǢƌY guꢕz蠽>io>(a;{Pp*ǖ&;f73xBWѝC_џ d_1P1dO~r7s74/65? bfae'줝v&]_rA.e"W\rSnm+jc0By#k!=5@kl]غ`a6{l-U8ik Nx_=eZ駡0Jrܦ(]r)9S4'kJ<ʠh2BETECGG UBLb2DTSxc`f8u1TS7Nh&䉘"(6b(HRar"Gər\+7˽<&O*ʫZCr3"dd7'ƫ8EuHYt ZgYtFws|(e3,aZa% X5q=F< xڜUG{F nQRb34kg9\w[[ң}d*v=ǜk@E-ۀ{+X:%}W*/2sdw7d;qI[Nvv*GHG1Sg$qބz/{i$?IXn|$,NB5ڍʡpz^"NH2iQ=Iw.&RÃQN9|/Nwl?9A 臭X S2QRŒC&1f1IȈ%ETj>N[=Rj連qU!݆\տxj[ȸEHƣ4Lj [ dRB{ d~|N+Y3>)^A?zӶ0SQ\LMEhʄT q8 Lxc\6>.I@ ]IV3ˠټp' Tۇ))Eݟ3i0O/= 3~ Q-JjߴEY-*j砪y[]ŨE[}jXc}׸mVz}վj zzeVdi75)EeR nK wuJGΖv΂o3G}[ K{h|kܯҕk~2jmrpʂu`@\\D'xB3yQ| ,7g~]YK7h=GWא E9ދ,QK$ԓ=Qνl`#Li*E)K9Nwc,2~iԹu:@ӫҠk-"j-q\jݍ=bCT>O5 b]b?Ӹ"+ 1qsQ|5>Z&h*=tC_X43~y޽^9+VYtc?Gc_@ԑv9rbAu&EAY]gk7KH6妲x@o0z8fbq@&c J?&RmP:9P ڶΕDp˜u8?zk, 8, w'r5HVoMJXeՓT0*a:h`2M m $!b)J 1C1bcDy0IVJj͝ael&[zO)=MO 'JRzğ^Jo;ؽ'ahxڌZxTW>ʛx&DH'I3$@ N%;) xq'T Nz۰xٺ- .Re}/tېwNf!38`Ix`o1P`Y̞&gfqk@.C$CIh!JPӢ1;D87G#b4$MJLu:r)b@7=YnG}!brQJp7ҟG!s /rL(yd#qx)28'pN{Xgb#^sf`fZzZZVfvNdyR4#%84ӓsg&uGN]?g;vċ<5#on4o5h'|wecΫ1[o>;++8tɫ!ZZ>@khoݺ!e Hr*#84fB8Axp^'%̕a5uJȞ,nVttu߾dKXۻk} {&zYTK$Ǒc<={੧#Jv/5x3Oz}꩹]Gڣp|Pxܧ[z%t7P<ge 02C[C$E אǤ";_dW{Q>SR>2avvO>pt[MtU_K/''<^iE&Yʷ>k+Eufd慡 LÀrƩt4TS"Nwi7ҎkxlivvN 4[L`*ѽII/p_8y~9.:*n{1Ez҈뙯įGצ/ؿe ;[i8]_])(');%RdPPmw҂;!=1i7Gia l28]@aלͅ뚦5yKkm{'Wz̝x N_Jpe>8+a6&ptpBiG >aM?NqP$]>5.EzT\&L ᘧJ7D9ߋTiPOuSݫaz|aM?5=wf޲=r˜Aˎ|ɑ67rfYXIƮ\:i¢ErX'}^g C@R`yA")'DW6*zB2e]YAmzNl]\z|+^?&qRs Lu+mZ<3y=,}夺!]*yq;xXz i`@kC9NV?nY#KOa Y aQ0Brv̲ZiRscC02tq'fKԜMIM?epa}7OW@n]PE(*vpS-*R?I͛4Oќ׷czFPbճ9Ys5{HbZ=hX?ètuU "#5(/8ghV&xɖBb/VؤI^/VbjK;~+N4diO{yN7PT&A>ِvaA=4i.QAhH H հ" GƠT&SSAEv75cOMM㝦iTQM\ %]] ӲszqvM1櫇Yfs}}T;|m}e¬-8*m []zbݎp*# s4D$M[&Y~*uHef6 2ܳXDsB,]3WpX Lj!_ታZ{c./c^N|'1!0PHh ī0<F1<Á$'9 .gt$Ѧ RH,66"M#=XY|,+%zoE>=[YbFsVҙOSe$CKv2ڐ "Б@ RR (PC-czÓզ"H6k*tBtc6]>ϗ?[Cù5;yK1egM.zIJ/ktB{p;s ܭs_0B8"!yH#9*.bٌ`3lYc0ZUQ]Vr&p!S~#|xR\,UX'P߻_^ 8ɣHr{eI\FY *BʹL&n;$.kSIvbCXFHn5{S[R$`A`E!L 3َ*G^^fZݖ  r{"V92N( A&a @Fl5Lh`,CX*RL޻Z\mzp)\!Xɶ_5moŌ͍/;g`%v."z q3^o6L [/?+)&:(!$&Ĺv92c=TE)Rɞvn 5"HdyWSU4XUD% UǍKݳ2WG[⊄d5nx䍥s-‘| >9-^O x\;Zsb"#`B :N2߬kߎF Ç==)w 7KE>~TLbTۅuw)/!\ˈ 0%*"e 1l@$Bv} `ڳUFf#Auoa4)CWrؘh"Iu"La@" SQ z[Z0=h^WĖ>S.W! I ?'`+$y|A H,7; 47qL¦y Q.:"݉Lw:XxZm\aIjZ(kWQ/]z&ѩPJxN|+O0Wg'.\8r\+Tw="x3 -#N4^q~A&#R 4#9l29XѢ}쵔&/"h0kuQ)llYtxi;?M!7SSr7 z//5_x3t,@RAKcup%%#RcCȨjk5C Mʆ!E).ɥQᦏ1*%)×MKwl\I\~Mϛ״yOL4cں<8|֔Ez@vWĐ;{۪G=`&tO>6490>=hř7Ok Oo|oэih?_5iS>ōs>ݶܨFSz}TB@0aмBQ*lJ VnxCQGGo 1 y{DSQ'bj uQW)H-IHZ^odnO>3DQҩmeըG*>Āz`걱&|^M}dyhϒd!|9 Q(۽n͍*4GMcǔ)G `~-k&TU?x61چ0R;INJ4[)VowrЧPo\\ AKǨg0`xo8_?+ޛ'x3Wͷ/+՚W `-VQQS̊3xo?z E֦nX̮FZM.c+ih4BGSćoDZy,)$mch_b_-/Ʒ?a5u,f|$$*THƣ =?^Jgϼ= c5gENtӨٮ1I2hHtEʆ%X΍S+ZmƉW; u͉- ?1{JkY̎>H6VC(eo+#O$1(jzUNVu_kRfg1\BZSJ+++Qb\1LJ?>^~i@`Ix1ws!ahV U & MCӭK,Ea Р^jcoccz#4CaEN_rmde2U'(O#H}㋣3N87~Xy$ܷvtccܓ?lg99"W{~bN}hq:'D# ~ZәEF )b E&>jcjp9S=L^Y}d[nmq"kU=?B #g9BiHswRl<9,FuM %ISRZJ6AA.\pVmyޔ5 QjiXHU9 ֏:q(2gsr+5W2j0LUqBrLcLN1'ˈ]ppiem{ӂzzيV,'-W3[/QXuw!^t`?kqFA AYc5CŃ6NcTZCbϼ9erD}NN~Y,=/XJS8D:(fAQ"e\ GVWKq)[K,=˺芻OTjFIT ѯu@. ܣVr5Ԗ{2c˅]/oXn{\;rm4E 9VK2vK̝V62tÑ,3tYgKf&֕SxJtSHKoG(;jW8 {kUۋˌq%M AF {,R4T5 Q4qoR=0WS]z|K{qtcvO)#cG̉P '05Y>0"bE4yaW ׌`<޼0?8K$+z77HoA$T#9?6lQLvgM[~ ݓ4xYϏU3t .hB\ztЈ[;1kUIIkI?}lSSgDMU׮]r5I9kf]}b=X\^ch0HK(gv$P!Kd2FxT/zV*Y8T޶4=ujKteo-=|tm+gz3]ZJd {wul#Éw9VK^(q;QCIq:juyKNeP^Fv6<CCgZ*fxT}ObQ;̸7qLvGv|P>z?IP2r #[5*OJS("{EO1:I'G+Z:ѸeO(;Q/Bwji L7'u\Q?tzoʴfܿЙoORP{aRMϷmMrb틓3֗/~ .aQH Pm4C5 pXN{U5]F/n5݊?>6!ql̕\qcmpBv|͵f+Y9 4hL`"XA":1T52Z+tbiDO8Tvl@Ba i JPCUJ{;PB0aWo'| o|9}' Ͽ#wk/;?0PjLQ~TVWCR0, ,\ $b/־< {{w7MfH!NЃTЋ "DX)A|ޕ3wn6~$)gfΜ!R 0Ym+MLgq[6X ,%T<T<\n]ȵ*0dMO?f0|\`uYH~SjWȇ~ӕ' *:yȪ~~֝ܗ/ѯui'j W\>1>:3p'EGn1J=,ʁ.+'ԤQNVlL:fF +.#EqD`b+Ec'>Ƶkny^wh]t~ i(КxX|#,m\TN푾%Gǵ)N#b0x #̡I\_n=M3kpF HW,ZqQ K GN"_4̊h]dg;s XfGcF]JM&6}/;[7 }_SYfa]:CG_٩=6o_>~д4gկsmpt5<:ݸzAYĎ얆׍^P6aB%F8:qRۨkMS㱍z6 Qٯ 4\o=.]./~iU\;ORHCRH|Q<Ie nʈa(‚eآ9.4)) gܴT:2xQxSQīGR~t]OߵF4iȑ0/0\oޅr vqxK;vvt}oުv܅J.tSh Q-΋~p\TӤ]<\a1hh:![C?KDioƏttקe(],N0 nwڶm:U"Ě7ܖ>jaԙ [tҲY> 7 soh1IDb[ې3ی6I=0`>t}8(,0ug3ZBdx;ɐҾËc30~j$إ }C08+dw+uJHsOt0l *bPr!^Fl!`p[,oۺ y|3{ ؒh. .0Qja][!~ۑ%mv޹mFlWЮ'gVT8w\Q-{t:vh شn8Ӽefs?\EZ5?na nM限:wL)ߺ|7,lѽ{žԝ;NߺuzQEE{՛hH[]D0!\bQ*mqA%]Ďb%,=jNK{CL];`8̡;3S$@5 a%*$+d]+ 2fO&]Zv7eSBwzy;7'_6o)ul~] dpPI2OF'\d C0bt0Nm)3Fr!׎PfzO!۹GVR`vнC+ѡJK{\nѨu}3tt,IM;0u ??<8?ā>۴ 1_S"xX8`4Q' t O3c? X+[hYi9竪Ϝ4aq*Fő%nhuĘ=ӵua5tPnhGAN06_ K8``AþfCgD埸qxx2Y=GN .?$KoƳMb: }cXai-B ;wFfMվ9a\qGkBŀg]ĉgM_>xu %޵yv¥æK*_[8t|W@7H 4.M4DQ6 @bClv>p:^0ܦ*+T(m\[X{Jx },D6kt8I*b<&$KIկDT@ Fb>boE$r~k`Dt1Q!Na ~A[!G;s͋Nzso vץTM>>Yxӵlܵ ]Fv2u~ڇ]*j>]PTqC[={`kX;̳ϖr}xsB0J1x#$Dܔ5V)#Km%9[u7J cQr~1%Vb _'>|b^/ڂ n+~kFv״sw[ꠦ/==Wq_[h:윴>.3j_lUj xiʋޯy7U!FGOaO\5^WН'ś$Ĝ rgk賦m]dשFD y57&F4K}#m+w㞤EHo5ܠг!eI䢉=+3-F\>ql$dȄr[%q߬˱-b&-#noJr||h(HP=g#O`2(̢88+O;gɴs]!8wV|7m" eYg;O7֬?M_;Ƭ3 !9l}CMu4Β$!w200T2LB)TI^#РsU+VDw]ej' }֚R֋صw.ӟI\ ye|H(kƚf?FO'q:`<&h W;|ɷbr TQ!Aj_>8PB9” Sp }c'"9VeTE>0 xtPw!U;vȁך%}~nK2l3MPOPlI>~C+_ 0s֭86eSZo}CEs[HwEFT$XI #btm ], \O_ j:葳#;R[H\G.&ܹhnmFm|8 ,!%#Ofz(;Wf-(Np3D#4]&˖F2wY>3:`o`+ҌٸS[oϸ)[1J3R< < ډ0Kla g}DYR@Mx yx Ιyn<~nOydY.ɲKϮ uٟN/lP|lsOBCS'^z!-p]3>y]Ƨ)}$r>ISF+1 N(!X|.r7kYجu֙)#bc~K9nX\ azZD=zsO-P"6memn}Su͜0~Vvںq=z d? =7&N\6&X\T5L| K#lպJL!jD[5VJ]%6 b;cDn?.A`%zYWzyrstۮ=g^/Eu|C/g.XMs"C7Q۩.,0cyduw ^*u;_dָȯګ#%_+2ehA "\:Cuhk=YWu+SpZav! pRb NBFh::ɅXh^- ˀr_kS䫊 ܡX ) [?27Y()ux?>V 9M$\bE0ӵv(R>ll4k\ѸNrF7QCc`({¸ھ=wXrRjkkDox@a2ݑAVY @E#l Wɵ߰y _H=5A w`8.ʜ()Ƭķ'o3;XWox@o͖[j0cOĆ ¤(vv`J%;>mMز%[7bi4t"۠y{a[9c!G_D!΍ĴI_48Ѣh"{o^WwգvLyfkc1I]4l…C-!/]Fs :}мm7AIkĬT9))@k_̤<]N n$5Itg k7zѢcZ6 ]L9aVH%~&N/#B(DYhV'a$Ý@x!uun`dm/kuoWGxM&hKHYS1Ϯ'٬ yOx0*a.j44qڈ`dpE paɥ  V. 3\Oɦ@.( 1$4D]ciB[#@a}ZJHAw$U'm6c~(F@ˉ%_38҄CW*fڱ8~~F$1V* N`g/lm;h\Ԛ,/҄MYG <SYb.cL^ ӖJgCfX (D؉͎ڣ0 96lHy] @EA (7i`,ktVt@F-^~ەvTĆ*Fh]hV# ؕ?P`YԔi7ig ύ,Uh,ڎ18Pb,t̂ΈkT#iZQHỳ$G=g׵m+zi#f4UpR>hC=l`J4aa䤥i0+#5;-[Ɨ] 14KC.(4}fào_23\ qw3F\6T:Cډ'qdmNR w|-u[6ܾoxzg6iVD9.@F! A`2;XIVÄxz,wLGU>|6S[[*<P+QYx3yl +,^fwkY5 .:Pj}:i>,G\"ZY6K rЏ|vNI:W ":ܗ[[׈w~AĻEvXI&xNex(#lЊ>bpaDekN;e1BahK$;[TgN͡7h}pg9u^sa s e5oSbn=_ۿ*5+)uoyهŽtY*hz$1kL7d KTyH)ejd2:76Wn$buPb,I k j'0lJ3C0cڭn|Yw/֤/ۨh;Yqj ܵlH˳y702 y>"׈PF&u611N!+E&CũjQmk?GdjdDl*kGxo׊K[civg"830:G r69 2HbwD| \~>}֔IG뮝hupϾq{24+[Y󎪣nt5!z^;}YwXPōw@!rəRiL L1te8 ]B8|N~Ϥs:7kcëm0/KDOn7ոںxߞ 4vx#!@YbR E ـ48Ծ0svc/7jX^8ڈ{&3{*Zܹ07/:˷=}ݏFa{K#064F}ܑ&ryc}:%bZ=r{Τ=Օ< l$Zi1Pkg2S*C})HdXNgv\ S V{scȒQiݰo^?zuj%gV(ޫYa9S ǕAϽ2Ӟ4lQvV\4|%<㗃l*)z.7tH H< ts:5|9_#`z1KЉ3ϻp݄x>‚} ^y5{B#ѽߞvTQV<`u GNS4xTFVUj`*(5dѠ,^4ۣ}J2Cm >Y{<+cRG"iŦnw="^[Vßܾ\٭o_]>y@+;BSa ws çϘ1݌I!H-17D w9&>vgX񨼀ĘS:U#YtWxzKxx-;{.iq\2KC"1.%tuGc"Bʗ]\]o!m,4"C@7D'^NcJxob({!I_b@cRLfȨ+#:FCG& U).*X񞌞nxGoN{ѻ갽&a9^~y@6>fm6ޑXGNK@`$Z?`rV1닍KtSb Y? 's8Gs5ArՆ≪*TH0@F\OPWYH_0))ɓr{X6Y^Q*u*$ ϫ_ k9*D>] i.bظR7uʈR%1+I;fiTiӹb}v F ܄f:%YjlklR5V/"2`zrE@+:]-])qto-F\SG%5s\~qrmRv4Z*/{!!ژ'#G648=;;&9YYR4 @JpK``M Rb jq~RN?_|崔i~ώٱ7~5[>:wk5hKX? [% gܽ̓C UtRv[Z>\uOmagOqَ4ԓxX*٩R#k30┌)2D ($_8vk0בR_$9tQ%`2 L$ (@'NPIdYEzAlUq룷}SEC+s[~Mm<,ȀBLFXD9cr%i474yr#k9Ӊh=0z(=pbUkD*g&oo>ŬaXu(mfrloXG rbb1 XaP0C^2WlA/akA6564utL8i#F8FNHHAAv2[l&D0w2 ;G}(ͣ-339̜̜dY+)Q.HuAoYFd.t4X=fٟr"G_/ԁj}W&}W$$Ia]aM(3)` %HH"$!9!9*>*0c{A}?WnV n} )IГ@3bw:VN(GiS#` oK-Mپ]YV}h E,5=5 }5fwB GC>ze̵Xq%Ί1{qHXۡ} 忀_1_V).jX S>R[eq%nfyʗVF$\ሧR?ŁRUra\ j5Dp򌴪CKTgE `ZÜ,DO􉆐obH/j+Ε+c>OifŀO-]"`Ga?e͎;4[ Mm{ު4ic_̷$ڈCFJ˥U헗W$xS\w Uĝ@h"0BK4Pe+-“*ӓ Wbu ɪL E,JP| ?1qŜm9yby߲IUX/[z({fߣuܦت^tmkFtxJ^30kAA^3кbfs{;Sܙgo|vCeey[,HMy;M!c]Liջo?\=a'e"4UQ5Xզo'X&Z(u+M[!I%55h朗'Sj熪^C} TEݦ1_p:}\rQ:ruQ:<2dTU)oNx-t`1W1巼[\9A<oQCbQل7 VL @c833yɕq3!]ewmvk3VXpl: AyBN. O.PNnۤ}FR^xLnIIpmW,"BT^Sj7T M+ 䗎ɠMO~Q]jsH!į s5lPv\b"B4|Ĥk*NRcg޿lgjiOq.߻uGؓV9jۑ{>'6.W)/1d7m9m9Ļ\rAA/NEUuI F(#hn8Z%$V[iopGp QgZӸ~Cߐh]0rTl.+YIfa:yJm^cR1dx\276AYD'ܕvDrH8^x9X=@U(8XéUNs(n8'^^ `́d?~KWJNM.7~eM9 t+YF=xB+ݱ:ݚևֈ}P?C7CסfdlFSS4/XW]NDq`HC.[ Om8֙=4;c^/~,q\+ Zr&)΍u"&f=ҌSUB "G8ڎ~!+{ sǎ&~B9ɕ?*FN-&msWFd_d6e.iҪI.ĝpmK?ͻ&¼BtG 逦a'Ãh4@ ;ճʦznk.yaC{"ox͊+*͟++xCUE6V{+Go9nou^#g_P:P y9ۣ{gYg͞ij>GL;E=4av 6ɪLrRˍ@!v`}v\B:~287k;%!wQc5#Wպvqţs3) 2pИA,Zz*չ(3p;e# 4ԪM@97j( nQ+2]D+~Q >Tɼտ}֏3N'`4J! !?Ծ/Zusr|5å=7L>P<03(eQ@ -73F,ju=C5lH8 \PP>[il.[9rNjVt5 -x(j4S'ތc\l\z7}A_Z'gSk@,*03V~%: :V!K:w]NL]\Ort/\.FϙsxLvh%$\\<3h?+܅Lpb[U[W]1#m 4x 6y5Ys {%!"Z,q *њhes1zM)P.tB3덢F(k]62̮t!b#bF }CwAU>47s5D!w+?^d{i9;7 /I$Tʎ!@xw۽'6k]9C?#5jxOvҠ2߬˶.XuNT3crD>S񁦽/EySe(N6#_. *:'ω!B.`שqy-6ENlִ'Xiں}yBnSuD"-- TgHKʰ~>rݺlּ]XxPLf15-bw\GVsCy_4À+6 KLjAi\_F2Զ6\9(yB6\U<<VEaq C"`ZܚfeXBzҦrR%:X &s:FXZz`|,{"Ic ֖W՘`՟`eƌeoެigM?1F|y\C)j#wY+S*ehn5[yVRBzf g8SbfrCʒ!H^ZDxi ~٩)H-\2{ر7mIٕ+oXh;kƴ)' 3`5e#)-_ܿo=vnڱimqgOOoPnQQ* Rͪ?^Xf;f͛gT3v\N4-hd S/^ ;,!ς>}zɓym 隔ǍZcuS}I֍DW>!6LL0ڌvA$4 5ݱO8 ;1$XvVJ2G-|T:.',osQ46`N5J`B|_ ۍ_k%NyZ*m^Ů[.nt~&-Cy_.vS(! 9jP Eb ͈n'JXauU-EAq;,($=EQK $!ϟUG ϝ}UD >噘E5 3]ޑ+UFZ_ULgۡ}x)T($q,Rg ϦG/3'Kc%Z:ggu'mv!ƅ$N 4I63 D>6brqw"c*hwlKG4R:kCůpi~%ЬSA4Pe0X7Jl:陼ksF=+@y}hE){!~Ah:`lʫ1H*gŋVb_󕍷/sfe* ?j hsF-m3:&iߍ/&\ iUܯR4b[dy с5XQ:0(',Ri:EQ&t:=գ#Z]BQg\)!hs u DhdfB4NY$L16g1nbM:dvzUί!ܲ9c(+A֌_CGng y:$ݵs]so/3M;<Џ-$F N`@83x 1ʢP_W-T -1_mˬv5D|/_aOθ;.^飏~:gr܎g&]7ainL6 U߈ c|[h+1ot{lU?^ɜo8)1"a%.Iֺld /JB~b>R=O)BM!D3U0@'!(kʲ7⫪p6g#j-5;1zTebhk g/|][߱aZR,qKIńd#wx徎`д2xJ0m<tdxű'\@>\i8̡%.ݙ|3WH:xm;yZVJkۓqLVڈ:)!`+p u)=I!1OfFXOT%z;IrT˼tySED;f{R*fq`NKyHUasma.(Fb_JG`qu`e±pG#>&Z J3GtM=KQ +#Mlr[~P=<힅Kۦ3kJr\!9h@44oda-5HjvjVzZ|\tTYI,h6@ YR=uϕ!S;򟎉T=;zL> ss[ddJh %^+ܖQg f.ѲoîŮo[aXkUUpӪ[fLi|xĸg'ӣoS:a#X½2G߶W']{vtGxUrZE $KR (:L tc"Z`Qf\;Q> ,g0q5X q&)|nae #vC׾YחÀSa#MO`a&79K1ڣWv w uXihxIYsFY3qtt e~2NaâNGepUf5LUuA]V2U)_3q$d57B?{wG'n+N^2OncܑM"* %I?=z>x%;e7 f'oyԷ5͗oV}sٿw͚yqѓG?3uLY-H|µ++Qw7*leU|LxVgC4YJOnԥܽ.jk)^9\Llz1BP1',Y~}j|z>sn݂[ieUUAYxX_Ԟml7z{8qى-j^__f%ᴜ&~pD:6NxP7"TcNe:ݺ.0 ` rZ'nU'ᮓg𧚙-rfF<{9'o \"fIkn /x󤜟\Kќdcr_/W aZ[]7Vt:Nq!S.%@S-9⛥ЪIgGpc(&>Δsxpu",?l/K͍.~VԊ3P0x7 9G圄 EWgJ;R08o#~%.`چy x?LFJJ]o T5/v֭c1 =~ ]+ܽZ1ޖqB+]Y7}Te, MImf^J-I\vH×QR|US2\St&ݣ4#UܫX5;eX0K9)1Fdb8??Unn?a=y4c#.wf ud+MOnYoi/&(kJ+%d̿ԑ̐JXG2-cՋnBs N=y9?zNQ.N},xn/=zc f_n5WOT ` o| IiA?k|o(4__XBθԝN`zh 0ovj`G$8 ]QjtD;xvj~dz:'G%ve:u|JgS^{]{u:$#^gv>33oz:~\x;L%bbIH$sl=_Iʡ+҈D0%$Ǵ i~>q)6_@F9#9Sw:=W(~sކ ngc}g3g1Yٳ1c̈́0y ,Ū ]-v2uoC_GhBHbq(GO#:S1NaI!, LCBu0H N!  hh(!]:u?6uJ28 he߂ϙ q5gfu}kz_9}}k۷l޽ k<=w]壁oΠO͐~wlٲ}i_T2Q!D'-\ ᶟCx{a)ب/d5r݁]k;%iS_@D̅n0HYvqD[˳`'w62}|#5;lKoEs;]b͵oe%_*wq*Qh1uTvxaq;ޙT2{)2>6BM iϡ[9p0t1"HFCCnd7jz X yoQXV w!z򊖍_QbC~SA͎:P,Q>?O߽Mrzry#jN;s}[Wmaܳ $dVH6j@6 fF !p fum` F4 :&4 HR͚7kUVTQn\Vl3mJ}em˖v]?߱Ebؤ-n8|X;gS!S*/9+.ou'u3#1C,V ،lxQvL=rzC1jҬ@oLRj~MNbtԖ0@7HjAnnɔ삘VK.>,@mi0|-\5%]Qe=7D=Q8nxCeRHiMړm d0#D6/ck҅^|e8]۵SnK:vkWۿ} k}|>zOӧzo[&Mշ-k~_vȲ~W>&f;_`/6u/$ClgFRlB[*|UI~M,(ɞu|i%_GRN=o?̑Mn^nԧߌb??fb{P;GqTRcIK )1gI4e9lms/|Ɠw:kϩ##9x_]tKO䔎)[N2[M:lCG_KkZY˻(bgw2U"N]l DmȿeN4ԯw^5sGoe*Dwn~O Q 'ƪ4Gu; 8~kSc.!Kn;abS[F_| 3 [r;_Cߙ^>H;tBiNo?'`] hɵk M8L4topeU(a??%?5^ ɐreO3daf`!nQ;gAqZ0J!t" u,!!4B Gwˉq{X esQ*R8)P-ܦkc:ѣ4On]ڴHGPTаG"5Fv? j|3Ǘ;Oex(t v"Gm[[7]#йnr:c&@7^apE)?oQ8I޵SǶCa㈎trչXNñ|ƲVQhqrpf4BT@9YX^|Ş‘VacGcxK{CroKrNN/&c+N|lY|%_hb=e#kVӾ/!/!M ?߶wuΕMPmcu Ϊ* <:TWie)/ԣ*~Gf|]87w Ll4g#シ #)B;yiEm2y{{k{,pP{4L}ګs@uP?Msu'l}g .-@%1/4C<,דI|p[*-F*̢8n3\J~8{ ߽/i sN DI 0 DLlU޵^] ]C=޼9sέsO]].m~a˅ R3ӿ)Ϟ[}S_fVBP]]|]ȵ"ОbeuzU z} ;۪FdGÈ:(01TQq౯Z' 8~2{NAjPcz3ijUNlZՕ촴Z,q=rw{&x8KWq.=; rvi~'COrX 1LǺO'.4s'g |aZ;S.ΎPh5 d~,Pd$m}bͦJMǬzBҥo* _ը'ɉ9ذnӢvByQè*GES1T5Pt*ZLQHƄ˗-H[0/5yFB|ɓ& C]57QQZXQZXY);&Uݢc}&+T obqaFdl2ZsWiy'XaHf⚎7~ܹ!v,cUn:xe;EM ^WZl߁]l]ض-i0ДPrC4|_ ctOJ 9{vmߡ=U- ޻1׽ڮ{n_/S ՠj$%ge asneD llaiARנ]"CvMyt` ZvSYlM6jiy#xK;kZ|V>t PSS3a p#z7|uеX37|NldgrPF)!0\ʘ e~\;@2׀6KO'G+n7kZL[$0\=@]i8z,:hY{h`HlIQ&Ct*sPVӧc,tX͡p\2; UYʍYEǹ[wvfdhTQR{^Vz3b A3UW7(HeuJ2tl2M4blaE A^+¼%w5=ʸ7s%&s6.b~Ȥ!6]48 iq} NCBkrz#}\mȱ >1ΎHvZdrr7+|ޞ!kI..(>>;9'0sz(w n1<} @wLl衰6qF6an] ܺuܻa^tEc=c05)EͦdjUU7!$kh_A4F׸qh`g“˥a0-,/}#G #nCVHK@!KGIĎ >6@e &_ >cxd" 4M0_0.2ct35,w5p!p `-mM!=>};/XuW^t3\b@?Cq>6f3+5֜娎u+ahTLZCF䁩Q)vf0qB&JWi:P8|#bd5 {⧻N?`Ɂ3/V~~O97nHc6z4u4ٓ g7脁 >;AO Bc7iʩzh2+(hEN|Uqs3/#!9]?iMg9ADZy;cD~mMg ɗMwŸ1.bf]{L>)P"P16euXV[MMQMzLiZ!bѣ/C`%0ޙ_#?;H*hHO>?JӍIxD@Ky*^sl зk i)B^$mN^](5b!}UDup^y>c-0}~mCvllPoǠ&?k3%=/6޹qhKA/@+W-q I3x_k)-?M*B=UmkRUD Gu2}25-g%4wL !Qq٢RRz,.&$] ꧒&ײ|}a,"u,^c@44 *LjQjZZxpX! lRu4$,|\H41@g1 #Z$j94c,P

     Ty ؗJyLQ!3Ԏҍ?l+€! }U&FAd)gy({ _E_j|O yHAc?|Zs{ufbbFfb"PXE58ijU*MOc]Fgu[3 Q6Í&Ry_nSTe2ktoUV _ Gv JWUq #loOxD'>E;tbh#{Zz!4+j~\wԘaN rvT1T|<71(EtъֱD[ "&NB`$Nyfw=Yp4)jFzBeR31t͡=7TFNH:92\E'31Z3]뉉H[7]8]D͸Y>ؑ?zQl su+:iLn~Iw;Hٚ9q&:A*ꚦ8 Ǟtz/#/&/q!*hUpAo{nvtk ed\_jL XO?iZr4POX֦G~?'`ٽt}Ì{,+ٷ$HYmS * *3;kиqν{w"qo{y{xL,3ZGE"&mj >nQ{#--$}$?<';oEv2 B h MGO8&! 9p5 +[Ü.F{I1`F1^a꟏0m0<([իT4 40feaW _w|X ?'c l{l#:X<#}AB6FVwF}||fz,gܤEyxӸgGgg-J˘+4b|ð r+&:cE(,OӲk7g@6 [;1Z+5u\-}}ۑ[i,4zJ/81 I8.-m„tUVU%%yrI ,ZxE^B{#d;ꗜ?k?86sp.8ҫϟפsN^AXcCx*2pZ MCU|rwz|ś'pOfLJVNRD6ډ&t!ZS\ g79rg~n Xz{]{O^{ys^^qN_Vw1;e>]y; @'"qK~o0m__f§AV$^pޠS-:vƕS* 3rS;.z6;U29c_>z Gb}uNίᇨsO}ʙGg]:;Vy3QOes^q!.΃ SEG|lwrdډ8LkJ"cBp>i,ZOQ Q¬ɑ)G§8\z2A֞".99,6ҍQUSeճصƇO(6 Ҷ4Pa-k=9 @SGe?*򠹎n)[^G<ɢ9*cg!ffJ^nUI|C5Pswш.c,M8/b&M6VQ"BA[Ř6"G0e `}!=ߕ;ϓӁPgrz^g֣~ *-\^9PK^yVוz.ڍo\^r;VQsT>mrXj~7.'OEvmy&œ'Ti-K}[#: A;0/n?P G/|R\ D <Fi/ykqv`񺠕P^%#6'6ls7ЧfqGܦr6%DPtЅE\jSr 7ɵ"/WZc!q,|.7SVxtRFf5Q5Cց@hvJt?_}i ֡w p-`sQ’ysr06۬Iy&u׊׮5YX0;9w1m0eqf\lzLg"0mj׵7nk] bo]s:tԸ<1sֺ{@' A%U|# $9^u2 yԄb::i(5ͷ}Su VEEEgY#|js t[2:d~c#> 9~E>Nk.\5o1/uc3H>5QUF. fdI#Q#bIeYP_+\O#ϥ'JRML_r0GÖ$MW,0gЯu5^}eq<,z%@Za D/%dnݛoMv?R|"𡭊/ ñc+jL'ŐeOKEYIah*P~~JʌZGinJ!&Z(SSd3QuH!52=P&)Hi+ʳɋxQeDdN"M EEom|K._nq> R/S[`B8օtٙeI+F lV2I%YʱULœXm9`+p8e \u>gzϬdgꫦ`P@V^r*u#%H~85KYjԸ5CMlsM  ٤B6 m$ä MS!F*T6yDݦk>@x(t֕ li1-(28-h n%Z S )0Ȩ sOA]nhBBsvaºI>Y@fVBL)NIH<>v+2lgjSţ<0>e$PVl\>9l+M )cS=;}w]toţa6psUzιvjI Z}9Ņ"#P\z_Or!l ?'7TP.$fnXTm>@%ޕFCI,t1tp zB׌ WC"sX =EW*#; bT kxSs J5Jc])ķ&;{dM>=%c1 MmZ#rT% GDkyBod9qCv'8/6+0;+465$f$:%!GƨlĦ˒Gg.G!!( 55!$1HԙB[Y^!"@؉L:)}]>Z5y?tB1 ""TQ!6k6E$*#b\},~l;lilmk\$A, lkCWtLzu u-dwת.F[H*]G} чE$>3iKA*͋#)(1n3gJp%iFgT&`N}lKOBbۙE~ցҮtYmEpNLh:Pt)} 5~OJ7-ݜuӥmXCyTTj&)xȷ=^RbMibd&x^2@n( a ]9|&1\ lY0˩`0>ha @'ؗ̃Ńn5 #YØc:x]7-=[O9p1MdʹEa6#GF1+ wp{@ȣĜdEqg86!yzۺۺ˾%VS%Rvi̊i+JE&pppQCFM)m^RkhnwHz׎W#7E?oj_C>BGaT<%FZD0hB#ވ9͹/.BrFVO(GNKN;D8/v䐉5:wn<RuW id y@GN:J.CYxG #a:˯uNeP|@VPC=]$exHڐCMT0҈nWg5c;de}wS,yOea:&sqxW?07B cwv`mB9hC~ޥߒ>^vm%Ot((h}žzWuݼ*:cNO eeۣ ]ڃG#gnjv#>2{uuP7dyHrQ1R4Y1+WT1`ZƝăd9-sX<{怨 )ŽG #>3{_KGB-ϱ8VXfݎ<;x"sTj$ѺHK<1TdLGv<%o_{!:Zcd}?6ժ$l6B7b9ȉc0PFI7 mOվzFYBRgOg̀j{zDr%'oR<_?'u{hЊo<*8M܊i41gLI+neQӼX'J`v÷6Ҽ2=+Jzm4^?od˩i%p$ ;7N_?>K&.'_,x7MZMO 92nIϦ$ջAAPÖOlQ8f\ݙ96=U"p\b 66u[O&fӱb6O  `iݼKz>qIIGrqcksx&NQuj)(;l߿:i?~nZNoR0(G{,ŗX gj>>OnҒ^64{zo`}h"mpbQP=%A!3'y ׭]j rZvXg#~aVCkƆ=y Y1Zד8ڟ&G0ukC&Ln3͛y9C4& ۢ=1ޅ=HG PPj6Yct{ȿkTf BC׬n}f~ЄMmYd x̸3=mti'љ5__@<6Emx3qY5-Yc~|<~%ϥz=lNW Ctl|w5УiKF6 )[GojVO:ҋQoUjv~ ףi\tgxiin162*<)fm^3@[3$|[}'#ۺRzZ|q+jqmnbl;յhI|/y]/oc=evd;$sjF,٫E@ia<I<ܼ0lf^n4| +y-CK4a"~o̼oK˱c7F6G:g%gSR!RC^h(JUeӾMD'ѿQӇR;nm{_:qf 1-"+L.36%}:\M1y >uX*QAϘٸ/H-&z&xq1}v,54z7zu/l>:u{WZv\fc!(7b@08%8L(5j i5p%$砕sxΩJ+e`*;Ll,Zgo%+FNhSqfToF"Eca=Af`JeMx+}q9;҄dk|wiB[)O_+Ƥrd(4L ~p}4T\i ]1{LJ;.5} z x?iR,QJMY 01JiƗE7[5914uڇnFȘZּc^<+\βV|T''@aaHa:S̐ ғW/Z߃,7y'Q^P`T <;@Ru㕪A( t}jhIWk*l<0gq] U y/2u|>-`/0LŢ߱]9ꫮݸ|6o\mݶF{Lż'q [S|V>!| PM*l% 90.\XT]s9K G@r<ᕬ)^X>a[,)oE<@7.3z=F7 .b]@"qn|.o٬׻u_O9Ju}=6哏[ӓ"_(x:7=d;[I|#~ zͮZ{uoj}{_-}| $kǢoe9-=\6}ih~nPu 72^^NpkXY.u[lO3毢M~G-z3YFo֨^wGMU;A;'+Pߖ3K uM)WuIǢyB|Wt4}vDkHj1S/I^.)N[LɲqJWpԘ^9kytER4ʁsۯXߞW@ŷ?=kآoe)-SїfvTIh.0ҷUavoI]QSB 7wp7*4*\Qp)̷x? jzJZÿmʊbgZҷL/kԝ@UY@;p[oM|Z'qƕ#f݆I|wCM߉K=f}w>M ~.Np^Ǜ5?( g蘭|g{˗НPo~owB[>LwU*Ӗ#]^=pu[ߝ4}F8vc2|w k߂GOVEn=C|߂B8*,n(&P=p:bC݉+4WRwgf㱟=?5{o.dwպ W=__ܔ/>sgLUhzQ/8?o}r<>;) ef{kO]sϗqB[_wt|;P>D=pI=3tI~묐nw4?7eURZދEOz{tOwE6e#EtM[ϩo76߷螆wؚmZr,H_*D_ecSp?wkW毢^pwámƢi *Co[}| k}V窬XYxIwN(ԷN4 ,>ww0GɊс<7ַW.?Yރ'#OG\F0O,[䵍ݗߑ u]wlJ=G}._p}WJyR}.AxOuî+y +7Kx`QE+{~ʗ3aɄ y`pQY ,w]cf^oc#+={t[x#4%HvzMV`S$d:##kد˗H1P<8Ȝa4?UOUq|iiZgk濥TCϳs:.hrpFEt}u(|YB\ UHua5ta&Wxs"3UmI& Xضon+01h4GqZ8TW9HZT/FGJu XbC(*atKaVuEeUw1ʂpP)յѡZ*kzRufS|&(Zg)'j(@5lR.PLǠ^@/ٙOl*sm镥ƹQ~#scלLZ9nOɱ 'ZScNhѺ,%HnaM|˜ZgTm2 7Q5*uchMw,|yX>A|>uW/ 2:QHgJM,mNLӇf'6"խ>˺BZ8PX Յ|LNlL#ɨY3Q##hvv {_+}&?kI|xO#3:LrL׹Tk@:EFDN's2nWu9jZ+Z;m9e(p`\6ƒj 'lم5Ik*=joƒh6N:IK L's|,< oɼ3מ$yÄ95Hr:[H6-S|6^hؑ! a6E|?$0,& \G`5uOoב qoi:hrKt4):ֻ^AUr[U}agkVN9:IɟU}owxO;z-g:>i7vbKfK} d-vc%T*N(TH-4x]y d嗵}KlVvXUL|.x!J`{$+ +f1Ճ)*ڱqyO|H˜W5> 'fhl{U5IM kSJ*BS%K{눺e8C]_sgAfj|L32M_Rh&8f.P9ct8 :xKӵH?ӻnczҽh/vіU'} ;ɥjZu&RƼJGȨZudR'ɮD v)Mѷ9 7>&^sIxuc*KE]ѫGC؃ݵE=;Rr%O%!2UH_zT|S b- )\Dǂ2[9O|պM}W?Bn#d]tssO6R>6\XNH:jJITۈ2QpbywwV0?.>ï764Qt H5dsdQBvlDgW@lt+Dk!8J~٦h3KyM(PF#\^ o8_;óa%*0iHq!D|W33%Tk[60Y C..)ONv!+<,SQL)@5s.ٲAqa~=^1Ii~ƒZ35ğ7O]ȍa>):S4)@S'5 ?9OzɄ_~V/ }Y _8WO$^$N-Dt*i%iBPWw7t=zvGs^@ gkjj3iïjW byznk}·T>y;́; RY w-7CMmZO}@6 Y&pѿDߊgE|K:.gI:bt0Q4@&w'_?bǶ8CVaV'(ќCiyza@,G%bk(? /k]A&_ yCwq8p.].={xQu qdcUz1_-ץP-G2nBo~-,\AOueʝSe>HC\z<<0Y=7 wsޮү-ׯ[үf1^+u }ׁ61#ܖ "uЕ@|wo᥍mB?ok#;*s- ,g{K7P7Լر}-7nakÖ^\NzB'YPm.Jd+J^q ^Ƴ7[ ?GA AΛ\ *D͔MJ2WY ayDFϜIi]ox 37oXXSd*z{5knݍ;݁MOP3|c쳋&7=HRםyExApsT_xj1cK2M];-hn|mѻ\.F-dQNoc࢔:ݨ]@UzBU/qhXaiH`qP.jI}ë=xr6Q&S@cFAP+T\. MG6m8i^hw=Kw;ob7 .S9`| blJ~(_GjC=Ezl4\sUS;I;蘱c Mi ^WЊB~ JM"`/p=s@s3T-3KX&&tNI6x {0_F)vNbyv%VNZ0rz+3guw?w‡G. {'0g-πn.w[S|>\|]EK}+H+JӬgǖOT!O`S-):ajWh,ZakY:E/ꋦ`'[/_ye(|5=Z9u).JbAz^P,UYg,mw{J}פ;:i՞t^ďYwxfOvFwFWk@G]ʦޞ:q^(&KşRX5* L&%] B_Ou 4^ 5WAw+&8.1JoJr=E=')f֒|;Kpf iE'w&:{#:wOg\-ҟ~)Ê-9Uoƨ!TaO=gVs…,]>*%}(r2M8ܝ^tZ5MWZrއCs59?$?,$ ҁ9e2{|k֠tf%ڊ~V]*m~dfq'p=s.yD~|SJ7lٶLzrk?faG/b-u|ཐ8;b>_EⅧGu?=mQ͇̈́N܏[0ĐaXDeYƖ_}+?P.&B]eZ*-yC7<cE?l?[%d.,e/$J" Q/R򛳇r7!1g*j)7G7tL}a܇πz N8AqDgt͂ZbLX?)>(ZXϱ-]EC]t zsF⮨q ˕oŽhNEu #p)HGGT>ᡸJKŰ?!˲X^gZ)܀7gbx}|ja_ aT}/1c;x-^یәj2QK¥6F7ZYDLp|M&ρe nĜ̉ ϛإ j qJB=,=7]o1FLC2ӖTɦ #u(S袘ws\= bkxS[CG}65:(,jUGt2|,X:9#t Ml'&no9qGs~Yl2{;ܧLD0T,89ܪF}jY'͵t;=:ZbftKp?Ń*Y;πGN[IccjGA&8(ozbf9Ҫb7Ka;ha; 1ӸB",ȧh $Hg& `0­蹊\,ZnàͰl!T\?a0I+|q<xaDŕ|?zt|r}LH59&eX-iæMõ z6U*= A:7/|_<֍?{p=??1ïos-{ 6^Y{)=_ xL|cP9bJ rUQnFT$ZKIZH1u BtrIGҸ΁7Uwuǹ t%>I R{*.az(iEhgu9[ H|w#<Ɣ:c~"znT/E8FhBqrM\0ΣV<8'?x81te,xO`8b0}Tt8GΌ CԚv%IT vg# kD )ГTgDN%?M96$eHx0h%PE<o`)(͢ ffٗtMOߍke,챂*.3ёt=ND'Tn5PsAwU@|/|ps}w).=n͞pxcK/.B* nYєNmTE[u9r w\aQ͗eX2 \5vUvsϊ'EýI]d\5% LSef\X "Dou^g h48Xs^6}*ZL9N'˻ %peM P+9e> 3YYwZ#ƣN'<{[E) HUKF2x! GGPM`nX']~'{:[;tO9JZr!W'o)}xQa^GG~wn/~ lYד-m$h޽F1=+,د3'O_eSlri#"6 ~9W*)D-]pvqگ|.Ov)=r8id!d2zn\Uې ;ಙ>;^uƆ-ªsy;̩6-+B!QdaG7i;mD68ߝl.}ns_d.; Cb+̠֬؀XW^YWR:z#%RV}FgUid<2uحFqCa߹[V U}z7S~x*ys(. 3Y'l[6b6-֒jlkvͶrJ"ڋZ1.S6(Ʊvd=*8N2m1OkZ&aa./r,:\,s/IWmE&lv,7>;#fh{Iiuȼ9ӯ[M@XqWeC'f }xmVz|+?Rm ߐc^f_Q:C~8Uxc`d` V+.|e`#@bHr9@J~ xc`d`H{y@" %Qx4c%Ummlm۶m۶fGFRR33 eG+J\Y3 1*\9>D25\cS-+]cLt9ҭ#i[5&0 Q͢s?+`gVuȷ!W-]Zʗ(@zH4G?Nz"0ܢ*d1<IYިIěF/8icgEWM|{F5U7ſw&&;OQؖQlzd+*ٕtc<=e'rg&nπ]JEZzE/Rݨ/jTcVD-d$FwZ\LsirU KYhXvUͧ> M{)s,0dkUgFYY mlY(O fZ #ԱcT:-mv[q*.k6>No.U͎Ԏ%/^%?FW9ԓ h9ZRWTrO"rCZ[GZ4jAͮ4G+׸$CI\DZ\K;pTꝯ.D8;egClڊw/?Q.{m1/\3U/@5ʩV6Zxv|[VG ;"fk&i玈6VZZD۩}@h(Cb7`hq:6M2- ($f%Ykc(LVwkzX߭_L pQn73Θ0vAYP*ea/ˏe^f 37\vnrO>X=T^3QT~vX49 a= }'_btnmMތt%5tsOQ)?nnλYΦa{.wӤ\eVtL (## 1n !1Lb9NS7x:c;o|Z_ޙ Btz_ ˪Xܲ[m<oX*~"?ުa@˾?衩EO'zjCSvo|~E/M^SEX_CZ^Cz}3)&bw:,g7i^/m5losz Q6p ^?&=7_<:y}L'O:P#웸 0s3qvɁT Bȅxl0c(ȄI)ȣ_R6%K*)Ƈ8LiHc"瘏rN*ޱy q[KXU gqEռU7sS &7x sY0|C+\ :pQ'·4.>ga*ǘ81 eH|NP0=g<*>N])w9l\ӣw\:.Q7Gi WJ0'Laӧ~uZS=ϪS9`wp,^;xD~m۶mۚm۶m۶m۶Ԓ^ԭ]#[U-!RHCA(6aa_EjwqF#7QHTcRK= TI\MEqqqq'ZHm0p'$n$'II'Hr\X)3)7djfum#IzgeQarkYIVM6=Cݹ˹y|^C\gRL<>ECEOqqgnqEuu?9>4<0-LMX310. RO^ Gp_%*a:E#M6y:Kס#Io6M+ۀ&صM׆~:M~'Xh$ LapU.s\qx_)PitR.%Iy|RtQL\zu\ bL>HFJYfqXkv-aw8gmNpM~Jb)7֚2.I$Iҥ%]%i}-$I%ZZk1036336HZ7Ø v̎*fC|r/y#s9\f3?5oY(\\-x)Evo⣼/,-:@Rԗڥ%Ғ}cae2b]yiC4-ZůVtO{֊k5' 1tukav1'bfp`ѻAٰlXneef(ʶӜϜ6 pXnw q#^oG667m 6/(~;7ݪݢmٷ/lqۂL8& ;;;;蓨I4(\].k7"yb#sI+W2(P%F$o@P X p! `G@(MLP)Ta! Ą  up`"L9 v18 5!}!!LBHy~~~6K;C )EʗdhY$<9ZC>#7ES1(tD٠+J2*U5UtIR竫85QTofHcĴEZv@Z9]C7Sº?*=N?g C@0p /rch}WSD4!en12~cY,d+G%VUfMتlxۘisrv}.+}AvڃƁY;}yMwWk"2w{MuOGa/:ˎێ' _G9NP'I_N N{O@]🵝-e߂y9<}p1~a,d^B_Cӡj~ azX\W\'H<Y(#c?cX$^┸#qnnoDu'1%ww]wd^)9$TSj$HStC/MKӯ}:Sg҇|*yjy{>5L{F?Gl'`P]n xL! a}n΍cDM2E6QWUd3}zI"3kO|1 Жb,ԙ%V吜*DŽ<2/9G0XD>'<̶Ѵ,{FvK]K麋p9&C9rJ/ 3V.W Z;| eGa ؟2F}ٜs< aWTSLNrdfsp֘U%0J-~U[){. fWmSZ0tԟ [֙mNaI6<VT܏%K2`'2UNpوgUʞYvY,lٸRB12usi\[q1trzPƅsYvPUT7|po`PAC1*f{`QbO߲gXUЬRH|OS47[_K-=r4}Ŵ#OmIdy ELz"aUE?:v~2Gc9%|˭O '1'j'.Ruy[jHw>qA3kss#* c.cB!bn;3Dh \!-VV9" ?#?&xlCby?ԶmǨmjwծkԶm dFhfN$W IRJ.C,rʓ@"J*SB*jԪSA.ꦻzꥷ>꧿d!fFe1g &d)ffe9gZd%ZfVZe5Zg 6䲝vyov;쀳nb$&9co${sniբ%Gso\=O##-v'2\Ȋȉ{/;Ͻ((((ʨꨉڨhF;`-m۶.MD%$ed#H<9,m۶=k?~WPTRVQUS70426153wptrvqus2Lb@.׶m۶m_ Qd)RI!Sl9rWPb%J)WRj5jթנQf-ZiסSn=z#? EqD(hQO DF4GuDAC5fD4iʴ5Ƿ؉x?#%eּ,[jͺ l۱kϾ;q̹ \ x<(zm۶]dn1CCs(18M0$M140,1<-"-2˭*:m&m6.>p+&q#0ɔL < 17|r3 +7/G302P ,lgVN.{2 ;|}5&fV6vN.n^>~B`dbfaec7h? )8mbX|%Ya R)V*3+RmU\ ]h)s5Dh|*}Y8YO24'67YFPɖvJ×4(4GOBoLeFь09>QX=o >VȊ(ܾqT2Wg}` c8NS Lm,ӹJ͒Z@\W5pZ^UF' B+uVlmj=CmID>X9o\l})kc4\%x,] aN4Jvj3ER?GI4AȟpYpE9nB3FF2}S1jLd_0oU  i6#b$Z^aYe'/Mu^" u%$<\GAu7Jv/3(ʢt6Qd Eci=94E%c DdS(ydPRX?ޤw|i *yz`qfwE3oa9b2A\ O}'O\,OjJ֠Qh"˴XƲ[9b}c<9bVEcV,؎#-bW\y *,,llU[`e&TEݯ!x݈NC*Vb- k&Gzycdc}J&!YrjűX0o'[o+@vݤʹ3>Bm0nMۤ tTLP?ĀygQI3wJnz_N/Ӏ64Үn x.7w<:6_4W%nҥLfw񺕘7%Uc Wkǚr;"SSK5҇Tth#U.pp[\boR8c|/dP"j3hb=˪P:"MY>$%E3QwL/IDo>E.;'q@@Mo_qH#&t.K$o.K\_NAI=qexp$?YԮK^{ZK/2J~rj9岼2B|pG6ѵ;F%(@7-V':(,ihߵk<x+021MݝeaMI 11wL|cc湎̇/ +?6vN.ṅ/ +?6vN.ṅ/ +?6vN.ṅ/ +?6vN.nȇ/ +?!w]i:3 u):y8߼ƶy_m\|YlףB^IIWmxp"(b##c_Nd . 6*(xo DzFdBBWh& I]6q3ima"@"rk&vl.U;#68tDyj 7v0oһX+mkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/lato-bold.woff20000664000175000017500000055112014664334534024476 0ustar carstencarstenwOF2P +~f`$f  D>6$< @ o 9[_zwjz2%$d':R9!*z]Ep{ *j6n=2dvdA:nei_ ;$u)m8Nβkx[/*D@M'zDEHd YryE|]Fm,]s6p(5 A*cUA kj}cuyo6Eł45r iu̒dg!W+$#+:"Dg~uM)or: jxC7Y{)M hM3qTd 2HHX`*)́ AwZ[rv&Br֔fIY<¶-_uvEZ=N$A1Uځ2dvDZNybѩp$ !$̒P0'`(cƠ%@Ba.l9ؽ$`1IU vYbjP jV\kOW( tIL{FZ8Upld (mxhg(g-6L}= wB]gaQK#H":L"WCbqҷ$a@FIeQ-Y&85R*Y4] lM5)Љ$HQ0uY3BGQJcPqlhc*c*!]a'%'-ɡnG;މS+@PZ:j*(5ᨃ'ta>^iJ?⍪lNe:L9r)홣HcvֳEB!V7rrnRZz9= r] s 2E$| \ѱ4-T>|iCx]ҞT!^%N#qTM ktEpߋ78,j(0A.!'SoZa2mwAB$d9~Y._/یU$HHt(^Zȯ,p-"g3eX-ƈGdh]kk\oeC&qح K*cnd [1rݷ0;vyjaoeGA6 GՃZ`;u&OD5J]mF,BLֵR._=-6j^r?sQYrdߡ^)/VZ!f'#98K(sj W9ރyɚJ4ya1+ :d e.tߜҾR+*68:_u#|*X0r•fEfdwVZCmmNVy/%:^w7q6M /+sWvϸE#PV:1^׭o{;@m^Fao}7fzVrc)1|<)xEuqr?﹍خ;o Yt:ˁ~wwayFKy oo Eun{&=`HបfŹ|+*b1,}}^Eq-y7yH(ESnQ Cyy݃"P81l.>V-Xvaa]6k:&VDd>'y7L H2b4P+ mlM=)` ne<#ktyGt;?tLv #W-.EhC,9h>b1nB?aYzB9);?hL(TĂr ?C%$lڏ[.\p,ҙ  vo 46 */@ `#"Uε>lh*J[(تۣ]p]]_Ȉ+QhݓrԄ#$U+}: k &jy[Q_G+jHuM;~(:?? tu8F4 &i^>/7L37)Lrx׆D(2tA+]k*i*Dԍm ?^l Ed6q-[EA6ӁZ̡aٴO}v.I.XJMOE(5$;)TbA)倰p@@+F.H@D00Db$FkEc."zpZP"_Nj2z'jg|j!^ճ^Y!p[VjqXD5Pkd,W̴6mZVV}}{X߂pp),58n41#vqalBBk{AsV:)L&s`;rW+ IGi,>W:WL)Jf0fT?/B{^g!!)pdmJI 'l Yfٲض$6[BW҅s_vssY*5Qq}J*13p"v7ih'0OĞ1g&ﺽTO?{O˕b$.%Oz, οB]H?%Wy[]5AROeEF`OGŬ40C0n^E3+FHD QPQ0 ^}}+mrֲΑfM=^0XXRWt@!JUa NJRnpEQE4ClXJ<8DNN8iJ$"*7TnQ`&-ebI $d(NW10K#z}P&Ԅ$P5p36k5 M|nT5/ 3qUYR,_ :ZL?^.s+_DSvYC D7d.. , 1bzWŭ&FQ#["-T(F`fRjrJ!;в0?PEQ?EFFh4(?j.%9{-X\.E?]@Vk)p[YYᗅP L?/H4`?',D*%AMvS?mo+_~a s)⬝QƂ0pXk\/Dd5^hxRE ]&q0Z Zc`1.vREh4F((:((( .FA(KpQnJ}g?-"w_\b\JT;jYoNNe_`T!@(*NAƁ~n&kچx\{X(h%*4x'͕ R 6+Q` M'tk6t"] m!H%˶e2N}🨵Ԟ?5 oEꅤY-Wup> $HyO,P% ^:Ϛm0޲ZI;CD^ZmIrK.!U_3HŒtOE[h\̰X$0IDӰo޼ƏJD3HT~?'G9d, ,"x:*g숗;$PH3!4aX‰( t&:&0>_-~KH씈L&leKe %v&>˻H _'=h\Fse'uIA+l.?1? |`}h0i2uCRDXS'F^P{ >J <Fwdx fRnhSqikp%i?<ӳjJ$׋)zliݽ F7 =x~?Z{~x#/XFŁG%>wOeDz^$TJZjbU:uYw$p%ne]$&C7NJt=u}6H  Z2 F!Z3~n8eXb$`x1v h63 W "}#^ADžeH%fþ׼D;`ik~簆 2Շbim1~/_.!GDk523EQMDZ8f>? 22]q `wShEQEQ~(nae?X*ɠ;0ˑn_lrHs2GX(W)O(r&HM,g r)P.TDeEÁQ=PZSUsF(ƅl"ίWzJ!(8'O$|4+]5%0%e@"؊oO: -t#$W8T7:/ƂЀ}$;Ugsccw8{W; 6 -@ZUJ?Nuˌ*_iA?]T&hWxw? W >K @U{/t?ؠTzf'U]=ػw!fqa{恌KQi˘,k$L)жzZig26 twګ +Ԙ0Ev*=ww*THTh RʶWZaK`tR#ԟ`2K 44ٜH‘Qik,Z Pnuƚ tE& @ CPII$EiHiLP$1:5YJc֛hM.. o .5dS{򝠧.*3A. z,65mчg]HDDAdXC(ԝU[IM(|ݑr!~;"K;u'xܘfB!e\C[7b. Hb+UAizGCk~Z0-"" E ۪N^D$quK$xRam(̅ k3d0!F3νXL! 2HY,-,R-˴`v5 8]՞_l3~R !'E>V-HU<](\SPX[޽g3̜Y5~&]t=NrfN{}jjoypu ]o{pQ(ۻS0y n}`|X]1Ypq)V3-Zv 츶qt7CQ~;DE"6L.3Qe&/rWN@66AϪ&+ˁl?!}8̵]?Ӽ`? „2.:C@v@9F!zLrDIN)^^ rlҹsyz04S]oIsխVX']L&*&HHJI2W[pӦ[w[СG=Oyi~6j}mq[ؾj翝cs9/\Zb N}x92M?>&{H}ISr1~Z/І?~^+ ?5NVo0"(V_DIVzS WKw}BD%I"eOXG@BkQ,S;ܕZܳ2*@ ltn0QLr"qy-i fRIpE-b&Zpܑ3_]+A]=o,X*w.71hQ\& %tlB8&b$(E*4H_< b~ώ~|x&w1%u|ڔ4@ yV\A*kH1q}JJf 4ΐ3 St&ҵEQVI]YCE1/LJS5zM|TWC'EwWlyEq ( .wVCP.ZN̤pAiܺ)?ԩ9LGe$R, ([*&@qwbNY`(yhHRRm/BfXf#},ǩ(u=?8I(i!„2.R6$ ]ЄiKvserUJZS-X^ݩb8ARty~}h}o\<ջaDJ|%a<VVnUGۏ޷!Ys1Nut&|<˦i/ڡժ=@Yvh\;/BE:.Io 컫͟.H"&6&$2B0boJq`pa}DU Ӳ;`R$E3, d4-V]VTM QZ(Ipi^$HPTAjA1\CQь`4/-Vk] C0xk.Kb#S㜥TNV΀LRmg@rj@FP 'HaQrC !PD1X@$)Td9q=@(KrEJJqus> I (Mffw8]j7=EPr!6X,y|**(u8($L8˜p#(r`,-Zac7X߯Oke2{q+:D&2Vy{'O B8Uu5OE'G5]->$ߛ8CpF< )dڑK`P?4rI$YEFtҳfW HCd23Xe_2վr%"*ԴHr)L\ԓ^{%dȺPF*nx|6 qf֕nBO;pُ7@U޸DQF\N,+Tl i'Zu) 转^ZwV޲>XG { gl~"k#!xQ} yq?EMZܔ{Zt{K]T~_#1g#jAgYjzĘC WfAtfz9!?ĊY1KexG+ Jd%zO66P^=z9P 8^VMU\]7y} gG.=CQz$ҧ}x͗:5N\Uʉ((˜`ܽy', b8ARtxyjg}慵^Z`~ۋZ=v'6ԏa6 ֜J,u0"ss*v9Lo~}Էfk]m/z߆UՖtFB-HaQ[kgx餡$$NVwޣm@"+v$H9e`IL[)'SNoMqNo0̀B0b8AR4rgɹ%R!A1fXDIVTM7Lv\oxJFAR?cbe6lvYQ5E ZT94.n[{A^ܕ󿟒P8#$P9鼘6mxedKp~r J*/:--J qdR7ދrD||HwK\=}C#cS3^oa14F?%oI J3,6\q 3Ēz$W tJI+p =< `phxA&j;.YQ5M豀 /„2 aĒR **ڻNf+j=ȥf;JH!}ﷄogA34$@{"RQV"-^ /BB5[xFQ]#ޝa{إ gF9)bɃbw&|ϚZdy/3!B/1ou; [[e[E%JGv@g'mِg"7ݬӕO4?t-S3݃Ko<{zrF̲i N14fq @VFiDاAv~;n솯#>qTH1,.P'pw7݃ru-lpE O^ؠi^fEuaCfR4eFӈ6&ŝ9! dBVijƈ'`Z$<\ӧ=)FTt5̋RY]F+\Mttk]d1d!Q~sGG[bO-5}t|v:> Us'}|}X1ԑst#g:ə-iϸߘSק殇-|j 'ydf^|?.ճݞћqZ'Q1j95yz;Uj(O%voh-Y`/M0;*gndxE3&Pv1Nvi﫾LOBwqA3Ò" ˸ s؁[com!(b"f,3- 6b+ld_42S7K!LבJ=iU+䇊O褖\ o ҩ[DVlYʢ%;|rs>>Uq0YZ~4']ˠA]:`NJ2y LUj4Z0A1 )a[@VTŖ*Q\EUQmZ&8tflw)LeזlN۳6ƘYqٹS~{_^桱c eTXk:V6`M+O/ǰqor ?Ӹ>9"G%~퍷.} /+``v:EPP1 +.}6E^{FE{VNћA#HfV6vQqu;7[ @R"m ђ̻a2YXyXJCO?YW\+3mG9.wtLPQVuB e\H5M&$:I`Y7eefdDAMaEՔSAH_jqCeԘM>ᤫYΌhb9^0[6cSʖU1Ihe9^ ̂#+is21a;x gbc|Gu;4brץqd&%Q2?csS$eOiO-xԻ͘'Z:MCN16 o`3D-7-FX=Ey N4/ޏ(JQ4Il!;^| ֥ZKLY:訓κ誛z0g-000+M'MNSN oS[w))iRR5oOX^m]AG&fBs_g6@k #(䛨qvm$qcGTV[ M '<Nx_397=̲@vر Č* Ac[0%](Ӎ̕+fGX"7`k޲ڢv[n3Eð/K°D'w;d~TVhh[_zB0b8AR4r .=pdEtwRL<@Rpt4cwnm!%u[3XeYL7+ϭH(ro3!PxjA0c24CP(ZJK1ڥib 9H}@OTAVrHwJ*K},pe\Hu>ĔK= "L(B*mlpnv@ޮ p\h7౾GKmשvk^6ђ| aBndjYL=\+j 8/߯&{ABOV/PG>h,OZ̥@1QKR?J4#SfژO\ u%^pt*Wʯ!5~Y/uz:<} ]Mm[| B%UmqEl')A,8_`:0IWEnlCe]Y` 7XϬ1E^z#aBA*b%>QSRʢ9`w6 ,FxFpݽqfxta_J%Ӄ5Hz0A'&D8=ME G!¸AXa26f+IYfXp#c""SUJk/`  #($E3, $+v^G6{X\#BI`Lq07>)Zv+CU]Ym HBVTM7jz>&Q.xAdE@#tôlloq.Yu9uLT[2K2\RD%GvlcObS1j'3dhnokgf6^ kxQj"^D\)j,݇|&=W~PlQr~tK<Ȋb~.׹%^u76pQ$"^R(Uj$ !A1 )a9>QQr硴 @FP 'HfXDIVT-1lv%3g! $+ „fDIVT @ eaZA}Y]=)!.J8װ\'V8=&z0COםX2ֽ<[L{غ=g)aVgwu_YCgJ@e2[V]ME!AC^y7|tX.^w"^%Yo0rr{f%YQ50-&^I<ֆ)ՄTT uTj] @qF<)AfՎyv>z^7^7wq"Q\Dsi<!Hv(PYh4`LeZkO&䓀B$ ]1(){NCψL=X&XX0D J#Y^"Hf8^h2[6!A1 )a9>(ɊtǟXVQʙĈ:kݵjᮞKYG JjaZ"LhZ;^%YQ5&iَk%]Z1["'pE@qLХ= |)k^=RLeFp>'h{;Y-t%DnI$[ZW;@<ٰTZ Oy׽P0E{8xA|G!HJTi`ph 􊒬Ngivi^%YQ50-&o"(Ɋ0L7LvU 2bTwCP qn᪁9. ^LNR%fC(-8NEs|j*,Ch\FE_:Zہ^#`=bdȦITl nf̶bVATVIlD ER,/^[# )R@j +`7J:]zo_NͰ/43ZxDnO#=0̬Uwe~JVE7L/ɲ WQtݦ=!bF!„2.:bʥ6zSOQ%(U^kIuf0O6\Z9 V%9?WKit9TZ˕RIHؚ).ZN]Ǐ 3>ʌKۆv_y>>dNͰ/gjj1DTT_ѥ*U+Bj!nZA;^%YQ5&iَ{q7-E!x*)s2y/V@Nd咚L F1ƷIte"c$I1'fTIPr74(U&p|_pX &`cş FV(/2TۧF+ͳ|blʹz*yؽ{=Faaޯ!A1 )a9^%YQk420חX{@ȗqyFD\5ɤ-3jg+遰ՃR4kP$IJٝ1T$I$I$IA/j/+e 5fݤխL:xFoT AðomM;C̪+}H2&{7r񘜅VX.8/-8 ) d/ǟ"xN(soiO`4(j;H H+!9ΠzIY51 DG:?na]p׏A$uHif y&4j4=,/7fW/ „20-qa+^󏇸^ L` xnhʈI[DdHs*t|+ E AWI))0U:i> uC*bͻt'09ekכ"`3;5{#EO/΅ +YS>Ԃz810A6:J% xWj3ڳJM ^яfAƀWy'}jH5yo̡Bz:Pڶ-&pK5.4ߔB;GbgDS5`k\x\D^@fV׆.3wiONn:&rbYV1*4%(hi]P- *@zJE ^"K&6A&cl\*:Mxh:x}0l:aOKxYOUoNiS>Z fXJ, cv5#AEo4; xH&ĮxחB~yy <h|ZG3*:kκ~a_aݶu8e[4w;OU̷eY P9eͣovOWKU_+n絀r( 4AuS4銣j2p-UAC nDh;@n3ȸ&-վq9^;1\5 do ]5QO(pڷXeDH4fL*bT9Sa="ErE-A+AWczpēgcggfυ}q~`fVOmnwQg8 ?͊¬5`{^6jpەёiH.4ˤm  ÁY!m| &{k'<>nxCbȲD(DhBQ|y~^˫&U$Hi,dB1-#tyl& do 0 oĸeנ0FL+Ê9=M. "inn;NMNpԾXǡ"@J^A -Lؾʨ SEeTOLĶ7Jn4yu5yz;Fny@߫5t1Ģ]%8JVI\2(34Ō>F޹YjRC4*DiW\ccПkfƑmd{Fu(˒%4Ω*mKy[maFґ@+Ho {x%͢hӡNOHu~7^iN+])$*.* "V;L Q {|C߽ yOIyFiԋ1G0ai8hDɌCeU V؎CNShY96i@4QED3Uj9E+J7BXb ~oUAGwz:cD,f2MS {գ)9ĥ yFϢ>ka0)ywH*dF/ӃY7n^#˰#f&ĴrSpJO բ Slٻm.Ϗ;څLp4araSN !| .i|xxzы4 LZ' KiC›“{S'|+s4hQS  2N~WG 3gs1W%JL ʈYpgNcȶV]%K6X8/ uN\ R-R"t5IT1^!q`(R(<W%Iܿy't--'iQ vi8ڈm?~T 3"Aa6s[y['@zI-B& VóZՓQnwHq~H̶:12WnZ]T}% 0@7b7냔M<|VHնq(y<69v%j߅p }<ˏ3!|NQ>DP\I%6߁w FP KR·n/yk=Oz^`cJY) QU Ӳkϧݞ~;B1g9^dEM "a9^%YY޻5tôڲ/LZffX vZܗeoz?(mYrQT(UPϢ$a "%Y @\2nx4>B$,\y40-jkg*7:Gn%N_nƭ;m=Aa~p ^%Fa&Ej;B4|1'Ǘ'=4t`Pڮp/J4}W82#(_rr,{2>_nD:rzgu= x˸zŽ= v<|xmB-6kZjn!!+e"V> sLWW{{[[{|N.?9Kdf` a޽B$I2{ BOO;=\f6UPY(t뻟jplwc̄#đAFTB xDVSE FiJ?OzZyΟS>Dnk`>ȸ'"izN;1!S_q$5jL*}f <#&> 4ӟ[nM[ew VO4uq{ qAb#GmvEDq(bdMu9QH||pvlVet]caկ<]lhyKïh`ݖwm<=+"cjkJ̒y'16rOꕱ_R1|:GxDM\$'pЬ{T/s9 >+Ot4ɑg)X}󓃿;d'dđ-ySxLLZg1-Jjc֮#XXm:ؕri "D*+*F B0b8AR4342p&0),E LE2?8.tmCtOZ=~vhJfg_1\3b?]JG `9j~KokzxbTȬDg a}QT$&ɏW#EFRBAE 03Y!ZV1mQ1M;.@{Q劊hs?NƋʚӲX'CEl#Bnvq2(22b?{ "dI$y:&#MXq2m+V_U}jǩX/)'5lm?B ($E3,?3>TZ^f _԰wZ }?Ǖv+b3ArAO$)TzZ20]~U 4*7O{| VBG$ە\n7|ᾏ0~~2<ϛM)B0b8/4r$+e;y-iDC9΢lF9Ҹ~c42˭ҪhXcug"3jK}oP㬇(=|#"`pd8^2-V钻U4?` *,N"eJڰ3X"P* rF #(kĦ(d47M, ffwԵ\@a"HдUGxiq 3 p ^>_={MoX7042615$@apҋ i= H"S4:iiemckgjáOX.;syy>6z2X }1zh Fv|R)yS,T{f'jxܐb\H;vw;BX"JZ!A1 )a==3Ͻ++NY]BvJx BԌhh2 mOZ!$e Y ˲W/anVhDFfꖻPLtc 祸xٌ>;T?R) <|HKd1,C={z1 e| $ )c|=ʾ+<5gCesxf52ަWS"#A*ì<4'" dDHB@FPlM͒py$EC@(KLL0UBom'%$-o|+4r JjaZm}?./$lR?}*z@Ͱ/#骟l@^I(>$E3, d4-VtɊn7걥~ e5Zt47WVNͰ/T q'1$S)8~ RS kOGuT7KTCM%b&+s|0UD*oU2g.[*қ}٢hU ^-+@[ٻTD)wWn ,FF#gZHs"{۫֬#c1eu~5FgV1cČ+6D@ *ޥ@6f)q?:=FoU617iIq/G_rIgw|!qxV:9&N?z`phS QU j;=<.rS.7r J3nBaZ"L7Z{ +i&$E3, d4-VtɊn7_뱀 T2E˫d2~g)X#b

    APYԚj2i0g/XVl͓ " pmuW{O  >oq_2R9[@%kW _-?2Q(ɒY3f֖#>_5Ϡ]&VH ֖X`-O-sId}q/GӮCXm7D[c6t %H*#cȵ~K~_cu,Evx,_]nn.uC,Q&϶ppbU HMƭBCx|!_UM-޳EZ &A$)T` E%P54! cV)`p%, $+e;GK9 j $+ f,"zGO?NݦO%lƽS.r*-~dpC[(&j;fFX ,C8#&;ާ6DZ2QM Zi=Ǐ:υ~w=}C#cS3 u0 #^-PhLus"B"S4:iiemckgjءO 7~!"qE%VZv?< MͰ/dXmv%+=fH6tL0 ߶t(d''BT 2lK%HJG3zfxq'1/hf4Sod<~m|q&Ӣ^!&j +%YQ.w= !A1 )a9^%YQsqV38=<.t8]nO9<^%YQ50-&tU1DQUaBnj{ +mvǩr;|n[J`CTT%Y|8STR^*<&$<)wnPʆ͟U ,ep &_pQQV.<+TT@Yz}si9(UjM:t4a)I ($EcO;mP+ٽjO8??Y Ԇ0_YF)U|korhR5_?[>gY#<JXҀ)|T/GC3jѨl椑"LB(Bf=GLi)c1cn TsV<3>"ebT`  &k]xr+[~wQOŝyhzUiO{6W誔UU/ƳgbkXsgJd}{ND NHoT49 ۋ˂ qxzf;\ʽVUw`GGfG*{E9&ln B/ n. N6/=<ŎJTeOi,¢ZJ|pMѶ` |k'`iP3EDH%ZegꭠJT X?}DmE[i {yzp D2Q#/xB asTsu,TIDIp3&+HDQEQbQredYed:JD8 Ix | _u]|><<<B 1c f$I$I$ >ё@BR !PJ)%\` $9kyOodHDi- 7Z:zaDhm牓?x\f4q͇=Oh9\p߹S Q; ܥ?5 y>s=_nWvĮTeLnڲXo) Ǐ+DmdgB#O=Pݷ*[:m->Wg|Ӥ^)+I6B~'U]?-o* Uj>y1ֱW ~=F9k `phxA&j;]j;?dܧKEU@UX_( šD+m}C&| *Hkg8֐PFE IWP˙B  QU j;=<.?KNODWxz 2 ;@FP 'HfXO$J:]5o~/{QUaBnd7UvEypow^߷#P8 ~A*q)Y>lUߞ=e=u9Y'mɉ;B 7C+AFD ."~f!StҔK1t޶}uNkz]1L 'b0 +m־w*U_ԣ;41n<0yX @biִ!OT:Svƪv.gxIH|`vr[{\K}p5̧ $No0̀B0b8AR4rgK Z/ܨ66[6{=!„2M;s#`tRjRgzr/?:sr ~C]DrexAj`&„2mTČ`l=(AXe&0e1c*]2_?.pQk  #($E3,{+p?TKkD҆#b ˙%D9 ffGDE0MQ ixAdEtô:]~Jzkoy3 4sA\'G8^. S@0e[#0"Kb4aH԰&Ycr T5*!H'mTܬ.6kzE^#)By Cuec>,MJ% @ y2z *D_CrlKEem&Ԣ:_u(}:vhA#Yh)4ocv}Z_tii,gEP au8&=j>R1K/e EwtFp{aCMb?¹MmW޻İ+,%+fz^݉#!(aTj93J o8'3  9w2PYAp<9zѡy?Գ XR)I;OEtLg^ج[s؆(Ym22jv Ϧ5qדo +$~w:h2vI ^L- $gD5\C eB0b8I (MffU༾t & a`N4r&A&C2wPJ%*I P$I$I$I$`y2` N8RIjR0 )dRY|v\sjcINHmv #Ѷ%նAXHE$YDP 'HfXDIVT'9NͰWw);oPЄ"D&WR֤5ƞVlaq A1 ) bxp^)Ǻw;=,WҒ a=n}C$@ eqo6y68*k`6Q:~ n @yApdXmDP@FP ')a9^%l첢jz7 e"Qڀ%RT(UFP $E3zr`\.42,")W!Ojb;v@R(ݶm{Pm۶m۶m۶۶m,PvȰaT(UP>Ih&Әxk'Nv/`͆}9vߪx>bb> >?|],`%D!Rt0w4@A XNd Qn&8'PTꭱe;|v Fllij hZo&TmI{3j0>ۿ? ^ZRJ)_' !A1hxA&jˊ\@(-SLEf:f?9,|$PhTI*^ٻ|2w{ ^^S J}onaًIfl$IȌd'usMg'r%cnX:5z'U{\h++m%>aa,I;P oelꆮ;0-$E3, d4-V]VTMϳ*dϾNԱm}Zz_ZKmV!$ I$I$I$ $Iznw@4 I$I(vY P~ )Ih&SxaW8Q/2+68nWC?(jZhjx0]~.&SL+8P&j3Y6pK%hkh$Q_/E{9n 808K X0%o۶m۶m3Vm4DD\,r퇫T `fxlJ[@j YR@vqJ 0IU[\UY=N=l9qb z7*<8uι,lw @?PiHQDSm3XY;,E@ YCINGJ\:G߀䥱IFh#\ R0*6qr{`]&N6߾P}"L(F?a*VS,}/dqstMژękMmvW_DžI3g$n;;w|տH/l`,d0krue[L4_8-i-Tׅae{Tξ&/Ӛ `pQ2.+声-k(?RUU/Ɲ# $I4 }؋otc1dz11բfؾtH"h]’5#9aXQsx{sz6Mɦ1$`h?ʐO#]ICt|tP"q8S$1o)No9K`G3-j9&3X~P>?͏QMi!ݢXoN턔15ml~W6Ϊsjڸ6.%G#I~$9?IdSRŶ|߷l2!NˑI4`3Qpw"rH$Q@ P$ `(R*##SSQ'Yݚ5Q5h ۓ:`KunQRH؀ytL &*KV!S<}xR`R㱞w X =_?[kuzd =o0tGaBt:]W@uX$f[d6DaRL$J @I3, ^2' !H"N2Las4^>~A0S5Z1_6`pDIVT a0 $ "L &͉BX"+RjԚka3z,`CNj0B*mo}_>cK:f3b]F^}Տ7?Q3>> .!oqfkjh0qNKH (8|pl'BX"JZ!A1 )a laE,*Ƃ 3%"5Clfrn ,p2l;<1BpPGwURM ]m*v(+FaMhOh 1ľDP5Ԑ%nO6*NH7o%$n#s4-e^K>yF(pNͰ$!x$2B0b;Lۿ #( |#nZx`DdT4d:ʒM&'yiGm $Et(MffU(z}=n HfXwŪ0(a wQX>`phxA&j;.YQ5A "L(sJv:$Ֆ%gBR!($Lq1o"XY2>o:$:玝Pe+VY!;r! +8\_ %R\T5Z rT_ʀQ,1t)4,d~y ,iugU}Z&fVh mz?_E/"B_ V)0X`;p:ѢlOz ooVqxv(4z3|+&Ҧ'1(o5Q "3g00-x"=E~X6\^D^g$fU  {a̐ eb/7R ǵKI3@({Dα{4ڌ`4/-V:o"VʗӒ`Bmbd22615YÂ!@-x%ZHBKp /^ERdQ4:bsvs 3ĒKzy騴KSOp wcsdι- ;\.*@R"P 'HJG3{\#,|$I/ aK;D@+HB š,Z+%)ZQDruImuv0b]dcӏ9Q5V޳n&3[fJF(f@Mn?mBmqR#,0@!r(i^Di|*yBzH<¥s_˦A&Siܜ ֕=QFm@|HDcNmFʯMD~3)'$m HX!DDDօWiwpfW3Бx5-7؝I rm1-VtɊnC {$3кйhQ-ji[>}<߮^Th)c H*.݌*3Z,eݥ3 \q@jڲ^fI/'uMy9-$9e`T@ wzцixAdEtô:]庽 K-< ] iHh)f O˾zVk$C -špކ3P~F V HUR!9g:\Q!Y%Vzk68,ƒʕW9\>sL(·\+pnL|C*|-omcsX1e4xӵͽr7'W`N U&4]׋i;m fP-A};z| ɠr &f:?OVi,xDv#G.j;>N6-ChόyXIu& 1xA;,ca$S3}e P<$'r<5GCaRM% 5,*hƤCT"H~A"X_>+SBLPR0 A"H܋67(}% XfLA+Lח##RqeU-\Ӫ p=m;Y4aHc֓RMRz1y/G:5E @ 8:7f7TuU?\fL#MPC!8J"3FIXlظv?[s:9!(\QDC,q(){gT,v*2*Z+z V=.~Eu( ~]2:[Ǖ}TH±ס;O+Ujkdeh|lsR);ߴMZwݸzCg]>,i\xܟ תUPU@_2Z`h#qv BX"JZᙏoxAdEDPe;;o<քS-w?a+5QSRiG|E\3z14kmX(DZOIړ&o):!J\`ȨUpp9S,q/ HJTi4`phNφ2!A1 )a9^%YQyfw{xzy;]\pܞ SQU aB"/tôl5WE'bhIy<t"9Qy@hua p29?DD ʸJ|i@|\I"q ₋zNRel>{9t[NP ^$Ih+qi$Y*~'UpRw9T,!&`i0Gw]^3,˃\Y=Tr10¤5hpA'F0XMϣS?9ÝR Yx9Rv=!J DWh1hcK3P UǦ֣F FK)I}QPv.p2/i v;hV%a $&0Vm0BqrL100001*$lm8ji@Df;Y%ʋ#aR>mџRQM+Zs7h͗pZlx+zvr212cͣ_߿T.usNsBU$J 4JƉ$()T%TDfԍГ6za6\A0 0vtB09tǑt kb~Ed1dJ3%Sœ*v \*rZp:kՕMWs-:i:!LAf|>3KdzB].ەc=s#ɀI8;}>y3XE.j_ªZbT`Ml_ ^=ݳV\x&E&ù)<<y d`фc{$ډS$/̗|,((չQ@LJ'^ϣgxY;c=c\#/]ĄS/1:ZO{bS3stzP1؛>tgp^o9٣S5ULӦSi4jco:d:M9G s]dE*-_،#1dk*kԼJ׾P$(Oi@:p0W g g(1Y|)(jũR޺lX dp2cd֯T2 5<<o5}?>S?rm!z7YۀPpmytnucot땿#?E_)Lƕ5*l*ȊYf ŠVg5/'iul`r&f"\^[+B~AZ{pjwK {2;<|q-3`gſҏ}18*jUx#KYVv[pSʮXtTύ܄:$")&)aHt^1k{[Q:9ʱO%2Z缙Kѫ"\vG"}Tt"H I4f3NY$$)%7h="EKYeDQ>xILǰͷu]m~ᳫ'Qe!/#iecԊef\ocOY,Ar"Ϧњk+Xp[<\o˲P\CM暜Yj: ;HMM8h'444/Eٞ^[3fCq>a9G&,tnqM pp.EEL XQLʰ~\}P? 3Safa!|ʑ\e|V*x\3Tn,))LY!4m%؉#$ o!.)5HZRt6NN}b!H%J-B4LƬ Rn"5zl ,k)2xIaO Ƙ4 4opEiXB5ց3 =8A†l/ivH-%иd3|CP`[tqroΊ=݇csV꣢qcQ@՟8SPrvŬa -e=s%xDіR&ekSLf.Y*=thFȲ3&h Bd{%EEªRd0$xbŒ9ST3Y,洄li/3>IsVj&a$c4G3䧇f/?_G[N.P 0{ubg}wmwwk0̫k,N@<6v`R?fM>vrf죉&/j8^/0_oݘF 17JS]pлXػnhM/0(ϰGXk˗Z'f,Xq5 Aq B+Aj1Vl0u߲^o.)@wu^N9Va 9X@?J0Zqm\*?T.nEk7:'1RLw̜/}Q{Ox=7#o*ׅ萔S?i")Iwה&+ON:}-vw8MLeXg╩IT{c%]X8o{Bp0t 5,vaF!"LzRL 6%hʹ'Hؐ0aƒp"T1, *K,UW3J 0b3]-p-XXXB` Dla\0@t(g'Vytz|m0RGߠJuSPꯍ͛;o$BoQp & G[zrr[}ދ"I#GD" Y|h kҋ+u,Vo[W\$KJT]fуj0͊\.h+kӑ=u08NT^D .,P- ](ю# *{%Vڲ-˲DYJZň%ʩ $w檤!Y #aO\pRo>B2 }G\(G"XZr%a $\ T` (:bb9CwI:'@=\ZS՘ZPFf5]투JāY{:< F=[42jE=3wތDW]wݍ4 X@tpo3nxbn7rG|ٙ]+%8|S8,F < <`tW8G@∛5s+s5[ *^b&k}q5 smb1kjU8(ZqcԋA?!9x=pjC  79J};N Д_4fTbU9U#S˃ިRl=@6,gӳM4Yz Oyf!h5k1E+GCT2ED.c ꒰p˵ż{Y7xD_>b3, eRa*bJr>{l; Pc1 $h^ bXmaBW>}QB'{yP- 69'p4??8"9jy>7>' 077 _e~v "VD+R2? %4fqHK @#orw($E3, $+@FP 'Hf`K %HI-|4o TԚ>qGENN^!= b8ARt ?s S-o\~EN!]V]mnMSkNo_uɔP󜰈9(A_󖑶FGkȒKiSW;?d)HsH4V!#oON1 />xX\U3x4$]ȕfSW]ɵ:h2vI yŠpyqb8u]צdfw'I01,ǫn/:r bTjspqWB!@Iaqxid '8Fm3"bR2uP `pa9^%YQ50-q9}0s  "kz3KdEMc%D4r JjaZm V}ͤuXm7栴ϩS8aDGшU.dVnP^MӜqA)'y0o,+Jp„Mx"ly! ?!H "3]4^8\}M16E}١߬ #,7% HM7' ˁ'IlT3׆C" !J^ >"daW+ M|#g@a˟t MM%XByoo߃h;+tQ[z,}C R:h2[6!A1 )a9^dEuBn@FP 'Hf k506΂vƷva{pxˣC ]F8ruVBQU jn*;m}$$i:O|33>zQ! (OęxG0(RaMwILV)V8H r*As\Y . UM(XBF0X+FySn3SPhmepYkfpQ#my_,t&=p\*jhӖ/q =5IokT 3 ?(e}il۶m۶mLoDmVpSncWfaTDiB(۴ղҫ/W c^vLrP#$aB6w"_DVX sy|P$HerRhAFP 'HfX=O= /\B:@wq9){u3A?I@Dk2 ׋.W(H9Wd2[$ „20,ggRtL˥/^qAR4r .r1 #(>#&j;.YQ5vbx!# fIpVwTX yKG!d#K$*8VQj_?09aJӈ~<-wӃjB$Ec]sˠn.TFҗ7f +.t'O!!H 8%H6i4F[2peVWmx3Xi!(Zr-Xc5KكPOU ^4k/t ه9b Xp)apJ12dfaec5sMsw ƴQrEݰX2Na 6vQ\ܢň "L (ɊƱ ڰ`Mj{ 8 L I$8] [֠l?%7ޖ^ObP Pu/zC?n]WkH&3`wNͰpE3NI㾞?$ &iz>`IfXDh2[60hxAweM6X^^׀IB$J{! *"""""""""/Ch0ZkZk BNaμ0m sBV!lv?"9h$>;KV~< .a *>c.a #(^9_b]mg%M>BsnGa.x_cǧqEzA>T!?&=%L nޔпJ bC>;hC|fps{W%wڻ]_ƾ[wr7߃%n >@٣Nc/<%L, <^FȞ; zZGk_j# xS"&S{㛣&G&p [2c>$H.G:xgM{-"Zs 2H j؅,2!ffH4I~FrIHJ 7 ElrVH[ݫs2Opwgt+l(z&$r}eQwS l & XHp5o<倀8'Y.l S (EsO )ixAdEtôlVp J53U̚-V={0Lӳ*iA M?K @ Qɚ1@+ie˧U *"b8AR:z1J[(P-><2냱,רIb&+L+`\2)+t`'FOҝ\)QQbn6{@'U3"vy[Ex>TUf aC%K]c! *U4@8=*sĦwI:釡jphxA zq-42XX[Bl)b=OV<lU@-WA? ^*@Vj_0ÀD)ҼaY؃}ac<:F"MX_ [9BȽ qghЫ=G엢r#r[i>h:iw"}L} 9t}7qH\ \ƥ\k%*6~U{-eOՁ˙T</4Zb$J:͡0,g&aV&]:xG58Pr~d %\Xp[5x`T*Vs'./,+os&eY*=*Kt,C{?6)nV,ϱaj΅)\B{Æc-~qqYɌ kv1oڞ=*"m.Ct,;?|t#N܏kpпoD#"P$B>(J]>Me$hэ|i dw#"5_K Z)'Dh(U eX# Ō;̉#3BYsAОPNWWpj`-do46~@@ rMrͳ]Ysz8JH"Ie+*3CJB$2dj(͐DVn5Bs]Z#B$wUFMW>ȣXxy֐NͰ/ڟh;mr2ln^%YQ50-&J9nSjt5ëKFUH<Pkau6"JuU'.( )6 P1E`XKPcZF,r1/Bb+tB5 /)I+/5D*c)'Oy[qˆy m7/K"E0G]P3~0+s*Q"Y-R2K[ɲ#z x`VH߂1tm*L`ʉ?'.0S?.U<}(*O!@J(4k9&5q=>s2$Cxfu]zt2(Kze"h=(P2qhZԄZ2\a@qI=MU%;#Ɠuy1SWz^iJ@dF?H7Fؑɮ[ҜgqSlTאPՀ  8ㅐ8PD  k>t41ߺl$NuilR4;$lcˉCwJSoT8aA tt$j$2Ki47/*J!V~$&\ @][nR^fiv:v3|CPX0[tJ pA lvJp+T0 ^ E=iY&"vqod\S%B59߻\]i5'GD-O '$V^6<(Y.6 =ICr…[ E;]d~6b(s# ,oYD1Xtp߯nWt]uolH\c  #($E3,{>b" }PRJ{;~'yT7.\!7=͔I~:kޞ_$r+XοOPxnVB0b8AF[x $+6mxQjE`phxA&j;.YQ5+^z,`CNj0B*mX$yvX#IeZNJ)~ZC*Е0S%&J%dR>OJym !.?B l&sQ ĪD|fDyRDЖ$ />P4j' .dIavk<"K,*R@ $7J:]o#^ q ٴ@? VߦPzNOR[XSEk@)jeE=2- ި|nnF X&A&h4(DpEM $쥒QzI136aݻi2YPRJ& /Db~m`94- óWը?e:?(ᄂ%ַD6$z>e¤QxZN.!2||yn3Y\:_|M@*ŤyQDcu]#1r"FBXdj<=͋b*9+Yu`a aCp+40&bP bZa?& W}Rfl g*=[j֪FtUJuՌdzUw;ͳoXnk#$-E"H(Dѝ'O$+Te+*digxLd.Fh!&^xjbR8իWϛ@lze0Ĵ Qy;^{PW)%/,]lXdwEYڨ!4L!hDLW)NfC|P B0b8AR4r Jj~'\ZeV㸪8Tq\(Ɋ0L7Lv\U&?|s,B] peSϓ+HxT%0ES$)%~HJyymʡr=vk88E8BlZfkzg- $Kwu>DEBCm[-UU@Q `phxAdET;%6K|X%WTI:2GΑx~ m.{u90"nz%no?JoScK-D'XHOә"c௧ߞOʽؿCeTTDZwB)ȼI7}Z_TW4AtHu>QFeP,BK@t?f> ,`Ir' B2,Ѵ{;Y_(AN#NwG0^[Ll2;#GE}2$/66]~> X9ƙ; %?1% /vIKI?LnX_XZq@q[T5nmXsY3?fF?̟ޯ_0huW& ek2_m*vZG 4Fgu+3j2$g8Loޕc M>TNzp ap88UA(1  jքhb8ҋ.khb@1@݉MQ-؉We;?qQ -X8x:zaL"YXEYq$, }'C/RN6CuZk} y0Kٸ乣b:ުN|i/=8O 泼TJ7 ; ȝR>xG:8<|xLJO;VVnD`Z#lzHC9b5x#Zfb˚ضHJ/|~ Υ+}FBӃwpqnl@!ih_`D~}>RJg,tD/*W찇TGk;pPG$@pj2fBE*M$- ׭[7Xj$oV39 4 3N33%BB1ܺ>*!B!̈"=ՊH_Pk yuBVOS7z*O q]j\W^`F'+JhF1 ;NQF3}]泹EM (JN-u)3n$ c8)1O\Sҵ:tY^dw> çۇ9b Xpw Zk-:kZtim;.-rIDnh6FٰĽtˍ2 ץB)Н3&h"}%!u/M:5 AR*R Ej5"Нz.,Z ʏ)ˣ+?RŴLa9TU28wo;$T&ڜ,ԝwÉ!o' Tr BҝޱٮAҒ %~>qEDiH! 38 gq$rӆV,pY[! &Md!+N۴:4tC0H!;nco @6g*c,$3ym/Y)Ah״å䀧x+Mt!ր̿K"TSJ96"kkzzD{J 2S߹Gp10Ig&ǭ hpKiF Y BbF%a84ޭ^7_,$N}IFA&-/-Hxr=K`2M)>3i :D,001eMW#$]doi+ _!3X}'lT]ږBE*UV낢[~, ae>k1#ZzI V?2_m ~ 1sa͞%^7@-BZݕkQu%du0*x/.oERo=j:(`"D J )R@  NIn;^%YQ5&iَˌnP?6OKe-]DpL22U.|q+^m_o-i[3'2賫hQ-YKYDrV9 9葌X̽N"V^mo6H j||0[}lUYOfB.X0ksMW@N;J$=Zw覡G6Nlؿ(ojQlݦuY>RN\|c)M~\+'IЄB1 ,EaO#TǠ~Pȸ)`r=_Yrwmu89VI"^-ǜ^0Tb!VIM%q46u"ّnCۚ^u(QKnE?*T*IgҒ{Qh>ۻ4Cxr?uJXK{qJH|'q ڐN4Z-fc-ZX JтNͰ*ZR,[R*605#$j3T6;X`yt mAzJ(Jdv1I-ZUϓ]V8B 3*rk<+~51G&FJޒF2!mAXi<3mhh=n HfXđΘQ>8$C]1gɖNJM: #($E3, Sh߈lKVTMw{4%PTAj8$A1 )mknk1z!t'о君ɌBqq `zd9uf^'HI,|npxFQCa}|x AFLDbƂvpovvQ(Yql$`h# P uH 0aUY`<ŁsK:iq?)8Gg&mWX B+XE x=Q|rʕ +@jĆKn{IUEuTv@U)>l]4S]ns38n lU$*mڙ d BB@!B.GI]xԯV!B64I!r%)a ){2Hs;sS>ݾ+~w뢀B}?"^->+lJSBmF캐Bo?:Ʉ Awj,[}cP%/piN`(;Z"c00x;EػȔ /=)є *%K~PyMSO3Ew>Q4骀$3TLŪiZ~Ú@T1(:+[5fYaÕ@ҵtnɊJo7"a^< ꅛœAiVx2 Q`@ %R_>DvJǿz[ngE8kD5f\Qs* kFNѾl7ļ:mCQg#H _T@%.0^A~m$Itp l1łt}UFz@K7DQn|?޺C@1 hoXA'{ټXd/H֕=xTvsKFLӣ"|x7"LA*Y!Ͽ|gϜ*tv/B~F^G8^('] uݍ./LP-I K޼dUMVDhrH^X7O:FP 'H/{}<G\3 9VoXTyc3".*~T?L:uhqYQYl-yd „2ݸ7[3?̓&I^Ruh~tSCY=vQ-]M1 #(Ͱ/dXmvYQ5=$! ;$H,B;!(p47M, ffwZ I C0x+6Z:zF&f@`G Qh 'Id Fg0YlN\_ %R"Jqus> I (Mffw8]j5P"1A"4w8'^!F@JLE g32&d9?*[jJ%2+5튘; Aۑ+H$I$I$I::\\93b%y4䞿;~yz% Xԩ/6I_@N/AA䣏G~*yXio0 6je\0/ F;@FP 'HfX@cZ#DP78c_L$<(ܻ*s1 -^z>ɄQUAEv3%sܜ 1$1 n]9`9zF(+FI6A2+x`h̶CBC! & 宽r"Ź JFH- c0;V0^ U?}׆G,-3vu$a:JXҮI .X;;isRbu SDt$F7Om6.)E} |mWH k#6Ll7q/͵gv֙m_VjvD)i;1Vx.B2-6@MNݤ$ē@7{w)`gB`5"88 `$ , 'p| <Ή"yh^a0 D$%Q$S \@0 _d2 vr3Bhue*m&6a3XffvjiQZQ:1Tጥu  8\<}`ǂʲUĪVWn_] IPI%`xnߤÆDlHigL3 ʠ xgw\>"?{#r#CFU< cҊ[?mFFۤЀdbAhcb+o1(o{C(Dcz%E];Y_qCDei~~H\7u=DEI$lJРPmY˛.0}qQ9(\FW6fi 鰗U1cO,* sZ%2Ad+KCXk `^=Kk,1Mndumk;!ny̴ۛ0uԑ3$TSn[6C Rev+1Y(iF…"bUu}N~` [>WJD6.+>?ԀE.6Q BU'&{,2av-s. H,j0,j6i_Hn[YlC{_0w)~j'x0;o(X;\T܅0,hV墝k0,%㳍VP<㮸 qge-6۩3QG֠$a` \΋ON.n&ԙ\_GTX7(8Ind\Eh}[>gN^+:/i#NQBsHRq0Pn"Y>ބS 0̏%SN4F4G W#a9?%˂oGs.I~ȦRf\1OE DV5nEhm .nQLs؞oKP71n_@05OD3@f"?ŕ^;(o։^, нWø$m:[2BѥMs2'ŔW-bĈ,c5yic}t"n,n9QY ] A*%cn,W6Vʁ:W0/ьM&m!)[ڏ5:?/Y 4V Ϸc~3у!8t==hs₟TK`? R "rEbSѠP/ 2E~ ~ʿX@?QBqL,!DB]W#@R𫏇`Hfdic$S `i=E$+9L!F0VKͤZcqkT8*.sD\D$9 yBh2YT-8ya1tSE$+zig]y:ՆM0L`Ϟ |8]CkK*V c 6Íg{L(϶`Pú8#V2Ů X)1z0ިS<]բx,X*!h(,&iv:dr[FVQXG96P]A( \f:G/)J,޾y0X0xcmmmxxzA]Z)/-8I!?goGzkDaڙK%UN4l4_lΫʵ9W5532ߤ1mv ^cjA*b˒<յsFsYҦe;uNsnȕQ0 欚6:9jCN06AeP9t O-1WqWOʉB)5XߵXǬ08 sKP/M瓢,iK]=ESL]\YZBSj8yQ|ka"6}x#+ZM!]ڧ6oi;*{`AAON<פ!R@by@ڒ\RX^Gx"\8"+!"+1Y_LK!H;/k:[0'mV~ǀ}2p ?`a4伯` ;? /zΏ R1eFUU~⍎^`7s6ph.y#^Uy0T:j6uV 5490ZnaAA* 0 $)<K)H`SPeu(+̮H1!X,tjCԽ@Wl=lh}` D;õgm(/9\® *®!:Ppqmd*by+3j)$"D @=X^Q5PZ ^NdUkP:XG0u, {)i6TP^g.8H8En^\@K,3\RP2ƞ sPtI!I`,g^?P$,s! ;C$aBRH˜:F"X"=R@Pv(XQ O v":J>ZSV"4?|ЙvV>.H0+k\`۝e.ma@ [ 7q|;]d^uto_!MipB,?$C"+#11 DwŮh6P"= b>bM%F"j_yO9筚LHi ]zL 3.$k,Do7 r\PBV7BdZhdr! h'd"Gd}Ԁ`eT{8iYVzT,Ěמ9WuBs躑͝>Vhu7mIj# = vl^^CvyOlQCcaӱIa?·Xuf@K/sglq^ZaweY/s.Iu[@7Z5}Rtq,'Fe)Sx<9 ZmsqKX^eSf$j,ةfΙ,s qk}?=4kck`)k 'KPDbq;-3m*;7U: rrb(n1LvXqh!| 42*YȆmnZ[<>;Sl9>}3%~kϰYu{!6/ fTv"իrir)) ԯp.jCЈ|6˰ѿ%>?fWKf [I obs۵~ U V?`GR"polPVcfg:?(RxQ%g+Q@k'{mHN`@@InVK 7ytG'7M P'HT#fhh4qg!} qg"`Rm $D8K`.`4uuӑp%{l~~A% ZH$[H$]ZD35tubi7 erZ+u; L>~[tfyP{ڠ`2v֓z||V3|q-?ǟkU龘FWG+C!W>msbi$bi#(JJi.mK(4Ab+DF^H JVW!0gEKQ4! ,@#ZHS ߔQMkƳmc%~)=6Oc1v{xnc&5[2Bط’ӗ/r8Oi=qvsHxX6C>[N>Kb1;zezݹ/ \4p& œуŞo̷"R Fti(yC&BA3>EGF"fzxc*z*IWN ]f/WA|[.E>G͠TBܪވ# lϋI7z+4,<"&.!1)MаoF 1%7Y|0HXmvG'gW7w+k[;{O/A1 )a PuMdQDS=?EYVm#/3ރMm[FrI,TZ~EmiV#FBbBC Ou@ B^UnDYDrҴ/E}~ZEk4gzk-v4`Ѳgr /SG<}o !x'bhT(itZG)/LH!ۑbD&)|b1ջW^:Z^\ŽCPӄnqi_wC!1!Plp1D<> ˀAxØr,J&YS_Su^L4C =}?,,,no'ACAl6xI jrܥ &EmFe9<'v׎a0{F&eP*6R%igKFU?꘧4vv:y5'Y@TOxʅEђ,bb)i[H<PU,tCڨn)!;@,p7_ K#=فJ! Uo!"CY]sıu`׍Oxh {}s$KZUlT5yco,nH󀜶s?nT K(T~c*"VDz~XY5M)4RĔ "4mE69$"AO_.?h@]l_?AyRvF&fVʸ1 =-Zإ+nDPƅTnݹQߓg/^yӗo?~Af-۴/Z) =N>  @@bQs=1߈"L(B*@bQc$5 1oʙ> ·rRv'z}Ģ恬Tރr+mgY1I1s&[w/Xh r<@V@#+:tYA` DGX@D18Hc{,2b%8 rFay01GrNbBA<#|&ʷZU!tRqpŧ%pX8xC  $ !A1ЃY9y| A1$E0hx&qK$+LPQUQUӕ`@b(!p'AP`qx`"W4Lw| L-vZNnbsGΕj;=du{tr3tM5UrW!)32*&CȚ+INOKQv c8=E%5 EeںƪꚺrcK{mI&ֶ;{QY^CLTuv})ںvu-`iemcQY^U)ڴ]bʥ^i1gx>o0p Ӳm\_SzkׯKORE.ʪnZN/ʪnڮxQ@ICʩSøpX8 LX0 X@y|{c;NǻA}>Ki^m?k̵}ss߿.!g0YlRi㸞QU Ric@|mIyEum|zu? F_3i#'Ϗ, '":*,;}V\/oXd6=GPp=5i3#\`Ohg7< #ij`7d8ѱH^*Jm;c3~hGюꈗ[p=ỾG|WA &GQfk8te\F@0F;}qV*,+)/?2,M`G: r,lJ_>$Yo 0ܞvtgj[#+ݡKRPC"!'xq.|; By!퐛j.(V<ǵÚS1XQzOd]'!cmIPl]U (㳁tj-$2f-"`/Gޢ4JO4\ y4MnG(DQ_~_?t-#KkT"Uf/K5cjʱ?I2#.-EAr,$BHj4cDW vM@%nqфW>0< )MЉ OZ?]h}h!ZϠ2~\:L-`xlc^q'x/KZnx$v3HBO-xZNj 5A71knSȶw w[;5;s\џ ,91`fyI_cɌ3yA)QAS1jjL4'mӑrvfz~_*8M;xפkx\?/zi{#ϊ@+]iAW:[EN^cIf& )tkŔIH0a"a%Z~[9e/БPp 3X VQ(Z@F +l޻lq-.m/)qo:Sdr˯ 2__gcrژ޶(Re `@4w {8k?^Q{h,t/O,N{y{pb6}sJk܉3Nv)f$9'\OdY4v:O}'tE)j88N;$)u[i>yB¼/) J4zbh=Rؼ5M<`evӑL)8"g{cat2{w.?~UTϼJ:K z純8ȹ-hS0ť7}˂gcB(& 04e{]|CL\ճY={{Xͭ=Pe\u>DPNwܱb^|OȍY^p$'d*Qҙl.QY.=3M1o 95+NjBɄ% O #d2U9kyW$j`Ier FZ@Ϙ4$Դ:zʸ4 (mĢX_@IEMC Nʰ „2N*!Gp?Of8bj}}Gvjmw29Y.oy #X1=384:6>1_X/f9q.s|ʣw>y{tot󓧯~;]tQ|8y?8y{Ji}ή޾.$rZ76[h,B~xQY^CLTuv})ںw>W}}fг'XļNK^Ѷ0$P Ocy)̐&yH(aީTN%W峉mT`4GQΓtnE| x`kzT5&i pԋ735PL#4Sxc>f>c[4JʨEVQ <Thk$Z}j6ĢyrV]EEư {ˀv-Zbt# ܈`ceQV]?G*{`j&on*nrV|OӀwii:?G}jWBk=F oC̨`mኛRjpǞ%6E5C-iVIGw: U2 $iELl Z`}ҙ.43xUi.O2>`olóM!^ BY̕" wz F&- uN)~7vQBX AҾBy) WP*8GӒ 5z;EmP;!\}m$n`9Fu}[Qkʟz(X0ESkA/t/gfQq}0}iz*kdގNO]Ngƿj="qkY mli-I+hOT -01,t5#<繘>Mcs+ :}NZOZ%EYrѐ|&ޝB.%SRxMǽ݌BN}ve%r&M*"-#];o@83klk]A4Gi(Dq84"nљ'h' $d3pQVRsI'Zh@*G"x)-]Ô#/y/?l'ƧTRa3-"eoH$G3tkt4L;6'D !EC6 08yƄAgCz:|ŨQ1NQf|!Ej" 򅋖x[w MDP y#\~#@:'Tuq !v$9ָ6S-~fӪg($' 7bWħDŽ-!|Rt>'_8*Ġ 4)Qd14@6`C5=r}.E7 O[93V]DW?^Cx?1SZŽ7%ėF%&/͓fTc7FH#E}&/jlPnZdݗ{/$TYT-v_^>BפW Z|\6**+=Sw6 d5[ZL XZ-}PjTq\gkjoVZҪַp'{X}gk rx{`XN0XXcUFd?Q'^8g0x !؊E6W8$bZ8:bq݇WB9(&d Jwy/{?`}{D͜Wg'g6ts^H.˔vwG<9=~OGohjiXb՚u;p@ e\Hɳ޼0قF&fVʸ<\FJF9XknO68Ymx tϵ8389[?@k0f#nP?zH=Cu?=ZiS3O6*zۛks>Y\=L*.RLk/Nv9uEaڎ{ZM0uf [`zQ>uҬ׮³_N XF-*\ΤܻcY݁sɩ`\k5I9D4J>~EMA%dΐ~<NJG͆_#}B)s!fjL;X9e|b[}VBUS{1m/wV:-c;,Ʈ5TY=G Z 5E 'Ula!(Q* RC4L4ͱBI8:u~A+&R8+`q V·ǭ+C ['6YH%?&cRڞ2:@?"q%S3nL5+WTb^>m+p4[^*I Vd-lVSp.s"_ LvaIO;n菙EdUAg4=P[\*͑ 4o3ؖas]c:;?; x>56ptqn3>eĦH ~wyҸP?Gݹ`C˜! JvaxrkP:TzAोŁ‘_`!"2*:&6.>!)T&W(UjV7_ICSgǵrS7J+߄q[իіUr=qm.wZZ޽o$(r VsAñu"Vado'J@r]_Ru tn4,J#}Bꋴj~RQFGA'I$`8F;qΟx Jp} l_ r*Cp$F}32s!PPg꾌 ? 2,+sb0ǂGH+V<L>8&O8gpƟĝo87= ).1?.,ߊfz '\r\&WqW52`t}+&ͼVm}wQbƉ/}w$yG_Ϙƒ=6pf8y\&5nr*>K^;?{߿Pآ.)-o̯kBreA5uב7 ~׬qJ܁{;ǻ=Bj +kZVD @)K+r-eT FTi+QLYȕ'0 YfY[c: hӮS~mB(!D&%L\y(TXRĉ QR˿n՗p?;a!҆jFo͹ _o>W+p7G-(cKPD= SĂX?j$[JMKj0r=G5{E = ^BgcN,nx$ZZu5zPDQ428,-w,[_O%ui箸W:gpABExReUtIת7 *NIU)οwjW42Dg_I[U멳:=Vd 58ћZ$I01m 4 uܫc'64li#M]1=ެ^Ww(_ZY}Q8*A@$m+橫]~a&Uʣ7| asxg_||HH,j}_k0"(ȗ\Ǧ{ 8Ols5(v.n׮ LQ$K.C:e&jYoE^U7d-f.ީ!#%P@6, +nyYmٗc$̛4S0K_PE$^x/ܗ_h2(W-ֲ%.oIGʚ7l=yᕬ2^\ a CӘE`J_?EWHZKȲ n }bYL{@ʋ}}|o{SpPXIS_]e_^%U-dTcS4鈊FD >IZ?yaC!H-@vv#{5a)5Bכ.Nq%n}lA4G+g)Prg-lB?cAKwx~Xss,3dX&w9WSo, ȱtkPp洨mS`Sն EB:C8lR-f u+dYiX< } /m,O~dCCR%H_dH)Id|r_ wEcCllR>6nd"qJ|^B&.<'|%,< TנbC傾)b5GDc= lC>֢?1+DΫ r4UȈSijy͜#])hf9ŦZbZZ:7F7ڨMF.3wʝs#7*<$+#Qa% -Y;gKtLک /)S~E5?a3##G'NΟ] 8q  /NPSNlkta2G5 ӲxB6 wzot[yNmmo;]'A% Fp4{r]?E@p#L c9ѥn0JwFXуH(hX8xD>r2Hk(t-6ɛYR*2{0J',6){7zlY9*QRzMZuF$i8ּw%G1jiTwS$,uiK_2ʛ~OzJXhDh] ;b*TӨE.DTC*uN=؀4@jcRZF2<~MD@rµd_sXu )0]6S7|"G=G8T3.pW4yK5i wPnbR1ENeeɢlk7mhSPH1)U:r1R"]l 7LٞŪnUr_+}_Nf1Vo0./iZGx%*h cd˜;;UR7nJn"wa a%DKOKsCWE!`Ӓ)>)$M1 7fo/,r, Bn)u߬7l4LX.veadppr%GID8M\(r \*ŕpeXn!7[C8ZSpZk[WO@Vz)7R7rS"K{'k~~`جX%&Z:u?_#Zv zv3{LWMp8s  Xg "[@!E.y@|%yGX]g} ~So\ŪC?4/e[ޅǔ^ڽ?" xm8 υͯ0eo*_Б8>O?}YEmUǾyo7sBCLK)J1| )~=b򁮦r$iFpl[SJ[A]OНHrkڼN\[I]֓{JO=;1.g^'>9ygJRgPo]2>k ;K?f_=n56Vr\ۇESB䷉? kB Kp.xeF֦iibp~! T/6_85gwTيSг S0$f%DDE"pwgdB>m gjӋ j`3-4f5%XRe%ҜRMlm,li†5EW ]VK~?ۈr[{-Cy-o|quje q3~F(S,5刽Y/q˜ q^-f&Lsέ^`+GnGc"!ư =s06̘[{T.MC؀@[uz$+&ﵬ-nm﷮-eU[Mmz32եsvnڜ/l+sZ/+ݎ6M}]BskkJlmM;zPP{۾w;BW,XV[^Tx_sEWRie'QC߳WSmuPc%jEDwl畴p=Q{=iY[O;OČ:]<>w՜tOdTM>i{ dp.L:'qy=prm0ꨧFx P{)Jutz Wt6,;حvQ s6.;>#XX$_6㞯QȐ]CC m1Ɇ5ћ;ڳ܇. So>X\7OJdk{nrgSQ嬼Y&n\WtאG4 m1&|*cUJ55tmw_"+m{྇)VL{jQIbݚraO' hS)B//\>!m_2Ui_T.zA1r΢?Bs(L'NWTQX1Gb6aњ L(ӀY(ØN $sR4[_}GKwaɧu1{^=z@p#]th[x70=o"[A v0.඗ #^yo8~G^ D   xApL"Y~~eV[9*XC-4b:w^289L+ͱp|,,K’.Ձgݻdu 5k{޲1,;# %m;dN9^zwwy{+b{5Ro G]*D A E c ñ+G`HM_-v>'oލYJOv2m9f^i޲҄ <%*$źwI0 HL B`k+,X=#&Fgwyq _'޸fGTNe՝,WX6F9K.Vb1Sn `kX17U4R(盽}R NovΟK2VA0K `96`Jpѵ%|]B7_^ɎW^B46G ә@Z^E-ȳH` r]Jmr!w%٠N y)&b!*6uš4⿨#Y}hyk!$͏ԁYGѣiQ}0]x̾ޙ+U9:#`VXl䚽1;]Hm(bVꮬo@װd=PX럟40SVE>0:*P?@'#U{MV 3%+K*gF,N]Ӹ퀅@-,=I֤a Yl%QMSn~dS1I.mYJE h`L㲊O^OjĖc^Y- , l .y6:8j3 XFRd__@+__ j| 4{?ei4 ~%G5b59_;T @x!YZgP'F|4KE^كp7 jro5hw _j6lx1%!vj"`ԵI3>k:(ar';-xЃxއS| Yٱxk$"^LVRƛP #'XaOc}\~A\ 7 /F%LCU@l7c9I@7<_C *GklKUX a6ger -U%Av|U~_v:e"yX9ֳQê\$NB*o׎V\/=@l`N[RE}Sxti#ՠY4mKѽT= ?-z&=M{o#;s=W''`sK{Z}o{z]׭ۥٿ4j#pTP/KSe]tV&Za`祡8U)zoBl7ScxZ(rNz2n/),A|l{I~ GX4"8-ջ@Mv(ǿ5b5>3|7O7ɲYّՀ m?c)ahlXeM`8Br{_ $9`.[ H8Tr1K3 =9쳛>gfN5V\߻㯧U.rxi[bdc[x2o6֧{iGwΐU ?^^Ѓu\2NI #7 OEt7)vL!"dvJl$q3"W禽}f<8*Αߩ7u:_Y3foL)E'ղ 4 /V6u\5v sR7lħ\N^Wp،5rs9`vǾ"7-8 iaTlruW0_x)#O|BflGs F /q! sF9o.Wq{-oJ1IRKz;K6bגU^.4X@'c :_vsjaY|+}v'ԎPd6lEpTuv?%_=l eԗ+K-bN,ڄ:yV3=贃YL-Byᦕ kroy ?P}ݘKΧuW vggv7rZĦù4?|! xr%^x8u1h̢?o;hdE!~Wo|le_Mza%b)F_NBlْF`Tx aHXhLy!J,AN^Q@8ABDrA:y*u,%{d #nA0NnL^YP A3օ~+k19}Qu^Fh gHBl]x9m4+%|O2Jl7+{K㈎6Gwb O:tp['l㓷\.u2]?~VЎ&ќK2V~+$mWQR>L kb՟Wu6Ԃ[_TÛ0fhEzs7mSmELRA`ݥr/ 2GpfߚJ%/"ed'Փh ;M$ ^60xm:*F(EZuJ5 !Q@G^?VenJ_>epk ( "P"eU@N+ctc(.P%5"։ R'y8r ?.f௷I;@ •f7psDc:%y5^R27*!el Yc8P? *b57\#.cI^䯨3pJأRA 7D?Ouާ٨ mfq#Ijk,:[Ϧn ~.!{t*wOODxEbYVH Ss|Bd+s@珄Uߋjs ż;Yž:~8[!^yhr|_)#*\uұz5 5KqpvZxR6ֹ(Qy4٠G$P ͭ@%\TR)ngHg@qcWL)wtGiiKR,;<:n.*Q9Ye w'% ñlD"!% O/L99=M0}fQBJ3} 0e_QP&t{{N݇3//22tDү:cRbYu)#a$ ̯RG'jH NE\f_h+HǗk - 60qL7psm-ͷTsidB"o"Uty/_WI!%+2ԇK r]HjN'QMd<1z޻%~T[6Pa멀& g# A;ou*+ "0~;u‘ vB4 T (ιx(ɓP#ANNJ^р-]FPrx)tdj[2T618jCsDПCY?9iDa{z}\-#q/v0;/cM潝P$erI /A7: 6ÉW^"w W̉g͑8.,ӛ}f\^~v }fh1NX nlxnԷ6|FIٱN!fZ@3 6f|38.2c=cÝ,t\û^:$21zHD9ɜA; r\KNiBxx(U];GK F<˟"ŘSj oEzQ[F=H?U$vΩv^D\BBj}p*6QT6i-đR9 CUlY3PjY@(D2̇%xLN30S"!xB% 1]*MЅw1zv ,p}5E! E'5o˹18EǦ$T=D%6f-#xG3ج++mŊmSbHm4&piK %̥dV+',N׋}w${ Kg磠9آQ̌7Hw#IQ[EL*Iy\jHU1J= |̔UVTYRd_L[J]q&1T}Ѿ^/H4McTiA~-}ZR)}|-$rJyziꥬ'uӂn~Άv2%ȑP6BkC+Ŋ>ցG+k=;.̍OJ"ݞҰ, s Y-c IUNIEPɼAœϚ7@.1 !:%jVLud1 S=Ѿ (TG# %I*Q\BQE̍ӢvIZ0`x"VZh^Ԕ(o^iqq6@/~-'̑b*߲f^T/6qb"pI`7N4ߦ1%0Ot=REƜg~[,v _˜K9K 6~JV-/ÓOZ]=d:“ ρJibgH2*d#X!F5/K"k훴+rL(LqFq*/HJIj [J2߻Gor'˻A+ yC3L3/|XW{hhr @*lcCSr8c&d%@qYBj|z.یoPȥq@xfUQR|OWwҴo^Kǂ v; 5SBEEd=aGxX-H囜 =^Ex#d|\tkRvil 7ZֆSO8XB#+Ʃ1&%+. |X 4I  PŸ/:: e$/hU16r#N'*j5L*FM^Z Qa!b8TMY 5c324+͂GFV u\ @|E,fEy#aN|3Uq v+eS.xyfm=zsLhH!mY.tGQfjEC ڼ-Nppm$Dڃv1΢S~sdX~('cV?#MiR.]PsR y#=eӤ&kyK4:Bp~[rLt6qVPR@3dY_r^jV=alE4K5G4~4ړF,!Kw9n* 鰐HZylݺ Β$ndiKV l;(;57;2Dr$$r?)Eb.̚, e4nxod@ChQKut466,א:B풴w5Œ\ dgU+Ѥu*/{DڴQ.o*>9@]evHokVYӱN8g`Ytһg"[v1;:^퀋 W5ה˯7 P>B|RVYLV \oKeDBe{bk[1*\[7H &DkG`a/3vb7zS-.PG}Vk3ZRj:%a U%!\Ab8%UkV)Z*uW'HaToK.0f+2PpZ7lN JT*F/Jm,ʳK{-Rp=)pҜeIg]k( 4 Nee[_U0y/riѱ ]hXGlBۊjuDm gi0(HkKx97:V]ܐm: i>VDNlo X \m/"؜?{*+Eq/WzhTUXMPԎY mR9j} VTHsdě32-9@hjkf[TS IR-52t==4i8ĐT{tGRc*HV]SҠ7RO2ӒCUnV]IMb] D>bvPfUpƢ_.!IaOHg!$cfNJ^*r=;ב ϹLug=~mna`#@}Y&ANܾF>\^9Kj̿mz C*ǒ#jYR^=p`n]v eWuſm]J]ԟtt] CĚZx3,]eb@ F7jv+q:/&(wLJ!7ew{貱oŲ[DRNtM5Plk@'bVx0ߜsydu9SNUA-31w+}ۂX60=[bl;2^mќ1v/gjBA75N0a&QM3 恞}hЪyjY3FLVN!pxZD^ȩq\X!3#U'kl6_۵4X1/Ҥkƅ zD܌‘q w1-o[W ) xѣ\gP]*By{.zZuޓDk.Fh c]|=xc4d+Ѱ 3*N/3Yi-{ tnn@Xn=p3HTwdoVHU ?2,;ÆX jr/"1TUٕZT\9/+ÅVaёN*x0e=Bp‡Wiy + ֊Dhh؀@%Q&kq&}?h<}Iq#v Yk e=r|]zqdn^.X{,)d }'@_ӞAavI%кg7t*j$̢^"MCv~‡D =}+wI U;F̰Ǐ5CTj( I9`ۻ2ǭ8-:[P O%.9D7i}l+0SbS>F` 2}KPV&,Vzd*N(EE%U y߇}[,j]+|NZ+S!fߓrCS}Qw K/ecH387qAC"pkC v4׶x׮/1WL`M{uD1LG%6{yAp$YxaӈN/z`G [ٶ^)!YtyQe5fA]"" ˳ F3UW7]{Lb,C ?=ۄp_CmnbQmv:}n-x~Bq31Եfg"J*Wf 0n}}Mqq9/$53"s^{w^1_a6aeqǞ F6tL R#2z8{~Ǔ"uJdE\ctcQPQ*L Lj8F_ N4ّ|6ʅyy JyTw1 }&ZYxP\GH|%^)CE8íЇ9tۧ'F8'M^!aVX&{"%x쮠k9M7coաb>#E٢'}rZ3 ֳ,΢lhqÇQ\mrU*?>UqXi5^| P|jƭU-O#_k(McrkZ{PDn(eUc49Dr5Wg /r<˟2dt/n7fpdw ,=F!FN^fǷn*?n0Lp˔FY"`]}$ YK* p]!*z l v i iԕtSM Pt1MNޡ[$ RloPy2Fz˩aN\>xW$r>1lq)A6L׮_OHqHL_Nr]R=S"cs+((o„Q2ʸ'W&B l)PHNIu^T(#>IӾꍬ"RA`OJ Vj+B T@Op^&=}iaSӔfo u#9zxJW;S.>B B⭗Ըu1:7@J/~*U<!QeԽ̍g^`C8S"&~ D5F㊵yϾ{ӏ!z\![5x\0oSx\}2j[z" #2[D>`}]e4Dt>$1Fg~憈T\ ŀplI(Ro0{NXacX"Pex><wr5i'$ u:2߼ea yfj,a<|.P*%9[n?3!Kȡ#1⋼s F?rylin3]mP,mF 1`G;LR#yzGM۫er@>5޸3;ho\*ÔjJL q &yFwWwX5ejѻc{84qcy\3?@$fpc4'[aX}%Q a$N;c0@$TN`_)bt?[﫩ą3 ͱsX zC kC WE*/PI.MvbcmVS?)78b!̲a ?󄸻R.@`J^_%!1 wjAXQIS|90]Vb>ɰ7iO\;s_<2%0$xV dLţVsnoB|VPվ>\bG !nZ2n8ڄLyd yJg'b.ds{yE:{hpg {;71ObDD7L3[Yj/U#$ ȯnCZŮca`ʍ-q!xVV$\*&4©gc}=BqŊ1llL&×L&٧GPZAA@\MA- BT #Jն@z`g5qhNW0?Qs=3j1ǟ䜎[ GUh#ۣL>kܒf-(CVQօRoSZ1%9FA%R6cG:FM˹ |BM`n ԋ#ALGR!JL,ٿA,KxSfU~^Z|IeZE\vA^s Ɋ-xcO, *! Nb&)-ӳ2CoWQZ:$0;ѯP\_Er(]^UwP7Tw?H]ͼ~LF8Cl*WKr y2I&vt@2wț6K1`j%i5#ߙ&N]Tt C&2R;+ !z>Wv8,6xQQEw1%*e< W=5N`U˓ݼmd@a b*ҥ?Pm{Ǜ=A7m3;Lnذՙ6 K1S׷}X:d{6&>otPwD {=)Z\\dk}$tVCqn]0zƥyٌrV/"ĕ0][3ue7ЬGQUl^i؎\ǫ1s +܌,*;:D!@DpN+^+HC(KCQ0ܝH1Lka"\fq)frzvMpjHihio Cwi@s"L&:1@%waU!SdQÊԅk}LdN$A_!mG$<[|ȁJJ,+&$OVd.vI鳖0i7uFTi(3.CScs;:eC?;3h=g,gAkObb:_PoQ'שd=>nO^~ϊmܰzM,ui jpЊCC@zsῲB"z\7DdPz/ O <JyttnTwD4OX4Uzs:bTO#Eyj :4C52RvVE!Fx蔲҂&jWV%cY)Jx#6'r" $9Obnk`)d ZlҶSJ iMa99Ѵ3_zHJڅgûvaG=@&1zfry-p9]",ټn 3XB/ycSH\j NY V?f -P2\ls }޻ -/_6"z^X8Ǎ~n4h_Mbh+2rEf;wM]D  C^h;E(%7lmבSOqZX@Db"cp4 ˲#a Kظ,. `R7o:"M )d6 Tخ1aDGЧ[63k'ߨL"-'EM hRhGj ANYfu\feS1'.T]**>I:j`#f* tXr#g'"Xoh:,ij3qtMn646q^P(Sgb^/<.v ̻24$㘇NJ!Ê,έ~;:8=T*;Q/N; sUe׎kޔ5zhQs0MbBCaקjzbw_Eaݗp% =`ވ1@hwk;0w_"CD>鉳;7a{tQV8U>iZ_əT !~hpgsB !ijs@Kj+B4%xNj&EIP30Fy%ϫaڍr-MֿFra #IHz?:w{SN"uR[[zȓCϭIj ;WuEcfFIAwOMzWi<L;;G Ger2kMvDzn¾ |R5Q0履HٷPSЭqq'R'*-wG+-A[q1tO t{ȫ5)H0Zrj?pDtu;{ 2e=eݢt0ڒ/y@bEG,!Í[0wĬdZCsy0ojYwU9')QvTgmc[ѼHmb%ndI?)YX*Hʊ^2 |X=M= ٚ!Mw*x< l=rNnB Uq[GzZ1EXnV8 DV/A@FzLJΓsB)P,R0uy7~$ҁ룹2;3TGG싶e2]Th9~cHZ^]5vDnuK"'E_AFp怬wdgz;<7xEiiM->˺ DVMJ_1}7AߠcU]2 UY^[p%R=̧%V1+4+l>s@jOXlV(F1lKp#n:&aXD hGFY#u$:O c%]}Iȳs_0K7T"\>H+Tx*Z,ѶRB79e#Ԟ)6wr4D&*F |`Jizu T^Jse߬!j,>!mZsc}bS3ӭPN!K3ᶆE&nTqZn}/,ҵ5K faݺ#js;'kFCwA q6}+AJօ>d\Cͅ+# ;S G{ogٞz\alӏxDhxvU[1 TLw)'1~ nYsUR$?.G2;)ѕiȢ$`a#gs7W҅G."+C豢aU2ե&'G|Sz\jc׈^ƯZJL0b~+`s< EpcM9w^߿} ,\S92S(+@ؔBBJ4PP[. l8| V!s>iYb -.5CR>JUu7}T͖cc%=sW5yf} E.C'0.tt7I !eiOh&+І2Z:(4YQ _BYSlqhD#Ń@qnE׉Ipj{uAYu UVqd@7hNĎSH¶ <\1& C&ܴnw;$ ]'M/m=j(PڡgEZV^R224m"w5,z ^^2pgCSdSGc"x=zz*í6utn4gƃ>~}^'0sw^pK /դm՟[eWR |O5A3ZV bT(9EuHť2;Ѥ|&W5/sQ`  $TIjd˸0V/5%/wĹoͽ GUҢ^Q޽$/)ۡ-'HD7-0@jaK.cZk< | :űkR SU.6øU7AURBQž,m;v6Ns•π_{EV KYz !aHۖ]0*tYO fʫJfvŭYLM6(U 2~`%cu8e6S 7VA"/Ae7noH:pyA2C_ȟcˣ6CnLKǖ.KpIU%f8=N0>̓Lu2{p7>Ng;G~V.>ꟅmmMՉ 1GYi۽y?>i#\6H"V9͇4{4EN#;E&J_'"wUGz5jOPݰݿqE|~ƠnV(Ґ썒=o͑xyϙ2E0uȟ*V f3׷QDEl>;%όs^~8.|erӘ X|q\DEc[YkίA%?xB^KS';j&}nBO"o6"v׀{HsQ7Q_Ob^Tn*58o͙lܱrPjy| h,H`Fآ\ї`$sIiDoHh2"C&n>te=Xυ˸Yyޏm $劤}N6@ FҒص1՜d0$ =*ƣ%{H>͂Q>˙2 f3QB]Ljxq#,A||$Ө5X.a_6+ 4U_HtIį$p+  zB:@0?{Gsث9ݪL1-H,X+xA->Hb,gC΁UpHm1j/],0މo3]vڰ5uwG`Do$Ֆo{6z+IU5J8LUQ^ϑ fSf z<^ [6chbbY&pJ yҢumҒ-Jrz|F+3:F 3j(ʛ5kL\0GnT E:2 ?|etS!*rR7Ck#Nh9Tѫa Rd3ky7_xodЍ0QWDOg f722ZOC6986ľ-&1ܨQƨ p hDs@D@0̙6X)im9gx_}=/t%bUHԭ].aV`R邚u-?Zrc8Zb6$} tD}'ҍ3rq;+vS% #THnxBj쪼6+MW)$(ՈeR4npLfzNR15irݮjCJZ2.}jY[ i E?p> k-JBwBj Ė"/p? IfCVҫB]لϿ4Vr򨈄sR{#O"2:׏};5!Xd%L1qW&b.g&6\LJ<;^<(+O6|Eg t^-qm $vļk1%InNzыhPmd,}DF{ _C?]ZeKqQ]sMP^y()4s3:$P#}}@p$ ~iOtRRVȋoceC<\j,\D6m1}/]5e+P 7c-0Z_P6g; p`LPT<#(XI SΈY\)a3`0An&¥h6dRBaЫ .0T]X NHzW|;4:GERO9k$)ic fFV^9 5=J2 w~biRɶ ݨ사_+]!˷I#i0<z;xLԣjcEgjfQ)aw' |79|sWbe|kqDyh؊ѕRݴ}@\Yq&RNlBybQI䴂4}r>,G0/>{+3-PW5",WHG2G?g !ǥ|/q>KoiVcU7޴t]!R"r<(tB*U("y7p #LL=8aHtJ&˃2h֐?, yEo n29RB$Z1 "J!@#ߖ~aA@RW ε -QiL JeB[(丬iLcLvP)׮#9 YLr'naqݕ #G"JwGIp:)*ſ3َ/~':r#mL4 (Fh',ONWB0HET! ! 3LV}"~dIax+ȏFD+4N#[dF;N!HZ.c"e 8Y$%ЂH.߃єM0@ LD~@rñׄII*^B]u~,ӗGB`>G\ᵋYesdόQduDãqfNBH LF:7$IA+ V_bIoKY'- ^QTVZc@Dk ͎xE%*nL덩4-[С ExBNQ0ag¡wi<-E@y $P#$A y96@D˂/|aGS0JK:@+#*EӖӐZiFExj!*XouNr rSf6.&@e֏>dMȲfg%,Cex4v%JYlʎm7Z`Z!k~2AP2}A#uqr< Z+;/^Ϳmd;%ì\Wu`MZ ?uQ}E 'Z}GI`)ٜ첃_CSUhmM^Pzd#1)5_;p oEhһG.̬O I%~ۧ9>_H2g}=46 "T?~MB.Jx{Iըw:0dhMt b~qDSVTV6͢Kj+Nd12Nv@'U(Ji荌.7_t+4E $\eb[Ub@qBĊg`O5P:F-F S=6)y/q}0&3W].ۉrV(8Hw)_O~޳Ol`Vxkŝ 7RDmJfTOoV *D(I<#|<(1E~pw c)&d=[zBg1uw.7̖rKW[)qm,3o(r U&5i.-1Լrgq0A",(۠1I%*0@UG0G 57Kgnıs+n^+AnU}m'uc*T16ҥrM`eoc. 9̈́UqX_(%4"K4 ts({K'Go+>՗BmkmDܻgnVT;}xm!0]vj ?j`z{5 Mc_ { FmEͶ 4-58MA\uDx: nKR}A5 sVuy c E7.ʃYDɦB|&cG)*đieS!1ؽ!$A %MP #kyv#õ*l[E$1ZƬ I}!*V{2Z q.5]Dܼ"PiaBzH?J+MwJđK!Zx"d[xPU:Y ~zy!'uѣ|D-F^&@!U ,cc8k/5|&3Db zwq/rCT&ĤLJf_.9j?U${o*|OQHMd&ۭlGJ7o vlµG?k-j},i&5QQoiBGbv8CMa$~U/3~ #aP4/%^2GA|KP*%M5K:~!w3q+@@3]HYݱ@U(rSiQ˶n)o k!Ͳq;*o1=|۷{c<_ (1xm8+Q)3` r=*~L3/P)_Vų򓊲nҙ(پkU E]')͏flƌl1+IyяI=h}xzs[ّRtvM֨5D"7HX -q셞stiqvHgk>דPCH vTT p\swo_5͙8 a3B{sc^5 [U&j y"PTv|J)8Y+DYCUQm7\zgZXi_s?Zʁ^1 '^eK %eXw,I&Mo!7E|Yڰ.YR W4 gA͟l>- kFJ<=Pf\"Gd>y5S2멽fDH&0o9{"6CͫR .JBOJ~{ee|R KBjW|V2i!)Ijn1`F~DY'P3UxB;ȼ—Z~w+d |+6Yg|3k_}rߠML®rQst32w,M}o 8AVπ37<,o#5"8'xS'B3/ɫ꺡)&Kk|Q_9XʔStI Xo}fɅ5{*(;0y=10~p4e.Im[(dћҹs0.<ҵ^I}NHeeL6IYNņR=lt fT [cc*iŨoN?FL s|+K<%N)F%UلIvG3[cg,F27:k.qb8ivW{,^r:݌Jfqh~Znʹcɇ0)VlVA9i6S1qo |8X]e-XvIZa!w8-ry/[uQGF0O ue*o]y1׻rƞhKYCH7 cCMg3UeY:&ҖzD!O)Ͼ/ F\k٥Q[`2ӓ=L^avI$I /́Г?⇝dQCVZb}j>3AJYDQc}UYOÞ ؘ[Z[7l'0ǼyOGoӹ?ECcy-|eCObg{kRSGx8'!~@RSJK.7 ${]ɔfҚPNz cNOV8E96o88Z?%lϼ χekaV*utz63^֘YtB393:ΎK7\f`Э[fPf"Kcc-Z<[bDH] $bѵ_}1*\vXP3KIdkԊju_Ƣb/Gpe` 6mBi-\xJu@RԿOI\|;'¤0Dn2r:QYub{JܽI[rZxOMa(^m=#r"㵨R5;fq60 Ыx{iH }-(u lD1sEL➁NI8? r2Xb 1j~F:b2 *dK$ge?b5 Ƶ?\, dڶ~[b,* ?a]H . aӎ8)•Z/)'dֿ8ťXո;I!Lg?P<+DKѱ\fj-k6$FS.[bbKb5%( ѓQ^Nb+P:\rC/vnz 5?o[S{!+@"q8**s*p =w|ѻٌ3t =?lT0C>.xc*h +~31< F@T.+ZʙSr t$T,~C;)^2c04^ocS} SL2wp\,+X_0IF Gl^y=b8`ϙQwfc!wxBa_'cSո^gIs33W}?6͎ׄ@Q\Ɔx̍8nЪ ߀cCJǦrKw|q2{e@^8^lSW\^|p%HxߨT[Y@Y$/(fn%nﺊ\ X4{.j_m<<HnH #⭨ZwUemˋI  .TWNUB wymDU9xC/:^*a{->ԖL- gd|2V3(*]x!Igy@`v❓XKk Fz9TC74uPEtxcrR#*g:JE\hI%4. s^Gn/Afd%i em1"6fQmn" pR}z,Zd+veI` %/4ARqJ2G,OyB[`dV= /qeD%H.fE%s1hJ%cY|_U>l?-;݆wNeʹ5_+=qBujj{Y C{4 i(e# sTӑ5LFxMBf_j g7-t+om:qߛ0r]!Ca!jv~B3쀭K.6aM`v]~-< >u\p@+g?UOi9eX K*~INVc4y6OcNzN-kS3{ 7d$ $V:ONh8GO|<&ؽ!#Z ܽ7/ *n$!4$&Pckw)(sMd.7٨N_ϟ&,ܤLtrр-PdPQb JKn]`6boAGiUz;eg"^_Px(UUnR%FnR-wWc%-igR*l_KP,cGI]g"yg/ߨl)1S}6eNh29ͻ)6MEˏEf2,φrV:c2ސ׌Bwpn:Ó0ґͧ ڴ|a䢌Já}G yyak\kQQjTi ʬỀɥx0A] l9y9P_, ^hi~8zLkef[ubmlk6kIŒ׋oZ[[ ""y:_O 0x$]8;qV ...ܭRIU?g~JbdOp,Au/ 厮T\tr2M${06h*ݤ!%ˆ=ToF~ZJ2C Xߍ1Y/"ӵg*c3[Jff.^xA4 ۲40ר?LE;:B }y,RN䲍lA4YC~Q۴r@|.7t?:u9R)% bdi?BnWD i/V^ba#,V4şX[fi_%Vq M O;P?[R~\Tl/rOSO}_eqdGI>S+f/% 'Ocy H+jyahV#8i9lf7'"_/jHMm4cxRYKRGjI8sX j|rm O g?" ۚyQ*_2ِIn7!4jm|lF>.ɯqڜlep/B =XKo|_2ΑO3wq8q2Ѓ& XV> j L^&!( [8k;@eb&%~V}ų鿗 WY!pZzXm~,1K;.Z'e'3Zt 85ɥˆlF;3y[ƍߧ)KsQgT֣k;q f@䁃euqGmWGڹhxUi{u%#j)1H0|Adط2>`ݰýOTmj)zr7uiWIwwHP&ց |RUa#]SoVfr|S,$@e BW#"\I`yC?U^x]: ( `Qhׯw!;\6@Gv01Ȯ/lX?,( mP\n sw-3dg()7H7mylkVv7 lۀL=]„`m$CxH, Al&K晦nX+[jV5k݄\#X9jC[rjɨθeRh[E!NF #N[03\u9>\ԕ翠C}1س+V]A <\9 f]@f֊=9IAqj8Xt14|[(ļreP8lm5QDC3{R U b2u5S6;%跭+A?H W; u /$ÐWH@UahkN4&N< .'bH?D'X4fдz7-m(2h jGl߉-wnj{vNܸ R;[c|,6F| 6໢[e”@}CWYbF|#W숚5G蔽)% O} ۅܮU?f+wEtVȈ3z "UfPlۘwmh`)zfLyb;rB]%T~iKT^7 qG>;5qdy2%q5%X%٣^u d.eF}{cq܎a^"F!<4v֖\o fqpE[XxqB`‘ɨ5#F?0UiH뎂#N23ԬKg7N$_,i:p;}z#LΟ$#u4BQQD 4^'͚KM*>$-م$ XaNR뱦hlAqrU~D85~x`zHpURzuXP]-v=&!KC?;zZ\hpAkM5=AǪ%O`JO\t]:"񚝞 ڀZSt6.ehCW~:uʷ4=dFtwmJ*S0H$ aƕ11nC|r^ C9Gii˔s[ujWc rZ0<^-իPY)KDɋ =l!Z )ǷV GFxexJ.ɝ,n_ڠm҆c̼*υ']AR/_vq/7.N9Q|e պJ3V;pny3Q#x9oz6-* qKcY#DZ'_#!~McO-x+\I-Kk4/&hu @ZXqs=` |?AepRf Yer[*3 |*J\/vZ㰷 J} : ݩֲ*zv@Ѭ*Yڐ[Lt`h[4JɴQuk.06_j@~ONAقLsL:Ytx#"i^H/Un)&SwˎWŘ_cpqwtUKQ&㑁9Kn~EdI#4jMK}e9;UC[%?Z$nCH:[k qBkb} 7du !|hsU4VAjbh RXuoG8 ˁx'wD0->*[WUБsHW jdeuU>+қ aΰeΘ8aWK/h.Wiry!ȁ@LځH6YD%C@-|p6={:,]$d>Oj|C1.;HW$hlN1AFg.F6#3Po Ւez={lF0;NJ񋡥|3Hgw`eďK C ic,#iy^Fh-]l{douH~~l.zNa$FPxN"LZoz 5dV#woaZkrCy<-F(|WKZstrҩ|/%-eGNW/WB7eJG? _L@r̈́SJ,Pnb^5A$=YcXgoĘGq]^E$&XY0B"%ө9 ldq8H/ڹb:o7|3CO ؘFSJj-P(l_=O ov_]UG򁹈2]rhHX4:`67z C/E05`Y^Yv6.eqPwKi r6gaN#; ozfmIBT(^$ |/%# W;> ,m"8ދ `l\ Mq9ׄ>{Ĕʁ>e8nnAg0z]vUσ/Cf?Zm)g=?K5_-M:%¯B-ˑmt:9RQ=}%JޮQ[6fmD{xtB35I+d Bwx$zTCct5ڀ.i`tA5.FB8LLJGY6Pe c'Dc]_K9{4IVM., =_mAcG>؍AG@"0]VyBxVDUAg xX\.G q^!LHdFd5 E#hg1(,hLo;9mJnZI0jfZ8BpkUwtMk$zĞ M2RgnRiYN JsS\}ȭXE"y  $vK-yg̡GĂ.i'^8JZno|tPq7-gi-]]&j.}r.yXKZzm¸>s ?[oQ AAuȖn|ʗՐڔ0 /O%U*O=בt||yk u &k5 Ư渲7>NJ*C[b6= )9Nƾ#u:=9b[7 fOTxρ*7mdm)T..}vؚA|8ޙW5'[j~/[Z-Y!@F#bᙒ Ƣ cpSY?^(Ì,4j:\Lg̭M h*bBc;>y eOa0?o>XEEnAvx&wmF3<L SVmid8G4Z;?&Ĕ^?;1P`]"bT]GՒ "*r(sTaο_I.Qr~>#~p%.M5 }Pd+|L(i@)z\&ވwq&Bw>w;G1gtMQut֏r 0Qohh 6Ԍ SqC=ަq󈭺ey`0!j!++)wqM?h5eA9}0NFSj oH8r#H"]`c2vzn mґ%Zt j2[Ye>O3$P2`~P`$UǿώYi\BdBrfԸ OE*sݸtyX\5Ly T76Z}'PZbXAIp ".zg<@kգ%^coZ,ŷ6q0/D84,#uI.EY Yֵ՝,=bKV˗3W[/̍;O("-QTtƉ97K˖,6SVݢN?c0tth Ye|^_̼ R19~D 8Gёrr泠~zl' cwCAjDOK9MCӫD76@?+9@B2lSg}egЊ_pGxW+靮C"8!Z])X*,9 }m1)nִ7uu6؁Mv+)m?RmԩQL %Y/ tz&|>])ѓ !#6f]PfAD& 4([yy"XqwkyD?%Ҫ(xIXFcQYFճq%1EwIjutcG f)|+ϰX37B,`37@pUb :,yDB% CC)Q\w~5oKtDBdё?u VhmRF'3/Ji*Fx땩5?h c0QscW'[!ՋtƁHU@NmĿi ̟3 4dtllV-$F~;0M62݇bAWl|fw0eIf6tC`h:$q1u$ESe @[uLfǴVuFq5q$gJ.mW Y ca[cXcE`5uqvn}#w/9sYP>l p,";svWõ;;WWf6z>jXD¦ ,N7}hEIbiBvg4=m65!ؑPVS[cж EA:^ƈswMA63鰨:3'nf)m8ikKegL[_p+]m))=V3&2C)veN;G~8&мܡŇ2X,CęH۫d!ŗ Ȣ?wTਞα'c$kMMbP4 $t%5=v( 8SԝW ~Ű7el8eƸHMqWXCkluH!?0rnmn2fCe(=otpRf .6ř|6]eweX>=^yk9ks@9|oMOXM_LuI1!kelZ;xi$^3RFBr'"&1r~BNh#7fЕb)l; ne$(˧G!)ڲ}:8,bM܃ ٶPpFGfCDyqp9 39j??8x"䏹~RvUt|" 4 fW42Yvr*!sl,ObF2fE6Z!@݁X̝U&$]F^DQr"8\܋&^ѓҴ'89cݒH^(<C^!-GeD^ \Yzů= s'ɺ|ss=iCS8Ƕ@`5*1gb HN7jX]Z oj2WCZ>By[3jySq;xP7#`X_#u GZ67]7(!T_)%~[`^ݧ:ޙ',-?1!.g&MCπ^hAej~0Oqf|q,^% J}]}0όG'+dֲ7$1SiݷblPQ 0XF<"k}RȻ:k~?m ?|/>P#+e ז$2:WVcK[V@(D#\w%.N(|MGo&lȟ:}]B2[p|2tݱIv6=|ӞW닪Rڃmvͺ Vku'J2ISܤCONkj ܊eb=YڬQ+[STV)Zs~'qD0 RN=q?]*/R,v_ ˃~Hh hFr|jar 9 oɝĥƾp-qbZx.me䀐15P{qs4ziLBqX ڕF^Wf6cl>`[Va/׮卥yAu_T-Ơ?/_>[/kyΓqޥ6ڶ03BKZ'燙)Anj1.:R Z*h#=:8BeàJB(NTDʛ[[_t҇/JK38MMm#8|A,DC32N0ڒ~196Ѧی3t-|,1@_4"qk JNtD2X/xe?s|Ȟ6 (pP2|::sș #fny=[}T*Hk_(e(Qj() LP(fR~^).(^(GE}wC;P^Ne$2eR\;gy @Wh q~ngk8y[[`%R(8i%c@2\:n=7Eݕ⽥?Ɩ%\Ox'>x@)[^;w&zp ^\t=nt.hl le';IW@.J ogqmbQrj_@{փ CƵL59B̯]i-ā j ppR fnNHo]E715TΑۆXVQx#U}\V!="?J@H 'c=siP9ޟ8WYhEP7~uʐU pt9b;&*h!m-{C X*l;,Ls'̿~OANja'rJ\/e~0c] askxt$@Eۄ5 ꑪ~]Gx+4WdV5)4ɸ_]S&P Dƶ57 ?ôfy9GGD;9H{'=ca>'۫_jf޼.b*Fjʸӏ,qNw dF|#$(Zh|ox3X]a^$yS"&,'ؼ_?Di5,{;z9lůvLr@쐣 U8檐f%g- .:h_!_^8$鯳v]%':;3OWEGuk<0݁ưj갈[|O-ѥYrYUdA}5xPjY=bAB{F^G)hH|tMJ!qKc9W3{_b<)1Ib܉Hp_\XnOѰJ=oL>}|3WSכf@b4ꣿTE@syV-yuNEڲ2уSA+ G1(a[i/({(*?e,9eA%VFqAdΟcoeK3kkB%ds ?@En<^]EԦDYC:UA:5cGHQVs9[Ne|3J!'u % t|: r,rpo *sG] Ֆ$L3YnD~˳~(Ig4b%`lh"W ZN!\®_:~-R$\8]_]OH`oI X3=Vc~'>: 0~e}X~zM"E .-te6nh> (<4YU]i7f!L%3ҘU&#yݽ>r"1}TRHJk@\73߃~Uڎs'% 3ꙫ*TR*ph)e &I<NS 6hNigcʜ;lc9q%<8g%|}蹤cvrԺ*^IuiŲVmW`wtldP1P'?ZnwxC)א0)0ȶKСI6wp䏭aFbcGlp>0K{0ziVb)O`.`6$Rݾ VZ-,SΠyE>*_v`MXVEhxDH *Hy ʋf> Ё7̳ y\3B3]kHxVd9P]y(֝KJ,tr͋SJ eUݽmCDHR/'o'b86hD~BuHU;_M)(FI{WKOHO ;\@hlxDh0HVffdwa+8NpQI@ޑ nҙRDlF=Q#NY! ԸRR輓Aw H<׷ZYfAkytShSviH',l;_vu1R96OD3rsFh/`=@5tVʙEc,P:Ԍ5ܷ0z X{Dz*>í?;Kwp٧?8XjFXttO{ZJU-]<#`8ԕ$4nG_h2fB^O@=w ձ ȝNXA('on,ST¤M~tMFATht!?dƊBbo"ȧ< 'yCߥ b>E ^Â=0y4 lM%p!olK\L T0aCzsNmZrj \QN08:d2\jdUAnԉ+jhY6.)yfB%k x/BnJM\͚2va ڥﲡ?JsRg'+7(Ox<`סDF2hIztS>a>` ^ B&xO,Ϝ1f h#}EI)}Su N*J ?ٓd0\>/V67ǔ*Lghxσa /Oo"ǙX1^ܜsrQF'.%/$ p9Tp (m֪N>`RT0I[h4^oL=OmeQ粷wpb+)\F겸 3$j Ŀvl=pYY 6bRLjrn"4=+gr )kg=Zh6qb+BTNK}Q~ WOc+3[R7?ҖR` ~“oYN1SUjZD[01!58dža<}!$qi1}KGv ~,0vIzf<<&ܶɌ~/~~9p`bqMU[g%/!ve )]_Ro J r u/_ (paŋ\b uB<Z7%A?Ѡ^QЏ9/Dt(fQ3RNk/zBG/,'#vC]³5+(GU!O#G=ww mI6jEh'ɋ+U7 ^wދ8ZRfs1b[1\WdFI3/1ެw;]tt&"鸥:QmX cgOɴB'ل `u2~tXM&MEz::DB-֜7=:6*r$:FyU \*o_gz F3#;2`\4S#2 $$M^^%WpmzF˪nT|gyk=sNGpsuTrPe%u"ea|nNAp02 Y g-k\H|->Y L8rj@\AI~Z5?hZk1.A>y]$`yz%q xCdx6W7m 줗KU|-H ԥ0k.hgZhs !W4m:*yz,_2&>ZOrf,8YR)/.$jY3rqØ1'WOJZ"2/$1N{M)OTdr&dp2ϝ 1dbic>J?= |Yo]nGVgunZcG$a6C1641c[vCby$f}9&sǪ %Ƅdz3(^x)3^sYQy> W!A>戼լkw/@<& h5)[ӂ-# T&v1V*5"ř(VsUlRgmA;)F#s`wRS[r5q tځryڟi }#] ;7M5>7nR\䤈-M4ٕ9t^Ơe=zcd+=QM6ڤoa9 7Mj\"^Iš7>%)I*4~6=ѻGE_%skFCQ\7i2si1?h0:4Ig #*A:ܔ]Ptw k|.[̿>3VD%&Z:"LԀ!$d$ wŇ>]-t<ۤGk$G߾f@ꪑנD-pK|U&N9]DUYւ2lJպG0rRTfebo%"3rG$M*T}"gy}qs?9:.Yb-R2GE_/yYs(ͤ# timdD+퓝JU1tbϻwuPB. h/q 'kN-H Arj@.IUec=8xfWZW]X_=f,Y_8Fy'-15ö@zOd5{^ϴyɷAdl\Z ^khh@lŒ c%pK7 k9.lbiM&3xFVbOu]gɀ. { ӎY+-%؎ GO"D2-GZQNT\"#JBsn  aP+uPr R`+b_@G"?c817+j xXYK8jr`^y>EtO\D~jB+:'v9p+A3Ƈc~&.f}orQ$bH}evh[(c+G]d #& S-t+6T;lQ E UQFIEAGAbE+вO~OfYa8-kkOO#o^ˢIH}. Ǩ0;D=$<ԍOL hɬL}nB11.'Z rE9.;HM\@WFN0S6XwF! ?tiŴUoyƸ[X߿usx(oaXY"Q  6y|&@P>vqnB|]!Id Q1Y&{jE:%(UPu,͛"x ~-lނ'Hۦk$W88"!rБ)ҢVsF+V<#-NX(,TǦ u">"=*b y"^2JF KH-eUe '³)lSGq)2wm))ȈgJ|2:U@ 9M ]k#ȄꝒ߿"VZeˮ݅ZQԟu:&tg!ZYg26awL0mws7IHo0oס'i S{n~ĚMSNjs.cwj,}ơv=\CEQPZs'2{Iz⬤`UÒj<^BĈ˹*cS٥$̤Zh*a|v,YAЖj(̫dHy d)+eqsVe%cpɋ%-zT^pgΝE<#,9O+9j痕|)u QyVHfI.#-G!1Č#Ahӓ QsQ0! Pl7HV}!NazCIr!SPmѷLXf.<ߏދWGx+}3ڶy_bHtU͊kz2ڦA&+7)J2|mó9䍽{zmͺe^ˤ`6H\8[9iF$1m 3̇/4ϞOX.kX.2> b>% I[Yj?rGIɑv06ILmAEN ְc1a6i9PǞj\a*RQY-6sV^(ʜ(Z:nM Mx`<}61i cȏFoIf `7h gON뾮Š!h6,z  |^;g'v>܈g:F c*$\y'vFm:1v!]#{z]Iad^UˎK,|I*.MMPȈ+,۽@73u;3{@{p&!g~~Ŭ-T3A-̟hK%ߊ7T³1.MrCvv~CQ[xj;n3kZW=U<= p¢ ^{>89n Dvc*uy > X((˺.sVe ͣct7f3q!1;C5Ν`lRR}[jg$t8?+!9| kѮ/xcmFr}Ds-"N)ĵsO圭GZožfY0p -Ãh,zwE>^ } ]^.͉OskRg#e[lKqQYT ]j:kltȔ^<=\\Vڝ1?97q=Cs,dMПghNj^eSǶ|xY!br$]cci,% ,]ssfT(5sX{Eʜ}̡oxX<F(^(ioQG-aĎ :sKG^p+LB+1;ϪAY=֍ YebPV`Cʦ]VMPd~:[qQ)?QUdte-VW.97.9ݔd|[}o;U=^$JQۈff:v2W')PiC鎾CE B ؓUt}~qnָ~hة++qG"ԙĖ g< j;&lF9ITטmkT$*nxW/ aWZHblS@2/T</]áwH(k&iAz(Z .>8oX,һFپY_SWz+dQKfn)Nm. 3 .|!|PR Ѳo/Go:K Wj|B? 618б/ݎp"\fd_20RiA4`E%%_˃2YVxlcM\8rW8nR-s,-7c' y|X/„7HAih`dQ5Ap:s{S8@Xhz%¢wepk68FM?}v#r: q2rL&~Bѹghob~j Y%X"6A_MɬL@d/P.?tQ ,,fP1NMy2*pMag(x _ru+Q)n>-s}KHO-86+ӉQZw[ݬRm֪Zw<1]1?# i"_ 9Y zz;UwpQLv=F #E݈8Yё FbV#' K̮F DCp EImEu'6m_<&(''D#ak |Ueo}_ 1u{j[kgp0(=TAbBr>4t&HD#vc9ׂ+q'o,tb:Z~KQUGQߋ"PYtĿK ߘ, 7h@{@Hks>AXRة GC({4AI q^'i\. lШG׶ߵo޸vxiors~t $^Wh\~wDy>֗/%kyң*9ox[n1`zDЩ7#_4O5V7-wuFE<ߎZds2KA-DPA*^ViΙ ?ׄҫZ/NIyN\0$# Y+!ϊ%x F|>oɧcҽd D'x׹4~chi> 9ƴ-O"n|S@8tó3uޠ*Cz >}P6h/%gzO}ٷ7Byӎ x| C=(N0w\OM+Wt9ɫ'Lԍ.Z[N3R'3t\ƾ(<ǧTU>jaa ӝ}sA_AŻPfdy_car Ne&QInqt̶qWoZIv9wXrb3W fF󝂇Owe$$Nwk+'mim}1RRXszc:L$4b`gqWP›^ͨ/͠T(8?ahܾG*3 `^ bdi.}Xv#GoWs'?(A_obWzzx9$CHx>[eekv~YXIA?[ә2w җT}uu`8U#JB'8$JE S\X)V122GzW 6-^/z}Cei4nS B,{EMlv*eG_io?} z*+5> rގ F'y>COY~үY+b-6 ubm=.}˃͙ZtsPb\'  f%`y{9%sHy33mp88f*9ƧlF&(>:0E<7t/WK)#]^KQa&#UxD^tq"*M//MHv&3<٦ʰ19`Aa[3O =tBVitpflKI?'.U5=N[AR]p? :!&st yNsq<=[;߂ajS=An&N"/{{Bo>s7h\0>=3] $n^ uvzieAoA+UV, m8?[Qg\׫􏙀Y(! |=0Z:%ܚBؙ *}0J opxC{2 JkCJ%c/?2. yU7Vo%caW[$+]whVz텵%oxqJr`6޼␜~@WWAiPgȑWE吩 ]ꇐ'`f bk/ $݊'chG6oFdj#?{j:K'~#uFf z{֔" }][)pZQ/>'xl ~ّm-d'WPM@PpY/Ew2@\?h-:K5F02O֑ŷ]zBZUzqYޜru 5Ν^Q=c37v쓈1k_zgnQ#TqdߦCoI @=A!ׂȏ0?\pnhK#R*g owl=C'̹YY~H6Q rns5z ZA\GƠ|yqq?O71f3sxGKqSn n cGȴz׃vAXf%zl^ћEP:o,^x;~6W3UXdbϧ,!; Y=*#ƴAqһ=3)0JZI !dƺ^\竴ٓt^јv6QVƘoTg'P1ʋ천1ҕsݴ/Ԛ9BfydݻQ%A#\Z1P^[ufuޒnnaUJ1nx2h{O @Gl4oϽ'A_P->#}5[qppx,,TJl$nC/>Lܝ30mPk䞑êF,14-6m>ķ(`=Cѯͺ o(3^DZIh"NU>Gba1Hd ,q2(ɹNU~M=wC̐b3 05ns I2>3pwzۇFs}|Gs||Fil B IyǷѓX|{Htz#;腌J&,TOu9JIh&_p^,;'$n]0S2ac\ mㄍ}NUq~Ͽ(LDng^aۃ,Ӓs5-p3/>:8Ρ=sX:g-F<04z~]^yѡɜD&`^]_?IVMg֘ExI(a3Zn ړ){RH"3j1\Q3S"o(mJgQ^ hf9bjQhk}ϝw(}<^o_cw]$&{Tsb*;?SۭJ7?O57Q GInKwm9,t#;({59G69$BVuY_O֚}Eٓ2{V(7!+ 1 ZsGvt+@\༶qys^އJU9ksN _{u4kaSQXv뛾ڡ:M9>ht zSsusKHr%2Ԩ+ӯRBݏ󴯟&c cWݎ_1 6RĀ^nFRb`N*" )hp*3aN/́CL: E0wr#\*iFaGbK`e-3AKyK;_ȕ KoϟՓ] AIY<;c~r7;)ns/+p_<_*{04Ο1LN FE0D~tĔN.\:uz7~ 2K\EdLSj8J3='-"@4/GiR, Jp@x%2h^+me&QC9+b- ܐb"ozs 'R*M%"$˝Iڻ]^A7%Lbح Ejnsyp2VqxMuZV]&RXFjT~ZGhǍ]<2ܟ+XJD{,DN$GAxEds Lf%2д >nX'Oz ̤(*S>8A{2Jq)M↵հZ%#DV bji+QR_YtezۡhQ`>_{"QPᐌy W5j# qo/oUrGgm,STN#LpL1hOh4t6vpt!bqL|ÆcO.f:w|z,8:j閽)5z4ˆd^Hx , b"dO1⦽̩k6-;:yfN/St5ƹoWl%m~U"O߿cӺnUc{Ahơ<ݳw-ːŢ'ҟ|͝u{-@m#z6V*iKc:Vi(!w{o#2ߖv?qkvg lI9 y!wŽ՞UIn<}uE53oƜ=9uqXӡq{4P@(v0>z0|fF[1L^!;3i-ݜF׮sQQgZO5jDho<Wk$20i`$Ƥ =Z8\oR%~j#xys ]L=Jv W ~B={%CBkm9#;ے^3|׎#۠dh܎x'po^[ yTpH$2exT(zC3*垀[|'y+rC$1`}8p~>_ H]J $omIzc%8@< 5w.ǔRN4ʭ$bُ3v $.ދ'H#+@[M?v6q?μʂ姃cw]EJS7ƈc6;gxzL!=QPmBct%EۑS1L[&"eP2QR]]R/Ecp7&ϑViHˋJO]a|[ enc{ɃV4Cr@S 8N>aICUyژ$m;x[) haaEؙqyn޲I\9r\`oY8}qB5qdt֫%vˣZێZ6=jA.ɶE?i?Z-T j\AQߙ3Ⱥi({; $ɪ%<ܝ3wRҮ'a@~ ,>ӝHⰚ]:.(Q2bsiK2٪hSxcTySVgU8 74CI-=䮋"|WOrjs=t-&ABw!Y(>(-ڥӭ XtY#ݙK5Ƙ00BOR ;.U=hϱ]U-֟8Fl>/i8ezHa?-6ʗԪBP*5(O/#@9#hjs0׏%V.G'fؠvHdf؈\=ϊTa]tbM4a@!az!a[{f:X1T1 - R B(g 2y } 4>u0tN/H3u*(e4 x35YjY.'\9N1VF7YHȔG2R2!L#v j>Ekf!`\VYa\5t팡Bn0dh$kPRΰUls1n_?G> h`֞4 AU%#Faj?m#{IDwfθqfYu"[(Ay".Y5 t` v(ê$QY䰜{Q sMvVv;ֶ*vZ4UaKU@ 4d D6|IWL1DC)IZKcz]6~)!Jg]p9&ȋ>sWnS b:TWrR|t][&bj5)SoQ24y;)zHUǔ#H7nTTZ,6 5#dch:$. BZck=w3?ԇ /|g0p0Ǎ{jiM >VY-YNqg(vAiX1V l8NM} oI>1cݘA.r 2[]'a/K7f9 8+6T?%VCʬ)̟DhxD,L4FoJe#7Uq6,m\*ul(|-8+:*8X<[L|92J5VNVl6uTSeV&2R A%v9cc ~eϴ~@hGGu+u6yz]A0;RB%BP`2dzʭ}wk*u˚Ck{m.9sɇ>|f,#)9楁j+KۈowQ2蘆ܫB{}dJ^H:T Aeŏ@ܖnM|^+'xCC_oS|"qގH(#s.I [!]iW4zUV2 ɏ o.:;%F͓>ҷ CI})Dz,b)HzgIfO5%oM#IEuJzI2!L*Hr wp%x~kЗ0u#jNqjv8pnh6:]FNƚnCo:fFZ@Q;M7mJ 땅 "ϘLa{"81h@|in!9i}ſCV8Pe6#y5FGRU3\2)wCcrt*d(~Vh n ƬG着]SP<үs| #X)Y޼'|Ŗ'qoh[buƣjSE)V36iֳsὁ,[%c.<! miqHg_1`8E^2\G9I]qUZ,- >FߒR"e`vK˦UFg[[\bcFM!Fol¨K+"Lо &.PݪݡST 6’VcyKiA6ຨ 7oUt/a`}! /qӪ1c2L_"֥9?gb|LGڇ5j1ߨslp6vv4 v6ҡjǷW<d5xr~' i`NzQh=vrNsxU6L<>"hL%\W?y[apDxmT$j>c,q0aˇ`6'0ږ+KB.ˑh8)nrR]8ٔ(Kq:l-,v n?H5kz3;d`kK\+LA,*(`E,^'J3l KbѤmK\_7:UNB2dJzڕV籬&]Eщ JxM߬}̡o+uxޞ&uc/;Q8i12- %׷Vr zf`Mrd\ьh0cjfOǦ1&/{ at2rV*,cd|JS"|ޟeԐzT^Vs %n9jU"lJ~I2Ȥ;є܆ c')$~F~4R Od|d}TF jjIM96c%v)8<I| E@sR[V(!QW!W:iR(K9GB.|lY@ZfT5 Rԉ_N.LѲQ̋iKoä.Ro}윀RreiͫWoQqV-Ȼ [ I(#`qogIKJg^Xr 2x˪/ΜI5wyoq #>qbV5 =h/_+v^,%.1:RHzr<"< mxrL>O(NOd=Ǿ)Ehicy@21ze EW| yh]1Z#lׁ0_:# !}k"7i,(2G'Q1tzһ{G–HYYf^E0xH\_1yޢ]f۲M/ Oz<`Jd f1ߴrˆ4KЪoK\\-E rI'^`"[!=89cf};IecN'^!T 9+IԂw\>=ole(陬P%+ Ѓ2AD+LԺ|>Wˣ~ZT۠9$t`l im#mAoj{"hqDxx珐j3]MWEQ׻˕=!d>6^8!Ks[CRCLĦDԂBm(1*sՅtTP?NP>PW̗@0AXxn&Q{?Iܡ++3>H?³kϢ8cu:9TJeZ:LVK[e67nNӯr4^]_AhkR6 1ԧHm YJms+yS7ujfbFJ=&xj/Z@RF,Bv ϦkYigC5"@bgLCWz ֺ+9* /vo f9B"x '|I'&S4MX g;{ AN-  C9Ph :EAm'?x)SC, %bJƬsÆd61r hɖQ=̋$K2WnI&͸h^#o~*ő_A9Hc5B +n'OUNzVaQ4@{,H(KF'C +7AKM)]ɬ8[xR>MerܥI~oa>0hZi,_n|՜'$Ҭ *+t ƞơS6 024AG1k0,6͡m̀yjN!QX=(=M[aw]u 丣Pu( Gr565_PΡ'=ug[wh•7P 3x>B=G+\=[4Z|" R(#?z~g_'{igrQqpm{(/eW< jMg70qⓅ4*2}#Vܹa!RÎIe Gys'*η4+gǜF_hi#%آ{eߝs qb]M4줫Sz&y O[9{1pm 8y?m=Cfd#?MQ@6Ƀ/,`ߏ@.-e(tGT.,sttiH#9 eKr@vWTa4t|Azhs|7:6s\\Bܬ s қIpsZ{; {n_.ξ #XEo"kb/C+ʞiR%XnvOFR,s7=ٱeg|S> MD*4ʘG|lD}\/-MUL,$9VJƏqs@N׈|vKH" i> fҕD%Yܺ9Z΂vRԿY^2Vžf΂h&^t@N =h*XOgsKѳȌw-@s ScLQU|_!KR`')]4lK~IT hHkTܾ<؇]7VtcT|p\lPF {ٳ&Y6r sn5-]f>0ФI`޳l~rg,0UG5> TJkEPr¹LDuY(> g+ZR6&x 'Orf`LK)껒"l 5ENH M=ƅR꺝Šp}nyW>}ޤHje<3n "dr2𐨷ð(\5}&I[Qq=wvR~_G-zI@;ӊ)F?-Cys4BypКڨrJs6:T+ycHC.Du'z n硤5nq{^TôGN_ )d!Q`Ӈ[_> Iw嗿:D;GXsm{8ኇ"`ZCS]=ɀ>?4΁=XHV'+ԱBS54wϳifV⓶ҩmu3EBwЇ]zuj&/VH|7Οm0$>r}K){%o^FkP2FawJ]+_Vң !sUʓqHK:<(F n1+7{*I;8~1Јfr55CսR{'\H0yqϙNz5LNִro Z߽q%9ԡIޕ,.T7[sшINA˟W"aҹ˟Wfp-{vD2g CVWx08He79FGS94CS!v3eƄIzL˘3oS34X,aܑAr{0t8򻰨*,׮TV\m؍])ۚb]zz><8D@~O1Pa[^ ={gg_0 /T„8DL*6"`k @K5bqQYQñs);;^vY䯄 ̀Ckks(b2)t5e`^E&i8Xq̮Fp> -tܥj{ؗ${'GouP kOX~F63j%qi?aZ; 7T󑌇S2/ɫDq4-q K JZ>uH jnK_Zihkh>\,('P~*6tG>IjRjO -R-J6={e`c p6߲%a9ۑ\"m~/kvKJB >Kـާo(OԽ. %0`Y38 }OkZ *2߹I/2;Tda0+vwn0t](9 Qw=a\]&ql*@ %_~S8=d;Xb~n9\@ܻ(cV|6z(BNBAn={4W7l9οDˉu,`m{u^ըw%N}if}QV'ĄEHte@;8'cqfgб6Cdv Mo69th'|QkeP~xFZG帽F0PҘQmOslf΃OMuE~b{!0H2!8ԗ6^27ڎv2k,ݻ%{r`2ǟC͆"HT 04Fr|gf iAHR6_C;F阼m }>$ZC&Yqaϙ8Tm Ull^6寲];oOܮ`$eH[9Y:(^k^d<})Xx)spm|kn#n>!dɉ7<'s ٩Xm^éDQ5зF=d@$3voqoQ^n 9U:Ann)SSren[(zu!-x}6^!ɗ(mtH xC4/{U59,s gJB-ݿWaW?)*hpȒRhb:AdΡ7 .\d;Q}' zQ:S_~#dYxv9K3Ԗ7I5RaMs \شUՋ-ʡMlTvו.Xb ͽ~yyv:sA  _7'؊ mc.NfnZb4NvnUCӒKS.I1>.2 ay>q8[7gJ룴VskCP3 gG,b&5EμJwxcW5]uHv\fXoۃxz1()R :wBtB4?k֒.@mQ_TlJu/S`z;,kH\j,IIcy_gIK+0 'gX9]js|}57xn@,=ef.`#u2OtǔR\>]~VmlD1/M=57mކij$}]ϭ+X% H;-PŃm*p˷UÇ] =doB;!\mbU5eQ6]bWcۀ9+]Qp~'cر̱y yp 9o~ lMZTW4r-kg2Q4F^j~2Le0 g X ~c4aKBIb$5a-zQcXd(dl1Mh<-0=hslڬYêF|TmrLPLR\ޱ"V^>.mu+tmEyaK&s2&S\?aPaǂ5mR [4mp3UyH:Mm  n3tXNXr`RI~ܤF53_4!}c;ȋ_Uৎ_c'Ϥ{fTQtgDE=þMt\q.F1EYTAm:tuN{D n!aN:i#ipdS>JR`2:kXNkTXe/!bY9Ld)ws'FdHިl_QNaU @ð NϺof2kg:؁f0rB -|Ƙ)r@BX] gO!%p&3,S) ]jͥ:o{ۥz7!_jK~b`4O4Ĝ#g 7! 쌙 *rKBͳ{|n3AgK4>hRиox>YCk u`~L&mh .<ҟmceר+IP^1fqDPȇ+\|j?yzP_G8q)t{:,T# repSDx:NjP ^81<_WG}H 5C5IWwҺ9? 9 A q*ycmٶj05%ޒǚ6[em㛖S}6~sv2w,YVI8.4_|h|$vMsBvH~e|EMqJ[V¤ؿ(pbO:lX4 m̱u5_ƂNTG ջe뼿|;cqBt*^>id{+z5qC$S4{LB+|A-jS; Hv4FIr}Kn*5e>I=QC߯Aκ)H1U+j=ApÒolnFlj- C~Z$:jE`r6!S.͓N>%=bmhR [TP QW8QoI0,'wŨu#,>kڜ.ONר/q.xP79;/!R@E3jd-)]kq\-'yPCWT9(7vvp`Vd5M%ZQPxY.hg4؟*qaHXO8ְ4b@+%J ̒h@Sn$"E]Q3?)9{N;('(ׄ}v5xjly zSQ:4t!3 嗨`gsy8(^Ng3NuD |T5FG8uZ/oBB18D^m&~Õ*SGvyb`fm$krG0 N+zQVEK~&ZyN9(;*0wc7\f9sh6nrhV>]̇2|ӄuTĤچk> l7pYY:&[z-Oi4"JlL-73/njqPvM>a&`M6dmt н]N_.wqјP'ϧ\jNS-TwF> u,oz[h['xtj57ÏI{SA 69vpq&6碶&GvΝuy 8pQ(s*2pEB mt`ky?±O}O~_GVrd9t}-Gz^l~&T1$+WY~ xL^WQ@L_/0oa"I!/3]R@sGhܭ?Hc>7lMֳ|̰)y]TwtXbckHJ}*)]0[ǿ񂘊@k|`Oc*]"\wkD`K{&zm"&9z/7ܼy}Xk:gYݴ#Pb~'I4)AyNDb ڻItJ8_hz"C%{GJjj{i㙾XTO b_Or jȮIz=(5]MfKYidj"dS2pnZqܷ io9,ѝ'kVa"d`%CWiTUa{r4tO}U[z:ݗSԟ5Ĥ4NuǑS锅U#nL_+2ޟQNVX]I ɬ*jOm̨>nw5U5ˇwթmKT4^Z=>4,9Lq,\sTlDt؊}"}0{d|zEJ7uݟ಻Z)9ȟ 0͖(%Bjڦ͈ڮ!.;^<%ݹp=plCQmOSavPI@6=gaK22QSIŠXj!ϝKq?AMvYa|ɝ`"=bw(Р6+$q͝_ۺZ-2Ӝ{\rgHp&ޖ-S7/Eg{ViNM뗦n5k&Y)Tʾ"jb՚iI}WTa8 Z -PR8&:\JciBqQE C9(ūf)%]ݝpݭpla=xi7ۆ_SX?{ɿk|}KZ~d㝄~OzQ}Uz~=Dm "U:+̼e؟L w mM(*zл"B录(Ow)NDD^ g_&i:נB-.pV2goN\ 7~Mun# K[V*F޾jJV˕jRҘm;i5]u['j/kFtV})XNef91d i$ޖ#U]qNkV %z+-KG{Dlx-%MwjH6xf} ʈ_ FPLrlG m҄} Tha+3Kmŝb5s~#v"ߊ R.LB)m(',1\"MOh*qԔJBf- FQȴΏTl8fei[2\8Mi"գB$L®kUwk:Bӈ/J4~K2߲{((ux3^򚷼pAg{+fX5 y\]%𿮹ү;IGWgX1*s\_,`  #gb. CW[RHxu؁=%"Ś}H!G=Mڒ9Ls} cj-ȹC$ewG,pT`@=r$eBƶd^]>dy1Ҷϲڇ奲N|(0Hq-[|/9թh /޴Z$0ʊ(KBc!Ԑb ]>.E|PNMTHOvV"HK]{:u?a5M"Òe9J1Q־8E2;]2Kw-1q7LFSE=FMoٓX/qեs^HH׏Ѐa^hxHioILߤ̞7+~5 /J_I= >dw١0wזtxƓ \˲0w?I["yܵa0eʌ>c=<۽o}Dxΐc^$j{?F%JJD4eh+:k(N莍΍Lz#z #axʴF%>x03kq0hHͪ1q/K Կn?hf5Lc@!1Q8!C},q0hHLtNx p[83\%ܟ6iP h=)T"#;Ed`C=*:8JtGi'*`^sawu~lx]E|F]sFh[kG)uUfԵH=#dW"?+s_^6$I+g? MNm- &CFA~Kb ,]DҋY%Sod>ʂ#_Vfjn=ۺ}kɦxDQƹC9; #U5eF>B^N@R/Q'Vn46Aݔы6`| g%s\J4׍A|_Flౖ?e}Ȧ/RGTg=q0}ۦֺ|6o)(+ӦnV?@}>~v#??0MyOs 7a˰Y .M@?ٝ4 *h X6VU+ 3Gm\ήCCe}>ygeET)gJvnj;(sg;IarWݒǑ/;M{Ȑz j+7x'ύ6s NnZ `pNL܃N hQ*^iz8'7-aY?nfԙ?;u3vM#<^!ihT<1xM;J}=gA.4x^σ;mpBG G8GpsgLpCVϴU% y9>c:X_L?ZZon(q<@l[M{喂A=3l/w.qxs;~ԿM ;ĆY^?̐ttk$`<&_t㑸~B:>R^ki"1T j{8ΖZ)l D=\~/Bh蜟RߘYf (k~XrZ*D7{aAg%~iys &$ɿ yn͖%nJS|tO{%?„GqDolG!$l4GS-e-R&_l '>a J fb.ԳKMVuuj.=bа9#DƏ_AZ0_Nr:tdth̚!KϜa;9J=-Bag 3­hk̿%笞9MfG;+oEesLm 㚥aGC4=ؽ`VmWϝ$&ɚg,S)gU,1mωp6hL2[ݼǀAS`Nˁ/,_LQ:17Ky5xyo\tas{O =9e;}|h{ebw$geq;s:$v\[<,g`=w6[ T3f,V64$KG7=o|$Y}kj:zB]RqF8IR.Mtȟ;61eePOQ}15ҹ;*'=﫧{wxTdr|e \T\JxamԼL'z4OsH7Zۚ]yĨ+V/3O\+0dE}б\6m$k~jU}ZVEg%M'B[ıGEk|K`1tyK@-e ;׿9*Hf%Nhiz~lƾeѹ-{ۣ]lQUyt =8ʧ^Df5!s$_tjjiFR)w.GW與xŎKnrQ!z09|4T ͢kFAluvקPZƍF2*kҹܑYDЈEp%?ė~- F`>'@-+}Akz)*㈊71 )[d H>A&Rr13 LL 6".>4l饏5/t ,DGhAkGJ}FX* ($vu,}e]Tл*$g_UR~ڀi*|k+5%A׵ͅn"ePzX0Ri f5!$.RpF"1GЫg/6VRfىޡtwJC#@RdTffH|kR20ba!93kyEM;g̥ 57/ fhWVg{kF#+Q]]#O+rj-{[cw /%6Z#7XN~xCxXшK{= DW+0o8k9S#nc+!%vQ!v蠰x+`$R=1 eR Y٤BCHZ%NlDؽ`}4p(8JGkwP[SF=-Tŝ(VtX*ϙiZZ.K'~Er}])q4O8ņR n$R:"9\L$ИHU$(LdRgGڃޢ^7jR!jYS"X3LoRR ء=f qK,:5rx1eю ܋#b  Zb =䍇EZj.h^P#,_rR rʠP#u1) L_Xm^Zֳ4N(!ݖHs,$)RO5uWjF* oo^CL5D`dQcXk %q9E$'n#HepѰ.U0*q FU;s^f {LE^1Kj=^BeMB#4{G;EO+a!J7^Q>ZZRp.t¸N(f/qbP+@ĘW_ q"|T|L1D,K&'RVp ʭ`5A+Nk;7-1֪D֠zJ(0\AF ۀZ\f"?x#L?HPI֞`(Oc3d3tSLىf|)2`&n myC/Y+G{5vţxLFnҖYDyd 8"/VA,Z auեDud+1;p<fS/;K#4IzE).CnIb)咆@񪕒+I)h m([ B"iz)Ġ|*`b+r7`tNe8&2Muɦ& aOXsF0!] P^JjH#A*L>@)c\,OX5PX@ٝ@ԣG" $ʀpq/YjLtΚ|W ֽPm9;W0?]qLy.]\o盧W fko,*9vgx}'/a@2ဆ7Lf׮] T$WŒu:3ޙI^r6IiUH'ƥw05x\2*JET/"2Ƀb[\¾ǻĖxfM|H$M*Fo|G'XPoaډ2 r#ᦺ"M+K; ˩@#tص*b2A&^NrVhAl_I nq!=5z8 5bL(OѫszT4ᵠDžpZ1:,cpٹ9[,׻(_%c}eNH&*zJk 6nsiC#o)m$ 2Bl U#VX5!)w&` ;gTmPEgZFVffdK"czZy O BA V&z.+۲׺rTfG[$eTȜYkZ>I7v'ڔ7j-@`7a 8Ek@%T[OJ}6̠ETEW*x4O! sEAJYCdğY5Yk$Q}DMkXa"0<=KϵJR zedL9VYq;CyM)ێg}r\a唕[Kqh5a8t.ʬ =Cٍr[ԻYr .Sh"ޣg&xTx?:&9lsWPh3B!.̮I9mǰ4irIf47# ֠j\B%.>uԺZ CyS zv;Y%|7N 7訕c%U]`zMStK58!Zɻ]E߾|Nn3fBkb`4xX5|mj^Y3uQY(Ȩ1)| q=A&i"9v}g"/WENFZK0aoj!v(Q̎BqmUqS3]UAVG`aK]y%ҙ\yπӽ]>\WY?Kĩ /N-Bs(1'y9,MVJ&4M&Hlh4HˁQÑvJaTbKK&H(iߝC˪ GAڭȖ@BE-R~v+3QDTVFcR"s7*CYK0 'GG&j|FSpbtNjR)Agv:b ɕҲs֞nz* 4 K'aI"LkEFH8fXޝr?z+%u'yZz5YS*N{~B5FRQkO NL9=B-\,RqRs M q:#j*k> n (DQLwPu7D6u+c]tmWpA_}ȑ=uM.u\ 䔳Sҗ!JFr%GwsX:Ax$NӦY/2xfkB$ǘ?n#tQJiwk2d5]ElW&DWh$.ko_ [~A,(Է~͝|90Z:x^1}lL?^]61 "ye" {ӁU{Ţj'zqlj9n1!%Z:z + x3ؚ0=1b)S,F=*șO[L,1ya\jΆXhCɅd^̐m>q#{:=!"N{!AhIfNZ_Oˀ ڞ:a@_aL{MH5[:w d!Iwz I7(茌ŗΜl43AK! ,()4B ,̴ٴj@ދ>=`k :X5D)R@; ŧ1 0S<apF)9EԳ8mxtdw`->.b}t FVp:Iw6fGg꡼M l=X '-e eV衡QMa_nf|Ԙ%ߌ{&Od7O^s8Y!v6-Gp7Yσ,$o=*ih /Tg!؝-$IF. [O~.Hʼn݃w@e֭E^Jf'ZK9b1j$V̭l X~Dĕ ڿЖ|5ݭ O uĝbm<{>&TA+1 2~Ǔ O~=>wJ=rЁ64 `#ʴRۙ"?K>b5l6ֺzE˻fj˴ (Gߩ@+[@pT ̈́I9JȩFN0d %Ѱ"R@\d1s"~[Ό@^w*zg0!o"$|DHx9:/ T|rQN0r$4T9Tyjg|rZZۉT_%ցLgerq \kŮe3?TuE:1~y|r8FږКl>Pې5/e\G-݊hvͺ)Π_m-lk;#Ёt|4m =[ԉ x2K1KS ޜRt yD09kfKF;}y#3>VM|_q)9w:K>SK]dM{1+o>\iV4×~Y}-ºY,#1܊ oGM셅\Of#jڧ*E0Lv.B.*9cB8j]|qP+2]LN$Ƹ< {t̹.,qڡ1P1 :E^ӗ55Dfx؈TG~)NZ ,Ia[fn)|x5r1ZLeh< cwT^@s((~^< g qI'3֜;Y E[f+缆n iU/J]sy'%Vݥ)zs+F@{5@{@f5 S+J@[[$z4V՛ ̐d[đp&<Mߝ$5Ĕ<< %6.1y 3~II)  1beSGcjT "߆HC%tCƙLCX: aϮ1.w/f=K3ݶQ,O|</xF_@D(#F +~D( -zI|kT*8'8I wSʃ4H_Qʌf){40ẆXIMqpSaYPF/9`ig@]Џe-nyLo]b 1 @$ @ A1mIT 'HJG@$:Χ3iDDDDq8h m%7֛bFnS޷Ш'baBUA2,lf(T'mH:IAVQ%x9#!Sxr2[4%937Iem:3`Ȉ1YgE= <8xBʌ/A1`؜k["DXd@lx&\H +-K_ϐ+㪕 '| E)<+ss83Sq : 7jZ"+ &eH3g(;:6:v Vg&f1×Ĥe@(-n<J,Z=É 2lj^oђ(zȿ_1כXk+ݚrh.d": r)XmvYQ5}a yGLib1O& 0P0b 놛ns}8@/:d(AcpxL &YUHC{gK;+Pb3諒ac $J L(F"*,J+/( 0L<=^Rjv/ L(F"xuwwwwwwwww?zLifN`W7y6I$I$I*\=,ˀ#?f8E+=+y JrP0LK`g4)%RJ)ZkTzc5>K|8ڮϴg۶m۶mvXt$I$Id_iGM`؝DIAPgT)RJ)RJ)cch $I$I$T$I$I{N/ 4o_wufR{DIAPg pܕ1_s0xao/w9V}rgcsD"}߾}u~<`0XR`0{K̗pTPPdP:`)ucyy 'bх+Q$ifp$Dj )uxĔKm#u`0 `0DOD8$2J$3,7-6֫?ΈT]:#5 pmdGNcp$&R2 9%QLb_XGJl[x8bjuc>D/pI!QԈ"-0<̈́D^s\E*-kV٭U;oZ%onsFʴ}VL$"fI2P'huKzKX h c6qnbKrmkwIJf B+Ħ.ǻUeqe lk09chXnp> }=ȟ_ξ=ЎFC_cCvz{s_B$E}}}Nz355.8Έ{Ç ŎA]u3+ }56?1sO}цV)06}ܢ=ZK2Xύձ)kg>:[sk ӽ VȞ 9)N뎟ub=zmq^vBƾD9>{u*_ۓ:SN;ƬRp^v/|f~wCD$2?ޡiKu^B&L 0)`bbbbm5R )R8p^Q?-3㇙/}ZAW1ϵ~c2\}矻~ʹ|4BOVֺJirdtǫԂ۸e|-ZZ:rKPY&e,.("nW/`0ZbR2u_ϭo"&BW_fM;:a f4%c#O!q|!5hs@@~s჋&Cҝ6I$I$vFW$54LJ]ֶPRg/n:_ //Gh^~0pE>+ &LUdN<-DhKqzzFg֍4/#2ŭ~Z P4`pQ2.+5z{2̧І#b8A ˙gӗB7@0b8Ͱ/nV;=V0-09bMln衷7#5ؾ;>uo|;P^¸E!4ǀ%1QҸ MMYÉ\G%YQ50-&tm`phxA&ڏQsYLAIyH ҡ 2 F]x#HX &x)Imܲ{Cl݋BB{$403z{ \fU!ͬ,V{D͵nD""#dDf3? fڜ=u3NUկXjO,vPL)k73g{_ٞZ ̣mZXV6`d+0$+lB7k?Mҡ2XBc)IT-8Q`ab,׭@ ʿVLٚ2KS8^%9PaBVLQ?֔Y(Ɂ ʴ/1Q<Շ(̫ڼ)D(@r Jr)aBV oP=_=3UUUUUUUUUUU7[9( 3q#$I)PE4MӖ0  >VP(i8 0gj&WU!(~-RRN~G\Q?L˺۷#l``[2sb踪(&JK?qo5Ws}n_PQy}W")^I]ZOjy%Q{v^1Ioh1C8s)$d\z `Ϫ?҂iH"):y;`q k3jYj yYXtEzW%YQ5aBv Jj"L( Ӳsқ~"s`.LOd.. \4h Gn4Bbh!C8]Ut 2*g*_JbBTJ ^R{4[6tk̯̮^հpUUUUUUUUUUUUUUUUUUUUUUUUU 0C~\mp-#P$m9<ܴFUPo*o`Ԗ^} Ӛ[ OVס/$zdϵ]+On"+)@r@4cT1c NPaN{SX9'2\FcgZY ƁDIJC&iΈM!)أJ/ L(F]H$I$I 8~mRj([aB6zk0#G̱O}ExHDDDDDDDDDDDUUUUUUUUUU @ I$I$IJ$I$Il۶m۶mƁ OAO$I$Im۶m۶mVs9s9s3333333333#I$I$IJ$I$IZk~Che Ja @tG%Te+\TiRt |ƮgӟYyLdM^+5\L%26IDlYk`~K&8  IO:R:{3ƪaFV:vlL̀e[J=%(e4ɐ~zz՗f0%oRxVt&k#'{՚S/NYod]r8rb3 Җ+] SUWk}Gz:B#f.%)Ujټh-+gjpkgO F=…`vS ĆT\"3Yi=#$t ׇ?-S=fJ[80~1BKwO &C9J-:v~XA|}g'K .%v{mq{{x8 #;,/əA$olfY_# @5;*C:5!ֶlXÓsu.)?\9 ҂y% Ak17ͭ|ċ\mm"mv-wN-}OVOIXcC q+ ՌRLעfֳNs;|NgN# p.iUaz[4{y(-pr {˭fLNVҧJh3'BYZOXcvfA_Nzm6"*Ji؜Jxk'eí{ S/SK@Lңh⿀x7'E+fd_bᬇjt4\S~MuI eD9tCNz"eËVYԥsc{M>:ٍIl&X!>X%)^j`hEКzrId}#.d\AF؟r0f520!K23/8^s YCEoMV.-.8oXI1 p7XPT9&9ĵf[LT#> t&29i GFLYZTRy qsmSË^eRHՉ=azEB-|I`AmJ,BXlU;rWM|+W 4%˸4*)O%}oXγǽوBEQ #A\BM:9RR=rM!d]wY?Бew~sEmȧmӛOSABDr-ʣhF/ N=00 L"YZz"@L)a<[O] v\Gm1cAġ?2ʝH!.&.zZ1H]BlqdxRCҤ]Lf)1:knԲ5LV6]z5eܾ9v/ )Y쾇s+OUT^uW5Нj뻇ap__mk{;کo#5ho{>O}n?ǟ/M6t36|_B-=(0k8崣l O٠._!mNj!JPgftCSQ+jZZcv7GZ@ga'ieU7m4/fz?@FP 'HfXDIVTM7Lv\(N,/ʪnڮi^m?Ov֛n8Ηx"ܴ]?2.ƺɇrzB7X2zo/lŷM,z=tA1 )aIn::OfyQVuv0NZ7ԕ6+ w*xx$ "L cT&W(Uj2qy5dfy̼uzvqus'5Z^DIVTxAdEʕn5| lxe Fg0YlȂs_ UV+x[;{u:# $i%H DB;8:9PZtpy|P$HerRhu4aNRnGXH"S4:ÕH, e-RNo0̊,]"=0M`v勅O@"2r J05 -=f-L, oصjЮS.0! )a9^%0e& (4` &  Hˮ0JZ5ә[-ml vN._WٕroPD1X@$)T"i\\[~g3,vHw%Rv;h2[}(N\Ģצҏ!A )a9U&j;.YQ5w/+KW6vN.naM/o`V7 wZ%YQ ^n{KR4r J¿Ocv8>~# "!ApL"YX!PD1X@$)Td9\_ %R\T5Z`4-V6vN.nM>( XH DBLBX"JZ Fb]\=(a9^%YQ50-q=?8I(i~yY8{d(J·g}M-fע /L~eMn5W @ NzKdy,z=t=Z`ǣtN/E3, $+rlwѲ_@FP 'HfXDIVTM7LˆNfyQV L p:a=Kr9DzF|t~8  W[JwUW 寂Wƞ,cҾJ-ʫ̘לa1RM T!S#EݖTlsܤ'^ B*kC:QDNe;^«#IӁaޗUhJ.Hv<9"ǁoۢb+iB&B:Rs:c1 7|$U R.s9B!BH9܃Ԩ|rN z ˓mu P I .UJoyf;҈<̿گE?٭'(".(QT3׽%rR m%Wo+kp JbvB[י#I9Aݛ 7'ϨYe cKrȅTڲSB:n Bjv\J)V!RERJ)9vuTQ=}1ie8n[.Җ_2@.ҖRJ)Ǥ5c1kkc "MA.Wj7!&J"ؓJMjODg(dtF꘴MphV9^ysFirZf0\E.dLr fdha/{z'OsIx= 3~ slxq8?=żZoh M߮Byj?O}~TW6Hl{6UvM\(Ttf  e^7yLBXv0rKnƺipizgqOvc۶mpo)YT py)lb\jۍΨ".^ǐ7fC~`ߦo}9Gk5띥!JKC.XgϘ8zuIBEE-Bdy7\ h D2LBܩ\jM:zjz MlF̂}W\jRU Η*葠gyǔkLhcr!.&I\ m@%;iY'TfQ,'sR.!}?HZ;`I~>>_;0؏B1PT@Å\Hui'H)J)RJiZks~{O{VecEФ*ySxl8[ΓVؼHj VbQ\ns4-^vno_@FNH0OW)]բB* _ @8B/QPj ~NӻCYc 0 c/,ll5i2ӹۜC<e3~I3(S9fJEP[֖X"""""""!v[!OEH,,%_1e4AHf ,dބ{]I& V΃vdUv"C}o#匃!m3ytHAX)֑ы/ 'br7mW%*G<Қg79__o&+IWmvgk~ vOGDg]xK:h23`q^8tx*}mNvѴaɌ}'KҦG_Uڞp]5H*1+Ml%l$._A>dwJ1KpC+t7<˅gPgǺΘ\"lC(1PA4];ĨS5 !6BKs9s!B!RJ)TJ)RJkZJ"J)RJc1@DDDDs9\!_D 맜wHo@aB+b=R/5FScG#V2ge#+;qEg}!w\&EYt__}jS.ę>|묒WǏJdwUYG!S)&Q0 Ak+dz{aMB3?l?H̓J+&mu`Ζ}u:\UY[ǥp󳠴ܙEZ 1Rk96[AM#emcISaFzi*& %[F}ټ"~,6=OyxFT|4| UӺ~>nk1NF,Iw4Hۛ)t8^ LuLi M6Id0 V4D ٌeTZU  |^ӧKʞ)s5Hp_Ld_OұtOY0h\9G4ѺX4.iC>:G zZ)? /8j }-0ctEI~+O:"1"}}^Laܞ7y4c3Ksqwy3|xg}Q@K]"`fQU8 a_Ca&.9Jt/ёѸaO˼L)7_1Q(DlZZ%e=9ʏ]TXfH,|\?:wT\8LSbWdٵ^Z,a&zɇ1'/%6f侣@ylhI2 g=e/ݮiPma*is7SCEL}偸]ͺyoQD}Sgps8'SC{zl;kpŎaTgYk1,ΐh; `7lz5U\KATaFq,;Qf(\V>-_0YLظ`^}tW<qݧm {ZR`cc z󰩓hl_F*u{!X~rDv*j ~{)!UK@il75|z_ @z>9d` 3Yd7Dh?:ˮ7zduޘ~voҫSeo},3OPOxSwk<ýM' ʀ_GuZ-&J H l:@J)k~Nx~qjyowvE0pbNi,@!a W썗i\ϥԳGP8Uequ ީu~Ɲ}.l} y"2"݀_T;@TANo;2U[xQXFzk11Kd5CB.{y'" a-*,:SB5($ްoWTe?`ۥYcBP)ģ}T1Mfwxt8_k=|-Y54adrXy\ +م.@dٳ}NY9P7t V{su?T drw G`xt?xi*sǂQp8iS,Oj aL sFcTZq" _5&vWNw^/ujdfVz6Qսϣfd4]AQ0(KU,L e/avIT8Pu'L@(h!nR= Y4<o/.vG=1)C|ڈ(p(yQ®ͱk|Zhՙ;rبYl%+I6F_n} hעg=27Z_N.v܊{I!7PYTt-8~rS=ϸI4Q)tXDP,IU,h4m??vNpZCe^Xk}XxB;h@ @WQ=!zAo}Xa ްaupx>Rt a40^3s&x2<)3OtU X)Gm>>x lFNq[!5?Žox1^x>;^hvםu'yݏ;x]h'̬k'YDtXY5]V(Bì0<v]!ҷ6"WPm[N yNAGSQ8q0&DxQ~e%X^% RHuX&Fs\oJXa_[_[_/NpFNz =L6=YmH 2ՐY2Ð 9 f XeN(P .(){1}⤱xx0y+Gxܚ|-G*c\\̩t+%?$#b_1wHQ Kb|K%urnӍ^8)Y3YrLun "fAD7"-1TBwC6jm1ѶhK47Ho+"rO4^]f3Jܪ-ZƊH_Ϊ133īj!?KY(d^1' C qA n _%3bVy:c2V*;ﲊѯ3ڭDY)jƉgY9+uc ͙K ш3#= u]dnF\ҙKe3QKb>Oz}<<ׄ #d9feݬ̶=-?}#QcB #gt]C :u[pjj+ \j\3Wj+{q\zΎ͒PU`Yۡf"Ptyھ*WxUP Z jn[)>,͢-X<"E :C)B7Ю(_="b>A0`Ca Q810xaL'`LSO2i@D&fL`u|/0Ey,^9.dm^W`s%hn)$k:,ހJհ\KENE#,vKwPO‹8hD0Wx A8oL+` YqM<,m[섏a=~8 ,šMTBO)iӔz R20׈^ . = 뵄evjtͅya}@"@۠4Fp h\h\4o-h  DB+#̗dRz)Y^JV/տ/->#a| `7쁽HOS >/KHpQwX='d$,d8 .T&*C6@.!,쟾P`wB \e@9*7 UP @ ԂT2 @A ! p0Ѓn[6h7FЧv4Gl~h- Vvs#tãzB B0Pa<#a12@&40&$ O4x ixfĆga.<+^ðrXoJXa-lx6FW 6{2>l|6;`'| `7쁽w S >/KH0 o;~ p~SpY8p.E)pR B͐Y`Ȇ3RA1 %pJeP*Y@e]ltJC)R=pPռZɂx'P'PW LJCc^]-ÃoƔz 3=Z.΢.΢blL]dSc=FeTj<ѐh L#Cqa8j2Hf4FϠ:Duޑ#UyT'x4W-eTƣkzE^jrN>A5ޙj#E/[eԮD+%>Z&Yz`j`6uSZYMIg7ٍfG_t=2zeIѓ.'K>>>>>>z$z$z$z$$$$$$kջޭܵ]W 4OKmJutBAzwSTnw7ջM^L^L${ m#*jC^ =I%<5~IrDZB.WF]B1Vh"=âTRnqvthC}0Wn =L'a<az xfĆga.<|x =OS:)U]'.<Fw953e5uRM y 6Ӊ"bs\Dl#6guI/AMՙ>=ӽL虲:3ugz~ 7mchT<}ddnRgfT?T?YD  >_#Y!_'CV!k8Eq7K`l>]^/)|%$A pQ|?x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*xC\lȀ,̐ 9 f \/P-`E"(8C) *,-cSU΢EU9rUe,KNi5u(TZ7*TTTTQ0PɎ.\>),xo'gϮގ0or8П/$h2׌4,DGl 8^B>ݜn(ۃoa{tq;q5I@13sNt+KKYRV5V6VanJX"Vb+wkwDW&opWT:~[N ^d͟n.˨KKKKKKKYVb+Ja>,8"svqw܇}} Z.Oa3Zju,=Ƭ*њYĬ=:g3Q>\Uq8պ%1u6qYU:>:~:~: E%ۘ fw"UJf&dvo1̮_QGڦMT$Pj4 EVIr'XߝNw'gPd6Lו,7 =o"Ģ}w~EsTB<Pdp~V(`_؟9=[e.uoFu*%9Y/* j'ɿ̬3+G!ݽ̮5kgfQȝh"6PI^utXGI3YXG8K%A {46 NZh_~ nOfTQKQ3Z.]bh?3)F;h&FJ60YF;hw0BFdēx3^F=˨?0FȨ?1Qjǚ2qF>Ⱦ<_ɨEje㌘Wg-a\FaF(`<"L̋y p\JbR%%p },™Op휩rJtA1%]Lq;g$Ψ"}媨+x}vSj u(aSAh/vK B?a !|}(ax F 08`"L<S0]l3`&< l>UXykDX+ڈu^tVQuu.]g񃮇x[S|؋@:u{^u>n*uīuW2E#h,͢s[ah>vq {x~8 ,;B@Gq(BO^_Tbyb{8~?uX2PvCTnu/TA55P >Pqb!4 ]p7f"WEᱦv5eE3NG tGiHǑ3 K1dCנEP 6pB \RpAT"U4D x3v:Q4`w_fI^@_!@a a0FcZޅQ810xaL'`1!3b=҃UC4(#Ӡ8IM2r:,ApA> . {`/p@zC )pRz^@/}>Kz^@/}>Kz^JJjjju7ZMVwSnju7ZCP{=juSbٸ4V^ho@:WU|>{>^cE61(8c\0 ?&J}wVcWWWG gxu.}►eE. G(WFQ8nxQp(1 G p(\. ¹[E+ ¹Rq(\' ׉up(\' Yeqǟ0eJ:3*QJD*QJD*QJD*QJMѝMk/ ܡ;4pO. 3 3:L򌎻6]kݟ]kwm ܵ6 swm ܵ;6pcwlg &V@ c+Yu&|m8jю#b0+b`E 1"VX+b`E 1"V`X.6YVb+єhXJԽk)3nʌ2xX`K-f/`ƚg6 ̸i`M K=#0kV0ҫ_gWrf_v)؟\ə]8s:gșz3{rqa?ŁOq@tA%$DrȀ""QD$'EDH""QD$D!8h""QD$D("EDH""Y;QȬ^^Vp/̎Gx$;ɎGx$;ɎGx$;ɎG@7?¹p.7bvQ wE sq8wsq8Ji]sq8wsq8ws(j(*xX g6F(Q@Q>< gEYpV$ gEYpV$ gEYpV$ gEQEwTєUy9@ h⿉7~ R FZH^k8?FՁO[ gsf wۆ gcK#٨(zOg.:l*;7lugKX򻷒MsYWD$zzzzz$Ռ`?mmmmm"mm"m"m"m"m"zrJMMMAoGDDe"$-KQY"*KQY"D%oI[Do!RHuXa+a w\].6OvߣD=eޝ@'|wz(߿8E'רDJ }Лꃒ$b?)y1/@>D?M?M?0P4P4PPPPPDP"}"7$*3Tg苢"}Q4}Q}Q}Q}Q}&%;荒$|&Ix((((((((((((((((((J³$<+ J³pD H$q@v"їH%u@菒$<+ J³$<+ J³$<+ J³$Y6}[>mvNvn{a^ ç|_+8_a8G8w=E͆3J` H7n =@zp%if~}hAs.G8lݟbT[jr+:TGK;δ9/CbF"¿Xp^KUzQe%T2S܂|AgdrEtjgJq+fAT}f7߉:فC;Y3|Z|N?kgvY;~N?kgvY;~N?kgvY;~N?kgvY;~.0/+K!^a,5X+ko!w* ܠU<,-vz_;Nk}vz_{P"}"vz`;=Nl=(v`;}>Nlv`;}>Nlv`^ ACz7al `a lCv;cA^p)|%$A pQ|=5CnȆ3RR Bo[- mhIFmZnꄖvK\%4Pĵگ-q햸vK\%nkϡ%2~{mwYA^%ǒcE a1"WŐcXz,y=N~M~C~B~D~^@~B~E~B~E~L~N 7 7%7$7&7Ǒk͝DZXq0XcűXrk,irӬD 3Kތ%oƒ7z+n1p.9/ՋabXV/&z1'0abXV/ՋabXV/_F3NG tG b 9"N'G#prD89"3Y8/6Wu9r arF.y.x|9x+x%xn>kAuW VE!ސ5ʽymWZ%C幰rHX'Ca`8Gc< x810x'$O'x<x<ІЖc;o2tQ'8NE50O-0KU.Wfp?ϛsl@KG Z<yކ1f{xD;FhwN2Y65vqW覞7v2ؓ@/y}xq^΋y8oj2q`<~Lv5(f|\60`2<S`*< )3`&̂ q0#sEG rEqqx8//e^b\$_2۸D͸T buuq,>VȾ7Jհ:Xoq#;.lz>l|6;`'|^3^$')|o9Y0ɂ`qfqYWTBD[Kѯ6??G|?D+D~(e EC"ZxlrNY Jdmgٺr oO_ x:]wp ^G?9eDs\rzBY4 f!,DZ f!j"BYWyeXo'YF4'8NE%XPrc{x:@4tN@WQ=!zAo}Xa FyC`( 00 6F؈c#zlD=6F؈c#zlD=6F؈c#zlD=>\x^y0^ ex?z`&jj&jj&jj&jj&jj{>l|6;`'| `7쁽HOS >oBt#gɗi"ZʈZ"E!JʉZGDJd 9Q!*,^K],rR9)FN!'ՐIirR 9)FNJ#'Ii4rR 9FNJ#'ՐjIiDe+P+PoPqO' ''lNxvx;>'|'w^̝"<OxO E5AW |rJQ~9uUQx) wA(P K|ȇÇ*}P%>TUC}(ՅRkQ P P P P PD%*(QA JTPD%*(QA JTPD%*(QA JTPXkQb-JE(%֢ZX_5~ƫQD%*(QA JTPD%*(QA JTPrXQb9J,G(%rXQb9J,G(%rXQb9J,G(%3ꭨ: G%W`oqd1^AAHh#p\h̙ kGRM^R1iS8Kӕ͵!#\f-c13B#\ K{]bbݝ3 }2bذZ?l#. / `bF#EĈ#6Æm݆m݆m݆m݆mf\,Fb^ދ{1z/Fb^ދ{1z/Fb^ދ{1z/F 2^{z/Ce "E[^E[^E[^E[^E[^E[^E[^E[^E[^E[^E[^E[^ўޣdM߇9hˋҦI1 "MZ?N0`2<S`*< )3`&̂ q0^j.|heeq_ZrWyD-hUwC\ {1PQS*֨6гk|>Bم+}]FKdxr>j+h+h+h+h+h+h+B] Qt!.Dх(EB] Qt!.Dх(EB] Qt!.Dх(EB]zr>.{ea=첇]v.{ea=첇]v.{ea=첇]vwv9]~T;mKE;_wp5~TE ŇQ0+P:pJFײ)FZ=j'вG[9q\4p+π epY<Ý+f-Yb=Yb='3;6hÉ6hÉ6hÉ6hÉ6hÉ6hÉ6hÉ6hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\Q}8 `a.@9%(唠SrJPN )A9%(唠SrJPN q'q'q'q'q'q'q'q'q'q'q'q'q'q7q7q7q7:Q^?VL%>X5-6kK> _X-kZ1+*+Z彄PY 1****A{/GDCG tnb>A0iked^dd^ddedd%ddad)bn܁w,Ydly|jXdB+qtzKgfwݬV)UjZ/ZV)UjZV)UjZV)Uj/ƚ+]XXV +:]ĊdE_bEX1GB@sju;vvGR"7+_嗵߿d쒝]KPs?I;;dg쐝Cvv!;;dgk>l|6;`'| %nV͊YQ7+fEݬunVԍXMz~*Bd+sZ.9(qV ΚUڿ_F'_ǭdMp]t޽:t3;if'd;bZ̨쪉]5dW\׫:6fva3;lf찙6fva3;l_R%1XI V`%1XI V`eN݅\\\\\\\\\\\\ɞ߅9w}2gdSXӬ?)9;> c} ۙoB(?27|Ov]!;Bos%C T<ӂRj!WB?WQO*gO4d8]jעbRqJA5)4SPN IA9)('夠rRPN 1111111111111F9('dlrQN6̐Gm6Q }Ԇ>jCGm6Q }Ԇ>jCGmC8|TQq>*G8|TQq>*G8|TQq>*~B(߭ɕ'dU@W_va{'}7yx=~7%Thzhi]I7#yPw5gĔ@GUP 6 ]}:[po̥!F] 6;.i My| q^3˟t<-!B ILJ5cu-}z{| ǙP(˃Pŀ9: %KeT _+Yn G/j5\*ߗV)w61pӸN~3}YaiO~'2&f %*n%n2ßvfHXZ|Dې!3Qj)5\.y+~.S;Tƌ~¨?Ꚉ[y#ogD/#zՌ1Jb/g.XW**THeFN0Z)|CzQo #+貂U,/=!pyմ\׿ΪYZfP ʘKՊٸٸK)~a$'#Y93K9/ O!NrFFXZCwB@s|w^`4Q1F:gɁ UةXJba\B+P˼? 7t_M(簓3Y>Tf*bh\b&WYrOb&z.g:LYE3f&;If`+Ι)g6̤Be/?2cb Xr&2䨮00)YbI`fSMu)kr,`&zYb)bH;¨}^:,2g bm=86]Į!1aCfX;M_q1$|!3?̏33}`_nw+y%WgOiy UO<$tW"=B^k"(2B&Sb YL!)d 2W!J!K)dR YJ!C)dJSI!;)d kFIadQJRPd)ůȑGRTY¯αߑW3NƪeZZZN4TG˳d`{`V4dECV2 VA U 4UA  VNS`謂 ST \1I~f<_T1y-| ylf")d3 ̂Fd3lB6Sd ڽn+mYLtQ\:++mhJt`&vV PF\VW}!4nԅNUtO}ST-hSE*Ւ}ShTE*uOٔO%zϩb88n8/\>sVs5T|R!EЦ6UMmMmhSڂ>UOڂ>PY|hUE*:UѩJ5CZQfliQE*TњoNěћ yЙyjDpTl*sT6lQٜ9N*I%ُFhdD*(DÅ>T}C ߉Y)vΎa_c_;S;IvXv^}T=b88}w__vvήi7i'?a?a=/v]2^vo/vvK{W.[G٭Qv(t]:.bNKv.x;'m/+A|vjЅ䲺~oo@MsVٻDp9u:ˬD^>2z-Ofi/hIޭWחU*wu2X+ѼF󨀵 v2bwVd|-3Mt)a&fyYgfyYQaTf[l 9f{ٖh{V1s ;03 31;!>Gj/zz 2:!s+U&e5J)T Ϗ/k1xo"#,%\,mpV܊gf/3 3(yenkmiߕkRy+.UgU\^UΫi|7i\Wq滛1O0~<7Pg3w==}%^ɪkAb015>2՟+;XΈ_v"0b0VFcG#{9yˌ;+,VY i"] ޅA.ǧ8jjj˅ &:4`_qاdOqק(d8ڿj *Z 8R q"ϟ8</<N+oVN|}@"⵿ ÎC}a|?}a)/ +,S4to-h  DB+οҷAV30R.֏8`"L9L$L`:̀0 g`6=xs</y0_nտ w'Miɽ)" *ʎ(".ʎ "" (R*ˣ,.,]RH iۤ(-q2gf9s&Il>&jjjjB·#Hx' $$w.E»Hx bukR?*Hx"d!zTT沴|WܖhUiU ^f<- ɢO[5Mlߖ7L}=11100Ѳ)A,5L颹)Kl29DmOPkOy5NR EuUsY P#juSE]k(њZ QOP7iﲹhn ^?h(>a|sS *_Ԁ.jAT>]]uaܪqsxϠ^G4Vڳ 9Q[UW/h 8hǭ5/q wq VPhɭ{|?5~4]ͽP/T\+~P6Wɾ,"GV2e2E2Xue4qi⪶Q<Wo?ՙIrӸ\C)Pʽ|g||33|BawUq{S+_vrW =]^XCq %s|U--++q}ΐg=|\bդj&2\ Ta2gy\ìe2ky<˪Fh"wh2Zīh:Z- Wіڡ&:#:3+;z'B/w.C_C @ ` C!>0C 1s %m&c rZ1`1[9a.a>`!aLKΣ94Ub*sd.Uqgc;X-"AsriqŪ/d<>w\C8| %D}E)nxwZ/G#Q1y8j 97i7Ԕ 8$ 4u hC=ٯ~ ]پeTL7Cc.ׄ65|%ef>k&O' 4 }ΰ\5y5,B@1C{^eU Vxze6x#e3"yHY,w(Kx8i؏ה-؊"؆؁\.ŽףFeiNwa7ird gp^(&bλ%o00ޖי.fy)Go -ǟ|\3!Bbe Qdt!YA8,LJq^Oxސ>~}џ \ {B_/4C_B_Cɝ6BEHBl!Y8V \zCn By<&K=[cڋ2XLFpSc4AS4Cs@KVxMn2.7f hvhN.n艷P7ot UCJ':F'VRziCJt!| .T 1+NJ[MsF.;R1h9Kҩt*/Kҩtt*'NEDiUVz^WyU^z^Wy+'|> H\[eѭ.ѭnҭLI\1.Np\Kc.wӱ|t,IʧcѱtS"Xyth:V@!֘r }Kҷ-/}Kҷ-/}˄2oy[^oy[^oy[^oy[^oy[^Wm$Ɔj ت63PN-$-E}KDuu2fcwyUvbc ˔jG] C&J> Q'[zDa6b6#[1EŻLƳ݆؁؅H@"~>!lℌVOqgTEMC:,r9l@6\ٸKp2 .sU|W5LS 2MeWu'-_^SoŸnBe?D9;4PT1 *4eۇꈞtGtԧX7NLѺ3Z7tGBo SjuUcmca8>|6h|1 c9a<& Lsܣ1hS@~jS1 _c:fyRv\`.ak .",,C-{+ dVc GHG6`#6a3[X!۰;@Nk䴶 H؃؇_p+" p\kNqgpVHC:,Ȁ琉, vdKG^r2[(=lZUkm#星165D뉙gW ߘ7`~Xc~Q^5erٗ+\oep٦7`73Ûffx335@ fx33=:#:3+;z'B/`]ybca8>|cs;D4f/Nyx<0UD O23ĢMj%s̳4Oo=|n^X}3y)!˱c%V!?`5`-~B$# ؂A,m؎؉]؍$GcH||9Ȁp^6of,5p=̤f? qw/gR=\ O% {}^坰}Zao~CCް$y(옌#_D![_gb|EjTQLxU1z .ꢻ. w4E/!+FItR7M'uItR7M'uItR7M'uItR7M'uItR7M'uItR7M'uItR7M'uItR7M'u)tJ;N)tJ;N)tJ;.ʟ2yV,.z)ǭF7Y+u䃿>DLZ Psqtt VCG  1U5̔ KKea%^>t+V:KζB7s\Ng.SyA\^fWG%V`n:榃`n:榃`n:f_USx iu|HdU/*GGG??;;+#ݦ@.:~SoVߤ=-oc7=Mqc}EOqQ.fwbvw1].fslb6w1].bs\b.v1Ԛ'j㟹\b.v1].bs\b.v1].bM-*ZN!xc[V9a1`$Fa4>|Pa<& Lė$go`:;<:,",,e\ﱒӫ!?ct3c1̘nfL73͌ft3c1̘nfL73͌ft3cg3v;yQ(B1n! nMs7y&乛"Gc8.7YG)9"\䔋ry<:q?tp^*>!jo-ڡ=:#:30cbX!FׅOlņ"(23 4?=Svg moniߥ؎v\qk=w vzSNvzӷ;wZ;7ܻOwu_k'ھ͉I#ל1v3OH͓ߴ9uYm9u[uvň3Fӫ_Yꉫgs]q\wu ׭_}ݟo98rlȵ?FN\XU 6lX}c 71qcRt#'mO[Woݽԭǘci-̈)1scV-oL|̉1wb걵cƴ}=[l 3cn{0DXG5QܸI#f-[0.:n5}ǝݸ0_=l?1~.6v܎)Fn[m+vdg{Ono'm}SsQwGwL1s犄{F [7◿ 9EcI`w0;L]C4B&hhW uf~mP䶜FxhFxhFxhFxhFxhFxhFxhFxh1\}LhB| %q&c rZ阁o0}2;<,",b b5KLa\ [&MNp4s|;KrSUuBqrM A6exڌC//)CE ڌMg{e,Ufde6[gCY$h7fe v)9keAxh;ڎxh;ڎxh;ڎPvsDZ^iVzyT~Wܞ#\(_+18qRڔl,秈AJ*4ǟeb#/ ǎc8T28Ta:hqozwM>cFt뺆": 6&bλ%/B/B/BP/'h'1)KC 1'Cy&))~۞AcuX!}8.?A`} PS>'SBg/3i'4Y =-n=[Cn=[G[t͕gBoȴP]-`!~or~ ǶL: if1QZp^8|`>јO4m Im*kL |6Gvjs00 K ᢗ\h+=VbXTg:(OzDa6q&- }FcXk4FcXk4Xۍ$g^/؏8CqG2Y#p'q 527KZ*Ґ 2`9d" aؑ9/. rWqMh V? qE(-d`n&S-*Z5xm&ڢڣ:: z-x}{~/A!x`(>G# FbFSg1%ۉ2%I) S1 _c:f,|\,",,2c9V{*D:yB$# ؂A,m؎؉]؍$c|D$)YjNǬ9̔tX+!Y8/f 2 N(MܑgwQ s)d>@2;lL [-[# ['z(KxYaI8&τ=aVy=d0pB*Ld&m2SԤ<Ͷx^ѐMYYYe2fDLY&,hiiigiI4$fiYh6fiYh6fiYh6fiYh6fiYh6fiYh6fiYh6fiYh6e rT...K+J.hI$ڥvyvi]]]]]h e2vA̠]f.3h e2vB4B/U[ 3yR\whgiighLZgj{$W瀕D=)4g0 W.V^RI BiVZjz-d MJ4u $FJ#MZiVYFjH4R+4FD#tZi240M6|-NOfJ+6ݥ^0,.2Yf. .D{M3+UteL;۷=L]Nͤ6.fl3\fxv=hI44>wrr Zn2湈ƸD4Wqp΋AZޏ\>6p:[X!۰;ޅݴתuAved{H||KhGi%4 o'FN[iiVp& 8||DtM6Ϸqp<҆ӆchSWWd.$ 8My|^<)LSNSfţ1јOјИ(EIkΤ5'њӚhhVZl5g*xW4篔?RѠOӠРhЙ4Lt& :}ۨ Zt&- --:}}B>M>KNE[hљƿqٚZ?e4ӧiu34׺u?i4Lc}>ؾy0PaaaagV7cw6<4L#tyhO۶Ӷm+mJ۶ҶUҸ4n+;mq[iVw;ƝNN7ަ]2ܦ2g rǥҼOӼҼhV5$] &3 ZI Ϥg­p+-J O'“h%Ԑ&~/ixm(m$mFG_h6ڸ6nhiIOFOēBYh㙴$x&mB?I_N?A3hVy$S#cj&hfhhW uYbj hvhN.n艷os}}=11100َ'쏔V(Y24_`"dLA,m؎؉Ɣ&&hjuMYb<mMN2#C2SePx xCM1Xy>P#*x=LuOls1PMvbc Vb"D'yVzDa6b6#[1EXƳ݆؁؅H@"~>7~  MaQIIB2N,R*iHg93f@Sڴj6Th0$-mu<jZmVG xQ{N4Оր/aU?ԚKZSVk-ضQ:ZWiպ;z'z7X+zC @߾dca8>|b6h|1 c9a<& L3 1kS1i5c{vH4lbc r.c.Ӗ3 |Xf':yVQfh?! (6݌hlV q6l0_iWn$ ?cb~~A¯8#8$0_iWo88d0gigpV^Rئ" 頍i2LlevKpT)˸UxCE~k/n : "m(=L^00בW{溨g9[hn"^BC{mh&ZUkxME;GtD'tFtE7tG[%O{m;x/|0^'N/Nk~v&c TLט31 1bL3/B,}L4/2c9V{*D:y#'Db= -؊"؆؁؅H@"~e2|D5E,53__{VSy VC&yWyޘ|7qG&̃R=\VOֈaDð˒efay/ۣtXɤ0r140PZIf & i<d 4bB&x^GkZh7Evh//N.n艷 60PhC>>P|0cBgoD|mɘil9Gb5[^s-\д|,B,b)`)2eX~jE:ۊm%KyyZ\E&.q~)\|[Wy<} (USlQ.j )mU?U6<1G 5P'a0p|dC=Lٯ~<=%Tu—پF1k~Sa`1L ײ0]56}d;K +_|@"9otVDus]:_m?MɮiJ¤9*OӔ'+KORseY2-c̫|@DWre\."d9ʏҦDqyZ-؊"؆؁\.얙 S5甽2UbJVWHzLS~婪z 8TU%TpY^IcTwJ:kAJp *lm\v.Kb\הn˹ޫ{d+-JDW_ s%_)~BnMRNJ[܆mnIsϹRnGPLT'SF6 9I5|H7ɓ~!Xrclj,\o2XZfg|J7֖gugXW:,2n|yy '1|<}^lL;-tyhMύNyx n!/(϶7Qus-nN5 R.SyAx!3B v"CoCoCBeIū1CLg֐0뉷}.?A` !ei|-CZs29yy*L M^ =ehje2` u| y&$fh?=~̮z-CZ5E,fy-jQUe(`j$KLM -*Z5$U < E%[TE 5 |Q)/*2ρS_1jC1*6ƒvdjKV$ u2fcwy:,",* 88$B_ )$4"򌚆tXyVc?mÆ #q N\^e_5(ux㪎TZ(KUJSi|*OqwQ{(EQ?i=2Y c[a<x]#ꉰԯz H5ohgZaӚZ3ւm hE]u4s=ГVڋ-,fjuS{s\ `; 2Ea8>|b6h|1 c9a<& Lsܫ1jSM4|2m&Y>"mbcbc r.c[񷇖tmJVc b~~ X(lF񙶉fDc "CQ(B1n!\E ea-0f\,x%4xMiss@KVx 5@h耎肮聞x hʽ6П6>11 Ň0c>Hh|1 c9a<~jDl'a2+L4|阁o00s-,,",,2c9V{*D:yL5HG6`#6a3[X!۰; HădH1)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)~ SL?0-ՙ71bڞYg2EfmȤääääääääääää!۰; H؃؇88_qGp')”iaʴ0eZ2-Laʴrރ „ia´0aZ0-L&L  „ia´0aZ0-LՍ „ia´0aZ0-L&L oHRVF dcccI1I1I1K)L[3%aJ|)>Sbk&wLMP&Lr&9 I$ga0Y,Lr&9 I$gah#1 )3/0Lr&9 I$ga0Y,Lr&9 Db"s1\Ld.&2DbFjv:Njv:Njv:Njv:Njv:Njv:Nj餶v.REjHm"]4<eGz^yWGz^yWGz^yWGz^yWGz^yWGz^y}R4&BXHTF*X*RAdEbu+^on{YhXf.3̐\dC"EVnxoWE44:+JJJ444WYitV&&FgYiYUV,d:+^'3>Ԝ#G{UQG D8rߝ#y G Hi &xZ+׫01Lɘ"O_a*kLLFr:;,B,b,Iu5`œtW^^\T?x}X7#Ӏc4h8̽~,,,,,,,w߹凹凹凹凹凹凹凹凹2/:g1i4}L>&MIǤyI*UyW4}L>KӥtydcDwi*Ϯ|LZW|LW1LW1LW1LW1LW1LW1LW1LW1LW1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1L=1L=_2|ɔ3 gӄi4c1E"2E\eq * c1A |L>&cr 19|L>&cr19|L >y]ٮϳ9Kyf7&}$>GHzI#}t Hw#}t>GHw#}> RDH>G"H$ItUvv.etnf܊w{.ɆAlg2a+ssJ*OzW9u=#a-=vXa?X.Ȁa*xuR*5>;]JD9?clŻ3)ڢȂⷄʄR>cr[\wpiU~]w1k5hܚVy W*60_˒wVa2n쯬W222{,{,{,c+Hj;K%*9Y& ZFސ6!nB |t4G#视^x0@5 b0X4|"OFax=Q#d ։GnڡƵs+\k:/Bh+Q=5Qo?\ǥNsa\1.VTkb)kb)k$+,r!}\(bVBVBQz^-+Y!+Y!X!Xh;#:3+;z'B/w.C_C @ ` C!>0y^(>f>HY$Fa43َc;%? 1_Ockf阁o0ls-\|,B,b.Ke~_vVe]QYdT2J Y|lz _O't$E~IB&r%ˮGG݂A,m؎u!Seq,dzBHEV琉,G,$ CZ}YTmR ZR+@jH V ZR+@jH V ZR+@jH V ZR+@jH;/%KR/%KzYc)d)d)d)d)d)Tguf3 KzDa6b6#[X!۰; H؃؇8_qG$c8>SHF RtXpypvd". rW3\H:΅s!\H:΅s1Dq E e?D95PTcv7A0X{ 8~,ҞBm3zxyr=^GkhCPc=X5CPvGBo>x=E? @A!x`(>OPeFa4>|0&bLhs0 RV{kVc Gy[ ;zDa6b6#[1E ۱Mk H؃؇_p+" sEc=Xϴ8d iH`X4=uOcl#e9\c՘`i,4rK9RNc)Xi,4rkwp%R7;de!e!e!e!e狙狙狙狙 f" _B—$|>JŤ{1$u]'u]'u]' HҽtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwt:$݃{tA=HI $݃{tA=HIwtIwtAҽtE{^DA]'t~OIw?'tXF/>^ܝ/u=@$zD:^@I $$D^DE$z^LI  u]'u]'u]'u]'u]'$DI )$uR\'ŃN뤸N뤸Nx) Ńx:iZB%i iZB%i>iO擦i>iO擦h*)Jh*)Jh*)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh ART'EuRT'EuRT'E HR- E HQIQIQIQIQIQIQIQIQIQIQIQIQIQIQIQIQIQՊ>@RzIQ/)%E^RT'EuRT'EuRT'EuRT'Eh AR4HI )$Eh AR4HI )$Eh AR4HI )$Eh AR4HI )$Eh AR4HI )$Eh AR4HI )$EhIQIQIQIQIQIQIQIQIQIQIQIQIQI )$Eh AR4HI )$Eh)ZDEh)ZDEh)'E~ROIQ?)'E~ROIQ?)'E~ROIQ?)'E~ROIQ?)'E~ROI) Eh R4@H) Eh R4@H) Eh R)zKsq9pF^7P"G8#|D\q"BU CD#bG<""b!"5"CCD 1D b3A "f1YD b               N tG<"1yD#b>'#b s "f1S1[" "" " D$"&1IDL"bDD@'q"fq"#bo1ͩdsS g<P1yT̠b>ITLbYTGAT̢ṬbQ P P P P P1<*QYT|P ؅]؅]؅T̢@}G$*fP1DCT Q1DCT Q1DCT Q1DCT Q1DCT Q1DCT Q1DCT Q1DCṬbA *fP1T̢bE,*fP1T̠b3A *fP1T̠b3A *fP1T̠b3A *vb*vb*vb*vb*vb*vb*vb*vb*vb??G<*Q1yṬbG<*Q1yṬbG<*Q1yṬbG<*Q1yṬbG<*Q1s *fP1T̠b3A *fP1T̠b3A *fP1T̠b3A *fP1/QqQqQqQqQ1ITLbD$*&Q1ITLbD$*&Q1ITLbD$*&Q1ITLbD$*&Q1ITLbD$************>O2T\Pq*.Ce 3A98TsPq*A98QQQ>O̠b3A *** 扛*WXD&Www=o'b!*d b}+at{Q{Q{Q{Q{QwybS bTdy gEM扽؋u"~e7' ڋ++q_c-_.a__~ҦĿwuED,"bWG7]}yb!""b!""b!""b!""b?hn}zEkc=c+Ѱ=cu1Dc3t1;(=('=2x/;#_%1)Tb~Lp~?G ycD`L _+cV4t]` AA=Es[6GEt1]Bt]l-vj)سe`7f]Vk!m3To#.ham\۬6կ.&mR,6˵͐6CfH i!m3mZm6G*TtSnMZIK7i&-ݤ𮳴t_vOK7"TtSXH7"tSnMQ)J7i&-ݤtS(tSnMMvߵtRY RZwRHVw-V*J_JK*iI"T Rnoz1J]ًJ%g %-T%RPJUBJ(U *T%RPJUBJ(U *T%RPJUBJ(U *T%RPJUBJ(U "T$PJZBIK(7yWZBIK(i %-%PJZBIK(i %-%PJZBIK(i %-%Pҵo;i %-%PJZBH( "T$RP*JEBH( "T$RP*JEBH( "T$RP*JEBH( "T$RP*JEBH( "T$RPJQB)J(E (%RPJQB)J(E %-%PJZBIK(i %-%PJZBIK(i %-%PJZBIK(i %-%RPJQB)J(E (%RPJQB)J(E (%RPJQB)obobI($J eRBY)PVJ& $dd@2Y ,LH& $HQIK i $-%sACԅ7#}Fy\cf{A-bBb>^'mXo ZOLl:zPwY+*o212O⸗8{>ϙ:bb_bb_p$2- 'J3QL36q>jXu]L!]AWF9G7э}zoh?kMVDZ>XG0nyhet:#B O6؞w]Zi۵x- -qf˗0ٞ_ӟ.o}cw1PP]G-+8N Z'^I|1=֣^+\$uʺі;'fʽ_k?\5ý^uW=Fb~Ji8M}i?O'St }g4E ??Cst(F/Ѻ#h:x:7zO_:i2Cqt<@'IwTNT R8V*U}XbRZOKbњ..C ëmw GK~R/0ld"q9:NhyYtnԇ_}pkicip,?Xwh"NX{hO:>CIs\2aaaø:ø:ø:ځځځځځځY\\\\\\\\\\>\kc T!i^Qz(F:P>|÷>|÷>|÷-o)|[#Ǐŷ-o)|Kc-o)|K[J [[[[[[[-ŷߖR|[oKm)-ŷߖRY9K1g),ŜsbRY9K1giM_ү-Mwt M[i:nIE]Mt͢{>OzL͡G/c8=AOS4վzzzzzzzZ=Rs<h5/^r4@! R TҖei^\Tn)OF=ك=ك=fxڪ9U0tcafpEr#hh]3fe1-D/4ܼw2H:aUx<=O7Gh6m9Dsh6Gmڕ{lp%-n wK[p%-n wK[p%-n wK[p%-ծX`y"D'G]Z4v%,˳i ϥߣSN1;UAkpu\C? ނ*J"qM^EY8#'t5[Dsǽ1x&|'׮\kYt9 ?ނËp%.p K8\på xF{͕ǢjWp[֯p KEX<<Dž՞y+?nyJ=E}=Haz?AU,PG9X{cmwRiÕnW[sJ؁L\+3qef,:(r69h4Ѽib*-Hi_Y; :l_*}NߠlBߥ1l&ͬ]CuW[^C?NxZՃy)M7bt?Ksqn6ƹ87fl]"r=Ci uRuS2Zʠi@Ez(}~4Hy*P)Z_ŹE8"YRZ&WK'#N4Gun6ƺX7qm+7Θ̀=_26_'-ɪv=or=?|='fpך==hwl#$&GD$Έ'ΌV3F<@<3zl^47|0q/ZJї 2}ߠo}Ip]pmĞy9Ĥ`jb`zb?OX~&&'1 7qL0-qrpO:#x:qfp#~pnpYy=:c&Оcǔ65y=J .kOo4[mi{ځvhgz'BDڝGЇ#'EQ'4?@ .]ٕp;v^m5^ekwc/eޜ3omF}̽- naiX*Ae9,堲TrPY*Ae9,堲TrPY*Ae9,堲TrPY*Ae9,堲TrPYv)!֧OY|V%&E}Y~rtPr7v>,')tF}}sW12FY(e,ceQ1ʜ=DY(e9,G刲QayaX^ayaX^ayaX^6 °0,/ °0,/ °0,/ °0,/ ps={8Nqe.t8]2Nqe.t8]9EhNSSSSSSSS[GδWH{A#gșd,93^LÞw$os-Ӡ= k*r{ں7ީ>b3b3;GUߣ{T}Q=GUߣ{T}Q=GUߣ{T}Q=߇{ KtH')ƘMimvǯRW[6;Oof3j*>b0b[wIQ;~GUwTQsa;vGUjwTߵ=R{w="{#GUӣjzTMQ5=GUӣjzTMQ5=G|=,_|=,_^n|顕K^մ6*SJƔ1dL)SJƔ1dL)SJ7(wc#5`5tj>D}6ߢFxЦ_UzD\fQZ-r(5z-gmZoc3gmcc:1`O){*SٞˆvxvO ~WWr8O'`[S}ˑͽM=wCfKҋҋ=#?$>B{^N)P q\: 8(6r\II+Wj[I;^E9,Z(rX(rX&R P P P P P P P P P P P 尰9^i (A{K#5G}yd:x:N/ҩt}N3L2}J_7,:w{'g2]r4@! R ѰNN?'btdK5_WgW6pxOG}tW g:VkWMת#j#v=7䊍7i^ڻ '>Ez~j^;3mg~`k4?+Wp\y=W^ϕs\y=W^ϕs\y=WNʩ\9+rTʕSr*WNʩ\9+rTʕSr*WNʩ\9+rTʕSr*WNʩ\(W>ʕr\(W>ʕr\h3GCqt<@'It2B_S4NgЙe }F_oDs~.\?r\s~.\?r\s~.p}Y\?gq,~Y\?gq,~Y\?stӹ~:O\?stӹ~:O\?stӹ~:O\?uUt靜]5V/rsNZx[bM-i+;h/-mh2.n]i7hoۻ-Cu}{{2؆_Xϝ'A]TbZ4SrTJ@cr$zekz׸βBUGыMh&f4cQ_8}&7}C?,Zy/D5nyDk:gMGGk ш?:f0Z9&uy9ʏm*cHykMzZL=_j-S>.pRin Z2s-Y-C4=zcj7m*zBOE/Υyl}r!=Ci uG϶&-z==*31&:ʉrΪ􀞾ϸuNQ5sWDeZk>iٜV[>{u̞1h3:j6QYU[_~s$H.<<ޞP'6߮ZnyW[ˮrGz;|x\^?b/~nIx%>x菉q{ =dbBĖA^oMlKG$Uk|0fZs㣖]7XUn-`׃j+[7mFE Ec`_S=&FxeM5zos}`|ܠuuDO?̖ ^AđA"qt!qL☠1qrԠ)qfAs[ ĕ+ [&҉l]b01p@n jt0 n|=o8"@Q Gj8 _lbpZiGNo83XW >pny jNpaÅ! 7\|ᲆ˃~pMpx~pCσcnj)8W Nh .lxࢆ sK4,.mlX\0Lm(6 o(7w4z081xT`E'5Nmn]5^l 8qfm ^߹4h KoƱ+/ninqt]qW3o=1;-L-nVouVs>doo};vw;~mmnlGo6lk~w84}Zno®ͻmnvn+&~d^'uc}>O6|rOq>|3wq~ ПCo9C>C|蓇v{Dc~'p-]_9}/>}k8挻C<̯yvnʮSnvJMn?9/;]Νt={չw98/V{nUۨmT*{W}~Be'T=FE_P7+zzEoQ۩T6yjVUx3'>)}Rr?Bdf PJfyJ^yJNI)I|^c2dAeeR(BʤP&2)Ie(BʤPf\2?Be(s!\2)tIK ]Rr! d,)dI! dIyO'{ϓ9$'d@h4f 4F !R f DJ!RJFkDAk'e,.O }RBBIr<4zfo5՟5_n$?*1>ղZmVfjZmVkZmV[R]5%֜{Vyu^MLޮu7ݎswܯp9Rg9=όuƹsG8{&=w;ѿG-+p{#"2hi˃&3nFGHGIɓV^Ӹ8 /䗍O]&Sd LA)H2I o194mSc ]SxޛSc NnjB)8 Sd _N|9A #MWFQk@}>o'휱UcH9Dg>.qa\pӓyz2O/b2OO6vYd,Se \"S2A 1#c9k&"GBi3J%ڸ^IGy IF]inƫ6ft3^Փ/if{if{if{if|d}^&ɴ ڼr_ㄨ+fy?"X_QWҎ]]ъ\Fl#FSj֮6 v͠/o3vc}{ph ~QT#ީXwQT^ƨ1enslsd#p\jUmAՆ_7Ahƹr*rUnW Un( PuUdQ5UcQ5Q8Go\L=QC~W1TjWz!ղ&7F|*oEyOŴe5wآ-ذ6?KhABU&TeM;9nW渵^eWxs8gr+6=tPԫz-o]x)G3hJ\(^K(Ҏ"t#,'gѓ 7wpsX=YruG:53:Z8 rururWOg?F#󢪼3, 7R(Mу,g9}g9=YN~/AN\4$ q|,g~\?l|G8?YοWK#g9>YrǏpwp(EEU܋VR6r|F8~gps8~(=Ez%Q%x'ߌ_r+>y_^ϗkg=G:_yv닎5Ni/Qu7Y9~A%]]^rT{I{9{k{K{K{K{;{93vޫkvx{xoZk@'7, ;M-?Hk.AYtkxCzOStr2h\`=p#p:stzM{N9tN. 8`>90;y$|\qup\kbQmwz됽l/됽.~{[|Z|g?(/]qpE0ῴPE6mn$HzLeK4D[k9Hޥ}ul/KKܟz_ǖ`'mp6Hk8YO|IO'T#_'鉓E"5y[].kGkimvݦii-&Hs>ڽilx{<"%:#RH'o|ĸsm\/5vgy0IeFU6چU۰jVmêmX a6چU۰jVmêmyTGyTGyc;g'Vaޏ|jVaSߢ>–=[vNTpNeTxoypYveMn?-8߂-8߂-%s.-ZI٨| η| η|Kη|Kη|78Bmt{[{VՍkv't.Rm}Hsyy^y{x.Ͻ7̯a< o:ϟ˵98 |+ɧsO%`3p9g^:qDyt3EII6VfHϏo.K肦T"У .Ę:{'6| tycx;mA[jضN;>w+'Zw[Wq=fƿDyc66; /B"4//B"4F _EXŢJ+[4(i~_[0khDc>WV#>1)BojzPP %Bhih0d0d0d0cn_Jk>QTEQTEQ4͛[Zt[У͍^0gBsМ!4gV!4gX]S `0DDO(mۯ`H`"ADcƛXjVY-*q(Q-4>ZQVh| l|LMXΡGk:1 zhErɍO{/$q3j2c_`OgޟChQ =F{HU|^K/5˵T^ayJ3)I Uj=n?9VieuV4Goң7I٤-ZEw;zVmxLP uzzG/ B oSo-hUuzN뤺뤺N뤺:뤺NuR]'u^]'uR]/SuR/?zF|=GTj9j9שZNZΫZNZjj9ZNZj9SIMOSӚLJM'45>M'xRWUj|Tr:=NM'[ozGr5TI5TI5Tϩ餚^=zZР끲w|m}j}sps>$4z^ m LгQL hB-Qm)',QrA<0^_~}us8njs8Lk-[oB\Z*vl{C4 8^dslnoq>E|}q:狎ECX"p{ƫT95yNpR2\ZL=hS(2AkР?k {mΔڷmBȿM v. vn v  {5W?4]|MбtOFsϣoF5Mߡwt ]N?te54hY4cnu,7P%`fvL [VQW;hږN[F'ioZ=4؃>@͇'GhOڋѼc7=Ŀ5^Ot}>Eҧ }&4IayNGБtMgcAtH'ޛ7UmOҤJ LXD&AeIQ*neYERE)-ZRҹIIShxo{;x׵2kg'D/du"L"W=sZO׺XDk7a&̂ܞsי!-Ma6{x2a9ܽxXű@i>Σ'ΕGG !$"nGCg?#=PޤgaySם8c'+Jϟ*Oiqt{Mb,k_[ h C B¯pD5G s?.E% R2\THt h12:8 c6@cF7z J܆2QBeR*B%@kRRC QMɼԆ:P€ 4@Sh.B\aJk@[ht."ѝy 7 }]+u !0 ˣ ( c`"L`2Lx43 ^y0 `1,a),VҢ5F#'𙼬 6f"([ v. {TN| A~DOpbgbW 18'3pAH7dt<./^"Qge8',/^ :.w%"Cmh ajxV40<@aCa 0QˍXnO܄LT(!!jƄ|rP|h-s4vu4GFGFGG#ֿHfZ'ðJ*2[Vm1V*f8ͱ;K ;,cY&DfErg m/3S1efzb!fzbx^}hHy3<Α%DM}>ReG5YK2gd =F{fU9E$L/336Q7KܞW=^/yxh'Z艖 L7Z荧SƓxzxxxhM}x>=79Ԑh3L42%++AL/K-R3L/5KOKzڅj 4fZ@Kh v:@G tݡ􄧡>ho%,A KP%,A KP%,A KP%,A KP%,A KP0&D$=`2LGg@$Y0 `7쁽pw4d4f4f4V ތhɌQifTfFQifTfFQiJ3̨43*͌J3̨43*͌J3̨43*͌J3̨43*͌J3̨43*͌Js`TfFQifTKKKK?{ { { { { Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)~Q_%E ~Q_߃Em\| Ka,Zd 󄩦jAmu! A}F 4f=JuXM1_ yiĄ3bfTLZ/%KI륤RrǍA{P7/EJP7 fA,;>μ&ԂpOXO-pY E,~ofP2K@ɼ(lJfAɪbP1 *fG`zFQxʕr%\(W1ʕrQ8+:rţ\Pd"QEQdˍr%\P.u岠\\^ˋrYP+岠\˂r%\ˋrYP. eG(\^ˋryQ./E(\^ˋryQ./E(\^ˋryQ./E(\^ˋryQ.΋ryp^ˋryQ./E( Ed8/E(*AJP˂rYP. eA,(岠\˂rYP. eA,(ZrE\Q(W(ʵrDZ\MQ.岠\˂rYP. eA,(˂rYP. eA,(岠\˂rYP. eA,(岠\˂rYP. eA,(W eAJP˂rYP. ek&*3  "BaJQR)EaJQ?)EaJQUT T XP #>e[cdR:SiTrt)9]J.%GK֦lm*[la*[ /_d>^75+ Zh'sEWyGD@7='< 7 0` 00#`$<`4`, mxޅ`,%; X%}b% &TvfM'EH,D0ƼLd*|~}n>75U-彵-*۸| _v;a=wdZ}[=wG pႼP1z^("p&xP 6;g6Fa lρ}P}P}P}P}P}P| A~W C @z-S2-o)pWfחph(˂KeN)]8 t.҅CpH!]8ˠ^)Qx.υp<\ sr.\΅˹p9.\ sr.\΅˹p9.\ sr.\e-s`.oal->m%|a]^}C ?a_ c 18!.E% R2\THt 'cdup@ِҎbQL;iG1(ŴvӎbQL;iG1(Ŵvӎbڕ` < Ky>_p?ppppppppp5:j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(uԫWWGP^eȖ 9+l̓yp6<8gl%|ahyp7<wn̓yp7< ~?il w)8-3p΁g"XXvH W Ҥ6Іp@hm8  9﯑ug].+&i.nqJMR[ujHT$ ҔO4hߓ,?}M}͠9Ȉcd12q8FF##Ȉcd12q8FF##Ȉcd12q8FF##N׭ ( c /L1V@U*s4aˑ̆9:7d)/E -c!U "X K}X dX6oJXE<,VSi 0Shg?Qg9ֲn"@Ԯb%xF}d#6Ljc1bq8Fl#6Nu}MM?W+Cc8Fp#8ʼ278\7'I `i04A f3H$ `I0$A f3H$ `I0$A f3H$ ` 0#3Y0?suxބ<-X(3o;.,a),al->m%|a]^}C ?a_d1~šDq(QJšDq(QJšDq(QJšDq(QJő2IyLR^&)/ITBeR*B%+AU:ԀP jC aP@ChMq0\Riz@[ht."tz\7~ A00`,(o"X K}X `9U"!fHY,a0tE:R>'6& [`+| v. {10o`-|{~C ?a_Iqp~p 8 sfH"\zVŠSXq +Na)8U&T2 S1q8a0q8c1+nM@ xe)IJe܆2I$pf8IsI3!i4IHpRb8)1NJ '% ÍE(0tN: 'Ipa80\ER[X:bIm%L,i?1IpRc81Nj '5IpRc81Nj WVv$1PD`2{2WW+j׋OM9fиE3no?6Gyl(-bha甪Rj@MM7pR[Wh*)u50M3ҀOq+nμ P91N)L,Xd*^UobrTP%4Ntbe18U="h@{D#,!6>7 D?TfG[#D?OD?(wGb j 8|рDЉmʟWk)XtiQeU697J[pS+dtQD i%YN42RR7dܟATkKdR?U~2P?S?)O ]%.ȶbl#>m'gi֌5K J3L ~<xT\NcbbZJN}&=6l?.dkŻXxSK:}A_wxbƽ3 78>ǧS8>O쓋c?p}e[=p|]ٙS)q|8>E"Oǧ!w]#.^ Ed0B9xjB- r"4%1%-#!333333QHhJ'iIvi'iIvi'iIvi'iIvi'iIvi'iIvi'iIvi'iIvԙiiG}iiG}iiG}iiGQQQ摬}$kj!Gi7iMvݤi7iMvݤi7iM. MHbzgcZ"14̻1JEO5S 5Y:8$^XC`=SH>jҹt$;INҹt$;INҹt$In1GJ1z=Ѥu'iIZ֝u'iIZw֝TYF͝G]Hr/ H><0]f@$a;쀝 v+ˌ}XBTJPAu#H7ֆ:80A=Óˉ!0F0 F{5Ke(Q*TG,RYGE1b<*yT(QQ̣G}zf$ImFRf<- g, IiFRfIHR3 .H4H16f@&\gU!rIu᤺pR]8.TN 'ՅIu᤺pR]8.TN 'Յ© `rPBGu᣺Q].|T> ՅGu᣺Q].|T> ՅGu᣺Q].|T> ՅGu᣺Q].|T> ՅGu᣺Q].|T> ՅGu᣺Q].|T> Յ§ '<0^0&ϱ0^WU `:̀Hx |XhJG%㣒Qd|T2>*JGJqSRT)n7U*MJqSRT)n7U*MJqSRT)n7U*MJqSRT)n7U*MJqSRT)n7U**********************E<+*%*******EJub:RXNT'V+ՉJ^Ȕ-L9 y{|S1UM@ xTPPPPŨ%K73R\f%pƟbrFq?Is.5_-$p&^}.p&qy= .,/ Y2Sw`xPiJ=[v1zWQ[=}༁}>S l_޽EKOP,$4?E^򦮏lglcz&X2#6W>IPE!yZ<;5K94œ»,cmSN?)]%KsHع"RDo\H"^$Ye) )>~wx?ku!4D26򖩆c 6ԁ>ChO@#h OSB3SMbcj^t5-l=8oX,lQ6nQd<JDjEuOttHF񚾲#fbXUD??! b>UM|w'z>_|%6ep2\p97^pCupip񝡿a8/4j:W7W tPϴiT`ѤGG[p-?T_T~n76I}ރSPm‡COWht?xf _Q{U;ThXqݵTVWiT +4iK[U^Omzpiݲ?l>#a+OI}];i?MwU->!h2Oߝ/LNn6S^vFw6ޭ{1{\:Ws_>Ox1YfyW_'j!jӤC)+Mh5POS6T#gOnbfZLJJUTRR>NMEi&NBg{MP?U6YJP)*uJDSTy(ZTTWE,%GQ|,%GQ|g' Jd%GM"X6/a),V*VX B|:>`3l9l/K Esh.ͅP4B\( Es|$.ᖷD1ǨnG" 4"ͣ+jd3Vݚ 5ɫ*ߪܮE&_aHSy] _HSЀ ??̟Xgהfl yܠ_eQ18./QF~2/(ՠ̝ 92#(yC-"F-bnd%<+ӂJ|51|pǥ \:KE n@/u^#O>+ _Q9@׫Cպa0팢'|Ydh's aga|4?F vH,RLPM棵yJ8f4MxC+WerC(N(Kf #o~_ ~1!L'ഴp,ăAM$sW. 9ڗ_1>T~u'd%P.>t*Je.StB'⣓OS3YL^♙<NPpz"l3?u@uqy4wHrzdory;HhA(%a%aq*rjqܞU%eUS&''RKl{PbD[PK&cͱ1sl~ؤrlnslnpl96g86MZӐ H$_pRU)Ǫ4CtQnf 'mz]T4}r\i3- wD5Q6Fi( c}Hc؇ r@OA+mV{3`Jh%;ԎVj@+5LRuZԅVPLz2z&#*[50檴emyL-3h 2$B{ОNS=~;mỵ-iKB{^#h/z\3D<&hF#_N ]TfCxaQ̫+zB2o2xM^+#qqlB !?y/xvLb;=pEc}*}\zu2LTSwae\E古 RZ )AJs~$HJs4)- Ih#$4$4 ABK%$]6,oA*s2,T 9HeRYA*stRYE*s HeE2iA4 9iASX:IAs HbUIb?$/ArI[$3tRV)+C$U]!U]!U]!U]!UIU餪tRU:*D MtT:iAr)~.EY!)iAZ -eRHKҒ -9HK@ZrRIJY$to"H hQV흴ǙׄZPɛ>4&0]OC$a;쀝 v jȕV㣲H?2PTjPjH?3όߌaPC8 hIh}к ,<a̖90^7MX ]Ʒ#1ç.al->m%|5d v _7p'8 1  cp C"\`K`e@&5nj Y@7fCTP c#(ա@ aP;7T_iҚC' ]+D@7='As0`Qpea1 0&K0 SaL < `1,a),VgB 6f[s_lvnh(>[ ~?/ 8qp~p 8 sfvUC"\p bk o*M7\ȃ|(7LI)[r  y&xP*M6CTA5L5L_Z)PLD柡WUs4Qzi8NEjPjn)$7) Wg!jŽ}=+l$ij?E4!w^ gE7>j$r"G)OjzAi<+A_CA;kaC%n),cySԥvon"\Q 9"j֦~~fPנdZ,ϚrX+a|a ! >a|_MalMV%|a]^}sSKv Y3TQ;5zy1Z+j?݃hjX8. Pk%ߩu=Ej/5C{;Y:FSDw.zm좍oick3=KۖeٲT-ڴ`z&tm6͡MshM&46͡M7ѦhM&tm6DЦ9&tmCЦhO'=}5чrhAMu&ZPϴP4BEux[¡2J4uz-hK؛vц8omIцe'D vkKUŨ(aTd[#9RGT'EelIzo0:[ ~z0[3m5^e|y6Ƙ1aycƘǠ^gNz ~g͘ NSLf,OyЍ7B iVPEE~c5';OrH,=E1i%׈Gh~]~=R"=r@?>~F3A~#HE$>OOLzՔUrӿ*yp5KԄQN&lEM45$ajIԀ_O 8p>5|jgPuJ׀55\;jkZQ%S^kEژ/7@!aJ l<*ۑH{Rbfvd<#!&hzz&Pc'yQiDӈ15OjU*Jeܠwp5~d !ݞpAP䵤VRn 'I2uFD}&Re7pJ}'*2d<s4'5')n- P~( & I~( ?_ߚJ%ᇒ{ۑCI$$'I$P~M~k~( ?JE¯A¯AoNJ¯AoNK¯A¯A$G#I$H~$ ?I$G#I$H~$ ?I$G#I$H~$ ?Is!#[בבHHp6z\ 9~ ^6x 1-lx2X+`%`5? %%%%%%金Ha$0~I?F#金Ha$0~I?F#金Ha$0~I?F#' ٻ1BHy=)'82;ܵ"8|ROBGiR,K9֤8{8f2wiRѲ7Ѭe}d:I;N W#3]"O `U2[% uOy'y4zQ 9Jo)5XǬG4_74#!f!*/G3K&4_X:[V,c+[Ζ_+< r9C!{%tc1 r~/XD7gٛxAc^/x^i *$?Ϳ㿪h1{&hÇcp 1|8>Çcp 1|8>Çcp c18F c18F c18F c18F c18F c18F c6Æcp a1l8 ǰ6#Lj1qx#Lj1qx#Lj1qx#Lj1qx#Lj1qx#Lj1qx#c$aτp:H1+q8Fq0P1E8Fc8F,c8F,c8F,c8F,c8F4cD8F4cD8F4cD8F4cD8F4cD8F4cD8#=.M)qr.qLSlDn!wGVSU3f?n(~E/qTˆiLUe+2ʲePc*QBa& O SQG2Om0+]GRIiw@uD}[ٺ#lݑ/C$C[ů+Q%uTpTq)TpƯd3n0܀ ^ fPIt0Ze<:!\(70#|]0p5*!T ͔1 -%^B;mD/7Wr)?zTCT3]h4-4u.=u2яhts!zY܊^kqt-{6"O#O#O#;H44 O#O#O#O#O#O#O#;H44 OC_hmu]hd1YFb4,F#w]h.4,F#]hd1YF=!hbg4q(:@zCнP)7 Gf;Н~tُ@wZ;Нhtg?3 yТ;,4d xA=*ox'ocyc M;nG$&8R9Rr^Hrrjr;:$ΌΌX{8_)K ?yLߜ|Y3xD [`+}<؆[SSxp\[x5ۀ>[>+J^i+mx 6҆WJ^i+ms܆WJ^i+mxo+$2 L+$2 L+$2 L+$2 L+$2 L+$2 L+ᕷVF&aajXaX'n,:ƑOWhzd n?MSt(Sxֶ' OFasm`j Uk*]R4ϏM!Bf0- Ȳ#>ݥrz>4M;)-- ,~`J)+_ߙ+QC单Ǿj6ڂjkWUZSiBkV9'5muyhL`ލy?{{ٌ|* `$#V;ƶ*G2m=8r͋fPwA"u=ۺ+;8ϒ9ϑcy,NkNbtMr2]H. k:>QmKV>s?RaMl5o}7c4=pFM_ hxe?pv9#+%_#GqpdsdGYM紶^G͟{S l#wf#gô$OopTY*j3ZP m5VC[Mt IiZ^[^aQuUU}/~{5qJRR&qEJ)(aJ؉)J؜6ޞk=5P+S'@UC*kOU3s-5\"Fc!W`!ZT'+ii~+U)k_S U /|_{`/K6dc/ΛlŨ&l:Φl9zΦnͧEfSo6MfSo6MfS2(SޢOgS6MgS6MgS6MgS֝j5]vteo.CrTZ6'\E\E\8\EQȁȁȁȁȁȁȁȁr|%)E $g瓳Z|ԇȁȁȁȁȁȁȁ1>6!mDnۓۖ6(kfG{o^}N[< UlӮygbMț dXWF)j,֜5cXs:ŚcX9kŚӱt9kNǚa9W&w(N$G-+Lru!\]DHr5F/cXs:֜5cXs:֜^˚c6ӱt,:NǢӱt,:NǢӱt,:ŢcX,:\E_ŢcXǢcŢct,:NǢӱt,:NǢӱt,:NǢӱt,:]i0i0a;v0f`6 f`6 f` v:vaL <vhm `7GCa`|=0i0i0i0ax< wdN4N4N4N4N4a; w0; wo夁7sڱb; w4N4N4N4N4N4N4N>xY5-|+l~ƂvrgIӞR)6$xRa{+c XC*֐5R|*5JͧR|O7$(I K7 c|}o9V5DC)PJB2v*JmR۩v*JmԴsSTj:NSTj:NS:$KRTj,KRTj,KRTj,KJb=zQk+=(2r]I+]SU;t~jB`3}2Lwb%jo.v^gP aup)Wguw_Kob,g/z^b W0 L%tA.n;z^xp ` D0L`$I`4kO3Yx^/+Ux3[`&xfB ?"b]qCKGE%)T&gJJ%TNQ'?]Wt~/bt;:wD/&-կT璿_kUMzk7țwZ_4S1fj^ ^֨чe_CQhP'U9+8SJ}mc^sŌ?uXF7!uk'nk(˚Dk=D?z5[_6 gY@o^|Ub1o"I{_/&j/KEջTw{?x[.Ebpo#7nw;pL#'Uqer2zyzJl0|! UD`5X ZA6(A9[VM;,KQ2:&3%q{dp^wݨջ^1{ǥG)U7W"bj|jZK7zZarjMfQ,JE)YN)(eS,JE)(e̢Y2RfϨF2RfQ,SXJEI(i%͢Y4 [,P)t*%]Ŕ4fQ,JEI(i%͢Y4fQ,JEI(i:*cw)a<%QJr.,wJOR:RSxJO)uwc0 њ[њ[9}&>V0rH@nzufr37;d pֽVOf8fmQ̀ ̀ ̀ Ͱ{O6n36n36n36n36n3~pk44WP~ fmfmfmfmfmfmfm\Z̭(_{Rςd 3i3=u9v|Cz—YחK3?JYƤQPmP QcͱQ} Îl}6w쳹c F,^xp Ɔ F,`Ăj8D<ulDrprp}:Ƒ1RIpx c(<1x c$x c<1x c1 ()ōbN) Ihu}<1x c<1x c^\mvxuyErr=9R>Ў>N4^Fu9,'u,'ױVNGF-h/dL&gM@S:Ox&ޅa1,~Ic9su4$Ċ[Uux\hH5N1hGMA3֛^ll2eLg=\rĽlPq6˗UJ[VM/vr?8G<.bX hp2O-»U/uO'͗OGc0,Ћ% VMzƳ~u}PWE`1X'#^^R u^T?Z;آVP!* VM}-"U`;Yn,JlQ0<~]p.L6fVx[{uy޼v~üC6d9`:x[z,W0 LrvG t  z 7~?A`00}?#(Nzp'w0 t x< Ix<ρ _Ex^M0f;`VgQ˫ϩ(595p\9V`QõFڨwcce٫ΝX]hۘjEC5O|ҿH*kڵP,g\BJsk=Kb'ݏMRȑ8k\h%2x,E՛@0 `0 'a`8FQ F1dp 8Ƃ`8h&u(Ca6p; `%WU N/1NJ_ۇe_Nj۔q.wqz ^ZuxoLZzy X`V4+Vs+`'v(r{>!PIRﴞOg9l0|! UzUV5"ll[6ѶZV?nKX>w=V6d?cO8nCkbRT95)QRU}HU]dtS*+q';#؆cYf%/K>r"/W7εROK\iw1ש|r\aTK9jG}/W׾_j*Z*ڌ*څZZ[Q.ݴJWoJ. l騵 l;J 5rr$Qʸ~39^C=y<-$%vwRMBEb4jdFʏ'R< Cw @1sFY6Mr}Njjw Pj[}+eyLKyWWGK_(!3({{}_OQ&__=}.;;YCj!Ւ0rR-@vz 큡TWzEYw8ͳ\D(Jκr(ArPB(y"%"(L˽Bˑ_XGN"(}OۥO 25W%fXu1W% aV1VQVN:/>bwzZCԓ0k )jU[ &[1O?3"h=~:Egjrfϝ羖9[<~v29Yѳf,4WMVcst{zcbĦɕ{4Ɨ5~ȩˮ\z3jvֶ֯i h[9f39OR]oƵ8Ͱhi ,Ǝ_b=(`ʢUU\!~qE8+xD?W\#;",j@U͹LJpђx׸I.U>}6/U[<+m|>j˷h+4r|kݾu_d_}Tf;l9v%֜ʕmygNSSU|@hNǛ=[j?Ee[Z-z&۳Xoz{wPYYi=cR}c#/Pn=CyW߯I 1diV]o̐oy.aX.}ڍث}ɥQ[Xl'Not.ыݳu=Wot R7oY =#KT;o+)2B=՗gځA'.+gz^xp ` D0__3_3___3_3_3_3_3_3_3___3_3___3|璿.z1W'Fs 8Nc 0\1o7zy nwm,`*Lt ?K0K_z_`>x~dWb/%-s_K 3:_wr|!)3V)qW,G|bLv9oA%gro'Ъȿָ.*ە/Zz.揝sգwG^ߪ:IOVA.n>K=W>/` ` Np0@8 cp*C(:Ɓ3Ylpmp]]+*p5'Vߧ׃Mq^np'wx{6|pu'jv5;ǃ~ @} Xf9Dl \|=&5IOv_zf@\uוzk>c?z_ԫ]/+Ux3[5AA>XH|XKl,O`@X րBEr%`"P_fP*js+`'v(~{>!P j)`p}&@ `g C00#(Np 8UONc 0 p>Lp) \׃;nw;pL{}~}عx<O5Si x</Ke x^o7 @{h0 #1| >`| E<_||BX~r Bz]V ~A͠T-`+vn{/`^_ @n={/`/ا 8hgnU5u@e2"0xr)ϔg3UxLsL*QJtt*֯t/˔nYrfO,D4j縞fglQ8A'L`iz& mx &mx MYLmu>'2.BPE("qʸe\2.B PE"pj5\.B PE"pj5\.B PE(U̼\dp-ܨ+Q ( ( ( ( ( xrf9^Y,k5xrf9^Y,k5xrf9^Y,k5xrf9^Y,k5/t% :Ax(4Ax(4Ax(4Ax(4Ax(4Ax(4Ax(4Ax(4Ax 4 Ax 4 Ax 4 Ax 4 Ax Z-AK%xF Yﰚ9ephZ4dv=@.t]A7ǃ@o@0 ex2z^ ^W/ëex2z^ ^Wգx(^=Wգx(^=Wգx(^=Wգx(^=Wգx(^=Wգx(^=Wգx(^ ^W/ëex2z^ ^W/ëGzGzGx|z>^=Wǫx|z>^=Wǫx|z>^=Wǫx|z>^=Wǫx|z>^=Wǫ+x z^^WW+x z^^WW+x z^^WWWx0^=Wx0^}x9x9x9x9x9x9x9x9x9x9xExExExExExEx2adp 8Ƃ>Ylk]ΗMuŭ`/ni-Hq+X[.;ʧw*ăf9hz z=V+DEc!X=Bc!X===Rkd!4YMFda4YMFda4YMFda4YMFda4YMFda4YMFda4YMVȍ`8`YKMVy]V.",.",d]BEetJtY]V.+D etY]V.+@ etY]V.+@Je2tvtY1Ĉhڬ5Htc*`V"h-F+@Jh+\贕tZ!:m%:AEi%0:-N 0:-N 0:-N+@[]0z-^0zԻ@oGla4[Fz'-n[n+AEmt[-\] &;8 I>h&)Ml͖ `f+6 WAY FoAmAmAmAmAmA jhBZ!ZVV+D jhBZ!ZVV+D jhBZ!ZVV+D jhBZ!ZVV"hZ-V BhZ-V[V[V[V[V[V BhZ-V BhZ-V BhZ-V BhZ-V BhZ-V BhZ-V h0Z-V h0Z-V h0Z-V h0Z-V hhhhhhhh0Z-V h0Z-V "hZ-V"hZVV+EJjjhRZ)ZVV+EJjhRr"hZ-V"hZ-V"hZ-V"hZ-V"hZ-V"hZ-V"hZ-V BhZ-V BhZ-V BhZ-V BhZ-V BhZ-V BhZ-V BjZoMwTYAEjhBZ!ZVV+D jhZZVV+@ jhZZVV+@ jhZZVV+@ jhZZVV+@ jhZZVV+@ j%hZ ZVV+AJj%hZ ZVV+AJj%hZ ZVV+AՊjeh2ZZ VV+CննՊjhbZ1ZVV+FՊjhZ ZVV+A"zT-`+حC-~ B[ V~+A=eˣa-1Fk ltw ~{.;_Ӧ[ګTreX\RпVoR.遇T#GU'Uw`a`\.܀v]z)˝Dom=[v-zڭjr}= FoaNoGi;};uzN}_DYι7Uu-R"ۢv@["G+.^H,k)uW;JQajrAgzBm^`s'kj{X ҳv~u]^cR-gL^Wg}Lէmm라FKYʯ*bUL1h$dLjٷjf9Ǵ`wK>)Z1ũ*4ڨ4RiU`2TS}ԀZjJ=@p r R.`-uΆ+k5#5g#5 HRgņR1D/.ˋU%sR\溌-.'+R>Դ_j-5퓚Pӗ)w9a>wrR7~3 xW-㛉5|b >X5T0߂MXN|߷0>|؇y+1Jb%XI,V2XřCxl$棱,f3+Uyyg^ %aC7XRےcImImIg[vR`3vtXRCb1͘ZnDCLzb Z\-V&BHJT7쭻ꉭN`:;;UbUϓ_–KпB+դp I3SVݠRԍLMLu 5U݃}Ocjejcjg2LF/x[ mz_/1ҍ@a 2>d 7,c19xe#FeFjjl26av;K i(-/JKh(-}[UU}$$]uz lu3뷺nCvMꚪZ}az[w=LӮgHY׳km-ry{;d))*snS=SU=*33{=_E%e-[zK[bcRcRU\L6~Lۘ/fj媖OM`nU7VPjCfd3iͤ5PZZCi]Һ2uՓUOZW=i]i]1ZWsi]ni]ni]mu52_T͗bf94竦f|=mrf-f &bn6˙W\̵%ꎱ,2&VS͉ b!OV;bgʱrw/OԷzYYCT<gbT,:;l;{Kgo=RǙ?i}|\k[˙~fªZXVjemJim1eU,w}\WH7?V@?-[A%!]n6AJ3v,G1!q/:VsƽjZIg+qθS;j"_HyDstSJRD e]S$V؁,QQS :5U7Rr{Udq0@xW4!b5{ބUʾnU'y~MxHbmDj:&Q#rknY N*M̫b/i[ÎVU#[vvO(Z&.mM(7!m~_xz+%Wb_+x*X׫=o$͍5﫚<̉+g9 G-VjCڈsc~/o bo}L uZiHu+}Ujhj)pVO֋`Ž\^WvXJ[AbUίb@v3]z&BRq-'ZIͭRӃiisERel>*&m˸}Jʝ߫AyJ>q~)kc}l0^O֎WgBe.UP}7BBUrD-dfKDwL׊D5q舛EG":JCĝ|7).3֌Uw㱧Ǟ&~KEW؈QF}FSᇿ1llپטh^r}q{lk܂w]lJJamnp̶\&dxnt{oz՗1yU5ӱ 8lm#'/mo/eO[Wa7W3yH cסǒⱤ[U;HNx5ɫB盢D'ί':?It~}  Q.QnHK,l :9 :9F첁e(QΧQo@,K RMTS,KK RDƊƋ^bثG{uttR]خGG G:MQ16}6}6b٦X)meb٦X)mebٖX)4Emľ66 Q6cEmƉڌʟW hNS4ghќ 9Es͙$h9voJĽŔ׍5Ʊ_7d,H9u;vK)QVT\G+Q%QqD1'HT\diWM]%KrIO\} oZm34C\,ׂVr-h%g8i.i חDn0%L>0SL3\?MPU9 gYۮRuטбY_|-p⥍&}RLFt=RN'Ꞻ.7p:FsD4WU^-JD,!\?Qr\ N.[/.!XJ;ϷUwj"rW׾key&mm~p)P9vx*?`Qr?PH*ˠ;;} XFRfku"l=vۨH|cMl)'2zrX$:ļhk\^flwj=Ju^QA>Y>WckqP_tqz2l}o/%v$ڜWc>=Eκ+#-ZZr߭꛱1G${~~Noʪzؖm]ӃzsxھI}tʹmPOO"iصVahw5^ -8ڝte߻.塚u5k8{k_p_/:BX-Q֥W)UQ#GDscVp̳T5)T`rjj],9Ǫ= ױ'M//kw[㩔+wWc{Z{dRGKwZ^7ERd2j&*drr&ڡaAU eTaLfFFhRFShaPiqF+H5RUndL#RF;htTݟ?SܳsT'u^^!׽ʽJwopoTܥ25ȽٽE qowoWݻQ5}}@rrRyn$Q==ɞZZuww:FX,,uo'uWRgOVO_._U?K=lKퟧJ}F}__/++ԗx0k.a]ٝ0)Ff򩨲ιR0^&K⨃b P*P*0 blcxX^g1lQ[qR[R[VUL260zFC!ڈZLZ/HjhùuPu<m$5Hj4Yj5ܟ?UqϨ]/;[sc?u<<<R^;ԺE/a}{)?`G/bb ְA5ro&R.2c+{ V@XI=zb%Jꉕ$ċ$JJLK+J,d2'c+.l2c1nXyOy?P>~PGO93,ɏ%}ؓ%='ZU%U%Uj(=,˘|jڀDLU#VK(٧Sbnډݴ7\Ku0LT>bX#Y5khf$c ~ h5FK&HaݶbFk5S6lO3ҸJmyDў-9Fc?%KS OɒCSJK$HK$Hߊ[Vҷq~ +y6YY?pܶX^k*==*~˖|{{-x_rrؽ½c] ݅m+lnf+lne}{6j[akNҽ˽K"w%ޣRݿi}{{?붥6qRJw%tqa=^Ojy|l{' b=ǜ|@%ߚߪsI`0U*M*[~捬F*jlqRTXmX`u`>ȖsT5WZײ~u7Y7̋"*6vkjH8nU҆ц?:IKn/-/-fز//SII Ow# |\5V/_/Ub`a` |NP.d$T:R?c(r\"O֏-m.1lF"Ш~]3hZێT/P님i;d{~ۘ3 )Ǹ[=B(GB_^izZͺfg)w?ukΖOOo8'䙎y<=ӹU]%m(5Qn]﮳i3?'֫8dY,b[ _~7r]&M{(v=YoO\__9?=Fge5>%e^};UfU鑐Vc>2 ,?^_s@Og=gQW +J)qlo߳Fb߯tL/GhҦOUR?/z1UwgQa;:eZ&NNv;uV{Q]ep}rβ;+߈:}e(=O3O}I{вGoDM0Y;JE}c;ﲶ}lYsXVv{~_hϲWd?V5fnm?(D!vaJaI7"hcvP]@4Ph`-k,N6 |ړn'5qIt#э[+gYcαOrؒQ~G@+|I>%^W{uܫd4_r 徽%}ܱO{r>Mϧ='Qw{ rO>K/=yܓ{~'?Hɻ䞼GƢQ+C_F2^eܫ7^ W?PF ;r>[;]}S;#1?fnjP%LDԍ$.u#JDKbiҝ%n"Qtϝ%~N9O?9O?I$sm$rN9O"n9I'q9'I'sD $r&VA"ab[ĶZmj.BlV3fb[ŶĶ:mŶȈ\&#seBJH26!K&/cdT2*GȒe$2/#be,P4TF% Q }jrɨXGF%2*!VF%tQ }dT 0jtWܯv/{2w4ށF;KzRwJ@ށTȐEz;!_ I[_ I@ȓ~$h#m ~6/M_ I@cȓ~n/'M_ I_ $I@cȓYz Oz IzddGN/` 0D} dG~+HAK5H_H yyv2Rk(A27!QFXҧ(cC,yB!^ƆI/CgվU;'&#AdGH1ifCj'e|Gmfفy'3sH9g*◞$i$#D2B$VzIdHKI$ɘKIȑA2rdq$HJFHJC*І82Ҥ$ɨ4>$◞<6T_dP6TƧ2>Ŕ)e6@F +2b%[nzȸ2nt+]7a#}:^Q҃;JzpGJH;!>åߧ\~&!}=ySzZJ_OI_O7ɓdP7o(/y xW|YzJOPd@}?俨Ÿ瞹_+iY OOr\M'bjHɒ߮Y[@?XC_A=2?_GnՃ2~枽=fߟ_Fθ}ƿ'tJol jT u[T=.6;Ƈz~c?;O>ͮ&RճZbydN3 .3=K?PBEH,O?usOh7HMg3WONkV]$MZI*f9>V:?uay͉N?B^x(G%QƉ׈m5KW(=~k>xDwy,Xr/]icXZzЋX鍔vسNjB~#)'J=y1KQ#:ڡwSŊV w5N)W=<<=<=<#?O_URQݦ( QҚJWUiJӥޢmުm6io=-~O;Tcd?3i{f]3"(r0j0j10jQyGj[ Wدz_~5 7د```\`wc ```j~Y~nL80808 80 80 80  X5808080'80 8<80 80#80 80'80 880-80 8080-80#80 H0,H0H666% k (kDp`Qp`H"V=X$sʄv;lP=VF`°D&_a#د0د8GѯtDa\PX+%bR"JX+%!bR"JX+%b,,R"JX+%b^- V^^- ^Z=xzj.jQJzSyyE%%E%o6=86=5=x5-xҴϴϴ̴`ŴjQoQ Y2 `´zӂҀҀRRRխQՁjG nGeƻIV"`t`xCIJZiZ``4`4``4`;7򂣺U82R**-*gi̔oҮ&u%~D~xf;oux\V|]!۽DIE<< gKޒpk绫x/ngw{f4jM'\N_yqFs?A{˺?=įwD1D^A 5""b~bjz6J,b~b~b~lE 1blE 1%b~b~z/[bC@̯A_1-b:NQWF{5iW{5p7!#!![W/"p=br4!FOu'uuu+uuW!VT!N{uW!DmC@mCԭBmC]ۆQV06<)*D6Deu!FԭCmCmCm+YGGԝAA@t֥]WcL0&k]Q7I3V#v#v#v#vc 6ED"LcX2ղ,kX@liBliCliBliBlhadkZb5-6vF݊nElDlGl e/ĖĖXbK/b0bK bK;bMzv=»DH@btGyPGnY"P0鬂HHHHH=&" $2p"G@xFs(AXHxr"%BdDv! {KB+ 'o!E@C&0"*"$q I!*>DDd(DFGd")DEd.D!~D@ mDvCd?9Nxz%艗 IDH$A$X", BI*v*N vpIOV[n}PӧY}AG_?H?T?B?Z?N?Q?E?]?K?W?_HTBZNAYMSG_HD\JFNߡ4phѐ0 9C00000000000ϰذ̰ҰưްѰŰݰ˰ppppf8k8oh2*:4cҘ1&c?@p(Xd4LcqqqqqŸɸոø۸xjA{~~8Tp;#:j >Aюq)YEՎu ͎m=C#S3sGsjFu΄39뜍ξaΑ1IΩyeΕ5΍-]νΣ6YyEgKҹ.+w5Fƺ&&f渚] ]K\]\k]-Mݮ}V1IiW뒛qzv1wʝu׺}݃C#ܣSݳs݋K+ܫܛ;{݇GݧgNx= Oړy=}=<=<#=c<= b/5FF&fVV66vN:|~ίv/?7G'ggW7wOg]E@0 H2|>h, , , 6vvZ' KA& ֠; Ƃ`6Xl    N N N . .  nnn    v;C\H2!oH %BP.Tj   M M  --- m m m  Ά·.D͢S1)fļX/6āq8J+N'ęY\(.ĵbI*wăbxL<) 0VakcT8 7GGDž'gWWׅ77wOτυ;.#7"Ft$4FFDGEFFDG&EFfDfGEDGEVFDG6FDGvEFDGFND"g###]QET5GQ4MF3|>m...D7EFwDwGEF[Ǣ' K1&c֘;bX6Vk MMM͍͊͏--mmmu:\\7qo\'x.^oOOψώϋ///ooo/ƻ.aN8D$LdD})/101$1<1*161!191-131'ќXXXXXhIlJlMHNKL&%N&N'ʘ2vMV&8[ӓwzғHYҗOnZwţFi=(Nw5ENTeXvaE\tU\pU’K Z@- _t@8Bz* T 8&6~h_FL>_-?H'iEz%p>p ~k{Asҏ = G&3z._@NdqE?8ގs%6&KU"}Kt=\弈Gy }zT,\ү = yu~Y>.SDP*!9!9e 2Hiڎ|NB"|vY JYhڅy:v-FY](PoY+RsgeY୲~~9e$Rh}i+65?wH%zpP'Bi F> Xc1r]J-P&Rt)؎[~ԂsQ.+V{ i qTh_yؿ@Xv{8KҨZT9} M 7W.h8>?*"sVi_oފcV@cGCsHCma(A1ooQ,,n(5Hm7e> k@xq|jyҳk@^#;qz /phhtV4IGH]LZ[5C߀@XECAk~t\@:8 ,ZtWez} [tĥe)hpޮi^Gi۱{,Emm/.0tT33#u(M:G_@NjЯԾ-~C#X,Z\z?T5#?2|]ߓP!L1woF׉4*ҹc2 amh,IgXxUR.Ñ2%yB{w,zVc׀()Wֳ{sUzcHdUCzI󟀎]Y_wsk-/lu)üՃ}#xgW7ZS*2Kwj.;Jy:w!aOuB!6_r9~gog?{ 5#4?5|\gRD?#N_]&(cIyEkUw,a`їb$/AfVr?s"fEZB<y=䡱 {T_-!c|u)t3ꍃ5GO^ zEWF:qM [YeD *%c)I ~U"suLVtvR`)A=(E㘐L0ުNpƣ:z)SWT: ZR Lڠ63MjU) <3DP *棂V2Cs`0&ؘ{b !'T !/B< z3~B?chK— yqq³³Xa<3\ Ϥz;Va,s;fV0c>"G'`m`az3'1O0 >A/s b~Cb~K3/3GcP ƜcM̽xa9=}}y}}ɶ1nf}lr_<5s_fqs3۹B׹3;or˙gJY܏]&I9n33s/_20 $w{ 'Oov9up︋\7sxi㕼y4ib#:o2c|cg.1d??t?6nod5¿ ogu Bެ(l¡p ު)|loEHaՊؾ[읊&#pPPwQJ~LQzʀ2~\WƉz>S/,)6kCוg}u sO*#;*J _dPQL=z՗8Aݩfwi~½٬y;_Ǖl<]}5;~9GǴj}]]?]]/..忢—jj_࿩}Q{e5ke;~}v|uFퟴOt.]J5GuCu7uuKjlKTZ֭=w^^>ňيt/+FN;{[I_u}ӅH1 '§O+>/<$<%L* >>>nsuw_twyqz'xzOggggggggggٳгijܳʳ9i{.x.yʫZnoYo;;;;;;;;;;;߻ȻԻ»ڻλٻͻӻǻ{{{{{{q>>ї}9_77777777777Ϸط̷ҷƷ޷ѷŷݷ˷wwww;;+:ҟ&?@p(Xd4Lſɿտÿۿ???o__ 0U@܁` H@CO`P`h`D`t`\`b`J`z`V`n`~`Q`i`E`u`]`C`s`[`g`O`PHxTL\#䂚1hzb0Ls`cop@pppXpdpLp|pRpjpFpvp^pApqpYpepMp}pcpKp{pWpo@phD-x6x>x1Rt!s"d(ʇCM~!Q ɡi9ВЪPKhShkhGhwh_`5t,t2t:$2JԋV-Řb ġq8N(NĹ|qT\!׉6qG/S!v&l ްN\.^^^^^^>>>>n _ wE]qFH$DHS_d`dHdxdTdldBdrdZdfdN90$<*69iG.D.E*Zh0hm!'?:(:4:":::.:1:%:=:+:7:?(4":.!9-3'?z(z$z6)656#6;6/ 8,2&>1%=+7v v8v4v";;+⺸9x2xxs|a|I|y|U|m%)5#;/~0???o__J0 UB&܉`"H%DCObPbhbDbtb\bbbJbzbVbnb~bQbibEbub]bCbsb[bgbObPHxTL\#Yƕiʌe2oX(K (\6ld٘eʦ(]6lAee+֔/Xl{ٮe-;QVv|Ų"KΤ?I&d>YlJKLIOJMNHNNNKLI6'&$'W%&[[;cɓr\U/˃TyOyACG.W>|JYs/*_Z|u ˷,SPϔ+(Lq)Mʘ)1HST]175 585,525&5>5)555#5;5/ 8,2&>1%=+7u u8u4u"Ֆ::PT* E"YWW4UX1bxŨ*&WLY1baŒ*VTlZbwž*NVhPq)ͤUi}ښvX:Φk >Aq)YEu m=C#S3stg%W4V+be2]l[9rpʑc*WNZ9rv+U\Src핻*V<\yDe[+2.c83L$d2L})/303$3<3*363!393-333'ӜYYYYYill̴feNfNg32*UZ VŪRU٪ڪ>UU Q5j\Ī)UӫfUͭ_jiՊU6TmVjOCUGW:Su3e5Yc֞fl"ull[l|bZQ6W;Ցdu:_]_Tݯz`գVO\=zfKW^[RzkVV>Y}BS9kΝ bT.5FF&fVV66vN:r5\Xcֈ5tMò5jF֌_3fj͌5j,YVfM5[j[spњ5m5gk\+9|2||s~a~I~y~U~m%)5#;/0ߚ???o__Rr 6VxC`iOO_ ']3,_) Xs?e880YгIT 8W"|*  OP -/ yЌ(BA |3E!!}zzmF 7I؀Ar|3y LQ[F wEyTw3r6!ѯ!-@Oqʼr.췠ݱN3gPfWep~=gKE:YzԦm'K#Q 5=P DbO/]~hFZG}~ H !Cڅr[p^zs_I_u(8Ae5p%F\)W]EFoHWBUq^7 1Ut4A?gy (9?C@h J@^z OﷷO@=ţKG~;rID6*}:,-uEG78zWDG72!J`iE|tI)aUxrR q ,r HmHk(O4oӱVкVg#Mrllҳc\st\UDd('Tv}dyȳ (,3- i+F %Emvm/q%P򧡁ec+tB =z!Xї""mIPjjy:QkY3U4io4Z6~a)RfwAs1'!hMn"l[//Q 2am R}Vh H7~YКԞ3 پLkY+&$zfO;ԃ(jcd^-v]쐮x[e1 z LOk%m{Y{Ev/OI5Y#;kVCү,'ZyG앐uIXg[R9<ꁎ)3GNґl°ԣCK!falRKs\4Bḳ4ֆx#ԯS7C!J/N7:#SOGsRo|ԯ`(",䁟V WSW:1e t50A1|zJ3?.8#JKFiS`$Hݎp$oY&rhn|y2蟼ks9䁷}r+􃐦#_8Ó>j,ИQQFw~wIS[MVk0le k J,׀OcXE4Rfv>t̲މ q7"Z4:@}?QK)k :{."ӹR 'oqG+p=E0k.Qz8:UQ>a{'ei\۫繖O+׉Oc\Aio a'L-R4.4VО }e} l^d(N|\eyݰ$'c1ֻBN`Sck)=ղzVEseiQYZధygDSrEGr"Zȡt u1#M+`O =SOPA3p<0P&K'yt64F(y$Gԗzː!MiD|p'IoIRd)Hrrk5VRoidE@^A\;6YW)8A8NEZxkIJQ.Ӕy H50 } 2{FOXgGh(@GX.=GdH{HtZu%G=8"kJ%i0N}yHtb4}2B ]dM11xXyZVIO3q>^nQ׉EF]}XDnO@ʌ>A%ӐDgdB,q- }HK{X|6Q|ǃ= /1\tUeokiҧ9i#}RoLҔ%fTDmW@D Y%ĕG)zeSQ|g;٭Xc#&.XqnU5nWUS}H_a}?jAۄ>cfx&0M̭L>oª:Nf s33݂ 䯑3͌cf`f0{/̣BrS7Hy9L`3/3ӘW33?0_ifXYk[XVXz.O5]  OP~ W=*H1as|aj={KXw!Ő.CDGLIO$B$I$C$OH~DBd8QD@d2iDfCB"K,'Z"-D6JdD9H1"'&NK DTDDDDDbDRÎg'Slv].cWkFv e٣ a}%UzhaSc{*JU6< | r ?_. 9WBvM"وZ*G%g~TJ񹒒{; rk7bu]V L@VGLGx&"6N`L俭.5W=Oݢޠ5iC,Hǯ 齟`j"l 6";!!"G'r"td#F #;/HH:"D@d0aDFCd4JB钽805\P1T"-ۃ2QUbUhAf>dAZC?e6%q`ָ8WE>ZX؊}h=65 ITS^ (('{qfKr3Bq<d{ud=,>"keXr3!+o !,m ̗p}h3E{qӀ 1{HGe}o,g/T|VE("C.Jx ,- V3E`-3,r܃$>n]-l9,B; V+\hdsb2Hg[ZchIPZ *߱-h*'/AOGFYmSLy~#ok%By5O"jRϘ9N:龋ř',xZkqbϧV8|1x7} ),${T3tF:su1:#-߹Q Mji,[wt즽iTu ;:/o>xRlGjo;t@o,vA24BA۱^`0 !lH7"}c{HC7=$o!A!['Ic"l"Lm{SFv{y>SL_a.4;MugGWwVr.%H+X^(hG mKʐ_iw 7f\/K$DL)͉'hEil'hS꫍wڼ_ѪMq\KvFOnˏ^5u uKJ_'߻'e?=9?rnIJ{szOp"{Y'S]@ҽ@ϯ>;(H7{~ܠol']@σ hR1^, U\UTUU5^T7nQV5T T}D5HujnGUCUU WQUWEuACSwU[ͨY5 JVkZN- j\ETR:c:.S' JA-h`LU N!.T UBVz Bp(!  |BC)<'a8fu 4b=h?02_aF1?%q!Vmc0Lqgynb~}ypq-\ 6p0;>>cw~???Ob_')YKt~:{d)"%favAEa-ʾ Nn9//(7O&< kI_Zүc~t}aWL]1®ܹ®|+&?^cмO:-X] .եX]V~KV*}^W_ ;L**aeW +M +M kI.,"UvvwT) ;4vxݚ xUյ}>n$ILID@d& "20L0dgn:[|FT|X iK] il ;#Ú#Yg9ngo!U]w|Pa*k؂m؎}8C^W3j*KSo-@f:͠7(f,f4fc3gMv`7b?0]jNOS jIm-KH3%QΝn=})g$Wh4*k4&DDi g4F v@ivi{vQ;h]P]S7md[vVcC}BvamۚvȬ:J,D4^\NKoS6ݴHH5Jesz*uU{\A|neSĪԧ/֩/E7uI]V-Ŵi%մF]QV<`V=KExzj!AzNC֩j Sk﨤UEO z:jگ:Cڨ6\iO UEmUTνTn+ȶrR4/ǻ96fc_l8lqD1/ jZJ|^CjZ{RR7MܢE4Ƞ֪\㋗;gՒ<YC{ita:BG#[|S⧰n)0.+XYYTElM y)ݹr=¾w?K4-z E"Bbɶog/>;f]1,5r¬4j.iU0f6җtMͫB^E ˰+xU]+:^6`#6? U5FUQUSs=q?RTS?o<+ $Q(uaI$ex~- QUP8 zERxMP uwFr=対3WU31K|\Yy?#d_Yuk^*v;:IwT/+Jʍvjn [˭Nrpܙ,w?Onz[תަ}z>>zg?`\0>X:X&X6X\ߛ;34<`;2O$ntd_MC1XB4{j}q}}{ZF-[ jעԭƓnC!MBkw;ϲc9K V VG/crn/PGd3 h}zbkp@T/뗑jbS 6<6N?ӟ}C@/vm(EחUb`C$7 /HMP{]b:b6[+?R?<\)YQfcnCUbx$goeøԐ}k,mFHNp v&|ı (W_ ylJu[9?"K&@&5fԚ+ԗRb<Y\7di5)rf8D'$3ty@*ݰ,˵ YQV`Uߺh."@Wd b%:Z+]FO_v{Wh ڋƺ_ơh<:zt-ծeMܯE+_V6&ZD5c6Sц9mL39fsKx9wٗ<,EX<`ʌA f7fZ2ъY0КY2˺U fEk-9{YZLV3?cra6?`6O3ܸ.wǡO gP}jL9:PW"LaocV}i_wW;mvy;E=] n2^Ѳ> ъAJaDh5L-'hoo'k!oooox{6\[G[GGBf^uVPDWBm4f#Bɪ~oV֫~ɫѷߧ7Gw'̟+~4n5I63 7fk^3349bqNQSѩTu95ZNi4wZ:mvN{tv.NWy<|\Ӟ. ⺄.ct)t<\&z%9ko5ASD(mJiijZ6lk3ؤa&Ì4c83L6L9a~lN?Isgxxc2P tyPLJz  x՘gtU%g4tϱM{ `JNz !$ޫB woZ^[{FYKF#lB+d)Nd!Z]@Fd}DEe YBVST9MN3L_lY\A < 'R*R4"H'EFYD1"Vċl"!r\.ʖX$r|"(*JҢh#ډ'DOG1LGbXLdUX#p84>O3G_t:f#mA[6l6&"ʎ.:"˶X,VɵˆUnM.S\$13r QIV%œD-kZ,+KrmoHLvdEQQ4d]YNף07\8 n܃pPIO)%C-DDk:Elf],gP{(j aL%L)"F͋ڊI>6o/Tۨ!bϭئɲzO\>q$}]GOԔI0J%Wj̡4\s}Y>i'6§ZQ§m#M|6E/k&>Zn+v-؃{b8Dtߧ)D)IGzZY Emq ~lH-Ao x肿ĖD7sפEW:i[E&уRƶeMeTƾOUTNY@f'Q# EA=jcRFmvjgwCg{F4;ͰOi}"^'|u>_ (mi ]:ڽv?uXDK2-^Q{ 2e Nnn LUjKiuT*jFwq:S67(; T~D] fSu;9n0NWGgAW(LK](vqXMTD'5YM؋vSjinԻgUgjdǨjZ~RKRLjZV5SULZoڠ6_&Yj"=ËS[VMmW;NKV{^OY:::N:Ϊs꼺.DuI]VWUuM]W7MuKVw]ު|X=PoꑛfwD=UsBTx!zd #0FhNn3^:‡0om&q2Xxius\5vӼw)0ul#0LiO0fl\Kk[Yh7?xk7s˼2̏f,1K2/ [Wˏ+r;#.%.XU*pe6܏.\Ey2.Żl^Wͅzս|z/ ^*w-v]vWץz]VE]aWDEb+r*cJWUs5\-Ww ]c5s-\+ڻz>솹xhiy'=q u?a͙;w.L\,!| k2b8@ h8H!qscqT'IqJg9[\EhqM\ qSw]s?}B~,c9 `)|?.낺.Kº.K뢺 |h[J GGɼ48^eR e-/m9|c+[[Bhٺdm=b[nv=a{PQ;TvURe/ մSFtcgP];ع~JYͶi}ay6>tl,J_a17XŒX2EX~+O t?8.$)%J6#6&P&ۖ2vaS@Q]O.?{s~/En~/7+~̯wkCc=cr>.\b ĺXs ͵.:) s#nM7ܔ[J\q=u7pO˽?~܇9L x%WlOl/ۗrRM(8y"}̟g)sy>/81,\q}ǭC۟Tp\+cSlͱ6O-5'pn-nmw௸Nx?BrNι9KqIʥ jaClMLS3Lem3%._p#n2eLiSGpyxUS3y& N }Rw|9G~"OU<>W_r¬4jQ.)_'jfm7/B7xc` ½ {Y100ٷ ce, ?#Tn6a C [?2LAblSY12=FfE}gP]5PPxVisV$NBuyij?B0`B,.JPZ)v}~͕ig7~Z}M I;Ôa|ϻ:zw JgVvt٢0:2Q0:o6! "!S(M{Us; ہM%ʨ"IIqV5f>oNbA FIF#+ "vpe=b ^;tiLp?$3r($$ ~_G~%zODw'k" o ts'#Xv(h+L1+bƔ?$/94;9u}7f2%k' ?>ex[GɞP/'2,Gɘ 3eXMzI٢멉S^eeX/B;OMflUԍ(3]~@!Mii5s:%.xEf4Tk7HrzLCoVI ֟U1Gfl&gg?d.b;H8yldK6V_A&D$M߄RR0%呱7MSj^wi M9)o`9Ә1\%gl]@|١E,gTeJr,RIyT2mX (Q!C% :TC*˯{]-#K>YJr>,G+*|dVsEC}"O㣸*29h82J^c@+96*DKI\!ã9WgǍ`N4zcO7d5d."ˈ/;:tEUZ/*UX*h"wzlbuELi..~[f B^WBzڋǢA9 }s+xYa=ͬdχ.lyR{(]/Jzq3^lG^}'KX̲JXh .m`D.Gh[q#GTNෝnPM~eYCjnh50|}"綢jK]E=f9(K*zfK+:vkb>vKMb|9- 1 s8_˘ŏO5 ]EW!Z5y |ʆyDq;R SǞ dZК-aaǜ_0a0Asgs_37a1A`9 :aeEGi>m}-t?ᰉn?AԈ?iԟF_j4bCE7GG|5b1z: xrT8rMox`TU8>疙$-S3f2Lz=$H!B'Ko*XP6PTkyUwߺ}DJν3ɤO6)|;"4 beY,ItL'dtLF$=| ߦb 27shT)_V8do9ͬ 2OId4gQ EÇҹ١l,^e ,ɔaƇiif̜FԲX,l\qcY,pp`2ZmGx>O{?)$|TX&cF?V@ŸTF}Izlo|4z =L*{ ?1Wp&BHZubQ$b2'^Bs5&\g"؄E= #YI?9Af@?xc-B”ևe-%^m/DfĞ[CijԂ|<gu}#%c9X, $/ JHfE V {/W+-.aߵ[m9Y>04= JT+ ο?HQ<2jG%%9RKld4[!xq$TLCy.R#E9Zr+95wU`h`W{ 7%EJRT^rO0F`!P*v%ou֘ ۃrCEure{Vr=tc*rkXn} `G.K$[8-[% #b1|_;䯽'P߿6ԏ/'@xv v<I8eTO@`d_5k~k(UMGcb!Ax\/>?H(9$7myzYYc73g# A0&xXbw4C(V5ʈ cÐzR1 D\@V.3e ?ztw8h(j-Z|jCQs+6SiO4VG_MZs'X5^r#<GΧ Q>v*l]jDl3)S$|g)S`)|?~;܆3>D^G$$ 'KUD36'x]|f}F>OuS;GXﱌ0f(EaGlMd6G[Zk'_kA2U_%VDqHD8L%FOdg ,N,l)83]9 1V>8ӻakEJLR1 53L%Z|yJIu LSiE:,m۬eKd.;T1 tTf|wk hu"I量;]=WBO^P^S<ז/ ^[>l'C8|J͂X0n@RrzyH$14N"$Gh*|bCvBNѸacA ڟ oꆛ.:}jn֮}aOE{wEOw/5t,Vl Z$][[lXV_u{RړYd }\Eo.pǍ~llѡ<?PnC(\ȃyEU>?/Κ%#ڷ6nU'3lK7 9J QsfeC/&SHS7~Oqm*Eh-Z҇]<y"wٕ #,ȏHU.vtĸBJITKei%y͙uufo{z]K z2aqfUuI qLlMV{Օ9ksT}em|XڗYfg驿y:F2%oA?w[0E߸b74 3IfBVdPAeHq#UC]jBFweGdR'^駨kKg?>{iyYeģg#_0u݀tg&siz&|tG[_Ѵ+8=/[81KXfG@0 WUZ8XL'?k;khu탯+ Vtet0Hnt-f⁉1u'/Nu*8QQ=|kAFJae'3,p<3M#JF\ DʿH9既1y~I@#j'FۜL jJUX!Jw5sfO5+Q@'g~ 35Lz!1Yy D * @y4b̥S,{^ T?IZˋ’2ff=}W&)L|Q8ט7UUcָ~ڡc'd@*KVa\zždqK-BB/F2G` >="ƑNњՆY|C6fy 晟ۯ_ar嶪PᲆUvs[rst*3# CaF(;{ d*S,1-,Ֆj=F-FQ'i6f`2NB8s9111[ Fxqi(eҕfnY|=4mf;/%-__\][ܪuI_3x5Y7/'e"c(-/}9mvsC7WUfoM8oaƧV.-UtiA92zVWh,x:w0rp@}! Ёb&>`'Q`\ߛwxnہ`=޺* ~c֞f.-ষot*9GJ^BJXflf[W&}yzSQgvvϢ  \YJq_*I`4O erj;I`WP|R)'*4ʧoٷ@>-kJc3/bZDQ.Wo ^S" Am)[\iII:$"pN 8z8ˏvޅTtjw̭u~JhmI3Eyޕ r+KXnѴ ʇmjo씊Yid?yu]ɖ'޻8Ɉ,lXq~ڢ1j"ֽ,zjoCS3l40Gep(0 ʈ$1Me`Sp-s5&x6v׷Ƣ}*+l #ri`KmZ@um$+tRp0^gkս5K\Omf#O0MVc 8`Dɟu`n!40>OsKW26owNN <|.pɉK9c ek!-3Xs/íF+ȅSqNh ߬B05 5D-3Xh m h2 '.ϕ'bSkFgZBWB$ǒ; SJJ+@o"XF!QDܠ@DS%`Ӝn+hX@_eư/S|ĩ7itX^cZ2qqExrќff,DbEN25oY8,8wG jyךxcqor3*( #(R+/K]1I6 iO@3DƏM6EJY:'R<aA?O/ni Ack;q u3zH m q_',%9G ڿXa&f'K`nS] rಔɭ~:"[ZU-~և>i5~'SQG&j z 2/OOnh/П?C7$BmX;jw3CPc"M0}?܈D "QKF]'jxXߔV瞅`lMB$ڵ[&]5W+ uYOaGsӕ* Ze)i GF8GlfڎNG9LjSQ;㬌ٜjgS=^[&MfƗfɬi)ٯLB"͢5]m\CDȴ>Oӕ>o6&&+rHCBĠ1kZ#fc][CE^LLɳԴ՘:,$؊ū:ku\BfAwm{/DXo}qK~ǽ'NcPj;EbNe+j/[5 "}&(`*zV>MȍhA].<T,$ԶijX M|pXtm_f|NibKdU10r49s[ s3fozK[&攴RT9<(S^?~"ۺx:䅵9#Ո8_p̪?͐\UVƨ6[dJYj՚uVhвPcWW-CK9J6=gBOnuhYjza݉Af]er_Wn  f6B#ϱŮXmZɊ.\24-W8[Zm0NLW6B ,<:?;>+3RWyGWG7Yx'UJ|QwUmä%Ɍ$s*U]j,:F<ӷN߀icÔmUY &y.C$- LuouΚ+Pҧv߼N7ӂ26 E-( ZEޔS̘ǏR'ɺ=}9Y?$0_c U2wdyȭ-D)]pتg^z9R`q[dZ$exn:k&[$M*iytU#R3/Hl>4|۱s7sj$VMd\h_tAg|%U8j/L25].D$>o3&J%4@969C$2O,i-j j_;T P Rǭ0 vA=0CY B]CyZcC砪dݿ|}2f ͢)Ks/g/YsH-_<quMj\p E7RޤKʗi\&06=V3-oByH٩z(^ʫx5/H~%ƛirfc/vYCW5Ec]Z0$¿>Y C,TD%;̅RWm+lyӟj\;DSDD`CS B%f_[drF(E_&'$䘕L5R% wvjl/fXp P'jd~EjZCNN~V#GhBjL5&#p\Tmn;J ~B(Dx~L7?@a{C>/ĖOl.?n Ϯq-&k:.=Д&& Β4%1ŨIqD1ƓizZ sak:/H rWPaŔA7_̗%"*\+װ Z!g I1$אBr%) .K)v6@X~wl|q|=''qYJN-UٹyU.K`kIDK: DA"C $d4S Ho(2! wjv\~lodf}}@|C1EbңUŒ4>OH='mNCyZ)QbZ#kl^Ǿh.QY~L%J$s '^ٕMvNo^ћ[iW椥RSӖVkyoAr SRYY\\YY V TxB=_Ɣ&Zgҩ%B9eKY/増|p].GF]b`RilY$o" +ym97(I4D \zH'”ʓækhI|DM$znwjJB._BN9WSc"kׂWl_C |sX%S 7`f C~Α$}! T`VK"Hj i_qadHKRKn)ϣqN;YNHLe2FN}7[n\5HR,^ȧ.pD@h<892,!Isu^Œ~zVj<~4I+R /q}!k>_LX~H0Cu_Kjлt=bA(w-z(LS/ؗCN﫵 o[Z F[WgলYw_ 7 rG'e#{kJ^u cϐ\{泍سGZn{,R5G1B[uZrOY:A,6xuY "ke5ݻ46N02Ls|C^e;PLv /13C T3܆<%o;!׼ۓbz)ҝZ5Vr[~3- E_4fV9FcfQi\ʌ~Uh|.gO8m>/enz|!i ^0"ӵj7 0CMWOw]>oeV{yPۭe2X.,z[j<"YٻE^[dT6c>ǽ8\u3qXn0Bw3a԰ؤ</iœswAxZ8㑣BԨYOs`n:;;8oDϔoϒ~^$P.=+<[ȴVLTd8)ǰgAGR#Mcл.9~1:-8$YX]ٗ;i7!u`N&cw(F.nXfwMRgX9((Vb_5p:Yv**F3qK!EM? g }L%}P"]%+I8@Np.4?Q=Gxi^fVuښ ٘8 :z{S:1 &+ċ>^Nd[ÜjG"G? S zH+ԩ8 Id_˜}.>ruХ'KOD}v)ϰL?z*9L<*ʉ_D +Y=T10e,W HBS?SdKOh9*'&*┙&jHi&%5zwk ҁwi3GWG~F4kѫO("82S9!ι?+9#s:lX}c}# yzH~2 +[{[{k0"{_;[=f"Xv>Yē9c#(Jٮ[qߏ=w~Fy7r#w`t+Լ#aw NY̙fltm!h+i2 38$%vt}GzZWޱ4wե],(k'@UcǗ(=)9!':U[`Mke]r\)/JUirH3xq{2H،AvG-:5<94}fM;'}UaRjʋaY;kW{j jlI\Qlޕwf5Je)WU6Xl4%yZ - uyh::_XyLtƺYA~VኴBiS=TT3r>lid>,.`Emoތ"sRl=Z;7NxNVvg fgwWV~nفPh>,=}كkmOS9{3]]ٹ@t'ʅPM<ģeCP g0B@$CubZ#VƔ ϖQducXw-mQW1^d힋Juipl}ₗ,6g:7٫=H}j~mƇW-YkƆƜjdti`,P#A8 1KME=F TljqY!lD-;{]%Hk ?侉Z֩Ji+Jl~qF݇`,nc'V29bOcQHe.5d"CbH ]UYI~ 4aHbc$ i#+Zs: C- +C';ɮ۷e9+ZawI͇8#D0n">4`OS_S?FH:u\ ZX}#@K[]i,ȆHlM"I<'IJ}~sT baW\V$6TjҊ2dܘ3l|SK2|Zyznf?")Yɕrv7h̓)Վ/B Q~zeՋwdilb5#l魅-O/~[6{ :wn")P[w0߇h*\ F%#C8 ~bB&ycC.L~'l-\k]y䞷և*4d8xoZOVY uKHlk~ 0=v@f{C]sfWz1cpѝE+*s~#|Rm9qpcflYFlFR:>޶5`jT+$|3]xӽxQ//HjR ?ٽ5^X=c(鬉gNTr-;sf W5YВg,{䬻nQN@ܟ[D"0CIH\Yuylw}U):{{d?BM0Unà߀OqPF^p~ \)xO̸(к|[@a؀~Q6+ ?~g:n_9WENPD_;6Əz-OOmyO|%C5lT|kk|7e+g_=®ӟiyPgW (#a3^@598(" Ydn<"[jzL秩 YmuvkZո%<VʪzZ9r7ʃѻQ,ѻQ"וaG{TϵolAGRqG Yuj6-{Ԇh݋Ў;j7PWԼas~ +?FS)m^M_eB*2?:,ݗvM(cUsqQ~y4luOx0_дBc̈́2vj4ayh-ziA6`Zf"WA`7&%4|W>Q6g=6)ZjGR [[`:?k& M1wbWS4ͭrST hݚ 5W$ȅx+F#2s8zXdb-.uvs;t ^sAw=7Yk]?sMEo7]ksڀLI$u  g{`s+Oz:zT:b(<8Gfs%'r R.B@^_m;(,t~T $Kۉd.tՎȕ*9MV CѕbPV~* 2B;1?7 tfF>aIM9::řgMN>P*,|n tL^ H\RyѨ nPvZgM9㯭bqɭL[.!~b)'^!zMf#\H-MN_'vlڑ-}[F|~|gdΞ}GUXN=}9ӷnOo?OtޚI<uk׼w['y?m06(]C9`>Kˏ}]= g`BwJg zDIꏟeid]͐ZMBgԼ<=Jr>w611C4q1-hFtmi@{~ +?5U@-ĎO52V>D5p|#z#"C=ߘ:ipNI 7j"0 a@!s8-w| . Cqu[Ɓ/#Oǹ^tCF!Amo qxSaL-P3am<)CV-ԚOx-Znbڒ9VCYAm$_ ѥH4DF5%`hHm'T'UQ] o'#j D3P" ؜(Qٗ|踕 y*ܴ<=^e醸tXSZ=`YSuҫo ,To%>3 DV3RYfoݼq杛~׹kPVv,w r׳?suM?vﭷ `.80VQU|j;*3[W%j:21OEBOIkTSeZ󃮺&Sݽq]OZsncR 9{fwS5e 9*iv҂^BliˮXqvKI3'O/T0iΡS#CBRΒM{ں朔$5Ù{*ߜc(\z}M&,ž.lme-ʋ->nU!Ɯ_2s3ȀQCxY"rg,7?s3Wcgj!w>c?3bݣƋlɷaB~Lk* GC޽{Cepb*|H\6312KexZ?:/07i>IiI* |o_6f OKΒo!iao- 43U6[;[KM&>ڒ3Q;if-537RI74+ݗg2<y9 d-Ҽp,v1^'/"l!vϝ]rlGzρTT4i OցS AL&>Ff.ߔL '@Uy;jo>A\rL\.mm7_!j%ZQ6~sZDЪV H5* #734<47I'-#^50#M1H+s,u6z g>XDZ'zޫڶ}6ˎ( |sčt%7 /̙hor*!b1Sˠ=Mw^L9_J-/()θJ8n"dΙyS993J`| =jlƷoh_護>e[7ng 9W?;89PiՃ^]ĕyZDgɷ @~x?s4F30Pg"G}7,#R{p@-n"GhC;??>gvM7[fRRrTl2Qehc63= gyfOZ<IfȆ:tf؏f6fʣT<C鱕o"2L;y$9W1ǔ21)Gfh}hqt,DChz驁Oo)|_WpقnGP'Pi )YT-8#ٱ_H2.+7zu9 MrX!~vR&31lzFWަp$ #3 fX`QB@J*(YΘqU ?v9)|r_WQӧ3xZzWƫml>w+ 驣ˉG: ֆF4{qc|t ĒǀcB{'F*'U2QVyϞjܨ$ZUQjVF{Bo60#hL&ysM"lY0R&^ڕʍlrJ{[tgڕKţ$Gw8<+֬d6PLH,oyH;f M+4 G*S(ui&cO3*gwwoò~ĘR]MĥR"Lo "ˉ,ec F[Nw(w.kۗ)- 3ė/tF"Z+db| L4.e]M↬PtmH~}-ݭ5/_%³+i~a]ᓌK:7ZDc(N,])5[f{[ p-5!#lQ'0Nńp#BgͲk"l5؜t*N^ץ8\_gQ*E@⬐|)c  GHi3B)r TIbW$-ı1r4)"P e^gr\p[!.2+23gM{…'p!mVAxX4|Y+UBKFrh1%[t-rp6X=wl_i[O:f26BcɈ=R{µ,,PEo7 y3m1Bq $" H D-1P=ve&_dΗ"B@e@ <+3ՏMqRvn0d\+3*@8_D(P\|!p._A|.aoM20h: aX@c(Cty!]^ac8W@EFl3pH*2qgON&IDS8vN0ͧ}O=pwR~yS蛑wGcMOF11)ceUoOȔ5 žcџg^ᜇwđww+1ĻdOޕQck;Ra#_l;ymԟ +Ӆܾ[[O(.^qbʢ[[(*Zq +pY@U0.gQ@p@YԳKG"0n9l {;p$nƂEq.ы-}>/7$~ڵ|DeTK !"QA1cg2C|`@>{U 웵kÅpĦ'vN-ROXAej7fzvdbTM ^_cwt?zoqqiIY/bDq1"!E)4s^}A~Qij "HB![9Qf @UK2D d '#@eă|VvvBsۮdU|МCh13VcD|Ѱ؁Nd"]c{if+КB`,NJ&G's#? t7(iPD"JEqRC0dk_HĐ˚+3vG蘊SbD,DQTEq1/ǶGY"V367)x"6 ;4=9~偌e.[ZPׅJ*gxǣ>Qvi5 mg4>8ʳmTV>15r٣1\pI{Vf}NEY =1P2Zs*whV,w\=F=75{w_yg?>DS3yOxif\EvG5ᘰU& W%|k<?UK>DmQw=R싴KBsLek[:n\~ &^H@kKJx|>-t=v>suǾ&OGǂdՄ'pS*T$u3o>mo;gZWYGnՓNyzWؚXU t^3`vq(N7WF͑ORga[Z73ܺ,i}V>%fHK˴PCT-_υ4dِ&GlMN['L/~1 = |4Yr&GBڐ=4s/;~mKmZO}>ҷ+KUC[[s;rkp ;ܾ2/T. h}-5Zs<3S+DuKѬA꓃/w@f}c'6,S=?'}®RZiA*[#=Ùj}NSJ")|)G Ct"OZ!\{{p>[!Ykvc %7:_=~z?x_߯o;nl_\Tx-G-IXҵg{2+RX|2*6}rfnuǛNxvAMTPIp0f!du=)t ,YZZwv%4؛J3%{aQnԇo\~"X8YXY|Li?j ۅsFcQh"I,&(mֶl5Z3EcGdcOKw;9g>91e,(Mݷd.[rpR.$#Bc7^=z;HMm '%6ɘGA}3F'#Jܤ`NM }>gƋД;xJ&$"VBN:P;Ԫe ]TJ'DfZ-UmA]ހ;Rk\a?qHW1U:֗k֗jw+S=j_[Z|-B{/!gwu:?m׼2%V:#2v81&T*6Gv%Y9%p+57k k&uC])#rеD{Cܮ @iv #?\*> SNk(@ĪݪwqpsMq9U:/ϳVDt+ʚ"v%_,yoǮk_2^W9ɗ:U*,*繳N׽`iCҠ#ְ ӀM+GwʫB5 6*v޿p}EBRhO r sfLEm ];I>: \VhC^SծO\V>-{Eqr>,mtbrJg.!kR*YwE9B։XRNIUAtTg$gսKk.*,S5Kw-.Z~">fӷe`7¥tI]1̎tUWfmm-gxvHft'Ɓ'}U7 WԎg%M6\㡱bBhY쨧JBCB/:T؜u{7c6%_[m 8Lhp2B\/%o]oW;ߎow$6 r9w3p(n(=ZORȎd 0 (s݉ծ)OjeP7!ܓh+s`"K=R`XR<]ɕ=A}՗j<\^anLyXN <$}FJ'CODXtVf*f}F|Gݮ⠅=ȋR8lȀhN_ RK۝F|M#zɆaeLB+~c_K_zHck'#t[ewTz*&v)T 10S DYr|A}GS;_, *cW:),܅4o}[x6z'j·􏤱o;_xV1_E u^U;o6_ص֙иѝ˖D*YۭO)p$DDSZ}}ii}s޼>rHz?ʯ_w]}tO W "z:~efλvW}[oҥ8}΅*L(n@B3lLjNJ FA('Dq˘$j/*+jַ^Nh;vVhg͹ڑ8O"I߷׷׷QXmMI5mP5%%kڂ=9cV<ĮB^\fe = K:F,yaxQz;%9x9\Ta?xG?YpURȑ;/sv o J=OZ @C )v)F8N\{ui+8/Y-YY6.Df3"A,݃uuݾ㽃1ƶĶvǐ w$vDPV}c3Ib?'뷩IF8!ΡXOҾicfMyzN>5fOñMz8Ǔ38~ 6-O>o1:l l7UVq5wm{p[?i(---En`_Yپn 7|ʶ4iX"mg~̐/G1Kn%[;#̼lF~tLGAb{GJj|7K xmsEgz{WkHEB g&Pqx 41X/&b. OF@Dlk/.P+D[ 5.@=*yp!^6,GO||SMKrx"6)c&yvHŖ r{-%l}`IQNWyn[})\l4{늵tXnMuZR&JqXjcC6+2& ؔfȳX[#Vsn;&PJjԃ8{ݥ<ٟ6ĉ=L<0p_kˊ]Bpbx7l9:C'bvt,qF"&T7蓈'B\aZ7zl-۟±( MnIr ,!<#ݰbe>5 HeZRy}w.\3{ѡ#r:6g -fq(*3J8`t3+KKmwsl82(>GBGG|.`LpeFA-]i0Zfgdx5w?KfR\1g̪o3{ǒ{á*'NMaH& H$y25tt iw;Q?Y O;& 6;L x(Ҕa4D W$$;Vj2G}ojDᴾypƛeK6pU2q,~;HMሢ\ pj8ۘ1+iCݎ{޺jaaRDUۙkTl^ԶT7ȄGR B&}5a HJL֢]P6fY.Szo JӧAG6g08ŋ-8H-vg_X?\Os5 ` sO7J⠿=|}]VfVvjmyE֝-8 {Z:ձ:_e0yj`OTqe0I.E|2jJe!g/tEui3 3LX43l+h 4Lb*ܷlE[[J̲SJszGAkS6pMsPQUKmFczL `|2@ˉ1 c,5¢ei t2nۻ[+.36Z:ǯ~WKe ck O7EXOòg&E=;^;>^7FQ-~mcyUIIUNڙ D9KN ӑܱgΜ^o9A4^Y\ecA6=H$1)EV 4 1ad[Yg$ r=MX :ů+]:jv -3--פqtaIf~!~UyF-JoLKd&r2 <0l:CҁÌP+i dY9p>0UZebI iaciu9R k:W7U@xIdcpKe6YFK1j |;(ӈn̦}T@>ؘ N3Y=eLw9rK* EǓT̎ ka6nr:K{Oŧ2R3/ARfd:K]eݙ"ITȆ"]k&(v@#^jtIt/8/Setia~A5ΤdǕ0xĆ8qc^QڝS -PK-y]x0J }v 3MKz ʘޢQG*#Fc2)R謥zgV>\vUl~ BUi{مVơ*O`T7<.T*LD ,OhQa6,-L|@(uFG<ϲ n N{rYev7;$܍NC}6RP׾H^["8B1ىc}N|ue?g!BG#xvp@Tpx fQn%h Aݽ4MԣhuK;v"8BJbN$ӞFR@tK4+ 1Np>34Uc`LjLw yVD{k&XOW\X9(I/5_g>GnsbhZњ)Ǖ,2M}LYVM)v%B;FQ\Znn7 z@ ֕D&A֗*p\=W=Ʒ/& CAl{8pQnU`A[T,@U;DQnQLr;~iď_yZ 68·Aà:NV;p$O\37)5776IJM&Owu=;xF< a~8tF0? F&%} :% elN[ I.!o+$ &g ho.U9gE)UWB={Zg༑sY[}knyz;ھ t749pSzkJT='}qh!dZ_ƸN99.IJٜۖR$fђ*}Yu3Km4$;g.tpny$O-vu gG݃֌i5 9qq}lo@VCHִ>%;hvRaܜJ[dy|P|}ХR;C:cЗP$OB69dЇ a VB "mU UmUmPۤp^NJvJ5IfK&Ji1+,OL7ԵnKW(r8\W;âor0H(.M '=N̗,@rۼ̎cKr+H%u\ܽ,MaGaW, >Q66 _Kl3lz:햬ǻx|Sں+Wj$X]nZC;ш8/6qMFmP_Կ>Zfdʈ<'*:r!\UJ52(@wR}l'NG?/W;"`JH(l4~mkręKxG[BGfEcXp ΌQ;ہ/#ƢkU$32 FðQ ϸ\&b3F wGWzm)>ޓ8P7NP*ҹNA*y .k/xq:9x=s%鬴STS$4>,Iv\sl,+!UFNq2c3|: Dl<͛ #evd>G0')o6Sp0ذ([6@R"mx=Hf"}zAIǵh|89c) *Wm:3r_!O BnMVV5 ǦPq\2uf' 1pcWiy(edE4ɌaSjcUVBY .$Hdj.+C!i(?LS&3F|oa+:oOe[塏y6Z\ȁx"se^y05N &AF}A|4QJ) +ZSHxX4/cP.X;2>._7+sEbטdk?{-ϕyE_1!Ӭ8U_& zZ! 9S sd8lJ3\ *K\с?Ծ;,q6 &ؿkF^攠lZkaI;J Tf5(s!\IufqJGI$Xģ'3.O9eZ~ʟ51eTqzqRۧQa N`?b+LD93g&bfg䁘g< I]?%Z&ܦ(mǭ[' \lws3rr2V$2c߱:DөrYeOC=)Ō{Mb_pȀʛ^{tFԧm.418/iȳX19(dls|J˪SPFȋ< IdT9 d(ڋ+LdR݆-} Ngn@|WWow{Wdq"5zi6-3kԥ.:/)5|FL_5oI'0FIPtixc(S~ţ뒛r̓^ֹs7GyF^80vԞ7+uZn<ǠB]ƕyu^ td_eBHPۈ}&@-SUZ,[Ӝ.EfEF9")oXw%uK[GpZ[hMO gUK`u ~9wk^j'a5gzvh7 s8Mk䬸kzKHW+ T\)~{x^(!9Ͼ@ہD=j6AH|LHO~HUEU+'R%@MD&r iYfz_r`hj`YkY5PhwKqG/ AExďOeNM쩧lW3yh`ˏCVyK[tTΝq4fmu&1 gL0*̉Ye~[qo8[VƋMN([ 䔬q%\^WۊBM'ѨPf$5:=$l/)}0'{wQR8,n=ۤb_3Q' Ngg j_CXF1/ )8(׿)9;0[VJ.|_K%.9>L/6@փye7i.Bz-z8Ec/\,Gq!6v؃ ?ƶYrK~.~nz :t]^uzvTu:SRhYEW{,*䴨t? ?m33;稓=K7||8$t@RCIH{*† >P>#5?Ȍt2U*@}C~)Wf VRoω}b33gNbg7iZP>:K'XPՁ=h^= :'%ap?'ئ6zX^&CpkyOA^Έ*_ٻw={{޽={3 0 {u & tz5F-=-Ѫ5hLΒ'smʰ 0`KLMye?,6Oi@wr;`!}>"; v+jXcQ:J)رtP#kki3_3Xy4-*ܜ$Lx4{N@c}7IldL`%RLJ]K2L Owp#ql_P q`G^xnwRz񯈥X{-NĊ^ro>#nJ1Y`v^G|5%lčƌ@>ݸ֗/;Q0X%,AcCY݃ǜvw h1 SWv,YQޫzkX4=/!Go{w| CaI47|{@/7{vz 1'< 8ixt`{B[@N7 X]G#B1 Qڋ)uƌ@!^.Nl_F[O*pR&$yr*^\A¼\^f'e <>,&z1RlA Qm,.&1>^aKeX9ʡd9Fm•c{OqhNO2ƞ NM'rT{ )% Eq YIO E ^4*}I/f%؍F{z!ʰ]tBvhiZ7wd=P7TL.+&&3b&>p룗Rύt)oǟG'}[SmN풣D+N5旓ƀ d2L5Z'7lܶp{C&#"- U]bQd@u&6yTB}<B{C?Q# q87]qb__qvh'o7|&"3= tkuԏpKHA*NJ.1 *;yZjv\aOׇ<G 賳x8Ӟւ}nWBiCґ::ZZhu(>wƇ޿9GX6sU RB—YvCA4b!cR8^e՗I&ZV  rxlñZ!L'7ؔ&+4 u'c8v;$,dyoe)RrIU!]hΝյ'ܘn:M4Ҋ'>N<^|ӳ?gΟY3I4\z(%`LiS A7ܳaǞ7frgwɶg׍~,ʨKUp~\䶁7lYu^_eHG5ٻphp@G}prU]N8O’m}[ϫxW{חCg7j uy}m67}MH\I=dj{qt̶S+󖝚͚mmxujy@<:xkV?ΜvzvMs65;~<0Y`R2x+n6S_k%%J@e4JёZМ>Բ'#-U(@)lNRԃΉʭ-yk:38QuR'ζX͏^Ħb&Ԭj ~ɹ7Ͱ&8"7wo@sx{WVԪcs4$'?53qc|oҡU(`LȹdmxG oMxּw͸a0lD7]o BL#l#? nx59H>Ɗcl=J}M0\,DPҹyw_`rXvԠƟ|Jf՛= ^V [@)Wn3М@r!CzCD O IX*& uy0IbˎNgvȯAa D|w3IwLI\N,mq>L8z/"wފЕCZAUK3,)(YwϼzmGZSgӆ!/&~\2NZ> ^qh!WCg$hWftV4*=tٽG3㛕{y9 ^}:d{I6#Fa<81z3K䣇~,zm'йE`(3'̔QZa%UN|[yaɓOiZE s}O3.cFw8>td\yo#eƜY&5)Q.YA;тByL}2˨KQH;rpE]* <-&OPn!0{c_s>mʬ}| _i&qbe hHexu_H"GeN JHoGSg %%--3|6FgoLJj\?׬kmr]9RqUn'!{3%GִapD#C Djq s ҬEz|[1V5u'gy{h^-pjfVbf짮CiiW5lKntdv7z$u_g}7Yд5抴x-'Yk7y3zocH֕4ki%3s&DŢ2lQK/u%߸%+&L5{qOvFguGݢ5w͝~] _}DS8/1|VCM1)D U5Tn9uIv-E7%֯xQY2ƅkZ%uE7 ԩn=Ʋ^&ugO΅7_ކ r;W[ՙf^`]VfM\pͶUn,̠_ehC5T\' euEC7֑dvu Q&ܘTTw'RruFQ@6 a3}󤮉&$T5ݱG"Sd,9=w/^/JlruSj9'E E3iB( )iTJh+74/|fGi1EZc kr|2Čb6FZ9?W"&+^,]u`bLo妁EOR7KNo|kӋnnϾ1/=} <EPIfæV"mA9lIQz{eG/KCs>֪䙹yr4o}1ȃq{$4w;bIW!.`L,"LC|2@GKkpVaMEגAfp<}U,_fRJ25 %v>CQdS ءzj D2YZvz`iǶפUtUtV]sҒX|+Ԩ*rUb%=)۸E v׭ybsD\첪ULRG Qhkou > 7¸Bc YE]rgWR7i@BLӪJZ5B:K7?".hצ({ޡ,5g6DzjK,ʹ NoS6nc)+FSm&2ڂZjo[ndsVnkڿvSemCe椚kÇO Tc۬q!kY{K֖a˒,ɶ%o;ގ8;Ȃ0Be= B-\nK˥-]-#uѶ}}|99H9zUvxѶk*e'#t" ( 8{ yꞔҞ":UW_^9zus޼=V|t:ZkCek@󫩚֚fsŜЀBtKŇ{kO=c5d2Mps[ÊLܲfjCo\K&;l`ĥG+Esak.qvoh)^iϠR}2=fgw]1YoT^5u}ax'f>N&z"CmYy7tQ<) Y3 sdϜքc{TO ׇ8scG*V;=3f} &ʝӥ[=}ŕ}"[luKaZf9ZVylt&_Tȃ RUTڶ#cwn69{pYF03䷫!'jTx>W )Z hYrʳ4lUi.d3?!(wd/\Jm~IJ7"n}De2'Jt=,[*ŴnZ4Ueބ*@Λn,F{,VQ^+(}P6_&EIC{$3/,iږ⑻7U,^>kĪ\0=޷^[cŁ^:NY4!`osˤ9@\q]@g)1h횀[\~FV%k 1ip^@j 263Mmy{"89Hq$I{VJLzT@x@UA;q+7W + ö&vLp|2{Od$>yy~>(Ĉ7gүlCgXD6x=أ$])dЦxXqbwnmw_uEъ/pH3?HU+V_usF77JSoCJCU[(a(Pqq[w+U~'LDq'oB#L nC14(.>In-^VzZO[+B__vWUjtUC`CAԥtNoԮo/=b^+~+]{{JRܟJ=/R_Yc5Ԑg Hea{aqJ$*BKx.ܳ.g Sx]owou5T<j֐ZO;&Ga"80ڬ,(G ~tW3hy{m^M/쩹AkWc86d``LS9TRL+ FJ[zyb]* a# m&)y&e(PW̽P?jȱGBmA%9azP贑HRwg꾺2K;5O\zAtly8/k=6V'yn;KڑDj"ϋWĵ֕n]Eŕ'F/ioasYG@<4(ߞ{?uM7i{(4a25%wS1X?rUMnVk[+)]~{gO8'OtYQYzW]oloQ\Cy{Ou\%!Ur&WB-tFie_UYr]v (YLRpH&4KusI/iJH/o<`bDH.W8>iJڡ25fҙg%/_2%Nm3KZDʅ○EHcS>4&e9+&Cp#Oҁ:t1PY}mեI.g 6c(Q cjFQ 78.ߵkʚ-^}2xZ--EQ_¾yQ)X5GքcP0ܙtaF)I~6?˾ۜ N;%") Hu/ܳxc16#!ŸW6l5 # ]GsJOn?2\holUo*1 ֵ5CBw _kkYUU9X4hLn؞/DyȔ#NaSSWTTɊ?{)S2xuΥĭp̂((ZM<밋D(мP=R8LdU r #>(h9Y:,xCv?Լ"4 I߱*g!+XUWdoB`( V^߭"o[F*37<}*9ųJ}MrTZPnhwv坎ujWc=6Դ!-1^ M%EU;Ϭ[wfgUQ窠w&`M7bn7%S'|S5x*ps-^7EOA\FY92ſ~Jevz0˝:uB.FLRq?v ζˁ>bB> g6R\S{N 4F)Co(5p V$asa5$Ev]y";ViN:xm/z %EʍvHӠMi|zǖE,{7~:HiRHpDqg/".g?F Mۘ,1% [d똧R]PP yxXi(tB@KeCrJI _W-ZkҰB 3.xGu &=a, ec1W|WagQ̨+x^-ކo^;'>4{Ìw}{S'jg@BZX#$!^O[zV^awkiٷ(8m{ڪMKWt}31<@`9TtQC L!BMML CX˕'+J5<:r*{9w~eMт.56Wm\5gEEG!V*\)2*GY3~x'E BR[zcAyg0E!k]RV"B$h&%B@,hn~ vsG#_gDh1O$wSݏ|3Ŏ/:F^'ӣU:B/~kR2߾hEDGkSR:G'U#>GinٻO mܨ+bW&wQ/3%́*&m"bec?|_WXPqeU#! W1 Rfe9R ^etb 0f?Vg6V\u}krD,pbq,+s}]`Ah_3IÃ3 %i1MF!|Y,qJ2LJ#sbqPRaUp'v;%xi⟏wyǏ,Ʋy9-O jmYP7|s>t-wgkb._f+q?m;M$).|ĝC'u2,r[[7FB8X UR/Nr\dr(q1/[k!F.: "_J%+\dh ɵy G:(# iѰe2z(jwxյƦPZOogi[P%3 {|U ʮq%%>b4eymwD*1߫ji>Z8euHuIKrR /wZrlj ؜ےodOSRq<\a!)dkUsaW/ [Ruk=3eG\q:WB׺@SQᵟx}ԍi=b3W?'2(|4jA?Fx^WA>*HP^'HݰɹS@H/VSkܩ=/ny4~4UjwkǞT+QmN[=Ɵ "N5Ni0Q|Xk4*(B>Pvo7KK +˔=z4\4Vnj3\!c (8d+[U|:gېb`(˫1LNѾ$WCiH%<ω z+CYe- pH Jظ`iOUIc~'be eJ޽ɑT4p̣@khz]V| ㆆUu/hX|$Q;+3B]>c +Wi ,Y;.uLw޼1 `$%99i<2H!:>RB{C -)T$rSXD|u&)B{$ׅUU.i ZsN-2Ъq6^RbbKcKlVigZꖺ]+K>k9TƥEk@Q: ){!;p)馏wda_?^צv`Ɉ./[DFf@ވ@P!OQl9ygPX%k{QQ&#IaO)zQ:d,g{ jf6u\2#1K4`n2^'plb:bZ x%jcsc}wO%_= 1O^p46HTYh%_ Z4rv+Q(B9Q4 \k%Irb1$5^C&I]#bpΒyRcFvEלȓ2-+ti&mʖʠ 1x400J˓ŕ[cT‡4T*fyQޤ* zN^B =6.-jt۱sw$m|z+5h>HNNNi#K'H‚990-,粦tX4@h:,`3a[ENce_mA3ʩ'vx`:k ]:N ys\dVfBZIqZhgPw_ߴ RS%-EvDXN_O&Gu6:w/J49(]d`,L S %ハRHpVjG(p]>qwybGYܹ{UQ_/Z_mJ04T3wn޸#vɺCI\s͑AUoKnSE[瓕((x.BlJ)+EG1'"^]Uz3]gV Vm}ѽ=tvmDw;=sSҶ㯬]{x{w9wPբ\2 H5c 0Ƌq}Kښw]Kk7s]&`SP$*m,iU@S'-Hϕ.ݑFKD7גu{V?vUfGpvYۡdž["R':اI%>Zq쯳h|.'TM<rݦ‚mM eaL_IƄwt 'e GMz05.xK65;zSQuKþI+Qc3iBr.ha&Qe+/qA/r]}"Ǵ TnG qD/Åh\1iֹ~r!"܏7Gᓤ]Lo6 2^$1, d+@Q$qY؃3όm`A <u>AhcEs@ ~ KGޟf;f.ڪF⽹؁Q%0gǺی,l|6C?J!^OPv=ʼn|!ɗ~IMp>&VE^_4N_)g i([Y^Uo>^њy c`x$ @,FK 1˔MŢ9Sl5We!%g#ʚ{^NQ{dZ/$kT)s "Uk JЪ ,'2`05{Mz٠1_P꟞bpBHxJr$ &|"@ Ejiwh> CrK TFbi܁{Zp^= N5##~,ypX>(\7CAD%T \:Zkl9Қ5/]b+5vNKCY/kiK`ΆWd-۫Gа-bz6pOk+5tͶ(6%K w@CuCȹ$LQ@n7lLow_^.r/4LW,ףy\g4tK.+͟?_5g+2ctv\Y>''BA=Co CrQn-! 8;GCY]> 0kp} **Ƽy~m_d跱JUn(Pd3FL^&S~L&8K B6Ad6CۻnT=~'A2ZuOJ@U G"pФ,>, E ^'D +erAo/yg)!l'wkTLw"ۨz$vn.Vt@ϏrjZ5IK&̈1zR|a*$B 7ɠi|m//Tat $RITlI(hTP8)LepD%ˮ1s!ވP]X٦ T:ǹĔ^lj$klio:+PjˤNk]5RX+Kn2OㅯGL!knWӤ1 ۗn@[=^wc*"sc_*ĪJ2X[1/~C#+1e|2V.o vK+UQ>ͿD?lt}eL,[νVT?;ybzr21MvUx۟ټ*Bs֜:IeHAuj H):mF []^D]k819 ~˒l/*S5[8s|5~G/&N<S(׀(:Hdq7~>Ŗ_B`nil$ GTV_7U b%2<6j~@#0n!cg"P@4`zTc4@ j"߲t,PLH1G=u?}7}bd6kn}uBj-Q+UKR ֽA|~Ƕ G#mp$9raʃ~ãRgJ@IO+;چ-%NaW;{"`sw7Ebk9uv)k H̭pˍKs JT[[% }IZ  7 #(02顅ʢHHJ ֟bKbHnUYfA$ת%,]K0?EĄ}S*21傸XJUjNsx5ڠM&+ ˤlm[=]GVv@F{1eCV`trjh'[3To'OF{֒ث6Ű*?9˖-(XZo (U 8& /%v z BMb;ӰKߧbfg8wOEIstHd6r.뷅^ މ%\^z!?d߆ltߐ̴hEjxZ"E%ie4|uitAB,.'3nHv^GS5H2+ȼ% Ѱ>M\$"OO^cױWn3)Ѓ<>|'K/-\'TeWT ؗѽ χ~}鲋\5#HLJ}-h&*e\2R5w| S,YnnnX\Zdj}U$pi89eՑ "4 ͘MhUUۏKl,Cu?DQ]s|dڂp`@/krsk}]^|Ȏd~jMPwS4d5|Klq[<;umqh15$&2Lj9K Mgi:%VdnMf pZWYLlZ,3h;ߩS4*%{nUl,49%dfIi],lZ t8TVz5?]ɩe{J UmC4C'tq,қe5RX~>>#WbEh>s? #C .Y$,xd,&19 $%S(Z;ټl"c6@rЛ X|W}.yhX .YзWNKƕ5Fo{rBa7K\PWDۂ蝁2;C=Qoxs( >Bus̖%o2鍗8)A$ 6JtG6n_mT# h? I_By= m&ndJ؉Ɯ 5eV}Q_[TGhh~E#O@}"):V]+wA=lsCL)0 ? o_1 [?j/uqU Փx3k2[!)ϰ>cK\7ܸ&D5]%Fa>2>xe-[Q"8hzhIQ W*k45֫eym͑OSDY7e%*V6h.~)7C5 d#3Jg>qM+v K]l>a7oIVt5 1 "/ItaPxA7k=^W솙3,- ՚%>`1&; 4і沵LH.ulmnaṪ& 9^MK2[ ꭯mԸ;jV50fr<%[)L^cm{[vTP2b2EVw6m:NJQ3sxMHlҷd^?+H}s/e ~c"^S)zuzVIofz7[LϒЍL}V{6vm dg?DVKj+u*"gD' lF#[mF E/_h:rmz-V,Ǥ^s>^Vkř|[.ȡ=b]2ɵ4FsM=.O5/hax>h~#YecfzCax>8ojOg:V0 +ߥenI[N9]{th˛u녣G/lڱ/L+k!wkVh&nyc+upN+BF'ZC bT~A7h3Վ:|0-WFj]Y\d4k*̵e-G_Yx뽓Y GE稞4^1 !W5~m{,)dkN?yͼx33gQRٙ}ǎ=p\[}ui8>B-%~'$BXr ; ߂/զ%/1k Yٌ #md1Lg^ M5 S!Rs '9UgnlT&ބYW4 jE!@LP ^#BԈˍO߷}ӫp/vk|)'6m/;;p8;iDtę+E-DUkcL>zK?c$ҐaHo.l=uÆ[֯'Iaz>綛\Y} z|γgܸ|:VJ㏞>(z,QO zh?Wа7]cCأє4Z .SqTM:>~ nyGeB&=[0=FQ)<ї.? JS۠q5 %K%ʇ|bí+lXSdAyl+23% ;1@kċc$PȎw#әcc߷-2x" 7n*?: ;݁#c{IPu7vw;w\uۄp靟b.5px`G]ޥn2h<]6^--*Ṫe?kO߾ ~ pv0*n@'I/#NE=͌ (Bdq~,y`PohI^F|(ISSC܁.^#s5_Q20~0:Iن{&'PĆކ _5g #H[?4=4Q&ep{ip.R)ǟ;YijFŞފ E~YӞQIEװIwZ/iX|.4R4gꧫL~Qʮ&ǚj l(Lݓmdl&CH^ ۏrIWS٣KsypEy>KM%>{{HqqIw%W~!b@u{y) #e_2)CT?{\=&P8?cɱ蘢x8uxeT[2s Vedޛd2m:A`ʟ;AÔYoM~ h!5ҀFbB %1 =  c],&a!zaeRǘŋMqdEAP!8..dݴV۰T؋Ks"!Se56V羝?O\IV;YE#ζlZv^T̑;hMyϒs ;2W')ڙd  (+81^]^[d'QE9> 6 k,rU"T2Ie[ʚ^Ԯ` Iڴǒ,~v?:*@|fk7ūJ֭l^8.prP14\Ť9] L<@#>qfeWI4@ 'nu|1э0عpI|FA5oɒW&&YWWNn!j7So8R8@ЊI3BoD@ßE]) o7xhǏco3q :f,bAor@Vt5qΦLi8_jp,Lo+uU9Y|vtuӢ>o/9w;d pRt'?Q>"M'v??5)pR ÷㴜._ha)K< 8/(JØƼ?ΕM>Q1R-g{y,xϽeo!BuȻ;(" o>{6:ߵԾ@&Sn3}yA^%} } CdIt^T08u$yrffrjfow0bh'+ z\bV6f3Q5c[644lh1K>5psY8-OcZ:дZbY Q6K~I0[.kqA\R EV!a|6([&m+t7I&LjBhm3 :]LkY[,3UO!Rc]c Aʥ Y9Z2_^ {HY-cc>ly Z&1f_c:u Z $9e!Jp,r+~^ ug흤l-2kŤgibUx\H'8e2x_z2IXZ=<)UKdǠ\t(0-pDCgU32EkrO.ZSSJY9&tÛiaL.)OsX9yESbl+e5)EF?xϥEr4|&yZ ɗs5GW,uv+"WP`|v.[jPט FFUo? !2q mPe:Eb: _ofTy>m|,m*tR-[ $LUkْ,PT.%7s[#\YS.[-FFoeV&)UVQ(ug"&XrL:VFbLo qsA,X7 5ce W tY̠qLRJµZ/ L}tgު 2FߛZ-$o2yX hV*∲d~[`j.3:tV]ѯٹgfٹ|Ruy\20宾zbHSe3HUmTb9CJxbF*X\">Kp8c_VVL!4Yk4N5lzjvb>KZi󓎢B5TW#R~5 &nЪ'.>S6;$kZhZMWI^ԉUV{c>ްR-+w8xGBJ^M? H29àx*_> K_yY1*>VY@(Ԙj_SMJ K9ybV(XTrWŷ˥|ؗX;cE*XPUR.JWYgQ)Te>,,JʚOQkm_Q:`vhYaԝ}%A6NZtNЅrG0@ր![͢xM;vx9ЇdF{tYnBl|b`q.$0Ŷb\//.'.䚝#v+R>^kh |[^rT,^]|"wǖ] jr$N'.+1)H 9".ΠKvP>T bUWݥ8K'jMڰĩF)ӵјX=߭ōvfEz+0- 9:k<CtУ=nUɵ$V dL[:@if!JҝKF'U8pQ>R!x|ѢuΒkz\\A;ű87̣ޛ?6.acw' N)y(/UWQ7Ă2 4e0BڛHwxk[ Ze=OqDJq'<[UJƒշuj ^W*jT϶j8 `[)G @QhѭڪJBEU$X-0)C #;`%KpD/haҨ%םȢ,Lꬾspiu˃C5J2/w:M/n2ڢh/ͅپf}yTZPfhOP3!ܙܗv8tNseȨ~L) ]6PBT$cD#h[WA-t{ν13ϐpΐ9doNh/iTaЂ #~o x?˪]1[ݱSCaG%v$bo[esWʜrZ_Ǥ;"!o 5ށM #M^Ѯ<=`mc" [RQ6;NJ_`ˑX\ȑOO[XbA b;uCo9Fl=+n˖,[{{7BI B ȥ^%.]* wfWey3;{7YtP:ԐJ_+KWzb6ܾ׶xK]֮ q1L{ V¤`FÊG'P$SzzsN#&֍HQІZN C6c,S 64혜CT g=^2QŨ$j<&T kRHVz,81dCetEtT'!#*YqG +Ò[T}Ʋ_.㢚ڎe$$H9I"LorcY+ T\iF.+>+, 'C Uї;4Y}@v0g FdPh"!Uo2 ZHy "lʊB$Yƴ"E6Zz w"@=dT 5&Bm ;{ˑCr۱ˆ-X=R? O &Q9aad/Fjf%şP[gRɗ'$vZ9l![rRt̸l7Z܍TflɌd4>uwU;|>3ԥ.k#)eh|l腫L*ޔUe+*)+08A#gys\rn|B.咉\v>þբX;O;̒+2}yGŚM!ϾC&Ċ(\&to(gKOp|zh]^z ~U$ F>͓1<% V$ӆ{dFLQ"S.[R[,I"&f~Klxg#bب.Ur$XQ)N򀰵C8E"aۦMtBnRtr'کaWrm|D:i|B|z#rkksSަyE _| €Vp'ȇwB"r&:urB9s ί壎q'41пNӛzHpyjOSx)%5TKU d3l$e@B\ak"ecN-4 U\WΓHE2{v5'Iok`roa32R4dd1ꔾ gzJp2JQf&bZ rD{zQNX1W(ap&C'4UBK!ƣԨJW D@{?Цlܓsަr£"2+)JiCn*y; 3UFX1D /_HwcBqp+ # ᤍhL(+\RA֓Ѿ2e.?;mjfukpY&dd$ftgO)^y_-^sN[ZZ[8Fl9ɇ^kdxi?P:H:rm14Nਖ਼=&sRۡXX.0yrq͊˩U/3љ϶jźdQ%v!1?h[|oy_fdp,"P'C`b)ǘ{I F9a[X 0;tƀ tnMR~yc+pL>1k2K^?Q*b;lew ,^o![_30\+8Ir"jL&xmͫ3'F1L2NZhc/Z5$~žC1~ĝ#f袅):kNc<$25IU,8 /-u*h } Vw}.dvN]!#{A*wF/p֮TشbUd >"I2YRe`AJKZ7ywvvz{vuu<2 k!ZF! lAIO,HX nTJOm:=Hٜ13m`\WeL4c I)#Vi\e9F;iSĉ]c&-HGO1#G1 ֤"Bb_7<fG5nԁ{F)ٯSʸ( Vک܋y|#wP*tZ%ۣr#g$h"ePɍRWM_fW0+$x)]别̷pKwq_3?V0<1 N4 Po!` (T$6!6Ϙר:y'NϾ}`yĽD'ݐme7]l еmtZit 䉶K}W}f31B?NZ!%Uf]3Va ^hu x$R|{_*cOS9;+O ]bc'7SqF? ;FQ߉pcamxgwFp~zow-+;wGgsxoH[tT >[fM'cLjn!e5MľB9gUD`HA6-?̙ !qf\YNh4Jwu  8 HE AfII*; Z9#Q+ES&KG ͓s%!lw:tǦJqZ;y@ߍG}<-:-㏎"#kQ޹FyToWrӅ ` x|#wbbce cp5)Isͪ1'ɕ`IsqU^ ٿ j- -@y(9,VeqJQ唓;d6}L_G'>D= %nitv$5x͛SR77لߔ2'زO'`|oچYm-{ζ;_6m}Rz5p.| (5#ƂN.j2^" ^WWz fx`-$T f: %y'A^ZII#i@W"UIM'S֘48s|rY7;bN΃k8Ov*=fA P6,@  /\TEK;Ov]f>Gl+Isr[h %VkR2`X)MRGxGiK9d̘ex;NBX3i.B:i: R;2\tWUHb+!]s:j,vetWg*YU]ieXTx.sBYfTGC]XYFW6!7ĪÕ _׸sm\WN5l:9 7$]%y- uϣ-ZK{nCM{&MS-N8W!+rcS,+)>gÊ1-Kk֢SN-.(Yn v+9`QRlP=Ϸ0In*EG`BΜԤιذ-u?")=tv³h,bt>Fpn(W|z֗m0SOzMwo*`E^Ű/K! ZVպ)UV!Bvk!\ V2R]9ZY˖^bmgoF ;[=}HaI3SP 9V ([,y`CO ;q/C@;z.^Ic.4Ƣ{ .:^'x3rPXe ?X-sRG"SSmZuzVWkXmVVz`<g߉ A5ŠcNtF^h%&S幫odo>-_cŲc}LVLoʀqȭ:Ý:ݩdi/JTrg8| ?@TRz&:A?Ӏx{ 0?f}{VOq?ǖ8\זpҘKV7͐C},R0fq ͪRWն KF5WQ3m{GJl)jHQsǢ}f'.1(~sܬpFǟQrQ`zGeҩޜvM ;֛TTYZ|Zbutz8ņڏƷl@~uO_uGx%W%e]wHgC7Y4̩OOQmtx}rNQ#JV_epܲarf[Y[Mz4ZHS/m1eH|/ qdBCR&:]ʦ*]<8JdzXˡ產Cj f)UV@#|T枃g1aѨ=cWT,Qk {ụ ,I6ؤUbqUv%IjR&ѓeYߟ } ZٹiݶcBR817'7džw)@J݊/Qʉ9M΄,dᐱ?<9Ɲ\4MʜiN,# >oQ G 68/r[o?/'>"Zy |; Wu,11+˧%)BL]e Pêax'c!d]Ek $4*C‹|P5C)}4qL٨&- J)ԐQ7e< Zzrr͋_ZNy}r>h^{tX]o'BD2&fIg#:ՠKlq#H`38AG_Op*pb/3}gF1&wmjiޗc/gҘUr>kסwY|R. 3yOt$F%۰mbw/L(()E$dgj60Ab_ѱ-]=g9s(… '᝱`y%1:@]")g~;S݌ ߈0ODv .9ؾO;]`2VVEUs-/:t@o-nu.(ΪrWM&7de^E먄2`k$@8TOjl.w1 *<4B^±5IS#;~/S>;O}I >7uD/Wf{SAξLE]h^cٶHm:1뵐v=܃䵟~ ;d c޴ymy; _/}( `0,t /_o~;JRV'4)^LQDӄ/3#k1 wB^M|XVX!)@=|^z?|=tU i)pCsPk3l2a[ J0lBvFOZ{'N9B'Jd1Xq28G E|N4;;5ˈ}2R{ϞRd~ZAU$ɅY:>+k|ØVE,%y}}΢eM9wƾ AsSQLt&%Q(ktt QxAMI7L,xj +ʧT2 P:s41H5 Đy2)Nd7d&nkxܗmEn5SR iB{&^^Ƽoޜƞ,S˫'HԤ|"=3Ku5~5Ky-?<ӜuJ8_u upguB* ǎkw49f98)x]ܡ ܹi 0GDŽq~&`Dw_0.~)gN} (l=vZa1O, O/8ƀ}p|Շ:Ku%z\I6>=ŋKOީD{D7Oⅰp5\FY8mC h9dGF.E㪣9J*PbYIlq뉽ܖ|kj7% 侚MP"wL^9W;h\I)DY'ffMo/SswNW&d٧z+w..kw.+̃ | 5$k2B1B/90l!_Do'qb& zL0: .To-y?0[ze?pA(z?K85>M;.sš_uڢ x%\GL&~gKU@E[ATNJ&{LOxh[3u6$6=`Nqyyp;^}ZOzFcyʏր0}}Zdz "sbḦQ"9?+X Mr6j#K=I?I15*l WvgrU8o+d\e`a<IsfdUjė _Kfv{bJf?yt$`8AeN+fs&ƆPu_2nB( poE ݞD/h54z֤g.UO.upT-MqUJFVia)}cFU幕k<ˊC\% &ZW63}5K,*9[L`@xv*$}+yTw3qL+C重W^@ɑ<2{I-WojmTlX2r 8?lwsbb\i=BMeo-vշ߾|S掾@ uzq@Tf % f ~s\3C:Zqe*G.u0QlAOK ~,f aɓ#[)~b4p|_"y,)нEcŀ*/?3{/w^o;Ĝ{Mܝ A3nn)/u΅Po#0:Nl$u] ep-Υu| C=_ ? [1KctD yiF䑧@E=佟)ܘ[aԄCmVB 4-Ӵ'+Y}662&Iz)/PPq.,TYnNɥ@V9lyfR5iNfh oN3`яσ{>} >;M'&)Ka§DI2̀,ƙ#R%7C$ ,4!y[No8kGŮ6֢꿂nO:5Ңg/}wTtXo#) J*i3Gl!~EM \ӈ?ۨCxӢ__3 FBaY43wDh­pm om {NL}p֌s3#o Pb$hll$?VWEYI.h}n;߁ocX?{fM-„a 0Tp8Bj։i2OEpq;~He^ܽo_dNln,7vޖ%hQ@Viހ>;#U[U\0D9'!76h=_L[} μI(ϘlHQnObZ1_vb7ɎNHbJ/~‹)[m;R{ 6ڲZIMCM +6t &o_4S(QN*H-a͝bv"oNw![Ӌʒ mw5SF1t kT]/(5kVI7"T 6:KaCԉ5uϐ{ L&B4oyWdptVO`L|܏Ẋq(&3Ǜ(?Jf׻ΔzSe4hVxYfedG]6ø yg֣fӲęPћ:gLVgg}~g]uRn^RUl43tY1hCoَRtQeD6' U,_ZR(B4Nz `}G牓Z#jc9 jOoBQU@Jr284g*ʱ Ω7xu<Ӱ8mz˵\'Uqœ%X;;~ϖ]/J®lZ # Xf OwvU#c j(SGPrbާb b.iq;?6&ks=qOj 8 {rԺ\{tyO1-3z B_nBXA՝)tT%Q(H#2Ly Lg؋&bTyrYmh:PUEؑ974OO'-ýp:x(ib+ EmJ#OouQXm՜ ۞6܄EUD HRl]WE^ave"ՕjI񧏙8&=euPrK|eH2ZZ2ַscv \Hg[vjR }ok7'OvѪ7 s&U\XH,F:S*IB%@Gc gXV%'m#7N_j[60Xfjfw75q_>93i|>G/q .ql[ru NÏ;ϗW "/qͳ޳0jYvPKX^&>f˖=U{2^_fٛ_&-YeKz+Bl{jғ V_m#ӷ@mdL 'vE=t"@l#)|fX \GL C+%৺$b?~"HTB|i(;EHb_$ :\~d#&IS+A=إ# M&O'+LUb+_zBGpݤ-^e*x.g) /DC3v?FY8->$!mV]"냛oZi*W2׮\;U |Y<&ߌӞ%}俟K5zuѢwnopݽlU肽7YAzb-P Er!tT⢸NK-n,aJ̮/ xZ]9sqA66]tWC{q4e#ǵ58{+mZJR=weoᶽw4v흐ZiKa` gu%='Z*L6J2` A^Oab5*N\:B\+dHCB?uXne7fԑT^bA[z*}O"_`3+j%-awߖO B`m$rڮ5ݲ{ ٪) J 7(-.imյWPh8ֹorfN)k;$6 e)׼zyCqE-Lʹu+iěuvYѦC+ثt~gXc/W9. Ɨ<Q+c\,z>oPVlfYf[ԱfrR)i*\aT+ -I`y夃TXbg,?C6$A h97L~,9٬q<, }}#iDdNL},H܏I]^mjMjNGQ Te܇:-{-sMLQDriuS뚾lc'gD$L sF-%)۫*&WKƕK"WcE|JT&$E1]V>ojQP&cx 73a{GWJۦezaZC 0;kU8[ .q|ey&B!"aV0frn#(%VJ'J rBC3om_HT%lqO^F{vyEH\:B,b=ge-#ضVUVz;Vi^\ZrK7 _r)[[#1zm%btOtFĆ\GXѿct[wlq.t466 S0.a{}]xsYȇʝWgEhpK <7~ U Y{&~urOJdJ.k<̽~J;zݦʎX{f-ZȂt pwgdO,s6#@ĵ&8KfV ^>oi9u;2Xִ9!yUz]5i0qcQu4+py;puoV`ͽ%iuݝê(oMyMY {VW2-aO| eN"j fd Ap ||HVrEʼ)m,wJjY~P[Z!$')k5ꓒbc[a1A|F:(QP 'Db_GP>ҽ )hqN׸=~=SWk{7<4ÑZ''4,]1} cBOk2BF0W-[?vK  h==kJY,j@ejN@P4_ge%jievI:zXU+TjcҵQr>SL`(v9,/QUP|hv8at26deg.2i3 U-Oz Yw>068:Տa`Ij>oC q9WQG:‹^LLuc'_:x hں3s)pSf/iF];"̳?A _ڙZ3`w; !%1˜Z:3|"Jteb{nwj ~,OjKLM?><=PH,9"'/?4)!)l\ٜزhyi BQ-UN=\5j%\utNM㈫T $u|TX>郗o%on7GH<0W6,N((MhQeZ-945-s\gyb?P5Jobd5u|n\X9&%R}-b#:As&_doS'frmUZmAy-'579E\"Ung \#OؐdIDWd |aQQhPC d~O )r0ij{Ǒ;ZqliY'}fiF̧w{&,*.UJFp$ īf'߿~\źGL}j{C}?y$}Eڄs3C:Zv)clHtմ j볈lJrՉplô,c FKu\%2QU;FE8Q;_,]KG/}tɗ/]iv4cgwMJC_1zm_<77w.MfP?nCg_Gl+eK$Pt2_0I` IֿXf NX>&,kO0m" ^rBJUX5ƐbXhP pcx bҨM(Ur3,'x~~{Zulë=Ml;`@;ěuOiUlTk/?سL,{ʡ{}N!mGP:7s\lnh<^/6%_E%C0ao"۞TlȖC?R:IJ|A*EUx6-2Jfɡ{Pt|fTfœ#!s|-|f%XtS֙S"KWR.' #T۶g1w 7hMקmpxq9$,FN2|CU8-1ZmRjUB U= qkx8\gqC2ָ#;v]֛\mЙҹISMvr=lֶc_дm_mq'?Adv8†է'O9Ahv:ן[)u$$+gs+$Kk1PXc1 1sctKE(HE1Ai dq*Xt{ nhqm'رXSԝN$J cpI:{ 5@fH3c|c>M%w7s? a\]UeAFn :#>+X,j*@jꢕgD+SMd~g׈'&NƫSGH':fB#5v.8ڝ^`RT9LApPBLt,vAtc@;u$.,jFnRO %YO:LmD5|1ښ|ҩEqg[k$jɳ_,Nw{1oǘp'38+^>6WgћhA <䝠|Ofl/zk5ƐS>b{65etחt]l{+ڿozo{'p, ʣ ?IpXGiKeVDzfz#w/ToNM5M8nqZ CMvȒԖ7'+ydX2֬?E,RԂ4㿏y}|Xf6X.;6Os!;Rp69"ܚ*#k bddYJIq 7>:ssy#Pġ>u,C} }D)T晱lHA+~ЫHzrFiԦ jS&OVR%.m=>=99{:&Kܺ,!'嬖2+<à e|O/֨B iT ҩ@.~i[UzZZzնO}zG}Hw\XPVYYP#YHއqLҦX_><K=XϕˤbteZ)(nz%U뵺qHDA X6u 71C },@lľb ¯kkNLn%}{;Vs0Yϣ}`$_p?rhO r%ΡY,8qٳ>3A}N>8] hsWG(ŝy:4l rp(o`@SCql F.X={]criڌ0NZ<|l= +'nM3rtȌKحΎ99-Ƣ"O{tΠܩi$ysOxhEu[O'Yl*(bgW  ,<&LB{ÝdTxې$! 4!Аp;(!;h;Obd+O$'\%'RǮ>ztyh<]g^'D4N+ |md~rn@0lnݵvO6 HݔY`˛Tn7Lv4O>v͓s'u>85_R&TvVXڳ;+dmDu(+_#Rz0PRݹ㋌_m,_mvǨ2[[3UӫWԬ~|W׬X=uj]]M=n)hE# -t961n/jIJ1t|夻gϼ{Im<5/oֹ mqB/'*8e(FJJwc23,^666(2 7b|V)ǸVvN23'nj[?<1]JoͮKU*S, G ]/-`Hᢑ[.| yOeer&!&f4qw87+FoF5o6y>PV=;Z[ &X8ՠƹ/4RϠ4QnO ۝^ǧ)IOS#i'i 06W5$m'Q'zn < |GRxf"ǛQFVq.¥477 0Lgo=;b{JƝ[G ާ/pqrENl񦃱E[c)uYz=?C)tIФXXY1Ӈē<Ex엁3Eu=E[6GV\׀0~.E0\s1l S9u $X64kn"D>pfr0`me*:voȅ,Lk'lj?v;s=sۄ6ؕ#'lnl)G2D+E+Gƶ&V㥬 XHzkd5B.q&B%]@ >S2ܝYFq 0&5/1~$|B] s̮↙TQ~ ^oS씨8 dϤ;OPW4!̰gvB,nfw|ݧنց uZj'#c.pm ׇXt"@R,(f^dρ"d?H.j,xͯOc6`lRq52)yd&Rc#eb]5)P>^ӟUᾆIK͑r,Ti 6Uvʛ"ozf.mjJxΛwj&f58~g0wsR4`\D=˝13|9m"MFQV|`3T";Z&JFXoiX='xot)1p=bcVRq>hv#5a9 FdBzmE(!pHr]oRpաU8=*u/ϖaS\bS҉Q=:wg81Q {0X?n{Ө_Ǡwz)@a{'&ԟ&$c*~x``+>eoB-aZe6K+ZJcsz9|wYeϪL_417M#nȖh2c;9 0()1iC sWl/NdK0JmdYR &~/4}\6ϠJNT-Ej1wN޷-jؖy͕o7-ȕƩbMTBt=[m "Wutuw#SZeRJL蔑gr9b%ǩg!LB|<11?ɬGG4:keb'X``ILpK+ cw-qavLgS̝=^R2)<{gDk6DK6bOC α!ǎZˋGPד>}z5| zQ=끙yPeu=5ٺWPwׯ>{61>?%sJ`1w.m,$@{`=MaW v% z*&%%PO$6 u‘ׄXf9Lq8,>'$4etNfYK3;'˾4RJtwzR%NԄmzL9jsKm4B/[dZ&u\*xt3|d6+GN~yO<˧Mb"$nuF;)w]"Eh?$܅kx)B̼ ~Siv0ݧߞ< #L=CFw2>?ʊ6;\O+S ;KF~ю𹑄#8j.vO*'>De!G}EׅׅZSnt$Ŝby@%w 4)Mz~[$x:;@ܽo6QSx2o[poЄj4M}FWoA>*PRW[sx~jA/i=Jk&j{T8'>ՏՅKQ:"{`U.w͝UIS%I.&9f/VZ:Fޢ9M2RY($SLF̏TxL֊.EfULRL*ƭ&Z%D-Ilrqktyz"R㛕YPx\z;ؑ!MHGJNQ}2CЫA-}teRҽ&uvPHKƛ:E=E؋ERL+bUEVR-;\\>.;:*Yup {wM"B͋ 8zZNdRQJUSV.QK1Fmbkz Wxޓ>4Aisŧrܝ30'I$ԩ"clf>6p5KsC W'o7n\A4d *lMYMs?`ZqtRq3UU:ׯ?SSބMn\PO+isށHxVהEI!fTT=wcŢr!*wh(o!FynQVV&%J>0eƿSMAuKP} EĕƿB.,aR4t]cTWt۵6Z*˪K+p RYOI8qXkƮRDѢʼF-rm_ LT3ցhh2@&]}..IjKKk2= t8, N57y_1xЄcHȑe-vY'GŅϚ?M↽T"4,H+X|`a~eXA炰Z `CT*j ~?ˤif_02<$`xX)JWC`yl"р%#2;:,k"c~Pz]DK,'_A?MaAf#|+tZ[MxjJD`a6}=[KҝS+ /K*| ׉`F{+X7߀k_k#v `ڈU@D`/AyG/(a-ExòSp[xh$ra4(xôj H`a6}=[K!^0_ tW< |&\aKOx8`U) $ MBV Әc\au(]>?[$6; `xXH`,Cx!<!CA|EF`V숿tcHGQV;G3 %m0yGq2 |a|+tZ[M kò+@M$`\HҽLsA0 F`oh3 |,@. E2?yy$Ÿ!"p( _fw0\T!CvX G+O|MJr#+>"Zpf+3NZhZэ(eqBrb)IɼsßpĈEcϾ dc/eٞzWNz$HN}?Km}9r sDϼ}H? TďI`$ RPH* }+4y 4F`DnR)A }۫έ@*FCW6m85fk++$nYz3rG H:9%]~;oq-;'ț]U5&egOZUS#>P57#+g/6?I:1⁦]7[ԲY}{s=o ܌ހ*Лڛ:;nHQ!X~Gy@ V/[4 i[yH))U( Рq0*W!E6ͨ B <`*w8*\śt%2b`{%;/Вwgܬ޹ߥ /-;szT2\\M>u7F̕@k;lN>ݺuE,dnBBy7!eP[F:9;{QL>7m2#nؓ׳id=y޼=~wrw4/=^9CE sYo:_j217^?֒Fl[olfqAK"'?gH1pA|c3&ƙc4&tIb嚌Θ^v.(Beaqk>?fpiӧ4  ^CC>}Y2?x-OoQ0|07U}^<g٩WDTW41}LsBElB{o!;@{'+GKƺ朊= D\mjBuzKwZ~Vg?K@$4NeTCx^ĬNo,<oM?*pҪMf~_?gKڳ ь}66j9LVW@wL0l=uW‡KVw{̸)IHm:5 M/4)yE9= 9ɕ,oB5 _Hl CP>v%'; ܆ F{e{ű" 'djsrL̚ђc6JRलݍZh)jWUb4tMmb@DiHm^Z6nuNVAO}--D3р+O gݙ:SMڤSi-W')b70uvIH{꡾#WWzfnyFi錛6,:\q"<36ЂW]QPUg/(E*UvV/1B}{!^E8@P3UR^ 2O{aCW_!2i3f/H K>?+rGఫ4UL&eTO/--*-+/%MU7tx65ob=t_ Id܇BmBՊAEs}68c# \Y̌&i ׏ɐ=s҆--ݚvBaLzp750%˾#O-UnJJj]a+Mޞ7鬝w щ}CNlAq"^9N#WŘHgKWIJ`wZZ˶&ӗ;[ Z Ikr|0Ζ<=~X~W6¾2P0!ص^,e0tr\8q&pt/C6A2tx(t'"cKG|qpQ9;pw LkyXZ%Ab+4n_%gy-Q{MwN%w+@oB yt{~Rx9sFtg>:;2vf$ s l9pDt 5LrP5ސ8%אn6r4pHv.[h\r!p!ReD5S1HPgp^e;@U9Ĵ2MtI2F%8dc^`m]<˦,(HD,ύAh 9ab$.9/NJBهҪO3)0,Z=^dr&r^Af6ή' 3J#(ZSl WHĊn 5uy}B,xu}NѹolQl=]}PRK6\7NI4siJVW8okt#|'`]-UB4k~Q/t^p#|Yʥ%KԉvRã I̎\2օޞoz)Z `3Jn.3rlwEм$x5:}aG=;v3mˏq&IJUbu7'e;`G4g%]{&vR)kv)ܣq|ۤV\h|0edsu/*Y/>Ϲ8(Z{5"!}ktùs #vX<ܹ~v8 )n5*W{^2}~3Ͽ.  Ȃv;CBx84Z]7nBz@u~۶76m< {a67g7*_v 7eKuaMrx3J5k' 9|>/QA;670$-Cӧqݩ|yW 8vv~zUzH~\asDK~9||qnVA+G,ID{drV&޾"Ýk\mjJfw%K%ҳ$ mb|*t:2a݅ӛSmusd'ɘWhe/h<;*n$:Z iLc$W/rդEd c^%$R\WݲlxR]cyvfMܱB4%QD$Z3r"mb|<(uӇ)٭hϘPyB\}bWn<܂u/I =5<C5ؕFJ ñ+5ފSg]I< &V!^tq}#nٞ-fZSf<>>aqU[nVî:X~tMrL;DSВS홴tfcl7) ?OR .p˗N=EK'hO^ҸrlFFDmR~q,F5ֶۚ{s:nj[mSV6棠]&mb ЃLjЭ̋1 +!9&⛟aT9AՕqgeq[Do@ OߕjMCκy,WAdӐ2~:t94c GgHMUd6mQR [m Ƿ=!wР"wezo$%e?p>ZJd'.k^1:--%H̕fܜ\zᚇ ? N4G\Vc '_[s3oSIp Wч|< \]; '?Z`"QkL̵ASu2x]`]8V0Ӱq}w57}o B}`_FvQ]~˹;L6\0۵j _]ԇUiJ"Fw&@d /g|4>%/9LUnZGP|0w!xH/L,kܝ=sb}c==kSzNkl\=Y Mwp?bVYųų$x x QĽ.B҆* ͗w)w_nHrx;?[&\\Tx)\=No5Th\(|d'_ۙߧ?8I#*O\CM6߶^%{ Q1|'_grx ygkÍK_!a>8<֪8LG8[齔RxQK]6I bEfYBPI{I)IKHQ+3мW|8~Z,dRZy+\+'MLW]+VcTOYg0%CkW4ڌq樌 UI'w>&jH|Ief@&">g],? y/{BlzKE&MbyB3B* }+ /fK%xI"1/B#z=wOb$ᢤ"906WG? ߻GgA)kMSj+.`粫jw6`Yz xV'҅ W!DC*OJi%Ҭj5MKT~D77hzlU(d\0>Kt\ s.4,?FA#>|5@s:Z'Ko_ EuP]`3vC9y /9WxII1</\h)"%$a$E\9tٶ!ʾ%XP?>"s0"1I2T#a(LUT3ܙW q-6ƞJBSja(i۳FF/oifTL*pC?K_0`@4>J-!DfNC`C7$DURmɕv)#h>I ln6zz[2UHhn9H ns~:KTR`.휿IHط̗ki4zzFkPot$(9O]wQWT,Oc$9o9>9l77 Ɯ`޽wpm*`󿝧[W&0 'qZ s l5n1y좜_Sd>D߹  IX>OE+޷D?EqA -0Ϳ?h>Op>Y9 |}2SKHI6GAWMg-;%dI [PgǗٛjP۽u4FNY?f]^h@4T13(r˸iܥQ)$h [.Lȯ싘\w1 0%WǀqI*6?0}:䎾#KL/S5dO9fiԳijW G?!YƜ'n]yRM$1`}8=c}a,*p3pe_`:( Fp;*Ђ2{cv EI"6`M[o7-ܾ/룴qiφ楧Eb͛јmtK̾NuZ[cðM9qrc=na؟61]T7,#"Q+RYHq ˅C&:='*0r#<1ncs/S_e5Aj}u#+ rQ=\2t"YEM")ǀEuOf3ࣆ; 7XbO^%q'̑ЅtC}@L%1>>}JY-pI(އVN(VO~_^wC$nr(O Ƌ*# jᢰv#EyBG 46{: y˙{&&xx cK'8SenޗKWf&A ijLsCL2aJc4G4#r9d#(z$C4>MZ4ב4a<͞4LsJӌCi<!i\H\>6'Zg^1vܖ4!k m &Rڊ6{Q1of%G{IRh< ٧;x}..=/-*wir䎄*AL9k)ƸkVT6≷wq=)S`6XK(I[Ë +CfW4tzHYq Ya}eCA *'~`_+Eڛ$.:PGd4ΊZ%-@Zb @]v{=J7 H;|@'̤ ̠!)Ӏh?Ef3qQMf>GP^Y7/pz7 AO>H 950EA jntsG.h[^]5-sX)g=.`zܔ&IBW8zɈu'N-~ntYTl^YCj#VMI:`G.6=6k{ܩ#VOʤaw +wNYw &2\5ꬮO(㴓V!C4v|`_"P3 UBeqrGEjggn"$2FڃX,oMނ{:Ē!d&B:U kΑXD7ZKz7'G[XD?b3[֜x}W)D5J;HT*YJZ^I_=*)QD]yob"U[j?5hY68NOjӷBbG(wCs?'YLuu€%B\unEKN| @1#xT0')KqG v/%'5T溵[NU=ĩWh!%j5a.%u8*t@Tf剜DHx1S/Ϧ6n{/5x߆8]}v eT*Y^+?k-2bk2f 1zKXObE#HMF.p?po}.+%,&Z#gr뛩??5 3|)gL<! .~/:A||mIҋ:{h$qf"^|#ߚ;`RH8?~f?9%x|7a_/@C;ep $ݑ LCo<)wDF;6D0I0 ,?;!("1=k\ , Dv"w='rSAX) . ?!E'[.3s c!SABz o /~s|B3AzayQ炰 œM$kFE#+cYhj@<0G0*>`<,?x $[Oh+a&/yA9ҹmaL_`w!qS шQq4WSBM_{gA/0_{ ru6s9 ==A`y%]8F(F!]V5#yVMA$ΐJ%<)Pʆ#$oEgعx\Nڎ齍-.EzE/90E(} ρԿ"gO|O)qGt)7ī{;bZjꉄxvip>w|/G6k=f:d!y_Hߏ9~t 6| 'OOC=. cp˳[wQ!y1CA>pεw9zˇO%l |LW\NT?[L~@3%\NaFH \ D0/Vd84XO4NX<#1oGBG[O\ԣ\V$gQ3 ˔8kz![ҏ>X>= W iЯc6,sk|YҜF_[[c7n6"UPd`q&q8 8&#8.3q/<8 caxeHps,~ 1CjPͮn.]ᇃc&i5葚=z/|<_l\he/XdqpO_8}5'" p> "(]x1 $ v_Q?D)/~ 'ZCFD@8e0h8te91/py4yD>8fLuIDb ~ GI"JD_x}ȤBq)2`aa7IWt! ,QCN˾HB( 4}ɠDz8q!AG}8(D8K"wU$79sYO"I4H{ ǹ8I!gۺ Ir=@R{KvYy !^X@tB_7uʺ|h݁CRxFw$F`I4O@YBQK#4 ! #KP W|DSL:r ca{d\zQ0q&Qtwt^t }( (.(,AeT@d\Qg7p o{N77{oMSNsnU8vx<}WiϐA9\壀t?2ԃ`4 M?1z5&)˕!fAuHP댚}-Bɒ?22~2QĈ"&|, }8_(ї~/A̓K@c NRx2 :I,sp$7IOEGCalҋSIw70m.fb>"E6S`B3Jt)/3IO @pԧ7 !"3JM`BiI? M:Ʂ)lRO@/>57:B}<=2H"h?^hC(}6-EMqi]FFh lz@$$[DHA^~h .}o D__-T8V. ^4^*N`gVٕ AŃ6034o1 =G&N00h3W \9q Ġ-k*4dA/@MWX[Y|~[u=l}I/F}Gs2hb}v|}8_LόSXV_aϡMdD>Q॑FOpbڠǎ6,;/ c3Ue 4•۠+h8.-ؠ}P%1)/A/ mit 4d&hMw\_/"A#t_4LC4Bl^fzk` Yw'(htOn`IЉk}vW>q#)ry ؜Y{%N*F/w)֨瞁DC8 2c_+0{Q!t FLG>#~p }`x&WCDzԐߠ70A!wRwP|ww$afjMC|f뀌R/ ВʑmQ6!@ӕb@k,澁<c@e/s*[@|H z>U}${v>z,GDs(\!{daA+w97{e;\MTW'cbBl|?A-m:PUs3*twѤ'w1Cu 9 +{*/SU~TV}o>uћ^|WI EQO>uTo H^Is)aί=N b:ebogr4'r6)vrH BwHJ.M-=B12)#CC^E ~k @G&s`>/d  .pzC~̿ޓ: y9ԟPt^.pT87>?8xHcmf|'pL/v?@bg$k~</%x;GRg]3e~j/$mJpYYCпϲĸj5$˥sPNYhlc(Y (?iNÕcrXM1W@Nrr,2lyyueq?K->R |#SX@jz(y/9c53\b< HՈCro^֬ _8@AC݋*"Kúº}"\K-gjҚ W_5*/l NE" 4S-C OFK6M*͙8oK0GX`}WUSXD81<+d~, P m>¹NT87ǡ[A]FOڿN+edp]fs4͌ʩ{aXIY=V hpv .pGp]~dA/УYX]3]Q-|JzU,[3!i %^Zǿz2!oP}",bLT못!}t?byHH&:om`Kݐv@(H_ :EIDvhIψƍPP0j M,IS QM~6B_(K?~P;V>y)]nWx?NZ/`~ WAAJݬ2pC1쑷@]?|-WHm qig[C n7h+ ?y/h0k1 xL'uX^!^C7(蟐Jc^%[~|qiFr!X~ڐQ^gOK!鶐tHzc/7 c"ǖ0&DioT(U755LEDg~xnB:@᷸AOl_ w>8svƦANQ)oakP*MJowcJ~i{r̾{۪uo^\7 d#%ߖY M"NQѷq*$5T~vHY@@{tΜ:y~V~ܗ=0s{wB<ŐߧA}?%v*%y^"ǩq[pM :E^EѽG115_׋ ôڙBk1 Ht ʄs{$# 1I.["|J}!}-wϹ]kȹv!4l#ݮ z=?%aoD@ek"+_ 5V O_ yc2?%G'8Ip_C/40أx3$$=hm|ɂ<[eet*2YD__^"Xp,取[U@f0'E\ \ \S~:uDO%\ \ 1~%bHztNHfArD!rlH:G0SHz2%=D>ոi)B΃ IoW@]}#km8 GI}X_ Pj?#o?a$aa-)\ ?/<o :jʄtqFpkB8N>S/"c,k/pfw3X僤}n+"s˃ko} F3W A~'rP?zgc0c Z+17F@8  U|o׳jvRFz-ݸ_xI7`ћA1ŗq ꥿ F0,blU2e'ִi3fXZWÙ=HAgĜ9  {,C@cKC+%z>aitdG}M>]%`'…Φ mp/ȏgG?"XX *mnM#f+ՙ<,O`/ex9//qoKs80?a:f2mv+p~څ - ȹ7mu򮺞oq/gX/3EbƵǺpyJ^;+.Q'Url w{[gb ۋb8 &y ==:R^·0olf;d=xZc0YfwyCUUL=Mk O}RӚKgG'::>m%~vWtCt]& { H3"YXZ`JǹƙmǩWh4bIs"szL^]`P2Kuo~h. CqPW2ŢqY?iޕѨR:މuT߫X,[;ƟC} )45rM?oxޣG%pk{ZMd bFZ͑CK&Ͻ`k@,NHbX۾  ~)B/ׁ0ܠ^mɳDπdSB{$#9'>M,=Dz${ -D(MtP Z'Ž?Ikzy5l1E&I{~q r`q oM.}d38,RaUl|6r>׮?dNJp.@"K }M I}*ʑ>'RNOS/|1H5aqua@/'r-xq'cW)8n^/1?!ᕄN ;Bu si0އ.O5F&v襭OMẁ7߼̚&3}2yFMFW>̼$ma)ܞd /y@y-#UExsgO_zL%$pWA}C@YG1Bګ%N6'7HE7}aђQ !L>D8_ .>Us׬ H.{Gdٻa}A-]ߔN ? ~?~O4 \CbPv7@. DsH]d\ ƻ H܅g%M?n[hdS;Pl0of)lxLz q~௤ (*)N"J <k7 L-YT1[o\t74i^֐h!roI7ä:@a1%=^ДS]1ӟ^^ԒMBu̟UѯНQ>CX2]%RSǰUv/oib~n\>IH' ґ1\ v#k w[v{Tdc߼Tƾo?A!Ǣ EI~` O/Nt}\&Wih|84*>p`f=  ߢO:R&_uֳo~ OK8 '=SML%So~LOE~%Tķq.%O\-/7,O;% FGKa9w%y>GƆ稘ɑ%~&z?p'Y:Ka[xz^X9AOlvS( rϓc&{I~y 3 .䝊)J(,,O;%^#ã%/j<>*M'SXvo*5QrIh&96% I1LI:;Sz N!1|b4Gua9d ~ˁ~hq q6a} )E-Nö7|V0BQ-?djƹ-@.G0׻m#{`zl7K: 1פߎ!P'X9_25Rgm)򟡺8$l~87_D2|q¿ w5!x߆zB?J?W]v ^;}vwEw"fICUWeSPgex6[S&5B͠%=?^zFCc󸦼K|8ǔ:>SWX+z%ǡ-%xa'f5rog&߫wK~. ?'JS$Y2\=U_E}gT U[ Gw3u, dd-s>v[~no'=m:ᚡ9ɫ_7vDd[j 8ٳ] eGSj\R`gH$QlB~M|9IO$`ٝZ #C`5pv0?E\V%GH2wc~pJeIe> \Y um~nf8]TzD1 |{#L;С=ñScw(JbtX2+% eyC8ʅs 5ޡ=^_Qlx\:'#@f8iڦoZ'Q΁_G(\cw4_k26&w/i=甛&\=.vkU9֫!}ƺb}1^dG0U6BP2jt/y C'1(EYprNIM!/ʀc= 6~'!8ʂ"p)pISNvcH@̥ͽvBsTk}FSM3\S<ŚqsniadnNw%+,5u\YR]umͯN웵9m֑(4JYZ_xfIIM=4lA4¤43٫X8fUeq -ˠ=v {;JC{;܇]]1U!k- ,CQz=)4:N(&z#4q!0d:Bbo%|S1<>3't+R0-3.BHھSg/Ůe2{Ġ#bJAjў9jgJdRY&@Ȝ؉lZ`]+ljդ)h{5#3A 5Jb03t 5^Lܜպ}tH͐_p3P3p8#|WXñc]MƱ AQ֏=Yw)X|Ȥ*Xӎߒ۸ 0{3vHB~P'cV=a |w*-~HO#S #>EcȾ%#=bK<'M/І͝cQ)*3vdRg¹b)=s8*uhiG/赠 ?cNyqB_tO A ~<4gs:i*&nBgmOҹcpj{8\  Sbq'o\\*zD33LMqc*g$]2J+sܿ n*R:Q?zGP18̈́7A@3yU= 5DHWb;ch."6}TE{_,vA0bmc^Zx"{.Si'v&C<7)v| W{;85t{ڝqHglg7LJ2IF G&JJeҳ#/'KZ΄ʢ+%a祈7637HşS'%#EөK^>Q('G'c_ 9cZZ_V :F}DٳB=w-.thiA1Vkf٠JngM)^]QfSc"ŊA!-?J潞l].,0mcrF_XTXDQbgWm`+YyqG;KݓGtg t;bi d N N`~Bh+sS-L><emz:9P]ED(.-JL̪p*m,}gi,GX9J\*LO|%EFV<|ov /cJ*i[?y@O~킴Y/c̅Y+y{|6|xOM h*'c'T ^SBw1 X ?'%Eϻ}oS,:{C:R]{vF; LнRb}{y}qv}B:e6 gUf gn.ʿvByQP%GL-` jۗA,H=3xA bѮ;tzºh;֊NQ\3#7Zq^`.^4(o-) FO+u# .Z:)s&g)n0 g [ o'bxNG8#OJ19;cG ^RНǞL{´-zrQގM==S|VB %S%PEExV5vWe[}pO4t|P'xu7w-[Hwdh@^AK^"}K[;Z>s$(_h%SKAof.ྛ/YaQ9)$:t3kqN2pr'SC< ]֣GڰC-nЧ4[<#e(CK)I3#ߕ¼mQH8]*~d+L2 U%|o |R%HEeMp([#1k$e"]xa߯vMq-uՉ5'xbUkwx}O f%֩񉄿/|G7m8@PBexJj3D?Rx?= BzoQ8aM$=;ť8f=-weꙏ-CRERfTOt}ig7&jw17%#zEFҿ#, 7폈m`(vRj19.g@g:A]b9nHQ$|U|q-x?-x/~B_uEs!sxa K֖ 9"VYY-[!94qzV 9GBh _zX ,g1K{Q?, EI?)6&S‡t.ڢ7d6w$(̜4D؄._Si;aʄE2g%SgJ4rvgf[&%m#zC KJvUfa透yj>|%ZR I2RC.llkîs?ֻ29vސW^}{v6ߎ}%u?qs oC|׌}!B /DF^wedё)_vhخ:#ղzۄo'Ӹ>kgzzB1D>V]Χ*{uz7kEvbbvpXIa?wx7pzJܻ<Rfd}5<܇+n OWpwo NtS#$~ MB &DF=AYePoHQ} AG罤jY=MRn/At#ގuso^5ARս!j=rLS iU<]٭7}[ QrAϡ ~XhaıqEt됨C4#ӭ51ڰ0Rz,,W |R%H:)K[Y{7¾nYO$}SNBcz-ER /3 {B:/rQv㱽 2\eqnޏ$|-¡/6B:z0Q~,6 gyܮ1nc9H4;~HUG9gW_%ߑJ(֊Ux;x+(~kXE|[Võ<.de%&n_??IJSKʑ%sļtɆx2Pʇ۰-*_oC q~Dz"d/I_`L)~G!pJˌd?]1sq1΄OT~v[1}$O?;h=8{.Mmn\u %?F-~h7:7PaMM#?F^oB2r;ga߫wK~E!a-EB(M>{åSNeyW/lvs(^TfDCp}"%xV_AߟHߧR#'%$/\y^ dc%wKx?)"/Lr[K Jsgm1\w`D{Y\LܡH,Gib|<3HO+v>L~q(ޏ>Xs/bн=][kK><{`xviJL͖a)\\81$!1*ۯdh{uNn75L:FgP?g\%UL7\ qϙ.*?S<o,AIV\ƒHs/OG'徳pT1&lfGfU=02aMٺX/ı hFR_\`sPE { wS[CT/爊Mkmln'i-*f ́m`9j לlK8g69\U#%J5~NkAmnͲЕ[T7l3m֠0HjX1:ʼĴdUT˧fVS:ޣK`?&'ge.͏ŒӷxJ,W ?O@F;SspԁW?>*Es'Z ֪3J$;V^W@'Ƅ~ÊMN*ӝ_՜ך;ps\'O6.쫫8*g1:`!Q6?PZ&ݖZOr1W紪ɕyOL.]94j+?ό UtN*pWo,aO))D'B1CAI=Z=d&0ũͥ.kz͝Ms$- 2ro3 8p s>f7&u:^}-V[Jik6 qBCN%PCݪPm- =xGٔfxn^ ?eNMOJ5I{@&H/_q)9P׃:cPfrU5{)ޑf6"z.m.If1q6 S/sfzt堃n)qt _:#7Rdy5iV0p#4OGwȥX/5LuA wUb87y w)9Y?K/ʯ'N֑6t%kIo~P7Iu.._MSyp ׳zf~3g?0/(/ַ۟~f33Կa o|-3f:flI+GC# fK>y"]0ħ '#[X49i d;-WCZ+0W7V n:bVƨWLJjܾ6Ǎ.2eaSk`l;JȜOG&Yi~4 SRSqT*ruj^gIp&<5[.ԛ&wivFS=`6@k0ƛj =IHS OTפ}:7 GP@3xD0ҥJ|NDq%̽ʠo6^o?&Z3jzu/dا39ٍy {S;<)P3ţׁEc[0@UѾw`c5q*N$1Z}]t{#:z8FC: u/QaBPV޽ՇӰLe_z墹h}%lqXE מ1hJ3~ t,^\h4sl%nm y[L?%s$OzJӨv<۠WUEWpƸO0[EF`DlXgEw?>इÕυ_K]Mj'bj4.!δvA86[ɛdY֣oZbwzo¶9.VJ hi#!>UoL3Gfq.#=%. o|xS]1n#`ީcexgON WZ>MM8{v(X^»d^<6s2OJ?Q@NL'.bq.˙cBta/q?FX $WF"<-SN9,4E[t'1)J-l@U]$U \N#PbtUOsؗ^?7"~5(i'QypͲ7!/h@>YR}E,2foqBqǏoo?d|Y0`9U׼ nOW僂Qw<9eJK=`ʓwO[v.~][~p 9Qng4^[[hO k`|P^+/#_'x?qhOKx!x@%o@A?!>Qdx`?,O߉OŸ.C0!K^2JoOKt~rHz}^oPg:ٸSNؿ%I#5Z9'x"i G#oPԮR*. |D-ω8N9$rU\akåKrpc9,ZJ%^o[^KzU%3"εDk" WD#SR*7"#bwBQ( ~Kе]q!˓݃L-E߈̟}LSm :/P?:TXz0,^K X?^G= Z+x==,H KAA?D~~B_E]^M=#",on R{=D>IrL:Wh.[ӱ/y/뛥0"ۥt,oY/t5O(ga ۹%{q4khTEҺIfO&7K ya4ಕTh&"VУ&MzҺ=yb>AOq-߅5Q^+ >˟u蟖 !!xo@rx 7$74+ Js^-a|%9A ;yp Ed/Ԭ Eq^?Z}SqyטxʞsUP47jB}DO%ELZ8v0Ÿۧi>Y{%B~bnSd ?IsPx&^+q~%%"^o@A7ED!eJKx(-!ڔz& 4#83JTfMBt-dtƚ Qt>zˇ>]#rp̹ CӃ9~݄]+fghIV6w/X C-FƍocdEU,wLnV#SsjYMZ+hkpc{´5 CIϖ  ?,7@\ZRkJ8p7ԥeLY) ǚ8֔@VKs6 b<zc-Kо3on΀+ R褋,ig[$1y/^=|R?$Zß ,߱bc?l,{MM福O`YvqN7RyR/sAx'IxE`g.t $ _M`fX1ܶ4g)m0g QX;cb<&<, yFS `!(:S`Aΐn(wg&$d83n ӧwL/M)HHȀ)eVkF:  ,V%B e1iwZ<@Q[-Ph l;i܀A&6Ɯ3!{woɏKI>kI#}3#{JMy@}Ec(6Mΰ•Z9#O~Xk5u$kָ8 1nS'vt\Ɨ_agJҽi*ds%~Diw1/ ZǺL]mCJքşV%"΀2\#FGͯRmSKd-;$,/qXT?&\Bd sj^$CW e:SkMK3&|yE0aWCcEOPP\O𫟤_wmW-ljR'd6JkQ L.m)l.i-MoT(FTX, tR,}b_$Xğ9? e(C쳺.+iSH^x))]VCJck)6hn/Mw29^܁!rKJ.5ę䧶q?ӷB UU{˼e2+q֯o[~Ku릣2"Vgi] ׶~:78FU~PFS63 fѿ쿩Iⶓu+cڑ ЂspU3Z@qƶF?h0@xb=ۢ/^ zL,H4mh+Qv-A~ڵ ǟ&s/tG؆`o۴MչP5Iv1G5GnyWL*#T.s|3kxƕz <*cJpoXeʭ,{?T5lE-y^4ƽA_TwFX_O9]N-Ŏ4%(QngƚޝΝ;t%()ɇ@cN^`rؾEUO}{bZMI NPg_Yױ΄lj;`爞t<ti͛?'V>gcjp1bzы֭t3Xi78w&.Uº@LzhAQT oM Dkyf0E5xǗrƐ^v3]J^ME/{8+32t1t#ԥu vimZ>NkrQm}V]Cdhb h张T!&9|R\^ښ141&=5g֥=+^)&h\ q$=) 'f6&$6fͅyyf&&%%Zϳ|{ZJJw[rohb)"@n4uяZu))(˱TZ{{ {ߩo&p/эTCź޲de'm/j8Ŀʿ^(֜G\u՘G3s5HEkQQ (xp{,CE7K5T3JXVcՌ"PG>Q3*/f?uئ.pܕ@QkH>ZfKՒEV۲$K[8 'g#`R,Mf38䐓в(8(Nwd&&cH}{֌ێ đA.m˥="TҴ4SS`.kq،QaHA,C5j=}>[&l긩 ^L.ȅ=6|&"koNPCԼN^[vGMTtrlfQW`Dkk@Z4J'a sltNQ^SSiȕVZ5+P*TVK: cymqeA񹘑mJ ˖^v ʞ.{w'q!?p\mr봬Q6Zۤb!-kRLHxa'$#\+]gP[W¶qӊ:O3$:윬,KXgIIg劣ט7ZHTEJؗ sb])DEEPYO abyJ#Z*sAzf{)sV&5\vRmG΅f2m1(R) 6V3y {|5I*rlYFNed3)S -ΐhBleWY&s\Oo28N-喤y )#p*\7lQVʴFK -TQ: @f{a}'O/)UɕϝkU赘qQp@8lWv%@K3zȊАdHoU@x)1/ܰ4Mhq\F8>ˉsL؇= O)M&Q JB_v4;} >u>P+t=.hG 6;! řpzCf.4  -H y:腵(J!uzUxUޑKtazMfcC]ҬV3ge@8&8oC| jVp O9sZLd4Ut\;FZjR-nc#J]Yfܼm\*k %e|V Wg^[wx|iJ|QWRKM[VTdd(]Mzfv)YL& Ox'#.P ])fT0ә޺r ay׊Z\'=*!41ƇM<! W2m'$%m??QMlٱ8GɷehrT~AECذ`l|F],k.XDw-Wx{< " N'Z]%ܫa51E^o-w{51<1o55c9-B|Ql!g=Ă$=~(1I?`vy{hOa#vL&K x}x_8 {Xxb?@`/>$@MYXU2wZ `&g&-*3*FL]W7ϱ`r+}}ᢰ&އeK81Τ=AKn8%g;K/- ~Vv"ނbw.^>&8n'I+QB0O:,oE^[3ntALFM״?̑C7Tfҩz}ezMۘ=cqQӇtX׬vYW">a7w\†qqC'dG)m(V;V6%BލWv5͏%"V!?<;MLn\&7uHӓ_Z6-8Ե7,\plg~w]1s7lh϶mLG^ܯfg:MB+t3W|D\'TOΠT fu`vEjnEjGӷo{t6ܡQaM+X 1q_zHIҿl"was"ܹ3]IN"nؼ0nO}p(A<&b@2eN:FV^0ygWg`Py1?խ6u97֡N,X3ueEμQc2h=~%c=<J^Y|wvv N1A';|\ O+˸:YuŒ*OtTlճy={ݛ~(u0Pk$O=zRsn1c&#"`dZ:\Z0-|Jچ]QA1Ix4's"Eb.CR/wK8}Rp;gԮZ1cBAx; qPOS A[2R@J}e)h WV;5 o]Tuܯ1UU'{<qX=pQ73;+#/, '(6.P P `Qs7_ẍ́qkw 6\ƞ;^rfq]Wjgg{2JAs=RT#{v > <~ΊR1b>P<1O?aOM9'1.E~Rnӧf#߂= z [ Kia:T4>>FtPޑnڦ➀FF 01BVS`/r:ct&5v??^ƿa|ç譌4Ms5!P`#Rl,E%Ow " 7"9Fl$Z#+[a{|rG[W7.7騗TJKl]ђ[ʦvCY+,f|튗Ͼ5<գspܼl+SQ)Ôw}3ٳׯi uqnFu_kNNk_5|?sZ& >5;?I%_z,=Ĝ}t.GDA($XdI*儔] )eUpsaFkF-w3ҁvďg\r:?$Sg%f:r{Fmvy;̄oWJX!+&Mv|1("yǼ!5;PNN(h&*t|gkMht=eRs\8|b*PSpߦ-GW:%:=VeqKA+堭AߧA:QlI?ʉ؈/6<1bFy_׿0V^:qg&\> ӂ>I=-cs)Ara⎑Ia/N}ꇌed.w@*slVlW(vo2mlX Η,ܯ~hsKE 2m2 ˘t# eM-URRtHQ=|gP/qx>m[ PTym1]FeĭV! Ua}*ZcDBlTGǒ|lyG=kU0x"aghHX#~# ,0뉰EKx#8Ir O0]ԩӻ-i4hzo"利>'f,_YU*x ~vǣ'`R`>޿;B]w#H> 5XHLU9Q_WWRA>&XknDDQJIF0/ lୄ g.qzoBfJ\!D4%CaA|b+BQ1$ZRʺŔէ$LrOnc$7ຯoNǍ nSF Sߤ:w1~ڍa8qFwn1"M(/0zAy>~ ?&K!p"k987LTŘ9!2 8^dZ7g_=<եb_Zt4_Jh2G#}؎7#N05OG25W-i.O2)I#)"ChB4OA4~Vُ  +tygNBhV Ck1ڠl#aaEmv}qlM8-WuO>0Vin޳"~ܣ\LǶsʬo3Vk0>un9v"rR_<y@J  xc`d``/ko"Ȁ<xݚytEǿ]D@@P,$$, / Hd9 3* :#o(T<( :.7# ˸̘W7\B3?=s~UUu~F }2?wPvF8*=ZJL>{C<-.B%)qw,7&pdq.i]\t5leU${qm _&n?8EځNηBF*E{d:/#3!La|6Pj..H Ab~$#b $H:4wR<|a?0˘uo;|}MHn(oFo%ƣ=$"]=Ⱦۆn'IwQCwj0g:8.BYj2-HwvRt]u /gHv#dlOQx l-nyKWGs3-FpW^.yW2.i9( W2Ç&ԕe`8 n #.{F+(yjo>$͹ ԝ'sP]]ȇ>~x. o }eFqb[@Mh#S%;ߣ:Qv̵`}o(Y䓫jiHZ;e]9a lbrN`  qi#Mpy+qws,,2ڈN Lw7"׻c2-}?=rJdI I#_mF+ 9/~rlLe|NjPrR@2EdJrq,V [-c@+T)j$Xg YJI :25R0҇$ $$ "T*D75x7H [5soquP 2 ¯} ,JUw!9q[b,[Hfᡀ2;"幤sm#OM5|NU"IO_?VuܥL7zOɬ3eV?(T Nb6E$nRv Ocv%:Y~*Ⱥ%QSOZM)XbebM&Ly8~b2k|%ӎO1o&׍SxvwP\1ҾExoA=)o&s9nLXopM]@Wt_7܅h^+Qu@ur <̱5SOL XRW`bc4@ךLG_w4mYXՋy~ twJqNy1mf}rQ-ϯ< Se@j~uD;2ض*k>ƪǮ;ElR֓esY.wEzvnFg J'T 1vQM+Q徝dyeD/?G>u6L]6ewrlewA?V9ߧݳ6aEִC1(TA, ro JhwH푈IOֈq9v i+~g3_C-D[>jo?מ '>`ڞΛlzؾkV\D{g5!h͹ \O&p]e-icJ_巚X).t*=#h4:&cr\kB1ӛr}s#ނN>;HeN'hi:4̓OK5.]3scH}5.qL Ʃ8W[r7W_?a>җNzY$;Xo,:39] ;A/:e2s=G?iXR-X{9Z=miw":Y*b ~Vov)Ywc4ƹ܍~Wy>׊hW_r/X AY>m֯L-qBΣSۘswr՜bQf xnSycWk+Lʹǿ~<^#2qDxmw#P.ڸPb>߃[pugGvsIJY'e-[I7޽ 6wڏ.P҆a?Cs ' Z/^W)w9&RbKr~,66Me! i-J=؆s &sG5 7~P|?Y&m'5.퉎ޥ?|L=u-m &Mo\Ei\` m%qFAڌs^#WCbG_zyw'o;Q2zkֲ@curo܏>#{O$=notsAiފ o-ZU_^w _pt343gL~vXq}~ҝ>] c{>׳?["k}dr>4 bx<{u;1wb"…csi' >亿;)8=N&$[8-v:ep;*{ӾM~"2`X6#L{gF)3{:0o0cE~w4'%d:"!=9 U?jgM]\I'[.R'$~XgKr }F$Hl/=MļIz#%Q{ߓ Mze?D{+w}7iĠ]C!Am6{8QQ}P/hWݜFXbK0Ju`ߨڕbu}0{zP篧}C {Zs=}l8KhC!_HWw>,{ǭiyjpF'edy G歼cΏ&[+96?:;XMdD~\ӸOdn6^^]#k.gq~N P|ju&feHZgggY0vǯOp.ٜ_!8|ם[s^X? |!h4#ݸ紌3@Jo0{Ǩfp6[J}f+gSO |)D>@ԹDC9hQ=?B/>9|P,9sy!\9җiܷٚ91liq^9s{_ Π%x;&S"}y^?܎*VҬ'+3YcAc#53֌^A?&nb(Ŝ?riOُͥuM}͙;_-H@rV֤D3d GA9{$ɧFɭ hOM;GtjA02=jS.OyLϣ<gQ)π(ji'iG0 ;ubCd\ժƶ缣JcgOͣ#kHN$Vm`#G~`NEq:v4}G?7Նې0_JyHvʝ![6w•hX~D#wy.qui *cV+̣ߪ66c8jqR1bbZ{3*^l#7#jgϭQ[}r2!J&PfZ.ҷE ̀_(u 2Cz_!-]T-|pȟQuȽzrn(C5==-luڗrn}y:1=9)7|? V#f'e2iD)[g׆d_y1N4! uyWT7֟MgG>D4gШzg;Vdyy}L|2FWGA;#yO$BP vħ^!}no2u]sT\9N|z\|WhU?$Cvz]٨MkkQpn>B31k!/FSq y|@d1a.n_j7c} %&_N;G;Rѫ#>3%+*)gcv:b)g[^yо WXr/E ~4 Eu\x|7=5K,4:|7Y/7060Fgt)Q !]mا]p;?O ju~3|M1ųoʐ WaXoVO_- _KXCe L 1>[lYϐo^44mD\,>[gJ|O:+xo 5HŔLw{7?_^w:k;:!cvwΥ=v? H58'%1~g0~kOIM|ޢޢ8&>oȽ]m>a5㿶;, 6W3>j2;vD}k(;0\,vBݟ+놱HU˱|mmYTE"#rlBz Yp2"wk!9PX#Y_$N| AmW"_euvcO'JAQD 8Qe|1F=G/s2@UUW8 hf|AB߈no^_7u'Bu[~P͛{oCF>g՜as,%4 _Mx$y\e,i^}4ㆷHFْ r,̀05YШUewm7.3븍=wBpPƭ06"8I3?y]u~~WNERT+/J.ʲn ɁFZ[ﳾwZ_ <+3x9eU~j QY<89085,zve_ɕu|J凁/t"9^֟V9i"p)pV\e lx>/7404*+Wuoˮl ~(ʗ<+e`)fc%Wb &UĊća|q} ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰Μ'Ip>'y'y'y_'uZ'uZ'uZ'uZ'uZ'qzO.pMysO <7U'^uje+ng^흎ߥl/ LoveFq̣H`;^ղNeΜ }ʍV_׳n?r|8'=/:9j7* HGUUQUpċUz^ō:܄ x&P7(0w\_X:߈ 7{lv|7ߋc&8 搓W?ѷx;[x~ww{xދ?<9 :fQNjǜ_GoS#l$$ 4" FI1#&},0Yfy,0q)4~ţkOuތ୸9b*GL利1w#n܍s7bF8|GzoGvoGvoGyuعk<_?9p-?%\<[߀W\R=x3!zHHE^:$s\!29-(:hϹ:qxnHhHpT T +::h|?ǟkOuތ୸ jFĻjCGލ{Ȼ85CxPgBG>C0Hǰ;8rxE<'8*2"-e<2*2kMx߂[6|;nmߍtƪoYr/sKȽC!O³BD.R䉱gsGpuH32rKd1cL1 ,qUaxf\?rf%2TzdX`ίb &/ !^Gn zb9XX:6-lc޵U}kU_ZתVU}kU_ZתVU}kU_gWn|m n8ʿ^Ux5^Wmܕ/sYyf=Ϭ;7Gxw8>V_}"=CՁeQ\Ycv'<~<^Q9D@b˭֊' D"d+]'Vlr񭁯w_1?=xwQ問'?y;=iGBb<긲jOW]9+'K/r+1sx'&dx&D_8ST[;6?O2< Op<\m8W WFYf"2h^9\g8W&q/~=|$2\sȡo ʁsB7x~;U5WG.+ȕ/gm?߳xu9wzַ<__ <x@??* eW ޿++GOrg CV%pl`0pb gprY8lSകKg \s'܁2ZӬ'~5trh6&nh6&nh6&nh6&nh6Y_MF1~o`h6&nh6&n+7M|+7M|+7M|+7M|+7M|+7M|+7M|+7*G. `._S7 xNv+7daW_xQg]휫ssvι9W<|x.o;p'^w*WD&/ۍ]֎]6xβsV>t,}xo89!]%. !|5(>VUpr\+1篺3̱Ŀ75x-5 7[p ߆oǭ =^~[58| ~(rp|<ybn+w^QֲWrs+? +lsqz,?-pex+|O3%9Sp xUw8ށ;zg?'2~gٕ{> lW !%{ssò+|,2~'M{>/ Xu7Y~ ??=3?/? o[qxoǫ wc|?_}K\@ |ća=ǰ; WJ"cxeT$~'x ^o܂oŷq+nn|7|sKOȡ>p|nO".Eo,[۟x.ow܉sqv\?[y ?o ~?G1?o-C0CXcE]%(Gm .okZ|^oƷ|+ ߎ[qnw{%"WD.R䉱oS.bG,~%2~,~b9XX:6-lc'p;UߩNwST};UߩNwST};UߩNw?G~9rvU+_8*Y?kgoj-۽e/gEom-;Ga8,~Y6mը^ը^ը^ը^ը^ը^ը^ը^ը^ը^XD5p$2~`X`؊ߑoG+~G"pKdD`)fc%:5c6v'ί\?qZ?qL1 ,)t;N)t;N'#β'["' a8*ְ lb `[ٸ˿_Uz\ǃXw_9 ߁;p'x=9tF|GCgKp-_gx:\||9^E |%^K|mF|nK |{V| wN|w{8URCc8j`[N$N4,<ހCw9CƏQ~oO'Si ~?/?Ke ~5?;|/>-O |>ʳxÁqS |SqI_/O:k~|1p]['oY븾|W7G9u;|_x%ˏYc|xE?8_,W V+8+_x^z|k.2Ǘ{fL ++W>'o~7θ>x?s-ǫ6/%~x0 {8- =? 'SہO ?<_ӏ7ϴ,|6|Kqu󬟊#!O_/ ׼?~rb\?14]c{suő33!|ؙq>댟Y3'ϬuaG{Y.zVt~n?cX:Oxx?n?\n}gց'xt(Z:0:s?gYFgYFgY^1:szu3ϬwuO?ϬG폟YKϬ;?OU:gցwϬcnރ#y??RT<(8pY9G? Eb\ރb̽!uC.]~g3;yΠ׫O|ݩwg+g܋ߌv|tG]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ7>O=9>>iYl<>qt?>ʩ8m_//Ӽ+?Ca=x5A|G;|_?pUΉ<ē'c<ē'Ox q% >+чqx|nC80|PHwȟ`tṕFFC]a%+3+CWqWPՊFOGV~MC{Y;/7003YɁSo]ш /7404*+Wuor+_ <+rS0K!'ul`[Nd՚!|;|3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3#x~`x?003̱G_ֱMla;]G"}S0'iO:5w &b9XX:6-lc'XX=XXرS0Ku~kX6m ;=oHd`X`    ?  ?_9? a8_!?ul`[Nd>c[>'֙:sXga93u֙:sXga93u֙:sXga93u֙:sXga93u֙:sXga93u֙:sXga93uљ#:sDg93Gtљ#:sDg93Gtљ#:sDg93Gtљ#:sDg93Gtљ#:sDg93Gtљ#:sDg93Guՙ:sTgQ93Guՙ:sTgQ93Guՙ:sTgQ93Guՙ:sTgQ93Guՙ:sTgQ93Guՙ:sTgQYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%93tәc:sLg193tәc:sLg193tәc:sLg193tәc:sLg193tәc:sLg193tәc:sLg ۿx0#/z0_=xG=ۣgGW\9998s=zG=ףy<_ ~A+wߊ w+20t?C39_u~A|Fߊ |,2]@T'Vd \ǫx 7p^7efL Bݬqq`JK|#^_&Z[ߊo÷V܆|/rl1l`[I[+2A}+2p?; މ»{^7>?.Q\ĥ[c7ouKx̙?EߊL$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" vy^^y5/?L_O ux+CawyaǏ:s/_ٸsKe_ůG\ĥ0k<^u^|U*| wN|W / |hmC/2<ٱ9V0W/Z{Іˇηrs/Yy^UV.Wkkco6gn뭼!vu2+ |}Cc86mNN ~~?5{0~oďx~?Og9<~_/W'?txs6H)Ԑ~AOp3VƓg6o>7kks6H󬜊#֟"|1i9~$p$n |ć7>j GqR1m?qq6H@;9~$px  xim7X垵ӨE6mq6H7N+O/m {4m |· x0oލ{^7o~'\mjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J 6q+pMphŹ3%9Sp xUs;p'^w878qnp4\GrFF/ό8poo8p|4h7E_ k4ZWMV>OO 5':~o[V܇_ èIhŹeWs9o_ |#^:|3[mv܊p;߃as%\[sGq"o V9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9K:܄ x&UMPUMPUMPUMPUMPUMPUMPUMPUMPUMPUMPUMP5݌WU1l`[I8wUsW5wUsW5wUsW5wUsW5wUsW5wUsW5w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5ίq~k_85k_:u_:nm q.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.QߣGuR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)u)n^n^n^n^n^n^n^Wr(U~Z௭<c_[x_/[*~=r".7 o_«w.܍;]Cg+_exV}9p]M`ov7t^"ǯWzW9_ =ڈebb?18ބO,~?_/je(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSaҰ{iؽ4^v/ KaҰ{iؽ4^v) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiؓ4I$ {=IÞaOҰ'iؓ4I$ {=IÞaOҰ'iؓ4I$ {=IÞaOҰ'i؍4Fv# Hna7Ұi؇4C! }H&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Moq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[e/Ӗ)mSrNi˝Җ;-wJ[)m j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j69mos~ۜ69mos~ۜ69mos~ۜ69mos~ۜ69mos~;w8p~;wqngDtLDDt*_u8NGttLGttLGgٻ9F1NJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJߚ5k:t阣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣91M1M1ML2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRve(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);K9Qv󰗞};G9ws};G9ws};G9ws};G9ws};G9ws};G9ws};G9ws};G9ws};G9ws};G9w󔝧O}S}Tߧ>O}S}Tߧ>O}S_ :pWOЁ a8*ְ lb MTMTMTMTMTMTMTMTMTMTMU]U]U]U]U]U]U]U]U]U]U# a8*ְ lb kPT?~@PT?~@PT?ߡߡߡߡߡߡѝ}u|2Զn KwS IzBzmFne/mْݖVQʒ --і|̖]"ib[Nl밤n"A=8,>yS3JJJJJJJJJчC!}>DчC!}>DчC!0}>LӇa0}>LӇa0}>Logϔt6[e[kl}#~F5gԈQ#~F5gԈQ#~F5gԈQ#~F5gԈQ#~F5gԈQ#~FGQ(}>JGQ(}>JGQ(}>Fc1}>Fc1}>Fq8}>Nq8}>Nq8}>NCCCCCCCCCCCCCCCCCCCCCO' }>AO' }>AO' $}>IO'I$}>IO'I$}>IOҧS)}>EOѧS)}>EOѧS)}>MOӧi4}>MOӧi4}>MOӧ }>Cg3 }>Cg3 }>CgY,}>KgY,}>KgY,}>Gs9}>Gs9}>Gy<}>Oy<}>Oy<}>O_/ }@_/ }@_/ "}H_/E"}H_/E"}H_/җK%}D_/їK%}D_/їK%}L_/ӗe2}L_/ӗe2}L_/ӗ }B_W+ }B_W+ }B_WU*}J_WU*}J_WU*}F_k5}F_k5}F_u:}N_u:}N_u:}Nߠo7 }Aߠo7 }Aߠo7 &}Iߤo7M&}Iߤo7M&}Iߤoҷ[-}Eߢoѷ[-}Eߢoѷ[-}{ٶ;t6mu>؞mUf][e[klv*UhʽoٟOK1ϧ[e[kl}')}>n;Novz;Novz;NoӟKw}(R=lS=<ճ=lklqn_OڧlzAw;zAw;zAw;Nz'Iw;Nz'Iw;NzEwѻ].zEwѻ].zEwѻnz7Mwӻnz7Mwӻnz7C{=zC{=zC{=^z/K{^z/K{^z/K}>zG}>zG}>z=ݓItS+*{Z[g}Ջ^t]EW/zeW]]vueW]]vueWW\]quWW\]quWW\]uuUWW]]uuUWW]]u5jՐ!WC\ r5ꚫkꚫkꚫ\%W/zK^r\ v5jհaWî] 꺫뮮꺫뮮ꆫnꆫnꆫ]eW/zˮ^v]Wz+^qW\ꦫnꦫnꦫ[nꖫ[nꖫ[n궫ۮn궫ۮnq5jՈW#F\q5jըQWF]u5j՘1Wc\s5jոqW]w5jո W&\Mp5jՄ W&]Mt5jդIWOn`ٟN5t_s\5Wzk^s]uWz^w7\ Wozp7\uu]Ww]uu]Ww]u7]MWoz՛tfvtߞvg~ۛ{G~[pt>ޖ{2ݷ۟Ow};ݟ}$ݟޕ|3ݹ9PtvOs{>+O?w>b?c ڱbW]~nڭ;dhaGFtc~%|zO {՛__g\mtܞ;w|ݕY;bg~7w~!RkN[O=?]^a[ro[H^>}~Ct_DwZɞ/ L[f]޼g# _=~%[ʮe/>y޴m;}t3 ?L{?H/N}Oc/Qu~;j}RvfɧlZY׻~mkUo/ײw߲vϯ/>ߩ~";;;;;;;;;;;;;;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;Jt?eM[N;ӯ>߳z~߾mlmzڇr}m6oVö:[o %}>mϦ;֯ռZޏ|~W|~/|6'ӝ{oy?Rޣs6#t߻m:mݼ'}nwl{!]O}m?}H={oOh죹A!?c?k?;>h>9n&;ξg{_{vg_埳w~#5uO?ߴn+-mya_ۿ/^Cv^w߰/Wm;{Fw석SvY;g]~w/j{n\OgͳSmkl=j=iO{ڞgm=g&l/؋Ŷ6\۞i^g/eZv}޵of{_{)TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QS$¼GsOùGe-Ź-6.緍Jw"tk3w>m.trJwj?j+v5WZ0u+KwV{~7w|+mcc}vNelm}ٿ9o#5uO?ߴn+-mtu#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG:\G/s5toꦫnꦫ?Q<xy>y􉔒u .!"ؕɒ%g]"F6alcɞ-eIEY}~?u<}L_"DZA!JC-q'S$EX.AFKA1PtjB^Jr<:L Ǣő "7>{D&Q[f֤ xޓbwdsmNd+r:U.rÏ)O ~ߧλ5 g?׳_<@V1S!RH<"AP=ACa8ATHi؁ (o y%[RR8~8@ m^eѫ ʎrU}yXi)OKy+1*]~AP+Ϋ8bUͥz xqrq 6h5¹/\[zP*:>u~n&uեza^or50W5Rh|4V?ZǨ~U3XX88ǫqޫq{>nx9aLDh֓dfbrإ)1)|bS ib:ds~N~a3,,x<9ڇͣy}HQ{_ )S1=__5Ep]vEr=x"|c~xXfN,Ky4.RRP>rS}H1T3I5T=9_fYr+JWѷ Ux24:hKKiVfYckg 5]XKZ:S-?d٠nTQߍ4ls/6m3ʹnc [yVQ~ pL1y~Lqq|W:>t?9 N)NzJ)3~N 3ޑdz>]9^{O=;`_?|%;sɎi'/oj.e_1?ʧkz\S{vOnLοTsomޡ.̻>g WPE823l Bň#A?Ab|XOB|fZ#.#УbGzg%Arb_zB''3 XPBMrF׹f"G蕧8ϧqΛW|yL%AB)=yz D܂sPA0QΊZdX*Xiq>iARxҷzBerE9gp(ǷǷBЧ"V©TBsU^T]Njj_~uE_T_4Eéi.5t_K%k{^ΗA>bfuCk_suikpgoj!.̾^M5QC_ 145UfjPnK֒w̠VDkN F2϶S[Җ >Վ/ഷW :؍|ȋvޑwN; :{E.ttߕxtŧ+| usޣPw<{]^zCO@/7{>P_\8xqIA(,KS"S={);$:;X[)wRh ğ?C<b.~'29T0=4 p#hHG4~sr1>azq1o,cg8qx3@; r'|^OD5$&=I4LkON=; n9fSN?SN5 ipۓO?W$۱vq_>w B3LϾKسEl_fs|?Qw_W^qMk_uNu~7:n ܀ސwCݐtLw9~׳t ~h{_{';,H! -DS!^.Ч0 \zGɍw>QxS|򭨾`_gq3)̒/ɗrJRg)ZKgi>@K9}<WSaEŤJfY*˫ UyQ.T[^E &Լ䬶}"^}VuՅUԃQϜ7:7]v6y5r^7Ʊ&kwv{V1%5^5>a4wlg ZfKZk)}ii-kIGK>^؁6jڸo#M:-߂m ~}k˧V/&yXW,by[~n}lo{kϓ|o/=i`nsͦ#:y; N8t] . م]]pgW t3v=^=̧Q/Z{Lzk/9xЛ8Y}x}}˧UGqxG8<#x<#xi!$cYmN]`N .D:hHq"މfh|"~t~p_zW_cGhhFCz}2Xknhc?Ox~硿k O_aD9qhg&˜cIv5IM= 4Meߧm< iݜt 3N^%뙌G$M^%7 3ΐ 3̐3C ޵/4L\fzfŸILZ/,=flme^x0ll-g6f1[lgts3lg o\˻ϵsi y>?pޅ{|/v۹jwݭvzg>?pڣ8{쁳8{|ҶNU^{W^o}o}oGx?Ļx~O O7ߜ~^~soy97|s>;AzЮ4fA?h;!wH80·q>̃<880q8>>wDj?kϏz~|x_pc8cޫޫW3=|? NwRII4rO=%SrO=)O|ovovwi 4^gYYoffw><9xw9x:yg_0 /z֋fuQϋz^E>A|ì?>Oſ`/|o^6˼l6\6fs\ Wp\+0tp/_U_U_~\U{ͳkkv k4]u5\:7 =ӽ 4ӐNC:&oڛjo-rK[mܦ6鿭;j悔|zֻ]s{{qO$b(8e)r[{gO{R]6>f3lyҖG_9><<}^S UG\4H="_$"yKA9ak4xĩPBWl m! *G!< m!= +l+,0^av^y(QE{(p=J^^D"zѣ"8?EySNQ8ESNQ8E.*b8Sb9/漘΋Q?Ͱ/ g%pVKoJSF ޔMIJS7%bIXҎX)*eJٱR2Rv+e̼(mJ۱v*.,|p{2 nep+[V2 neq+˧ʚGYSeas^y9圗o<;+Ͽ<.pg<+Y WpEgETw2Εse+X*¿*\UQUOUU}GUjps5sjWwX5^jUtt0fQ,ja5wzG1h#Zh߁5}Wħw&̚<)9E-9`ҳOj~OFm׵=al؛WbUΫW_u̥muC_1`Ɵ< j_p_#]u]׺Y=s=3x7 뫭>إ%>-hs+SNviy{u:n@OGyt4wxD[gyt] ]pʋux{>p{' =y{E[/s>}Q{lc_~S8wOwO I3,&S f`y>}?8}7]:$yI'gϒ9l P`wxW?oil8)+-(ҲŊ!AdnRdnwnwٝ쭏]|t)\Ho>H"yݻLRu~ݑ1A,y6S(؟ߣ;f&|Fy}4PQfΆ1G>y?`m*%d2؆DilkOQ~.{(olwb{M8]_o![ls?۬9_w~lQ~=r`탿ECv t!KEIs)JJ|~rxضm5)%)y|_I'\f<.Jw'›݄OT*+WMI}!UЎ Ki2'>KK҉g} %)d=9ţ!b1_Qr<%.D0OOOJg{E9."n-Mp Lu+lf҂Sե>-| * ]˙H%RϤSyX*ݔ%`eȥK[a։v8خ^B,/%w]t *W@.<@q*5 @uQH+fZ^U92Vy0~•0θ_7-F %MM"%LZE sU Tޭ[kas(ש+IpN_[S ^ CsTѦM9WsIgZz/҅F)ay!liEh9"3Oȫ`NKy6撗sdD@Ax wH(@%~6M^ ƙO|f6--i%4,КI/vDjϤQPZ88o I}c%"@^L"M*'QAxV r=+*1glkG!.L,S}N+Mu6`YSid zÚt顭',m( R[m6-#9.+1\ u1MGY_IgHa#t'"~Gu;%$nFXwi 9U4PԔwQ S@Mv%c7*7Ma)re'Aq+zZ MR ^Yv"=S ºJ:w}qQK?k,\VV~]Sf}^9e{|oU"u{leN#_)WMbEfSQo$U%_at+5[9?lq0wS9X _'<1mo~NooAgssssssssssssssWB/b/R/rռUUռս55^Wx7[[[[mmmmmmmmmv:qxoM&y^M~o7 zCް7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;߻лȻػĻԻ̻ܻ»һʻڻƻֻλ޻ѻɻٻŻջͻݻûӻ˻ۻǻ׻ϻ{{{{{{{{{{{ʹ{{{{{{{{{{{{{{{{{{{{{8%!F8'(d$Ef"3YȬd62;I"syȼd>2?Y,H" EȢd18Y,I"KeȲd9O$CdB]ndwٓE&}~dr9D&Capr9E&ǐcqxr9DN&Sitr9E&sy|r\D.&Kerr\E&אkuzrDn&[mvrE&{}~y&Ogs|E&ߐow{D~&_owE&PԣR(TRE:Ltf: Fgs9\tn:G Bta].FK%Rti ].G+JBCј&4it*]Nנk:m&-Ztm:CץtCݘnB71tsݒnEmvt{:@;8:N]t"Di ݑD{dG3t]T+ݍN{ҽt/ݏO҃z(=NGңz,=OO'ғz*=NϠgҳz.=O/ҋz)^NWҫz-^Oo7қz+Nwһz/O҇(}ЙǙ  $}>M"}L_ &}Mߡ!~L? %~M#L'Mas1dlFl6+`sl6/` l([-Ζ`Kl,[-V`+X,b1KX2**lU[du`M Vl4[c ؆l#1ۄm6ccl %ۊmͶa۲l,ہuqll_۟d!Pv;dG1Xv;Nd')Tv;dg9\v;].d%Rv]dW5Zvnd7-Vvdw=^v=d#Q{=dO3Y{^d/+U{do;]{}>d'S}d_7[~d?/Wd?epN9 s>3,|V>s<|^>/ "|Q_/K2|Y_W+ ycgw|=|GyS|!>wS|7;߃{}|???C0~8?ɏGc8~_/K2~9_ɯWk:~=o7[6~;w{>~??G18?ɟOg9<_/W5:ow=>?O39ɿ_o;=?_7;#\ "` !|!!FQb&1E*f9Ĝb.1G+Ăb!XD,*%Ēb)XF,+ˋĊb%QD,L*jbeXU&Vk5E]4DStBb--bHl,6Bl)[mĶb;+vb/&.1QLݢG(vbbY A*1jgx*vbO[#@q8X"Hq8Z#lj Dq8Y"NLq8[#BqX\".JqG\#׉ FqY"nN yT<.{}~xP<$GcqxR<%ψgsyxQ$^WkuxS%w{ί}P|$>OgsR|%߈ow{Q$~_owS%O}3}+?G#QL,l\<|B"bR2r J~ȏO_Wv&kku7gkI~_?____ooooooooow;qxO'~O~?C?????????yyy?OOOOOOOO///////s/woooooooot>svtzN???????????????:G'gW7gt'I.Jr)Gər9M.sʹr9O/p~ ʅr\L..Kʥr\N./W+ʕdE2Ld*3˪3 9Ț3U,Wr ˆlYR%ז:r]\_n 7ɍ&rS#7[-VrkVn'cS]%'I[Nn^ΞWN}_N;9(ENrK-yyH^,/ yJ^-yI,oyK-|H>, |J>-qqvu|I,_ |K-ߑH~,? J~-ΗvI,K-q>Qr)TJjFj5MͮPsj5OͯP jZL-pQKjZN-VP+TE*RJT2*jUZ]TuPMա UjZGS Ԇj#Dm6Scj JmQ۪jAuqjD5IuIɪO)jg5ՐVjW]T{>j__T!Pu:\TG1Xu:^NT')Tu:]Tg9\u:_].T%Ru\]TW5Zu^ݠnT7-Vu]ݡTw=^u_=T#Qz\=TO3Yz^^T/+Uz]To;]z_}>T'S\}T_7[^~T?/W]T?,@*`T0S0s0K0k0[0{0G0g0W0w0O0o0_0@`PpHhXxDdTtLl\|BbRP ԂUUՂՃ55zAGPeVv0:X'X7X/X? 0(8$4,lllllllll v:q`BL &AOcSL`Js0 CpK055-=#3+;'7/?8 808(888$848,8<8"828*8:8&868.8>8!818)898%858-8=8#838+8;8'878/8? 0(8$4,<"2*:&6.>!1)9%5-=#3+;'7/?x x0x(x8x$x4x,xx!x1x)x9xE TZDR_NhC19GIt3~ *wJ"EO08-09$t,&N?R]d*.tD)ka?s]h\T5JUT5JUT5JU_W5FjZm5]{O۵+# +(G4ioBx۞֜ .B7囘OtՐ~뢪VWXWC]D4ZID.2]hD'=zC=ۡ0H3٨A#)HFҳf)HzC=a5zC=a乙8zj'wlMIn+ kkM7_:'OlUKf]C|&tz[xM{&M$u{5;kզc0dt3lBWP2Ӛw{+igCݨW={MMo۵BQ~6 rSdsX #Su8"[ic&Z9kkg<$ 6Uf9`hJ 6>'hbN:ڍnzQUЏ 26 L xBްk3p 6;N=^xu:7@6R@5@hl׋ `خ%aўި%5t !3*歊~W{VgU`|CFЅQbo`ݛvu&淽a{}Z`kdZfZfz#dz#dZfU]vOeaeaea5R9@G9H1)  (Sqk( t2@' <̶nq`D0"jYPr?Gs?tsA<ADUе=AEADT]Ȥ2)^W"Ȩ2* BVEUX@+.\@,daoFmd[1>~aF}Q ;*&)`Vku`B A/B A/B A/Bk˚,A?#Џ@?#Џ@?t#Ѝ@7t#ЍA7tcЍA7tcЍA7ƸcЏA?cЏA?O@7tCguh'ESLN Km;_eh7x39堗c~rQ?G9گ{ SCя:W:WZؤS{,@X%*5@si2,jJ'Ig8J[9^IOr@} $6N`% zM= I&D#'XvIJ)tҶk0u& C'@R!z=Oj,uđ:N:" c_$M+/ib&歉ykb} /.J$`Τļŀ)`XlvA4D^9-'vnxޞNguT ]G9^Xeе0i@9϶B9o`ۊlTxmZߛuX|/l:0 ƈvT`T* v*=`wT`UꚊpnl87:j-]\10h`Ws8-bW32sO{욣~#{bec5 ~Pq6ͽ@N0MTh-MsSVMXj X )V6K25efJm a>¾E--ozi g3 G!3J 3J 3J 3Bf8 q2(dQȌMG!3Bfd~fd~f8 q2(d"όG!3Bf8 qMsûqMsrf5nNͮʍk47in\ܘE1rrc,ʍY(7fQn̢ܘE1rc, _冯rWUn*7| _冯rWUn*7| _冯rWUn*7| _冯rWUn*7| _冯rWUn*7|D8H 0{MˌֻߐQQp>n7!ʮl|H d,I2&ɦ˞$.tH>ͼO;ImI+NN;i4]t&NN;)o3ӵv %#w?MT+ш1Wj <fff"6FvJlORMh&uںfmi߶FOӬ+Yei>4#V4w[_ED?֗YE9 ##ghyoyݼVI`uL9=9Vc0aضqmcdze 6iSbd-+ڔ0ԦS"}DDY@@ZEYA ie0ǿ%KU8{A m ,A,r{o#DVN8&T )kߑ R.DJdn<3zѭ_Rf#FnϡqtYF$vH *TZRJ Zxo4Ko::ݷ,p˰ZsʔN O8 ?#@S[t+Bͪ0x ӂax*o`( f`$6ׂR ޮ !V}C#7nɽC=Jta]ҵ=+"u&qoT1ܔAF#;0= x};ھ$+V&,mFl89ml~Y:b\=&o^MfX2 TEjci75g#{ Y DT DR DP7ޓ(:vHme A|lwi1`1mˌ/V2:iH 0"#DP3)sEn1o9zy0E{>}reXkwj4{0#TEɷ2[ͰH1f:MjOKkCa )e .EL,\ Է)Fom.ŷ55Z":m9m7hr !,;X g@`EG`a' d",,l~}mc1, 0RTtZkFH[}Rg0ǞK=ViAkau ظM FwZ]̻ڛ ^F-A}ar$ 8+/;%L&q _ްM7JX%Vl 뵄>,qè as{U\*%*CR\Yxr .(q>os%nZecawq mD xH[[[{q%̰fYY{8%N-J%JYwnYC={Y<ߴCelcm }bR M_¸*!IJO%,ᘲÎBa!C^{ye(0)mo :.mIP6'.0ڃ)ŴE50l6 x $6Ua}5ē $6uߴc_!zL Jy6c59Fy64omP6VN>81lTa橁x8Y:C@aϦ!ʣލL .YS\R,mkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Bold.woff20000664000175000017500000020336014664334534025622 0ustar carstencarstenwOF2x@4t`j8  D :6$n F [b 7Sܜαmϑ4a'w$#w|@CVUA3"q() AZ}})Q@L0LpTS5f7Ӓw.8a(%<15:JQæ(f[G}ݾ^w> OR?N5b=l C"NWЗ8WޏZ, HE1b!7hZǞkT j5TZH>Esw1]f{.d49<+`oUjUcZ~^OW&|iw5d\qE~[23K.\a3ԩSaΐXD/#Zߩ2BYvnGL?C-'qX-Jt^nyηP%N '|cm`?DYERR(zQ,`^ Ya#3ie#)i etu1bS׬Bjp׀>䶂gzޞ⸹,EzD%}1yJȇd|{3RT _|QdYP<.̭[1`k5BZm0"E$/ZrMHꑲ07h}Vd5ՃE"VłƀQ%J` &33ϼh/ڿ󟪏>ndh#'RJٔPQA:A"&BEu=A  #K&&J_0g˚e˚aZOʊ1”z5pFSO߄Z'6K͆#?14dwWӬ*TRL$X$ܶ@;$ >@av=!k"C|tzJIIDSv_gZea3e,&SA\9o ~ZA=دj&X;k6D??UL(RdI~AJ$ E'|;s߽Jv.69`'6I߮1a53SI򆀪Ade w&C8̆C<}jk]&!&@ fo֩SG[.ؼtS̾"T&Ihv-{U>龇$H!R)[I=j&!bb[ "A~ߛ-[Jڿ@1'h@4)f/tڙ0~w:8bHh!bm.FCZƲT4 ᩄw;eB*!R|1MR]˫BǃbSlD{Om< fBKE=#ñJqC궨;CdO!.gnb=*ح,s5MivfR :t$(:/Td@ E4uq,cnG*TQc0%0^;O <`8@|ҫju3TcaR O5m9 DTN:;*\PH!@:ѬNs墍D{~2NZC l 8M,񻯁f4 ?Ny` qk5%PNP(\Fo`6 ӈbp`.~YfLǫmEk%JRZ}ymZ,CƋC~],rQ}!c?g;ТksR IHv@j}٪Ǎ{_W`@J&-* aA%ٛLָ|i]Kmc̤kyznM8h<&%3{@қdt;/nJIA^:8POz  H@OzˡM;>6CިypL/ JiYw/?NYTmq\9|hBQ!u 3 _ﶽEFhK9 ;R*3dNqiRkI ZXJR5"KYU,={>())8ib&k:Ʃ+Z#ڹ kM)~!%.2`:ʴbFo ͷt{pO4Im!MTPAb>8zcVI벭ǫfmtT?"&2TUH}$7:f.Z=ҵv+#Xh4 ON艂{\9UѼ: ֨ d&YgFIt?Z`2Dlؒw+Q.7-i+SI xs%F%ƪ }a{L:Zq5alEn1"; ؕ@*cwbH$̶܎Q#=~LJ_4j/ 8uSR''Q>j/rD<(?](BP5jP 5T\J+Vj -UUjUWjQSM:[]umm6ZO=T-jɮSi5L'kokZﺖ[VXV,& @T΋W٣0=4Yn,+[= 15%y|mT5xSA>=d_0PJ-[ ǖw2nZݜx5_V#Qk_:ЁwC\N' Sn_3BJr3J)eΌңC3ku$nPƻ̍ 9lj5f]XK8 1LvF tʐ؉}Y $O' *!, M%Ef  Cɓ "HP2DP.P2:dA$f,rIE8g !$˟43 0?$pJŹs{H!_}'AsqdK1 ܒj#yXprϊv?_é޺.«^W^]`} 00yot̔sjr-Krr%LiPr<_/jK;2 ˪m $aVҝfiq!_WTu#:سqG%w^Q̃QI⫞nY%l@еMsRqji ;91ϵ 0\L cOSP_UY3Z``&}40ѐ&ʙzY4idW`'}<#{`jZme->9^|;׽7F[Ht`'7ٝ= IkZ`Zr)w3YK9+++7XL 5+7)deNcᡌG8E Y.&Zv/s`˫dMgjL@e%qf9z8dQ2mb KWWp+d= X-eH.A ñA[tOol#w.Z՝J69- SSO߻;2JEi L6H Ǩ1$ 0ˤxӼ6O r _EbtL ^eef sED ^*Sջ&hc!p RDP!C 'p !{QQ=Qd ;EC0Fv1Gџ<@.ꢦe`ڵq8cgi\7<S~YeWًt A` l"ıwȍ"ZDBČ98xpٕ?" f݆&2&$ɆőG@DjdE)SAJzPpMZM[NSݣzO3 -{(`PNJBC ź> AjÎMZmjU-x7J0@KJRJy@BxCvA<"F֧~A1T- q5ZJ_e iyd4gQ_;)H+QL TQN4k:n= 22qcƪA:4jҬE6:t/zӏ;ƨq6\ !xxCZnlVu3(6o+tJcO;q(D FkXo =w6[@ 2;0Wdb6gbNP?k,g#[3i{1x^@ S-vy:+hK1U4)dI,U̒]e GS˙0c#IQ 5nC{{%m㝧7DBޢf5=BNhn:e[ޭLݚΊ̷Jh7+_Uo½C*kԬU;ҧ,Nu筴gm~]u[Qu$ HK  N VԢ aUP1hc9N9< ܲi F*7j\Iq۰Q&M531u^:3 eX-Hp :%Fc͎ss1/W9]FixH~Ҏ~>7[u 7^|Tؖ?U$*hQD>CL ѓoR2dĘ SfYdٛu *hQD>C3" Yi7躡uZnlL'u7aNM]>5lù.|**F w+uC=Qnb[wAs&m"h*\BQ}=DY)e@EM˴-L83dno,ٵTL;MKږ 6iQ[.+/Ab-GnoeR $4 ,6wԸIMZMm%2 2xj DcQlKx0=48S8G>Cm 5nҴ3BYȧڠpe4X>4 .!PsMZM[:IRR&Clђb;87ʕGNװ$EZTkبq͆eHfu]ՅiـK!)p[s4 lAK7v`CEA:TQoڀP].j(bf >vP6A$C`]4gfI $=S&)I=74m4 .!W6eաŊ/a/6ЍdR!c]^r83\t<)uz_l0l'hiʵ\Fdٽ#dDn#Ӿ:reO|\w#UdlDA1Z F@ ӘI3&gE%UG4Wgh?MbM8o-Hp 9#nTYFk{5;pg'MJK!ƖK?؆r|59A\U"5JFH7S֞n f Zܺ9˖x:. ؎{7‹0n$4u/EYˠ>d-r;H!T9.uS?В1V,M,ۂ3bu*Kxa b-1^B8ZNcu&Ocdy%]jEF,ЈPvlPɠP3xf>AX( |: rF5AR wfP&' f݆&A.FK33aƎ}I0ZG܂r!qğ jaW=1f0$b)l: M8E"ɘ$+tJcO)orժרYvtěx+PV>:ƕ՟Ë TC?@Ɣi2F2CYx1ֽdf$S{5;p҈ 8%V&\u$#5پ6>Ỳ? BIo)iASb8i$_'-dw>ΞrpWġk9r$3C>N[IR%E*dCcH*0WۿT?@ hq%Hl`nt2[m-O3Բ5М`P)BB G]6ppra0njSc掾Z(8ΔK-)I@ S*@ 7R*jXS'%6 -<=>^2@3k' ctr1'rƹߩImSA&ZjӮCs56n=z Q&MmBA6hV}eŮG@hͺy41nF_kQE` 3թPNhrH]kr4+tJcO)_23,\*œe`]v:-t,OJgf .;YF3݌GB8PnPSgsڿ+=͑y[M6u%{( h A0QNcЫt^t2v3^©83Ւ! fX$h*I<'ɮcp3ߕ.Mǟ!P vP L5u0B-͢Pn_!vAL8)}\2M#6ępj/ Ř`<4B/:I0I/YH%UG6h`)Ue؂JpĜ+h?lㅀ,Z"HSdCE?$"Cr0     rAT}u,lAKHͅ+<Ƽ /8%8-;#/tTQ,.*ڑ(iYdB87 ]V'_(7[^TfРI6_}Z'!wmp9 q~JO~"lXHoֺXq"D 3%HFO|g )P0p*P0p9f632l^f3^> ;A`~ZGflVe;~B?<3BrOo3rS+۱INPɄyx}q(=pi @ZR.j8$*SU8(HXT ,FӴu8S8GՃѻm˞@fƉ~rMoĚg%I3LQŻKyAThp_8p[Y %BP(  C-(صdT96"Z}+ۀ@  `09_Q;?^ G U×vjkGd"b'yiq"7|Fmeocmz*y59ȞYZƐMO_u>}wKk˶pCBfڽ~x;UBg6R3L&W||G_MŊW_/Sֆ';WDAJ&/{lTM)o8r"‘J_FLMYƯm5۝JrVqZh Yb* I^Կ z-.rv5;}'?>-J zS Ʈ4U,g~%#7'@L!ռw#1s^.s+|.TFL=IO+YUT^W}{?f~^Z+dOz '`6Y~;% ,bK \JߝɌ,TSjW2قF hc=YMb`MtA 'mI#'({@3$L"m2SX˜k:Y6l!G8)\pGċh|DRn0>)H];A}oQPǩblzNK}nOObjbA&@.y@J> 3UHFrc;rd^UV(6$)x q eZ=[ 4Ƃ'ْ5i&͢5C@(eRa&T0Ԅ S5\MlJ[VBRe"'CDDDDTCІf$UJԮuH{ SB0A~5KI}ʢ]irjBneȫU+˽ZrˆyŵALbfX6 E,[T|I p@ ܆5:Yo#cl#B fvf{ |RaG*{G`#}LI*dBxS pH1s Ph\\X\8Tܥy7C1N( AITMfAT6&;I E-:熚ZZ[hVX6hFMcqŔnms;9n7}-rkCBP`B=B/р0a4"%d\71x A&dR㖴nTIR&EP:vaOC/!I t$MdHɞ([qYc*}eBueVlT7 dN8}" 8,}!6༂0p~LM4)dLg݇ meA+$zp^~V`ypCR6 2p&I('ςp$ʒ x^8ܪ v88^>-Co=#@1qՈj|jJyE Kށ._hsksFX_n45-`mdLQ,MF " +߭ÆM(AC u |@`JV &;/ߣ 2j"|(2qBGtM'D<%tfHE v/RsW֫!^חnۺJ >}`j5!]|4G0W g2@2fi22~L6&~.'RB@:IkᲷ< @O!ҝ? d&;m./% #^7> o02d40j`*ZU*j L&[#TC{*5Ka!Lvd *'U^'=-Aeapt` wS:iOjˁZQP|uoShD3{♓ LD"Tf9ܘͱiY-I°0&5Y-ieKvݺ ۫{c[gGWpAzқsF Ng!`(Ɓ)`7<+$@)ȖVIB 1 '3u?~ `/Л*ܻr_i7m88II.)%bjY*1zwCr u=Րj,cnW̳͵@;O?>/8^v9W; gW!> 9rV 9 '@vqq=w@~dA*u6{^۷N||Bsff ]Q􋈑?~5m5&<-݄GiPGHzH}}# ;ϋ!ܢ/;+/Ԓ_=w ;_A_mMsW[f-s\"pr\c+S1Aq"Dݤ[I!YȕbGRN$q$;-=#sefaec6]ZnPj5ppruygy[ҵezzJVyE*G#AyQ0IP*E{.ǂ_-K*R٬|iluJUTXVAuqj_#Hp K@XPF3IMaIՌ456Ut[Q5JY3b}H-h9uTKLO,zoT#NYv<O o5;{/2 ;B0 f_Gk-r׍vϿ vfTD  ]TZ[u_bob@;ψ˙4=rQ#^ I_k䛽I \ \Ppxbi)TT^7u H(ȣQH2tԨӰ&-`Mo^=*&L1˹~t`8\ aH !+ǝ?A*W.]7˸\bn펿h&Eh i]:s`%KJM?ص$\|DZo-V׏>Z/m"5*נ /DIx^?m֢jݵps֎D3–{衛+X$g̅jVѤ:H l'a>I i$ : *-(^ _8®bpgI8rV6`!BZqWs]vL%~[l[h;Έ]ۛu8?x/t`x( Hp5݄!߸\((ې;GH0х\*ieC],Y8TLT`'XUfN/-V@JZML?H8+#!].b?a_|:^r !!B=a'|=[*?IZOi9T$άsXT!xt[$+fhK֩}"9AEJjITs¤&ZcQ- H7qևmݴ?-4WbՃT"vآHC $P!9k5ROR=uSΰ"/L<)Ż͂G3 =;X:Vddє- $ZfWc.ID1fF}[12>*,-beuhf4*̆r!*zqo) b5_u[8wS픵tLӄٓKIF}#d؈dC2mDC2a!Y6"`!Yl{HxpC"!Cr؈#/; ̄9dQ%&yɭȻy_#rcC|˓uy.9>@>ϛVq W"{{r#O&Z= a{NP%_eZTCB\xʒK+*1a6"REG`bo "/gxАVt;3Qv HȧQ\!8nz{tK"A\Y%p, cRh[Yt}h)"BouL] ]JaVPZW%qK1E6I+6ţDcjr7.z;T",tn;WuD {J)  ZD*)8$Ue۶ <: 0Ofn ̌B)`H0t~Ӕh+a­{'_+d\IDkTHuꫡ"%:[,/Y.A|Yd6^b[;Zht<\[FjO v2zDRHd -tZho[bǠ(Bhy׍MM#}iVRI=tmHϲ‚i <{I ө91gg72FfQu^K R٨< \q7}xm̼J*VgI8ّfV)xw I&;}FNTǣu{jldOF5k[lQN8 J#'qχ %-[K,BLG2B)5^9;&1#D)!"@!;`s }B^/߰>JBRAĚ0ƷuIYɎht^vqv_s̔B^/9{ޏNv%^TWlpJ6ꦑZA %j[#cNȳ3t)g4 \BK9AUgm"d>]ю^^ ף;{3$z=aOު%s # -XTӗ?@n>+_zIaX=;cz"5}"CrsPj/ JObQ!p ! 7 I7g8._R'dٛ$` B*hzcyeBuSfkZR~_{[r<*sE =4>W _c1 )xk!Gq^ܹYpۤWK%AwBA"OtrQ=`D,-f0 6(3VBۤ-V{;oJJ1:ayKs TZZ=@Z hV-9l+9i> B@7 4ja@HN^YpK¶Q("AQF&O^=>D[ ymqnwЪgЖFjbiWYzh%蕡SΠf#{łx?KXԭڳF{Ř И-FO8N!oQ5%QOȫL}2OaF^'i^Q'hԏRYCǛ 9z;G8&BB!V#0P@N4x \X:Mى$ D#h "bDBy-Y[p4@4Av/ SA?BFOȏé\OjtC<&aK_C|@& $`(ciy* US(fO-yz&vJpW^UL޶0첔-5K )XGSvEYu^U>'uĭcpY=41dGL*>#Za)}O,MGQ+3 @xts2?-#ńnjDr[M\!єiSEЪ]sK@;0nX'++ !$viNP_]|ٮ^ԅ 9) RKyquA :b!qb^EG͞@7>>{[/ŗM,=p𭠢胹 t4G0Ƒ\*G͆TGj̒/@aks4nMGǛ0Si~CZNFiꅵ6UR~[=xp@ Z/ue(B١ 9!S e ]z]%}1.7BBFcTjFخ3i}5@ luȶ{!:v&@4.5_@ށ|,]M/8sZZvEX"tLXyy΂\n* I_/*D$O rxZYew?୏shxEÙ+Yg N2hm譌]R{ȁ܊ eZ6=%ڬ. |+)Js1lPْ2CAy-Pߋ9(}qy9:x+)%!QI Jt#3 NS;jB>P5TV<$׳DMC D'N#02CTiqwdzy^S`pag&ȑ+ʢ2go2_338srMg\m!]h:]y8{9Ѝ-#s)bOJr!!Vf \Ǚ{l.$%$d5j5YK'{j">1xhOd on{-]5B.j } v/E[Q j۪xWO*.j)VbOǎ:o֠YM~:&|َ A-۪*ƨt'PE2PfCdc$c@ o³x`C&Us̙) Wo_4Y|5̎,̙PK+ٹU.B!j2r䦎aZoE^<#g }I?Nr /J<{: Db$[wuYGA )oIZU5lQ&*rc,tcs2ZTX/-8‹s7 y1{1'5RW %#CB\~lQg[j_Rxr-Nm?nug[/THGSzrk\DzGhJX='x AoׂH1ْ#{,g?tH`SCCN#r,XI0,lc"nZzڔUK67jE['NCs'pB?e2Y+l B)`iOɞ`VZ $DM![rH wc0'v̱ '$H:rN:fD]4ס"]sxx"oYj@Fɕ\|@SS9!.'Mszn'+oxW…1GqŽW`V0&_iy $)א_q_ewZ2^s*S) U/zz=yB|YIP88HŻ.um%LrgTf_MO TW6I[Ԏ.zݜx jȉIczlf\rʃmn@2H[(Ws)\-Vrc.ϙjW6{jjZ T'd[!4Ǽ]q3vd`A쐵\0cahn:DT,7-}'8Ÿ S:һ"*2kAr<B| GxfLSBRƮcVSj\U5YkN-/_RiʪfdXR|N>36l%]& S&VJKx>F~T5< q\+|;J^aS>!yE>e{NW0^x>ণBmx52CjÄJkl/M;o2V>cEKP ZQap,E 6Ԩ?UIZG'dkgVzpT.W.e5$a)fi7\s*^eզ]>!BVhGi)%By L<42ӉxA u} &ϡrLA픃5Ik:Q޼tɺͻ4#q3-,c4==:Puʻ]o5uoL@{_3z0>>@]+Vé(+}K<.c8\f^#|`"6լeYG5y>h]v "gfY^Š}\'Ǹmyo퉲9_qR~!nqhۮ'~W5q/^wpemf )59KETx ,^e֭W_KO%XSЖEGt͸ђ<(++¸尶fPyA"IWOK?PoKH- N-*1)W S}ey.go@滼KOX@vfFʯ7'1PD-E|12 ?''Hv;R,o 97,0vUpQ:aJUBX 9]J9RT2\-Sʃe]]PW˪vCS*\IFj_ђ3a_f$2p.޶jCW3zSě}ǜI- BQHWrJZ;1TvaLpySOQ7G9f0,ǂEYuw wit`ɽ]Z=tG> FօXoVGXL>u6V+\1Kq;iy[Mpnt[P&>X2ڴ-/)ƯecrgJ>k'@UIeGR2t.cq 4c@LMH~qXX$ceut1,Ӕ_k9̦')g0k/hkAj*weE\U+AmSAeb}^žjnoWY0O dgZ;_UQ;Z7&|`i]Y  /9)ۡ~xBfq]nSq#d+:˛M7 bw%}ɹ틱S0nK*wYז-Y+ ~a`rsj 2P=d&;|Yֺ7ԋ@Pfw8Zw[ctuJ'DP XՇ {gHyPS <E௼<x̤ @I^ o1<Ƕl@dVY&cHީU]WxQW1)rNgom*lN= pެ u9-L1&ta76^nKxQŶo-Wjz~YT~d!=TgoYo/vv20 054':nnTڝ{9K]X z }? r`lfg0P)<ꢷl0b)o8 /_2AL ADXgU uEsb$z`n%ƭ ^ksڋ $bP \ J]$pA qSLEɍ9Gй)!3;G̿[NJ?,ͷ t>?5$޿Ƃ;K{$o Drmhj$Z_U'bZ-|G[ê OIZ ;>}\d9H(vtEfT!܄f.1ZyӶJEuq*JSR 2 s ,'8$B*|KeQ><ZSECaKzBhV3%~TzgD` N(6O —V|$x!&=?+Eo{tCrPt| ^Â>|%2"_oF7ý"Pl'W:c"r&jB?M r';]^̆4Η%kd2̕_]ڸu/ B@8)yxsbG-A ;lԋC+r=A P'wgxH)@O\uZVO-bjjkśr g2=Mda@-%A`SmeŠq<~S4"dQcu?D﷽;\QKVA.Cpb,Lbe5"ž۟214:Pe*W|eѡoWASS 'HL2UMG<ld},\݃!4|WxoEPŌI!dWd.F`IbQfJe[ێ2DZ|-Bz71Wت«FD/֔^<ї+lVfMU-iPBQZ;:@'3n e92/ 53Pkj0xPmԮZea;l0Tk]K(vܸN8ąc{t%h (em@/zl-AY|kgџݨi[|4pT5 ^qNErX?&_qiK]#tJ3)T#!jjgYҴلWY(};+r^rs$jI]cht5a%tаa_9QMGI>*)W5' r ev }׆0VK >B7b?:&QGaޏ ax$){r=~f3t-Bo7~j[j#뭖5/ȏN( BwD1tz+4*}w˟7VF%(*HXt#慛[5y-=-;V*hahZ2KDnͺ]}[]!a5`s櫈mrcEc[S":Qº k3, iV:\IJ^ÅC@<ay_d)ܖX 4;&~ 0s@S#M':&m[M! ̩ loL#nZ#L57WC‹ Z}CJ zKۈmjzq_嘤] ϽP*?qU)1s%0#e9uWL<^TȟI"#:+vYY ,J˽xQ?X.@;Сjr|mV1V"JY+6/ڞ;f-3fA6}༻K;4*`F/3tF G6zF q8ő:99dņM+>mRֽx } K!E bǵy0܍:e"ɜWqAnzMد,: zY'2 򏤾8+v}ẓkmTz8%Izcud/ClPB#EKpk<8}vyK_# 7bBh`Ch͝|AX_YBi˦Ї\k+ MAg0$L2#u/ ^.-6-[5^1s2(ZmVw[-dLTt- MVEJ$2ZXgYP7'y4ԷG _tw7QNa'9$*e"mo:o"7fDIԓ x#2V9 Xk0(ǀY;E2UuXR6]M&hJtI"Zq6RPc5/IdΕ}XnսĢp%&Zl&d2WFA@W*0L(e߿;q=kN旱N2 6!7l6x,A|F% sSF{V /9Q##A//qs˛eB)xDB϶5u]6Nfa3f'N 6K<5U9?QP$)Ҥ@E>frXOOO]m^yeLh{uQRɗHE]C # jǢ,JϦrP@ͩ2XڜtPzYe1+| jSIgC>J5@Q菼3^|=^dש򓧫rzk'.n*~,.΂{% `x=T*H6fkQB\҉nn ik K؂!rFT%mz1LP=w:{JGn_imJ[B-%]z7,|">?e?rPKDlvRQ^iv޳COu1k{$B ]-K^_fX4; B#vlಡ, BIwXУ߀*Ÿ)ea76FOooyzc71H >gڤLĢڇѯL 2rwvJ+ĪRi¶SLڄuI^*6"cןݨ^^ww^n@?K?k*sxC3TZ|Uol-MmCW99 x1s꓇4؟; Th龍`xN˘tUNq^[/"oCeᘠ BW*/68sDG׻']SZce"crn/qvzcz?"B|y ޓ,H,Ht@G}.fJ(L\pN HPga`!ꞴocHz<84|GS_XLuR#hQ>oh'Z9W~M:6.%ܸ»z2 9ԉtGFR"SݗY^t ~#i}G+aYcm;c: \ &c^|d0啋("L6- U±?aRN=s[K'I2#(~ҵ-JƔ,GV1n+:Cke+"*DKI:OԥsjH)-2k]腥Ջ~ >97/)5:Θ˱1'w%1SPF"C>0+6ں̑' B#(0 TZ '(i]ȥݛu[mvDޞ{a5_iIL%m0&ݰV.v_Rn(Y1a(_ڰy@Cwg39;H0GM }f~;ֺ+<|蓑L"P{eD-Pt72D8@@ޟn^[_=0C-'ˬ7nFDQg&I5t~zJocX?.V%PTSsHFmTӛgHؚe5DD_C)5 ^~!l}ޱt~=n.\R#8{(XWeu{Ն)ޓ[ 桝DdiTh~,PQs_C(0p{pnldy5u0y,^ltZL;Qd[ J+e`:xH oKe}e~ëlưyY[;)hxÍunec3|?ZrU5K$1`c[T+N%9þuPLA8G,B*RHĔߖCPCÈH:GCR ${+Y~۟VVõ{:҂H%f6FCQp>˪Ξ,cmgO2 2[QGX8 5Y.6- r2o;bS{\?`(y okS4ϴȚas :0]'u`VHkŸ] sƸĊKZ1Fan'6gW/oMxr*(~ҋt]z3D0Ir}¢[3}xVHG3 x3oƶ/7]J1V(~b``éܬ2Btm%kbW7ԇ}Q%dg=SBK $<?ϣmȇ3iߋ}u xǨ|tz ݔ檈{R($rk L\Ue=\Ӻm$9䙙T)mq] ArAМBhX/P(VognAǂ3A|;UUgZUɆ tQ"J*\#=t5Na!X't~|XKv܇5 i0ꉟn܎yx܆42~R Z7J,0u~0Ń"MhΡ?WzTMjgmZ$)h tfb4UT>+d]H;۠TO@HEdŁ IW&wOB}XP&iʃsV;wt8.Z3A%@ y 1q_apW~H?]%(qk8.q1k{2Cj :X=÷(ܟЅPzKa G׹J.̋U(eZZgEb,ʞ߼ e_F%K=EB]J~().-2'ucdŝŖ5q=nuG!1rvvʡS俫sYKf0s@R yVjmc@¥Ó},U,;Tլ)j6buGl …O4`S@g46t4iXӡN,#T/OT2v$ gIE]EaIm-M^Q鬱T5KnE)^F9}ވ]ub٭qvߩipb -ئ^XV{-? \OUUQ 8'pޛuu/ rmZECsE)M)'O+Wvf~ Q=龡4iϱ~aн|Aodo^, M\]Wފ C`cd;ŶlҒOwDQ\AnP5KSdVsY቞?_] h%<. v=IH眗/y)kհ>nȈV,4\dٟҋoMK`.޾=uClCͣWXz*꾹͑W*F<5+;ٗD!w>Oe5B++.~vz|cJl$Qy1-\jluSȿyv1TN`o*Z@wz`>=QţQ[;~~,{tB1\ YJс >ܝL8Ye(+=)bCǼ:mT8JD5^= ?m&)ޱflKBʋxȪ "ɗq{wh^9<#f؝S h57Ϩ7B\iW^# ^, Xܪ Ŷ05uY+XVJZo׳{aUjrDw.w2e6o"ZsTZւyo$RsEs' 26z"a\3 {fff>`//n̂ȸ\%fϢE:ηePGՂ~4k7io? d+x#^uE|"[@,싡(#.^wt=]=:вWx3&5G^zflUv_Vh9n5Tʐ]Ͱ:پL'~R:uϮ¥s:v2XJ,8])<~VZ:jt +z9Х}XdwM'mpT<&*m 6gy40yTA{LFڋ (4үElj oOIu*HCd]IZj(.Y_<4dp6uěfr7b(آ{DIn+?gNzELg?[9K,ט,`q&sB>D!M1w8>NӆծL//v]][BNy;+c3/>>W}J?}V*(OlU·mčB&w&-W F 9gm>3Jۄ^vl%⯃v>sy06דH gsʍ~`Bx:|8F}^ѦFI!/XsVR@uř&A@laΚlQ󿋏g:Y f,1*\ͩQcV.@KBAVBo}X^&/kezAҁ,$+e%yY[8 )lޡ1͛YmhUd<߮:~,gNb#&%璙%Z_hKn* e`'dS'd?׽9k@^.ӆs7@ݹuq\ ۘh}Ā],(sn:S<:᥅u2ymmlSS_wbm'lSfW+3!fs'95O IG> }S/%s 5&Fһ-2,vQ8ڍϺ{Gw4-#/4tD>OJVF~UdFw5.ӹ}"@] bU׼4AǪw!愑5W@fџ1Uxe4C`R; V_7+u6dLSPNq` 0c-]MupQyJe_)Vl@L[(" =P垏7{4w-u82+Lt ?zLMt\lP\%lZ `ܻD5rN| s]>i/>ަ}bpXEEȢWnUgD7-\U*EQ ki,Q+f͜ϡbuT1W~]Q蚼 I3*k<yo{YqQ؉~2x6@4*r9e짰N 2 ڍЇ]3tBK5zZ&HsOWyq=2*o rs5y>H;n)km.cV?)iEwu(-(phchm ^jd\ Ҿг?Bow9~ HKߔz)Du5;I x# }EűvR=54K=mvh=ޔ6J<@3\IaҞ#:O|Z5ߨh(MC4?ڧwOQyUinBm cZ36, ...xa}fNPs.r)uMɛr?;M_l(/$W.6ZQHssf6=]-镓GƩ9YG ]*][eV{z͑^&.ЈdM?Ho5u#Fc|[{Gw$w݆D:'f_KkX' :R?yqks~挣?65W.0z@xb뷄| ( AcuMWWKIy~b˂ qX(|=%@izPC^=_\^ZGZA^[`@œ>X!v ծ^M8x|.'1T#X< vY+LU,3(6%MeH#Pze"ۊHݗZϷDyvsYe]{Lܱ9w{ u9chgА|BD}ޥ"\}2CXO/0CZmY[lugOqAdx2~~OByAI3C`UלNZ78Vs쳋OZF͸_$b,eBT,:| X9Kbi[|*Q-WM>k=])JټUlHHK+ C^$-[zQ9#AV2۩a0fjS:ILa$$kXX1uymb#2 MH@21eCܲ'x-gR!+J. [RwuUɣZjlI!=3f^ZC=`*2so [0D/H''4mjzEo<KJ&d.I3ѰgFUehk 樟X3g釉E̋8w=H}sq]Wכ{}ˏ@2T.Xr~Ƞ1?f#Q8Gc1v/_!j+N*[Öo6YY/J =[XXx99xr56p$mPP Ejqϼ>IuX]q$g[>;K$7`kqKX>aZRiqTt 4N( c0±~,x &I$Q GW@mI: t3wW_"|E&LD~a;t$R9 QypRn'K. 踟=dgÓww2-;7/X'o&&B$|tS$Fo|ڦzG;ڂ_?׿ W#9y4yYb\Ab#C )HMv ޝƝ$_Bfhr"ۙwRȼ߸y%?xuJt9 ؛~mA=^83lBAMFS0tG=yވ `,;ɍ著SۂXRx^}{ֺX_T~%]%JE'VNʏd|(:ՔSaiξpj󁛴0yEƕ[H-q?!| uYgϾ0LJZ֛s." s+R<0\)@Eg"{H*`(oub}Ay:5J2N7PYgS_W}C'|MjKЭq0^qNUh.gR#qȤ#D{2C@Ab@K4{ÎhOn Kmb-Hn-mꜥL]u`^u6׻-,w dm\8Ov'n򎶦0l ?xNX1\C<݃(Z[V V[67>6;Y"be" @TTZԈm]{;z '/,b g3NaJYvh"/0ޜ*RmdY"L+ǡyvj;"ri|4бbST@P8<IRa:@AA A2xP66d*r>QP^PƕԓRSNQ4$EgbB’Z p f6aKbrNe}۔5kj殾/K96,'T2)r|6_$GbPp}ΧK z@^o y:0ЌB!H2[?J ƨ0h`e? |i˨î4ƫ^?'?oD6 $otW"o;[qz3rsd}7qUZ}1qGX,)0C2fg4S}"4xB=#&ms : s =@6h H nm,3V'ir7ƱAm5|}E`7Wv=ʹB5 D!s_g^Zrc"STv]?E`dV }yɜ!g=_)G|Pвx(̫o`d޸#2'kL#߂i%@-LU.V)R',:wBk(88ϲ Y@AW&5%7oRl*56AҪ:aDvh#'Vޅ0Ѯt@C8Є}UUȲ7`YQix'ڎK>=sw9"H;5PL#YHIێRpHAקc{kt0 N[IaW`E8` P`IHGIMZKGw"|HbZ.p۲NSu`/7~|yh[^fm ZG2ymԁ-lz ӹPᐈqFr(pT<vg\"i(e#`ZsW)n%2a z$$lDrZ P^|h}nb?P}*V6&uoR(; ZmThme꨷Z:mp@n[4h #dH4l%dD63N)HC9Zi~K="a*7vb\fe;`oiAC Kb5(BߦtYM?F-H(JX \džxU*[ )B|< . i"Kv(3k+W&`8Q*ɡt2IC1$9J89cw`q:8v(wf"VNOI6FՎdvPqUкRŦ$1ZCߴA]cB -t?`9(Dpx:q:k)XFI)4|"鬐ܘ~(Jnt,z.0N7 n=3a#mJ*6.*L8@}B*WgDQxm7?K@ĕl /F[¶}kOm6EQtiH~ZClbSwmKo/ K e[S?/1 7@T囦*$ = U挘f __%%+)H'o#b7iJ=ruAA3  fp d C"k<句^ߝ/PjQ:YMK>֮?9 u'ϊ{. )HNTl Xy USxE*L?E` zjɌ6#cF҄/2YO(35&un: {^c)'o˻7P\DN(3f3>{DQۢwJ#O_3bGg0NԚdBCbԄ%/kHw|ݥ,i`vS^m~t~m}Y%Ŗ+&Yfx|jy3^ײ;/ RB[hpC 8?TP$]Njx}6J*NQ,84,tq:Jį<+4QI.=>0eB\(PcV|N?P4g@vVbM`:vplRr\'&냩Q=5d?3M$;>KZL}|Qלj\uv sI[LuKŧezEܘܫe9JPUR%7B-Kݿvg^k(˔"Bz2ᓿ1L 3_#;qG):Ms h^n/ @;NQg;︊񫤉Pe=Tu\ -vuN9MjM4H/?j܌wz&8 ][X{vs sδ'g#!TjLّ%k0K+9vE5J E5CB /ɿ3npЬxV:s R3z=e iԱ$s%m1Ιo -%ΐJK#M\qB*`-]qĹ=yRjUz&rZ(Z"i9ھ1̗.,'%NZ3GFȌ MFgǦ*ˮe/SDD[spbs[:GWHv׳py[qD}O+p*//pt]̅,gOymmnzHQKvKמI؜Ppo|ګkoYHţ})$dn2UKgRTDԛF.Lpt碲V95E#TFlT勄l3^ˉNIk;X)>W%Kak2)X9+ps`S*xwDLp*oH71(0R07>2H650̬y/?Hoa$jqGqe0Mb`֡3,"p2fL:2i u3(ppl_E$>Fuxz>B\x "@qvmC%-_uftZJ޵p5D-7#_W;4$ DۓH;7";x09NZsn4w8z!QFsȰ=-Wv%uKLZ7YPfXI'4 ,Ck` pB\!A9=G+ٮ(7do&}G(Ib7:wG?*KliɾЦ54/eީN{Y0p/,`qcQ5F> P9O=C0WxO zY]ͷm|c]:ј%U&thq>D *֞|6eRiۃ d!{)6ZЍ 2m)>֎4p Eΐ(8H,GjᵴDyDТo:=t)'9;һ& gSؒԼ[MLX/&5Zi)Ión :B;l߻ )-6Cr\I^}u+74*"Y)C[Y#& O. ?.(QbIS$ٷ60I~Yv7˾T='P)DvhS7DCڹ@yFicTy05l*-[5< @˟dYeiQ 88z!Z]E=dE#- AMy\8O ,RV/_:9i]S6c^j˙LJ][)(%kmpL ؉p895ԝtY4/EXA)D7XE3 \x\(LAI"npQM( ȪI@8Ĭe&$]xDKۡq0(RP\-n|Ndž^qhЭ cGYs( GRJoh}ܻJS4FLn\[bKz`c6~{~I#+Q2CG,pu! r ")+Qt*5 Zo~!l0Q.~6dsoyv>,Zn7:-[8-5+bzc7yF/?BTr|QNb+~$wn\Ec{7if9U?|TS? ǽRΦE՗qّ m5PH*rH],|"S۱â'Nx~1@.|yں-m84;YI0>9LCzd!q(vM̬o< 9FlBU>ߺ,0234vFr{٬ =c~N{][&&}X'46GxxA,.:驠ѭ`cI1U5' E Lc+H0 'NDbW1Th_ս7+t4eR/ڞ7q$ŗzp&\Mw{b_~x{}[=}6X-V/P0/,mZ5ȓy`)xCh7%&USM3I_#%R340sp0C~!aM/_XaxPɬ4V\kN:[5&- d'k6uq"q_`no-ͬTYlj  ׾>~ 7:O*VQ DMS7mw* m+=_t`bxbnJC,eh18RQ)\Qato#m.xrCΌECj?H&f'O"0ժ(1W ogyT3B!58^89 7cd,I(L ed M#<NaQߺp Dup CB8^G0||g&]ƪFR]>$C5bYtc0٣!QyIYǃt^҅0(@ =+W:bXj٭aOm#j As1-+lN.#wk@UPWtLbJr^;=KϓOݓ۱0 GDǥ;vE!kaS|#a)<ӂh #)ADRtxDղ|'un167ɫT(YE4Q_mN|u1s3BT]w|ӍvMiV(6U_!_ft^$ Z25(XbvyGk ,Yd40YsBly$J`g!LH)gv$MWLޖs<ӚRvzˌlob y1ťYxX[q>:1KQ1}5X+ V&^>5Cl.tTj@؁GRY5_Ŭ~e5RZhkLdyf /"vFF U6CcODeJXYFͮ3hjK,Z̷5_tD/,ܷ^kL]lRDX| 6Ձ!'Kfٱ u.+!]dCA(D|-yysjN!i=DM55epjaOkIOQc#h4ѹ;w)ѹT,\-T81,sHGAA5 IH-Ŭ-$3ZY}npM3cjgfi ql$ߏ;ΨK4  J/yLitl%fj)t"|GpDϑaVj; Ӡ+˱0f"r.WJ0՞j<(c:x 2{^+*]_g?vҒop)sLd>@(V"EvvLњ6qYCQ>qI #-;zcɒO_4(NNZ9Kr{iHGpC+.7tV HK!%X:ltB:Xx3&L s&nn%ÇՈ1aC0S],Z@+MRePϷO\z`aG)XPC aݚǧ^mXaw| $tgFpE5$t/+Ak9{E<ϏK#.na;d r4o.QlBT܃feluCiʤMEKnȦo7x6\Je6g|/+_KͫOK{)}3!2y-Ě$0rf"ϯ:,ƞm<}cA Q7'p Yb$aUg "K(v-Ѡό䥴 >Д48%ژذWbenޖ~!QE*0)&]Y!s_ CP"&N>d<H뉀ۦfE`6ُٝzְCr{ZT `&Ԟo3cƞJ"?~j+Ц&xher c@d;(`XALȌipB{΀ԕ?[:2m=7K5qYG r6epNNw L/˪O'4qMW2g9L>8_Nc,ryt2ެE#ȶeԓ!D;E ,&l-RG 9I% JAO-ղb!fKrtB{=-ij5,WWcrjJ*&㲙 *7˱}; .rEy䲚m]I8a9+W2%rPOhn}U&I b.6~ wx@tmq1 F\_ `Tk a .RE3|d6PRNiH]uq쫀ŭ33#$81dwna*jhrl[R̺?A02NJB7s:ksqDf!IMi ȚOkx ̌ #emC ϛ捴lBPn,򛳜E H(q;r6~*ͯP$]-j[nw(qKI!_`vIw}V|Ɉ uעZξࠏ%tmcihd4?AHƘ[iAX}ng8%Q߸4ĞBxP7-N|JXioFln~/B,L-#%2=^o<i; +T$X ڜV]<eRSOMZԤYuePv_޻<,$%^t2Xp-MjfBӵ`, 1A ή\]ǑԱ:)W`EpU0R=ڂ7Ug ''=m 8;B:B^ԭqt@Ԛ- P3+tETWPU>Ҥ7G1eqq?kɧoر Tk4tlLqqIixcw/Ŵm_q|K.x֩`ƈA&a0W&!-F!<4xCɩV"uVON1 AͿoP=`'-&slqP` ?a'x@)=/Od܁6dPhYs#HxIҷcqjYIJ89u }FvHGj5%^}lӎp)6Aeދ ֓Lzr6`xW7JѬ<#`?fxtp>ÀbO;Ær G,T-eǓẔ=k4}JIi<)uO-+ݐla񬹙1E[ax ok9q0ČDHg&$Cdy|֧]ybt'Gyy^r>cfÞF @Pq1 ZJ~²xƒ0X}tU4|h?y><Ὰ&y™L<bK.Ӆx?xfJߦR vKċ^,?ޠhZ4 GarX1bI kmb{/ '9R#yݢQb=;z..Vb vw,R8cV潉k8 R>/iToɋܬs9ޜB%ɼvM5z, O<Ǭh1M:S͵"Ke%3?PvzB{תta':˃,Qq3.}tDxӅ6aAk.lz92>C/YނxeQ(B>'rPҖ@fh }.A2E_켇 M@ 7QTj#Yr%H<}=3reu{K¤Y ( IcZ|f_ #?`I)b_u4t_E|-Gov>Eh  I odч${gl 7-۰6\`Y#u"m?v,Xc+2FŶ+l$h249Ď}uUR$5^ 1Y/g\-m}~;;ZL~BKU+w$IѤ9R{v)FĚXܱ?qO}\K~4 f2u__t(?Gg. R&aUb\C0aYw8l4WVcBSJެU;'{jG^g4է,IW)|SR$͍+F ]Tӽ*oƀFtЈ321~ m,0lu1JpԢgf:5"52M`1{ޅHxLJjD yrM+S9Y Ld]}nj5ފdQ+ĞuYފǯruOtK3(% YN ``AšS"GŐx ;Σ.u2/ Q0$N^0HsEV)bTL̦־D0=*~dhRcwj!nD;WdVI[fvSr|Ɲs$gx=>B䢲ՎD;_2vKkEwnK u@ײUH ~4FG TeZλ7Btd73M>}Ŕn:=r|~d$y]_y,Op_O߼OY`9N v@9|h:h5Ai{nkX_iEuӝZH웩ۤy{}6)$UnK)tF>yY!MiCR)nxp܄Kp9ed= onQ.ٷEx,cؔ?h}2D"_ZΡ g;y]͸зm"mY Ne1by0u**INGOI7X1 mx@';KlF-J^We 4Ծ},ǡ'o\1댢I(ejٛ2r7缺g2DD)SDZUa]|==^Fr7ثrLyW/\(,g7,] ; )磽wfttQaFdvtGR>x|2Qr$^ȏM RG{?|*7@|:شAb4nM󆴴mP]뙂qEЧ6\͆ Q~lҥXjZ~:3WyKB=.*V7e=t08%ǘ%$   $`PRg5bH*D3oW,-}MS:Ke]5wi:fx]>&/]o -yv2?ixRl[dBg}oOʌ,ȖKǥjwp@Ζq&uEE XٞU(73<4YՐYn /-GB7كS':W1 (/z. in-ߑ<_.2)$_lvB%I\D  $km6%AN  n3ۦe3>NcAݮ-:VM+w40f%=t GF嘲 Z"FNMJzXw/&L&qպ oj9`TpF{N"$ QNF:F$pWo4TMcy'CZ:DyN@gtcsEH)kJW@Tq_^"F2[h>q+JSa eMl3aTs6ϔP8:%+ZK<Q4.Cs}`n8ިWA_̇GgmZr/#X5ܣIi)?5OXaE}uׄ-א"sI۠> ϸ J$ afPt),s]ɶcq m 0y5ρ~/ OFq'|-vkЈDSB?~:^紁"qP/#Gq25xp ήdb"MH(E?YZ[^`:YuaSpH.UI0~F_y'`ߞ|iVoNJ.vjN>"q]aK2Sb=~\hdےcs8MfpOXe~x觬uOrm9fQ"XԨ@0?4P9VhXYڈ n _Qn .O6T8#x~U7d Ȫ7$Qgy*-;%b͛MFj V*娔Ԕ̆ acxGb(AD`0f]uEUvݮJVq( əW_& >1=H`,ZNi %1^ J@XO@3 a+o2UxאW<1sMfW\hp7Ok汭Dd).,5=G/^ ;&ȕ 0D3:*PSbUW!(:\f]a>en&O3!I`.Rh/4@}Mud/Jm35!0Ja|ja  kCep;4qҐ 9'*jUy &&F/jo/ v lE@{dj%>z :7*gFA-b1Lu#.lʓNyִKƿ>NC9DGMqihQ&O񺢟{KƤlKc7ɤ3za03bPhYw*i23{/lAPN(\{)|[Už ׼uuu"6Mǂѹjq8}\*azځz6fI*1d]lRUN1C/^@^- S%HFnf:-|7*yq'W?xڽJ`G~x˾%Wk;O '&slb thp@7ue]VZ>U\Szcd5 w,=H1Ho>vJi2E3in[^|//@;r>dcW{]JXPuv҆m->R=L;DtSmhwZWr WDMuvh ܜa8{pΝ#XW;Nԃ_Xh(b;Cr(Bpʲ; $؊޻.;fX;Z~q(nqU;6DxH䘎q)Xsd߇2)Ǣ# :Y%sδB?wό˃=՝Gr^`DrjtǯoWG z"JGu1wxy#&ʘI$ۆm+h igNܠ5Skm0( F /i_AnޝIy5lƦwQ\'lHIS[D:7YQjd!L Ͻn,Q ƚ#똩7ޏoC9rr7tN#- ,6Ͷ{~]o/KI)ݶB26#D!DBel1\Ya)՚aL\||Q&!W mBM^7벤I1?N 8wd&xu ʘ_5=e~<{_&P)ٳ^sϩ|yr{̰>pՓ.q-iGaFO+v]Oxqw߬8*]11a"ʢղ4fߚꮡe;cL˟w<Ʌ-'*\zʠbb>%62h q e\p-Sjiפ4;OZdlc*ǚKba{Qۢ@kw$zmܽX ~=SYTi o#)8)PCCs 6(^&XZL;_phݸn7*ЭS:y2(_kZ|݄ߺ\>nsrU/| 5v6mlCFmAs,F=( Ɖz+<2 NOVbJ; 7`jBe īyMBW ԝuE|5u0"`h eo똙&<+6%&2z4y*T_T& Z$ȿac„1ȶ'ɪd-i[.\KXZ|c/LXnwB}C -G+uvO'E*mS\pBnKjn "czɀIO,Nvh!?KyоF{4%GWU> :ZGʂԹ28i뾞Sg^ lv:m^Eoư܆h8o雫h6lW19{ڨw39a$:;{ ]vKL.&ckn\+̚N C2Tf,^J:4jWUliOơ3 'nFFhp^y 'h^um?ohrU2feN|ځn%tP߸IomW0z[nE|\%d*ъ3()TPMv~ߢnO]ǜwnRrD+}]j8]>]Qb6q#8\a?1hݕuUfUjZ]K-%{{F5>(M>!LWь_rb+oĴnSHQ6>].A}5AzJrMrd4rVB2h?h׹UQsd6Ia+x ~>%L4*m6wnp*J㕘u Nq8Eq1!e嬰$)Q}wXQ#QQ+ǖ9*߭[G] +H2VA]aa $bf+ 7ض@"_`v1F ;fʑ}p|Qu(x za^M^alKo;Eeo^ўO v|s{v͇Ȓ6-|4^BK|E+K6[ edA1;SN#C[5H-w v$+k:nP3DQq~L}NBazMaE9kCT+38ԷV~ |J7J{}Q"`_Ke\FOC6> #!T]@]@pS5I #Z;=L&90 :_qFfo9ŊO0YϏ8LlsQr']'p.;2dj|ϠbUwE)Rkh|j krn2ɾ:%InČq' r1eȴG'Ѥ'M ҿm$-.m1"ڌUG,6 {5Fh[1|ըdTgroZߧ9jx@i9'=5l)^3CJy_q`^{ =yh6|Nq:31|A4s&0$ ɡQU&MZ1kWN ]JI$< z9u,+r%}MY,yړusUS✰&̡ska W! "  %a} 9PBQMsS:R$*A& TĈ>iЅwKp pɡb;o[i$nsoޛ+\XaMc9Q1V"И5aX$.`l,c~Dr~ȲDi)8B@O(6T\09Sí3q<\iO}lBSYKdPgq<~z"Pt2nƬ-$-5>M /*>GPCf5GӡW0è2RoJpϔ.$pF񝍟Pxdx#@  (Y-2|ƟH\H[4y5!jݓI \jW#qU@z%eWqߛpLYAg64|7T;rR-w,K)Гr1k7Ic?vhwj|'WLv"BY&sktQ^l[)Ӝ;?Iv&Kf6ޒwes[h Uï4#$ِB2L3_lPǸH<_1 jozP]ˉS"3.Au"ǥʶ/8Ɏ4CBF븱#"aW67a?8kҹΈ,_O4B# s]$Ǣ!lHZ:$NTۦL=\䄯P/3\bcLSA4=h P1yw+nõ0/v^^;W IwK"zoQJ<2" BnfR) _Wv6S<ڽ{ڝ<:=>C\_ Bٹd+^iJ(71M΢m ;}U3Ýr#yGx)He.0hL)) wT#g8̫*7Vfa%`+a ;Cn2yߝ|Ŀ-+?ɇsFs)-0P!Wԯ=hV'7AQ\9|.ӦWH16lutm'B\V1ԫckWCmDpNLق;nM8Χl}ݮ"_{J@px Z<@#0+%m%K6l9Eq]dk:iANǼ續㹓R"Zdn ddT+0+If7j_6#b@q1v[.1k_>+N1w;cV6ZyU \+ N3hQ`ϱ}FwzV5G.^D[ͪݚP%uBOF kE ߃^?RL>d Ǩ^ \o+E* HJ9z}=B5*OEAw9D heU!M+#4^,6Io,@͸f_FOfoWx+~YIihx*j D)K֒\VzsmhvD (xs.?9>3hOŵocr>=V ]]g>49\ceOiiaOU E-'I2 ma>1/ 펳.4XUPShQ:P;];O-ݑj\9k e 0ߙ#eUvnO}Rb90b%p=\FAv [%@(d#pR/(^Jjn;uZm r΂C =z:>9%RYs'adz獜py=O^URڪh?8m{imD[`8cEHA*_Ya*wR#Fޗ\ZOMXt ZeW9)isB.LUs/QN}fЂV՜ԧ=jc湵g]460dCL4{|Zq V"u1 1ʣc}=rZ7dIջr=r`PC퉡RaėYDc_xU2G,ThPg?V1xb\ n {}n+|o׆%F8h$so| )VT(8$4L;~dGy84i1n^>~, i ,"jOV HH~"E-V8$EϓR2 *z0\<|B"bR2[_5rkҬG6:t"7V$Qd)RsZiҫg])Kp+P-qTOMܭ90 @H즈l1df N GVpUzGTZmP .>!1FMJpNZzFFs fʾ?Ƥi'IʪH*u`Pʔm&kȑ3W}\S璉.z@y@1X͝@$)Td9\_ %R\T5Z`4-V,X98yx "Pqi8Bcd8ѯy@s[RHdĄqOH͕a¸'6 =!66W%"ڭ^ bBT\0Rics}&y\ &Tg eKzBL BZ(„2 3Kʸ'$Ul L (mb*Dnˏ| S#uV m,~48+{\Vc"m=tyNIe _PsޟD/\qމ˵a}/#^;8֚xnW&Z{}~+Ok2.y5aσT Hnd/-=r +!!"Hpe#ҲYEŰL{ܱF(Ϯ],ǣ6,Iz$6+F $t+C3A>9ќkp.̳9eFPUsD^I%"A xLt:6 }7 z(RNW8k؀-]`by =ͥzMx/XW8huYkOZ(QU *uKd;}VoͺUMͺ|Fn^R*ks xvA>n'ucBJ躒!E8)BZ鄑C{Z YC I0WL⏪ 7>Ic7>"McHb-t)%˃djZq}^.f/fnP4p"B[˄QOl|EEڲ+1e>D*P /BZ$2Hݥ[z 2L=Dxhĭf^@1l)Wo` dW^$2BzX+Ga޻Bu@~]<)h r 0$7G؜B)sD EKFf@Փ2B#L IV%hj}èB(1BfM[IYByU_3WxQl4ꫀhDiMzZ9s,:;~1*1\2EAȔ0Lv?g1 B nǛ"~$w7bdD|uiʤijjjx.hwq y"/9I$!ˉe%~g_e>iMN*eh.jQ#TC10mz:SO)#L WG+WX`ʸE@ mlniwQ Td+q2@=o?_kMj;޺/qd:'i+ɺ`'>xb8dW$qwf*kD@ e\ ݥ&qOH"L'4Y3ݸkB &qOH͵"L(㞐JkDP=!660{B*ml aBT\ {5oACkdZ`ЙaoWz\F$6q;.Hc2ppB%L?_wۂvرh(UZֻ-UB/iQL}{;GO^ݻXw{X)Vo;ϴ<*&Z ?],mkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/lato-bold-italic.woff0000664000175000017500000116742014664334534025666 0ustar carstencarstenwOFF GPOSt `GSUBD:(fZdOS/2Ѐ``k?cmap5j&&cvt lӵ{cؘcmFԝs!sy-rsya^o(3sy鍯5Y$/鷎W~=Fwfmݿݟ*lf[nЉVV=[3ouU~zZP󑖻_Z&V;Yym6ݵϷYl}ѮR6퇵_~v^#AǬS3Ԏ=[ni\O:ts;/Weog~w8`C>fh䰑_&tMjec,O~6>uBmSn2d{:~gn>f gL5ė`oZ%>ܑ |9>\Oh}dVyٕ/Ws9w#:-~U7HJgyKfm+ڽlȤ-AU:IDS" !q7|q,b!7` obXy\Vw9d*"`(?FLeQJj:y<̋Η<*Ox 0Pa<#aca< aLI03M4gy>]3lj̄xfٜ_Wx>s5x]Ę"#fp쒕1EnQWctĜ91?&MIcd1dEL6|>+1V>on/7Ĕs QS)F\k";T~1\K]Q2>Cc_a3!c8@r@4N'3 f "̂c|Vp{}>?W:1 X_(2bH! daa.K6s25 1緹$f-Ce2bCcu !1q5Dx'ĨkYFNG'Oq/c el(EW>K;WjVjk55j>^g 3jWmU2uY[=Ǖ^8rUUD׹p,[,:c8@h비(@k4AQ_ m ; ɨ/Zˢ%<[H> v^hW:C{@O>A@x`Ca Q0q888O\1>&dS)`4O3|YYL3 Lx{y^Y<_bM^+*\xq׸\{>#:\:\:\:\:\:\:\H ȷ6%+pE N2H:"z0FKēqId1KD|GO󹖮fWU^j^>_%ll5|[/j+%э`Eң. 9HfdCDk8f Yކe@gs!8 G(#f@j|ÃZ@[h<t.AwATx:2:2:2:2:2:2:?Ort9~'y3lvn{ p18'$8 g,\4H YmȖȅ<(1 .Fq7xP >ePP W\*PAlD@DC f:PA}hT n.5 p wA15xfp?X`Bpl o3yP >CB2uMpujQ!#! f:P an7Bch7A,Rc@[nٱFh M _VsKuR5ب(TC(+I&7ʝzߨMw@= &:tHWat FHa4VCɵ2茚1S"J~q= p\;JߕtϣϣBoq#\}WFٙ3=aۙqfQY^I3)L>C/_Nٍ޳ۋl/_:It֌1AQG`$g:s±fg803fl[3^Čf.~uױ_~;uQώSώSNRNRNRNRNRNRώSώSώSώSώSώSώSώSώ+~_Z~.k&~we~.~~NrE~x?\/>]ۯ3,XVg+볕le}>[YFTs֞ rt8zfW ĝvѮj)D(x5؃&OIx@c=ֈ-!h`"L0i4<t̄Y0^YBϪJ䴡I'eԗ=J@+d?a @G]-GLEc;RoKOIOߖ-=}[zho?Z[A k9++ ףHDIF&pA @Hr$ɩah m-rXg"%߈nCE!>Ak8=`0 0 x׎8h rq,'L1^~[ d d d xf%e  1r `!Mx X*a\*/wTa5tz{q-Wɯ IrFU(  WS Erؓ? '{%'S5R1F0LXջ/J"4AZܧ<{{{{(wD|%k0^2΂qrr"M[XZ"G-6G-C˭zYlCD[h˩ ɤ=T$*w;ʝDNr'QIT$*w;ʝDNr'QIT$*w;ʝDNr'QIT$*w;ʝDzb۰ V80pLzA3 06A{@G tnz50~ Tu:j@NZ'P Tu:AwC8 8p R4p 2"d˩Z .' ; 4sڮWsA2(*>SM Q 1?8fTA}h y nnIw[Lmp;h{'ǻ NN65xfp?;O`5|5U/9nhkU ~ri]^~8#pq8'i8gyip2! ..C6@\nʃ| '&^d@ x| @KMeP!3UUס Aʗ^6Gȷ͑`3B 9[7rl M&( ;!Xvb 614؛ *9K_kGGԾrz ujT[鹯"]^R8YwpZΚM]̙ }E=zІfjY*"5ԭsԭԭ4:F'"WUP'GD|? gV%{{w{w{=ɽɽ6fwi=zXc zZVs7q۸O7w 3f|3cn.fob3fbvf ;0C|cua"3 3evn;U^Aϡp;f\=gSK]\Vؗ4 M}mE>x_OC~'+y)˵:"z?0fMV&33kKX'Ugf8Q<Ϻԥoo`}~f}Qy:Ry:Qy:Qy:D5"0 gހ+Oa- e-Z֜Usn9źgY[kwv7?&,/nϸce{2uPOKd*wrvQcQ=B̬3k1Fj*eYhh Cea8Y2BJ|k W .Ry̜&oل;Q-Lga6e rQNF3_.%v3n`UfFg4F<ƈQ(E!e #gF>G2#~FV!oe2gFwih`TmʨΨ:avR6C#e1yFHIFHg#H|祌Z:|J*\sv5P*8´Ob.8+Y,mm}!93krRYř9;D>Sgq r#j7/oăx Dsb <4g WUxJ1Z 73 mbCG񤡓c̱ GF`1GXe!fƊq0Y4L}kAaOP'( }>AaOP'(B YpAz =\ Az =\jSFWFWFWFW&.j{' iɴddZCa 3~'hc)^LC# ]ɄQdB[2 p3n =L 1hݦO=Vky<ܛ'1i6ZdgG5G8gr'8b<#~y/}6.KR8T<CP8R<#H8R<#H8R<,pk =Έۃ88N<88N<88N<8dqAƝ<{o/q\yW~-}3k]^zq'# $lmC9~pvZg3N g993:s(mu?:g륝=ZX w0#f2'2k} ַsCĝIwטܘ:n`癩j ֘ZؘZؘZؘU}]pD0Wr19X%tǁz"0s '1cKE+f*<,XDZqZ885cX885cƭX89ucX89ucX89;kŝZqgw;[ǝmVrgY+UZwq#q!88GCq#q!88盦ARmWf0b0`Xȏ̶tVģ:sn8puD1goCcx'#q՜>:xes1lTUUVWYFOq khz{o{-܏u?p}EO?{όam#1m_חPb"LDs"י>gf>>g"LY"nCzt vo}n9ݥtvN۝G[MF`*<:t SǛ~"oC"OJ~LXK:'ȅDr!\H4撵 pla60[_k^́ghj60cmpVp !00FhH10x`>.1!oCzt~֣G[oC߆t ~6mHې!oC߆tM.OK '?#dɊŬ^҉^F__Sد۷~9?yzWed.ٗX8+DՆ<ş =m&s(dZPmz[].{Ew߻].{Ew߻].{Ew߻].{Ew߻ēzwe `!Mx X>`(c?[\;ƍ`܈Ŭ*Ow].EwEldY̊yX1/nv`,6퀝 v  p18'$8 g,T8 !.B&d%eȆP=T!J :TA5H'"d>|7o䳿g&M>|q;>nJS<)km x3x*]\Qq-'!NʁL)r8<; I&M![m)b`a˲Ȗ>+{<9LFVUd[QzZE8xEObCe4^.3trt =dCO8~LQz:r,{GnQS"[>ނ%򛨥ߖD \$ `*LY1Os|<1</,k^2sx>2GB?8@M#d/\ xOhZLI<~ŦUO֧'#V2o9nmJ%ײT'=R;K!RȾ/J]%RȾdU/K1&Ƶrq,2~q#5|[X2بsUXJHXJ+ ٨ ٨ f@3}>Lh4f@3}>Lh40&$ o`*Le YWB֕u%d] YWB֕u%d] Yg%duVJY:+Yg%duVJY:+Yg%duVJY:+Y1JHXG1|a | ka|_2hlmVJY6+f%۬dlmVJY6+f%۬dlm6F6f#ldlm6F6f#ldlm6F6f#ld[ vl[!:Qs-l+YG iUdJUedXu UFvȮ uO6UMedyzX\kԵlZ6u-VE]˦eSײkUԵlZ6u-M]˦eSײkԵ*Z6u-M]e-njȚu2@Ȕ Sdy+sJW |_)ηsv_)W RJ}%_||ePʹ\+v?)Ov'I~R\O.'gI ~RO'sɹZ~rOαBsa?d~2?)O ?)O ?)O ď?~O?'~ď7~O?q'nč7~O?q'nč7~O?q'nč7~O?'^ċx/~O|$?O|$?O|$?O|$?O|$?O|$?OJ?)OJ?)OJ?)OJ?)OJĆ~bOl ?'6Ć~bOl ?'6Ć~bO?'vĎ;~bO?'vĎ;~bO?'vĎ;~r?~Cq>RM24u̺DVQd/dlMN|$D&ы.YL] ^o++[IԘfDm$zVBMD$Pcgof&!fRL0+33Bfbլ̦ٸܶ1+Ett2"fc&v܄ju\((V7'Ja79ĕ.&M\1+&&V(.z1.} ],$bYҙi֥ٜY2P*P*p$簆#49rtG&÷|l+lH&."师IE"V\ʚ师u/gq+.bpt"H!qt"H!qt"%s\?%s\?%s\?%s\?%s\?%s\?%s~ dwA;~$dwNI;~'$dwNI;~'$dwNI;~'oE%V4*d췢;PO'ߊ:OPP{J[m3tkF1/\ Xp .`,\ Xp .`,\ 2p \ 2p \ 2p \ 2p \ 2p \ 2p \ 䈗(.;|:KdJ&(_%߶j_Qlq}LeJG~P뿯p/Ftt: jVAøa\Sq=a8F ]wqs%2,F*TQ*UTJURE*Q*QQJPQjTjJPQJPQM,5CE5*Q*5CfTըFE5*QQjTTըFE5*QQjTTըFe7mDt#MR+߲m -%n1! >eiDڇe;b_ɩD~@'r;VkZ&Q GQ<-O22rG!9#|헠XղsKO6ĸ-$sQQn8 +SNRcI{xGh|h|h|h|h|h|h|h|h|h|h|h|atz zkC/Ecz97q4}?Yɫ=?^EY^EY^EY^EY^EY^EY^EY^EY^EY^EY^EY^EY^EY(eUJU*QV%ʪDYľW*b_E쫈}"UľW*b_E쫈}"UľW*b_E쫈}"U_e^)gp*p*a1:Kq*ܿ x>Igq"\/p"\/p"\/_E~_E׷\߂[p} o-׷\߂[p} o-׷\߂[p} o- t>ib ٢<yVECWyWϭq~ k.kJ E҃'9Kr&}e1*wr'vn'~y<_׸!t+D(8]%}%g1Yҝ(݉ҝ܉ʝ܉ʝ܉ʝ܉ʝ܉ʝ܉ʝ܁܁܁܁܁܁܁܁܁܁܁܁܁<ʃ<ʃ<ʃ<ʃ<DX4m }=V!yռFԴs]g`2˖Wڵ'9M!>{tvB-F-->Ed􃌾Ņĩl ]8r;2q;*`Ξ'1TbXBWH _!+$~įBWH _!+$~į,`'Kp.T R\*Kp.T R\*Kp.Tōq7]ܸwq.nōq7]ܸwq.nōq7]ܸwq.n4|H< 6 ޡxQeiԋ vpqu MY[kE9^E9^E9^E9^E9^E9^E9^E9A9A9A9A9A9A9A9A9A9A9A9A973_5^J~jUWrYYx;++d}57"*+*+*+*+*+*+*+I{qa a0F0FhH100&Da <Sa^XNuMuHUBU}ME}hH5@5L5}R$A+Ȋh*J }L9jqB}OONUSqdRa|b>VNJX1+c|b>VNJX1+dłX bAV,ȊY +dłX bAV,ȊY +dłX bAV,ȊY +dłh픣rSvN9)G;hU}UȪbUǰsXWX4Vu+:}N Y$d}A>H Y$d}A>H Y$d}A>(FE5Qͤez1)&*ZLDjE%:q:q"BZM/&:DbSLtN1)&:DbSֹ YNۣp 8 N8 h?]f\ށ}້zv\\ p\5WUqt\B.ܦh(%z9Dg"^}uj5 U? W~^{g>_x< Uf,T*PeBY2 Uf,T*PeBY2 Uf,T*PeBY2 UfBTY* Qe!,DUBB.B.B.B.B.B.B.B.B.B.B.B.ݟ-{lN'w#^ގxBPl оk7M)AS4}%LMCF- U{=jAx̻blU/| qЀli7@#}#xTi5$}negso;xݝ8|)^ȑfd9=dCl53Y@ЫD8*!/GүD H7GוrɌH?52kB пD U>uJ%du"/*RZ8Fc3KWTY5Ǐ¨EQ8QCxPeuGZKduYÎ-f,ѲH7M XjS$e+U7a` ?mbLcd4ԬxRlͅ䵬u5f̚}c@暃[%:VAPjPѫz64UzC 5~S{0"4cS?f%?zbXX1ƧUR V Qb&ZHrw؇;2fa3yQeNQon@4[fYr:r 0ᷚv:⯿OU3vyяu'mev>a dQ2FFQ̱J=-w̭-c47E#MէGw_eYe)W*յ.ePmwCt}h壒fe©B4.hvX\݌^%bt/#1uF,a"M͌b"}53N\ǵVd5gfETV&F16V㠸H$J0R5#|\T=Bmd*d38G?ct-Y0u2|>H>F${ "YU߮dpbP^{c#)hU9"LWE!PA%'>[^b[Ep~po2 ԎiV03γ̨3@}Ŭ>̬e3󆾢.{jk̞ff;/RfT*ɿ̦Kw3ȻM]D'y7YeN2Gȿ,f&w󙃢9K}Lbdk\w9w;H*ϋxw"$w B"*JD:CtD V݆PJV}^JY#*楊SŪb!FF*U,D Q^+4*ZM 1v$=)zSwq-.iPݏswiiF"#1ϰCIVg.Hf|!e  Bzs1 YMBVS!CTj4G᪨KĿ/fF@ZvdSh@4 ۊZ dE\Bf,"3X~ _/塀H!魨w9}.GG:3c{E(vJ]y HG@UMU[iEYq+((,"J.{p=\e˞\vBpҫh^EwV+QJ,c%Y PCUoPqWY_s<-mYxm'Y͊eEWSV3V3Vd1+Y̊"H9*+**"*s׋ѧOw}>] kVѤ&U4IPѤVǾ-q?7w$I3q ztM9~b!>4n˹[|U9wUάhMOm ZL\3q *H9 6g y8z4>e&ܝrwVʝ8';S;yk;"3/g̸Ft5 EC'Йc]Y7+ԼGah]RT%\g;:}+wBG[hE~.6ǝhĝwN\ J+z=Dh#ϱ( ΡK(lG]STTw8fꐕ$ع;w#&!6emʸǝb'& 1Q~fA\\܉;s'vNL܉;N*X4`ZϥC&dv3|7ȥNP~+BhSPmn*XZ T\SMm"H6tT gU|up6u+٨Z6wF%QlTUUUUUFQElTUFDx"F就s6V&zp_`eD=z.:.5꯿ATKj QUh9-'H wӮ8bX*YH4ˉf9,'Dh*DSA!tJQ^fe&}nct#{(6ѕ|V48[ .*PżYk= 1|}t_ص_NWWŷ兿oت;xu1.ե LNf|ȵq_8{u-<3^͌WgWuyx~m}b˼%\vNǿ| ϚX)#W~\hȨAF XȈZV>-"X+ga,1O1f c c־1dLU1K75v=CNb幏=D<ڠ(h#f3b6##M\aĨXc F1R;wis~p.Vb%s!}o؆oőnvFKao#v{; K_䛗o\qWDi}ܺ@n] .[ȭ rKh&g*\>%2]tzAox@_a<qa a0F0FhH10,,7-X K`V,ev{;G*NJtiC/KXE\i"O~/Et/fk {LZҽͧ{^tkn"܂?H[f;",hkZB/_wɥh c:䉈nr^DOy >bD?$?P>6Z>$4?9KU/dqz6F 6f-˗"70N{y9/EΧL9|.2Ry|QO&S-ɲMt,wH#.2<yEǡ&qpDGxA*U vDUls8.cKmX]Xeyu_>~p18ϋ+uϘl>_/\qsN_ή CbTxn 9<-%<o;5wjmtN@Wݡ!c/ yi\cd 2qi?qL3 `6$O_W`̅Wa|X Xo[Rxr/v0 +*{}>OW: X_(z/vw5~#dV>e&!@]4 7-]vNa}Cp sq8'i8gyip2! ..C6"5Aꚣ4ԐPCM"-cN.}'iIQT@Q6QAQǣ(xT](e+P٤MHֲ EP@L&$dIhHC$3Ʉ6%==\=W=>3I&}g̭~wV[}w?鲡l:Ά汭a{P6Tk4׀]7P=6T cCP=6T cCP=6T ĆoCPlP]6ԯl *kCPlgl 6T cC- s P6P]66 Æ:Ю:~KͷRԫ-u괧RT= 7Lll8SS:{OT{ў걧z%`OS={|{Ξ -{jĞ:sbOiOiOeOeO9Sn^SE~^>i&mWmɮZ7vU]Ȯ+ή:j]UgWUo]UgWUuvU]UgWUuv[ ꭿsWUuvU]UgWUuvU]UgWUuv"ή:ή:ή:ή:ή쪺[-[:jvEvU߹FѮjFѮjFѮjFѮjFѮjFGiowTQvGowTQyTG婎SN쪩S:*OuT`0y6Dy;%ExW,{ȗ(oW<3qHpd;UWS:pNϝN8gl8esz>fO_Wu[W v?^VG{"u/F')};#}5 ;w3уͣ}8qpiWk>|Wm_ѷ}E|Wb_ቯZwj=<-gf[᭑•2_ z* j|_{{ᰯ>UoLcEv>>=&sѽ&}81zcK3Ϥg3Y}!جf P.\?׏7Gg׏/ea5{Ě}p_YcO^8^7_V&SН.^ /A VX-Rc2uwwww a̾Y!<݊0vdwk>}J^3w|kz^{ִ`GuS„ `Ub7>׷~utS=9vx/7W;n ^o^os_ϨU<޻nサu+`& bwO<+"_— :H`o `89PSB\Z5> nĒ.ǽ{Dߢ */א_mU]SG7z/5Iז @>|4;Vo&ȇ¥lVakGddk߅D>m?DvvpT.)O3.N?υ-]]~7ݱ[OV*pEpY<x~xmdF"\">0YqdY)AׯbzxŌb\vV\>[Qy:sbmw;Lxp>]kOG=J|5|2TنUw.\6Wx7śȣyNNGÕʮʕÞ!m# P1\<) N*aɞ /T6O:v}p>>y;Ϩ]ٰyœwu~pQɯOOqZ<鷰.\Vjުo |{>]U9!~Hq q8? 8SqrXOs[uZpZ}W{yW{y^^}j97\u.t"󗄿]UFnz.`kȜIU]fE䞪D 5{SU˭tCTpZU:x*rY[r.e^s烟*Gy뽿!;ȯF"+ܻFߍPpoSߎȽW'rLA9 X}plf7Nwn=ANl\}mV?C#;TG(V?YgbώݸSc<8 z^D6GOW(DDq. p!..,^ Wb&ը5z܀qn-W5n3]>ƻ1 b6`.>܏_>GxSxa2ځNr:~G\}\*986F{Q@QD (cc Κ[|fĚ#|-r?fʚ"߬zdҿ.]ۑYW||.w >8 ?8?ďcp48'8'b*N)NK5?i8?43qW[ykCԜ1B\ \Kq.%L\Qkp- [7jnr_/ߵVoï:v|_wo >TsO}o59&k>܏ ØG(xOwx Oc _y<^B /%:,+!z,,E*lUAХ^upqjjiiQ㺩ެYL)[V> [m(>mTlʲkʊ[SS4CSZ)+# F Oqݬn()\i v$w hS j+#ذb?M\YÜ?2\W*Nq냏6x>a',/L~%hU9ءpeq&9sq}X_}n []o-pvSwn܋٘.\ݣG ߎvl-߈chY9$SAc[l#v s u3%5~ׄii׀k@5 v H]Үi׀kK—沰C=a:5e݆ӨS^)].6E"\w[,.>lvFvw85lkݮawk?Do6]pCd _s͛_ uMW|Cp UIakᴊS]隘*BI=nˮit0+:Dc*<+5qX X|*% OTæ!Sa֤Ut`oL}?_ ߚˆ>LU]Z\kqnx /X x vg9ݰ; _ĿK2WU셽5}}7-6{Mx`|Ouj3p&9sq^Z p!.. Wb&ը5RGKEwQ~GEwQd4Gi"Ӫg`:1s1oT?0{#x4樒vTI;UҎ*iGJQs*iGJQ%vTI;UҎ*iGJQ%vTI;UҎ*iGJQ%vTI;UҎ*iGJQ%vTI;UҎ*:<먲QeRG*KU:,_$LFE `3>n;3n;3n;3n;3n;3n;3ti [j2bù5ŰicǗ)5)>8JWN86]@đѪqcoEj`췥p#-)aodQPBGZGkn(Tv6I’_Oeޥ̻tWOâR]Uy`W5ݥtR]jKMwUMwsyΟ\ea?﹯wroVN`A'?׾x c5w|x'0v_*|=89 <#|9 Fl "ϧI^)U.+v{NsW>lg> i}ww}}o}Ko~.o~?GO6mړgrF˴'tק]5+s=Gs=~ϕu?8{ٻkO}1{'gn6uOfo՜֜9vs.S;9msu9o)y{Vs?=_tys;}sg͝;ѹĜ v-}{ޤy[i?Moy{t^|^˼5m}msr7}W(_}k[ݿ6`>p>x=6IO\/OϼnW˿+=G#@#0`oG#ȹy8?,n=뻵w+n0'MNB3?iGhcqYgwgݝvw`pYO<`3e6_WWxOR98o8e9Kq.%L\:ݯigv~v-? +'Xiv{Y W鉿tcx䊱GOZ |P 4@o| l| #[:Hl *6O3asd4.{NB+}g[#Úa و!6腬V8^+d+ U? يCUG5![Y1=lu(\ZqS_CU1SS\l]Q7{m2bG?.x2\[;/*|i_}<&+~I WV<.X *^W|1F}N5GECP4氽"LH7V*ޗSV{>>=_fFE{^S~RQ|,NQΊoS+Fa2VFʚpIfxd¶  WTn_:hrmT<8=rGjy^0SyzG>PeKvծio ].:=?}lKqÕkVժVVn0|R6N*̤f5YVe'yza8džM 7L>LOxå?(8b+Z-;=\5qr˾.3 Vri #"a[UEXWUtRuVe5^Ve5^Ve5^Ve5^Ve5^Ve5^Ve5^jIp|U>8Ae^Ve^Ve^Ve^VevzYzYzYzYzYzYzYzYzYzYzY^zY^zYzYu^.~dzx<^B /%:,+!z,,E*ݲz+@3ZH"6VB;:Љ^k{ZFjZ¶2T-s~=oc`4Tk*1 QjDQ) 9>+>Jʚ4c8 gs0<"\_\p9/q%f*\Z\ka? No>orz3n ¯q; ݘ{[g>B3g5# X?EQEx1QXh@#^Ea-`MY^zZzZzZzZzZS5r|)vqJ `3|(ll)[ð%lcO˦<Ӧ^7dn6LNYnج)ĺks0jf~Ga{OzާK``scY1?nǭdǬOm>3q˜s0y;a_ q.Q2\+K\ WVy\k,u=x/F׸JzUfI:iQ'Iuq%x*eJiT)1W)M*I4 Gyy!V,eEŋ^%O& Ҫ\Q.Ɋ%RrMabӄ7;mqHVEsrE&V5KUMYQsv_:=nJJ؊7| cC$OyET"S|b'|V*fӬ|NR>'U}*(T$A TbzUY*=U5ar,|E!2ԤRBje +J)V(fD)-WJ+*S9+=tjVZ*jJ&SQ1SQW %URJj*j*jjEmeހeyzE}fbآZ*IuP]+*R^a|+,W׶r8vXQ5Sc+Xb_-yj¤:K:KĤ~a8džIwm xSk1֠֎QkPkI֬bj-ZbroB_)b[NQlKmb[ؒU뫔O|Owq0s#C?Ƒ8 Gp<~p"dT tpY8`:΅V p!.]_8Jjg-7F iR&iR&iR&iRY|jMoUO٪7+ճz]UCgU(xMؤMؤMؤMؤM]UlR&UlR&UlR&UlR&UlR&UlR&UlR&UlR&UlR&UlR&Ulr6MnئITI>!>SqNOq Np>P} 6 ݘ{^<#x z\rZWj^-׫z\rZ~9rZWj^-׫z\rZWjuZWj^-׫z\rZZZZZZZZZZZZZZZ>Y-rL-rL-rL-rL-rL-zWqWqg< >݃=y7張rC9t P{O=GxQ*z1J-0j:jUM'tRM'tRM'tRM'tRM'tRM'tLMtLMtLMtLMtLMtLMtLMAj:cj:cj:cj:cj:cj:cj:cj:cj:cj:cj:cj:t,zn=NgcwuRY'u2CNUru\]/Wru\]/Wru\]uݢ[unnTǫuݢ[unQ-E]uݢ[unQ-E]uݢ[unQ-E]uݢ[unQ-E]넺N넺N넺N넺N넺N넺N넺N넺N넺N넺N넺^z^Y]7fuݬunn r*uj{^/yEQ) > G5J|/7}/oaص5@|c])#C?=Ū~_Ū~_Ū~_ŪA7UߠT}oP A/ST2UL/ST2UL/ST2UL/ST2UL/ST2UL/ST2UL/S7z&7܊+܉.܍Y\<~<| gLyNg p!.%jR\q~+1Wj [-3RMMN<}_joeGb\3o09q`& f fz>JRYU'Vg? 畔O)VRS?S#{xtOSU?7a?V?3qbrߦT??c/P?[g~ϱQg's*6ߦJoT*Y7xy|cJqoI̺ A7*fRT U7(aTg}OoUUcUQ}zySخꓪ>3~_T7UZU4q_eR'T}Z7__S۩UUߦ_y~T_ꗨFUT7OoV+&\T*UJկRIU^էT*U߬ꗪ_T}oUUU\կR-UշO~OaUQYկR U?vhoVY/WIUߠ3mі7 EQCѧ}J'}vQ0>awڋ?wZ:%[+}oU}Fg}Vѿ賊>nRѯT[NܿTMQѿ賊>3>S~gskێPK'{?V۩OMڨ_f&ͨ?QͯTq5V)5p'|b\f|Fg|Fg|Fgo%/uJg|Fg|fwV_U;ij~5Y)((((((((((((((lrtf3J>3J>7( J~ߠ7( J~ߠ7( J~k|Q5JFɗ|Q5JF(%_k|oP JA7(%ߠ|oP JA7(%U JA7(%ߠ|oP JA7(%Z7(%ߠ|oP JA7OnTJQ7*7oTJQ7s8䇕|oTJJ~W%&%BA俧JK?wSY%i%RY%UY%U%UY%UY%UY%UY%U%߸_x7f^<܇~*Y7f߬U|oV*Y7ߦT|oSm*-BP9qyoSm*Mŷ6ߦT|oSm*Mŷ6ߦT|oSm*Mŷ6ߦT|oSm*Mŷ6ߦ'LÿO8w | :[U|ZŧU|ZŧU|ZŧJgpXa?U?ʻIy7)&ݤwnRMʻIy7)&ݤwnRMʻIy7)&ݤwnRMʻIy7)fݬwnVʻYy7+fݢ[wnQ-ʻEy(ݢ[wnQ-ʻEy(ݢ[wnQ-ʻEy(ݢS;wJywJywJywJywJywJywJywJySp3{K彥Ryow/ܵ&\W*N)EL)**VRʻFygwFygwFyg}*>O++gT*ŝQ-{퍊'ҭkw>t %@I/Pq%Wq%Wq%W B%PI/Rq% *zDE=*:*zDE/P#*:S*:S R[|M<{fx3 7c+\r*7nv}[ݶmpx}YUzU vQ7)ڛmZю(EW#vD.RÊ5XGk}䟂hgUqUPU(ʑaT*SaFr~<|520VwWtJX bD]e1,Fň+¤ FM bDAzTq0V qpZQ#`DA\B[ -uڏ[#}E_kZ}E_kZ}E_kZk-Z֢k-Z֢k-Z֢k-Z֢k-Z֢{,Z֢{,Z֢k-Z֢k-֢k-֢EK֢?Ԣ?Ԣ?jN//N/rG{"[X ,s\`y.<X ,s幠ea^A qc1`)ЈWфXтhE0nuƭθ:Vg[ ΅VBs8Zq3nq-θ8g[q3nq-θ8؀1wa8g[q3nqƣ Ec|; хBkt5BZ Ѕ/G_ininic}?wY#戅9baX#u9b]X#u9b]X#e9bY-˸e,eܲ[q2nY-˸e,eܲG/ĕp5jq u7F܄q nm~qopn½9y<1z1<'$~4^>lZ3!88G~#q18x'DLI8?)8p:~i80F,X#ňe1bYX#ňe1bYX#ňe1bYX#ňe1bYvAEn[AEn[AEn[AEn[AEn[AEn3zXÏւwg8{ǧo3r'#yap _[^Ā3ٯ^cLggi -|9r[=9v.K{%a&r]'ɳk_wD@W,Ў|vKv}pxpQPL``}NC.gÆs]_;׆냽nYpqǗ(W|WGVLIڊS<}Wߨ:\?vke+}p ]0?q$88. 4ػzR*>Tsq\\>^}n o͸6|7 w^<<l[8~wjl=vDZ0B[WWM()'.]]c5.=;:߉u K}*,UX꫰WaR_N_Ns>|,Y>|g9sYv,;T\7a&߄ivڿoivڿo';ߜjvںn;mN6نcxl's';jfUYv,j]5ˮeWͲfRlY,[j-5˖eKͲfRlY,[j-5˖eKͲfRlY,{T{T\\&a$lMi6M¦I4 &a$완=gLžI3 {&a$완=gLžI3 {&a$옄cvLŽI06L it.Kj.vKit-vKit-vKit+JOit+Jit+Jit:Ju*9[%glUrJViUZmV[NiSZ픱ݶwdQӎj_rDm+Ӿ/:NӾ/:NӦ)::mNӦ):mNӦ):mNӦ):mN{^:=wNNNi &-#7EwzLX9I._^KU.\n]nK%̬÷"{g\%]2m 1{^c#ƈe'"_ | ~1 ?\㲭.-.dzǐpevvU.R^:l)/{"o{u&>Go}LEQZހ/p;۝YY--Y4ow;\Zco73Ur@dp>25زjװ東Ƀ G[7]T#S&]ˑlNs^n`P5v׌s/K? ƿƇz{w] 넣gggoGXrssssssssss _ǿ&m`="qa!~Hq qjG'>p"$Sp*~p:~i8g,6tO|-w:.h(/pIX.eW3qF^kpcp}ƺ n |wֻ G305|"k"&x4Qc8 >NV꫘> OU*u[kVݞ?۝p?xcHXfI6n ;&o&'Eο ˰+Zǎ}asa{-u: hZg=|8]b6`.a ~g?y?EQEx1QXh@#^EhF V)gmȆ}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj} (j0}x?6A|[`Kl# aW3j]Ͱv51l1l1lE}b78g =|{ao| W|@}Cq~G1Q8XNJcEԱ"S8ND'QljDq"8u,>",>",>",>",>",>",}l\}!<#x <)<=x<^B /%:,+!z,,E* ˱ 4+ъ$RH d gkX.n 8&FD/ѱ.(A1pct6FFkjTgT*Q3|FϨU>gCa_[օ%+ϊ>+o)~Y1l-H;+cuy1#99Fe#99F1rg<#9c}T \`#F.0r \f2#0;ypº9a1.fQeYwuGYwu [`Ae<nus;Ⱥ;ʺ1Xyeܱǧ}[EEZyq^COg22:]Ǽwcu̻y0dAdAdA]̸w1.fŌq3b]̸91nqsc7Ǹ91nqsc7Ǹ91nqsc7Ǹ91nqscwqGwqsc7Ǹy3nqg7Ǹ91nqsc7Ǹ91nqsc7Ǹ91nqsjB {q{q{q{7ϸy3nqg<2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2nqsc7Ǹ91nqsc7Ǹ91nqsc7Ǹ91nqsc2(2(2(2(2(2nq[d"ȸE-2nq [`-0nq [`-0nq [`-0nq [`-0nq [`-0nqˌ[f2̸e-3nqˌ[f2̸e-3nqˌ[f2̸e`}qaw}qaww#ndAdAdAdAdAdAdAdAdQ1nqsc̸e-3nq5A%kL–lfy7zM v X.pAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAd&E.p,\d" Y,\d" p? Yg,ײZdAb!b!b!b!bMxxDwhMܡ4q_zxeQPTNomEg!h6i,]`,]dD K K K K KD'nǫ&:EdA.2 S2 S2{j8A.p~q~8GhcqAAAA/bP]  aB`!l6l-z aBX_Y +-JKaRXi)VZ + XcxD(X `A,Q D(X `A,Q D(X `A,Q D(X `A-QoĠ1hA ZĠ1hA ZĠ1hA ZĠ1hA ZĠًDт(ZE hA-Q Dт(ZE hA-Q Dт(ZE hA-Q Dт(ZE hA-Q Dт(ZE hA-~ ߂ -~ ߂ -~ ߂ - oA[DoA[DoA[Z bւXkA Zk-Z bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,fhAuye%l6Z VF+aJh%l6]uyٿʼn[K_bؿ%/K_b?)OSb?)OSb?)OSb?)OSbay&K_b[ŋ?/ bwwwww?'4x[7ȿȗ®^᫑tkNqzCv`Er>Y7FN Gпɭ%d LZ>`tXdn,E|[_RA"HY) e,ERA":,ح㷔s@/R@j5R@5PV,bXd"+YȊEV,bXd"+YȊEV,bXd"+YȊEV,bXd"+Y[KXb+XĊ%V,bKXb+XĊ%V,bKXb+XĊ%V,bKXb+XĊ%V,bKXb+X1Ŋ)VLbSb+X1Ŋ)VLbSb+Xq +a5װV\Ê%V,bKXb+ߒ=888888%V,bKXb+XĊ%V,bKXb+XĊ%V,bKXb+XĊ%V,bK888888V,b X`+XV`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`Vg~Vg~Vg~Vg~Vg~Vg~Vg~Vg~Vg~Vg~Vg~VLbBWwN]ݩ;uucޔ`c.g匹13r\Θs9c.g:cΘ3:cΘYbcĘ%g~g~gR1gjZ>jYF,ZVP-+T eղjYAZVP-+>jZ>j7V[? Q1MŮGxl3H6]_f-k37hK  F֛BE'= qahD{f>7cSz7:3ޕՙNKfX\xާ8n ,d8M `B]D7齆 K^ax0V,5 6Nw43辑o_23s3gߙ'ߓμg"ε\".\*yqiuq;saz̑=oj樂9hs?s0| ¸pnP7 pCPv !nȃr0XjX;6'ҟB ?ю8q>b>:|gb'J?;a>?bx?~uddO| !|"I?#?5\Do|1F+\{,mrv"fFWqZĘv?hލ/PfFx#AT"0vaa~qG˨Z9e=Dw{uQ)F~8ݖaNfhJ;N]xD1ZʱL~omx;3ϚKO G߁N3نe1o-ír3UL0St x?feyqU3ghj9pUoU%TKZ/PP"MLC%*pc$f.f~#3Лٿx+pe+qx8Y3L9,yE&l=jQ?A-b]2Oa.dfviS|QG#Ŋ29!/#;2"$ʳV!B@jѠE@Sf$O$N' Y'Nkrq:ϐ%j ~5_WU/~Ջ_WU7~Ս_uWU/~у_t0~1_ C/abńab/^ɋ_C0~/a:%4;3\.aO^ڙ89;= <sx1g E~m|e ~1_ ?x@70L ^\t ^`y|P5ka8 F(8+aLfn\ n)0G`ΐ/`0 3`&<!xU֙_Z,'O'ɓrd9yjjx>K߼7/O* SN2SA~r^p }*BpRT'U H!Azz:NfW =_~:{U+?f.?AO't ]~.?A Ww W>r쾅^e 2zJju0&na;t!d~Gz+ud |+[$-T*I JB%qRIT'I%qRIT'I%qRIT'I%qRIT'I%qRIT'I%qRIT'I%qRIT'I%qRIT'$H% RId 8H&d 8H&2B&VdbL2B&V XD&V X!+dd 8H&d 8H&d 8H&d 8? OЁ't :x3wx=_n3'7Η3]k`8Yd,2o7ȍ;xfH&i$)-g#f dl17\ڷ@S=/C.wtu/<7 1_i$U*IJ_%鯒WI$UR"E5,Z#ʮEم(cvs;8!iDz lDpLld& MpD@V~+Ilf&;ƧdO9?'@/i:%sI\:%Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'-qhi)EVl 2VA/8D4ۍFv#y'5Do^\x2'&FȢaV&ppkB "ҾѯN]ӰLGx."1V!"ΠR g?C\\߯'s2Qxߟs'5{d=a̕FH!)d~]A 0sθ^Y t}9IfHv;}&>7/3_`:X=;8y B8J`+l pvm| yn@688NS` ?9ۈMl#۵vmd6]ٮlFk#۵YJ}~kq d$cDFj-EM(9z'V(\τ}xdG2\ dPN-F,y eO:'v({c/u쥔,lߑozSc {=<*̣<*FVnղ2pGW9} 6?]UΨwܭk;#)a$dB_cv\*`'YX:T9D\S{Y=g i]"U[VG=l=pVܳ#qVkZqVkZqVܭwkZqVܭwkZqV[8s88GFkZV+ՊkZV+ՊkZV+ՊkZOKDы8oXLH36JsT'~wQy݌|,z3kÌ?[Fh16ۘ#16ۘocm̿I }eaqx3xzxGkwwuq{G<=NkVob~o[jBW 5_+|PjBW 5_+|PjBW 5_+|PjBW 5_+|PtP: CP0T: CP0T: C Ty2BTeJ?v:@3hIwڧIm+~گPjBW _+~@3P u_+}PBSu N):ZPjBSu N):ZPjBSut*JGt*JGt*JGt*JGt*JGt*JGt*JGt*JGt*JGt*JGRՖXvC;쁽 nM~VQ?U*gYE~V------kKWSnݨo/w\ӃCDI%QR6S,>%A[ptjWV+?7%# >gx1VF$y?O_?~?~[+I_A:[o>*m7[ڵ5<#Ktҟ *.x[=gQfL:,hG3\7e%)Q%~tEdh5t鳆ܷ?KYz/E^]ҡߧ:JIw>>oz|jq['GuEtw~,]#*o"EWC?zQX<3/?8f{9of_j^&UHl/=~vtU7?eX_1~fO+ӊt/5G]W\̈́[[Q۵OG3VFVZm]#K՝!iƘ϶jytUz}k歴[]YO{~mOTĞQG+{*KkL~n0bbkwfP:]Jm~S6쒭"VTT4&3l0}-=o` !Ӌl h3Z0h3Z0h3Z0h3Z0h3ƌ0h3ƌA;ryL~+X 5mfl =qxހ&o;l^/90X7xa"Lp 00 dnýp3b^7`> o ,к> ΆkZ'ܾm6(X(<B(t> B(t> B(t> G(4|BQh> G(4|BQh> G(4|BQh> G(t% ]BWЕ(t% ]BWЕ(tuj0G1x9$<O3,̅yx^exI;`'Dv"N؉;`'Dv"N؉;`'ۉeD2"`XF,#ˈeD2"`XF,#ˈeD2"`GyD@GyD@GyD@GyD@GyD@GyD@-+{DT_ړ(=NC~An\]gYUֵa <Oxxs</K2h92*„8ѵRU_ q!"[xk"bS8G(BD5uxÛ deG}G}G}G}G}G}G}G}G}G}G}G}G}}}}}1>Xkcc}1>Xkcc}1>Xkcc}LVZ7~쟼*k?5I]Bn+!3j1^Σպkr<}U *XA2f2wϋ=eJ,2fE; 9>t}ݏۇȀPYo/pz8#} f{ ~'$')}S47ǜ`?gFZ0U_M;! z2S MF*4A̶U/&wƾvvj{w: k7HQ3L%#2~*CXƵ0Hd2-2p41Ad>m\Ʋɘ9S6ˠ\P BLz,&8.!K.ÁUTJ}˪XoJb) ݦ =Vcfhw<̏F}2,n0ѯo+~sXe~>Wod ?xQ.xr9kw`5FNzYhݍ'u7ZwʔT,SI۵z9t,CŹh>Aϡ4Mh.4?ߋ?B/5h^t-z? ?C{.zsK}5G6Lm%Ts;$?0̶l~aed8k&N'k8)qxBd~Wƌgډ~Fܒ[֭M;:q`Z F:~HW0utsHF;DoF;Z@F;Z_.`m?FHc1ҁa1FڏH{3ތp-Z}ŌnW1Dr|AmIrqD\'ꉸD\=Wl"D[@ى8;Gqv"[NՓEBz!Vlڊ+غBnW&;d'$ꉨ$UODQDT=UODQˉz"j!hZ@4-`ꉢz('EIh3(Eˉz(*&";QTOEˉDrrrro "j9ULDQDT1Q(wYr"k9ZNd-gbqZ-'ꉮzNt-$] DBN)I4%ɿ "NDى(;e'ꉨDj"jU&"lFE]]&5zuġ쥌C:ղ%/챕=~H0ы=n'+Jc.ndQ\d6d aސ# 11dg'2 E&í"pa4<"0 4>$46>&1>a|B\g|6>c+F7"F Ʒ7/&IE-F.׉'ߍcqxɸ˨C?ag>/!8<~} cYx䞁o?>p=G 5}n8WϞq•Nx'N4`ШAsם.4j\ Wr}^l쯳.ɮȮʮͮnnN#mﻡlj~*'8qí ۞-q~6O9v)S*}5r?K䆲7_q;fqތg1}|ǟgN|C'KpU}Ӯ!qZ-etW&GUs >q74G5v9ƘBw&' g49.W9.7w>mq;qqw.RԈ5"LHQ#RWԈ5"Eדk9D^##G+r\\Y.Nٝ;qckpckpcVjGڑbޢa\UfV)r||H>o$ #]".&.&.wj;Ǝj֐{S7EM1;ai=*rJ!Y)fV^6232323Y U7Ⱥn(8N6K{t󫻻tTFfQfQf(f6"F*k CTbfJRficfJ-N1wp 3t-#c|TF*_#|BkPZ~A_DcA4xA4:lf|3_`W0x!3^Ȍ2]GdYSZn=5'&fK"6533Ǚ3ѻA/ ">!{ǨB̌D=N}QK%FEE7EpT9+V"V"g(Gs+##q9 Dr.#U~DE䑋r90wޥ_̬7 eCQbm!m~9ƹƵƵƵ]4U Ds36m<666=NE8af988h2M\"c"c78oh[tsbw htF'\4FsYͥf.͵\Εj.;;fʼnݍ?C9qk6zZ*bʹt[i>zU+gE_ h=Hw?vwQa֗=55IQ[~Q;ջݘ~NP;ǧ퍓vN;劣[!;}={{yQEQOx6U;|ޥzIxy\&K9G1t"6SyQ8 C|;j=j=j=\\U@* W U>"^Ճ GaOMs#D7q⽑ {xo F⽁xo`aGbbGOy1SF⾁$aBx>5N6i5 l1@6 kH6Zy|BC6 lsULFfⶑ Lfd@&jJcq@7Ǎq#qH$waÍԙ0u&L SgRcFⷑm$~F2r@6oYRtPYrk\Z.b-q:F:F2w 1#}ĸ m1q#+Ԟ0L7N[D&YqV$6Z@LPr6zJ@)bkTe\)WK7x&^T%W.%6[WW#Dk FԜ6ֆ֚ZZ[њ~šS=^qhCSќvt*S2499\[3IjKҴQފJglNzW -ꃝLM׉LQ062N1lChSEvfX; Fm)_ګ+cXArF-QK6rpA-Sb -Ŷ2ŶWꥊn Z-Ahq5Z\ѢUE5:U@ 8y8y(^; \yYCgQT0pxo8`*>?CG `* & `* &ǡ^ ' ar \4\p8iaC)PrJRD)P82NA&wj>?;=G)P82 >o d,*>G%*;?.}?9\Pڹ}CSQT4u7i|n.ǥ_ơqsPXuuݣwtj]_^Dag?& (l >?gNNiwsl' pp 93 p9sD9 s爴pnadFe`T*mY>޲Uj]}(עj4] t5FQZ z49"j5Z֏*,+ɵo~tl#U :W5Z@Kghߟd=Z^:~G;dJ2R%کD;hT Sv*g nA'kɚk>kU_4 MT3WJ=Ti y0\iFc>F1Jv2n'1:1:1:1:fw3}y1u=sh*޵_ W#{G db|Gƶ8pp3Z0h3Z%vi5Bq)> E8|ٞq1O<->Z(ȳq8!Qq*{N7ZۆB[9.Z{6%W&Gy(UVՊZy?GQ( E6ՆZQT+jEQ(EVʱ98{F1zn⸵>1qW;9v7SwR]W{a;y90֏D}5Op'ZaSy 3Oa)}]&LEy3Oq)<0fSy 3Oa)<1OmS8cX{f7BA1@uvPYZ}DjP 7BiFF mE,^=nz˽wq61tC'1tC'1tFK e#*R }JQA|tG\F[i3_`s_7X-GlZX嗨di ;X~b*a[ ~PB^WHߘERVt)+4Yْ7VC!4}`̇Q(KRz2f\~j}a&xJKYťRVqj1@++J?#+}ܰ#>gۈ2Ⳕ\B|.!>Wg)G|ƗgY~uYF|">ˈ2K|Zz~3Jc&[2bFLud)1YJLd)1YJLd{{w{\BLO"&md1NLyb4|0(cXAۈ ՅBbu!GyjGj)Gj)ZF6b#e`1XF G^#mKDٚ+:L3<-vNXxZ0[359goGK )f>l'83ЮEwHi$4e2dFݱkQER:zД/Ge ;NƠe{E%Zfc,;Kcc,QSxjO-e/Y'3r|gn}W=_V C}M&.`2@YIA(ҙYj:2ř!Nɬd"ͺa$a,`>1'| _bȇXRG 0w_((?0Y  4@3h( .fd&sM0ۀa&f`Yi͖a&L03 0rX _fD8 NN 8Np:g9p.p!\.r WՐcyqC1v"Lp @|oa N 33qFFFFFFFf~Xg#(<0ix</ C>|-,e=? 3_`cYk`-6&6("p@1@)A9lmPN.7T@5xc B;! KiQ h( m9vC;쁽 eUQq8vs;ι܎sn9ۭ}o_ 5mxMl e 8zC;pUp8>R}nE}åp_-\c;p%.pZQ!Cn ?4m݃KdȊ0W]l{`u/~LxfCq#ݬB7й*t B'Ё*t^K,R:::(Iss*kRv)ҥ(8Wp [u+n׭\[Up nU*UVܪ[Up nU*UVܪ[Up nU*UVܪ[Up nU*8K/ҋ,8K/ҋ]8@W+Jqx8R^),BV7\f캙]M@8 B(;pͨnfM:Yv>2fmCx [)kMB,e-So}6ӡm/2ӑ~tnvBYm*}׼5Uﴪ7%*w_g"(YJDd&;(7nVͪYUvuTnV Ya7+fݬh=+ ȪgfGYwdରGfTFnTFnTFnTFnYp_8΃.a\ep9 ap0("f|-~ohױ͆F|,s+ۘt[LmHguSOYkTFnTFn"%LڕG!S?{T"*PD.3(bRdVh{fKEfede틆w]iVݞ%91 *3 2(0 dsQ{~~=y=8s^r. #ƈ1"l"ZV+ v<XBxG`< IR5= KwOl6l1+1l6] l1l6lg[_f[/fPL02Eof]GG4g #{}6fgc٘}6fgc'2l>1l>1l>1l>1l>;}%ӳh5\I&U0fl`̅{mYnWv=x_?`wP+4 &SV)ɔdjZAlllBZU3ƌ1mx3S0m oNss@4 }k ۟  >G#i­pPZn>fef2sٙNgfdfefs~f>=p\fYˬì>Ĭ&4;~|b;/>Fk2/ϨEߓ߃?Q?QߓQߛQ߃Qߎ?PbWM#|0ՌjF|5#_͈fW3ywZ^b\07 sWM69"ܐ7U፪FUx*QH[̭lV6s+|f>e3OuZP ~Ca `a` c&xm0n;NSa1<O:$,ix<<񯃸@ʿ_ia Al!4"Gn$n"3 Sa2ГKB}2R_6#Vj|kyK/~A v db, ͠9@ p A8u'6B  6ïVa]^!lp Ð v2""؃{`A=h*+ǻ2C8AΨ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZk:r7̀X̂p}2s`.wfYc>,/K2Q&^e, 'y TzåT҇JPI*C%}>T҇JPI*C%}>T҇JPI*C%}>T҇JPI*C%}>T҇JPI*C%})9@8<ȇp[9'yC NBT2_ep%@[A4Duj]ZJyx-| # v蓶AѰ3Kixd?2G摷y a w'73J=~>_y6T+WkD|_#ɭ"õ2K^@_8E< ]p<*HA) cP!|ITɗ 8%&7¹ZVO m~E yЅݤGG0Tn3 g{ra4w| .y߃xM׾ ,UK6g**'uX/Bf wP8V"Ѿ7.w2KC *Yrz7X e l'-0 n`2w0]0 0fck1<'Tꗩ/SF(3foV|?~a#/ `3 [ ilmvNa/6ȀL82le> M?-䱆}EP >3I(r|P *TA5z2K@ &O'|I>$|Ýx~ψ`ɢ5y0< "x< K)xga)< "/+* o|..Wj XO_ײr\R.OY*E+K| kp+h vLYgu$0(̔wY¬d0Pn(LY}Y; s&IFaQd&IFaQd&yIFaQd&IFaQd&IFaQd&IFaQd&IFaQQQdf 3 &CaP<&CaXP(L\&(!Cf-sE,WYʐ*\P,ZKu q;c'dy!Z-kʍ+dYfldi۹p/l! ,xlE('l}2ͼB0/ͫS >/Q"w֊7] aqQbđx)T)ƜFKao-}^ً>g7F}v^ً>{f7pa tR tRp=pa,78`"hJN[6ww04c<bVN_f]ҍq/E+T*_WU*_WU*}6JRT*JRkߎu7hm^ы6zF/E]^tы.zE/E]^tы.zE/E=^ЋzC/ZF h-tntЋzAY;pNj_NBxBT)Z)hs}ntύUE4h.0V" eҋFzH/E}nЍC7zF=tnЍB7ZF h-tnЍB7ZF h-tntЍAw_}T>*MJGQi4}T rD>7FhUpU.q<*b]pD=d)2>+2>+2>+2>+2>+2>+2>+2>+수y 3`&Z}d6$23籝q~HzCadRA8$KVfYmeV[VfYmeV[VfYmeV[VfYmeV[VfWtWtWtWtWtWtWtD8]+tX ,WzCaA< A0u0 F 7q0&Dnp;w n`̄{ \`.(`>0BSV{!|*X  >U*a qWBU!PNnWG?ϰRHM~-`4 6;`'ݰ>` ȄlC p8 yrNsA)pC)2x&wJRp j@M2uNASP9uNASP9uNJ-R Ԃ+J-@Ƴ=48@[h=b: 3[b.y }H\~o#+.7.YpQ@ RKb'%*|eSƊy8`" d;a LihG/-.`6$a9bb.CnhB9cvri1W7oư+) @tRGD9W+N* q-g]4qkG+w/J9RβfǧكgE? '8w7{"=Ω90TkGLRps# ׼Gz%ʺ眫^_NiP7-1-^ <&Zk#am\OMTMMtJWf#3hW ur+翛$`?ӟ5T]kna0fʁYדeg-Xzd|I5%+sq "'3Q .sg3R6q v#y9UrثMȥQ61zUfJg>*QeisÿGQhd\Ƹji4c+CTsxW}]Hwt7 3,Rp)tˠA43Dg|Uw|Y\#;&PSS#U*******r*r*r**<s:<s:<s:<s:<s:<s:<s:<s:*r{qggcva0S΀ܟ%q@JKéDoqpL,»&aK|W cU|ucTT~_U:::Nrʌ`|FK9Yi|A]vEOmx[Vx[ցumAv..sVL/ 6ï+g]BO~@@a a@p3̓3!͏"x1X ~%< x^u/2^ek  oy<o7O' x7-|#lgH_ 6f.1o+ov;a6ȀLȒ*uJ]e9 G!1`, /bЮR8 eT UP j,Q &>qP8O'A}>qP8O'A}>q(Q'\p\W5x>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTTe!<# xS4<RxEx ^WUx ކw`%|>cXXtR8u:Nj'ZIqR8u:Nj'ZIqR8u:Nj'ZIqR8u:Nj'ZIqR8u:Nj'ZI)))))))))))))))))))))Vkxe N j=:{uPC8RO`|E4h.%a5DbjbjbjbjfirסFP7\RNhqʐO^Ky;" F#8FAWBz ^JJYo(N_ehk1+xsk]Tpx=s{>9IV^C_e.K9RεT[YEǓơ8Bq[*3G]VlsPK;Kmt_Gɞ٧_`/گ\` CK%{fjjR*Av^__:\x: ߞAOfAdu8V=Ǫe/=9b^2` u}w=0 .yg⯷+U 3sGRxلvވ߬CX Po]j_v`oiӾ &BZw}a,78\yl=UuԊQtc_cSTҧF\ihҍt]8F.Sߧ)re௰ir%cucune%ne>a< !xEn]l].pya-}䧖Cr0d]'gE7W0UX9UX98OkO~??K~Ѧ횝hg0kgxeTz_/jQu{jwZz*7GrQƿQSCb;o>~FQ!fT8D #;F~#?_pL~ ]/dg֜{E;u|R|49F"I]ȣTcGqqqq뻃paA>y4 bzU1w0jhv pLb7~v5O3pDU1x ^eހdXG-e%` 7Mr30&-0 n`2w0]0 0f, @̑n\|DxHe!<#$x (-T'IXO < K9x^%YpFaPQZހdXʲ& ɂk +=x>*X >a-| _¿+e6O3lRal_a X! ~  `7ı\m T>S2nJ'vv2;+-h<ȳt}Ȉ hf'0̳e|l.":05>1Ht0*FnlE0N5Nw)EEbI.3g4Rbu21 `\a\!2%5+ u󃢂.A]M<3X*5* O<drׂ ŲA%by'J-d+MטUbii" ?5 Xt-P!f#換hv ]ȿOZƵ@htk0z^y%.f RK3{/ qUZ-9VŒ;_0W빭W>َ%Qc:4ܮhzos~Ψ3[N1Wios߮lsΓ+jzz̽I1cfwykڶ֣-ڞnim}ppv;mf ?z8gheGp;9#cosThehĉP%^만%2zZ5D.vV6-?@k5P}Eh eRyGQyWК{-7åb+U6yŬ;PɝRݰx/>o?K/*Z桢**EEU=׳D~< '"YKOU5(e9JYIM_Z \+_:[_JTլbPAW>2vUe U2J&TĄdi۹p/l! ,xlE('}JsC'6mm 4 24ta;@.Ц&'P >NA BԃYe YRCV!ԐUj*5dJ Y#k>7a k,o;D5|xl?G1Wj|k XO_ dJG%٣QI${T=*dJG%٣QI${T=*dJG%٣QI${T=*5_ҟ TţpLԑ1`WIp~ 2oAWk^1h폊3k\;xF4Záհ][3%~A_~@\@<=g=9)Kˠ\AzP;/hɞ^/a} )RN[N_a_m͐#F~m {'x4 J"7+$?8zĆPQGPNi,0=aNkYԑ+GnyG>IN? pWG0C\IEN"^Q+*o"}9>^(:S~JZQ9b&B{pzڴVyshxSv}Q'88?ECҶh['mGӶy8J'[Bu,}Ҷ.ڶ=Iіif_3ogުGS=5_o*Q7#0{K%^j܍akk{UBVbanE jn墇1Y32RzȠ^p-/ڼ=8ǺcX.p+y`^DZqfgЬBCK|^}sιܮ`~aC8J72 i֎=k׋U% DЗ=:?{f=ԠGx+ xe1Yڷ;$ ѫ3xS DǼcs ǼcN{=qq5(r_=(> :m-ZVGd!m e! ̠pSa^-Ww.;p/p p8R}UlJpn\Wqn}ȫ^1$k]8"u5B놣M W@ >F[7EӉmgb4K$!#p;IXO#G<Rxx2}E#|qw^?khk,Bi Xv|UUk{I)F1ya` c&m0n;NS.n3qߍ5J#{7̀@f`̅{Mط"kP۾SWzCA˝qla @>Uc; F w# @́(X | `5|k3\ K!s)d.e2BRPY̥2~-`4 KA@SvL!)(]u J J JL9 `1#p  W8R %!jH)*iE[^%JT)ZI#R`8>n АH_@UGө+gLьURYs/J!~>b@ 6bjOu5aDwd6/#b=_nQpQ/,\u8H=z"[E]Aȓ_|8&_rpqP^m/7hO׸خgZRxN,7EY#A>u*5=E~l6O3lb5}cʀL8Ypϔ vȁ\p (T@TTP q p[s j3mC_@_`caϥ&6_+p IluX H7&r30&-0 n`2w0]0 0f, @̑Yp/̃p,, !xE($c'IXO < K9x^%xYکFX^gLD[7 +*,or-G5&\˻RV5.:X>[>-`5|kS >z'| kZ~a?FH_ 6f7 ۀyj;a솃P_߳5v-hq7o][rOmPz$L_)N_i$/ⷁL jBjkEơq8yx\oIڍ㨫&s%ruVr @Ĝ]3# Q`~[7J;|ǰJ?3R0Rga3R*)Hɔ%zFRFH#(nk^2ѰѰѰѰPhXhXhXh(a4a4a4a4a4a4a4a4a40000J k#PHe$2j_^EvP0Fƣ(]$ whIbtdd1222dd`dXω$]V3\H*eex=%r.=~=~8~ޱY F{Y]]NVJyHT+բ޼M7N *U8)dxQwn4c26&p ^|< :ȑ+B}2PhV?>`\(ڗ'gLh%cgJRb]\C[h|HuE7D:WW W Wbd ix?8@cIC?wr](4 U%xu3q5=ی)8pR=nߤ2Eo$2sd>!ǘs`vfU2Wɓj9|5r2*eT˨TJ9`55˘ :PLaUO>y@y <+SBe\oX˴ҏ8C6!S*C,9v$깖A~F05=B 1n!NG11 ө#bPr<wuD/` cch2(1HikՁ_:[_;^XAu ꎟ; C=^B嗢KQRT_/E嗢RT~)*_/E嗢KQ|*_/E P51S b b b b b b b b b b,jx`0 0 u0F0 F 0npΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈCч:u>}3Cч:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:~lu;dPg|ި۝ٷ utdK-:AՖcoC tө7SoLޘN1zc:jө7SoLޘN1zc:F˖[On'+ '#+CD<``j*c 5j6JaY3(4Ѣ+EwVs6{q31OVc e=y3}^zʗ DSJ D;{}:nŅgr8ʫe "Z_:Zί@_FUڽÙvGÔ=g~%Q*KkfELK3bIe_" m"("9d3^š]N$Df0odzWMզoDg^`8% g]5p`^d^oyڿJs"Kp,U<+.nnn6gʚ}c tn ݁sWnq0&Dnp;w ĵz;}ч}ч}s#0#0݈:x $b݈iqqqkW#D܃hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6켱_<ggR.:fT`> d;Hzs s:5EBoZ71ͲD愣9ڌCwѝpt' GwƢ;c=hO8=hO8=hO8=hO8=hO8=hO8~f_zn.qxv AlG(цh#rmm kʙՔ+D KMYޛV{d- K"2jy)A%';;;H*"QI%(1Lm01.Q+E0IK%#AnП^ gHdcpzl51d<1O|JќxO\ /#]kig?+GjΑZ7qGw$qGw$qG$&qGw$qGw$qGw$qGw$qGw$qGw$qGw$qGw$qGr6_p6Ws6q68$H$H$H$H$H$H$nݕuOԫ6~j8o65ܯ khʹip&}T2I_biUg G+k?9:WXQ#Τcs=1٣=cKMަα9s^Dy(.MdžQ!0 Gx\U8絚3<!0Bi!;sȧ>s#g<1;=F۝NAMfe2Y¬ aV0+C!~~fg3 av0;C!fgH!fc1l a60C!fc1l a6^)mFm9\!X&R us*DޜJh$7'P"O:<-   85O(GyGyGyGyGyD#<#<#<#<#<#<#YWrw~CM^W;.+ yeEBMe gVN={9E{&~v O`5sQb3PЮ[ۚ=X:r 5Az1Cuϫ{ huӟ_ |Z~:?××uėAeÈlQv ] v Q&Dy'Gt"$Ƒ]} d8o+Ƒu:qx82O7G8vee7c%Xb%+^C[ڡ+0vO;Lө~:vLoyz}vMg`~љh;i;iXڢ+mK[E,mK[A}$-biX"-biX"VҦ>PE{ @-ԉF, ͠9z+ ߀?[߷ڵ¡WLŮkں:z*o4EY4$hTD$h&h&h&h&h&h&h&h&hBW"{ SUy7]4E]4E]4E]4E]4E]4E]4E+_Kڜb*bFʠ;R[HciLHc4Hc4Hc4HcO1DC1DC1DC1DC1DDf}ѯ$OD'5R~~UWdZ#ֈ5bhZ#ֈ5bhZ#ֈ5bhZ#>Km2h ("XY,,8;Aƻ;ihW8n\M*ZgklM2 s9saGx8[gkqj&169ݢ%G59g:r{]^g{wgҁ=ܢ{fo[-y }ނ>oA[|̶n6d$ADDPKS{CTĆ z GPEAdw&$tX@O|>?}^mO}>mO{>O{>O{>O-ߦ()/5Ӟg>O{Ӟg>O{Ӟg>O{ӞXX,,D-qkCSսBju>*l kGɸ)VEԪZ'}w.H>qSi5-ګEԴQ"jZDMi-EԶQ"j[Dmm-EnnniͳUjqӍq-=nM7Z^Z(5h"Z(5h"Z(5h"Z(%Nq3bqӟ\L 7Ps)I<ya4>\jLI3:v8MaG:fRt3uIQOQgu3Gm+WQ ϧ (J{!W0v3_] #P47ILH(I״UjZBMKi 5-%Դ~ImKm -%ԶږPj[BmKm ՓIg_=]ZcZZV'3_=ՓzV)UJhZV)UJhZV)UJhZV)UJIJp^#!ܛEEF#6~Y$^D~]SKE=0%S􋟈Fw1PQ\9~ײߵws k`6~術FO .\DL;'vbc#Mo-#ĚLVui-s^"O(=FWȓC}b )rXSU[/5X =>5]7ѽjˆOYRޠ=G(a %`kDw7{OWj~JmOb"Yl-OYYoDA1FSL`4gB[7ٶdV~_zz7kKbif>˼5:Oֺ0/` 8 0 G<),Oay SX<),Oay SX Fpgě-oVp&;vVs5{~Z.g8ϱHe8c& %2xL?ld|y?3, uX~ 8[ @d 4?)o) 0_A| f`&~0` ,bPb *+ 餵v`U'm6A2'eL7b+_j,<0uȏi+0CZAGV*ګj^JQ\L0TVQl0No:ͻIeHƇC8OUJ,]qj-eZ*1C:q=į%\&w +8U%n\sr/r#7TfTfT6Xw<-( b6a 3phٰVzֲTq!%ZEZ?s[F Sg1d~A9_~[u@XU]M3°EH0+Vu? :Jwz_ǻ7I=ĭ`O_}稺=ac0[AWf<.fΩsskYc?vP/];{{~WT}LIߦfP'( 3j)ѓS Gf[{m<uȿB$]7G .c/ SZ#J]?w'3P 6XK,zDo b&JQE)i;CMCk8e֏7jIZ}Z=9+}VJI zcv 8v|ctR~3jv ?ۿ3s;DN}?}o} \w0c/ciLx[Gx8qp՛(8Ogz_2G3Jo2ۛY8arlmsR2Ru5W7@*RívDW[qTX'ZG>a 'dFgK[e?ՇևRl5ڇ۳/vXV3'[-OfZgjf|hl26Z:z&2M7nqs_թa000} G&yEy dZֵsZ&ZnmYlq]]>wCin'PS69 ۺL|fPxvp$'OxelCXw/$w̑&_m:,6@}WqreŎ'n2#:s>͔OZe5}ߩ}gSyyZ߱gEm{GrUr7ʟoU/ 87sx9}R]5wŅvO*O:CύX+@_p͵XOr1ߪ,6s/>`=?WQi8ޒHIn$ƨ律+U_  >R j}sTo~d1Y`y KYmU16ʷ]E};SR#|ujcs9H=gV̡UsZ~ ?lL4ibiN62_Uw^Zgç>,U[~=HbfUhc(zs9aƱy|Q_>QeqHEJA祈oCX$,`;0 ڬ-zڦoW._E=A] ׃Ǎ&7[6p;Lw&6WP~<=uCn諏2K}0p&}t69r̮z=ul.5A캋fA=㚨]Oyx^Ux}{У<=w Dw»z39 fl0,Wz+(o렧`}71#1>i39LKo`|fY`.Wq?`eA5k@-Xւu`=$ @JKxO/,`? ! D@6 @Tl54hGY@kA X|0\Ƈu0N,Ɖu`X؛5\ WkFpn`{}qO Ex&?zxC=| O`*>/tP _A| f`&~0\Z~ "n `XVTƽTƕU ր`X6M`3آ[IM[/` !֯@1+xX~ Wvd `+^m> ƟG@6 @4("bgU*UIxUOSSZMo$6IMo$6I\'>GRM)ަoS)۔mJ6xRM)ަoS)۔mJ6xRM)ަoS)۔mJ6xRM)ަoS)۔mJ6x%x:rDp u%,_ Ɓ 0WU,_C;] ׃8&]w*;Nex2Sީ Tw*;jNSNsNᝦ? U?*xik^ P&exx%x$gާSĶOX. JBxRP)^/T* Bexg^덀t)^[7yJYOV'Ux:ޠ}A?П@p$ĺ`a3;'NSެ,ν9h -DX9\.Vb1X .b1X.9w,.c1X>cqX>cqX>cqX>cqX>cqX>Wr<N'S4p:88|>VjcOcxpUjd5pj8Y5N|mr5pppp8,'Kp,'Kp,'KpJ8Y%l% NNNViTp\_ov ǂSיf5pY nUjfp,79# ~Uϖg+g5Y%,?8,?8,?]>0Up8\VWpZz|-_8|-p-gUԛ}wsJ+lA n z0p8A9 z oy? x< ηηηηηηηηηW+|pr8_9W+|pr8_9W+|pr8_9W+|pr8_9W竁|18_ |q8_|q8_ |18_ |18_ |18_ |18_ |18_ |18_|q8_|q8_|q8_|q8_%| 8_Η%| 8_|q8_|q8_ W竁j|5pZ8_-W 竅j|pZ8_-ꧼpZ8_-W 竅j|5p8_ W竁j|5p8_ W 竆U|pj8_5W 竆U|p/bp/bp/bp/bp/bp/bp/9 竆U|pj8_5W 竆U|K|K|K|K|K|K|K|K|K| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%|pJ8_%W 竄U*|pJ8_%W 竄U*|pJ8_%W 竄U|Up*8_ W[ [ [ [ [ [ [ [ [ [ 竄U*|pJ8_%618` 18`%X V ϭ8NQ&襆_o++Kdkx菞y-US_9}y<=-׹f=o* {RV{ʳwڻTo:PWW?eqA1UTuPKVW.*EπYwMZS[̗|Z}&r-` lUpig}GM4mV縩gFosaI;YRT(yU7`.|k|uSn׸b408WY^E]ћҿӫKKD=urg/ ߲UޫI~N?oRI|##~KY,Z,]2w)HmpJ':)zJ>rI_I[~aH+8޼}ٶJi`{JPUF"!/DnJ3ٔ_ҶMӗ=ڹ/Op7UPb[K>vx)M#Hc ,l 6R9SCDXF><𳞌uu>9u.iqywFj ߤ.u*9RgHi8rHMe]o~vZDc5,WM}h_>/Vߓ3F>1mY[?cmsa>'][βuYse="ңh/ӏ9c%wiċRNYv#UFUJ)U߫irWGss P]\!hѪkXu8uTuL5u:u"u[ޟKToBJTMmՑ}1|ϩW|勉|.}+S|~PV||[mz}4m樇&fzlivf'7Wq kd\yyZ`3ǩyJO:9%cec{? ""#uΡu0 LeV~V Lal&K0*WmՌ4gޅ%S@b ֪ (R쥭jª=S*ao:r襎*Wɠrgn}6Dy]C9M WX/ Ar\ҋҋ>zq4җa|tqa \fk,k.t].sM_z-=mJO{ I?{m&,?xzow 9Cey;Mex|gSx=wwDk3sXvgĻԻTy+*[Q~__wwo4}72wm xk&㭙KF%#'(#'(#'(#ǐ㖑)#2rښ*9͜|Bsjj̟U\|I]jl1w1\*X^>˧l˲0ojPVKʲY%̝/5X]TkyFkPVX&mm 1w^h-w/4NL=?D 2ȝ mˬ˘_n]oc5SӬޚ5b6[z'Z k[曬̷XIkm~UQKhe{϶ ,;ZI݆(z ETğ+ß,FvbfdH˽y"FY ÅgE`[r|R~X,lNs+R|aZYA$~K6y_.6øe%tl@xsڗɫ~^7]ùDګh`s:BoY ji孖ȰzNS>o&Ya8<{ɺUYɤ#oʺPw-=KbuRҖ'OVb1Khmk₥XFժabG/|>k7u9X7pz~_91jY{sme]}n8bbDP/~j CwmwOaA5b<,G}]UI\G)eCĉiw"J>E5D N`i%-((VJ87ʺ~[7ZVq~ /#)^}[qNDV_S+;8chTRM=Y:\?>T| P8H'ǫSӟ&tg?ul爏Ż?ǯƺJ⧯?}~z;o}O,~={Tj暹6Vn_C/V# _ Ч^ 橷mT_gxQ<_L<_B<[&o*yUrtv۽e4u?(r<14F98mŎo3.u|qیkfeBoHo\ۅu]lՍR|||=0#ऽUTNL[a>a!aǶcSر 7#aėp`d# #zna7&U~ng ;j|)|9,|9KrDr؟!%-VhbAl:}bb7C7#X$8擰NKXgX) ubX)u:CblNSL6C%%--[XG,#^iX9,b080008[;6ŎMcS;6ŎMcS;6Ŏmc[)/fw w wMOUAk ) ., .K\D\D\08۱r@zC&8'-23z`qXv"G8Nh`KkE$̐(+Q%Q[HD$~l*@FQSsdd)0 6Ā9FŚŚsŚ#b!D$3%sI'_}5D|Y$k*Q!-QH%3$sKXp:o/_@T[>}/#uQuaoȨ ˨k!w9Eebx~e'jˑUŖQT[^[lYlHD"&|Y(m,,,w,,,,6̝#џAma(,(pDDDh+h+D>}!$B̐+%["DD~!6D,T2M,S g94LS94LS9Hl#gL9ș@M,TMe̷1B⵨l۹2#2C2C25̐, qYSцlцl nelrTGYCH/?ZCy%Wkw_[ rq`>xZߦϭGO}X>ݯnbݧ@&9M_tWGߨ }Q;m"ffv4ĈӜ8ok0}QprwsED"}E ՔFGѲsKM_p|D ?8|*t,~aOW74Z$\pd!VIԶ^r7Ih}#w)r~ӞF'*nn $ҭCvw ,k\-X-&-\]Ѩ^lhO8K?k5Nl v71}>={=ƪ,ں*=@_gmz~V_oF{]ѸGheåJ9/9 [' zLj~qeHPmX_W-aGro#81nW'm++QQN sȆ,kHvI;ll׃ ~MM 7h}*N_Ǻ]^[Kwa+{|ij6JwXc[=) Kip'^{kQK-u\,b,CgO?2,tԸ7c~ٽacboq KG{*ȗY׫PKyq)˴=>ZN@l.~Ve~Ke5q~ܝi;e+gnR1&C%\ɭj1,R '" AU`dYDd9F\R3Z%qqbhnCܟz?Wvzg~ ""5ĽܽR uW5ܽɽE1<.u:33LMxLoVݬP|k|k9aԹf7W*RX[Vo::[]dUXbrru=޾W]j?`?_?POٳl{*?R5^nT*{Z`k"{AM&iʆkVSLRI&[memLN鏝,b 3k&A(lmYT^蹠\HzΖ Jes9DF.up5SF M͌| <1Zӹtk5|hr;۴7ڳ;;h"v;>T#G*b(o,ÏeLc3sx2Vlle&˳ܳX˳ݳY ĆbC66\E++8J){TawVUU3f[ ;;X..byby!&by.,ooP.ug~a‰ K_osb.>}_7Ukwc5ve J6tlO=V/XTn6?֯ZH4'<,kEw=G 9_>Sqҟ,&IFK&p%g|Sz _;&'۹e6 R?&Kw(Gs2GO$zެ.^a9=^sJe:KHOM%z!wkhfgXoWtBFO2pY-}/[Y_<PNSYsDz. [_ęy8~~}J唏;xRD[~uF'^#dy~~ߵt=߫ѕg<}Yo]9nCꢍݙ*ڻ^ú'vhX2no?_;k4 k5t竝rC݆t.p|]JF%淼`;pw=ӟy#>.ݣ$ J?(C" K" [" Qa"x \މ܋8E<DhHDcHD㒈-G"D49W䊺)W-nr)A (%J rUӔ\մS٦R?I22$=[2 $@HBd,H±_rH`U. GIB/U& j\*ӹNN{si.y !fo. \r,aKCPrI&COd8B2H&ÑU3Jl¢DBɐD.[JDB"Q#u+$>Lb%n%KG%H,XXb&KK,'-tyKG%Γ(:_AEK/QtJNjJ'QE7(~E 6Ol\gNbs: 6w\_bs!vM2: $odtHGw\^1Lr9 $cdq ^1@27IFQ~sɝj(w+YF^$#W8,dq%#(#8K]uu-Eh)PQu:pCD8TԁdD:p}Dh%Q"xDu @Ţ:'@TԁͨhFNI^S!D ~{5';fUߦ7~J5rˊU:7:OfT r ,;/EEkF+뮢#+TupZ+D47݃әΤN?_޿VvW^n4V'g~_pU{eZg9XFY*E>ҕ?&O?ROjX^,?wfTNt˵)Օ¥X6(zŴ3L%g/W;fν3{-Ʉ`N~ϕjXuFS|Y$OKa 7>r_\γ`6 7 J]A>Պ֘Emk- ~#3\2{q]'6(r;w\u:MfIlj E4z x;7$w"m~D|[={e߇|>oo߷پ9y} |?}1_ܗ[[[j}IV6v/]_}u>m*3jX'Z'Y'[XZY[g3\%u*SdʒpjܹrN GǻJש9UQLQ٧uE"g>(wZAMME guD+ͮ9hvbGX+{bQ=rr\#W,=rŢW$=rr\#W,:`;\tv}Dl.:`;X+MhEl#`3ۈ&F4 &J4\[&V4N vMhD(`{ۋhhhg7P>S4>S4>St=S;S4^-5QPɖ**^F9SE3E(:OTkA¢EG+:Zю6@t#EG-: Ѣ5hEG˖쪞EM5-KԴFUeEM;TԴvm(hv X,:Zgњ/Mr`rUrkǝcUD3o}3鯈^$Vި!X\'Hg>(B-'?ެ/;K5]D TX\Ͼ)ŋ9 ?6ֈRBF(E4 kn>g)d~ ֣i ya?| ߪ/kxLMϘi~K0<τ\RA7γog(955]ZOYꨬ#&7X㦽*$[g?k.1n?Tn7ԘQu{AS\.OVam_$'l~*yo|S&ΊS+}Z{Қ2wQi9w7K8-֩lr~޾{>[5~gBtT矹6c?':OY×$R;mbVDgݓm"/Dc_`{;nick0G'={|Ŝljf~0˃-m47`epG֣0'aduea]6m`~^ gH!!qAmlNTV83(gNVMNL#)W+C+C+F$ JX'8RiA:#<#X>%(q-_bԝo6;5ܴHO4Oda^Y-`pgsl _ SSS!7(7$7(7s a͠ !=բ.Q-LQ-zj+"(%}բmE(.E9үD.zE-D^Bh;ڈ^Q$zEWeHL+ڈ^M6WXOD^QH(nWD(J]E(J]U:LE1H bŠ(tm.VLVECŎ7@Q JD%h#*AXT"Q JP$*A Q D%Hh/*A7JP$*AEt ?-D%JFFN{Q ZJ'*AE%.*AgQ JTT6JP$*A Q ZJAT{is(ul!:@[X X5D!Q+[I\]e]_2e$7#Gba2xn"㹉2QBFu -$m!oFw qz%-@P-,@ 9 YH6r.h/r.h-K_Sߞ/_n-m[JV9D9%6Dm$-ȷDmL-of:9+*mFضĶMvLx :@)m/U^% @kta/ǃS\\TA@^z9-`q'7aAO?r5?Ek?!o/ E΁^!ၑc 7p |40=M`V`~`q`I"Pؕʰ2B92Zf%GF2FdqF茱2ʸ!֌2Ϙd3x?i_fȘ #,*cMƦuAO ````aAO |,tk? ~:}pnpa0\\\R!_(# 5 BBCCBCCBC#CFƄ. ]%4!togC/^0ihzЬВPE&!5+ӕie2s2el1Kfޙ3e<)љc3e^yC歙weޟ913'g~Ǚ2̜9;sAf,sYfUM3ž?GNn}ÃG>+|^k7o~0Xo?},tkѷD?~:}tnta4]]]ݑ|yy&yyEy:u?oHywInɛwoyO=rj[(zzg{ !0;3;;;;;3; "ADDH$ "H ! AB"DH "A\~=K%J=q֭]{7X`i 4X`S v6`C 68ഃ;ڎz8ccccccccccccccccccc㤣P- /t CLa v,RؽWa .W8pJY .)\^p]-; w+>>>UĊZEuE"Q(YԨiQˢ6E:u-QԻ_ʢEcM*Z4hvEEKV)Z_hk΢=E-:Qt=vOmO=R|y5o-o]ao;[]]]]]====]K%K8K%hIqIV%mK:t.VҳOIA%CJF-P2dZ̒9% J,+YYdC%J(9\rdIO:> ⾌ooooooooooooooooooooJk-uzJdiҦ-K۔/TڵGi~K+KG)_:tj٥K.-]Qt}ҭ;K/=TzDi?7Lz~L-/sBeLYeڕu,RֽWY߲eˆ.W6lJYeRXaGmzE3 ? rL@a9XsR2VL~a~"'=8ˁ́CǀULo[Cۀw>?Dk/׀3 p#p<.U Fh1hEFJ+: QiV~~ 4z?Y.Z}8ۤn! |'l0R>.=c-V=EA_qEչ(: j)FV<-P/]O}I4p0G(FIƑgJ >Ff埢pg t }6p 'ɻ6D$E.Q#cWQ~Kz[%W&ɧ:E4.<(q\V&\%IQЇY"@./.q)uݥ>x?,m`N (hξt‡9H=39-`M=@rT꽘T!D) R e {oN`^í@țP?$=#H;E πkI*h,M_~Y2f"iVJK>iKhQE{T[%@s[gЖzQ prla}ϋ9rj82ҿFH}9J\¡9\@Ew}LIX]}JY } i}T>6V7R?*4i^E;-:|}JaM>&Xiv+&+$d#v|BB5x6_. _ 9WYA{wC/vmd6m"4[Bo?73SK.x5%A>pRFZ![{/a΅cj$Kz^KmMoWGF@h5wK[CRzΖnZ%QO{\ 'ɿj?ZLɡY|O-+E4=_Mm@s'o y@B׿MO?3H>Qrf#au|5>>w |SbkZ!%yH?/^y>$9srT7=y'RD~ܒoASwi&k kfUZhzL{򵒝LH olYTXDj1-%ZjKڥZ2vLkЮнzCzDOZ~EY߮gs^o RdPf&, DM+_3~i`XC5a}e8ݔe?6gÍl"kֳY+k϶ׁdol{ub#6ރl+CPNN6LYfÕ{lof#=·|,?b/ |[㏱Ո^3Z<//u|9/W*7Ml3ʷ_ ˶}?`;a~?.~g{ 9{G;(4D>;">>c'_٧Fq#;)n7D/vJLwbʪb6;#抹J^k^.EJxAbxW)~\ꪮ4Q/V(W\@4S BZz+ԄPJLmSmj[rQtϞ7l麶J[[VV4TFۍJ Y+uJ_۶=J~{@C ǶJSIeV jiӯ*N>^m@ͫyxӼ` .?yevnQyޱEy}&.Ϋ;#ۍۅ#؄_.WKQUESvr{{J [?7]qEW{ma_^&Fg-Fgg199<1y7oؗٗI^G,1q131s ?s&/K_)V_U-x;`0q4DxYX՞?3_FGmvwQowQL5_<[JC}>JǨx}:BORSG Q 2~5}p}ub??= ^ScJ: >6]HH=H4HC5`|Y f75`|Y f77e ˖-/[Ulcٖe,;RvT@@݀# @2(42&>)5#;/00PXXXXX8888A{v^h0llll\\\\\<<<< !=T'T?BP< 5  u u u    M M M - - - m m    *gI]nS/'7-oYަ}y={+X^Y>|LISg._|i57o-Y|'Oyv@8N[ۆ;;{Gdž''gW׆77wO"jDԉԏ#H(d"M"-"#"#]"#"}#"#"#"#S"#"" #K"#""#[";"#"#G"#,EkEFQO GFѦі6NѮ~сccbΘ7EcXXXXXXXXXXؠؐ؄ش؜؂ز؆خ؁رXU\:qwLIEu]cK{Wo|@|p|X|t|\|b|J|z|V|^|a|I|y|U|]|c|K|G|w|_`HxT%DD݄#ID2(42&>)5#;/10QXXXXXؙؚؔؓ؟8888I{v^ҙ&h2llll\\\\\ܐܜܞܕܛ<<<ě }cOPJٗ#(ML8zjR܎$Lxby?BϋUc &z5s\,)Ҩu@1 'Z+䧹Փ|"ԚM2 Hq:q38^{@c;_ F plI4Y2L3Zp9<8(wRiNnKoM>iΗQ~o3!.$8l-i?!;p_~M`!ǃ1aǚޖkҽ3$A9G'Zl!=zEEHV5<%-&Via'}9%E=+ѐ"B%=}kQ[E" ,ihSY\#?s$<"IZI݆^%hT[oϢ8r^CHz3ϰ8 i׀ AX~/ Ё 1Oiڛ=Kf 3Q^}l˫zF"\W*/G?\LX 9y`Pr+>i(`̤9$VyZeSˍ֩z_b}$y=+SpЫ_Stmg4tqZQ&Y % TMhZaF X2Ρ= }Be v%B2Cx: Z)Jbˑ5^=AkY5߀^lZz?pl5pdЮ'rt&vzvsoډ.@c*=E~޶d^q*i6,U~4:NJк2{Y@҈Ci dѷ v# \+ighGȆJ2&K9O^j_+qoUAhz.y " D ]hHHM~0ȏXHbǧ($T-$+NIowhTs< esyp$>*aoh~QWIKNĽ2gE,auM[l]y w{/a51&WDѴD{Ib&!b92}6 ě%L挬<ëKž $:$Km^"Os_s |/xS-RBj~e5|  DV磳9fB 9Q=%8( +^BB7n&]yR v54!5FY}d"kx%?]}3Iu [;ݒx'$rh7A(0V \] p4;_'Zͽsv㪜͜az|"C3ML+V=G+o &=qD?sޣbPBL2xREa?,_zBȱH}ޓ$G ؅k9 (ܯ'?͙ę.bv[ _?k7q m( yD}MGF򚲳GB sPCg 9?ᐖX[jqǴd YZzAHz;0iB5«F>dFye&ݤɟ /[$q<䇧 QRҔ('>7#/(|NMM&Bjo$%ohG}YlxnAdCN:I1_үcB˴}oCi~0on=XhI!?'yϿR@4̷',›2?<}¯hi]3<2 ;Gџa9HV@adz?bo݋:[EhT$+9 N;{N= ݣRV/ԗi?icMfm[{({N{`Z4тi X`p}Yc'ii)iiQѦ) **,+;5*T64#2R]l1Vc8e'i+vROq*^%DXif:lkaj8nN1\}W7@_ zȹ+\2șƘ^t6S f`Og ,au [.fc.a'Zm6K[m>)yYX]M&}W9&gQ\)`k5p57BP;\v}1Zs 124h)rwu_CMq<8O/Ϡ{&݅vQSN31~=Ϛ>l G$BN34";IaU8L\}@tJ 4(O1Qο=&?јPjcBјʑh,pUY>' C5/| U^B*cRǬ$iXR[Pt H'ғTxsﱤKZGGO[Z?J"^&YK㥹oj9*ԇqQ;DBJLy$1kQ@++ߏ,ݒY! Gjt`Ҹkd@y2?".DQST/^b馶'<$9$/#Eb wAGzȃgqH(,d#UJ*`=sWoBq 8dC zOYM'%$$iښ9I6 (OYhy}f}P4V) rĪi?@{7PoZ2I2&RR{ƒ,['ecAV(>R[ڂiӱޙ @ғ(`7?[97ydQbUw>*u@]I4:`fK([sJp9)=UG5^/٤$-RmI_b=cÉkr6n F#qZUgin?+i-XY*!43E3 OrhŎ@B#ǘ#s+mC7'C{ jXm9]HșOm,ĝ4ՄD;K,k@jphhNvr;Ӄ1 P&]M̻w51jbļy"֑~o1yf&)T)"qhM/ R^+E3r,?\p>*ϰTDʛxsVڝ|^6ߚg#d6ŸA8wopZֻ =8Wz#pZoJ8y@l QlogOvgOَfTg;=g©<5NӲ1괼xݚ xU֭[!q{X,a5 d ak &AA"" 7@83l}<̈u7F?0}ﮮsN{nw@ Musz$@iY!$5B'OD _oA4ZCC\V耮d XLDfnIr_UبwǢ157nF*`NLu﬎:h_ ;Rp 0 )-Ua!G_b$BTBX)}i@Mq|6<$ 1ע9Z#nD/mtC~ّ Q5Pqn@[G'@ P xL]7rJ p :'n­00 `Ɂha0iQdapp0]8N;:0U8C8[8/} EeUµMm§3 !ħ Cp5_DJX8e* GYDxJCI|ږVF cq' M- I>4l=F8Q8Ux0W8_8{ {0_X , G%Sw-3_Ԗ1̖0JfC,a)#uppp0_X ,̞ۅƒC#’U}JCY9~-~&c*/㾇dE~m~҃<[y8Cr&;?>_5ۃ؊H>؃xN媹>ku+lI%\Snʠ?uj%zQW'!uLV/ߨߪ6&LzN=~5^n=k*s[Yeuw~kUiW߾ | uFO^TUM}>RôV.a5N}>MNw68Mfou6Va}\ЯWku>~ .n~o*Ψ}yѱ;ǡ2S}4Α⬺`ҷ@*zN5Jo{P=uu1}]}ЂNNw'7:C/قlK v&#5Gn׎/P+d3! yu0^{/ڟٟ#ch&gz@/@S 65F[]ؼd&q;՝Hs90b0W ƈc@sBN%8z vg:ENril}2OOW"㹒诼yֿXZwcsɩYa\Wj~jϾѵ{, _aqLDPMY|bg-$v ['8/ .UG(wA4W9\QrP*"L #TB:MgC:K,rJVcY ܿo]<ށ[DGbh:}Ͱ 1Ha>`_UhvrF_Ѷn5m\7vjD7ZA[]Y[C4ɽJIQ,]gf"0@HLǭ {s4nc0v 8nk5?/a ,GGdF1Н=ѓћV`v0]f7lEfk3٭ɼ>hcn֯r3~w/*PO]j@M8PG9ԏpa{knב+nm>rOxW{T{L4=.-m"}U4}MhWh7M$=ݷD{a?wG=G}ΏDE!?ao$#1%3/:k(~:eEdU+?{ڷG~}ks(?Us͹σzrcn[ǭs[+2pϱ_gdV̬$r_鯉wTiYL|vm;K5ڮ&*^{{A7uKZto]Nۃ#1q42כxoieڙon1feƙN3L7wYfoYiS`6̻͟bo[V{zzom -c6o{=+;vMctmuS [VNuGIw}*GZ}Lgkuif&t7&Ť`3Ĥf4434\3,0CfYajl0[379k>3/̗+s|mgy!o+{; R )xxc2P tyPLJz  x՘gtU%464`zwLyC3!B HtB-Ѝvx>oog$i4BI&HB=O&\b[d KvdK\֒eZѲ('+9ENt_9]SzI1 "@$"HDjFEF."BD"&"%*l*%WED QJE[Qt}DwC}D'b'1Q֓d}L5YF9i 5h=m.ݡ{El1[vm/ھ6^ll(.l,k&bl#[˶bVqˆPCn[Vٝ˝r#.]bDK6[ dd1FS&z˪,)KⲄ\'9r(rh*ɚ,cq.īx oFMjJ?ŊbX+FClv[fP앇Hoyp `8&U`da/K U555 ]==#Yy3&"UDDdD#jE1'H22MdH_dȜёm";dR3EdyRQɢRGZ4HYDYd{.ΰ8w}>|H:b!`i ="’, _:QKkH_o//)=-y%=-CK͈#|ԒӒ>2IZc2ῴ,:-s]$-XXny-+muO]./reohbБzmAc Nx|R&$;?Tphp!2pQ,\67ǝDnueeUk16omDGz(yj"k]z,+zy':#Lg.^>yD͚H A9ZJIHO 8#z<H{7E멫&p` {+4^* fMsh)圊qJ1D}QSUT9U^ƯUUQQ}U%UYUQ*VUUT?U݄jmVuySQT]5XS.j&jjFf>S3T 5J}~fCPjJc[Qe=%ǶhE#mޡQ.hlE5atJTcp #@h2;qN۸ۆV5mIq(Zvo؆NRkpFS[JؙT~Mbjn1}nR;un*FUmm0.?CTƎ ZK5^MD5 xJ &Z5?Sm5^MU"QMSKRL-W+JJVkZN*Nm0F6jڪ&#OlKڡv]jڣ}j:CVVGQuLW'owuRR:Ϊs꼺.xuI%ꊺꆺn_Vw=~zֹzgz^W5&So[#a(g0̋Fp^._(o7 Xg0΋+V".`60es\ w'y;W^B0p.43k `64kh~2昷sMl~1KR,7+0ƼXP,ep*,1H岺q.+ ָ+ ;J+ʸkVrv xqQp'ZCVCGu(MqGpMĽKNCgYq6E/.فⲸ"⺸!n⎸k.";z~y;K`1̋W7rX+u]XEt>]Tt]\%t!]~鲭gjq| +ռ2q~'2x#i>g:S\(.^WP>C)tAJ$H-DI-2P2=e·dZNf`ng%ce"l2!sO)=i*Pm&IUerGtY]]5ty]SWеtE]:Vʺ[McUw41Ma\pL qp 6u73s6M ` ܆p]W;ynNxHKǰx {^x U80#;8qc8pZޝu_&?մ3w-9w/>ǁ|E~'x~ ?4i ݂9p^\.jx .H! R@JH! @ZH!dPp" A& QB69 'O 7䁼C(0P C N% aPB9CyPAE9¹ Ds ՠ:ԀP "z2: u0[yo>@=(QA}B&'y9ifMmg?ƾdi[a|o";o }͠9gZZs@h =t :C ݠ;O^/ }wVa0;7 q[0=fan-!;8: N])t\77p*W\mZ,C6'xg>:`R2[mJaRJیRPzۆ2ضaRFlwl{P9;/OkP=;Z逸Z5v9u+]I*bWS/Gc7R_Iui}@_؇4>/co&W4ɾ[bT'ͰkJNM8 nqrήź6O۱ i6ؘvaڍMi6؜a ڏs^W^C[قv(èN*bGRQ#YұKK\fop{%s!.K]:һ`fl[vkq= 6cg]vN؍;s7= wupǍ܇s,< < <$$_tx _;|o5i'گd;NSESF*ϋG'^B?ro捼7۸8\Kp.17)S5&W*9cN9mΙV< <"ˣ+Țrܡ#eΜYu64Lo5on!r#x\3[5KuQUW5GU=7jYiVfYk։:QC433|&ĿQxc` |} X10010Ⱦ_Xհ.eau n3Գ.e$6u-sc*i(jP!wU@>]PxVisV$NBuyij?B0`B,.JPZ)v}~͕ig7~Z}M I;Ôa|ϻ:zw JgVvt٢0:2Q0:o6! "!S(M{Us; ہM%ʨ"IIqV5f>oNbA FIF#+ "vpe=b ^;tiLp?$3r($$ ~_G~%zODw'k" o ts'#Xv(h+L1+bƔ?$/94;9u}7f2%k' ?>ex[GɞP/'2,Gɘ 3eXMzI٢멉S^eeX/B;OMflUԍ(3]~@!Mii5s:%.xEf4Tk7HrzLCoVI ֟U1Gfl&gg?d.b;H8yldK6V_A&D$M߄RR0%呱7MSj^wi M9)o`9Ә1\%gl]@|١E,gTeJr,RIyT2mX (Q!C% :TC*˯{]-#K>YJr>,G+*|dVsEC}"O㣸*29h82J^c@+96*DKI\!ã9WgǍ`N4zcO7d5d."ˈ/;:tEUZ/*UX*h"wzlbuELi..~[f B^WBzڋǢA9 }s+xYa=ͬdχ.lyR{(]/Jzq3^lG^}'KX̲JXh .m`D.Gh[q#GTNෝnPM~eYCjnh50|}"綢jK]E=f9(K*zfK+:vkb>vKMb|9- 1 s8_˘ŏO5 ]EW!Z5y |ʆyDq;R SǞ dZК-aaǜ_0a0Asgs_37a1A`9 :aeEGi>m}-t?ᰉn?AԈ?iԟF_j4bCE7GG|5b1z: xrT8rMox}|[{oɒmɖ۱3gAvBHHHH&aB -Q @)U:-$;^+v{/غWηwe` S +#b1\ L RVZ\$GxGYlß,q<W-f*A1oKiQRr=E7Ât`fl? fy6ER{Z@u:}M.`.Ep=@F@_ ~ 56u3ElC>bggG?M1 p8oiKKk_'TiSjc RC @Ue`dr Kgjj$`F2J\%xLT+25ڽ*cb"EC _?,Yf' m:GA0MLO R/%y5bBY y}h?hh Q y{#?!e ;$ R4*)(}0K9|c iҞq.H5 U[]祍PԙD5&#6lio|1yme*q{)%pBƂbA%'uS.3 9mI6/;;^_}k ̰%he WNWm*_idhٜy5=}h0]ZIl^ی;(…8FR`~t:14 $|f)X+ U>?V gFG!h<>w7Mn9)DGGV+:F+^yc!i2A!9x%u_~.(.@Fm3mo?q/ʾCӭ#u 1qƄ:J[hppP,_Іb8n4P.!><ڰ5Rwsp$ Q!^GGD3(=!VJ?R3 |/p*R~!RC@~7=q'`G׎2\c×3 > rRls37ⶐJ m{8Rx ߖ-$ѦPϞ^Zغ,[,Ӡόf =,Ɔj5U]U罟^7 Ce!_&$-hgKsz F]jk!.?݋,~o( I͠ bZܷ{S|MJ5܄twcw߽tA?1R3h .8X`1O-o+S sfJ^lc0ʃcHROS DXjFkoA+(EUe_,(n3rT}|i ސ @DURJ~M,GC`'JR$55q`h\2z幭v_CZEt3DDWCph%j;.*8#̭3b3p(,Eo/5 RPMwAZuSg{!(#n TD!×w(y,uG66C?'Kh3kBzM#Fμ$u 0 Gr ߡ (_r >^qYP4 mK?ywbD^ yRJL}@m~QL0n#>- iLN%d 08 00l$\~ɆI"VG豉x?~F T{` 9;gN^}^KQ-gJe:1aˆ,J$EϔCPyIDwNdL=hGzv]@|2{G Ygcw<4}g;ɫ'KrZO2#~HIfvҩJ BIc[R?QT(ùh@kN XL\PHbԣF*htێ4s\DcsW@}|F QS"eA"W= ]?㣭4-_$7B[׬@IXh$ wY3 9{w݋j4QY?yO\LEg|uwk|e/eJƨ]T%mr4XGdVr.% Xwviox$eHJC)A-˟_O0.65~!qњH?fo\IK7F#e \߼uďaJ/)RQ3qx-\5kq k$›=w\oK5Ȫ&if;M!b2Fb*2DtN4ԑ%kgqKCIv@>-RųJHV$is6\ݦtOR4i(MGdl2㓹 \LLɬK5e蓪*{nMڡYY\X#bԷtzv4ҫ9~+j~S{zDe ZJ̱S(|ۦw;G?UZٴ5,2%ڮD0` Bݸ ExPfl0A"i0=ƥ$?Q ,q9da I@'!>n!fob`SboFgc9%p 5}`zO]1ljKɊ֌AͿ[l0AY0Ѿᣛ;>s6c;ط;H'@Y-?EGx|A{bS^H_JMgoONBٷuM-] N7@$ XL)vGe o}N~˕.984?e B=tbo8V"5VF/&ߢAֿg?e"1(5M1X8*"*LSBd0vXt;\@}D,V0Y$fPЌj시bح$xs!cTQW:1R$F?T % AQ<%`2%D_I%+@X7F_Ar#&s\PRcuPLIݨ;7fPst!6/=q`砿||GM(uC'FV2JC^yegkK{2*o3p$3 @{ f&Xo9kG6 4$+mi`K6)ޣ1~ hHؗa:ۓM${n=Sa7d0'0:Ls`N7c@(V%5QY*HFsV(./>Kmu',Wg+K:oYZ)sgŠPeV^e`]~yycsS<%" ca_ 7cJ }љi5UPUrꢭŸ{Woѫ% euΐ$'Inz$d+AfiU{JM5E*w `֢5=l͵olwm}+:tuhìԼj@]y!eP t9cBI<)Ѽ΁{Smŝeb=_Y Z_y,/Y|MIee\%]zk:RH`&q(c. xTmkhj NJVF AW(IRaˆψƈ5LgtZtY*^BQ( P*pQ IBew4)P5i;If )E V'Q(Goչ6 ˢ`;YE\]ϒsCu@-ɲ(iB܍+V%f^ gP|ML jwY9)\JmӲ%SB(!-Xz_.KoiD$$c{k,UT 4P;J\dOcoՓJŬ#=Et|BH̵rZDDC<#sbEOzUh%,]Ɯ^jqP_%4no֩0$@0dO,͞j)+^ѬK^|hѕ>Citxؿ9)˗?'>obHX2,d4eDhSrPp8 ~BV*`Fpvu(,M+%xES70ULd<(nr Ķ{wQiOE>mmI|3ƚّ{/\pko4UU.3g{©)*qaOcc"q<#@6wUC@s$(\s~58Zd0K;2vCsuk]B{rAhRo*JK"3Ev۳9_,m+u/i'w\qJZGEeL6L8'ms&.%b ̞D?N7G8(C6EJ9a^T@9_LWPZ4`]n} !׻fJ|oO%a\jӝ*ݤ(Rj3,a1o?a0jF8D,N̶1Ӕm:{9LD UZ#ۓY~GE]Ĝ _n'9gTr+0چ8KW6bke \5}+1[D7stH̄t_K  672 :g~ i䬘?!z4=ɔI p3'&w8"#@qXE>r pCQ;(ʀzI"/zwTFcTpC̙:Mwax$%K$+s< YVe\5ݜ᧴L93Yms19ӪmL+*3oBLh/UJ @}QuTTԍixY<⾮ (w/ƭ:g^Mm,ƱuJxds,aaTRy=~#ƽ0xz%#|_p& VOI?A#&5*Y&3TE2OIHDg cCE~ABZ㒈/!&yj^TjcL'ޤDE:1YLi Ҿ^wOwĶT[ iID j2MTR1L1~q}:=~)rRNszJ8T^? 1\r<S5z)JSmdguTbN2IALL $S9VK$lq ]JwGx3sı~]Uod:3t*bI2T=?׭K Ml$~Z~ QS+VeǦrNY"W,᪱dzӉQ/g?]Uut} 2kHOIi.7?A66[$SU*Cj\7\-?o)Ȋ39^+Ib&.w>rջ+(#Dwg+}gHP~ aa+y"X8*> X}QAɵln e~H ZAKȲb8qL@1C&aKIAX'",l뿲ӧ-fӦ$f7Y (waULA<}5M^5JBJb1uos&]W/cFL&Nqz H/OOn:3BF_l59Grw]ȎɻizLSG\ؑ^ёg#(IBJAUj%G늨B uX *ʻ]OTWW +,ⲀO,8<ݻeϞlU9PON'cڲ-ٹqO:gA %2_s#e %s2JK=,`,5+j*/)h:-,wr&m\. "ogz{"Lwce8Vj>,opF*kT*E9S/ai\[X#QQDm`ppu׉e2[Q,VT΢]s&tk[D u[9M"vLYOx)H d!!㥤 JnN ""|/{T`bLh4z6%(pt1!s;xc>kZ! lE!I?[_)#'Ã3¸9! L3b2!A}xUZo::yӠPbeI6'g{$.Ԗ|_aYױƱ"yooQΖkKCԞf#+Z /L )Sd 55=?!k`2Z: M1.)C1]WW_>zA% 8&¢7HLv$E#7HԽO<,q(j.'=EFgv#k2ch*2a=ir~!mlB}n~FTɹ"A6Eߣי௯QQrb;\'\xtšo /(^p5ů\78x֎t*xtGYAXgp,aՆUޯU0.) ot>ws]٣J:՛ERv QҨ.ӓ]$Z"gk|CQ8X['^fdhoʖ.#'ޣZ}K90Ȝ__ZӸ9ȋC={=--^T c=_AW,WE%o =@XȌKݳr^Wyz֦&G%3 ǺH}d9c^9snзpҳ9\/GBP~YzP=I[{CqDD[R)m^[V£]ɳj 9\Bny KFYei%9݇h/SJ3kvyŎ,ůK4FY|f(ܓ]J9Ipl`0AuWrzG0oQm̬xe:&Y|GC+I=aIq6lAsc >klRLneI0YCYPDqqgmdqI LYVͯMJ=D4_j4 9R[YJ SrZ0VԕBdYe* p]\%ҜSpthj{w=wwÛWuefԗ穋&EbQuQ/u˓9,rʜɅS)fϓT؞?@OdBP1iTL;ͨ,I* Ҝ%7 ?@5ZM7E!rVޡ6[Ez%w ,بS k,Eld|g9vxLqU)Ts#T.R%5P5 OP0To{EY;CL1ݻ@+ūF uY**C [8Ʒ<kO' ;YTJ&!)NvA2-7oө{nݍ^QRwXZ;e~0(nbO,O#GW3;lDInϒ)ޑF;[`_)KG6 }<}RYݺ;5a5ap^A펁D]a ؀ ̓F^#V9UgUVMWE8R2Z!ꇹFGJc™U^C O,|G 3EŊ~e?1.Gwd9:F;ɷ#W #4LG>ş6LF ɿ0oJ߸?U:/mmk!OXJSj;/M%%-rO5=X^hMlA^d?{$+gr,oqaP{LpzN#6t1MOfΗ2Wb532jv`kG NYx-q5̚_+k yd{ʅCc%Će8Mb VEۧеS":/ɞKwaa/}ա0Y0yƈg'wkdɝ݈M!ua oى:טTۊU01ﱿ) F1DhĶ)4&dqX6 |"RpʜD_C2 {q7(ĨҨSMFMy kj=8e}77j{SyTa+≾ }Z e툣/7~G0=ɡNx7T.kkY&ULS*,U/`(m07B&)nA*3"T[dV~GaK2I *σjH(JyO߆ 3NIVJZ[&('bOmPAiSgoV${37iǜ/q{G+6g59Jy?;wI-> NoW "x3doq3S',Gԝ\@^TPWǗ!p&tdx3e1^-WGQXy@LW-LKJ^#MjAoARgf-lL^evY/=a$όIh56ӞU,1LD=SAD +>dN"[Tn ~sJj @)ٿGHKR4RH7z)5' 4?؈XjzGssPmPkn͖טǞ-Wh+ZeHR Xs@qXLʲɭ~#(TIT4t\` P_dѝU3ݧܘBmuOw75PxX&bK!*xx²T~Ujt)$F_bpZB~DBQ$JJDp,1m6nU*efTI,Fxbz2(JG$hv.ONHܑc/k /$Z|>T&!"^HXl0IR/r X#%}Bk?̟}/ʎ ( tx_ҤB'@}|-U\ϝ.NXeàp`H:߯GA#wt*[ii@Jt0QyFzhԞI >bfQ Th^+ܒ,|sx,Y^6YB]`h,,҅rAh.X\$Y= =ؙI C:6j,Jv+&NOFiuVC jfX1A_ǔPcTXr҃ȒW+-# ^C!BO\1}-[80IļE쎾e\pRvXxArFT$V! \[۪ p>݌^֧i%RfU*$uI4텸I)c ]P୍'2<)e)X<[>=@[½I_ŕ{G0@_p|E<_Ʒģu;n)ajÞԐ[>p_[C KaDAĂ?$"pQ"qS ,_bcԹ$.d7i9H7f͝qeJ!.a@F(>@S賽⑇:#ESռ>mWЏX,-!y,ե9:̼8ēKp<2 ph>#u.qu[*f Z~ (X,>Ʌc|ڶ?Lcbe"l 8&l%rV W5KMzO^h>݉fѧ@A:%ݮ^BV|7˙Q6nւa2ɻ$'^kX5/l"_f)cC#!3).5ʟTD˴eT;$Z(^1ME2 /~]~j gPMq(.T {P  ]?^$?M'kԀ"s)^8%YI4c?\` $%3,NR#i/bv-cN+y4JV(8' |^V'}%(cdɛW49d tWfu]6<ҧדU> vr2@?&@1,F v-4hb=/Qpݖĭ[2;#^Y4w@&#WaF\r5Ӟdw7%Q|Qlخ}@䶃 f3R[p3%z,XXO+3iS ~;5k+Yb_Ժ_Tz/n@nz^/Tq-T/+q"`L9&2a 02jol)b$5OHǦhoٕ{Yz̓i$>i~;ueێ%m,|X9Er|cJ>[f׉<6YגZl?r~{`4=m?h`ހ~y>Vb^¿ #w9? MF~-`{Jcqөzgb]@6-.3 5zQ,ipdFm@)1 fQ<~>d5ƦUpSKgp\'M3n@;:GY8b4E#JI^#Mޔ7_Ȗ7֕mf_AyKZ:z=8*HU#`r)d[`eWB~]l7֚0$yM# ߟ"5+s$.(;~m3oa|.;I{ ѳD1sQBsJ\[jgyAp^/ʪj<٭OŵY}d 9JLmSI37fv};ۂm.(f]0-eMK[Lu.:9ȹC qČIkb/FEF ]D"Xh%hk?,=`NEYTQIyp>()=ǐ1(Id ~v@G r:;&+1 S#.(OT'GCʜTr>ߚ(ڴu5ZMx ;s~2)r5yŶʃ"'Q&4-bUȺHA3,+[lUL,02݌V=ڙO[s~-?P`.)UWg&;1G4'R*S7臽-̦-;ۡ+W$TU4V$gͱhiDqgM=plxT"3[?恌@dՇȶ|8ɪgPJ;}jHE%j,ejYi.uU7{}f#O6xcyr]#4Ek%Բzk_!ohFg3Sog9w}f:V gOҢE $ןGYJ!||ەA"sNs(Rvhu 啑 t(j\9)i~aJ MvXh""K)J彑#`e ~j T z*EbR Ğai*Ld !s(T0teuI]`<N,Β7p*%fery5=UZ,zōި8/򒬹2`<w<wyktekkKG'o\WQּ֐;7ͯ2/("Nzi^QZMe:X;tY6CFiӦ*7VR.g_qp I:8+58$yuZF~YOhI̐yh_Bw55Lu rknm}Dɵe:',}FLL_Aju: b_BcNu{xj }ܤVL_d/K/:9ujy-@rS = 䔸&xN#fmmrܵAD|ܟԼϭsPfB+҇[w%I;]׼}5gm}xL0m19lSy 9,iҘUsdKOvϭKU:UzZsTjQ.ѯ4jp^w ]5_ 2 eCx7/\!ǧ3dwlu8JL@su'ۙZWο:>8gmaWmg-ɿ DV>'V巶x#%kxN^`^0T#w'A: MŐ* !g%}y5lؿ T.|dsIǩow~\ƒ'=m cPgPA2n ]{u2ƫk uGo0d[܀ͣi]y w1Cy W[d~Ƕ{8r`墸eOm,HǢX_vyj)r]'"u* R_Y*>MI"J C%HL Kd RI*->_w_-t N Ub&޸6nn~5h e7}rߪj7xsk<f1QV%'s/sgC#_`|D/5I E\z[b!N4q@s͚֜Y):24zubQYZaOR;:?(U^H,NÐľ~/C~Uءkpt,T;ufCvoq@G d)܇F^`kT7gI"ډ6t=wFt/~~NC>;?-;poXB&\nSTF]y˭jʍN),ډP: bTѭtO0F f_26c($AXDT \  ;"25B`ѝ[YV^[BɵT^DSc 0oM{7ߨg]UwH<P#[2{qwЯFڈš= ?#^ Ma꣯P5̌X9lƞ$ ?,qHR~OTZv)cUB96Հz793xv3cƂcE{%Vȫ/`w3чsfߘ=I _\"[UFd0XX{Ԥr'Fog6 }5yB_r˨*MPWh շ~nIsw: 9*se%[=m= dO227T"!)N+Cuu7uG%d&=Y1CxbL_f`՞UY75KfwJ^}ڃkRs}2K3Wy*x̖*]ĻF s7T&YytD5)1bg"pj>՚lߞBD khPc\c S rBhPl0 Sɔzi\p]3\/l?JkYVgA2ӑ"E9 ! ?tW#_Potm9Ken⎤ξ%#Y\oB[%Ŀ챪U]D^x86k#e) YeQ|iܨ_ UǢ帥eȖO[tz{ Zmq `}+![u@> x=6z .CAX ؁c*[V7H_Dːm 7l/Ik3s>9,:څ&-8y#ovBnh7f F˞ثj }?jG`CRωuqZv}=Ifx=D6JepGPki(KBQY+l/t߸bəK)@JVYjfB^jKC{o}}ORл)xB[cT;2wAG(A2 33c#gV33cC'/!&>D?g]J??}Ri| Y\ےn$GBzNjyq*׉5ֽpIfЏ$"I xB'N E7\&I?n0圡C{q<ǘ3BqgFR6 a9c`~e΂> SC~jIҳ>W؝d>[ɧᄗv7a3o?භn|ΓT,'_ȯI>E=B:浕ՃU Eg̹ݏm㊁E"e.9GgZ=V ُqq!#?=ef:JlkGTv]wsosq{w^WuݾeMrW=l[_\WVh熖uCQ\͖+{;Nze˶܋{ǀ;`0 0^C/@B `k7{f!μ̛7\C*5|*}l'Y-h=FONpM#3M͡:@ >ujYiEmi7=˷fo{eo K3|q~_80Y}?y?'O}'{ \2䭐X&ϵY,7vH`FF߯YbPf6偵hv)ȯm9πyBCޗ6Vl0]9WGO$ݲirlHuSOј|8"NY%Fk&g/ Dsr{r?3woS+0"n.#]蜠,K:cM~cK|IW/Brc14vCu+_]9m\s~m5PqK|g/ӘK*~:`qG:n!آdiKX2ɹ܉E>aGcڜTO#{L-eĞZET Z3 # O;ʚu8S8܊cfiPy PCV]|Knq7ȏL^߼P.cKʞJoa*/ (9ޙsukFԅl%Q$H ўX,lPԂNgS(Vh5J&Sʬ$~Bc?S4Ca7cjwSND* ą]NaI&39PLy;!,aMsl5Nv*298sch gkohh?_I^W*^CjnX/ز-b욛"hi29)Pߨ&|SjӪU9bu華Ƒ.Zq˼L@(<ؤ$4AY9/7ȁٞ!!k1lb<,/pM%i#͈{C6aCn{qPfi:ۋJLn{$\Ǘw\ΖL}ng)m\?%t*u$>s- Ϻ"䕑Ae~4Dgg3BJI!_yZ}Mf-Y:ힶhÖU0יp-MFΪ~Z7;&~sIp|ou7 Bo/?SkOz(&u.hHuX2؜h/>Db;Ǘ;X%".,LbʊW僓UUtZᨘYxjZ!&9̋是LAhI69J D\*Di"Ja-9EdN3A.:w(suAEUuG5옑ݼ9{Eu֝UkZr#ˋs^pblKo XE+HyK̪Rr^'Lqo̊%EƏA_).ّGjJMkb]Q1x\( Q=Oe-wEgΊ ,A D%EYm#,lTO1‹BWn1sZ.f!_տQ/84HӰJK;a|uǔΡ繕Jw]0ϣCof ;m|AT8cY>M!Kjk||KQ{>9O+AOp-W]\P6*;hvMO94tgRlJOb.pŨqx8=ڈr0'curRO8Lieܼ5-PmU꬚3]*Qb01 qVݐPZP)D܋@Hxa _a%)=3N7Ao{AtA;m@](80 G]T'@c8lfI߆΢š둡/f-Y~of+˕Q!BXFSPoB19r2FLWYn5QڌKp޼(a_, YK 4¶d,VlJo!֦TJ:{'0_p~瞢>2[A) P34;"Xy ϫ/ rj/I2s^ʃt܈>,dݎOy`(ri\W]k] + \$?@)*e?' <|ԫC<G*u͓ ܖzbTv+lxاs:YSJ1ǐW^ǏSa]a4L?{+Otw\<}bei>|ՉkV:W}ߢ;]a=ꌇp,~ HH(A9J\AbBkKݹv!K8UW*rzEm>Pa*`<^Ė@fߒO d;1JeB )*jǕGsx /S:ƉFWOvE}Oih&_Cyt(MD:0ȥKu:* |6ᷩlUˡr<'343rujQ"B|Wcesl**0++g45ҕ!TOD1^ 7 P"csJ98 0nOUNƤECkz>" Hxg;mB>Tx҂Z\ )*YdQNuW2ƥZy gTV$JaLI۬[REh ./j:Λ)xP:Hni8=UZ68W OjPH*Yx 2sA Mÿ4r|'TH(St@훨 N%SćE ]y{# 2napRI}}J6S(MEZt~:V 4&,KҾA .3JE7:-Qq7,z=Q;X-ZArw"59K5ke/\$HFrOP=QfK^ >_ /ܾ6>!rR )) I 9-`9 NWXZfVJՁvKEDwHXnqyV)Z HiFp2nd:@ HDb1%*;Zpu$g QvԙlϾ]xpp2<@M?D|Xj {܅>ov,vvpzsJg Ff]6>20teyљSܮ܀G) Vin'\:3Mn93Gfh%A\*ʌϪtVlȎg3 =RRꝻ߻;:?f#R_:[~D+ߴ.&̤|I0{O;!VD<1$SIY ȏ$*X/IS>T,K" K;KJ7tuf\ nՈvF] <#Goo,z@+{b= UI)}/\6ڱr|JehBjN>=X#A^{Lbv4Ա*n2/fF˦6/g0q*[)Pe*͒jmrgFnVٲ^SKKb6&5s-[ ݎoft|{xL{2G1Gh6^=v !eخ9 ^7Di?jw>jݬ&L0?7΁xs?\sn~pmT4}.{AV@\"*i JW0楹#$yk-Ɨ ۇͫK[x-,wdlZ=1))nf{bbQM_%UXL>na4)%v۲/+X%FKr-Xm"|sd` ΞvD?̞(usl }ކE;nk;~q;*k+7}.X;甔ϩ'4S7䮥>_]'cSdaV#=`l^$^Z%`~dۅK~p˻]s8Px].M-%i #teQQLt˹7A7\'S5k nV.} nJfrsɌH` ̟Qt߫>~V{T_pAb43ddCȩ!_1XH>Zw,s1=xTùJȇ3*)@*>+) 7/ D[INXM%C z^&h)Zz&S 8qˆg/XItYRM2qLD'9P_#2E9Z'^E/b<ݑ e⍳ /}zsk;}˞,[dJ^cv_Ѻ폮P\seb_pq-AterKv)BuguY(aWYF ii8fܥhXvqKmKlDrgt7\N%v#'sQ)S5\.e23L%uJҤ`K9rrdKB7QM zN] .|oJA˥-k

    |7.A\@ XgyyiCR^vD DJw}78مLvhE](y ";SѲNR9ȇ5߲Dq~Ae شXo J󷬲kE': V8m~c|S0 $?9,䧞h9, J>t+}Zᰂ*Wm#R]<)gJ`!)h Nt w1J ؂sob; L?8};p-FRh‚7~$B^l0aBOQ/L|~-l^~^>?mS zߦhUbRhqj̹;=5ھy?/5r%{gW;knKnm_}(X}Ϣqsv{=vC|B|T\8 QV (U1jTAƹT N<̙3HX_dڮ䨆| #ya=wB:)JKR: F8eupGஜ\ԒimBF˖(c"&%ЗDx8⮵o6y|apgQ Z8K&diHfῐ1H?AķhuKo 1 EEW9fa^XSI}`N *oM}']stQHj*YqGt'-:fbǜ=ck9Qq }׏$ 1U<*pw}7Gw8t0Xybc~K`l aʓ&xÅIKC\P uڡu]6YSN^9gۨ(#K.)~=W9|͜Ho{SѝJ[DTzV S|qYAO_2=h),վC %|)P,/ OSaQcr ȾMkesW<$<'I7Y*9ҠV`-(lJA/@ ?qw>`D#|of$ ň|-4^}\G^ f5REqw:Dѿ?HyS-7*_NC^Jۂy3o.&͛iZY&P1sD* TNM\Uf$`3vW=[GÁ SYU|wp'6ĔZ_;ڸӯ6cr_gg,7+=kZLNѱ t\&(Bx,ܐ4 % nL|”%M+M_ot͉ϒeo<e9|OG+eߒok~jT4.;3szb[X(XU k{ =ƒE$>E@˞k[(" `kceY#aLĉ&m_4zזeu"˳ Uf&˭RcEFN/9FGn~r-Bb<Ey iJ^Rܽ_D ./Sc׃Ybk=F<~A}湢<Ǟ2ͥSVG?"?uAf$b7=a i R}J-^WeE"jjRJl>\ԕ.CC8LotXQ8bPV뜬hk`q1D Dmq&D@,u%YeC%&EF]jﵮݬפ,$ QIr(mIrr4wp;䇄 7ƀ*H~=S ?uJ'is6ҿppޢ@g\Pm(Zd+bi -x(.H% | @"::šAكthdQg٥lj.͋Ks 99 3 /y"`/WK ef܏P'Uk?+gl͖l!P,J?H:`Ti+g ?R3q&DLt%ZDV9*:ƨװ8Ud)nT68mbsIm66SleUhݽ` :zb_%A䩨LM7 #S,eYf_X[0(4-?("S:B:ܦmhp>@>kQq?CsU_QN/=$~3,+܀&)jF~a1v];mwfF(Ti;D6ZKjskOJ=T\T3jr&%H%&B~NG)E~>ˢ㠼`7Ff LYĿ"2{]'R#y+aHJfvHN; S j֛ұ+n.G1%RCbq-Kn<̗rDG]D-u wRsb2E K l e{ەy{&9.R$$wQՄ5`oC'3ΦY,,CI΢Ƴ-,Ega=2)()/!JT!j+[k* zQ*ѴJT:-rD#_'o5O<jBu)` jх e{LbT|8 wȭTEB ~rEQ_8~4[/ZG;2ڳ4ns_t| Ɗ=_Ie;A.F"C{; 碼)\q?nߑVAyoxj]Cݎ?7P|k+Ի= D'eZFŜCM#P^Fx44CBw/K亘2)qRQc̑1:pgdj掁K,b[?vYK :ΕVC}}lH??Y5G6.rk{eko_|bƊM+ʅ۞b-מ"oEgxz,g+ _doԠmұ7 : {{`FtP&ع9TlP},7{ٷQ><&t03'iTQ n<Я1cq.DTooJGܭ^K +?fM:C ~S?>I=SMv{U,&S'`_&ȧs7i:,p4{wtuڥN1%mOڀ$n98tQgkK81bGwn' #hI>gzQon^bm9<8V=Tƾt0ԴkTDjl55W"7|#6t2JlG_@ AqTb@II xv&zM?>W׿Bw4|-](_un9z*[iCjlا~;tH* ʐG} z(BLHuXt_5d3~{|8i9"qۍ(: 4Y1T,>x\冬/^Ʋu F`0m9)QΑLG'οB}"g!sW`[`Yr.hXg3yx9ˊTRQ^cT$ROJF$]s=%qH@ʨ~KL! Ph F 0՟!.FDB|/I1cQTM?lί.%ͯ%׎~v=D'26w9L4AJNi$vg%PaOsf6%ś IT8e԰(Wu~̥@56<0SIg<&Bզy8우~$@ ѩ jCC~h;±):nWF)X7'BLJJ֍^XB^.ghL/ JN&Uƺ|Lps \z?;.d1V214ATc4&bʴΒ~b&b(}:cӰ ="WSmÊ(IOL*)IY/cZD=TX nbJ60n0Z*T" 0Çl<χPRl8? 1йdo\X;J)_&a%0kT#Z͆M iX$U4ctTiZОcڨSBVTH4|JםTd\GVܻm'32E`otaM-A{GuQY03\J䎾- S̳cxpѦ&e,.ƒ]({U B@eK2=jx/D/ "oTfZ /h-;'sM' wwa ̌WMJ! Qt\B_@DnOfl)R922}qdU&NHCϪsS9 oydBf\zig2TvZ7a17{;On c7+̚/J nCOO7۲K~,HEF_/,ϝUa%qa{QnR^DOJMslݐa< 6oJS>:)t^ 'E81<8>>P21l|# y=[,H0ZRv Ӟ RgQa4Dv:p ɾx*<5g 8?>XM{9U.)JL gM/>-Qj^QRIϳ>Ԙg2e\j@Fz _}2/_sO҇xlLu~`xC9rx,qu]1;Kt3f9U5d9MAq_ʇ9-{?;/H]FqMM00P&"Y0$uBV̌[͢]>qk<[%|;jZ;>_6SXTZi~>w9m/% :M%֖9" D޸L<[<>S<`҈ʊ9i .;a8~'Ny3:խ F"^rO)+O ͞bݢL8%Y$W gV: gV8=0ϭܒQ Cp\ucʊ':7@IKW ŖjnVJ1fCժ0NۯD"@:zvld sEKc' ,;f⣲(#L.PHUJNi J8!IJoF Gː/,m"״2xdm^CsԸ/|[.d㦽^a!?][̍ lḚ]%o_%cbo~&t Sdu.^/_ݕ\61_C=]dn` bbw`YYI12 Yӎ"d<{*5`ں{)OX2\azIi%?M+XkK9_C#K4vz"m _h_[C Mgގ9e N`#xұD(@1uM'4}!%D4H)_!P|jSH'%}UYua=[$s H5,rzSD:k*wy\phj32d7CțCB ̴X~`@犌ƨu@peZX!RTcjj\:U (5y T,Cнg쭴wLIva{-u^8aU?޷f߲J]mtƾr}{iS{dyt)(>}Si?r {J|/IpHkRuyEi2@.gn<鬞[b*)̒stmpyeNG̢҅&"H"rU:SəYm4:\t;J(e\8բyS$th fvT|G,LWua]~XcT)bV3bħ%x?׉TwZr=A?K:0'W}b؆!gxzi6gIBp8̓_J(JsB<'J !=}Ü9fF@<KGCe`.H' 4Jvd.@?ߓysGwep ;f1 s})vYy3~I>N5Uȿ^)+1u -i]5fU؍KkLJIvUsLֱ+̚K[JteoouOv-' P1jaoLGQ+S SvYNҙ3~BnO%ACu.-`j!Ô vS0JXl哵v 'vbEl1>5hײ]K(L ATj J bӑkؑ1 Prmh 1D(J؂:_xuB% ZE[[0$GRfa{aj@G_g1nJRZMs p"[M9#aSv>!ӮWZJz&TcM9N%;k9v53}#>VfcF{}#$޿~ ]YH3r]*≙a}rX5Jh[0eIvqA=v pp&1ן'Gς!:L0"<A;$_>y5|?Ԟ!%3^m@Y&r3,l3 %7jE,[xv]( k/%UeG]p/TJ\UpeZ,$_ 52WfKI(0rV%RqKw}rz+Rx fduRNR r+71 [';1ˤ"\ro~+堧QEO#<+sZ|M%G@ʕrLO}l@:~4˯R:ys4/i+0@cV"&GO*nW8|Y/ kGAQ+=EƬ?Uv(@ͶE]܊iRJl,ļ)} jl\'(H#b2|x١C}C{l6#G&5Dfh R,Î"RyJ;oE6_mxa`u߁ ykugF4DPuڜV8Z );A9d,2;aaOg1\S?7clх&)p9n}vPNvVMC3$\ǏgX%M&:^܌DR~E11qȤv:Z'e!r)\# .K: …WKg#cL Y SHt̳r `6MalrN{t"gi:j>؋;+::VrX85 ye !64aWs[ㆌP(@X%HO^/26dHq4pq+Wpnfvu]]gtaRP@]TdzMo&q<#@ֺ&~z<0948nډwؿ><39r-']+1u +ϒf`~r޽|v;nF= GL8ie6flSҞ2p%H@#`wjo'/:%\fS()Jg 6ʛCP7E:uf8/pqXp8iJ65ibMC0.:!_uU2vrrS=ZF[r['\/+ V'V!keeP˓5i3+<\1QId)>&\"`;jtV Vc㪎uvmM[Vzz-wncpclcz'B1Z $Z ABt{wWZ"~Ul;g̜9S~C6j$i_ h͍ŎRw\'ްI'UE\!ݬ 2dBPԗ`f2XlV}/qjµ( $Z霹9ԵQ9*H($FV3Nģ%hGhGx8fO58ZQpLԹĂOz_F+{%3q:2HH<,VDLq]edh?|ઌb+;ȝn?N? xgJ8&F!3(x5ΪR阙("Ls1:SoBdHq?~@t29=LF$*B3^ݎ![CZğ? )wr ̀RVsS8:hŹ ͇vN8Gsj ^[//*\YL>=@@fC62* m߲ $g@bu*b y)vg3H{S=X焖ԫXcФ=8,`Ja&}\ n# |D ;ER)(gIe*HtQX)|JKnLW"UV\oⶨa5VHS\a永lՀwD|6çM*(૕z2QA+C1:K-81 A|  t=ƞ"]O8DkP6gӱ}kA ۩2gd}wH7\ ^ߑ){B=6|x/g|瓾i:bM .]q4s5;wСDU C+NvP(ֈxG3ٔ!K̔MRPq PPaЪwdlB|iW^F>1 I+oK_e5hٴyoƪ}U;Cwm)G V:+席nNKCH{KO|k%{n\Q ]wpաWvM};&D }˼X<ָWM7B23}n# 7lr璛WdGwrSk/@f).teiuStu!a"fcb%\$"r#JU砓\{L=3cppf̌cck/[\)U66_ΛXOe#GY[n-FC;K:[8GO,ɮ:Ϊ-cgNcRg`NsP1Py*HW_Y8_yy{Ŧ&Cȓ8jzr+']ܐߓ,K8[y=,^Wu^%UXO+a rSnO">נ8 򴆦!Z#{(,3 KIr!&;SVR9cEHQ*lb<c{(ǰEՄZFu`l# JX@XV4[.m^Xo_S, "~[6uwOy2['6lR@wkU<ج𲱛WEujHN=Z_wקB6+9zLi '[<*( L@z&Z2)B4"lh硎@5J yjw384sG)xJDŽ/545c5h2jz-uB~ a1mب%+f)ZN[9ݡdgW:`SYQI^;I <=e /z.Xlנ~EJ}=PKL!HDMddC%3!]<4խ bj;Xv< {Ț(Ų.Ts7%.-db5e.YyS)XKŒ@d.aj8[*ǰ[.F?]7QP\w 7L\,a1w-߼ ɉ b-6&oqx…dP߷Wk#@,V}G>,.|\,;HE'q3O(aڷ(-p ݺ|53-{u;4UM'zsgkQ׽FsH ,~l]?lWQ _BNFW8Te9KOeK(󢉸 y&qtZ'szMkuknZ># [j7=l+*oGŔ{ C}vr sWe3VݿᏏ_4ʗ>)2$a#m*uμ`sO8t66]UB`r]n dgt&Ŧ`ykn[}4$ɨ\41'h.$RX8>J¢ SzM"٢ *Vܼ$k\ew~0_HR_nMiMޘZ?6OsLGc(3~-}Mv[(fH&yf@MPIBa0Wq@fR |܋x< D>q+&OzC{okl!/uB Q>AOA5Jhǚ/{T*._ɺ`3ݍfhdrtbr_ӊK93}VTCVAvYF-r-kl~㮝n]^:d\s͹Etw5R 0 }s׌Oie%z@ۚ@WV߻>/wxwלof4"Di6zý6qRW*PQj FC ai˻U-hGYd@艕zuqh8'qjunoen@̭B-5qpӒcw&߀_B4Vdv_xf>hk\XE|SIK`eCɨFQrQ_؝ǎ[Mӓ !E=|6uc:z)C0vsq +!RxoI4S7u=H( M<@#o][cE޾N;L+=okCB}8UZrlҖ?"ؘ5%;.]}M׼{kP_חvV 7 8 7P~$ꚕSl/V?LeT>|_ \WrUmꩿ7oGWXh`HKO|ڟ|%OOaD =u8GOL\v2 0ˠxG8bFc*?K z,$)?@jkK2 3Rj诐2ZtœI\湗pQ-8lbQxEIg~(nuj"7#,#β W&#e:LfgU G/JhYXxn!o\u*˘!nPgY?$<>G[¯A;Sg1OƄKtƟр}x|ӌJS~yWD<xA9}jOۦA$%O_rx4:{Q,N*Kh {86e"|}J4BHп*W_P tJNzJKu 7S8fW+iؽ9թS5t#2;lvolb3v/VR`l{/s 4ŗ7kwBﮆy{~|kw0?l0 **n h2CusjԀkB4/Ƕ;:n3(Eҩ@`t̏%'뮾23q 93Wܱr8O Җ–bd8`KQ׊Yz`{j؁s%4؏cTܜ|$e9}Gw4JcpU׻l=gRLUCWXw52dsqCqtř-(U;S,`Uz|\V=E͠曛'DdrTʄ͑c %XKW8_99J(kNX) 6YO3zb._Dbh5s^Q^W>r*zM:dg׾66piWY-Kv7 ˮn%]L)s8il>3~kaOX3\|삡ux("5C;'V&}Fe*0CGg8FjJj9ܞe:ُLX͎1#cb_ ^Cu`cRr.4q)*JR,wa49oP!UD0. n??qƻMoburLReF: w0[ğF NnRsT {ҡ#nBt]-R~T?4;VKWA>&|aS8ˡ}8!^vG vOC_!?' 3 'DF؃8ҡN#6Ebt; П?Kn} VK]qXz:M94:7a+Ey&/_0~ TlE"[1 O) 5Ra}Qpc ڋc%ko^ Hl~,| ڒ X6[8#շ붒nҔsٟoWT3vpXtѕ!d\%O"{<q(|xD6~O 'B?^߻8vcS7W)ʳb굵6OUp_oZ|%An,Sy bk@NuF{ʔ($AKV'r2`5:RN) q{Ga,ކKe;HN:6mm1J1oC؆8_#SM4tw@fT-0ΪeUfiJŃuKbsT 9Ш% >lEtŒ>π gv8iS,uT) C ?YYN4jY#Y+1,$uq erKu959l6{ۓ,--r/zȃ)5ΙBӒ鄟r3MSiNk<_Qa[L"XX(m?T@U!*ﱛ'_QYa I)DH7JBo@S2.$N)K(<}Bb'N"=C !XƇ8J{*"Y{IYCTFSA?*p*4֘[XjV^YT9ZKG(@(0bx4n!p ^w[W>z"!հ6i1gӐ4;q} iz*-d@#2cM.NV3O:'u =#pMȅ-ʏv9268B9sox JF! !B-ϣ:e΀Ojh*ǢS/,Ag}6q[gs5}pcyyRսGC,=Kޣpb'h+0A[+3;bQUzkUE6 xf߱gƠ-\]c}Ol4hGCki4rEnEw*ב `ajR5F/ IAA(ΪUG:D]>&mc3VSG e܇1#<)oELHM9hK6 'aH_j \\RC%VM2g-6͸$膼<9G(6X*dJ3,1}v/awYzdoK]R IÖJ5)'74`[JDҬo6+a 8 P4%5Fˬ\m8sp{V$/cv:q"2d.߸{pKg]O29$lǦ)RTB&G,G8'[M =S0-a+YR^%Aا5R1 =i[y tQ/6+G4^29Zj4169l _hޔA2Gsg&]g{d(n#Ckf TrFĭ~5+l-?th4$^[+#W8\/ 18RtCopӲJͽ鬅w.H2r;AJ'Y麬kw(ohRIf`8TNLfp.!+VUe:ϖ&oYל9ڙQ˖05!SǸu^u4Vfxn7@$e+ԦH]VɎ` nK!bYTQ˖r3rAv<ɵFuܟ;X_;8~l Z,A}|˛ג{ `Qïqa\8ul<u),<#ޖ5\fP*|r/G B"(LFbYBƾs["}k眵ۻ=ͅ~.yF疪T8A-t*yqp~*+!I,u2!}UpxTn#o Sa'w KJ[P熒+SkwuM L[+qZ-:U*0Hf2&N]YSF0qN׳З[%vE}o_,~U¼ez*PO<5 \S_Ŀ}NbogiLn-Nk = 1̀s˲#{*VUiY{8b'TDC$f؉'TiXKjw}]{j#`Ά@fw=P 9ivy#i O˧FA) 6`mnBsGp=O'%9[}Eӟ!8Tw O8N$f!͐Yk/Xu+0WjdPS6i89"pl}'1sh[Qy2{UX,CmH=zn?B́3Ȝ D+!NpxUyUߵׂ§~xj|o?H<K܆VH EcъSslw^vYyz+\ JB0ݦ)dzq9?y7VͱYɻF:$t6#^NQdqa\50EN"A>w7$c (qrI$ Oʧ|< * Ʉ_'oUUbNc30HDzC Cns19|LWS3ݸC 5~? =bu\.Da3"o_Uw[=0+gÜ\!䶩32hx(Yy: s~ Nۚ=˄"EL6&-Rr->7o"cbԍSv۬)n'M|0p}-/-֝'Çc]NmEIlz1s}.ò}$~%ѻɟz~Ҋo3咳U=݈ oYjhh2\,[2 !pɹH !kԕG Gh: uւ*{QbKPr& P떦pJzpۏm"ip0lx}H .P"ғd1'rZ$718Y:}.,Ȭ)qس]P=SFEe"x\d6/V䥔P,.;reҠ]f45Gb_Aw. : \4%(2T)@'$J%AC,swOC)_,b\AɒVJ"rm-5֪ZJ%wDdrJSO)kOS #bo:[}xD_e,TqF=0Vk 2b d'V-mDХi!)L"3Y1|sL |5TxjjXKyQG076/A4fx"b,6d+\՜ao:b޵RLx8[!^+0)/4NZ9eU4zx4Tw(("Ikqܩ>E+Nf=ʥ%-jh F0. E,MjL~pBX xr%˿촵}uю=VRZ,0JdhZ!q/mܡ/|{7U?*-Vrjx- Ex _]D :0fJʙ'?ld?)}RiV&GӬqO@ k2i7Liֹ^:pbi{n{U*Tv&W%:5j-;gP:g_"׋]COwdVWkacgQ\ muqZ'RL/#>cv{Nmpe2;/#܊C{ ɈϞ˄@6nf⼑Ǐ U'Ui^sJE-|{RA΄Ⱦ3--Bsf|}eՅѳh`TƩk2WFai!9X1>uݖKȭ%dV֓_9VQ546O-VgFٍ? XЋ~2{{!ѴT ҙQ?@F5-/wI5'㔱M+[*x\s%FU _nju"E[.9`_-?8Sէ5 ]3۵͹vΉdyZ|Y&0|}F<13<9㾦p`Y[2$~Ui"kH\tIA0CxpMu)%4q/ʥCp%ŴLX;FUO<5Qxj@3 sZZ$q''E|k3AwtIWcJkP_Eߖ|WĆ51k3_&>Q^:i;𴍸 f;'q_n4$f!'jfeFz62z>ۘ[_ײ:AXo0PڳˣьٍAcFA 4`HjdI,}/e)vj5W>r)?/ÉH@hd85QΩFZ#3E0%!4ZWr@M^I[F2w{.YL{ :L kZ:WLxh d}ۛAYp#N L$ M7CP`xKM6_mXr3=E m֥|czE<{]U]uPk4iY璜o(\qvXnr-ڻ45Km]*`LȓBbŭm-̃\ Y*hT>pVs2 C4( */ǚ\\'VYB5[ -Ϲ1oץmk k ,J{dXglߋ{=l L=qCx=*u_3o )%(Q%4|^9=֏)%l  .|O lB([-͌? d:}, "Y&=Dw⚺jX%p]8 ַ k$].^YzQ¶b f ٿİTPSJ6H}dy.Q3Js_@7/tfOBױK ^x'~oj%2>g6 ۫Sx"2g : QU25 ~ӘjѤM_ye kUި^5JVrppݭ#{>T:TYT*{Yk(+AF/ `$##ώ~0i0@a ] k~d 錹P.bYiȴ8c/DSu wza]wm& |4JC A?CpW $?.ҟFߚ~8R-CyJr~!QjcW%}xurt$FNl L.[* 6 B቉2h]ʡ/rb=΃ޞaޅ87 oħ~?B%>/aO e9*auۥexҳW[ ixTŅeBM޽ VYM{~< >$d,YֵPޏ$T^ac!6_yʋHY],ec ÈEv;ٙ Gy97ҪO>0i(ط"zN?M=/no]S[ Fӹmj3pʾZʛ Ud+(oi+?ȇ9jֹ"!N/ pRSnUĘi`H~)@i_j)gi a^_:ۋk̮6߱w ٩@VhP.pPV]r*# Ía5|%z֚U htNޜ9",$N`v?&isPuȕ,ꁓɡB(f_htP#AgKױQZҼ,QHvM+w'~pٝ햲 )"EόYȶ~S;`χfB&8J"l y晹\쇊Rb_&E}|`Hg3(J%4bN2Njw{9]6q0|g/ th}J+FV[2@<L N0j)E6B=tP_opHuRy-mFy=cwm&qR/(+- u,qZI[& it+Yk^>Cq͙+t@6]Yn(B,c{,鸿=MAmZznaOVZXI*Fjd!45ΆvO`"?s]mu[¦zH9BlXuX5{'*0k-0[>UƇɘ_b'n$eY%EeXbsɫL:`}Iĕ '"Y˺# Esɿұ_a2:ĕZ&y0MNJwƅw)'u|W͇QdW+9߰ZGb!0/Y'ubBlhu`2ldG?$ռkN&.6 8lƮ*ܥꍧ{bmHL0.-\ ~rL(B7E'V(F]vMyvpg٪C;:7V^XװޣXMהB9C&;*[D>pf\aޮnBg 67zȉ%sfD*Cjobvj1H\9gA֞k>VoZcfzB/0A^U8&@7zpQu˛2AxݢˋT)@ZUs#7]uw7 ?TܬK#JQt9ywW1p&?g!/Q͖PP!ttUi_'53CU7$tzamGf[$#XM]WϹ ?:ɽD{OǗ n'Ezg y2/;R躦3jjrTOU꫐_xᙧF)z^OnW-_⪌5$xϵ,%~m {vUæ[g4GtD ƘK"akȼUs!S^g,BT)eq],w\3ӰaigZShb}iKEji0޿lM t٫^xO/{O{}M/il&^TB\c_]2~j/bW)ݍ_|#;%;hI0: T֭p?8pU+6vrrPI#4&кX y/Ԭ%]?7z2>Uikt8:̦rZ:(1'5Z tT$"o!s|9L^%Mͺp\Dxe5MTw\iz|%GSa5Ut FfU*v-X'RHȏH^-V<r ZFT |VI)(d9FeT˜ywdV14KKQ0 OP;'wj\xҡb,%ܾ] ʼnH蠣n,G[z-CЯPPUl,)R-sw \1.P!R1>J 7|x;f;9vHw.L~3ޤ;pBlZnJI\B'K4;$߷i~/سf t6n$=7lR;ZIF؛[]A۵`:4c( :s?EU}Q*4>$ q%>a'!Nڂ~45V֦4,͜\ G8B7N=gc)G79~Cn9(G'@όl[ x* 艉iKUQD#7CFI5Q(\=z4N|~DL8<~v@j"eu&AL Gv/tP.S(>)H2h%bԅ| ijw0d. 7~QQ]B5SJe%lꈓPJrתT o Ջ ~]+5֧ mikeff6wcA1m+S%5Rm 3bXb#WQ9'4ʜ'@DT:G։Kv[&4Ocef }YNXׂ> mg`ʻ]6 'd)ӋKo~߲$ӰoBB'Ƨy6sCsrТB;/435-XW*N lPO#vٔSZE(zőa=f~͎Y>n!ZSX }7.)g%|>:`&W؞މ{YT{8_Cao2H$}R5;*\XT\jF֢ϒ%Džj~=zB˿04cŒR>J[' 3} ;SҾh[ΧD:BP,{ HNnAL$absx$n{;T7@y%+/:-g(ѩC"Ec8=y%宦5Mft)3l] C:HE/ -FBqs~K 'igÓFk-`{iuk:yi]YS*n&W[1$t]to*\A2v}5@|h+ߏ̹Q n#4J x ~wCC2Y- 71i_c%Kr2Pߙ Y}*LoDTd%|CKrrCwz+#T$Ǥxgwͪ@zszcepEuՅsf" 8 _s`ZYB-Acv,%t:,""s*3s ܜtFP|`Jw'Q vy'# ,=0kJ ;'OI'$jR\(#qG2CWף=LK9 lMAm\)׷4[ x¾M5}ï5CaG0=Bt?"\X ߤe*LRߢ,B$h ZBe:5f+,PWDq+P՛RNkUpy"*'n)ujDc/3)z 稥*gpMlzY>eB yj'\[W5Tjpl7~o_,Jǚf-,hv0=gHn,M"1R}{7a`WdrNaI8~cӾ5(-B$ piسYz{ O+izn<#ٻP^SԻvIx")| fMW0صAϻ.=>K}ʑ'|T\96BZHqeE([Ȳ1G^,v}<h~X(R-Bd`DM\CxSq3p UodiujV+XDl]&Xg bvG]^^7/W%6E| ZbP$P%j)E7*qe q3{4*3F+qR.R=T\O KKM  K[szVbUwsnŎ#;/8F?̽m^PT4D74eFjڑ 5dv2>Wd'<\T_k x\xfPCCvhi9Պ2:,]$SAyW aǔEf.O[⌶NN)zUGOeu/YO KGE@nB+|@9ayxq` 7Ti,!W569QPsVC\sH$g^A ɰ!0ܰAC[-5tG9]IXRcRJթ:T%,Hsá6$|FgADơΦ #ڕbrfIŶ _/M$DJkp}NRXy@Ecx8(Bw:KNԻR> ݉@,0D ՐbL^>Qe'2q~3e;/R1&hFÓ_+J~h^Z-d%a b;PJ:|Q`-Li.VTr1J4:g@|,CuijB޲tn\Wp0Er6Rl|Sh5R _"V*mJ6XcTI&y:ܡfB)/1 CSw΋EgR]'qij~iZJJTB_2,eP&#"/m\s~/Wt&?\˓|7{Σ1hOtg_jUo{./*Q^,jl\NBOR;LHɲ/jZ*5SlK@{'֍Ffom_m&̂@=$oBN˂|)[7E876h̯!A͂`1SV5xT~h_h_OO06|F6Rqhm@t9D7AdWL'j#0oiI{ 9:zr m2C.ڎY|{# T:cym ݲ(zSk:J/ܹo_:S]KR}l/YtFvdtz9=5]݋ӮT: m%Zt$A(_V;Dީ8Ɋ(i꫈I&sU0:!P!@Yt.O$ 9KVy~J@(Z g# "e[ex_l݋ S׵]]b~yvE?aJjRr7WiTXE٧lt-nQ+|qX-Lfa#FBY.cXwҗ|60 \e`0wM!SsZ @ c]4Kd3(cr 6j뎴;WJ+?(vt6brx'WE# vcmcEisUiNN -WQr Ӧ?p;mv/*>8/ԹKeߺV&OWC&r6ti`F vY\4 !h0S~ٞW: ⯴`owU@f坺 Ԣ~džc)΄X_F. B7rPE3*^Q\kHT4Ra g"Ӥ0H(+@T@ !6v&VX&]h4؂6,Ŵ)"4{j4Z9j`c e`IH Qmhl#b=" WYCeϰym73c_Ж"2 Æb)X4 >;C/ZEL};Y.K&-j]#Qe.rlYDz4d<\ZIlV#O\CV e6"|iD* 1y\ ouvs4_IB6&t6Xh3B"q[6Y3rw![0N,7dFvB{ m]Fj-?WjeYi 6Pgq= c2fG5ePLD&5)NO4uKi(u=ֵ `5\;) YΝ<}ʇTQuְguL'pږy?=uý8wpl>,a mHҝЅ3($|WN|:-v 5S")f+Jm_MZL#> d=Mi\iI rP*XRJE!?dp&R[d*Az ְ/T"e,o]n u>s.Ȼ~«Vr|+a芹0^Ke'Vqހ{^< xXBRq,iBڬ]i1Y_OU̺fR/7zV(Q@y |ވ,ܤƆyO{pNle]H43"?S^$A.;lck ]i_eB9֪pH$7T8BDpZPEN3 aYf``YE~4ZwSLT\?; Mx>T: ^!˞c6N@"|kI{)': 7!s:*H_l UYU-#Ut+dPOOl W!}/|-W*ͳ1N"P!/3luKb%8zM&՛HgtD_|v@TJ㑾p189s57Ȁ4n,|*8P~h]ؿJ~D^4X*P9q/3 |k9NSD6Y>/(ه_db9wk] R(|J+z_ԧ7gTKj>0}! q\# ɮl\>W!$rckHqA !\XaI@+$Rs㮋\Xi:Fae(J *HifP1M2WFICP`2-5V`b0pj9S [0JI{hc-&ȫ8L ^f[3pV %i!4)[lbAZ@]Bf:XRQŻeRzfKprXN#HjVfU\]UbO~O yB!9Bi+|RAE}M G֭СXJ?ڂ(,A/VvGQÈx|N[;уOqܭf^$Sx٥ %^(zYMnF;cȚ7핪P ,?3qHoK7Ry q13l$usME112ܝ?WŐϹHKV"1'q(oWZu<HYy䗥>ڂ&k!\KlӼ;y@+J6T:UtjBH*  S]}|Pe]-)-l 8*WmFzvJFtu[ }RdC3T08mC:K^H uB]wjaG+;AV޿.j^YTk}cLaZ2 ~I%Z .Rp*& )dnE scQJ b7ZBm)ȼ||UGS6 #)''U,HTWjJl%N%S\Avjҁ28uDϱ`f>oh1ԖA.X:cbיR sy P@۽+Q IIY)pQy9/$9U.ri6L k3*?ŢNU>V~e i}ZQUhBpWе'O1T~&U  *c!Fg5ˌ.)lHC|]# 7Vs`+@:/A$U.;|Lԧ>CE]jK.=r6f-?=!w޺{2^[i7 /0SvZ Dawǽe^17Ƙhz -l^)USt*4ư{QOfЊ\PE@OSZ5,jY  gwMtw /I+c񨲈Z?0ڶdyD-S!ݠ9RZ1iL=Ow?_M [ 67|'TXf&לC)Eͬ{ lxr* +@TW@՟#n&YEZBmW`5; \{UeaKq`]ݽnGL>imI!#w} „ sⲞ8a6!cn~ruz=cp=B&7$ , X9 *OGȯBnDႥf/jFeTdKMC'&蔐 xL=ϗ1X PRԷ{jYX4Z;~ JdT$E 8EŚxߣ:dGJcc9#t eCppؓz4|xhnz #Y+sF8|jKuxRkC7_yQḡUyK6gw`.\忋kYN߅ Fg6פjj]T>S+|Sqp{W'ZBjΘco5xڅիUۺ$n z~]qZªKd o45T;ǥͣ™Jx`B'huKkSCfUx1ALk % B)+]sztNø"wb(5u+#*y:rԶͭ:2"D{@?c5/wta|iyUvJuR79;qwiq&?˜|^T <{Tt< C?H 7Fyʠ1)C%CݬVgaµiu =|קgF7Keʢt[G7Ζ>==FP,Zp쏷{v zuw3i.t8UYXW%-R-:}ЯDkS<6 9pB#j*{H,9OM&_خG]꨾r -5 ܮywul |H˳}[˲wSA b(351S*lC ymޖ3#@a,ݸ5[5L4zW5,EX(Fjym+9xw-M<—qc^`;#پ3{Zx r0ValH͆r3r2)M8t&Hxz8zIꬆGAȗ~s\ 1*ȿOrU[S:n`L<˩JFpOvUInE!]T*8~8t|sO6f-uv*vͩϺ=5 zplu j{S\w-guG>>H+3e~eCyYB>r(I|$iYF *VNMh {d ,< Yn3Zj''rZJ' o,$ԚZ0pCBށr%sRHh}*PRx PXIザ < #sGoXqaڇ6٧62q8Y,]..8x}[RaF [7к-c?zW[UV\S9&{Gso-z1UWF<\UZGdqKe \}짤}a/x瘸#0(]'He#~=2:qR [fߖV䊉]S>,G!F^1A:g_ 9K鷿=P7f QIw{GߟZi9 +D:L/7{Vbe;*P0muZ`Jj,)ѥΤ,=pǎ,9?iǢ.Sb-`:JۤX|p۪z%SH$J_o~KE9Vhw?چCqHaI1/[^"4Ͼ.LgLR[ĀŻz_\ :Ŝ otUH%s1"4 SA>25iCnj<&q$n-0'BRϓׁWn8K 2x^ȗ Fc r d َz=Z[.#$V=.`B IEHT<{őb))'%Z!Xsf, 0:uZK-J$v4!A| qX<, i{MUT }On#[8zr xZYw!wӄ F,~A3ubmIun{r faQ͵WFg&oB69 o+5UbV wp {'ڈ2O <œWDFw,\C:{VA'S<2g>TKZɧrY0v32ņNokݝ:Si+2*{G7;|gn2hH+n8tK횗Eaajs UwTɷqPVh[;'+ʗkں|^}]ި0\՟P5ZEtV&-0ɮI+/+X{x/$,)(uyKy1o,A ec*7;1t␳ik4ڹ=tkVE#BթԊk2c0|T1Gpj.,I(ޞ6ȒU)/}~J)P=G"F}RnVQ8uӌ^`jNnwZ>,:Xȑq(rv8ӂt;V]HW6҄f3!8xj]BK$M/bSZs?M/$'h1岧  x\қrbSgKbϢ kZ;w/iT\͇jxλ~ljt -7RgTb>z֩o_ӇNj/,oҘb ,Mi*H?|~֡nҤő3@x=G6v/#:gZ߭yHg|x߃{|0|'h%KoB6?}%>?%hs$W^}6+ĢJeJ.N;"c[[ɧ,_&on_cӆ\mPcʜ$+/ʗJevsM8k]aZF.@_tfO7Sx/T)`&wC,~4TL,l4c-jL" WU#{&OOy7]1yYP~w{IѤ*gZ;9!}7?J6lytu乣3#Phg{ہf}@;±ɯ} ⾂ֱ<:6{B0z ꘦Sy3L ]۹tҳ`Ex_ߵ[9ҥH'3Ol bрdJ. w%Kn 2ݪM2E {Dw66bHoK}POCyA3PRVSSu z[6 Dr^ -_М+^dܹZ>4%U8#k5,o]ihb/W5 &bsM{t e]z|jQ4霉rg,b)vϛA8:+~ M 9+u)GUK%z<ˬPlo]ѸbҊwh9 -L< (r~cV&kunf,N9} FRGVr( ߼D-^I (>794M7}2ul9 iG9 T SYpI(OO@V?aR :'?!ߏUo3zQM2T{ //}p퀣[Ql4,}[}QE~֠2'R,=_DVmӇƊLzRP!we{եܥW޴w ϬM49m?_\DI>&:r܆ ~\=cǠ~ 13Ѕd M_@Cm|Kʢ>yWl2eSD _–yie'l22UQ%PE0Xm]'OV68#iLjAd6_ǬisFT*tč:R,R,U-,PV qČB{E" 婹11 J-2sQaX%Gq9D5(1ۄKn75>~U "^ZS*:-h(]TtqQ$m֤Al \=6秣*j9-M׎U[Vpq=709trڎVʇjݯ 뷘`M%˦);P4K5XyD6]-aF{FܕQEїN1H "LIͥ.ڡ_$z1x穕9BOg]{y5ŹTh<5SuM!5Үx:S 7Y= feݳ$U -!߂ZֶvHu6"BH>q&NK6^iP ):՜v@ G4lR1I2W2YX5Vb؟iV=6<6jJA/OrJG-av+yd X!)ل!d t9!lA::$1 %(ewW8~= ?l4BtRhPXڜ,L9΀c俾 k9S+\%p94NIP5kiV">C$W?{*N,+YTZOuQxR7 MY+ɖdWKVdY{qæ4;j@HBz )n I6nvI`_+6y>y랙;Μsf9KQb`v;=.0>Ҥ{g|XQ_ᆾ(# _xOV<vT@a9O[Ї?Mt/x:# G~ l !,q ͙,j3|T! OЪEw{3%LEUq;QПˀ<)G$S駸WWC>woLf])D{iW1ܟ{! 0t!C`ڵ+C=KDqxjO;mְxMjC2ð:Js *F lM-gē"v@z-/6#[jA39 ewmn$"TfEU *sѩ5Rwgc:  0QF61!w<Ƙl*~ħKW6ǛڇʔpCI(? Z`oj.[tRH7P.uHrOZ<6$Fϖ=QeU[ZcCB2-" ^ 3ďE]W<JX(sSD),P~wR< :B[&C]oݻo#%"Y4ex b`:RxbaT;gr k{Ɗm@ؔ6Ruc ;L-~h$iw$;J@?_j6cL&#RE{ [efǪX<:Z5>,uEd!؊,)k]Gw!1:#UV8r2 _)d(ȺQwWW4 #|#m\K \_wR\9ʎ7zP|HrxP&}QaR N;/OUO6dP\rc޼P4rxTN5QhHAA=A&1Vo- ""Gv#41#%NzCV:Zt5hDZ5y|ɦۆ4Ҵ(O1uc֒/3v ܍_$c᧐~=گzf SQ°k62{mmt{Q3V aE5ֲ:GƑ\"wtkYNj Ӻ9ׄw]R'Ɣ3_88m jO~O$5dty%!czӎj9Tc2VwN^Fy,]po0Dĸ9/>3Nz 7* b ޕfΙWir`!Da_,?յұE#dIGfTߣ_Smix;fп03%V pǜN~ E/ qVGłX9F_956$=ů U-nkϸUigHg-a7ADVK&&ص{0:5Z4{{lDTlMtߜ1p'ou>Z>J@ﮦ|#RQ'4|Z4*(k<K((U'03#!KH %b>L2 xQ;׉, 1a)EΖc-e/a &OM)_nn: >%Hm" {A8aÃRJy{i9i(6`8@nn) 5:-CIR?Rp aiO)S^Ӂ}fcR"CBTfKL_ b67w{-璄7"+jo,ELo5]rJo\űT,¡_m]LV';8_u&Oh:M,^ |πf#AĜ?J8i8 a ^hFL]KHT0hԢnsj<9ڰvv?>]X}y&<+YjXQ.Œ4 BMt1lx/RKTvUS؃uqhhS"!u>V7Bx;醤UqC#>WӚj׹1XOoay8C \YPjPw9UP[5]oD~ pr׶v߲97A5ExW!x~r0UjwqjZ_i7B/5zS>ڕc$"\1"rf"9Ei:e襂NM38?|g]$< 7߉:a#, ?k{{1!8 P6k"z&9ߍz[_q J6D1O{KHXkڼsSUʎ?SwN}w=; 'BߦR3c ;L'oKNΔ41%3BJ[BG:a.I,~r ;kcd$h])q*&>ئz%uwٰWew g?Cs-Qb <:'vcԎ=ulr/48 L g¿ o[Z-(,}LQ:ݮب_6Y)i3 qE·[tiTk.4,~g0 { N;K<\(suq0j{KX?p߲M,D^BsL߈hy!qxP-N\ (t<ڪtqNUwmv"!X疻ĆE99Iq,~ܽ aކݹ eyVtgxKтK2gsHo4ؚ~wm?gka v!ga?0$y9h< &JB2a jAl?;SH [_lYwzռ55Vw@j&HVv_6_+uII&Ny\D֠5!+I=UZҹ.q^ NʔRUbUQᱵ;2k~LIRI+(Ln[߶)Q7iy+DrOqcrW Y+ӻ"Md/rޤO͛}t$袬=ඞIsX @kM]rejR 4.rm|υ%|G߶`ʆ:Tg# FiUZ(rdKW|4t55):1WiYP7kkqSef&<퍣+͹\! 2F*GnEV9R/MGc:GaR>/h05^_V<)W)I о:b4ME?pOpzj4Z4" :>͸}_EA{n"Վ[ȿ),[~2ѧ9!ɐ>Ob%Yh ('HP%6t 5.T&Jc3Z+M'B E |Ic ."ŒUZ="JHߖDŽ8듯# .rijt /09sL=d&h]{~:J##c@d .t=bG׉CyH2X„]G2a1w|]ȩؑqjY ߍɸꜣDȧa~{;9c$eL!̩P0{`MK7m{XBo<0bYvaFSHݤ.ps-Weۨ/S TY1b&N_H?KOObEE YzS**:JUTpґPԓ_/tP놺} {*׵&ڃNadauB6 #U%;cZE8yK3m٪em)mˡܚ֜#eR v%0 R1:j\7_;th$՟?+vJ^zvS(hO/Y|XT-Rp.sLrg"` qi*_ˣ>ȗ/YbYۺ{)P_\\Xt lr[df{2 IL+,O4 " 0x1nFrOֆmI撡5 !obZեҥ$/Y–?Y;~yD]QWwgEoמٹsK9_4Re;ㅙm8CWV>׷{jn 0%J:!+*Bv1a/^/ԺB@ 7j 5gb-Y~ mkFaez&& %$&BB:rEE_E͞n5b)Uw%f5EqsUb׳a}J|~_CGl* 2;th+JGsc\&,b5٭F,}i\:71Mi..81^)CGzLwҥuvgmqn"Y[#X_ED"~k纗ӱ"Y =к$Eg'8&qH LMpb Øl r`6ՐrV$]m+sd"N#cx }h 蝳6Wo9*h#T\ʒr)VUrjmK4g9U;/EN~ _Aױ W {Wd[۔_`tu;=7V,QLzCdd\go-usg%F[JST~ J( t&ZL,pQB c\|g&|r)0nt%Qo.?ir ti.TpٞO#_eg9_BOfd;LA{vWP yh 9 #ZΓ%ʵ+}5Ai|cyUCn؞[vڒ餟XsOe,'e^95qˬ{W&|n q=S#DlYȆv@"C/.ܤD+j}} -: XAR퓁sx-g &8MIb`/||/'BMܷW^~`w_2WȎcc=|4=ˇ_~S|e[!#DLk1D~a:E=kxޑ.G]}ɣͯ.dU g%iLS̄:%pE 0RmÅG^8]\p`J- !p:ԝ%ћ_p5R{]ircZܪι!hOç6wn ؤq5<%:}##VyW,2 "t{;r?slg)]Y&GܱnO~# #J K!#AS\`9t A5-{z q+wuYiR9~7;-~obk:nkR<* ;XUeT5 oe$Vk 9]%y>Xy7P~xĚ?>C+k3Wc42 ҚI@E"#VSbV;֖o^S\(zbB7ѣe(rG|ݻϩwUn wSz_f,$ZrrVoi ~$*Jvd=֒@!${z ):Jp\ȻRw[EE:[1umYYȲj%A➁'v831 OC #3Q7BcHH3~$ҊҸC( ]$1 @@r|0L[D-Tke 8x{ PK>7u{6~~J - ~֡mguREio6u` {jfJOYI#$/%c$X-n+ b?t683]& ohҝ|_&"i^ui4KC^{oVTh1rCU1zO?WboikqNq>)o/OMgVdeB!sK' ;XVSHTQ-~ _]< YGMRrɺxD]:֕zGMKmjWQW+< wLEʦ F6z(^AV6Tx)8.L2򚞂u}{tlSʴܪD#l;_ӥT^2lGvCd % /3V&g9 Jc8 h$'5`:p/Psv6>v8р>H%Z, l ݄gW>)9DjWb܍[RzV}"o-8Kg>h f ,`N!V VJE^TZjknH0aٖWj5Ҥ,ypbw6*C2R /r +-MjGs WEizE6% ƔB SHOϞf#fOpc{XelB͘2׎ bp̧d. }GiI;M-z=,nê9RZY]SU+j=p)=m-\Z&P@`QkCYZp{ٕV-yyB[R;o֒7:N^^nB촥|fWR0~ERr<ƜNrc=SJ̊߿0,^iP++ʛFjRߌԭf2lm+ʫ\ 7F,J%>u^itFXTH y W"^-͆5N'wqtZؠpXq~?k=OΘwK~먐pS;=ZTZZ{dd!$!Q*o:nή$C^DzQ2@i S\ 5jFk*zFG;kXT**jȇ:!EgmNQ0uD'%"$Hy ی0N_R> )g>5bN|U)=&Qf X+1zUjI,6y*Q8qUXl^"W}3-Ԇ%og$c_l$SkzqdOkr(>>hϴ]ۘ Y6 Z4MMZ-#?kxv:;P*~ c`穸B{ֲc݅юU+Ww:öPfDnLM۫N6\deZL2w5~L+с,8<@uuњs=ۻ}c;sKm%~ h)Y ,z+r}[4o=EKGL^_?L=IeLїi1dgOsw;7Ls꒭R${ƸsWGFŃgzf.*M%^a;nbZX~x(V=RTWvZR |eF(~YD6{#Civ"[!@MwT ISW`4AK\I~`pIq̒MN o;Z\rLS RiB䏝Fc> I"t%rI;EcCIp~%^܏;z<FHxjBy<"o62N92O /T؃7~9 0- T.=@(vti%TyvޥM<Fj>rE/AP:[5RY(M 8 $l ̘}>fhό"*"MqjI^t&jE!]==a/7 E-GXfRtLPzkUw,qj.&`x6,e6K$9⒫)ʱRKZϦ>wFH91(v X⍢~};؆]󂉍&w킠!ۈ3oMw gVlM@54 E} eb6#KɢiieBڗ$-f `>4|0? ͂i"2-5"-4҆Wp YȿA-R l䚅98` s&`}!4ȗ\TbSF$_f#iUL?tYC[#nzޒ$v M;ֲ̲gК,U`'HcBP:99ͤ|gZɤ9˨Ur"CA>Wy7\K>[Z"}N ~P♳&?VBe;D5&(Ly9zt >3P{9-tܑ`3x^k_,e6QLp#GO WxXĩߴGڰmWϩݾ@I#[N`(cLܯ"آψ ?/Fa: (rx<(<e}S N֭1(((L; }ANJjkd}lhbu&=_࿓,p&B 20 w2`k[dM0: '+@??n)KP ǭ{<{~6ތ8SkֹPl)'kvinw_??V`Fo@~()Z r1|Hx|!-P*;8 ֮ۂ;*j-i?,+߿(u1rlɂ]GHoM9ڈq?B a_)e{U6~Iê!8U,kԃ!^bQ _E# >>#ǩ*bM˷xjM 0 ߎ޹ w#W&3ĝ9^,1dM[ln&E]⊍45˔p e ?4|0dȜd́*[X8lPď691Ȉ1 5<ٝpYd3MCGM&v&r#lR b?+ҏ ܆?g9œJEz9B9ƅN h'' H!4zDH: =kYpglme8k5,s{{ocl/3es\e=$CcOR۽J<698+rP^;s2Db&.$q?]d["LEɒI2vkB*$/%E rxjO2X27rW;r>Բղ7)Q)7Q!sEbFLp1ysomoQklqn&N3Da++d a΄Výj˸@",quFjSVl!H)](޺K - Dsxph_ܸ~zb_ y;PlZ V &,;;҃|-GO>t ֢rOu 0Ãx#0sŬþeadWȋ\:jSdαKZGz㐚y+bH<ouw/gz`8 g}I~LYqz}Rd}Cwx<,.ft7_@Ȕҙp&&*}f`SNB/H'[?'EV 6 Nc~jpĵ2FbLjbbY4U1/aD9dT :'0P,oO'~,og<&PQ@4j:UF([l`!H&ʐrDqO|Jۭo\ruM+:ViJ* Q%S~Orj?t +sG95*bqsf))ȷ@iLR+ew+$(!W };1 <3@B EvڭO?t* n~+ŒkGKkAR*T$rVQx3 .u/ H+ji^uJ\rOR[lS (Wb$*2ק&זآx^嵥,6UYOƀ!u[/,-:FinŤ)kҠfv\Km)(Ei2,M&SHd*J *aԝ#\Nn)Tl'hZ%7%$`;,6gd=-V{vY&#"A$m3Xo6JAzzP19T!J] KBT'YbTEѵv2ѓy(sjbQAʎ3Иa;PQlb[yģQP)15B& [QO#.lMGy r41YđbFBZ6n1;sG( ]QsT\@=n*7qlmsAmܓX6.U`(3F$;A^YJHyJ8&"*[cɩ6#ڌ @N9xbEm?/*"56nP|gZ# &*pЋn<], qpEgy{ew8qxd%^;L&, :72 E ۻ8+P4mCdCBfs:6~Oʪ%m;6y݄Y$=|6 ~4@[@G$O0^4(ecbbZeZtD!tD)93)DܨhFu]QV{PDg0Ǚ=Tw6ps \ek7 f-^J<8c V8E]HIpYBn*MH_ZZQjMͮ>oW=ZM.-| I0l{'l>-WKbSe `td(Y}pgJM= m>ݎ~ .hg3ҞЎcAH{.BF.7Pyڂm ]H :V3PpOٰ-wR#0)v&FH67MȟH}wג:FOEB R$_F^` i;i Hc {({9BiW1}6-K$Hkڲ w1o]|F{=o9w -,`\7N~2A@|/&w[h'' !I I{!Ɯ$ +!6 nc)C1$!*n,I1b"u\!XE!ml+ i$cH+$}-.id|!d'?FC.gp7"QwJ mWba6t+!xV؀ %xS։< T$Hy%bh !Zr~|'a>"5q@2߽l~v*Row'yp:EDhcvH}|0߭dg#U0Av.B[Xr̈́iH rE0mmk&<Lj VCW7z%n;=K^*!)צi.Fhȫd#n$ k&Ls `k&L#Jxlo @9W5YG2 KP ؋RhcБmHIq\C7nQHf mϲܿ JS9sȜR+/mɋm?0 IoLv'8[66CWR64s8;0* p|MKI顾dn&5 -VH$OI?EP@ Z@oҡjo/ FRC[{bk!gւk1w;jvETw-نu)pj]5ֳ MZWR#9c]Iɺd'n"_JV&=6weײYѥy@u)`_>L lJNPRKb Ѯkp@ F)L}iCQj 70i$^ƛo6%iP4e8^ f;"`>oa\}>Pv:[^99ϫV{ayDy7K+KC/O| >coS4DŌ|X1u־݉31TyJ34,SS˓TtE9IcGߖҺ.S~gz]1X/cwbPzu/&h`$uAD觇?% *m?U>ޯ.m,ݿQ)p%y؇.nLdEx3P4_=r#C*^rX䎉lm \J>ӥ r|P{:geyu_5KY @71;߁:!!wᮂO ,>xgr//7Ģ "KzQѯ=~o#15|Ap>3lMe25]fڄ3RQ;}knf u^![0spk=&WH4V"Nn[+d}9XрR3s\-Fh =KMk nZA+ǰx2u1ՏkcimzlWd%6q5jȸ/ v+Zs:Fi8r#D:Z&A52W@CոE:h!դ]3E05T1>L@MGD OOL|11V_#dXs;J|DQ0Vmnf)/Ц; x~RϾvB,HdC':RWR)% fqt(Sĺ̡jPT}\0# n-7ngʹ3,h$<76Vȼ GռZsƃXc4R*])}NF7dMpWu{cg/8PcQ\M?Ѿ"?!Em\Vm-t] }zGU MeQR7G: o5xkۦ:&'6pn{#E J.Or~y)ೄ\1G؁M(7Qjœ?M(`/6ZZs('ghgiùRWJ$U*Y [auF _XΥYbqNW"ZJ"&S pG)L,A?Cʕu x*Oȷgx9!?*b P殔I 8$"Z񴮩^;NH^+HgY5])͕U{AلuXpb MfwKV!5"4%/2&ӛOs{=トiZYVjFrrԸjm@zz8L3+pTl 򍹩.Ap_ZoZқy%lhD t@!.#|͐&D~GmEq,{=;cY6fN/V4kLK{RjtV efՖOpXZ8VoDpL/36  'd._jNj[_m.R !1ǟp_|;y9;szP";͗'#bǥ?cJqGbRNBcj\Io._l,ʫ(խ.[*o2B̙]rkyhRGlOB1!{a;>oNKWJAlEt)i6Q c()a(I£Rne3 $'\)){=*;He˒%[V%&[rv9Nz! IH%I$ RҖ KIXJ`!$;3J}}~;sΙ33g9c$r&=/kdKne}TAݺ]3hYiuqIY9^f/pA_:Q;ZJvrEJBEІ.% J1#]74Nx*.}q:…D r 0xMCM_ٯ'Aʩg٨N+Mb]{'dI>+V9,eej%DD>`pշ_\6z#UKק@}3w.rmB!<ؿ9KGg[ u:8$-0*Z9<$˼)H,7A)ý ~ g+9Π{p5 &C)R[gU{Ϳs> A#=M2# O`[½loGȊw:SS*edcMLJzu\DfsP]m(KSln2)Ӂ @J)Zk LʱId5Ɠ@Rٖӳƭq&.az# omGI췸>P.OG8jpIjnə\{@J}Mp똸yfUܘffś&Ij bz2U;L#~I_Xֹd9@L,`- rh \jX'!?1e7(3ŁR #,/V* V6MḶX,9=.uSD ;NO3D[:W*5&jtHjFֻ[(!I6&GKPLe2ĈteE{#]"H9*DHw.o בJ1AP*H/V5JM͑NC ,Qkq4a\{M D-ǜ3!6Yu`etME\&SE~7єeǁ1 <ڍ;pB|u=kPWH'y= fԍ4''5T/PfW@]ќ#!eKWv ;) 3<0F}2ÑoX7z=@gЊp %~=H)K3dGEI6΢gN.mɭY0);Ϡ3zt^u>F4$gZIt 5i*l^ y)˦if̘~0ӻFlyd-n}c z 9D܌_d䒔3KGoՖ_?P5ٜ6yfόb[?UG)|b)Ke?=Mm w~;gg_~=͂ T{_٧V~׏ }G ǯe[$5r1FFlE3h:i szrZԢ"Q{_4vtՎ,OyDO_]=58kGE#ktg+Yl,~&V_wI;wtvl"Ζ߈`-lѡK6e{Їθ]j'r:宠 bGӥ1 4|v@S|E P]hC<7r/XQ9H\_+lC/KJd&:.#Jgh j&A4h+2TnMKJ`6%e3M:-$ T*.}Rzrq1RP-NH4J{=7^`WyFKA4:>)ijGn=!]& z*42^kH';|aRM¯jUK-F{S(ڞ"s}ޮ^c{5>q2>}?jt(#1fp,J'=4e^}=4W$SM0_Qk/ਅvoLĆ\5;TDWaשUqz im2Lx^1 ![&\bZ&Wh뽦CL)Jy uq[wCi;5$׿WoPe;E60E.hSY;ȃn<~XܨʺdMc4jx7.ab)O'GqlGNTkr觗?pmvLemI;Ff7c%,]w ܪB__#[G#ۋgŭs&qP1ktokS>goA $ch4Kg{ f/{ImUYX4ҫaR86K{apg{ 2g[ {{[wNanݷzэBݷ瓼薡7H  jvlH?l|Χ-dw.g Ku&]jjbKW-MESr G_$Rugi rFCY+.2,͐QuՎז7TրN{qGFxˣ7'XGxmiP*XРbL;UOKfwu)CZᛗg#hڮڸA!V!%=AЭN{݉wE9<+߬9rf=!,"M;CU**3Ѷ]ŝMh[η8)|l#؍sz/xgfd=|.vȲ*ߢ>䶌KgldYyYIquogAC6-eF-^oltA^oo4ʇ5#c~c79S3q[n3׆nzBDfvϊ^1WeStk`ߴ(D(!:'M $qҢY!%JDfJu_tؒtתIݳq )NB ]CnlM'l8DG6:OL5ܘ7 #WM?faur߄>G/MK-v>w{Fνi om# Z Zvnl}-acw_Z-h?Ch7yA4yK諠un?L'QgVm9uw僞Y@ 7(n`H,hO :uINzǩINk%'O:u >>6ƓSΌ 17߬Ymm*f˽O$yЂ'??UꟋU쟓fu) i}/좮ȫ*; [˓l0uMx${iJds>dMPZUrO0oPeSƟ vʍ-;׾ZFvYmÏ<2;|9_1nwSHZVn0}JeNVդ&<љݒ3TAZ|=*gJN {]Ɍu Egf+>0nߞ7h3SZqrIc) GQKvNuAQ%7Ksjݙ?UQ@PHo)HXʼ=2WH:;KrOl%!3Ғ|@rүdf7 >{x_D.GwRl۸)v8|1;me(ћvNC\N ;4ƛ*١D{LU.XT?IUʮ܂T$w}VYyLHMYɕΊqgE̙E$%`GC! a1Hc!j|]Ab,Q)391Eq?quT?Ft.J 7Y7%*(2ʔIJ`0d|[pIs5\993UG =u"IV!P?b7ZgTb'ќcSRtbۜPJ "!уv#g颸z݃ Gl [ѪH|TDQHfBz"N|ykr+А.yJ)#W,=A!btxE 4v6x4)"Af6Z +?@em)M ^JRn]lJV]ZP~H4#>s?H6Q2'?Pz&I56VIu69@;X g=7]MkO#4Ԧv6Iu9OMsxv%aZ&6'h~%rþ) V Ա~"]KAZ, fܙ>A2ߝehJ[-pLQ- mv1 eGפ;7^FgP%# yNK. 3rz&XٗWY|CD=[% 2!YE/x3ܘYbMNd{CTsub}Tڷ><({?ևTK:܏h C6ݗ~c⑏-(?JAIDiS)P7na]X{ ߏI axw"nI~}ߎÞ<qosGx{:!sg~{'( [Cϋϛ%_ Ͻ sw]ȇ1Yc7en n8Gl<ωn+KMe=ީE lGccsŞk{͊hjՐVI hq6O*5gs z`3Cs9]hd̄ꊾtrd]Piٺ\?ޮd$!ˉ+[7ƍhE ln[3Y\4 ̄Lͮ7"o4d TtM15cA[Mc +2UfSqM($ԋT.sODmĀAl*"ͤw1o9!sF%ћgC(01Y(1j-=Az M=&oW`=om+f9M^(DYaNwQ<Y_Яt74eq'g:LLq!yYUܿ3DOg3V%Xt }IcShy+N<^.4HiMc6 N|̪޲h>Ɯ4L(p_ZYսl1:iee־CEI<40zz -A?HH朧#u3f:ή팙}5,|]VwmmZAwb-ySu, /HyBwz$<;w3j1}m.Eexפ|X3̓r`ih|JH&R ^O%1Z~Ybu㒥jՃ*J-sue[@Q_o}<5f͏9߹>F1Ik\Md9g+LeQkގ5Ȳ !\Z,, zIJOhig i-)1/]j-87Ͱ g※z?S|eic{'Ɓ=롫irV?ͩ'Qd=i^JOc^cLK,R&3ćq8Y܏y΋ uPB$QYesanbVӒǷ/MЬIP šM-]xXNJ")a"Y y=fl`Gd~V1bGO"1ͣ4 1!5Q1u>T&Hpq&ea#|0M3PI8A3 O34xI成4&FiV\bywjw* s\B Х"ԃa kۦ[VO ^Ν m< 7्gb٤*x\8v{4v}y}]bSg|=Wk}]ӊ~/یrKrh%W'YćT4 KYjy)r VۿϐϮT+W_Ox?)CV5k:8,<)%=_"}ﭸ[K`w<bYN|:Ur )8Q>@f_i{7uMy4gۮVb2suk@G=:K+|Q.E~i_< #wϐ[g`>mv'VȧݤЈׅӂ 3ʴZCZc3׵.MɓSnHJs]1ZәySx'J1[@ rFn3 rT;l>ґ^<6e[,|Hb1ͨz\h3`86#[ %Q&1=U9 Df[.zoq1ZL8F]"DZ;.v#pdpts9j7-H հ.~gZ.O#%{r*bh`l*n;ݸM]^{RR=>RRUWK+IN"7K{*r*:;i9eu LaȭwŔArkI,ZjL3d H*tRe'(53xn##]6Dq?@|ԖƂc\Xdq%YvYp%g ‘B"NS!%JYnqgZM91qjXGcp`<^ǺqA2y~sMfm)ԕf?SgN@:Df`L ك+Wo \Wb t*EhH "c6+o{H!] |Մ3Kn{tC;RWbrJeOͫ^wl9eMѨ QLbC67kӰVU:H61>}B㓯[3 ϙJ $͜YDo8I߃˞I>BSOHh߅`HP W0b 0à]dWQ >8;sf>aבQ$h'3, M[2k7mbpG@El~6լܯ|+?7%?돢EPV<@8D\osK[4~cb 2z-pf[UytLvbj-cȾSe`Dc { swV$&g(4{e%pj <\on}CGjdY!,!Z)^̉M)JYk{gyUu.f_SCʯ=3aX2WSD||R՘ }4y Wzs xt^Ecu"[/>v%S&-[laxO`Q pRFoe*vBJ\}pzV;:I)q ُ}m $)#;+g򜇀=ʞ*hMi9o бxKN XIPNאYeS65W+ *9urtrwS9 ɩCE#p9)1!XwG4˜ҹ’XVk/ a%L2zR*f-}so. O2|b[h3 Rq_КЎPd20A*Jk-x4g/ɓFi թW&6Ew 4)iD ~tMrQ`s廅cN”y՜BEBR*ڨWQGU!O t*lTSOI{5;v=G<-qwՀ<$ii}O6+2 {oPsy>'`(W/ |J?go#IXmcg`OQ\:hBG چ$E+y'HB283!+S֫ I" +T&fH*j!Z{Xٖ88UH0#gZ1,$ FȃȇhRS4.pb*odXNW;I X B>ѰG E0XvD<% [ c3blUcl%guĠn~Oo!;Jt/%$+)8 X|p~Oǣ?ѝ]Tc?;R Qɩ{ƘFF,&(~HrfzL pt`>'#qT'}u;s@<ݕkRIR#>ޑT2<#g"\cJfKSKS f4?pȞO+$+7AB ƌiF+k,%y{ :1ћ,%B&}jQm% PM,|- hSLaqZ3P"]MzKfn`F4J;U;6)HP m٬vbt1D TN H9P~O@.}fr$@sD4<&cMf3r>潏pr| x[NVO<տ}}I q}%!%P+O  as%4P}2f޾=冖^gU5J0,eO99pm(T^t^9LEtoɯ}eG rpʵHS kP z~qgWwX'z`}PtG$ޅ}+cp ['Bq=!䧅tDŽtW}PA'ʏ" vBTZb*sAI7Kӝʐ)˔؉ h=8-`zz=ш;#`NI4IjS֟lXX~ X$4a~,`[7LSH(ei9 '{Q^f߿p:1B}fsf!lYߠnъ,$xD(p:Gn Qܦj%j+Q4θ)2߿oπ.U%%$уݾH+>p}f3l>90In*Kc@S&yRDDpC4(Y">Ss(-a\z2)tEg 0e^;2O@9xDŗj|7,]_~\ F8sQ^? nBCR.ZJ>ow^7ך㻧8v[Z!i4[4c[xenJ Xc{n:HKJtPdLH^7!c"A a+^@t_nJyaZ '˨bɍL2]cȺnWy2xȽ$glW B#jWB?Zv3=iW ifsSw{ז|X ? }yY|L "!xp,@}| 1q~NǀEѢ翀64jLj`nHc'R;~:8`S!o\-jKfƷ_c瀊xJI%\J/")Z?C;jhw:΅ 4U a8';"io m;/;E\p/?79܏ >a:ɿ2$_8A'Br8̇gU} |(:\8'ifW^<>w<͎+;lP9 wŝ*@g(~ 착Q&pE4ðJrɢM-g;ǔ5le+5g٣[I?|[XfsP/ޱ|3r~]+*Qs$ 9CqDDٌIypZ67Ypf 91"9jw)-z !W-cNO;w~+ƙψ=Xϸ ϯ8ʝ+N :D^hOt$;f`StܮN0!țU~{y&&3=oca8F]>ᜋb1Z]đc/x7{}gt@׫#I\2Pȫ'hō a?om .ATYO +Ǔa-1\K0qG8ɬ+{_ob;q%w"G+`s?7euV]+iض{Opsm|yell }q䁯8^VrM|݄[9~tG0\z+D+}-Yo~Iٔߡ;/=Gu 2ڬ D5aEί ply!Qz? Ynbփ<Îg{WDNVx؝OqGX?: 볜o/ϋ Q.9pξa&Iv.tO ^x:%0vӑ߁s\~IJ)lX鎰\\x,psuG/ ?#E/->愱yp ?+M+ y;pb[؇|p_gܦ#2xmKbI'V,ŶF# n8=ӧe%yzNOըS,|~9I@mPo]|6 7QK,Ķl_v)SϾrK+Joclc;OmLfx-l] sޓb'4Bi ҳyx/,.R#_XX "T?XqpOo3 /\0Է2B|^ˋk]3p; oi[q!C8e0? /fwXnLp|989{Þcyo{^ܟ wpϥsANNN}yP^(@'7\|,.ʯ .#帽8[F ;>E76@?qvKDZyöFc}rVq p_" 2.1~A>O1W.߮= ټuFJQ}I7s?H};z#_{Zo;23ƭ &}yvvyg5=chR; i@~1t)+F,P1`~#`~t.Vc%/R +#qO_ Z' -`r7~~)ӗyS+ȿ?F#ʝOHd.Fw$] L%SfKoIb2zf'uiCRקTcB\ ƪcHY绝ywX>tPï}!Z7Gu1 g>B2ݏ$&a#7sw)vco^/x\ezFh s%vp @=3bc`$Q^ΗQr!PSxhba;Z'RUr+Н?Yܭl#^tSr/r)r[-Y{ɿ(kV_c kc2k ?(8*JJ7cJbUQN7$Gnx;/HĴ8+ϋGGfyUloH%gy2c ]ifZK{I(;l2M2l$ؘiDTXz^-C2t,a#&anՕ@QD(ğn2d q-9Z8vgn~A7 ?  U+L-{zV F+5-l0x "qNa׳ϩWl}G~\:uy/ot̗'K,Bz|d0&@I1m(md{1Ԃ3`Z/*' G Zݿ.^ݿ.@eq2:)SzLC,]ZGsI>| Jȸ2H>lR"j\SVh?>OQ)ikw@{YNl|l!U,Rz5g#' n=KxYv)u񗪸50iPa{y7[g/jȞ}{< <H"-"]/=M8#tٲi(;bWA;! uA,dNr=.rK5"R FeòwsMt"}z}ݛOޏНo{0' ṔwDDžplUC-+*p;A~WZY%:{A2m0WkdV]e?uZɭwwUg y9ögpq*l"5σm Z q%"~hs0yz 5?I"^0pqT@OSN~o|d@OWO"s:4 џ~ߊw׏)d;q:O?ɯ`N~E,OS V3ɯ#Ĉ N9ȮLUe9ޟrv`m c7x0q ]о$'h_8o8ш汻8ԻvQӅ|V<= Y9gh(e8T|Y!okD(zV"@M@!⟔;K0%!T2vҷ߽aOS kR=/^\^Lx}, q K_`)\w^O_"r{b'~?Eм17>m 58ynS,TFS62# 3@e~\oA7T8lqIvTCKvW#D8q.=,,C9}Y"8?_8?Dh{x]H 3\H*@}i]! hqzZ!gdm1Iui{O(М=`џXdU @GM_" 8#9!*EΟF=|Ɵ1ܸ:qV;fayNxHWZPWz@.뒽^^E:/oOFVo2BE!!f-IM\dv3}n_kE Q'χ)rT8&־ c4T[\A} ]Cc ӑL3'N힌ɵ{9\_ ~ p"0#9-Ah' w_\S <=p-+ zՓ}lo+ď UER ,-h`}IywdӥǙؚ&Osi^!)6SnKxdJ-}N->v`E^b> ֧'Lh8{fzJ|C [ &zZծRǤMhO4۷_c>i=G{Rs)ՎtG ᷣ席pT؟qؿ%x[1|pޟEɸqJ wwV'ѣnY,w@c[?ȧXo0GFX9GwsJ_J˻JS*C1}SE-j[u<" HwN79)C-f/8>,ZAuQDnN%;s3 F.A$'V.7䋼c{.މ:voTO?g3Q-QƀMQqQSsWcF'O ~$ڏ_ɥ])t@O=ofD_#@uEVcƖHӠM1uX˵4hb@g5+ơMwq؊Kc`\0tUw!~C*NÂ|rG0cLYĈWBC|wDrEA) % b DCRwNH5([b](]=TkO#c Q 0'v6 4!DvX[zw?s9}ou4]‰S1Q37ջgɕiMUi9^Kըb+ *& 3M f7ͨ3ZM19Ql#a~%ur.Ԩ93H!/ ][i%[dt!"G ~@,~4(_󑀟!?>@9 \U^[L 9bGDPOv>\\ nt|%iU.`2b\QιiA[Vh6 }Csz'2z1 ӷ @}λ .J r'xy.D#O}1T'bFFm3Nɪ UCVѢaɷ; 5,)spqmGβR,Fpp?""~A!/4Cr i!8"N0"D!H%BcZrpgaApIf Iy..zferi$5T;[~f{_iSY9dJ[V<)s u.9F#I.Ud6qUej}rfM![\LӲ~RaTqtQ`Jpom:dEyyxUS >reb? o ?pXq ?*A1!UꓫJ7WsALUVNPk'u)%C*pN]\Ӻ0]Φ>+0=jM?j{1{VisU*CU;}p✜QG=}*oIhgb1;aɠ;ܔ*r`+N&;r. ]\zs:YwtZ#9O HH{.x\gxO|Ək8F. kh'a>2yT5w1>_WG`=बO齷;[fwf{/eKa齩"MUP[P@-Q1Xb,$ 6TgٙYags={&jHۿ"+hk0ԗfl,} 9ji['u/#n>64tqsǙ k0T}JAJEksggP:FhUkfoIõCg۬dN! >&'?U}cW+A%n̹1,dE,d-s:+B?Hp1Mȋ/8=1܍Lk=7*ʞM?g.ߡ_سGmKЅ$!Gأs;y|c֧c:"Oy9/}4`W5aY5O 8ebK|cI+S? 51OOA,oLq<Ώ;Z ǚ ewĂK>MP}v\^r~"?_{cI;A7|ЀEhQFp/-pvm&B_W7'<)t_W tOSq}mZ  |#LYtc]5r.Gd)f 6%P|?s<N@Ր%phr$VYXosK5R3FɴQ>EC9̬Z*>ƭ  3kxN0k5b%Cv5=OU; s -X}_qˉ y=,Ȱ4=}>FO5g4G)q C,Gb,8Zr( jٲ?߲Pwא ұDM⊽ Xd|!7愘'őQJL5|=pŃD#'F/ 7ULntQߤu&c( qK}K̝E'z rov]rq-N~lA~~?߯{Dfc~k*hDc؎805dH 6HKLBeG\+`9oOa,3E?ߓM&] iZOL?43Gzpʕ"#x類̭ g/Lo]32jM'ul>h]~+.iY~+.y|)sGIR/5loDGlo'W/ >:>' o_d[)$+u.NdcDz)QmFΧ+OCr~G[ܽI 1 ԤGHFR#@х~0EMWO,IH^@ph'n?;2Ur.> 윒.6HސQ(s7˄Xb o8nx=~y0hJN3IzWc.IRzYIIiWgīI<^#ץO:){~"< OiNIV][O_c/8wOmߞ=>ϩeQn=I!WEW#W1NN!n=—\Ky*yyy$~wKRipC [y )+/^* :#TۿL -\f;d}Wu?LIIuR)eÈ{;}de̠_4Vy/ʆ;Ntun1qjac\saqhnKxxkx4>|E)3#?.xQڶZG=<ܪќӈb,i;^u.[\e$64~<͉;1}>pN"v$ħxѱ3Y$cn|ϛL;?mJ)tC*LD>0>xlA|>"'`R=x=!% |4+Q4dFSF$.1KJ:wWV.5pCĮGy[sJtQgW5+eZ4XWN8eJmvbkNdĆ7VXBH2y~<| ,Q^Ss/'&Y^lǹD =4xֆ"?ka;T4m 韧̹omEn%EC1=Q# 8~K0r˝*w9sM^aRpLoBWO;>LřO57b!j&"!Xeo$Knl me7t|g[ C5MrD:cZn7;7D*juڞJX.W,S>Um$GVݺwc4CzstvZ,ҥ*v jՅZ=\}"!|yD"Yg "ޠc^?/>.{yj_)s|Cu||5g4gy=Aěðf@F u(Lugh%fBs徺o^a:l)" 4)0[#^J4t^*t"-ӣ]l֜}ȣm-1k̽ 0ⴂsZ^~္1y꺊iv{Q+7%8r~y ;',IJܟb\tA$pzf ~$v!–'9OI"/GO0&^C7!|Š, rs>CJT?uA G7-XM!5ҮQU>@U6{Wݏb2]dfX$}eQ8uo ܰ }U86 z~)CkqxˢDez ʸWB_HmakdM++s.\o5 Vu! Dav$_r{5~,PFVRC鏦$~3/<~{7<'K:\ǨIv\y:$as1B^ǒD< XYl:AR~drn.X5ia!_Uxkj/5mݢXDOz/=t {m|'ˀ~OJɐfb⫊>/Z3O}2^U?ھ? h~>[۱|;>?i{_mq 8[ߓLhYj4K'&[(H4l*R|?Yz8\Ïg;*KȃC`1MdxoMK'UWe]ޠ}4Sǥ L6cF,k%}=ry,'Ցgܦ\÷)MF(?a>E8hh@rPη;A7J^^Xa .7d˪ؽȧUƎ =1zzIR7p\;A^4a{R ㏧/65-F\$WWR=w#u ' tHP'2̬=^COb&U&ShBNLe[pLQx<׏ n9Eal%a~JqHͰJՊpJLM?ovP٤=M^[avxJN£5#jE"밟}BPߓH ޕ4ds(*gUx0ԑ5E3q`7ķCMzFFuT|E HuoTV"Q^eh.`yJ9>w%p_o<. *kп@CE3zW.]YĸoQF@k*~O?Tw%p]PQ⋔%/Y~b̦%iwOK?|`6-D"戙jM}eIc^"\ORv,g&ON!{|fMD~@fޝ|QLD}*aT|im~Kfг k[̍L6NY1sβ! wRQiTe>B„<D-}rBͯ.n{@(<6b .H<&rI]~s!tzAc]bt 4N}Q8/!$! u7$ eaK,R&,mUYMzNnoɯo 5 W,|TIeE:Rsٌcf{}2=XY}wՋG@vej_+C4:SmxϭRv"l(z][E h*!U9 tjG\ 9b )>6xŠ13,l H!5`~^fNJz1{, r&nXI!}إ9BP7]~lOפ{`nq=C 6*qw nbŶpX?M{W +fP{n]7Fsm_?g *^7_^n='ES@f 3Qo[Q ?e|VEoU]UK,K)֒|N=|Ohq NG=D#&cUYVv )utܵ혭T@).+i/ ˇ7Cr9.h!_Pv|hd5BjNgYo4;r UY'*w7~]EB%;iX!hf` OV )`3r#6kldYtʒdi5JRc/F*N"ʤfJT9#6N/#7J|qO\S.&,K` v >FTNddYR6Fn=P*Ur)tb>}wn8b~lt4*<2>7k<Vm O%!Y@jLPڼ3ƒVܠ2&aEH WQz@!l>?jE] ʂOW); xԲfu*#JfeH!w2bګ -Cl.RkYK̦Ek> (jH| ,Tb.Y}JTP,7?J:M-Y`K@ϒܔɞcNB /σoL5mPm^( a6 ԑ7z_߲ϵ?ne^xe Yp|Wsy8$Z]<[z7_ӉӟHe\{b- /F 8 ~4';yes>sL*z Ӟ~8~d9S =rC}%uI׋m:}o}_c_!J_NttUfU8iO&X?x͕~צ/_'I" s, '?eX<75y֫vU'y~u?¿6#e?<}('K+7ߥ n RʼI}ũO&5hm8^ڋTDN|o2kw~kO9XOiw}wy:KdXF=k>O$Ӊ$]>|&c<>'[ŭ?8 q"#hlU|+8˺@٘,ksRݡ&Y7lA 7%FQ)$++ (Z[J:lV쿫Y\יxq"oĜR]IP|!\<^C?cBz'L+RgSyRN_Ӊ'tƷ@\|8])tS,%}Y<7E\ҙm+F}1/1~p_ D)wBh~]*z8s~rPS樗\>h%̭g0-s}ό [*->aTčMu~`..˿|K*~2zȧķOUxWR/'p)3^ٜJqYxuZI<^Ӓ~m < oNc<=I" 4$g;BwR* z>Z_̠ע+?)d:6L.VKgqgD yeScD+?4n/h^)ayoŷM&8#Z.?cћzlf=}f}|։PpΌI|Q MXAhA/ްkd/VU,QZ}fL>M6QJ{G @d_.$TJK 6=u4G7[!|(?E_m3N7xpio*6iO&X?xpjoitN$~4|oHpwVB׃'sXOy^y2_n^o}?|Xy^#k3?|^#3>ߛ|^6vR8E%=kvp[ɖu} E-?m WqyG-&b-7Yh+,zdc8)l!㏉D93B8(&Rpi%0aKJGx>=)xs/la& G`: á-$"= q]0* y &N\1#4~G "֍{t>?Q:톃;XR]tݺbĊn[[y3m^9q|4:8@kQy=UtwGpgR `@HB7D3ȾD*jp}?E݅{7&C|>O )Hꔱ$YAs7itZX m)l*m&idX[?%#;jKuѶiQ;^yv{8X&#G\2_~ /ls*wM^9L| HfL*S4!?-}i/t)N[~$Kcf.X5o(Y5vrlɁK; eJ}0:2:̪Vx^RbYbjU6̧TUR>4&PUjuԮYW5`Tkv U&ec)(2 V 5daB<.kJ|RYB_.Qlѐ`۴B,q;2Rm r]Q;`UX~\u4&IKR)8ewMJ_4xa =x@ ~ ESAȏ `7L9ALRq"+BJ2|2%$- l4_ ;ϱs~x/>@48~D \PZCl y5}xv7~Fؐ{ K3uň \vF[O/{a4=7ElHsf44O-_dONxׄ>D-~ǡmFD1+tafceأ#uMBm k?tvg%8+Ϯߺ`zC:2*\cm:o+j;y5 vtȼZ .RbW+ ?VjɝCi:2Zi5Tf)G→q5?_6xTyjըNos'$?~;Ͱzm bgzh,w[ԒZ1\fx\= nolZy1ߋg`Mae,ݯW:\amq\LFu-h >`(~?&pp2-8-g0dj_ ӿ$UdMK8䛚^LP|_|?gQ7p1oeKNedqAz=>=~|3զ iL`1Oq9Uħ"[M՟!.:qS8WI>rˌ~!p~_>\# LGþ;Y`c"+)@|2kC摚v؝}AiCtEMğ=(bp0CNK#Zis4ZF3m}O{UWݪXFZ[:rHWBasQW7;;SHK0b5;$i [,a]pV\.;m%hVb~LcBK@J,ȁ"͈CS 6ح ƋWwqsrͨ1]3Yư-jQaD!:t{;B-bcYɫ*faE裙:qL>_V@:P+vgW(瞅 zh>pnik+r;E !}x|$Nt !U]CTKPmcv+x/rrWAB#l10툔m^+ HWHD"0U۶mۆ!OkyL׎2bb'BjOfbr? &}Q׷Mz}cY^\v!޽Z0\ pW`{`GN.2f s@{Jw@mٺf#<r#.?mM#nG+E9iC:!I@ z%EƖ|^P܆1 Gk=ye?n9!hGlBcT!ڐ [3yD +'5b 6'F,7Q}{>@go'O,旸qݽf`q ʭ3]$g[z_10謶͙>5K%iZ6ޭHӹG#Uh):B±ICpmͪ*giِwvl8UoB|?W">h;aūv^X-WrRޔqIr v !b5gXleܗvG?6@݊&7h2~#rlnƍ $Nx#ֵbid8,jqv.ErM.έb_B>]1 bVRG˜4s2GňHdxʂBRۈ~%~n}GU~'qEAQQOަG^bJoI/4[/o։Ѳ@SѴ-qb*^lACZ Jm&^6}j%G0w%! ķ '.o֋1쭈/C|1q,~$S1=Q|m+%:po|1e󖋸ٛ6]N7WNl/v|,B!̥at1JGHdDv?u3 þ?l-10t.6Zu u3q?~o8_~/l|h|_h B˘,C|XPhDZ!Fe,YɭHDˊi,mUW2+%&69[) Jð>DiI@+3[O#,U>>zwwoʁۂaUZtoX,:ͬwԫ5U aw̧U( ܷΔCh){lv!u["v͆ 0~,KE2NS @ }gQ*icvN0AQH!{4|ۗ$mC轻{wD4n_ ^c(IxE9 lČg^>.xٳGOJHD^,]c`,S/I,X zE\D_Ļ}Aٕex01{^ϊ.xcB=xO;ƭ]skk]Y'a'w. ;FN# ;FMp:(B/ҥGG}G`QI0Im'p8yl8,ϘBucg;X2`=q.Ԃ&'[ %: VO/S~Ymb)( *I"2Iψc 4ӬҌ&X3o$ h`5U Vr*i ʹOQVBseKDR/Sɔj,5Xʴ>MJ^$_ra!9eRr2!^a'>HRf:%?KK#AQb&[9- vrA T3Ҳ󦍵{LP*0Xnk7mC[D $r!/7RbW$"рGUVRYjw{[(NǬr| fNq :w!:t~&y^zc/ZGlO|,X{a~{~箵k\MNW 4a:g3W$?bH B*& f/3A ΣKQ;hBb3).V娂L5KuF,^SHKLjˤʠ)z:F-SH[_hiRm-YYْa RTVfFmAbV[hC2_ۇ/}"K(,ʥ[\1sH#>&,+ +Y 1pVjQ]&Ikvʕ5mnzDؙ :T5{Bⰹ-u i!PϏ/\/k%mnkZ~EbZҔ8GB4eyݓUv;낼Uz"`8/˛\`s=q Hb~ ǎXY8|ZZכʜ6U-Y&ܽbAE?0I -k pт?/x}pr`PU`JuU@/`LN)e {X" YL^(xEAYʲ{k0p,;z 2~Ap." GE#rU{ɰmгPmiRk͌A?p= J>;xӴ_nQˈF 0yڗ4?NO}b?Ł7Th4Vu?ğ/vJOٴ ƿIUox<8r#qnQ!װ q-`OAPpXhYU6NLڒM0z=m@y:O}-zE/8s%U,աA1"mP  e r7Rj|R.$( bɹQ|]Bu_JAFp&yAA[8+!ZR3cS7a4m﹢ԻmW >O oL6mI-cEVDN\XzJi΄h\jPsZS'5VYEۯ^rW̺\ajfiя1zݳ׾w&C ptxBPK_C7?IEƉCr}Jn7]OK*A-/6{P̳ZuvF7˦SoWĩs-B|eK($Fq^܁}bc庤Oz] оnJiRB D^CFSq92YbYsg'ZR}-99xn"MBgU9NzENEQYiUc䣂|hB ^C]\,B ug͙]T]\J Fht?xp?FAyޠ'"-$B2y6:gM,O25TeӅʇ6t Z6ҹR2_] ޷[u׷uP*gq MNx 5BCZNz?2gߢ]IdOZ9{ o[ݱyN%:AD\^,ڄ+#{-eFF|Y: Ǩ-wuGT\0 HH7B~~jD s 5`ݧʴƠ] 'WZj-}4rf׽{X]h ZrfD51s&mI8zϟ% GI[㸯'):Ac Zq;Y>p4HKU*rs=qLؽ28JH_Ԋ3yRnT Y:[1 "܋ć@,'w{LZ?6TYE ?lb0~qqJHiJeuwͬAZlY: ꑱC1\ItJ ?WT6n|,V}vx kG'*\ E_^!/0}:\6&Mxhs˄49_IV>QPۏ'-"hc1O~) ;&\o4$l(w;|>0Es.mցN8ZL< APM֛%g* tI} pۉCHfuxcq) u/Thw/ \8| j_џ,WE{~SP}<_6R&h[uy~Q4:lʖ}]Ȩ56dlz_aY6wj r)].Dz@Ϲ94,,}Jtt:0P@qhT\6撖MCQq ><ĵ5/\֌^O.. ,~nzekwWAK{^~J$!Vem3SG ͛aUJaćz5[o2itɠv !5ľq)>8OhNKIJ b` qj;cHB/ѧK! DSY~¬<,io@11t=P,E2տN.ؖ:ȹ~  ͭEJue:4E9e{sxXV)da~^֢.܇{hQ ?НR%ħ1Ƹs2G1j[ӟHeݷb^`yP,A8$L<&~!c{1i@Ab"sT-0g 9#f6o"1کhfDGԡe7۹f@>l,S[Z!561Zě6)˜!՗XaBd@<(xyww0M}l r+ %@HRew))/W$U0eY[\E.Oĥ`|-=GNA3bIO}USF nU| ^Zf3]zϩ߮w]-2r]E'bzh ΘJ/"Y]yCF7O,UfA,~ڐ s} C?lWgؑX67)AVN+Fihq{CY C(.&v8M~xF _.1ׁV֍LtLԊjD7VB] j4B퐰 @¸\c~xngž&')`:qs%_ 5#vPY}H)S0 -HbȜͤv+dCˎ m֍!.7 כBrRfg 9T n6 >yPj (>E=F!b`.6ޛKP)nI3ӹ9:(H R;Z$V!/߮RcСV;^^L]-Vk-ߝt:zdJ;65ku2p MB4̑GȈ9_E"\ }NU]9DWM%K px CrwU8i/XJ#p[~ Zdt<ېmv->Q'a2ыi)g~nW|_6qم&2KnSbг-۾}ە-MKYVJ6~{wK|wg{ci3bJ~=l`bܯp~nGeIgAl{7s=Σbڒ+_B蘈nv#" 98=~5>݋+nC52~\]Y$k-TGw|[Kfn&QdMmΦI짥ܫԤp$2ꔍNFj>e]Ӎґh%po2,C 2Sw7t=졯cF6P90-C3઩X[V~kLQ,BXpƩR^vr? K`nS Ay?ƚ/Lme*Of˴k+S|TF\LmSB=Rb>R swCxlI I:۔1FvKYO[q ߴSx׳cw {B 6O(E-Y`Q| / yc-4p)@*xNm@"< P7pI!T`e;bB[ϓuUkbTq5O(['^3 ¦ qwۖԘ8,Fu&iIJHfq!bvKw:4ܸR`2>p)>>">#>|2'/<)>}F>a `L46s?2%o q :1=Wn?|r:v)#ExvhNK6 Om5}!1gxŇrL}h|N|h3} u^^$1#pi"dba n͠:A`<6NXHMcN)=>`Vl̯@)%QIՒYg8X瀠$B73RIz@I JW@d  6K$lEN¤4O m:ɠ2)=QC.o)b4;HB)aVV AۨU;PQ'H; i>lzPxC33ŘDMB$Jb?([6Qf>(d~vO NaK84!`ooaOtRj@1D2Cv$n$p(ُʢb=2| aQyTRxv1Ro2LߌzRϥWp+ET.Ƀ̏]^O%r3_TI&XJ,^aAR& R`+qc&|7D}ęBą.7KNP@k|'D@A0Vd %%#R0qUGhHиAuDw8"4UE S7#vPAi9e6S"P4@vhST& Y )"D|h|B,̤#!/QGP>'HGlIaSDS"p<hD-%|J%kB(l +rpd'cFdN3QCX#EܝJKP@Z}']xk 1/E&05qI}r $A)%JmS098,Xj L^A|wkTcokI{6IC^8陸gD4DG.ԅƤr?cRto2DQIH(HY*v[{n+ѨARUO!COht j(:)kEcKݠ臕f 0~8|@tZz?@$}JYEZ?̶@b+7g~0Ô@eaacU5 x ,6D"h.p;ْCj 1h}&.F\xxDNn쭝ԁR hL1 4!6DʯOʨSO~ SuIX_}O<%0IIOsݙJ+P!%?Z@9\t GODOZxQIt> ʠ s,!![+>NMTeЕ9Q|R3M54xe/VdM>P{WāƠ>.>t8%>0<~Ch2G|J|I|Խkanu|C)@VJm [jNdgmUpT0K4+>g$9/Sl{lSăB9p>t0: Kĉ32Qv!i@n%~Qz;LT$$8Ы2IяņD %vF+v`RCXa3udЖ 0܏"NV8ٟ t8ׯdt d80Vl[S4h ~qg`@!5hRH>fAš ixA]G3>Q'P hN5f@at嘁"^?E(w&p#mǯFcH\3dCj-)[_&}ܖl!M#3ht'JW{͠r`RlSaSe~$=B beKB$dZM;k/WC"k/#+,]d'w9sm rmq>?+rr`~~`{~ B509F9[GTK +YW{vGma\|)>|~/_/ӥjği g+0WXP]G]Mk5c^9Zh]4GFCaq܌hƚPX6_T=i_WR=iѴz_~/5ݺNC?$~b jɾ=hԣ*!L<ˮp0`}{UJ kp Z[8|aGq%8aIjYʕŰ7$IWՇ 61< b΢;ax]ѯ9\Ai7ʳ2?"ֺI|P8sܸzyУ\X"ћ+C ګA@mO;zib&88r|z֞OTqd)!эlZи{wsG.gGF=7GPMZ>yQ(t;kKN{ b=?9TGC[\ya~`͎2F^C,*;qdi kD%6XYPP 7VT5-\}Yu+}[h V_  s摷$)vMf#}12,gs_oL.Lu;0^ m|ƙoB.a n[N 5,<ҷS/Ceҳ~dsJ)+,H8m?*p&:r8ڳb7 _PU)֕<д%K^wP@R6 N#3Bp>rNz+\hYNZRS)7GO]kIJ% e\ͫp;w بUgJIqժSBq<֪Ou*yUo[R^DЋj4^!tȉ)Rw=Q^'9'm0NJ{'52|7Y/E{z*?Jͨ|EOSHjS6j j jnT@͏WMRpY`^5u&RGy;sh// Z~qjh׿GI0nmӪAkTzs*(墦M95̓A$m%tE]17J.cٷ4C/R7G~*>O\NTWO2/ҼnIB$G}*Kp_^Q+V\OOYY 7y>OSf$fAꠖgk`^B[QCy&iWW鈼R]0!M@)+NN~ O [E݊>9{`VC7$Ƀwִ|pkLJ"so֎+WMo[Y9[:tFt̆u챿Don蹶H3Zxa}kGOq[Χ#/k$0.ʐݦȖ6ƅAc ިmBV_άgZ_[i\&{Ma+cs;ÊBcYvtu߸mo<r:͢p[?bXrcmI@yvIihfȔCws,tE=T?o?@TibZ`Zev-s51o 9&S97v U@y?_Dʏ]+.8k-s+.e^oYq]-{">ې㚿8%/ںRt98zݽG-{ kfΞ_>_5o|g[U7M.3zC4P9++>p>t%T݄*ysmͿ{=m+gWWH߳5zgz.l =3n_VӲpnO n@_< yA d V  xݚwEOWW;Q$H CPCD  &P@e] (ALp%;0DX@ zݧǻNUuu N9$?g̷1Ւ3'++Sf)C)Ӑ󤥪*骪9V1+J8h~2:k{v J9cezG2%C}Hd4Ew3[u)J)oh]Mʹ$Kb(ğ#^ʺkI eHU>Nz{H*e#5G:5اχ<ԸLI%z*}tM)TqV42~)IygUſ'^ׂR^7B)WJDsR SP[anx_znx{J],5ϥOSs!Q'AU@Z&9-T)댕GTc$p-d m)}x*MTM~ [+i2pur+%tO;MðZtH/m ~fF 6^]< ma L;0+I:y1<h\r7V ^GiaͼKq[MqiRI+ܵ]YM}Ty(? ~z1K*zH%3[&ml3S&80ofH{2i 0fm%ᥰ?X{hrK)ulΔȏ) *-ûX_1{Ni˚~!n%sMT ef?wNHYdJ&5$ˢe۹잕do=ku?ۤz "@ԥOK;Y٭n9fg҉}},]ݑfTit^~IQFF*6SVJ1_EXs$'=:/[jՐڔ,=|y{L&51yb'8s Hw|Hԉ{ږKn=]iAa9.6#2}]nZ[!YD(qwd3], K`~IR\ dZa,r. 愚NL7p'i)f( }=4q`gQ}6M&Y7TSN-3H?wÎ:# ܬr7Eܓ0{u}~wgjHcwԽ_*{}(7+&=`VE Vq!{R[7Yln]3)ۆnr߼m[ٻyl<6 oa8Yn"hG=gm'aļ+0vwo>5ZVOwfǎ|Nif[poכ=j7K!uAA-8,>vNH!FqdA;s6>(Ǯ&I@Ut!=Wc>hmN4jio6ӷWTyvm%UYfFnlJذoT¾E?khN&hÉ؂}wF5TY#xBȞNk`?`"aN'i<ͳZAKȬmD3苝ȩhv#iHu6Vާqj6{; .E)ξj8_S ViY Kd2r6:q'33AuXf>dQ^%}طҼD錾>ԄtcnT_賻$.4[S<­!Y&S$b>KC.wMk>?`呾QtxGYg]2ثhfVpv>X.iY>unm}`3!m t ӔwB^=3۫i6 x7AfI<_xV#5޼L)kmh]:IMPnՃћ]eSά);tfw:5u }ɻ/bo_v}Z!5mht%z.V\cgɹ:YןSaog`ǽW3Im5ޞN3-XKJZݛ!]5 ;t9h{wK]#mC%^&9!Ϲrn-s/S%6k‡d8iGyT9)-C7Ku:m\tpKbx4 o{BV/iAF`0 ꌆ`"E򌇠 \ӔmAAf Fd x^< p?Y$h_ChzmGÓʞ1ZP"+Tc>,rv`HՁ3-%f݂mW62I\Vꌽ0ZRHwZnIwG2=W0O0ggI0{߆ b{cWݯ+I;t]mƩ/(lr-[L{ѫa0= oJN P{֤dmp0_;ruAfv!f1Üϝjvym|w,\HKQ9Q_fWO᫶<)lF4/o}{N6bs/>t_΋}2w_~ F9ʢu |wTE9L{UTI g٣ f0~FאR^Q>T DgL/ּeYنTX qTS)ƨ/R%>tUp~,.!$Yv^.كҿ1ʬ1&=9p& RGm6?iacα gYXwF* ttz,wiT>:zvt3.:Ϗo'gD,Me3Q^uK+(/"6N$K+Vluu c> ocU=r8V= ?DtqАE^k&Yd!%ɏy\ǚcfX?X܍ &;y}?A osG_iN8Xqrbhrbcjb46VƏyٜr3KPJ TIg=חS6B&M gs1-d`9mKa` 6!'~BNlB(j'+YMME!7$6>Ʌ5_+|e%iݰg:7φuKq@_ddDcRxNa1`Qg q@^CQ<1=6;gwQ^)#+8 e6^c&bmQ }l<U+o&k>6c-biw<8w5}}lL҇|l?n@ ljݻxO~'6rQKd4P'FuP?}r[K(mi~Qʔ}"u >-ZOhop>7o9;1,Rޏy, ғlI$(k&/AED#S,Y(XGE#C" oa `FpuX:#/&ȋ<ym/.KGrr9`0wf@>g>?\iC>|jklbn7 ."͞Y`?e`'ruu&XOٹBff$=nr&'U[x${\u};a'޿BۚxJ0X5VlAi$+뀤(bkfƽzF<*v/9h2yzǚ5u볲f;RiT- b曥ү9\PҎGJs^wy. |cX[m-l/ owa.~?)7vqhxG g>?}eW_xg0x xSO~ xAh F ^/ xCk~ ,__i\A\`2lD3-ȱb >df܄Ə-(~ ?_1Omx;ށwq+V / 6qi.Xy~/E.\_2<ű-|my[nޖfiYZntY/w嗻]E5_*|5"p^MJWٿgF)fxܿ$pSdȨЫ!»B"EކwcBw+s]ඐ+E!»B #U =''x/އ_*~ > \gUwaWG8܅{BD>>oH}ُ0x I< ~dHy8/uCD/ė"CDxSɋBod?Ï~o{?[3q E||-p rvE7å=g>O<\#e3ߞ?p_ÿkX[xy5Ї9404[gbšYW?D?JsED +7`1 s ?7D"V_pm ?? /ٞ{?eϿF.|GTaγ^yڳ]n|ٓ|?9{8_?u?;s ,;_ƩXW ` +,pCe`bFL-̱Cx3n¿aނGcq;܂Omx;ށ8? [qIiY,~>N/"ރ_{/U~? >owa.~?"wO,Z:Xx? \, wxA_,g?xb|\h] ݋=9)ۧcWolE[K > ϛ mxyo}y:ǿw^aJ ]?Ϲ2휿xkե_; s2f᧱'^CWn{[jA-hqO *,|Z /< gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gzO !\#wA'濮IOXXϙ0Ͽ _Kan \dיq;z.9̛ p^iUxu<ϼk~ºvf ?q,، y0o^Nυ8"8|´GυÞ-nϷ?s}^$ԚyN9?Bէ&!r3[d:ZxUF#FAs?s?_5 Wq+W۾{>r;ȡǑ<;u^ν ?)=H\;,b;m+=xt)ۧK~JN mWo, |;|k. }?o?)4sݶnX{Ksl.$_9Co81KBo;>%V+I`+]JW~+ҕ_|82\G+Õ_:ҕ_ʯtW+]JW~+ҕ_ʯtW+]JW~+ҕ_>\V+]JW~epW !8!8Mo a;4« \<#sn[#{vι9W;eys^朗9eys^朗9eys^UrpëG82\pL=y`q5γy8YXdށ o`2hd`$xLGK_|ܫ;{s-syjSϖ e |@#.V~{ҁR 'N3-%\'޲pU[g[f́oh;UY.8- ?J{֚f~_kךf~_kךf~_kךf~_kt6kZ3̯5kڠtNWtNWtNWtNWtNWtNWtNWtNWtNWtNWtNWtNWtuEPdj2l2lj}x갽g+ oX2;ί3Kr\ 5$7?wzgwzgwzgeWW%/UYq&1)f*}s7E*3oe~"wy37Wx~+x?>_ů7p;'~ć[m>C>?.S $>>3~<>cxOI< ~ xAk Eb| ^/E 辠Cx3nG?Ï~Mт{?[qLNLYw<~"/~[Kx~Q7 A鋁W>7ywmk]/ * 4pek4y/ |__/&p%^_g3yn_)2~i=^_ ކwcп.p[uཡ/2xKdR62ދW~|_ov&>ovUwaWG8 />>oR>CxQ<$xb?2~)pq bRcR`7 od?Ï~o{?[3q?_/=|f}Ͼgo7}>f}Ͼgo7}>f}Ͼg~з-o} ?[A~з-o} ?[A~з;.;V03̱W/rd]M`L1 *ְ lb D ^ &b9wwwwwwwwww_.Nj4xWUF`92 anu|kX6mޭݪ߭jݭjݭjݭ֧/G_ V03̱߉.Nj߉#+`XVWul`[N`:uԩSN:uԩSN:6sn36sn36sn36sn36sn3_ _M/W> |_Ug#ghdh<9'rXeѸ=Ɗ ??]/x7~ 5r;gYxīj]n|1  x#?exm5~+7`UZOx3 ލOVb QlF]1 )"ރ_{,U~? >owa.~?ߘߘ..p>Xֿ6 ^/v1y.R+~o -߶wk/rW:_ف+ /;pMОx'xSCbWgpx0V:d <_xS}W`l5[W~ ų͛ gxmy:ǿw}^WG]]-}_;\>fx؋n]U4sl>ϿI]-<τϲ= 0Nv= #_O^/<{6E_<~)ƉE['t= 9+⳻tm7]Mvӵtm"|SdAc'3 I?iA = p?+^m"EE0n7rWG|c 9šʃKZ{^W_x0$ÃaKB/*a _}\3 {\Za x󄉊'd'L>´yZ0'VȨ "9mn 1WձEa;(lzp8n?EȠ7ۮ*Aυ~0h4 >Շ S1?E.Ux+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ܿͅ,0N\WO^\= KB/8s!.M-|m6:̹ _8ϙ939f2f2pdɸ4>{qL^939f2f22\xxLx1kb&;000a&#{uA<[p39g&LL΅ƙ 3ޫ0;0A5wts&p.d``98+wts͙9wtsfonA\8{saBfo.^\aL9L]~tԅmS7g 䵁p5^ ;1;1;1;1;1;33Wȡ  ?~OJ? |;ka{>V^\)ۧK}<&*p]<['^77Qo,=Vo@y[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tuHyļO+šKr\W//?+-_xWd[:kW۾;WKcDƿXO=W:ÇuX:6-lc'p>ws>ws>ws>ws>ws>ws>ws>ws>ws>ws>ws>ws>ws>wYr#ӳ &b9Ua/> \mV03̱_~ο焁#s &b9߈ߤ^Eu:wEFu:wq2AN`P'z ~ 2XƠphxoT''XֱMla:\}sy>yyyypETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETAETAETAETAETAETAETAETAETAE/=U`? h}iOwǬ/=}UD<~h&94sxOx,7E^7Ox3 ލ\+x%^W5x-^w{Ox= os ,_YVl ? Llofn [xo ï~_ovO&>|T} \:} |~mpG!~xb|3\hm߾^WqoO=۷_~}x[ <߾bo۷ ۷X+~ } |[۾tUxu*~6!~x no߆7o?xL-} lo?&gC-X+~?ibN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'T 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4 4 4 4 4 4 4 4 4 ! IeH*CRʐTr#HF*7RʍTnr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F#sɐLd2$! dH&C2ɐL2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.CrRȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB|(C! 5/ |__/&p%^_g3yn_)2ᭃ^"x" WW,"W,^U:~7A|ek+^~?#So>?K+p>?]+OE>CxQ<$xb?2y8/u_q |1^/E:ƿqXM!Uƿqxśl?Gcq܂Omx;ށwq+Vq&NQ+./RdKx~dUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;QwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹ3Gg:gJOp_WgLB}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(Gppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;ZwmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtcƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,gفE. sϩ>sϩ>sϩ>sϩ>sO!EO!ˑ `)fc[_ֱMla;ꏪꏪꏪꏪꏪꏪꏪꏪꏪꏪꏩꏩꏩꏩꏩꏩꏩꏩꏩꏩ 4p9^ ,G 4 anu|kX6mP};TߡwCP};TߡwCP};TߡwST};UߩNwST};UߩNwST}Tߥ.wK]R}Tߥ.wK]R}Tߥ.wK=Q}{TߣG=Q}{TߣG=Q}{Tߣ3.g> aE^WFQ{e^WFQ{e^WFQ{e^WFQ{e^WFQ{e^O}S}Tߧ>O}S}Tߧ>O}S}T߯~_W}U߯~_W}U߯~_PT?~@PT?~@PT?~PTU?A~PTU?A~PTT?!~HCRT?!~HCRT?!~HgUVgUVgUVgUVgUVgUVgUVgUVgUVgUVgU?a~XêVU?a~XêVU?a~XêQGT?Տ~D#QGT?Տ~D#QGT?Տ~TUGU?QՏ~TUGU?QՏ~TUT?1Տ~LcST?1Տ~LcST?1Տ~LWU?qՏ~\WU?qՏ~\WU? O~BP'T? O~BP'T? O~BP'U?IO~RT'U?IO~RT'U?IO~JSRT?)O~JSRT?)O~JSRT?iO~ZӪVU?iO~ZӪVU?iO~ZӪQgT?Ϩ~F3QgT?Ϩ~F3QgT?Ϫ~VUgU?Y<>aދǞM$MN)$@S!IJ7ZYTX{ey I3jg 4ARg΅p:+ $L_}yF=g/ӗe2}L_/ӗe2@/ @/ @/ @/ @/ +r=m2Lgِgg*wݲCv.9 E|Y"_^D/ыE"z^D/ыE"z^D/ыEbz1^L/Ӌbz1^L/Ӌbz1^L/KRz)^J/KRz)^J/KRz)^F/e2z^F/e2z^F/o+pߑYn3ln!;eW6hmڠAk Z6jmڨQkFZ6jmڤIk&MZ6imڬYkfZ6kmڬEk-Z[hmڢEkVZ[jmڪUkֻ;&+ ?V~ yf'|}%w)䨯/Ke|Ue%^IW+Jz%^IW+Jz%^IWҫU*z^EWѫU*z^EWѫU*z^MWӫjz5^MWӫjz5^MWӫz ^Ck5z ^Ck5z ^CkZz-^KkZz-^KkZz-}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'^Gu:z^Gu:z^Gzz=^Ozz=^Ozz=^Oo7 z@o7 z@o7 z#Ho7Fz#Ho7Fz#Ho7қM&zDo7ћM&zDo7ћM&zLo7ӛfz3Lo7ӛfz3Lo7ӛz Bo[-z Bo[-z Bo[Vz+Jo[Vz+Jo[Vz+Fom6zFom6zFovz;Novz;Novz;NߝݯYnw,,[.[vN%G}|A(_/W,;zAw;zAw;zIw;Nz'Iw;Nz'Iw;.zEwѻ].zEwѻ].zEwӻnz7Mwӻnz7Mwӻnz7C{=zC{=zC{^z/K{^z/K{^z/K}>zG}>zG}>z?O~z?O~z?O}>@}>@}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>HA }>HA }>H#####################ccccccccccccccccccccc!}>DчC!}>DчC!}>DӇa0}>LӇa0}>LӇa0888888888888888888888}>BG#}>BG#}>BGQ(}>JGQ(}>JGQ(}>Jc1}>Fc1}>Fc1r,d˲!e*wݲCv.9 E|Y"_e9Nq8}>Nq8}>N/g&+ )rِggAO' }>AO'I$}>IO'I$}>IO'I$}>IOѧS)}>EOѧS)}>EOѧS)}>MOӧi4}>MOӧi4}>MOӧ3 }>Cg3 }>Cg3 }>CgY,}>KgY,}>KgY}>Gs9}>Gs9}>Gy<}>Oy<}>Oy<}L>myfVr-;d Z'Nh:uBIZ'Nj:uRISZNi:uJ)SZNk:uZiZh:uF3Zgh:uVYZgj:uN9sZi:uO?-l\q?l\qEZ.j]ԺuQEKZ.i]ҺuI%KZ.k]ֺuYeZh]ѺuE+ZWh]պuUUZWj]պuM5kZ״i]Ӻu]uZ׵k]׺u] Z7nhкuCMZ7njԺuSM[ZniҺuK-[Znkֺu[mZhѺuG;ZwhպuW]ZwjպuO={ZiӺu_}Zk׺u_Zh=z@CZj=zPCGZi=zH#GZk=zXcZzC 7zC 7zD'ZOh=zᏕ~8ˬg%w)|SM7zSM7*?E+++~w{/ȁBME,,,3[I\^R3gʿ /ɯJ\E_W_oŵBuy+oUܖw=q vk(ɾEk_,!7d?mO89|%;Wc+ϔ,?3S|q<ߥx}dooK׬%?#,x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/z/z/z/z/z/z/z/z/z/z/z/z/z/z/z/y/y/y/y/y/y/y/y/y/y/y/y/y/y/y/yy=[2?e9{;RVm]gr3dk\Wq9{<Ȭ^~/{e/7+/%_X+neQ[+?JͿ/}*/=SVOxW|/U.՚ՅrY7}OOl.|26.w_5enJ{ :˾#X|S~O~_{, yEX2WQnU97:Y/dl~97V駮O]7fOQ.-{d{d+>_!9(K?G19$q9"G|k|MM[OI9%匜sr>o^f7Z+v]}cWǮ>vO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}=${ eH,CbːX2$! eH,CbːX2$! .zOYYO3Y~@~L?-?,?g[YՊoʲV=Y~CY.B,>BQ Y^)b7 fygʻw/)r*>9gم\){3x<!Y+W_ϳ_KOgsy 忓^Y~J_e)A6濷MYV&.Kr(]"?+Uu9"G|A(KxExM7o/ 9)W䴜rNߖ'򟜊<-ȳ?(H˿)&.g]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"b? BCk->\]_O,YF' ^={BmAd (BZAT x.q&:/3]Y D%AIJzRS fiK/ƫ,*[1s_^^ x_Yg/ }Vr^+ BM$YUK./e~̇W<{gu5hϚw>yTԆW̲O}8kȃ(gQ7ҧ1M fAМhW-]4Vj[{5x}뼢G16jx-8?ڙ[{_ 7yNxHG"Zh4GyG8Nw>v֯fYn8b^o&o{Goe6q| *+Nv3nzC;wdz|ywixOaOy/׽py {>}`=>m81@ <l/:!p>la?C:\8#܏0ߑhQkg1jȬ?cK8y~ =ގM9ާ&D;w3s${0YdSx4xS|NtN5ϩfBޗiitO~L5,g靛,ng59|b\Ǫw,Xx5 Ξ3N8qǗ9>͵Os\i:|+_]ox37xCEt%^,Yl)h^崮J:V9[~5$_C7v$ڒhH+ $}C9$ORău漎Z~ fy2alIQ6Emܔ;yB&jpKi']n:龻3aN(/3ˠ? ^gϰgx6;ߌ[V6^lMj37,Y4lg|o7;j'viW^pwѽ.\v;mG؏=vc9gܽ|wO^؏64e?z!2Cj0|rGi<Ϗ: o<6fs[?A(, B">#ũ kx+H B]A=ű }A(!A"'%.Z 8U׃P>y~pryA#P|bz(TPB]УEꉤ xKq3= +ߓ Pv@zXvP1})+p)gqKQrt*Ň)]sz?w9Wm_u9\@9Мhy 3L2Ά5t_f>C?!gP3Gi#(G5JhV;Z3y [BcqK8S1-{?7'yNq3pd='˙v Ϧ\ 3Ɨ򦩟Ft0w3cwo+Ypg˟lȟ~/bz'艛& ͵sy8w|c> |~W5/}!̅z{7v/@K x&xXb}۱%<\Bh>Ki[RXʃ8,SL2,98,c}Y{+Xf%+iY*pWK37]kg-;'2p۳ ldѬ6ҵѽ0MM>SqM54xi8^ffl;U6<ћw&ޙpeѽvNw:Vo;Ͼ7b>V;}퓻~f3<( ̃z:azϱC9tDQGaߎqqO9$'yqRI)?y~Zi=~gxvl{γs}z'wgq_ebWU{/w_w^:-?xO5}4߀y݀My7oo}hKq??ǂp0U ¡!A8.#A%A8뻣ŀ |O G޽r u;ĥ 7>?O}uF>x/+bWwj!- \00 QPNA} ^ …r^y!&GK Hz<>\8r Oϟt_$Hu"g' <$>u@)Oi~>,].*] f1 Ϥg{zǫKxV%ݗTX!16xzFۻ7vvyaͻ#;3-B˛jr>wDw3aߥ={ '{p%߷7|w_ڋЏ~ >קjۇ54h(g 0dփx6H`,w ;x6;1PCP;9Tpڱ yp{yޏF9Q5wh-gѸq=F1;X{=VXskKXX}l>Ǵ}'o'obͱspc樟Cw؍3CC )Fbp!7| /^,Xx~Ocyw1Gwq3>Ϲ3Wyp7ϳyl\`'W8mg_Ӷ/!. }-.,o t!k_"E/#%/$I0X K/ Y̗ż[ oR[jv)~ׇѷLrVګW]˕ޮrε9V洚y'/D8~$ITv k>5$I8$Xzuש_~=[z^`l0 f{lNt&KV.Y]ȋ7pRIBo]LW)b)b)osmmI&{ VT"ՙO©zg9 gګ,eU2,3>d_ߎvlvw;y#Gwe#; 룮t#i13|1{tf{lq=Nq=·|8;;aNػ>n $ 'aRsJ)5;6|J)5Ԝ)yDODOi4i;uln?3?{Yq?˳fq9ؿ/qyi]_TQEٟ7󛾿qyx8]wų+;;|ų+wqWytGWytο|^3k4\ hqq0üu?x'?a ㆹ{=|nݰ[nߔ{SM7y4[fq[mhEq۾n۟t6NG?ϩ WPY4]ť W.DC?G|9_;WL<ʗ,A< .b??0ȏ#\p_F ^EBt]zTͣjQ1q^?QM~">UY4Iڊ/⬈"Ί8+"0Ox? h^!+&ߊC1\Lbz?C3{ Ź~%̣y0v+q=UvIK^rKVz_ ~)(Gi=J ^S>]ve`]֬ʚUY*x59zn-\Z³rW}Kͩ j  Vq3nOC\qC3nh F9>E=ʻeQfݏ2('Qfe6 ؍lg#<x6ơ1lgc6ƣ1 MۄMio6oSϚԾ4gO3`3O3D3{ڌf44 ihWsyoNs9qo[8oἅh|iɗkiN-ͩY44һVzһޭංۊ'x|*ޯƯ5~kMKZkݿ--/ۙA;3hvoǷvr۩oc{y|󫽾յ Xo@_p6h}Fv͛hFs4tQv#iHKGZ:_'p$.pDs'Ag;3]⬋7Ms~oo68tűj6̥nfMnrM.;{Þz]=ߕwq{?ٿx4/ վy[noÇ>>0g}ͯg^?wߝgӿ?_]0cs!uCa(oƃa޵pg#4͑F`0ўw` >kGpg>;?9^f>ޜ&4'2\&<^}3虤d>Lg )<s|?7qj'<_]pK|I4ϧ{wcO|t̠q.3`͐;Cf˙8}Y̒?K, g6Naus+51rbp{]uG[8[qͥg.w?1O||x/_ٙe/i;'{HE4/2Eє`ghH;^.b-e]Zb~KfRxQM"$ҹޯc oZk]Zk/}D:Z~z3[Oz od>'Ӗ&dz7z/6;c#@=N%&~lMTWL54}ӼirpK7t0ۉ }2xAo͸ou=Lz[oc+?m٦6muLgҒ{,}cY8fٻζӾ]vϷa;ao[gߺ֬w.vw#oy>~wg˖mqexA}Ȼw9s(ߎ1܎{NurC P`wxWOoMY4@"!$!ZjW:]۰Z,9А Y] g {+zWz{o\ˊ^>rcA,y.oQ~%/Q^c:( E ^Dy?c7ٽWQZsmo6|}>;엷~ 6!^Dy667776㛝[tQ^gl-ʷ6 6m7Y(om|F?{f݉:ß}st!|ɜ3E\ BB|𾾿߶m5)%)wy|K'Lf<"Jɷτ7 ?S5U&-/NZVA;*OuT|]jU]N>>?B !c<Q89ʎ_>?& 9:7F޳/pp1Uj :*0R9."L3U ۓLe+lf҂OԹ>-l @* ]˩H%R9ϤSy]PUhAS (vD.^B^s~NÉFF_2KBy)! |lK(W:w"%SaѐD3@@*^ @UAON+*.ýX3kͭwhP4]bFyueJU Ch/8"|9h?1K@n`)BZ5^?u SIO1m* !SZ|:uS^z\i?ֹ=dl,S,g]g#x6]Zs ,5b<9c ;;.|+&)Dbgi铐)mJ Z`se3cЫ('`[Sζ! H e%hP3Z`SuW=OsCc4~M9A WOs8 QΠʐg!y½N8"Rg3\Xm=;f/C;$? ;=8+bZm?1=}u5^e 8a,\%\-3ul_";9t<3Y +0rYgēzGa"ԢjNR"#pf3 *΂.2F쨗d_.6gT;fB']𲚗A?b4p^dqNi='6`Rc 1cdz'ϊEJFz"'}KĐ>eogMCDHw>g`XosĻ"nfo~C'YC׶3#jvRuvh/,]՝T4+C8X,.>Ԧ*G)42aM3:R D)N)6_/8.n:ʘK#{I[kg wy䯤ȇe'"׺n#HB;GqDž*N(jʻ()i& 熣)P7,EZn$#/wѭyY$्Eo{*jCO9p Uq닋ZXWX Udⶪz[EvH]_s /U"{lc u'.T)WMo"vө7_atU䜋 ڎq0),h0n1ud_ٟ@$!Pr9A$G1Xr9@N$')Tr9A$g9\r9\@.$%Rr\A$W5Zr@n$7-VrA$w=^r<@$#Qy$'S|A$_7[@~$?/WA$C]QB)eSA}*AGҙt:+Nsҹt:/O ҅t(].NKҥt,].OW+ҕʴFCј&4uќt*]Nנkҵhv&%t:Kף t4݈nL79݂nI[mt;=Kw]tO'n:Ni ݑD{GT3t]4+ݍN{ҽt/ݏO҃z(=NGңz,=OO'ғz*=NϠgҳz.=O/ҋz)^NWҫz-^Oo7қz+Nwһz/O҇(}wOΏq}>Egsy}D_Wku}Eߦw{}~D?Ogs~Eow{D_owEfs1dlfb3Yجl66;bsyؼl>6?[-b Eآl18[-ɖbKeزl9<[Vb+ YbYrVUتl5:[b bku(.[6`l#1ۄm6ccl %ۊmͶa۲l,ہuql].bKإ2v9]ɮbWkص:v=nb7[ح6v;bw{ؽ>v?{=bGأ18{=ɞbOgس9<{^b/Wث5:{bowػ=>}>bOا39}ɾb_oط;=~b?_د7?;b)=N8s.%W<#H>g|N>|A_/|I_/× |E_x#󄧼3W|Mo䝼_Guz|}ߐ&|S7[-V|k ߖoǷc'I|2;x/x?w|agA w|Oߛ@~?H~sss3͏qcqx~?OSit~?sy|~_/Ker~_ůkuz~o[mv~{}~?8Gcq?şgsy_vpG+Uo;]?'S_7[?/W#\ "` !|!!Fb1M.sb1O/pqt :ObXL,.KbXN,/V+ʢ&BX$"u\bXM.kDCtb1J+ ĆbHl,6͜b\l![6b[s3Il/ƊD'Ƌ [Ld#v;^1E~1U,Ġb1M*v=Ğb/G+ā q8D*#đ(q8F+Njʼn$q8E*N3ę,q8G+ ą΋K"gX\".JqZ\#׉ FqY"nNq[#AxX<"IxZ<#ω ExX"^ΎN3o>xG+ć#D|*>/ė+F|+ߋď'E*~?ğ_/O|3}+ggg3Π?////////////////ЏOԯ;~77G:ΐ3ooooooooowqxO'G'ןTga?wO/oHWzH*RH_Jd Gȑr&9R.g9r.9G+'r!\D.*%r)\F.+r%PF2Le]f2\E*W5r-ِ#;e)+\Gr-7Mr39Fn.[ʭrNn/d' [Nd#w;^9E~9U,r9M*w=r/G+ y*')|F>+%|E*_7-|G+ߓ#D~*?/+F~+'E*?/rUKZ}UߩGY~UO;p7Ѐ<@A0",,,,,,,,,,,,,,,,Ԃ08H4YEJjZzFfV:fA 66 Fc̓--mm탱AW0.L`rS? P0L v v v         NN N NN N N N  .. . .. . . .  nn n nn n n n         ^^ ^ ^^}=?׽(ې3k@jWH7nA.4[KC]Du Duݨc'.uQ M0m3M0Kt3ӅF4JQrk\%sM?yn(~u[I0y|){w{lZh(;M3礻5'cèMjO+:"gujqH+u"E]=FO5Pvg;L5F1ҺlT*]HFkFҳ5R]#uFA 3$$ġO敦k*8,B(2vה)]mZE6=2nBeQ۴gҔ.`Oa`]S'wqtl$MMS{ZNwo%lh2eEohz}ޮ- Lg!7eHp:YC2ՙ3?{Rz_ =݃=&%ImXPO`hZYUFId!l;'t#J@Ы5Qײe|lIA4F'ct.Fbt*ѹK~%k#R|M'M,_K^ zŵD./ΙvO7Ԓ qHrxml`Xk'cQc'c[c'ceLj2j2j2;7j2j26j2֛7j2;8;8;8.4ƱV˭ Q`Xy 0c0x`X6;%hD."]ĺHtꢮL. 94hr6Ɣ%:>zMfW4+M&zEB3+4,t"ED.tBc#5F1j NCjPcLbz1S^T/f3ՋL9s4պ&hkXc#P*qRFJ4RT>oS}ަMy6mT>oS}ަMSj }ئzצMa6՛8Շm?OzlgHPa{W3`` I!u ^zmn&`' 4"@5@?ku|;R@uoKЯ@j`n%6a>0f=,% cÙ昷s7Gs;Ov\v @Kth}::X,A=(:`XV?7gaXyA;M;9`mC^Vu ZFP׺ua]z]k]XR9u=\܎RA9H!c)F"J1sOT:>uCFW0Ž`Es"eC= |37_|d3_{ "(_:)^W":*|"{,Ί ŞâˢaOFifAEثQGػn5 ޾E`&)`0 ``B /B /B /Bk,?#?#?|#7|#7|c7|c7Ƹc?c?O7|O@?}Y) :)g :)S/tп:W:[:aM 2Og~S^h_}h`| k`| S47~vv`\ہ_lgz'hdya htLh&4U&4S'u]'u]'4Z'u~ R:7njx_l&:Dz,+4KveNs+yJp$8w3Ias%\Ip$8GIFN ' lq/xׄҐ41&M/[`=M`k'X'mc-&u~]H 8+IaҀ ws;yNp.' a?&$؏ " l6m]`W&}Iݗ41oM[aL | vQ;ML**[ f``' tLCx^[rJ_k7 솧BΧvޢ _L|1 ^ښ6~:Ѓ~:J:Udѣ`z{v&vޥR޾!O:!*Gm;*!/ƮKJh2qiUTRJpkHpKHp;Hꐦ: $z=> eu$m$uH]ݺjm? ո-$%$$yƶ47e˰fJ}~zFNcxcCj15f'QAk Hnl$76۳<.1=4n9xB U 0Tou8l-yf9`lv86qKJ%+ZxpV8ޫ~Yi Ѐ8VSG,eۃԂ!`a 1:81:81:81O'F#Ĉb?1O'F'Q}Cc[k>SChhhh$6TbC%6T, ؐI uQ PZnT!ZaY: [D[ E \ԖFޢ-6lO sa пտW>zqZiYS !1GCb#bC(>ffh,Cm71Db9&sL$_i.:i![/i4OC̆9NĞ]aа5bO Vu!WiI5,*.C+a8mpi;-l+^an9Z\gvyn *¦uxe803g8P3xx_:uv4;$]~~ק_(1`KԔuSڨ5.5DgLi3M(ZSc@ƀJaOıV''1RcBƄJ bBJ˴.P%9{)Dq͌-ϤmqI6uOlﴰtL KajZY*zu$q[n5 o3kd2eҷF Fs6zh,mm j9l!Dl"DP纂'g'QmsɁO%&--c:Skm9EAM՜~m;h94b0% i*jUS ^-S?(3|1X^b=JB ۸lb*Kx#x`#x`#E0"z%"yWXoD+D*D&[g_kϰDk{Z7YhM1zՂu"P?C` ZVSXG Bx8-+]*(Ϩ>AtTԅQ9[2cS93^GV1 <-}A Y!Yz':FJ7j`ݷ"m\guMŀA!["[ _=%"el1vd`2iKo$N|D5I !niZbCƪ6>r140V YkT!0*Y5kwSP֐˜RKOKT|F3P`GAY4[B%0RVҭ!IeWsLLE$.UJmZEqLRt24edؔ)SS&71M njpS75F?GF?GF?XhdbF&Xh{?68<&gPT-;sZZ_tZp_vY%.?kfim;qZ[:`'N^3GlMenEֶw}35dHVKm&m _(i;u0Ra0 Mn,l/| 6۰mZ+6~`YiFTarڈ ! .*s NCMXi&h9]2+v*~*z* 6lo@~٪axlӹ\+8_XY!9[`Vn+ ρ_~2U9r~p1W#?dX]/XN\K { caw W  T0*mUdg q٬Ϩ`CW+Uݪ@; {*,7-]53c}lFgl=t2 C@dSUAT*X5Ui!SB_o  PRY, Ic6 4AUZ Jsl^Aa)&@BRJ`!T *.`'ŪWgNNHNvKvհxoBgU-6^Bd'rt@iR[[LXQCBE to챕~Hf e -^F*#=61o::CS'w&tt^Gd23 j"a N2?ӥ{*aN"{Q'23ľixKkZX,d*\*-Jli*TDJ[inCf:e6"ij)mش45MfkyalEæ:UsouDbcӪijV Z>y SmrCxs'-b|G6 6Ӄ0y=/I667M+45PΉc=us''f2)[_54q!SKn)t fƛS,{|SfEi\o4\csC#侵jg6Bnd߈V̊ ;M0olb{a㉪7z3#`]t&ol;LnJpij8+4:M- +L/MS*i&k+P.V) =il~oya.vol״ag3s~}632lf83I}63g3#g3t~krܙb?kvu}TmQ%Lݹ:_|Кog fZ4F3̦;XL?/9QKδrgbv1O1bw|:31ʍ΍:IUZ%7@n4ĦLLizNl͍ vnc#'[<6^76 O?Mn4ɹq<΍\Fs#׹un:7r΍\Fs#׹ir sɍ̍ˍˍˍNˍˍʍʍ͍=7"g73 Ѷyfp3kFF s#wHXn.7Z67B^\csc'5Җ0F_IDѮJUFM25eݔ)sS\#YHVa$0U*dF}Z*\F #WUa0rU*\F #WUa0rU*\F #WUa0rU*\F #WUa0rU*\F #WUa0rUZw&[3<ֲ3ߒh`ظzy2W+F⊬'#s\ad02W+F #sZQ2rrN]m`]6VN>81lTa橁x8Y:C@aϦ!ʣލL .YS\R,mkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Regular.woff20000664000175000017500000020161414664334534026343 0ustar carstencarstenwOF2h(@ t`j8  @R :6$n )F [^ ƶCU"#n{B!W=.k'pr-~znm@%Ҥ!~ʆ hXmC)-IƳ*uSPP rFݴ}]/eUnYJ6vN% nn-~}`ѸS :}Ἓȸ6oޜϥ۶+EyP3f0x؎ɖOdONLS:kI{!q71;}6V=U7zqT\Ұzf5}Tu ј>jB)JsN}Ku[6O(Q=qS  J,-sNiK(Er[XbT1`BF(I!0hJZ5ql,N(J7D@Ԥfa1UƜN:E‚6AQ)+Qg-qsֺrڏ>}$9Z`K C~Y6|n8)m $ ߮E_H xXMZ "r"fD!4& UWcȜqbfNX?T4vQ BOg,i!1!p~r^OIJShvrͽ#>I\}p*^.a*/Xpɲ0TM!#tXjB(8md$ʠTe>DWu85m>W c&=0j?s=4P3T҄S7% Rù #7 7|PlK1- JZkc|~Qݻ)J0P2'dw"=xҦ*oJt?8ݱn8 'RmfE|cfݜ O0 ~5 P@f !𑡔 )Qђ}8D)-`Ah35Wڟ:f OQ Z6, %WBHHuꅬn}XO5]npIy<e*u'.c .-PY' b!,Ao5%EIWm.M>=7uv[rl)ixҲ+P Qu%{׀L l2E| .[^T+^DJ{MTؚAlŐBc1U@û"5տsJ%FdOLHVQE}ne2tﵖ#0B WWTc6O|1"ZnX|{f{ %)""AB%¿EzStvc1B\e2ʦ4"uE_̀ϙ%i/N]8@DI[|U&Nwc񐬱H zZV]X=9,q5BemY,ady&ҵAԂ,fET`U{2k. a/Hr T-YBA=YL67Bq, o,誈Ҕ>^ y!Mǟ\G^ VFFOz87\1Hf~mK|`pKqd97f1\FDX6);| Klw۲Cie'>+d ۬㥭[j%Vlؽscח~,ټ n5Bn%!q{CX Śoj 5S[\o",C/m8! Ea`3 N)sT?SGNW3uc{+v]ltW?AC\}_y3ߴY[,Xd٪\dM)t ɐeA2'"BRY}Tl ŷRN%ؙ;wp_v&$7ՔfF!m43iHgiKnVܙ;[ro\;?u{LO;gł'нЉܶUyx{]z=kn3kmK}KcsgvƯe-,ǟ- WhdvJ&2UZժLo9Dڹ`\֍ȻW'AD3em堩ЖWT|2+` %0bt4QsXFuJMS뗛IE_mvUnZ3eR3f*3g.7C&|_æp7RH4Y(DEai*H^/ $@R@AQIQ~tP% "0>(xga TyLh.AʹU `A,9L$09rInɊD0|(0chXJe_E zq3.{1Y ;ˠr45hʂYMo̴.U8NAJю֬:>DDl7Pc0;`6*&WZK]%]%~P!рl=PT&:#֨<۱p8J;;,N,А> e@@Wvb2ZɃ6~UH܆N=@Un e D):u2^H-Xԣ XYf K y@XD}҇c:PRUrri ϵC 8  ֎]E*4ˠ3NxZo$>MZ"2sD& ð=/;PF:( ee( \4rGTi*)Vzﴓ+4[&хݸb(WZwLΧFTXJ `GMɘw01f(pKc(Tɮ%Z~ .* R+1*e{, ӊWP&E;,"ʣ8"rģ4i |ӱ"CH`WV_J2K` % D2jqMt$Gm`cUTńUZ4e[03p]{flkÓ֥LRZ5ϓӞww$Zs] DHg4@'' QT?f)1*S tFO$Y{'tOXH;VB:gJİB8K'RV Yly J-`|M nyxv9n*6V؉ٲpS`X>!3l3Oݣ2<P1xLX8$Z}%)jf#65f$)弿DUxIwZ jPҔ)p ы'eh2 B @L!NUL" xԂS;0 FhQJ&>\? Tʫꕠ-.jTA9 G.g=/AWFM:Z0zxȜ,y5ą7À9t_"9W4.?5uu#uNs7wo͜BcdG+R*rl暹߹p׾CM%̃٬9,Z E,( 5 i1ӠI.= QhhlS Sf܃ob +ll1;md!CwfY-+ezOܕ-sJg;+"FLWҭt0JH)UJOK-MY!bWNyӂS ^kШIڴHsg3aj91kμ,[g֬۰i˶ڳ^^CơcoaN  uv \~a? vXi KABP FMZ?j5~è}sjm~5]2s͒/x=Katu;6Fl&ι6fWӑ~xł$, WFsvO2Ě K^3SPé!8rWsnzfz56\A'B>y4t!A Y)SFzeТw1x#RɊ3`Ȉ1lزS;8rWsnzf XqG, 1aB)RJ-:ʠE)Zdz0dĘ S6l٩UAmB)Re+)< /3PBBP|% 1bĈ#F1 oF>q=G>S?3ES:sRL􇌯t_En$U\]xQ/_~kĘi` d"i!gZ뙎gD13*K8S'[D2-װΖ'L5g)Y"!cPʚ_-䘳dnňS[kKv#YtYXDu=؉\rE7c֜y k鋸Wa2eCA$V?%RKB"TU^&m,pA: .WK=jB2sfs-X֐1Z *%RX:5TyurSpą]-!vN\#:kM`Õ-B>HC1:BX ;mdρ#g)-WlK-Rv)U*Yq#;Zx;,SMx;^Q mĐo~OWI`=,SP]%?KG 8J):E5&-33 {,4 6ڧj.̵/w >+`N醳{!/vu'y pkT`-rSuV4-{VUUUUUUU+jPi4esc0񜻅xvBU䮧5,ׇ rܲ` u Oxm KLHJκQ8OÛF10iʬy ௦zz9g7)j~lje*T/X-RFW< OM_KYݲ9nP9(^_m6n >V8 ϝqF[Teˑ;RVj kFYlzn6Ɯv[z׊v>7j?ӓ8єP5WjF-U]V-Jzn'xt[Z7q$.@9M3r5 >l¤ff}-XVX_ Z#sKaF318*]Qk:l9r%7meB Yr3NPMPQ&-.L ~hNhq=]6k6q`gs 1'8s7=AXUg!cL_&EF l!|N`f6G҆LLe)Ovsmq =w,1a7G HV$ɥdmY!g]GPT0dĘ SkQkUiμ,[g֬7 lɞrOh0 _&oc~kp yߤ;"9}9ʛ!>?a|fo C|TRoFʜy ֬1L~l[.p3!Ea. ?.,"R,q&̕r~ǔoǏnk. PEVzH4zc-]KLˏrZ:{VLbSp4UoC} lN^ԳȨoe|6̢C}!Ցb:Dge U1Dƚ{7-@؈_A#6 a&iI"ɵY6D$MӗfZ85Q3z?7'IsKB%}+}iƶVg.ƚIL5ozܬ9qx=˸% VE<qn"!( )@gOFb,],cag9p"c?}td7A [8n' {P ǸIF5*1 *UWλE\>!BqOD#d|WVcVk%'.|8Gxf|7w^0@?J+?*:E XlpYo#{9sK5BWJ~;\^n嶻{>oݶDd)O"¸~0㱏VT[D/#ACBO B)z1 c1 <'|g «$ 6"疫N꾏WoQ] \6a>2-X<.FCLG*c:2eHBXkB@5b$bdf"PP~*MDX:5h||v\Rp-d;3jkm"L} QM G aJOr;-m;3`u׾<;7ɝc)Ny{Z} gggm۴ y?R?y%gx ~^\zOmwV:l-mbK})/ӓ,Iiܿ!U)EFqOW=dsrҽZePc؍1+N)UcO X|Yt =*fCl}0;3Y޲n637j5+ AcwMv]C~ V(k`(΅C8΋.8?D$(^1PT6]tp:K ŔjJӤ2LU S8jzjZvEu+^tM׏n-0Ewun=MӬ4/xbZ<3- ^V/MMMƻ;M.ܙ(w2\7FoȀYOA ddUcWXWhsፊЈ hM]6&o<1mAPK Xuб[rppc ֱhECpB L 7|`\.Nkd~}(@p'4: "!RlQdgqY1PJpI3$p-nù.v1:x<1ty<4/A5ˉ8 @17Wh#$;chɄ)4"E3w`B],ZQOAy)%h!("դ0 PxlWRA HET  r2ejʲk-+z gϣG!C<\"w?y`m ه%Mtfv|o_[B:Jxb[y! (٠d>*Ykw=<2:N6NH^HYʑ hx hxhx(oMV0x(]  [O!F 1RVj@>%V@\XVL)PNzۉ8utuP)@03XFLmWл 2;_FV]r$l tdN; pPM`G+o``6*S`!#SK}ߎ]~HBwm)`\T8\XX& x̺?`:.@qe4&e#]IWҵDN𘃟ݫ))(P*6%؋,*J x QKDII~I!Y# 5=d! YB]˱˱qeo-3#P?Bh x|/m|l~@ݑt$CL,a+ bw7N˂ m!EPH PHd GH!әt,W7 %pMp`aR4aX`3s_k^nD@AB5W +o,po PckR.\KҮtk wnvnw~aKz7Ѱƛɧ~ŗ^~evd{o]=}#cS3s K+[f*@FP& a~.*$ȣHFHKhC |,lfmgGFO΂WOYImK_5r` Vyyqs^C멯ݟD @EQڞlMO ُ}{_j :l(kB]I(vy4'&q^i\x飃fV"k$m5 "._E~ZLΪ!uOp2 {8>4k[W8a^YaSTkRZ`Lj098yHu4 11tu<YjҢ PV<4ոC]^ešr$]\~դlM\˞KC'/*_W;;\,x3nɭs9b?@%(Q5K4zismx'y)}!=nV]mi?HEhyHk49@,фӅ~ xo"0j^mTjTc /ش ik~OgBUh O›KaQ~_YL5BNtH'9ũN䡝Lg9)RwMɤIխaMkYS2c]YLN7~M8Ӥ?Rֶz5xI'-g{rՍ_\bv5WpdvetSM4ʈ%wbK].wW#&<( P PrЪ00lg0"%{J`ǫl]} J UbZB"HiL`$et4NT;jW&8G"PйP*asL%QPEEni901` 7L`dL1l-1%,f e Qs"h0`"dT4t(SJ: hӡK>&3aʌ9 XYa:m&6sȉ3ɋ7"@ Bjb˭4g9iL6tӬhdZVe]Xc$U:$46Vt+>ܐ&qTX"N_, ڝSrkɊͶw01pt:DĄ*Tr@jN#HG^#47b\&#Μ(A ,АpՌ< mPkݖ+'a?m(hEGЉqtf]DWSw+A$7h` 43Su/ݯg ]N3Vktz-z= R$v^+S/;Eu?]q0!jS ~+.vpmwf; Ca@/YY̒wM \VVvv0T+Ryo\ ub+bB߾"r}hŰ~FNϨثǐ͐4c`.1eHd(!,i'D.1+ȅKv#t̝xVЎCđd %L-%ܠh9":H3SĻ?*G=W,C6sQa6JE~:և ^JtZx&Tl0ji0Aٳ.5m ΢tML2f4㲥OdNxB̊Jx1NPoǮx|niK}sbyeEA<}K76ϗ $Q氅XncWh>0sx SAC.4&0n.0  }9| \Y:Sev]4ͫowjY@2lYF-{'E&n嘵c1YiVmun)U k ^ :@>yiva@ }óx@1>@p |0 7559p[AsJ! S8Wv^/ގ|nGʳ+<4&EDv*10#\eK=j8vJBf9ml`ly3'&胈HD D&nq!fu+( ncrYyObœfʹ̦s5Ym3"Dcn-{# ݥs;q@SCuCk^#s{)Հ.Sm Z fn6֖tNi7<[' ?""ke- Z!I$ q {><0_CKMsU[Z\2XyQ]}RH+F>/ֲJxyAoMe4cgR ?77X rhD3*J1^}y uPPxM{r(:.XiV{ w[naQ5|I>ӷ4P@K 0Ľ?W暨E2y;fd<W'z ̫'?xxgsk$9 y;;}_!PEdMn#_O L hA+x@tP1 hK,) gRAˊ 1 fT@@I,l%PLk0$DBz\8n’\9;MEDiJbP.ƌ>LKkHqxD4&@{6 "Saq.&xpnFv@IڹFWCX| 8eG`c !#B2Qf ;L ";څL~jX:%(NK Ec);c2i|"m)H,4V6~Y}_ d)wa|޶J([y_A.ƅ6LXDZJ6uv]-SWo) .6\02 )7<߷a` )W&e4Z-+ݣⒿFT]ZrP5QcJ %^cp¡y'Unp8rQȜ}r1ڪH __uhpi-dVoTߩS.bzjo[4Fur# :7j)Aͳ0:)1c4TZ]5Y0R}E`O9=6\@5>H[~~-q*ң+\B#*wYaZ&>6n3Cef ]ONEJ H"'b1 /PYc4)g?ƒK-S[#I =8\iC &61zۓȱӖ$Tʐ+9JmR%`B0gK*!@RE|`'=_ʸ0篺=kcwJ`Jic%v\Nz2u(?&,Q5ڃJV0SKA䓠@͗@p_u]@|o䖈K Mh@‚Z :\X,|ב'N|n/F]vF2["x TQ@Գ("ͣh3 ݤ(:?e@i6{;?|/h4:؈Hw#sDydD9L&!t !.T&& f0fЧTqʼ08՟躘p'q-5ZV[kZH5&`~3Û 画5I "|)Kۖ=ܞ 2`*T[1w!ѝ?`Vt/Liˁa.\<"))Rf4!\"4/ CX0m\`6TrQfxāU9K@J P*8\K@/9ܮ1':y*SY08>V]VwiHTxlGv[]TkBL){h.$p`> C@#1oYb@r蕢 )W16F<p170,hh!ad>%t S=r}=0_ Œ)[&3M3z< ;[H:t W 5_"+Ȼx[[ٿщ`?lbif~36N3?9C|)):WQn-?&]0JD'R/99pyMّz=ڗ~ժS*?E/wFDE_5( $}Iꔙx+**U^ NGp? +m61m".&VXyiLO)(gk/ML=֫#rL2⭶tlmITvD٥ilP>ϼ}`5nw^mc]CB.Ehw_v"w4OQ<&H p{^ajZ;t =84Mx0+0?]jz B{]! lmSޤvUQ-pDX-۹Eƹhm{ޠ1pl4(r!dt%\⼟P!e㨡:ȔC>.LP>1S&c} 22۠5MMhȐ;}0g!u>`0§vh7klL ) :d%< eAN ( 7.|+{'G~,8C1^c%jj&@ hᐟxG,E0- _L 6^6Ww߳kH޽gN 4RYgC]ĖY׻9>,-سlRh-Ur}ϧ3xKJ欨{1C˛nC S<(]zV}XhnPIM V&Mm98'MgzP^Z91*bkK5Kn%zMkߒ?I-'g2yO0Kna,k/&QF?4,Stj y6jhL.spqrD.{#o;nn[:8ĿUA፹w}o I.ͯv#vodo+!SlEMn79ȡo;Nfgv'coN'`Sb!<ˎS|0پ[zKLfbH(˦.%,w&mbJ4NM)*,'CXS%g&t>Is;?rQ׸[ DVD(B9yw@%bS} HL<:+~M8Iqo[l%0DdM%emfR?;tOoqLH u/IQKa06A+\Ԩ%\h,Wp$^jљ}Y^fdOӬ%":`ijvVC|Aqeqi#%UBڃ!-mƽKh"|IMj߆>EMW$vƢ7GivСǐ Jb*I$򸮕:|A/GCP`UZj/vx0Ӟ*&ϛ-?lݔ^:{V@5koj6^ZxwPW_gKt)O7*-p)(u1yZ\0vG ?xz(mPNݱrN;J33x4E|>!G2߿m3ݲܞ1{!:U:G8IߛD\o&kk3Ri,&CFE"]-ĝ@t0ۿ >''NNOO'$NMrXdUi@׬^.׾QF۔Lvy#>޿>ӱPpf.pi1u\` ?O/]ހ/CaCÔq*X^:ϯLyRy!gDn]IN?|[-I^A /ބsplp9}0a^2ӭwTOغvbcy#&teyy#(l6ol*4_P7}ȯoY2vo`!6׷±4JgO<#[~}yw4MZЛH t))br~b驍i {HfDv^ˤ<010`&;pRMU~L/H`%IbJ慨CjmcF:}|ӦM9=лR`$ l NS 5wƒ`У|ي_K~,0)>fXmDl :,qDy3b:H_9#~Hͼ ]K`}WU77l^Y]Uor5Qfg}JR˹X狭6V{kyYWC"o һWX'+ .Ri-c;L$\Z&#nWgr]quLoӽVi U6ymb_TTeNWwU`EQ*0.'OVU-1E0|aWo]!؄-}iqy9nCiU 1c?am?PEI]T)U6%|Q޽j۷j134:N(D! ?헨Ի0 ԪDDX[EIUKthߤ.L2WFp&׸€K`Dz>ǑʗX,Q[2H>?3ysc(m;g >#|x_SLϻb_pUJ( "N*ں`?_A~%`?LAbyr+0`l`$+vPMѯ *[drgʾǽv JCdZI5Go!D'$JnsoϠv`c&bibCKe3rƪBuNX3k鬸.w5Tl]:$mR*tv]W--̅.r <&>蘀\[HtF \@4>ew^g~Ȳ7 8)G/UKuePk|`v!UPd\\wV_vGJeޥ@ 2:. XZ‹,#='6:w$ØV"~I|@3G+O-JLxϻg6ġ^0M -x4YrQ]=l=Tʍa䀾#">=7Ҁ5LkwN{ѓ5os~ ֧mds~6FHzzRRZJNN=}N$56HGl8=0C }k(\qKvTiE$WLD7n1rPُ $f6sP ûӖFXs]LPyCü{$Ox_{d͹P˚y<h,d_'Ơv@GvOIyjjy.Un2Mw6)&:|}ё:7+uCaNNaj\J=_wP~2QG6 _=ͱ0!H?>o8w^R8~Qmh/- ؐeքOF6ԋ1Exܓe 0j<| QF~sʙ}_ęUɄH8,RQ- W V ~bQ`=.å?-8VVy+gg"g'5HkV&X+oZ*Dz V2/f*  70! @ϻ8l,q!=`-k"Q'WR+ۖZ"̅l^il]V{mx"MX1_f@\m"}qcaCw`[ХtAulmL _apoc0Lm+!I?YQ{ U_,k)TUT[Hʵ镩R"n4hR 8~^8ݓFYG]mfH 3oxQ=ϠDU'RȩO J/ eLq}D^o8Q[VR{ZIpb*3LҰL _̐]njBJ>!~"kDѼ9w0Ƞc; ێOchc0 Y4ixErNa܎?9|% \rSUE c/GzEV\ԠW}UEQBIr_^s2c. K^ϷU:At FCܛۚ;<Šq+鬬>1USU- jpXklY_$Y-;Y˫6SN)(O:mͽQ-HD5vޯSvfHȫ u 8ޚR*/yz78(h@fuaSvqjQ\N[]6cMKĖ">G3E7˻&B:(4u_B* HHZ,Y+X##LT**|ꦋ |P!ŤVV=ЋxSO[au!W&Նݚ3FFM|#u迥EԺcKm9J]|Hh`p x^*Q.$`9ͷOJh!j5&5=&@ MxI1As`;>~J 3h+**ޜeD!,M5{C':9wʁI`@V55:ǏENWU w<6OkTqQvdC?IXT 52LzN9Լ7nFbB".M"n^8f4m PBE'XX"1oRao^!-hU8d`)8Ŏm82 ܃Q,9GhOH+>y;ȳ=&I}EF[H>,`.b IiyrǡtX[ӵ`Ԍ>Џ飯oI8 qMEdïaB{s93~ѧt?za$CEL!}]/ۆtxk'o+i,md \J餙Y6 v" Y.Ǥ3IQ-Ѱd?9@&=ƧoY̋T$]G4l>2= eЛ5ORZ;e]-OOrff0JG: oYV&yPE\V{3(Q24ߗRoBf#dݙ7.8Y7&LypkA8v_"wxSNAC.pi+hKhyVcC3W75|$f0?4#zKUVUiClWcI{yvsD`;QϞ#b|ymn 6a(d|;zP5h|U=1$NՍ;"G >ҊtiyJG鄁kf \14?Ga^a hp~kGad/(U^~e!!w tF6Vkrˍ\^kh֝tH,VUTUWl^yXSk:-|)?KWօW틎VTsny>y/mGYo.aU ?82>`"PfEYDTTedUDTtTXå.t4Z6Zs ennɷ@*r\9o㝄7PP7+/a !)ٙ9>x8dJ\+L%"W[ݖ2pw—ՊղdNdҗ-P_@wEP Z+F,Q7ZxZ?D;A _6i?$lc.4T¼|Jɱ8Cj #d)>P8E(TR$5|exqh9KEL6ևx5Gu!Ms:zD1`\jcFB4ŵ&ߠr$05~[~]^JT.tǧq%: n(*A(uݧ گ=EF:Ho(;^()I- O|>-v$ۥʒ:2*&h']C9nDwOCFNVFEӈcN'G(c męwuC?;(nUjhB9Kcb8|lH= \74||躏ЈO;c'*H~o>)'β0Y!FA{^e[O@[CXE+رeu2 ]YCؾGDu2ߤBe j[9$Yw\ RUӺFI_mnfsw[Wʽz-qh;㑄o w^MM %d-Sz-Tc ZڋE}蛀#*U"!l=E8jxRzzw0Lc_|˾|P2=Hl4=G@?f _$=O$MKdV頻Z4朗HVq8=Jէ6n~<_ldqs2CGWJz~3s~~{d%u*jj@h (X]L0>7ϷgdhlfYƀT ɵa*^TA#8Y,1ޟ!?ډ$gv(wmؖ"lC>FbcsO_:"O(|Tl{:/5R!Jj?^*Z.ƯbssgЇyuUh}5 _t0S]p`9DOk"[e`TefuQLO}|MCeCEabHNۈ rK~䵙g/HaAq|v$Ƞg#lRQbNJou>~Sʯz"UPkJ(absuQ(q2f5DxQ>څVHfEOE?e@\ޒ9XkH'&l}$NHf8F;mPC7kLNYlN>B\L9kn1 {WJ-1R5|XŶp|bl[h{g 4?:U2OOinOj/s7]ޜ?<=-B3kNj.j]nDv, _t Z%{l( [JnS :tS]RuC2pW.+oqXwDgo?GI1}U){w-,|r,^R}]9 Uem1Kd _^0|>89kˈiW{%4tw̍N1ԏmfo39o[10] \KYnrVKWkX4N}HZ};#4ƹ WnɜY5M Pn+ GӣA'pgIq*[pqQ;0ծ,=GXS\%h3hBkz* #QBKY [L';ĭ|}*hdRYimɭR]^-A[m;oۆ(`e}ē/X&NVw=`E*c6JT#B"_+ЛLm7(*' $"Kz]6܃ p"?J2X2O($Xܡ\8 5˺|ctfV^m=t\do[Z`"(%2lm,ԏڣʡL%8v [TL2\`xoL~2wGH`b߱&4ru@T޵*T (og|{|:bÇ,=!ġ#g/!b2A 9$~ ]Y\/ oY*QRNo=^} (=\5UQEDCВG~pۜ,֕CNKsQd)}Zi/Y&}-K/GLb2t/>/n\߂C*%%hT ޵]7aQY^~_ rg:n2q?8P_nҹ@f(tltUI蓐mjyHGRGa騀`!}=YU~ >.,ڞT00BY SC%JxKoп;Dூ;x+ 4IZm􂲜LMŃ˒qu|){[pd},p ZXݾ;L{ m{HشLo&[&qPܼv09G VMdzO͔*MMo-76no"QsbU12aJS@kkчTD>dzKvC:bT3, o^jݧY@9Ӽ+jYEޘ z34@e]BVOf  [ &hW+o}|/0@H( ,6*aW5Tq1Kc70͟.")QzTrPX0 L*Osͽ'~\BN䠞 ?}|Z.=n.b:\(XO4c,0ќ:=:ytAF9aA@t%jE:,wB~dۺQr^(Zq5&:EK4fmƁw^zY)egfę&XVaK* ԊL=H\rл>4#5xy)n)q4 L*OhxI|LB*N^S|J2nUC!‹?_C,,"st0 (hHĤRVBzף7u\9jZnıOc*(x9eǛTPj<wό&G 9HzQp/EJEӫ ࿋J4b%&#úZٶx<}Naޱ+ `Akf%焔8>\wӨ^`ěnb C\"JS5aDdD % Lwͦ'oT_􅝴qNYNUvvBM 3yA5^ړ3 bIy)pScb]0Fhdԣwxkuڙx(~^[$-ͬUB x]q6^61 P-$򻰉rK⹩ P 0:1%zxܥ)y.o .ZqeƍA||Îx= -V7|<95"{:ym(.7]69g nlLl~h=\oOC 9>7C{ܺϱ(Dge< z48 kǛU}Ն5AVs- +uWKȦ@$dX չaYh"̍ @\a!Lhb:1H' ;?ߕ09D;S^[=6jmdo|`Qw6zٛJ xX`0Z;魘 @؂gOjhE_w:`FgW_,7t u#G/׿Zq G0őyMrp !SޔCQ/"࢚0r2K4?5xힰ'h(1!y|?[|D6%'23z6ව3X?;?9coU /,HA u] (1@v5Qv.Oh} fZ>0s!߁V}0`M:v(3b0Y)^N< /WG~P1z6# b OBV2[345+E<9r!~ 3!U잝YV#c~n0^cse8U!K_{ Z*il\C y (4W4j`B{,QZ*pYG@wTh? |'[fZl-"7"&ތBx2C8w#_$OSLpKb.Beeyrwz.:8En ;џ _-![ tn}Gqf.&_޵s)R?9~>VJ-z|.MM,&jZ` ?S~:7Owb ;O4T.q6BtSr l!a [w|mvMQ_Oc"8Ɇer@nL'މKSӚSzB֔vvON5n)eŜ<|iH8+>؀H|48mt=q6tn7uv鑰)';r5tq*DPe{(r4IE^~Ц1蛰To緄~a(hʇ1ma $qtF_=l.x`5&w &!<-3?n.D iNQWU e u[;=EN)_OYI֦M8~%4=#^!)lЙUb@xs=[n)3v>e2hmM]To\M`OLܱEƋ HAS JwGEP yKݞaX]\Ù+53C+I$y߾㝗eE/U3T)Ul!~oiQZQ7V3V-mz(lAX+/tM)J%*ȑ6 YmZmv 0 W3n ~:xuri@,{#695$^Z#'._\= 32XW$B!]p&Uxjfji h,!%%GD=47`yj|9Jޕ ),IUX\:fJu0ir<"? fT;\w{#,2>Lg 4QH ƹ]>myӯ-ǸXZai;>v#鬰3kHw;ґ*s }X|fvvoonpbP`|J̝ުʰtY}TH1 Wg!dS3Dpּg!BqSDZ-}3M䃥~=D|zezVT_bMZE,2cQyx1_Ć;Jo~g1͞$ߞu]acu_(]}T6L`R2ܰ?Q^q`i.ϬiUF:?})N 1,kX}Q4*7: q*"_YlLEmFx x[Ƈ_ }Mr搐鳳NIrYTm^cy[~C[ 3ÐGre3SCgJi , Y:@ڟ_/ηp& ?E~}pcRa4wiρZ[.cs١ҐX#2,V ;ĢC9,@(OWF A&*%@&J6f#1 1d EWd)?}Ebm-KG\nkъmJU;q[_M]K-CX-HC H4 "yPNCT "fB=BY$nn1X ]:bzkDAt;-<2X/l8b8l;r'Aw84Dw(4XMw,K*vyZ:74WhXU:74Wx镏‹3OU?}h'Wvu5%&?!̗0X0*(kض!A; ⠯VlNVD |[V9W)@)'cȘ ViDZqOݪyKL{ʯ˄L1j aq:j@ymm"]u@ZM8!x,6"07jBV/)= P/0eyy!|H_je vDf9e|VHUnS:] f`(.(5?O)Gur<ϘLP.!vH/W^.#vTJ.k!Y>sMM'`"t\ RV zrc Z+^`aCpCHZTDVWg}$+ ف9füI2L 1>dc^6NAjy6겊]/Z7(J"wތ$ac)П{ltK_d[9coR[#k:xKlHFz(S 'v%,y^qG\qŞ\;qvWvǓ]GCEʠܳm4-`60rHFQcyy+3=V`\,hnMW@r4U TDbW"D0ˊuB9/$^Y 2oH.3pZG:^"[;I´\YFB?fy(]gRjxۯJ >^;5c"{j:i%\~%V!DӽŞ$d-Q&oV5 7AMAjzk ٛR$6`39n-$D6aKՉ%xft_k_p짷 YksүMJ .]_F&Jda zŅf#ibL$BWid8IRfس+<}羞j 4VUPAMMI -StR[k, ,JTS[š4*Tj<|2VgƤut:H~E >Ne+LzYIPjQ&K|Poj™R|]\[ͥ9b_Տ{37xT: nVzܔO?U.nPg@ysOjȒ[ǜn??P>$(sۏk[-jUAx@}m@R˪lQJA"5`0p#NpjW矏WBfИBsAw6 7 N3b%llevagj<x: y𔀰 ׍$yr=|wM1420HTociSX W\UICJʒ'3c [n?\n.2ޣ0YĒ2]g{UJUнA8xfO2^+?밖˴0SmOBD;U$P\ w.! +J J0iQ^WI&|i?iZMlO={\Y ˆ=`Ű6Ab dkŪQԑҲvߖK_ltj)֟K@̆L;];:U@DCOCz8VvcWXC)}p5&O#k mQp1?5>Q875|*-BQD`-" Aw6mq sc43ғJu2vZ(?=DyMv?\: >:.]#v~!6/~$ j SnF-x)/u&נmQ| zĴuc`NwBax%EM&GZl9WKRߛY}Q`@a_AӏgΜG܋;`a`?Ti =AM:zB|CgMM/N-fYgjyb yx[b2çkL`'E,݀T&Keߝobs-z@D~[1LB4 "^ώK˞&j ogÌRvL+t/T~@ţ@ǒƀps"چjJU;~qpkZ{}Zt*uΉ V]K8LwT +aqˆJ~8D[Pzd#oK,NG I꼪dZ3>whŇOoqY`<<`Umrd#/])o*ԕ?g&T~M*-4+keI¡®xVrEBRf=LnpLd4 `8%\7BAhwG.~RW؏}2hVׁUk53]Z5icE*\j|0NUdE 2vF Q4HN,5%}|J}|kA{K.~x^}*x39Np'F?o5z]@7e<\9I4VNo~2s]G5{)۝ I$L) 4Nq=Z\N-: (@Eɭvlvaޚu b'We ā*N0 Ő*V:2Z L0+TʒT@OU;C[GZ??1aXVgyA|+ 9d8yyC飽8JLW Kl2rotn 5CdljM={Yy0YtA٤iI-cT̾5*2',,)ʅЅSX,\W7fT7ʺBL Q'BNު{0ei۰tPvZ A5PiZ#JX%S?=D_zBz]]Y8E)xO8Jʫߟ_%cЈ֞e2 J.ۜ?&=op+,gZ]҈TܪC1O_+7♹w-cvQ]m1 ^D|K67o2O_ {k6$CBW1&&8wT\o,>/#Uy``WuS~l8ֵ^mH@yjȠu+QPP 6Ta#pNcls>5Z# iFek'{,pB-3C8J\h{2@ ^ǎg 47P2ju{_P)G>@Ùd5;c |_/{EBώMh%np *`MJN\C"fB,\%$29'[%+p%)wW_7>?+U7'U WIvTl7?ru$OC 1b(Z=r褬:ќJX)Q)q LkUtaz+a;G?r({m:Y%23m#7Lsl aIe>V3F`7cv4ef$hhر'  е`Gۚ;COTB4Y{|3Q:D>LuFqIb?,8%EHXI{/E /.@4hu]uw;\z/?Nw^M@m5JBDD ͩn6!@*0uw6DUB_-\zk,ӆل~K( &[52eݔyQBckAJvc6:>A;WtSQV`PQD㉸B{SVۇyNK@2񮳒%f 5+l#fhgulIƠ 6ʍ:9#2ƣ/z8 ^z8F bLA I? Z#椲ce MXtu!|ݘO[.m9kE \ٮX5*ox0kPPj:|Qf H8@ee[qJ!&߸`KR`@Kk=F~17l/TY۟P"ET& >Q NJ`tӰ$AYuѣ3F/%?%U ׇ5*P/5x,t 4C~^^1/@_?JJ%Jܴ@1 er݄%F+4 5SdS-) 2]A#ӈued;*KUhru#sYh-IT "0΂HjM!:D5Q£Kv8QNLKcLϥ Ͱc YMH/?4NF6g pU[~J0- oW/Ujn,{Ԫ̖tL\$MKPX'F(r$Œ`*}TM^Nx;G^{;*b7~]BP4MhD낟;.<<qk 7)xr 2ai[͟U)+{>Kg>4jspVnCD:8J}R6l8l2nPXVb%T7mpss3̝2~^ֈ7X:G4}aTTe@-U"Vlmb)Gi$ CA֙ꩿ-vq$u M4AfHhK~Y]~Q:,2F""iJ< _ocxjH=N^ՑPsL`uD=Iiv֢Z#*z%,2 #:Testaq˳9kK{ AJ9}_J9 tq(A!ͪoOX}.9ǭ^/:ʗI7ew*6p楈.5a#y@[sJߞ O{MG|,[yMGJuZp-\g:1k$kCjܻʄih,&/>9u2 E:7霈!fn'>yE_;԰ɱ; y^eU\:ڦX?E!qS?[,=x&B#?=,?%XɪSyhSCw#oukN$NY)J. BN:q-)(&kkr Ehޑ;9'sellrO\BevF[= 3ϡ[̋o/:{J["5vr͇gPyפNiA0b4 7 ]k NtsȆ P2Bb'"6|6w%ל hlj`@#Hl))mj @ h}Ό*t6Bp 4l{@jlqЗC#/HXoa|$B|Ok9t_2!c _w'Ul;&0Ow\ |ihh5}TnC ?퓫&vNCO1KV$q*qz^iP/x$=#i\ *89NJqCՄ[奏C} p*8݆EΟ"<*yIأPмsxr Üg;DI/s_nf:*N'h0=jmWYe]O5A S9qFW#M} Q˪G4hb +}>Fe G!258ĴAg=7O; aLﳯ$[3˹q>IqEٺO}Ӧ/i]>~(Z)WI6B mså^[IL w1{OBHVV нv׶˦\̕4=x5̧hj_C=XwRbB_ A@rr%S%GpFyyF*N?Cg:t҉U9hρH^WևZ#橖fsO`j{U%B贑. 9pk9sx^",WY&}KXjz/V[2WܜOc_mW{H .8xr&weJT ݩB4/֧7Ttb3#̧ƾDo|"\R<}(|',F8-Hny1=9/rPd)wpZP= ԓӝ:RUHԚ})ܟ-h0߶>TO)kܗ2VsG(M${y^e=&DʼnK^֎.ꎣfڗa)YQ f4A⯈hF q놼`+L,6Z7%\#qRPĿ;$_; ]C)n{t)ɴV{e>=4q/^5[K`)]=mػ &Qx ¡ KϤcDgP=Ol. PDϘBEd$P`fXc@/UzTc6\h@5B^f' hu1uslZoKCT šK3^sƄe#NizB2#/ZLo1tIm%ٶcyKvz7ZGU2 :OΞyumthZPW lF<9[& `|muS"Ab2ʧ:\Rl5);]ZF'%PSG;{3+]ʾe=4%Iҹ>iy-QJhUWװmb={k'ѹ'K׋$ZF-r3;\ǞB])^q{H$7(=+Ynݎ+ѥMLma| ԷգiN$kW5Vk^6=oU@ňg |od9rU.] K'Mok՟+(9ϸ2)ѹ,U&vj. &W<<&yAsQghroZ2L۸YNQyz A<Y= `" _rosq&ey(y$OǕ̹tGSJĕQipv #e ?i%z}wpE GFNM%а 2Wy=q(bq5B9a۹ǫq@5lrTY/ [y+y=O'FiD; ^;l KwnΖӝlle7%8m$`RM]9d}WyTDԫ{(H\ P5@P2iAzO'Co&b TqboF ܒ~P"QAsZHt߸?zC"?ha#;y&J,9ZT'u0*]pEKG.4Ѐ aG7{60ND3`%+U(gKD؈ {RY{6غyY=Mq T|JpU|zE:qU"'xb a0Q+mzc#εP>u/ m~N#pMBt+ZH4 _P&7 NH=^8#n:q @a3- 8Baq5 Ƃ E Oky9g8.J +ziCƼ="o kD} fJ'HQq$ioς^Ј,MVt/ oFTQy?3B͉ut9ij2QsjLDU5@RU^^-% &OJ!;<f¼-Z"-Sqe/FO`ʢq(*j|7j K<6ILp-nO8S  cq;V CɌvh 2wxъl.qerh'-~n -o¤1RƠ\P!>J5LDDU[RtVʩݒ#% Ҩ} uvbm "~E\J:{WtitG*y rFP-d6ˍ `a[C:Kȋ(օf>&{ |{" @_;kЭ1E^wez4Zt]}\3qR' yۤI`#b'E PIgڷ|n1J-0Mr:QOԽY[$'poQ,supƹG z9ή7S,nNH7m%p{C?㿏S}>aCw7?X\FRDB"@᫉#w|.ZJ\Y&Sc\ǀd"2~e`)KkN_+2^ZH4*$/ӴjpȚ^-Gx`GCF&}7pgo->o X#[Y-<3M|υS}G rS\-Y7IYˡokOȉtB pR'1L{ÇR'hU ,©U7,Њ@n<1ŚeixHIT 7v#.x `j`3kbndA=mnulTXQd~^۴ƶʟ!ecAY]d˝B-9~z!r/_[{wq[_Su2JE%e4u@´rS9G{VO>ȞȎ(Q4%O-WEul koE\9_f Yq ##凂pB)0̎\k@ڜE2d3JsjܸPwiL7wͱB'/ \|`DF5B/ lPF>.-U [*h-AKlZ6#ی穚W@ֵMOE!7__nzᕯ@ 7DD4aa&B0#0kO1`Nbw#[;.GsҗPҸjKKXO*ݴK`d0r7|]X*˸Ԅ1Z9!w봍 b0v)杜lg#r ty:è{ 8 Hs}nRCQSBQhdb҇ Bsjskܧ{.m C0WkEs>ҦۛDB{1u1.&tW!2 @SX9CÆ eGa)2ظ0Ěb$! NAcpVQXїF:'`L*b9Gt` |Qc;K,5)&ǨaԂTuvG UIܲh} N:׉E!$#/z۶7 gu(Z aB1zr&! }l01}bYoA DaqΟǁǧrzXƥ i7T8*V`3"pNNq6ɊY0| ]iHہJΛRWѺ8F͈XV]8?MCHt};eqigx.Ht!2Ƃ={VeʬI b![qzs*cq*Cî i!qf4j4@tjzn4Tڽgrw04OG=c弄|hӌ>Փ*$(Պcmڞi\}SRf2~C{ld3x6LjJNoI(HAiP!Ċ+P+fyG3R4K79xlH ݓ΁P-]@i[E^~%lV«U:1۱ &cPch^xI8PuUW3Gb6D-e`ƀ0ĖAoiB&A+1*>ge"=}࢙K>]]!HA1=O׍ ~@KZ0kCԮ\SQd6}\cCh}LnZ}"5vFגau ~0b*4&_41~i쪱K'z7 V Q9CWT` Mg:JEFLz:b} f`!4 @O)hY6:^zrziӘS,A8t$mPbۣ璙ƫY:7E1'1GkDu~Z>qѸ|P_$iIA"ȵ\mcmÄ dӹc!Rf/ AP`6'/ ͟\{ W6DO@0sSۻ0ztîZ]??LtEK7I4٪Vy6a[TrFjT B4/uR#HEM]P6Kϼ3 CA{7OT@MCj3μx:fd T gM>ʟ ZQ&Z2»={QG=^m֖z~]RtGLADޡmh²qTD"[ZIbJxOv}—4}tw`7>mn1V(K-\m#6QN:EYߏCߖ ]_ҩ(Zwuv՘ӔYUq:Mn֩')b nzfGبmKF:i2%*_i>şiƥ6F,?N.K);m-³Mf /Vg'=I49 y&Y.HiI.*(`cS;QYkQ$[cC4_?_]kWnsKl_r ;N\\Ppl{G2C_TR`BE=Ϳ^n.,$#\S̀8¶gX2OrXGcuMXtİ>mX I-]h8.u1.);Vve"dK{~hIw }0l6aǬHI-9ǿu珬Uqo<;|/:t;_}oodƂ#E-rvhE | q2!m:tf|{,~k[ucA.TuOKW6m8|DRІÌwomt`AObCPl ~G.c/9uKN?t [12T2>L>5ݧ vLnFyJ۰[ѝM;Qݳ:wT3t-~>oa9=^_^wmVdmi5ꕒ((1Kc$l'18uW24=hu6Zf$#2<}O+"yi4C,9f$s&!ؼm[O2O7K*xoU8)7x%;U9|qؽ鿘'S^;^9-mjI%dƩ0{,S4?F"G:KIxA :m EycTz M.N#+|ÿf-hG'c.Cʧ[~.(X: r$?" jǬ2ۜ =!K,r+Ѓ:}i;W 4Ee}|Rm[g"Bp- 6;1V"v?'z9Ņ<:}«tꑋ_2Ƞ>Ft#ؾ]_`\aٞ۷Bqd[!ɲEԷ+{q &6XO,z3T<:LAM_ ,!HCk[2oXҹa'TʈtLt4+r5deʕδ徖`[hK0{_I |d!om2!cB!A]R:M7RRnrd. ؈uP_ell KX7iJqhރF;6DˁJ6!-TI*=JqosG5CvOv^6S\jf3>mp=0=2Koblv/GyY:;GKMEl:+7e :-c;"{Um0_.83plll˧rFsԐlӸ* "dƛ>6VQҾ7C& vW!Zw0 nV 1d.voc8G@nȡq'bmnA3;b @5G_JZID!< /܁000v3 Џ䅚!O,ZLbego$6-{b6UQzK|Bo(Ľ}.^6xCZM+->6S=zmDU#f5V,_nocn*T]շFLVqh;=*&gc"0N\d{oe`[Y2 |u)*R.#S Rå?)ݾN H˒`j x0Eߵ|~$tB6^ GM}Rն3L ]D\Chx|bfZ*;ӕL(0u Ou0y+nr*F+JIa0r xfGvjn8SŌ9Ix9/cq )qzН3OY_4WcxQFJCIQjzOrcWg#)^Ύ\4u~qYݨQ%5_i393ʤ0K< =S 0LfW؝֬F^xܨtqws>nׁ~W-M`ب%j}<>,|TLQwg^( VYv=='  &ũj:ڒWo͏f֏ˉLt2j|So fi /W`Z=h'rjT'ِ U]9g[g ^=~UPF =*'=,Nόs5R՜lal@%9a= rDW&Sg QbL{%Uhs4 /'LFzjgGj9n\ck`Jχgd4D&{e+@ڧ_7SUU63{}\X\`$ٟncٖ^P0w>K2 +sQ.cA]BӵEWu2Kͷ1q3bɴm `Ԡ%㡙|ǚ{ʬ*?މ"iIѠ?3D% n 6U+Lq'n-Yr{TEe@']9Sa³f䤀Ѡ H3r:F\NwL>QP"<⭃ {O XGej- OGB+?Či=ŧ٨T-]3.V ;Zvl{+> ^WS$yʅcqc=nOTYL15ώ5aEm[{%Lzam|9͟OM֕ ^o\ /XUó[%LlnN Y/v@x1*y?6R4_)@XԢkq H9n_>R r4 [}֠o 7ޅē7U^b1ue^IN]XDi>1t0JjH%zV_ ?v۰|/[^/:26Eh ߡ:!f?vG (pO·YCO>Ub.wb%tpBN@Kwm9V#l,~$``0b7Nv\_^6 m<%c|pUY2B VD$fGL)U~T>IctJ{OUҚ<1a:\s~F`Cc`U~&> yS b*bI^\`:.Ծ#5!3{b;ûr5'S{2ιiqIi7C37%_Y ~akbUkQ1T-݆F~t^ cxX{A:=M~p?_IWu;RBk`DhR*|"}d Sۅp,r-^R4WZU9C 0f(,k6ȸ(':i拣q)RuJpj:(6vyԽ>ؒ/b1OH7H:kV8jb5z匽dzV>e:qñS,^_j03:L6,e 5߬GL}dю@:"s6L xUߩR.p\}#O1߷7w||%pb_->MPέ]mhHX KACMنbBdUV"Ʌ !6K3x'D%uN|GuUr՞J5ѩ߇ö.sQ{Xc%89[HX*M̫5'7}n~7G~#|̩V'rFmgTd iR-?ݢ|fB,_g~^jۜ8.wt\W7XcCINlTuo'k-c87z7:ًz>ՆdAu2&+7j=n=mo-Zxvj_&𕩸".L!㗓OE}w2—Ў}þ haV]B<Phd9Ƹ2=/2°%hBĂ} FN{Ǻ4fFldv =!?PU8B^ޡ%T9{k4)IV 3XV"[A'dq+C 7anCn߻&M~́]wUE -DCNwEIq Mޛ%Q呶鴁葩QzfT%pS\hkxaYz,@"_qK̐*~`ƹ8ˇ7Q e [NHv;m\E2ͬpЯ90feƀ)|u߯]QQhaEwR^U6m$ck wVy71 7Mk *9F4Ϲ36G[A"T&͞}Zi& p & dtbz$ /? ;@sTcֹ Buw~RS?p9Xl+۽T0"k͋WDaOz5e5NWP"q܀3eb˲zmB{Q qOÙۧiGJ. )0 _\ƺv57953<Щ]BQTB;cw'T(~:\*dXK0R>qgC;#`iBs@ƼS1m/+ha".̹bu!YB7MdAp㸷Ss3Vpjv֪$6v{ йHFT.=0u=}8ѐjBbC(Pسa*yMHW9rAjɊ,)W=9=8WЗ!PcWL;obqo)twŹDR'{nk%:(-Xu H&sU=z:&岝 zFUA_쒿Q=6oǿ!^>-7Wƿ(;?WI/CS ML"`3 `?{qoKxI!Xr[CuŽaHq(Q߰\ҥF=LYMidpcqF\ L==VwERcq;XZD\$BdxJd@K$M2P{wH({0Ȃ%9Ŵj-=~$&^^Q+:PdSvWBb: ɞT '-!5ĈAol=w҆.cVtm :LF?4Ir*V˓:b[nA A(?M\.9=lK Touu9qE'2O:YGFY݈}Uo rĥ=Ufۉ !W=S x"Ip. GdcAFt+g˔g{1Z2,>ۂ"|mGLB[vv)ujo<1K0w]YOvqލsEثG#/)~p:9] CM=ߛ>=d»c$Ui9^LJ+bXcC@HͷX0LY]3FV؃ѫǃ!䭘X9Ǫű5yK}#XL&M|x@ &, ڧVk:jl2'3F-F~A2r3BՏ*ZP\F'`:LQkꕍv:Yw>K!x?PFM7gQ1ӎfr'ʁ݁YNN:8b<o 4ƌsog{ˑRsŜ5!=B~\ I:{?JKMK7 ԗ):PE* jAkmLfѸ RB $,jSGSmɖF`HJ;D24 ٭7grRҹ/y)|{LԌ͉MF̓BGONv #?ѱD%.L%xȻ*sL,o|jTyXĩklJ3IhR-Tt>b*O˗+a[M>M< =aQW sd[#mfuž`-8 ˶X>i;`6!qiB]9}['5giY ei7dπG$_x8!ls+Fr쯌Ȉ~W3n:cմ +@+jr hqxh{!w n@q?0v3/fUHJM&_;N؅~6>u}|+W{0rcDPXK!Xajіs"*~{eU&/$~u+}L$]>7~'U(Q{]K{*Rfa}E"kdѿL^>L*47$DawgJߌ,nq4Z23K#_?1GxS,@ˋM/UJuUhc=bx h z/\:GWs8a#c2ܒp&gT, 3~[ȩwm PK-^6KE3w}t\y z)dEw=$,IUbߴ~1(ʩ~lw~xY kGs_RLǬKrإ8pvF * ߞpBPMUJƟ"3#[/flrHOq;[Wϴ6hJ6K@O1MXqdN_/>~He:iSClq%9Ptw_2T8ڄ/%Ia8~J1 m!ni ^|][^̀a0c?`3,$T!k79VΨq ' e8Maoμ4"5^v,̰ݘ:Cd,9Iם!;o%\(׼W:mܳB[VMrwOb!a|_R3  -MY)Y* 4TY uBԙXK5`R ]?k7?v67ostĭ;_tn"O/׬ܭ@6,UтN2O4=} YdR^$?8;GŮ6/GE^gmi\o=8{EPë^ AM򈳉G+%BwFpXNfޟZn]֠D4J/k&.+'d|r|'hnnr`;6-!EV>X 8F3>$R/19Ā7C'C}ӫ>d/Bu,9c'f7+SAN sÍΨO7J}YO-f0ً<m`zo_}!d,c;U,N> ߯jbw k_-c _|7qf 7O=ʜ^}E `{Y⻎5(06 o c&'=޺8sOd؋dZ h,-/81 y /x:)8{!Y=s1Ge[JJPnətPy@G3nV8B즲.N.8">#2vqljmAJ06 rV},gw>Ar2fzC4XS]Ŏ ?[@6fMM("s"'L Hݴb)r{c8Q:?Ŀ~jȽL]<}XׁIv:ҝLp |Ǝ_SW ν="2yP D,VD\$* W U8(c9vV#0e~6!.d@M*.b;qžm:hhl'Na:LIiGb$h/5PL9M &Fʘ<3x3Հ˛߳ b7-[JB==Ax#U1;ܫ5V1K0ʱL폗|O|sЪ35l޽i/۸˘[q[dR'V{?msfأ?םj bFcG0ǟ^yl4:G[sg羕ldTWt6Fۖs+he^*z,<Ψ!Ё;o_!8-Ƈsj {3]hR@A@@ 2@ "O.%xν5t)?F5lՋO{L@@8ᜫ>%B_RL'd/>pz*kDO@-|]tJkAК *?#/p,v`> fޠO~M̶aPIUGOkU j(ו7綞8|-ũ~j%{f#~e& ~a߀ï(96>`6B{7 %pj`pr^z to6\tHi9ؓ0MAW3C9w8,p1a֌DOjHCq.8V˾@x4/(aHۅD%3Qd Q9\2GزR;ߍ]3QhpA+ɭY>tP--sNjL:.HܻB‚􎉛+ !s.GŁ}\WռVk/nceGz=4YB2-m;q5Յ$ZeikIBfjŒE;ocԛh#U{?HIxR:p=֖f 51,SgÞ>z)pPrЉdb%٨ ؈=pfĹҹDzQ)82hn_B1lgͰjIhdiϼ\Gi^* -^`vʑDaN]F"Պ#%YPҚ/,fϗEdu}mݱ;P`?xj Xͧw`72Ȏ0\L]izwm!|8zNUnp=N{Z 7bEl9mLTsjQO(1PedTm fJ2h<>k 7GCp;(zYx2So?` "(_SpUGpne[Yg VGNK=wf;Wo>i"yfwPmO58| c#q@R9I议ըοDK, ƅ)B `" ACTA-z\P]CI?pT&Ul<`M9 ] ȳ |K[ "t{-qDzIlǰ $exiAA龏;}_Q5(k SZ.Ǎ7pI hh5׌݅;PlYkesC{Շj(UE.L GH1?tMEGN0BG\}^D2פB0~+v3v{[w׮T@j~^:]RuԨ/THe^8CFt'̄h=rN P|a׋z]lbCBdvg*@U"7kóu )TKjse%vIj)" h}Ɋɲr=UK[_{=۴x`5h#6޺\܄QEw {#'x^+elAvW(؄a3(!GhV.-[|6Q}k :B9M:uoӼM!T:GK֕ÐA͉%ߺtq3ґh<,wX$@#4tL36fǵ!ql!vg`m-vA%rTS*t&벛(AMYsplz[N,Ejn/}DEA;M"K>2m1` ^^֙͘7a12 ZMց4j" (.߼R~ 3k1@ sPR4C刕L8#7QD.E7=ZnQ38Ԃ;{~ L>xܢ-svuoHK~m KA?K %ǺVM%Hb-(,a)m9/+3[.1+5 xn,f#({OpBR.S  -O|ZVv@?ml SwHhn"uA)*}|Cř!i3? 3]g7 )=!⹨sڢ|'pq_Ȑ\ߥJPcw ?7Z+ĄВk_ ԅkxy[W&=:aI1vsݙBٹۮr'ЮF_MbQ"p] B8;M&jg(4!Iߵ\l1pVrhrg Hd_4+)TNfR2-G!lR&f̩oBQgժXCշdԕ e*KٔC ^A?7JLTf̚[(`pÇO-b?Ilz~Fl._(ʕjhڝn?ƳlXXowãcCrJjZg2aZz~ „2.r)+.;y_`E+^"d)e\pQ<^:.XwЊtk'bLamQ{,p"D!:Fٓ[Y}gDko[%Kxo<_(ʕI5Щ~'& nT`۹(@TP!W ğQňuF@Xs*탰us0t,`L6 ?~/_~xj|33g͞cY/w ]K.+ZblȞݳ~W $e98N [p/8hD=N (ߗө3Ll@~3$n+֍ʕjhڝnnn  GxKҙl._(ʕjQU &Դj#go694H@0HaCGSPRQ30?F ,^_? *˩?eMA+>8Tjb=h BSޏ>G0bsO7Q#Z?Q=.8K*WD¸'S%&{B*ml=U0 *!՘m1{B*mlNP>gY,PpPPv-.>8TǕTe:`6"LcӁ3˛79鼠GOʢU+Ӣc/:) ,(3M#NC6*-Ϡ nc P5}xɢ6U lj%㎁`.>N/'@#- QI3]{0DIu4cb/u_*v/Ӷ:M-5>qaH(_PkimYXХ{]QwB ,[(Kf;Z["v-Vءpe1%Mܙ_;&>x)enCWmd~n9؎`z.l%I MPČUd쵛O8pxq1Ļ╴@PRC34[h*B"^p[s@I hB9fy0ϸ@ Déjmd%|N5:Iflg>l h>j̦(HZk^\*++ƞ9nK[: :qgT22K?d\="Lesm(0K;P=!660S֡|0{B*mlaBT\ „2 @ eRics]ʸ'z eAٗH-hЙaoWzVxbzne a]2WxX:@>Npx? ܙl=w u/(hl־S2lU*곖㖲h 4yjyi` ,tҢ|.StF|H)QK1Z U7uɄ8_ͫz @%'H-TR`-㑮SZOCz$YdiCW-0vȑYo܈6mě im^tu딹E.2AUa_>j 2WM\fQ@[z(6UE'o=Z&ķ Y-MQKŴi`䛎"uAhVRɎFV^J̒x8Ij>OxEȓjQ: v^y MސvcnؖGɣ i4 S1ۇ,,b|QD~WRƋ B tTC 0ȧ@!8E#)TG>;81;8V(w1GVHM*F+)@[*U%;cn|`AB >v7`%zskI=*5lқqms aD h Yr~*܏'!sAI=Œ6i _ٶA̳g PQŞ8g~ f>B>"*eiW\|>=wOBt)O}'א#V3>Kjn޼9AEgY6!4LXZ2Lp?|+JkvbPatnjv pNjjN"U6`h>z9W ٽ a{ިn"(eFe7BqeTa%GQE,8y^y5N ([IU .y Yx0ڋ% .xa7?; =\­:Ոl~Z2FLj\")R4(#R&!|VzoTZtF)kjmPM/~`|vDBLbJURs?J邮L$>CIh\L$E}O`:n2E;ib].0 0dQc BUBd2IaaTPճy9s잹PBU"F9s,\ U*Tnbx( @edQeMePY1"`%|—쨌a>C'Ԝs1Ous`ҔVwg* [2{ hvlSS)G{Rsр>c-O)"NBuq2t4@5lٓ,`.YB^ &򷍋hOsY֭7X +VlwC2q}qP![)j\8iwwU7Is%#i"/`4;fs;q]J5=\q7d^}F7LF=WX4J/4ek.O-; yEWoy0':Yo?=WW⿗[l<9j;V]>$"+:,f2bQP2yA\bWӡZ6O?|lY|/)>/N3 E1Lo C?L_R+6|7s_ Go?V~9/?Z%@ Y@H/GSW_D*MKc\-qycw^20~+Oɑ^/fCp-Ydi7vͯ,[k/hU)Ko7B4)Oxs`:X<4HGКx%UG1nnT$deեm0L],Yd*]M grԍSI7ˇo1zL6YDeԩI$zc0`Ā*Q #,i;.O#IS~unwݢ`Ȑh D o_{~~\'B!4iD.)E"lr` : <6KV-wUyŋf ل4\ڒU=3S'(HPA@9usSn#bn"sʕbjk{tfQ%V"׾!͒6SJ I42JF+gWdG{AHM .g|a*m}u Ԉ a.=V?Og///3_8e['SlnL)0 f--RJ1yyI^<yb\q`rO-LN$k)z~ Wd*uЭ/iwၨ AfݕU`l9*!00"99 @q*+@&PHHA[ #NQ8}zLH2F MWÞ ~so_vnvjN%,5%9h?$fŀVVtfvh"D(S#5O OX!5!Ss[jP1e0EEB~5 B`B/aKj]Z٨z0MDsF%E/ɠAP)¼s288T0EoѡiDH4(ZrƊ@흘~[>LEQ%6D)UL]p be<-AU/6.CӦqF)=OX%nNUYilʛMO.C.csxK'"bC0'!  b㘮3BB[[~ *q3b8WWuBPNED<0CD96۸uEOOOOOOh4Fh4zzzz(((Phm=>9$dQs%AKO9]fU|HP/97~*ʗ-qp8qL2[]#SΊ?CcsUZ).tF:L)64`fաf⥝`wK"Mb{ sc47"""&X᪦KRecD"S<)|۽8\\&l1 A8GH&+׉bmp5Y% D 2 DQ|E\ ܒ[T7sSb_H3@yq{oà$* f`,)Ce>ԃ->;M+) fcZZ@tG~]Y@^Uݥ]Pą;|?'i 5M$fdLghzx>܀EXʑA'[gFc,|"ͬe=C$mETɀP@ǣ?TjӋF0D©(T+2AM/SaA i6>+"Vl"6=S:{cǺD VJ$"=ھ伣~>'>, t"VKQibV>s,w{ ߪLĆhtL) pezbm}4"9JFb$F鄌*ѧ46owo){rn[ 4m凋'-i)hE(Qr5&_wzR|6f(E6z6~wf 6{Z$u+ B/kon o>,MN-k{lGt-LKoV7]O_)jz]F%w5:<6֫;ftF|;0Hl+JӒMx;K9(h4FQ !݇$d߭o(+.0YͲ^7" KޖaJ{^fv l}M"6b7_4`SIK(5I PR4 mhʙMz Z4irsN@DhUsC~< ?t5SU1!ai@@7-޹>܁u j]".%͗\4mo_\J'u&]4xJ$eVܘa;Is@ kI=&1<>o](`r4~Z p.EttwI] g\Hc4{WXlebV4P7` IEa,Q'm(84,A|V+˾b_)))" l0T zKxtYt"wvSLjZ!QiH|_o>OpFF(?n+\qJ\i;S QUm{}ʥD Y,|NaUFf~}q4Ȼ%}N-o ICiː&O{R8Xx ai,G"XD@ަnOH4ƀud(//\їTU4_Ř(B"/+˪*io=C4t?0կ8F5eԜ#`Zq!j}m{AC)V4KrIF6f)'xo}oޝ݈)BBa#8w,+|ogb!k+lgey!H )h$ o(%[- ""!k߉MC {*VUTUT1qE_ Ǎ:ABi7$O gcu^?z otFLD{sN%/,!EDDSgRyOǪFW*|9>[UUmUKeX[>zx A,HJyϜ}[ {kB0F!1aL>S8'cLLGM/L"RD1~xs(7+9WBoل$lGG;2,4sp31;zmoIA@.9uHZ:ư`L/_߲z[PbI%2p?E@M]Mtfscty$@`5pԻB!UJTtLr6P_B0>d~1aF ,on MP!<5-=*FaYF"@M%}2Zп=ޑX#ovJDžW+ ;~{$? OcwN\Dhg Ff3^'bjfnait0>?xYl}̀[?A5{"zJqygWV)^Jx.a ;B?ϪduO/Mha(#0A qⓐZMNZjUKz`SO3E! %GM9ǏG )XtX\0}X9L5lVN) DmO٭eb2o ^lxs6&G,OM0^ۜW/=r]d]j#bAb/:t 9.{<.EFjGܦ|ʰf9.Zohx48dʟTЛ8i5;e{#iڇj~ʱm:3P;D{^?5txRo%g-O*-WkߨԾgO:`oQc0 …otdWm#lW˯Ew A%h5bҭn7ny_?aM< *NT;nO8Cl `Hk0Cdi S ?e\Hbʥ>q3K~Z53m;8NpyAY/, 9~~EJ&+US׎U7Qf XoICTxu͘>3cd4oW_?ñ5Nx:]6|~.s^g"(̙lNy\**S3RIvɾqI1,'MךQTMB]]فi_$P֑{Wi9F=2Lxf Ytz`I"`phxA4[lS핿$ d]zle{q bXfi2:qW7hYt ~qy ]n!\*y} N8& n|% ,X\Q3Z!{Djq 34 ㇸ%ǾM90[~m̽ڪ{1*-ףz._̦2Q%D>Ӣ( gUϚH 'f@gla >:!%s^)#(+ "6...X.R3N–B|R[f x?7N|6 4+h(j5zqcL9c}A,&ajz&aZ͇O_ԫ5ZAFP 'HfXDI)7]pp+A, "1!$Ͱ%YQ5ݰ*V4 $TAD&Ir~zU4ts_V+C;v3F;菧:jʦ4f2زMRd%|2hn}[C5yx!kk[_|y R)~8dti#]ךo[B9ڡA*VKHMﶲ_ Owu|Όz|<8vxlzth)ji:6ch[1]i.#l6ȍ}-"> iX|%~qzxN[sQCqIކe>֧$I)2ԥJ01_qg*6$CBf䨶׃ߏ^3-+z&q[V!Fun'5 >#=Qh 6Gv@+=6<:f|ٰ~uMA[N(MGmgԁwz1Gg+I̕ZY紊|VH mEqZ]1yhً4> !R3M@"rjƦxޫ4=\hʥ:ΙG|*ƽ6eoH+vpC1bbfyڳv7ndڶ -г!wZ]oJw68͊NytB$2ڎ˃g`DEe}l;,(/8׾ Q11wt.w.o.:ޟ153aLo'~;zK\6ZO Sc %,.p>;=/{Ѻ/Mߝ6hgc51Zjޫ1M,>ЙbQ+H#\VvxX­W +[hI@KLMC$Oo)cv*3j$k@h?K3@h.'7ߜyc"Sצ\[ky. ;.BXCR~nN^i Z 6U'laz5m$`N"y%GϘNYN-@$/X(k=ѮzaSy3jW]xx[21( Y,}0aؐ'<琇j(U aCbIsHjV:tfӃ^ւkS&(h ЋɺR(@LY2*Wks 7r{&F:4kѪ' kp\ȡxp=&7<|䏇'#($E3,xAdEtï(Tiu|)D{_𡏤%=]P4  P0 )l QP1k-AR4r T=bqzU"# vi# hBMKNÖ́zn HۚQ۶x_1ڸ Q"r/(Tzs sL彊 ~oBOE(ywd@$UdέM4[+HQ25 l4?PQdsw:xjfQsEjj1}v#]n^d̪ZAMQ e=C\W6}#;Ub ʪ*([?i e0|ƞaO4ܭޯĈ$szHajhxjG5 mD2T)K n9UGh5qz-xZwA!&e2 6D"K C mkYSi0e) T*?Y!Ubg .࿵QVN lٵII3VjQP3KB2ڮ S&(i cHE%}ԗ&W!;ϑ5kqHHԳ=%& ($,dr=1>GmcBAͮTcES>v$VZ0ۏ'#($E3,xAdEtL1daBR7pȯ.|QkԗT@FoIQf%;Hya( 'HftD`bE%`p@Ͱ/B CV7FI hX%٦N+]9dDP0S,J%mo bX{eAp=|Y_$>bjr<♏KϫIJݢY,4"9@~C(4/] ߖ)hy`̷?G͏XFC ƺ+v={g.\O^nI Q,LUtQ]rQT"RXA\!i}Cu%h8AќfOR3іt9uv':ſf?z^dX0-Ll)@ e\H-/(C_j8]r@sTYU@KOY'M;ɼ_3К&HerR%Uo%88bWAR4r|:8bኂhx JjaZ6ew?6qtxq#@)}貏;_J>'lsLKy qA{+;VUUU@p۶%IK$0ov`i+Hb*NbLx*[n+N:{ )9ٟd1Q'l~cXK^/R$&qr!!NͰ/hDQDn&z „2.ҖAmwAh WDJUʣ>q7z[3L$d&J\ Ӳ. »X )a9@$nM7-ثJ4`ZPT֖muA.[H巤<0^p%<_s/J')j` ~!}a,.4B2Y 9 Fέ~WG ?Z2 R|^C r?=GH0,I%YQ50-q ɿ7ؑ 5Dbx*Mmh:2H "n"vY\JH:Xʷ |aOF܇-5cD.*#:NJ)Y|"C)Srr"V\U_c /6́g®k D0[aphxAdEE3,'P RB0b8Aㅤ\50-r{"݇OG,$HfX $+k{)3 P_ֆ>Q%@X=$O tr636Ε <& p.S]%<_cm9%+^FUÉph9jy^eEGt.}S@bQ5`z5~7g|e,; QK%(&;xyH~} \F̗>w0ҤP%.f „2.|z!iUJ]4iab;G"L(B*mus>̟et ն3+-׶Ҭ2үB  Nչ 8љ,mARۑS] g~\>8"L(bV+W0b8AR4r JREI)jaZ؎ʸJ[k#.O$K)TeDQK4;tVn6^kNr#qIVT-]q,(HfX $+es}lm)p U KT21? /~q4ǘ{摻=誀]UH'H‘s^7O?ϖZm zqLqrw:>oY*$SO^yZ%4%HY=1-+7glΤRO I #*栃BBvp 6C7C-gz|<ኌb#($E3, $+0EJP%YQ50-qE4 $E3,QU Ӳ7Ф%oO =u[ƫNyp^Wh @A$IG)8*\-݄Į*ڊoaKІ82F<O<ms Io8ȅZ+:NMjWgC% o ),ƏЅ"x Ŏ3Ҥc0 `0  PU:J2HQ#.qhx JjaZ4wJk*-[j.q=" @>{|Jel;'8Hhӻ+;3QK2;D E9\\5~? 8Hl&GMݤy؊L ݜJ(BBJ ́xCW_2Zw5|w}q'1b~%΃1ew JUƱdL<8JeLlhl 5} -= qlBӎ#l:[=e/X?l| xH;e<#|< yHMDmHC̤fI9.Q1IygQp2R)Ef5)ihY5F*blGZl$&jҁ.̹aI:<'jxqZ`ka*PӒ%;sRgS j"[|1iOPpGhq"%[VC^pBg`h \9wpVZ򿲯#oSK6ϴ~NM]#<5 MJßHC}8ۄxSd3P|,y-K(5笓 9:eJgX#{QY37.nh]+j{J"{|Cdi&20ySnYM]C:=*d2Leaf7X~hDO)1q|&AuYK%Eg/?/ c#hϢi~AC;Z՝[|5^q.!%޸uG7ӭάivwr>O`~5mFRNmm&SUmgW{ީ ) `߲]d%S"l'^,GaM7ep/>~|O=jȜF :=XL2@?|Nrqnv/1»_-sy4E!F:]ҊAW%֯funn= !X_s5s .$Y/e֔#$OU׵f+[de褲k8P:#w:ԣ>=NG2G8|ι) @.*H1)cۖhU\vv-N2|TjׯF||A&=Tŏ܎ eȊ^ePX[`IxL"=!2"-2+76ʞ 1HW;XdŬJ EdH%KM2X׳IӳDYG[ŝ zoی0Z4ׁ3MIQyl3y!|!~dO77:gU$XR"DK%Xj:ʈ~1ĶxE[fS5J13nM5)&PL"<ߔ.0'&6V,C7bbW@u+HyP'8>ܨZ,ClvP$!~^=k-7X8 }D$dUz"r nl;( wDycq]5 Rx"Kgʢ\]Ƭ)|*ȞYpDbjl5h!\#2j9GcaHc˜qF W8)KIW*S67*16+{wwȉe;==Ͼ(?C3WV#oã=9=c?+cG p7RE{,j?OUI)< c ,`}Ã^yW8$|R`0>4G | {€gϬ%{/|e>Q>>V' 9/#FF)iQc Lb4rGE@5֘7ry=܃R&cb>P̓5$9pXgM6nM )$4HU^" n""߿g3 s9sI$IfEepU u`?t#""""""{`x<ɽ7'؃ CzD$dz~`r(,_#/߮\'CsO:ϓǷ~1evqX?h;~󩒳:!G|x㽷 n̈eAt#繅In9FvʾR}>:hߌn$5;9TEK^O\|eU~+G=/nuг⼟FbBMI;'rY~޲Ѫcʲ:8v7/c|.fL4{q<*|7Y +֣?{/'L0A s]7 ےA)ut -a{ )εm|vzm1SI_t:LqD&ʢŴKe+6,>'N#Ϛs yaE6`08 m>%].#{rkt~֤p(>/6>gZ?uzY *>77[RHgH@m^q[~ 0D@ A#L"}HR>2Cm\1 JTn + K3j8Ԋ:fI\:;6Mo%( 7xZ 02i%_\5x| va$Iubj-]aeLfw F)7nرGyҋ^讬o傁}TWʮ +3CkrRnգCb59..i @Ab!#9f L00 2"!pK@Vzˆ7Mg(| #jjAD k\8ǿog~m; _;{Цg[%!Cg 8߀(Ɋiَ}Ӄ"f%c'=uq '8ׅm;x3U#sYTV*]Unj$Pu6~8 Mt12g8Ll f3̼sCءFGלUN9y~B˝+ֈؚ%I 9ҙVYVDԭ-J5h&J-hզ]]uC;ԙ|y<(?K%KNo& 1 J r ZlS쎸Ք+iKY|ͫI6;|!@)1SeFQ5=6Lˮα씜 /؛yg7t3٧)!$H9p2ϱC<mx6jT(MhhAۍCGfxZhC(W`3ydTe/'_݃.XlOlm؞[N'(qQ7UИUЂB:M\Qwvu;tWք__eś-5 q^1\-w7XΎ*UBVL(MUrI8_$2J3kwY @@ A#L"ab$!' C3cv J(, 0Sa%aQֈZꘗb,Y t<@F ="H|,M$m:n!ك]lɞ^2W0ԘbfN33 pĥuX#b`jޭ!зk+‚"ZiNqRRzyJkXvp Hh&ARFN7jNbhHzά ORRY _+䏊/}c6« %,+*jk:0@FP 'HfXqR"6ۑgh u)FLLP 'H8z0B^aN N *M5_0kI$I|@QcѢPb cMC B0b8AemOEE'u#^%cE (m )@İ/%I\TV$+]ә4 2 ^%YQ50-ۡxE3,G/J2HQ v\DPƅT2v9jlF|!b8AR4rEjaZx ?mPjBm[~sy+E|8+ &hy[^C#g/ o.OVGЀ2F1xH\w-Shքڑ8 <:6xOߎ#̧}NHd@A$IR Cz=DU H,Q1NQ+zg>p D$/Ա}." g %{e&. {a42;  g3'0pIpb`i6%XDL99$Dnx/&$!a> Q?FgI0$rsyJ]b4BX1w04ؠ>0)ZŠ7X4$ :B(?@7\Z1L`:foF+X2"y0ĘU>Yv$j5@rA"k{6®~}f@b +zirv\:ݧڧGY܃fDJzW|JU^uôgXxeDPڀg/5ZM BJ'HfXqrɕ$3UjV 2iQ4yBF ٥\eD oG(ﵟ@#V&N\S 68AiQx $I$I H08Qϐ)40-q=04ZLGb#($E3, bdbw8]n,xhu`4AFP 'Ȳ؊Ф9 Q_:VEX@ bXĒHwQ&W(U.8v1a~1,xAdEtôlͰA("E=0 eNJ {0w;KځǓSx@ ejaZOGքӍa9 $+e;h$.PșH0b8AR4r($E3,QU Ӳ)Ȑ(Yo?|4ÀvF(M:VRaW|B!\&I_EflzC7^A8;j$k5Nrsxv1F᭐FH! T^p vfܭv 0-Ll>;_ q!ܞ9+s˷E"rRվ&I{|p`$*8 )S:hVs}`!gĎ,D\"Ӡ,uVƒ"UR } K4޺dPsQi{9> h]^ԥSq@{f&ɓ>2S/>啵QH%Z|{-bbejYN>l}'d8hMin+N+w˷ B[N0+ 3%փ.K.]ducU "*VyNE]dHEEe, X D$dh1|\&q!5jBj޼+V7FI hX%٦N+k'/i答y%ni77f9/kpPc8AR4^yrJgmB,esj;<} :r9]S1 [""cؑMc?*ຮ\I$I*I$I$I$I$I$I$I/kxLZcҸ񡤤mh2NV[(A:,Q!1 t `=wٰ]֖J~xSjd $kLOT^,y\%V/KhZ(6L^;KYI븚Xmq !P+!5$E3액Uݟ%D͑WfN(\$*qA1$E3, -7iSdhi葉]e^w-CG5J͗3H\-ϓ2Y\Ϥ̊=rʲA|e1U_z) 2WltX" dWD ٥?كBP ߨj$Ҋo?d􎰼i{3Ic0|k*s?dA/1׈m $ۈllhӪt$F_rr#o2%m[$5.Ћ6e鲙ʳ,%1Z5 lS/HOsb'9 KTE獆  $.!I3id茰ǑWx}1ғJ$+ ޡ8Aç*xxOFP 'HfX(ɊF7kCs &L(B*îf~҅@@&H"!L(B){ǀ\n;%d Q~+ú $P NͰ[gsֶJ,CqQbIX,rPr*Chuz`4NͰ/fUmtyx/>LΎ|4c`V7lF%1xtǍiӨl:fr^ν "%c̾X Μx鬗$IL20}9(O2]6|O}$ݎC> xCך_9r!EBAaN'vFsnߴԭW)zf޼ URnX!wfn#Cɪ)QqdaEM0!*qPN-|*.YrνoL5 ܲyK(nR楜3ؤ9-|Tʴ? PEP:i۳Q'~Ğe wdgQTcnpʿ;!muP$'*b˔`[blNӒ$aekq p4]r(`i1 ie_=vS;zM͈mTUzbs'9%?KrR!k";Z%:g\7 =/<yTį|)rUmX"˔Ӝ)r۸EW9ռ췼Yyi].x%ڥ3(bVBj /쇅[G֏v_N'ċDۓ}4jsT]tes,`x L --6WJ9vGusYHs:ZBB!{,Pit#n gH?yzON"&!)VܱA ^ޘO=ٜ/BUhb1~xyw\6o#{C0p|Ύ1* &)Mz97.'y>2i&TUUWNrww).->ӱS&IOܴfl.w%8VA{"V-6o5_#""EjBӺf&׹q-|NF|G\~r1߯B?wosN e/|_vS5Tss/ħE:7,o[?_˽ Җ?ZQ*z'I3*f+ڎ1O\sI-' @߻'#Rdӂc9j5VD۞vSvXP,d3}]a˨7[kyd .'Ҿ'd?u:zlLDe7"" y5ψ! ƔhF7$jY USM@xh5d+eeI3kyxW|UONoԸˈ! r7O8,F +{Oi=E8JnݤȼY@ZDIU Vr(M|NS]R͉yj()! #RXhZ+m ڸH֬ "G39"OV(?gMIII\3xnIBBƗ/fjQZ"o_+|K]?\ A:fMBlj.;N٥4۫:N_tBb}g:>NJIqNדʦP e@q6K%(4dlYgjLfRL9#|xC3y4)7E/^Y:?B)fȁ>>8֚?oFic֮LЍME.,2=jE,2#?J.\Utsկv; qP9`򿾂]O\>$%'5>MPvk6n?w=i|xDGxH6q-78x̜?aMJ% qj>gϲg{x%58}bOCunr2JĻFX>>CrMY施s+\ Wpg~]:~a9 BYX`/a/'l GF&|GR0K4t;V*+g *8G67{!C9Л',֎ {*6V r@),^Gŋ-X#ң0;\E͐Idž5L6)h[s*Amwc GFl/Ĝf)Y\c]}Yw,ʢ\xhK=i}lfro>皱Heݒ2o;%^&q*w{1@c:9c c"+ ȹ" 8Qjmiiߛ*@kA "#99/MΣǮ/nxZ{xvAPi>rL;uW:n.p,YNjX>i_Bϡ'ꈭo8=``ACMpzr((20Bovsc*(M!6Fp"j-rwta 'QeYs.N57&>σ~3SjZq\Qb2l]ڝv @|G[V}u갹G&khR@h,{., ._: K9Z--`5ŀ͎M{L6{F Pc5.̑磊ryE/",n[Cְ5p[\# ~XL|FWAa5aN_Ek4 DGIY:NVzAϳC`Uzz5a{v>eH;aiTn1);rq$4LY( ^t\R|oC]+5y"36jL+}Cj3RKC,(L}4y/G*vr PW`@ӱb3.傴ENdj5bDk5J(@lulYFHV0md*jg. sE?qqc^Y,ѥSH-: +ԪGaw 3=yspRC(5V>k]Y}K|jÕYeD>;הvxw!~ۥ%BJYZo,Q*8hdH*Vb4s*$ 6׽ q3:rtfZ:ni V1/IJl w$NVtz U@5ćnsS:d2 бnR[3My*o\8eGeȊ^f%OO0O43>\d  Yf|E$^G!Ib!oDZ=đ&qtw$b4u "UdLZhVMBbpF'9&Oz5/WT\._.(JO4\b8st^zwm(4b5/BA9ȻX\$Swi{3۾{MLЌ0ʷiCs"tV4] f) 8s YȥX*e]SnT ƌ<C'V2Z9VP+#h?mBi:cpe a hb >Ҡ,V f<3"j>YMK M˓K.%?2yxٲ[u&p? B_$Q  И|%9ETSmS{e$yJ>jКG׷z. va0H;vfmt]-GoX~v{>p=w+b38eZʌɂG^g$YZ"Ve]6$s7] O[|p!<튔Π2>/PyG_<74`y('hժU6mڴi6[izv?g7ׄT"}f¦8W %8%!mÿd*RxmatQ1۶lMa-1 s|pm1$lDW'wa"Z-}i&:ykNn'#38A z#Al[g%I]byGpY 4O߰J <|fb&FͰ/@uvMgFP 'HfX(ɊF,^X݆"JI8I嶲(/Ӹ)&7 2fZwNi$Iĕ0 bA4[~yRk:0NͰ/lSn|Wu `phxAU^+pRƓN"JL3" +E]iuzuM7L DPƅT2r{W p\%wX{c`vz٧]nqrw?o4KW|nVϚ,ZeP c$tVTMp6L3y>~:JE!hPǘ@Q&'@0.*D'#$ԯ`v Vب}Haiѡf' }s{fX,bGj!_?Z}~~XSMۢ ͘O(|R?b8A 9^B*.!)%-u@UqqANIUrpPĒNo0,V6vqp8lAP )a9^dEmN5IpBѲPQ50-;Hp J,(ndb;G"L(B*m;9#ȊWO|"I ĜV^(FTd< լmj$ 0׬D$?s03si_ dffffjq(HH{P( Bh'$ޙ: +ЄHP`X8xćRqcPp0ATGC YanY|1@_{~~9tEUkkPzC9JW m;B-Wb!/Y'j~&w~P`^x[<$]B/O8.+Y9^垙0š2KiA$ɳH`c׬Ew[±kf ,-Gق>kͰ/J5]^yr{KBv&EBvwJV\e8$%Z9RzKH٧瞴'b/˿'S|+UrsM:mU˖ݧ0=1O3-< B"qb I< S SL!vQiAOΥ}bRo-+ x,G@xewNKq/n4lMQDiab;qe?jU"7)ڷ'&$OsuXyda5rHI[R \MS`f C)HA3*`RV{wśi „KjlJӆ_3| ~Em8dɼ}rWWt_*/`StvuOc4\̅LI*HY'.Oeh%Lv{V 5=zV/tnKn$q=}H`HY;@OgzN# W0p4e HfXD%YQGOy.W1$ҏ=,W%I^ ?ݷ{auZ 0Ղ\iD"H6H@VflE,i|`ph/n&q!<:.-xIg( L>>El)BCWPjVƗC, b8ARQU Ӳzx&T"e;tG6zt/tİ/%R\TU2o{ >}/Al uի!Hŋ1ș=Trτ; Abnmg;]݊uXO?ilnɌƛ|獖z& j-6[:3eC&adɿ5leW ch87m/o #L' wÇwňD?ĒV!7C,. a H9p2Xʎgdɵ< ?[\Mn6%rȨXēO|^y&3Y^ok CyƓ9FBޑLp`zԪ1Y]rp>!2B%Aˬƒ=Z RL}k~- 5/c73+/6'q(JjU_8d (FͰ/J6{mCM7Xp؎=!{ģ!PDcfV3yB1*JF#I (6~aXxw.("Qx 8|n:HB1<AR1,wk+֛>X8 L !(g^B֫ݫ)jnr1S:te !vbEr]j^˧od|O\g QT}o\~^wBxR2(=hyK"G4O ދ\Ӆ K^C)}ep=aȓ#RdԌLŽWWW 'JthQQ?>a,]~𹟪ݼzpz/~_8kU8s{jgx^{w6իWիWo{+7 æ;rMaHO"ͣyo9 x>ɐݴiC.:Okehx"#.B+V}&ܷSt=-׸= m!lZYV5%]< n&\ximC֣Ƥ x! dT+;\.wD&Pz%GWQ8KqxWYFPEGBU= 4-{Z<˳#k>ٴ"sbM.)hĄba˸8?xCNv\vT1[O͘HE V|?E{RW4ut/cծ_˶t?^*JL< eR s\xFsp 7}N yA|j1#$3*Nfŀf,{\.%'\LeyVTp5SO&pPD ]TrMo1+ WbѯgQ kK Ht2^yVn3uW-+{3UŁsx^ُ.l'H'{k,Cj7P:ÞF8N۲'~n0hȰz'Ƽg_LWLǚy cq>"D-F$&y ǬF&:[{8 _NKW+&Ȣ&qr:Ղ$+]ә4 2~a9 $+e;hfQDt Qp>4 ;i'ȦR!qIVTM7Lv\Yhx JjaZvMO?o)ФaTBD5h}GE}/d֤^FXDŽ.={>/SW h1  6Z=99H $+rیxo<}ZrTIY(aq;@:=HQNd&EqF _k!<9 %i"M2"<3@fZV1АMjx3a*1@cc6w=Ley9d"*>fnQ|-?Kr>7GQ._>ٷQT@oA.e𷠑4Jcړ~^y>_ZPQY=JDhc6ޡ=4P:,j$ 3QdFl4 40֣P gVĤ|  Jj7bh@$e)@O! L(Bhk:~;3A$yQ2: Hx,!N* 'HfpF=;t _׌Y.L~Ne k$0@(ɊU9,9b2[#HfXD%YQ횮*ªVIWtFôAİ/%R\Tbߝ9;A^4`x ,E("U@ e0:0@FP 'HfXD*6p<<^U+Bd!A1 =aN2rj&^R_=K\;.#\xS7 ^JLNlTú8x.'smbTBVr J*M.5"9.S]sa=U{Kuia 9E>nPm)}7rws 6UUĘ>)ifXHJM#6a}ZD&qQ3aza9 $+e;hТ$5Rô0ף&q!t- @Ak pItl?]^#2 @(P%YQ50-qE n@Ͱ DIVTM7LVq\`sSA1:$Pf*$2x4Q'y 5-*JƘTnS"^;`>ŧNc:w/qH=UӍs nsɡ.;8ETU:C貎ډ'vIlq~x꯼BzNB¯BE|l,E_%Sᓢ+vQIdUH*sDXi̵q8A.bD0ɏoڹ zUxY ؃qhi aC&UܭVKr:/ Q8ey}qҶm۞іqR6LqtąP2Ϝzz۱ZL(43erwUxsU%}==}[pIo9d_O6ûHv&׃g(YHUrEB!,gfvGuBf_Vdr<5333s0sE\('C^~3ܡ1&q/ЁN(f2p2ۺ#^uCL\[J|W ZpO,׻϶c1ƘcZWA[HlvS77FpZ$0xPq(ᒢD(Ɋi+H/4-7) !}xg&ؕ$P4A`)3>Ȯ3L,'Rܙ+O7_]+R͊]l /'.3 0eȩfOw Mk2Л8̵sR+fԟ8܈8Df8rI[fuEPELZHiab;GO"L(B*mηIX\LQ%8XIuEc@2V`>PZ<(>BLZRHܲ>m'ݔetbVd?9]ÿ6lP嶰3funJ՟w {>3=7͵?qS_+}f4wլ-BdUlG#zI(C%f$˿BYN{e :>Z.p(L]O*ޞ9AlYY+Y G=(3(52&^ηn1 .e;w{)j6o_?>Q}Z}+k=$,ҭk+BC_2;QU #b|hy3cW3T;>I0R0+"I$eXQ1qֹғ`jq dj ;澴[otQ}_P̚`6k&ͥ)WGj4`j>GHE;Z$\v*_dՖ=uq|Arj"<\UlW4vBEm11e܈jw )⑰{iCëPHqtQ#~XbpE[a#,ך[0-ceseEI\kSآxАV n93/h&@;R4igZ&EUK*uKQrnYC x _M4_`%&aVÛ9l|כPbgH@PHXDT&Cg9r8Z+I9]fFyI[KR锤+ln=ڕ˔v.C%&J~ 3>!b넸g?l>b&l"68^r{*ty\_[u)I!%ITIF6 $Iq!Qj#ӁQ~?jxrg׹bBO,ċ^0#gjJY߹< $&9AB_^s#՚n```aLȊתĠ'ڻdVWW y o VD<ث\U=ѤFC`sdߍFE-"Ūb &qsI=Jy:\?hW萘ҮxZPP roh4j V*![M!N#H'lB Q%!nC<$4 3%VSZpȣ VmKg.pE(VŒRPFQ,Qb=J ԭpXC <1X~t-m䞜 9 #ɓ2t#+'"pXX!ބ;P<#: tg0 pV"p'2JN!3r-4i4 oophH& 39O 1U3Mߢ7˨:Fuj$dv^:2"ISѡkuv:}sNhֆfpy PtLh^&IJLoijj1ޕ_R%\T/Y!чcս:zOg؆:gO6 .X^@k=J'iɊm `;%U?DLq{f_=+ڼ5R˿xF'i]!,}Ɩ*ɉb +0>qS5 Cl{p\60_ꍈ咂hx JjaZvF~zϗ =MAQ%.7ߗ3O&` ='vv&M0rM+XQEǝ4B]"stΜVS1!.Y[ *G@/ j uhttËwݙp&do?ֆ}1#ԯ^@}$+<$\,遵i?V^[~~uk{ *8 | jj @~Ǟζ&ǜ ,w sC4@Oh!jmlb:6j ei@mK=+S?^?Oz." I:1Od-@kI1$IJȹtf ɵ:mI8 '<$z%˞ԥÂㇰ+QbڎxHCy"ΐCY !$I%$)T}ri\wM^w[M0nZu5i֢uwA/o_.G[XSkStOf>LW^t[{*&?حhM_'Ж{@L6aNI8CX$# [TYf nۤF +pTl$o ;u4g%A@]\(Z@:PW AP>Ӊ(:oq G*(nfRMujkuս|Qm0r~X,eY]d{.ƘmY!\FXK>#KP<$m\#'%IAI$I$+$IM']2iT$I$I HnZ"rAffr@dEtJ?=6{7hPt$I#xM 1D%|+>0 |)}Bo mI 'ShB'\D.]z+#Ufq"u H 7ą)4/Rl{a9 `!iGywPsx FLPwv[ oX԰HDٜ-EEײi'Б| ɦPlN9;!F 3tuv 2jnHlO.8bL0uea[B B-d\]o{\;h+&O<Q-؊d &u<'&83s~B2fomdIaӿxe Vd~WRutCIm'ǹK^F]ʗjV5iu;ւz|O{o :b\) i8:_evN+odzA6b1UnY__mh;]Mynͬ g (t"Qmq8pAwvjjnphflQjFQ50-ۡ8Ex Rs 2fߌ18Ea$?7wWy]Ӳ`  0nzsؑ{Z;dxr>/:qw< ?$0DIBΤWfTYkaV14b,5vEy1~bʹ2٤ks1>B3i̟Ӡޢyݨx?ג`}+fAe5+fm̕um3}hV e}Z4(wգ+tJ \oh%NͰ/ %ajϥ!vN/ RiY7L DPƅT2r{&DP&QV5ݴlWUBd0= `-l O,VyKeYK<+Ua]LȧLMC:2fΔ*jik4CotHfªt $+]ӥQ#($E3,ЫDIVTM7ҳZDE 0~nLwk\ߺ^4İ%HV~۔i pux-αl'!/2+ą$I]9HNIs{_8x?3Tƀ@0-yW鈳&w(Z׫# )a9^OQl8^UB?s3 ]u= &q!}:q9]wѥ8PP Ra3_}3{4/EBAakric`b >vfhc`NA0Us"lIQCө/!#-ZnNOO>=KrC)l}IlXxddEHiU_ m!qr_/3eiWڳV/1¾3ֽK=;t~m7՛Ͻg2xt?a3I)7y{ xO | ߗ"7ifl=+Yx "J^Ft^l${L,p ˕yP9Vh4xNPT31[W^JT}9 E/@di4$]]EmwHߗ%#Ym=Q\; x߂KK~6sp`()!-5*eHHVi,L\,.+.WʙX*_r%1S 'Pm4d Iq!o7ݹD!ɧ}_xghݲ?:B}FhAĵEzkO==ml#F.i,Uß9Ȫ9z-< 2(D@n *-tJ|3fZ5vd*GD ^KD"gQ78^--W -u dL6|eGsxw= w-&ap::srvj gca:*T%hrE/j~/9;x >|x_l&o=gdKhH\Iy>*h+'ļ.ͥ0r-ÍكL-,X:WWכ%8TV ti|eyݩt8h-wOM^8e9dh`0R(p]8ΰ][џ RNSO[s LJZP,uRf6n&Myp ys~M#j /||s͚/:X9S|p )ӧvza*qxf،Tj2OZ,E'茍dw,#m_7cMn/JXhZH#JS&5(7g$`BN #a&Vi1eDl1&fBIZ T:?gcߎK_agej;E] 5vC͆-nR:g+~bgPL· nMe0_BE(ŔJnGWaPuUT[Z$@tя8CΌBB5Ǽ$6z ^:ŲD9IM@2cd$3LGrJ*տ)S&˱OWCǰ aPaS(S$4:f68N.u`/28Ѵh@T+d4zb3@`0L`TF3&+Q'&Mj2R( 2+bR걤$$Eik@M0hгO='^z!y z.4i郣"餃>3[nM*Apdfs7([H`+]D"-sbp'+ )⏓G6hJȝ*E'gɕ_]ID%@Fk|*%V-)_>Y=k6QfBU:_6pܑ# `[2G 26݋dZ~T.Pxu2nKOovsCx}vM*5-dZzF5Sx&ՑQ6u+44d}3]=ubIs) ^e60v!>gDURB4K/$.>GCR$G i] RmA2M7!x}ߗbs=<)2^>;s;h}G2g-K +͌)H*|f+6EDѰ B62d1cQ(G>UUȫQҰ^15?_um^]렮fWcxDK?s4eƬMnpMüixђ;ZF˛WU1hSB8 ;֯]=vװQ= />]9rh𱍸r rRۧk!Z,SԂ7!&AP߇_ȧ^J yaHGaN}9?&ǹŰɘw3{^0a؇<~y)=<g/sfe@Q/8G SL,k}k@1ge xb JEC,zK9sz 6 E^Gda?7o4:2#( 4h<2Gt r$:M[. WEf8$|aOWW+<Д&61,"}ZudӮ1NUZxҬ ,KҎi+rm5M+T"j*w[sxU,޴j-|Ka.`xफ़v!4"~z.F~_ɢesoðVA8D15T"N Hv bM -|7Ϩf8VA(!ckB(G nRޟ~ZrJhxYd͓33m/}!Pn~"y"XjvwF[MG2Z fEq{Aa╋1"$CYg5Xwк̊uuLWP9y?KBJ``d8 `"C6NuWf]i#Sy8r֡UVKuJRXy8H u@­)RGoh1HFͩȌ&2%pg;Nt@0$7H<]thZlK+f<:5SiM;dЌdL$,fdg#- U(CY?r~>PM;ĘP$r`ȴJ*\*gTUb/[<ؤyyX]7#hn,6eYVf嵹~kx-[?nPu '.Z]G['IBmOcz`DBxMpCx-G/&g 3 qff$/42_YTNU7}[f2 !rԙcku"ߏOns֎ҮIOդzEoCQIZgw*5~ZX|VQժs| P(X'm=+ㇲ"v]kܡ(uߊ\zVʋV(<$B%k-5J =8H:- GNG_F*Q0]kh:aKzx i#tl\\hZ1!odDFSDJyx%iʯ$-RDlQ9 SWr}?&<첫dYկ!1$TZrIi;_!1 :-.;F*F?]Uv鮺Wxoj}ACnY︾x\=G]XӍv.ؔʟHyz/9{U ;(!NЪ\7-n2[o}V%6xNkP~ۦeS˕q=asO;vx>f>ztq ^XW[jܳlm O¶WM.w(vMGp8 [= 7a-D3rhdj5YT 3DrAi7D'& ?wP'#pf;ۛ d>d(hPҁK|*OC_~ [u h=ggk@xq86;-52qy?1G׀H1ŀHdo[tc%!c|&2W6ȿ?h'J* =fA,iyO5۬vO:Dgڭp۳_lu`w:—mԺe<֕ hD=wE<2ʔo,4/ 998Dl4/-9B2Ixj$5%AR5%MRC6,an2RfJJq(sR|o5t)=ADKT&-OCOyL٘ڦtX-W5?6@ENj *"x bPsQwlrs=w@GlKrW"d/y P10P1bIsNRD[wξsTt$| /r5,1]Vgs :sX)eN+=WJA>(5_4g?Wj8#awK:/3^ْJ:$w}5Ê.H<(;z1 MYn# ;'6ٵ2a}Ki#lV ;/je5JƁ&Y:1? qN:(xQBɾӸ` Q2tsl7>]#|l_r+I"æ!:\S!i(YT ; R#ܜIGKQDD rȩBrМ9821)!"8NubTXI%8 JHJTKb~!VGcd dT3Ί Q:tU x U!?swFVe+Wy8 x2=#v2Etôl ,}'u>Ĵ.L|5 44)wfv[rbo  [ o|mAtIrέu] f(6$Dex0;lJnEWWƦc]n{nq*5=7h[dHp0I3Nv(д-zG]hj_{3ûOɀ3 ̆I_īO6 0MiNK39? dxg&tƊQRR1bsDbT&rUdN4#C.89^%Y`pϿSbxfՎekrMXd \ i7֨0&rasl=P V¢EOÜ hDh|v.y ǪpjsWߚm'4nse,ɒl֋@ڽxX6ʸ Pi2ֱ>sFI1E1Wtò]yd=@9ݽ#k:׏HVϞ FzXB3!.ĔKm}vz"gk0'|Oۮyd=@9ݽ;RP10qr3`9A*DM" 8QѡD,SXc}csK,i-V(AP$#35Oej#} P)LmNlͅ1O Ga$*Qh&E2'W =I,UuJbh]fR-v!`85>76Ēb2I646[#T&_6RLJ rW)iC'iebr_BLs[:"YWOӧ_P(EZI **I:AdEt::QY^UU%ĔKm=U IY9y$+%loTX=G+T:N"8FAFc,D2 :HJQcΖ3O{GgRjY6JGgDMV4Iu )iY9IEYiܗS.܉yrq9n_?0Liَ)-aZv\ 3WVDIVTM7LKHVi#:<>U4,&q! )mc/Ģlnd(&X۰ixtbznaymŪgf,.MWև @Ќ̱qCCbX6JȌgQ<@Tʾ.FZh'$rVo b\vLRZk*NHґ.'^54tPUTElKKb#Cc7Ӽ~ט׽g̵}bTJ/rmBp%5 08,<*:S\BJЬ k&Yfǁ37{xO|X+5Zyv}O1zyUJy 9 ?YZ]jBLwSirwNӟl@>#ÚgkIm{`%qzX\|y$<|WO|`~: #"y. >,:Sq%lЌ$`=,:~me<򆈽y+3ʜ {$F(@)0mo3KdSRb~5pf%|KNdd@pHO() K" 0nxy*&oJ`_+0Tt|d#{"N@E)Tj *i{6+[bDB΅ yp"2,B4 %mvhø6=Y 5Gȼ@J-ɦU99CjmȽj8AjЂA0?# Hx!ɗL\KHv^^'y&U>Vʹ=ozgQx^~%*H0パa5 ̏= l9͎\(Υ .Smꖓ[\+6y V8UL=:Sj^;cF]f,|:g `Jdj-¬-:]UhGd$Η24/yf";#|Ӣ6jJ/lGuUU].3i+婀5+6ǘݛygN準ͶG?o]F5uTDKgNHC\: bo6q0@%Ngajʸ?6d^d|3wT|v/kM[gb3BN m %hV51=[F36kh G\\P#1X"9 rJ=,K ʴfj\zFfJQ4HFf<+IT@%A5p7$$rVo b\vLRZk0ۜu4Zt`KD:W(*"ՉLX%\Rˑ (N,/*ĪNMbʥ!(4N<aBǜTZWO R4rHs"L(!@QPR0 &c 9yt! RV_2-Uox(4@"X̓ 9rspKjlX+5ZYtF]4''ą$$dd Ta9LDP=65*?ƓlXqZ7ݼ_qum88k.Ͱ$h8N%T/_y.8I(:5mK)z>84EB5t0ՁMs Kӳ kAf` 8኎ Eq2 B`Yd)tL*ji6.2hqImzW\ћec(:i;y] S|cT)W(El\kt1 o8,0NxmaZz>><|SJ#fEvQo4[0-ePh 3gEp% N[σh2_m@(Uj'4]Dd9!0dsQd*Jgq.8I\Ne|?oyY81{=ϘkǦ$S3srq^q^~ҢJJeCQƪn.Ju.ĔKm]}. : (>c8F30H(PĀ3)5#JU6}%K˴O.(,*)oj-(,.+TTZQ]Ywi^z?ڏ~_aڊU#'nY\-G _Ae5ekW5j"&)UQEJ!Q54j*)I:?궇7SC#s+[{'WCc3s+kOvN;j)M>1oo4LMΛ9y}m]=}"L(B*@XH,jNu<2>15=;7?yY81u?3羿Ҿmg̻{޷X,zM0.iλafwPMB," Ss2YŽ~N[o0ɸAdY1ujZ()ect(T~}wmgܮ}5O&S{شYЩt*7dg(f;b ԕ yGrh;IWG.,7L̴e,ֵƤEؓzM(=Z2%Ly`{\ᚨr0(A [$krYɔr2Eޯ[6y`Bu_!0\3ɔ%[8/cM4e&k7ʝM0 =.ʈ7T jj%[+ *4I: *+T"2OgPZ$Inp@#yNj~%~cW苮1%5%ܐHjcflZ'hpm405M <~h /-;W:XP(zن[ }qFl?0YTR$^I{Ƶl% T,&ZJy @rqW(22zcwδ&Sae{PB@ 舯J+̈Eee;> -;Ob怅p @9Ĉvo2-Qyn'LH =gӵJAbboi1Y926h4~ϳ27rzDl>b#ز p{Q?HP}4i>dZ4BlQƆ1C wE+".ED(>'GԈLX |}^g7lKtD1;{(D4%ִF)` 4k* xJbS "5$zpfKFdhR3I@q'8iƈlg{ǐ]I؂5Z.*$CHW~zǢr1 /8AO%܇@0,Xy*#o6[W*JtYN0\Fe~B: !N`zlaOKR~J'Iő)~)s7Ң:[E}|)\a@`Z8Kˑf u% OSm) UYpGbBJ&ZD10:cy݈]f$;x_[ج;Ryr9sqZNgxY;W'C7H@,⑦2  .STx:-Ь(M <Tx <].ayՏ͇鍇d^0;1D,iA;KMwp.s$㧀•HR]D ieFFs]Qoo_/1" ~)Pd] 0w " bϫvcnSFгY[מ-VC[ѦĮF^yc-ymUELIk+\ b&Yi>'x$疓1) 2/trW{CõH#OY3j\yfn]6nz:ǟM \{6R{?(ݟ7c6μ)&;4?I?t OWHF׈/p=)v8i^>3 Hq=<~>88.S녖R<n6fe~w |OJ=x*yt(=#JbfENg ]Y aT(i ƹzi%%i[==)!yC71P0*Pqh,Yu<1f 0B%JܺTl9fvنc7HBŃa<-L`)gDc.H氌y?.!JL%+W[+G=ʠaxF%y)cο{Vz(rwE A4x+0oJxKfoFS,Bx/`rXeM*H[YMr>"4J7 YxW6YA槯8%lpD@Պ4ƠM Ug %⼆ݔN&a.9 T"%;̧'(Zɘ_yzHFL"HXѴU_sB˜"/g 5beodY9)ءD_6u)2P1azs-6U&]խ hjˆعkas<>ʆoa=!5އrzV`ۍ2ӂݦ[i?p~ 3h&!!ɻfd%L̝řK%_DÅ޼ƶR/̕TwspQ6Дo n{D,nz}oMnS\,Zp-Tb*IA_Z}w꿨^kcGui_W69|MT[-!qg|<4$0>_ u~]A}_x8v6˅]'"ޗs/ޑڊ<|ǁ_ |)k߁h!XEZ&M !+*7_3bAWljI1 :jzN>᙮KJHM,W/wuv (vv ;}zT2TnSw~s0%]7{4s. E`rZ`l"L(B*buptrvqus+d-m]=}C# K@PƅT^>?dǟ|xv={ߕiSUăy(%rSV_PY?8šTv9Obb 2=֤V:y(eӫ|tvr"Uu҇ (tLB18P[~M+*݋1$yf,Ոz Hh {deirx?8LDpyyYDU ]T$#)wnіkgS$l5nЇFC;(ޭ ͸8Zb Zf4`B )Iy*gݢ{u|lTPbkӜhJF+-C#)1adFO~Ԑ&V"d2 cK}*mKbc(mvHg|[ Vkm hdJVΈ*yY*Ȩ4,SkP[ S0lX''*JR5r" @K~>aM@>;m]hy='U`%Փ.),NnH)z.>.ذ_6K<ݡ3CmS۠fqC]j]T*;d\T;3 Qˡc+JU1/*՛5-EQ(8aFw8LLbHDA|lht(rmKU55D^'.ۙ];1*fvlNȆfw }\wErPȎ+K2raB'{Dqr&v/hޚ*w00dfG}5,9>DmY4+De |y{t;|'1;N?I08[wX@d ˕܉Lmp8=@Z1_'-_^kDžxΝ=6D>:ˍ\7܉w(,tzs_\YHn6l?>׻ǦG}sȆP;"6kDA_s 2ec0חrx=kcLBwL&op'E|J 2^HŚ- .07A8aUW{i k:Iy8hbqq&+N,/SMwbҞa USWC)TmƖ3tkǠOWKY#Gv%+O\S!Zm1  6SPCquF_&5e`CAXC;Eȃڵ <Hkq@w$:"_.\1 ƛDr7kȃ3LV|X@WZwHcYj/zˋޓԕ}EӠt[ @n=NPPp)9%Uաۀf!Uګ"``Q2 ) 4}aS suX|BioԸ˕"X6\R*UkgȄ尊|}ՋaPw^#*F#|@ȬIԢ;נY1KJH8(wW+"BvM3-i?tzt?S4qwL0q?8_Ȑp,qx$i^^W>5$J3D+RVkcҜevE"Exzqwǿ$倠J+&7ɯ6p%JlכߤɄV|utY;=&%v 01sz"!QJucdhDM =mT\Fzo($,۰({~/X\ *F d=gD:;c:.eL譖SȝY\݉&N=ϓsʄ%Pb|&[rxZT~!J)J2,s#P0RZ(6 оˌ~}3K%X?ȕCɵ8fY[Gq:ψ<|[n7_<>wr3Asy,7'y܍q*m+A| .A~ǫՇI277t6P69psC+Xp8ru1 _̸a.|Iy|6,ɿ'Lيܰ&zMDir5 Eq+([bRպijMg L̘pyB-i%]ϗxGs[ j[>+Ocs{?36a? eh 'OLT `bۓ.Ryō6nҽQ(PHi&z՛[I&@7 Wꛓ>=džp˺~BFW>Io-i3ŜeMbUd׍Gt 1ʮ2=v* ɡw8(|y |P[0?v-l˗M|9.S`c25`)<$K*eS'־#k q ta4  YJcYKDF*@QŕTZYM9 3:1хĴ[8 l$Im Hts-hO`ߧk*MNUyh:Ӆ4^ CPʮޡF|{uÒsܣg%r+QE|\qThajY{UsZ7|f;x//N-U!n1B~X޶V&s?<-+F2y؅z ̀pCԆE&guxxNtmZv%nhG2=r/=Wt5] 9=bp Maܣ)_F?nؙz-&i>z>I>!bsڌEF7MovXU1ֻo`Zf Xu (=E *RJB@S贊ILG-LLdqll`e!uAy`Ro;6d:;EMj#溕3έנӔ41-ٲ#+tw*UF&' 6O~+eG Ͱ/CfG,¾h*&Ń5#{{I$/o8B@y3{?1v,S/~UKF'AħWxɁsYJ{2!>ʕ˿TJ˭>z9>HժP˔YH[Jґ8-,pufJ>HCq͉9>'yde[kʵl>} Ǚ-s4G\ihFfkr)-X]C$Vj qn޿Gɱ*xpdד%dVjhU*+_-{;(xRη,<?P}ROc.pk,e@xJL~z՘{ge{Nr3@O~@KAӤ6CaEyJ2Y.:Y +ըM iL c^JSp}]ܽb{Պ{BeIw TO8eW$2ߠd$KV+" pϵliU`ώ  !yS5TKrQv/@j)X)!GxԿb9/;֣me׉I<$X>==x?Wv١Q>e)lxSm?&FP#SwkJ~Ϣ|7sg:fw~2NOV3tɯo]3 ֧/9z4txۻqw4,kٖ/'=V+ee0Vt;/6,.Ca( $_,Ty&uRhy]7Mcn39)hwf}͟sbNΩ9=?O0c3f)"`eFX,dfv/r2T=sOM3|gû|Fog6<[}w㼹ckϭý > ﳕ+/W-}uǠ/,?݆³ <ׯ!haa?UT]jȚ m E9=tO̚8%9gJ]6U=qFMX8\̄<mD $=Fd:)tlNCN=cF3[b3^E~eo`nk*pm7igU4+ӠyMz_$ֵ**e Qf]ae#˷c#nכxSvб͛tۮmEvo-ɭkx)7Fsc|4}Ӈd[pdQg9V{uUdeo5`C 7I}TB&dSM?\l/+w-R˵K[놟6jvk;긓N;iR{/*Pÿ_oŊ(y]Uh ;~XGY9|ɒЄmȉD ʼnܣqfEY狂bQLړvKBox|_zhѓI!ƌ4FpHte;kt >g*lu '7bwGuǯHa(>fi7Ae<|@ŇԨBQ:n*Tl|"-*z^T/MxM͏i]ۦ^;6p:q{ t}Vݝ'Oޞ٫;(hJjZzFf?,,*)*fh{״/BujB-*O]9:Ath:auNb?{sz*ً _Cn-L}/3jٚ|}_n8y W}7? :QQg4,{V햘(6⣄(1JR!5hԤ89yW5]_-TԿ/W}<m y[wi+}+z^?=o2XkbcPƩ\J.nUըU^FMhiuX|J7}#+ƅ4դǧķ͕Оp* kd@94b99&;? va}<N ''!- 2 )(Pt8F3Iӱ4]27&2!k[{o[6gkG.j_nޅڪvvh8.I}qz(1GԱcGEMa/;B^uAvQ'/ƝbiYuHHc0:;C:7g>~a596\5n"Qjnwk~~/P&3,l=-Yco/Mgafeji..KF XDt6h\;lyoZC, RPګs*`ֽY 5U6S}OOΏ(Pۘ9cs!_/ܼ_*/ 9o;}r!!Bѹqܐ~NH+^ʺ&A=[,ujUc=#=٣=S=݃C]T4^OjS4ԢSe t+7.n^>mYH6ڤVzYn['NKq]NGFt` ճv$v{ׯrx1Z_3myzw?^dhg<F k#>,u{Z//uOs@^eۿfsҗz2C=[4!&GК"q!о-4 %%#my[.fF1M'dzz/YL炂u f 3X{)SH \^0[J( "epሒ9+9իX*T a :c 8ܽ^-Ǒ:i.0_Dhot& h+-8zS9O6W.< (Y#mN^aN$>9"u:,A%AKWcYmUSR2!RC r=mVLUzºopL}I޾7 l?ʨf}!8̷jJRWLKD Fv91HW2{u%gpOi…WZ.rBK% }zN1z^AG>]rcbnՕ֋%$2:ZcȚǟdD ZMGt|` @R,Tb&Ij\&R}1<\t0G_"0Jw2'X!MĜ#\i[d،h,nvZ G#ցa /X `d  @^*&)$Qz@>fקg(e;X[oGW~rq\ g]=p!H#gS7~#Yvt?(ZՖ'*%G$=×GI@3M43ϾmjW4*ܠ^xio/N,HY-dZ&;yρiԙZ #Z^HJJ E =k" @|-ܷДxF(*G[ \=(ع0OBs>-yٕs d"WF I ^*a15s)fi1U *//ig1J\P;%LPR0P=n>GP54^0"/\4j(R`nqLogÕ Dmƹ#ؒ >w5B$obb D$gXy+zQa kSJDX#PC O1@ԛZIDx ݁4ƿ0zs!4/Hiiq/ƍcI Ө"VjCıb dNOW=\bƯCF^.i&__GH|}90h*&"#ص4Y V\'OI1BV!J%('Ѐ8.=uRiO'aEF ?1`O Yh, u3# !h ÓGQu>EG'p{9]y=1{bi*P?SO2кDѩ̖f2y{[a "h]kN 0uf,Ta(2FdĪ@y툤liͧ.v8*z+1=#0cZƳ8D4qS"&Dr˙Z@1pA0QO(VVlZ,4 ^S| t_ֿTPh>E9"h/T˞TMed(R3˴ю$$Jp2Ck$8Q"ƈ(N/`SJU .R}NlK0۹NM(}Av)LE$R*I0"m *SPWֿ~ZPJ[\7u1 ô{t%NOq#Z$73wJm/ yߝ(\d8/˫qsҚD#N~gkzq@ũǛjlrn6/, F'.V^^aXuٜ "{5kf|fNyM+&Wz #bc+ ZaKn -Hjy08Ma8r)YZp7P^}S0'(T6%Oc?ȝsfRV:μf:A@_(kiuo0]ՠSd:Rmz&:U~{pEV]oQkQ|_]^LhG¼{7j`_=ddC11s)k9h7'-Oc^ȟrlh\-0} 7Ď,m^̲ASyz6}ډyYC`h6}0l 7waJ_]SFDH(M䀌jb4j5Fj "&D^W7l?Oؙp+=v&sbEL@2lXbU/ \]k,ڑ$J7(JzTC 0VX/ rַeD dVCnRXA7G-ܥ[9"SCO"ʭi*H Յ+{7挊ՙDHX_ȑk{&l)ۄFW/ѪURz8gx0?~=#N54b]nl.&XO*QXmmUhY%4(NčYPVjp-OhP0"7Â-@hAh[[RpVed;bJg"/[Q"=T&oB1R Gp0C`pU4^pajs:uӓ#x$|`{p/o&!%RaR7d| hh,E_|J:lK_;)&Br)k|9FIB]^)s5UZD/S+WmrG$S-vMIJsfSWtӑEE2|f%O0Ϧ^6=z;":XnKRԦE}"~ OXYS2ŁI(@@pEłDxJ/v8~WıaԔBTI^'VܛPEXE-OéP~WDey{]DpsKReB,YYl*DLq7}ߓQ4Om ^i#B5lJmzuS/`϶ ;H*HB}?\Uf X.׭tE-#z+G/"1ɃU /"ޥ`ČO ؗ46bD JpiIsf 豄e'evj&\rv@anCAA[y7n_Gs$D ) ΨSPPwc3˂L@B&SG۫$v Y<"} w߈/)dDdDL:-jYl]aBb4vw>;FOj*m. kn)%Q9hZ0v5n ;;+E8Ց^dVV TЇzM)Lb"cLj5q1]qrAɷȝ'm5tkZ rxӽZX*V.AM'˗Uq'΃d;jBy/5stHXCPeZcvv)گHAuHkSxg䔪 . H~mMzZSyshd|j䚇"9Gv ><þ^8n ٧g$qB{MP,5 , 4녡ƶ~~B!1Q1%>0> σwMDP}پ|3L/θ u>ZkEqf)42JVbigqmڅoFP46Yv6h;Ihی3Ç.rFTȝ~L|*FZmLW{YX=RFKwh%{qP)RB`)ɗSXU}1@On$_O<u{Ay}ݠN6Fw@+Xߖ[i̊ p]iǥ铀6# (kq#i91PR"&;8 ޳w8U.6,|k Vv8N;Ý{l M!L5{lbvA-O w$jң^Z+ѾW b'Xނo"pb ފq `Yz SKoY6%;6Dhf'<.`Ǖn;ρe;_U5s!՟;l v)5dMDO6!贤7N-δ9HKU6)%"l ܳi1ٕXl%L4DM2Jw.n6rvgFlZ @Bс8;6ꀱwzAB#q 3 r#hNjvȃX \qz`ޗǾ %#,ϗ0ʫ0MQ]Uvw==oҊvSbf,tGQܠ^ciI X(uEBz ̨e{܎0 s\G`ѕL2T%|5:Z9)J0P$Xsݎ=/3mTOD=4Qd*$;յ _93oрdD ΒPgW(4+E %֌(iA fd’/?FLB:m_  zW@>'C&a ۉ"q͠'nGԨG"gXKg?ISɟjE~Rk[avL J]NY}^5>f6_Y5JQ# (L2n)f=UUlvq@)n1kX"O_-f.eu4mڳg0|F P0󝋳8&aߴŖ倘QC7ۢ`/ LVMOIS F_Hv97ExN) Srr~6 h# %I;Ⱦ DGSW`|a4ۢ2)j`@ f6'#+{X1pdQuǡ\H'fS=co&l+ѢFx;=v uVq̶,rQ%#c{j[9Ou=fp)x1ѓnm ,=e'XyH+<ꥏ')89zl#7q1U:\r ?"M 2"oR-jnrBhvL;>m'$A#rZ",pTU,(٥)i*g d^~KW,_ {[(@d-VD,$Qut8˻`-#yiv?'YUhݖ o@VJˈQr[c~V"2tê\DQ̥M.2$8ƋEI3\h"GrWW2γiϑkG  e@E0cs* yh:ۿa8HAOnBEKA&E_oU~M޳-Ru@ lP縷fa.ӥfWjA Z2C[k>fA 8u0qE^DkW5*>g򭿎W(B"W#@0w*d6W_^T3BZ }*0\p͎WF41,dҹ ݥϊ+@gHյΚy)+`dz03tg~>yuq2Q/B S23T[_Sf .tEI6XkSRִ{Bb,)I!oۈ;`MۊGz8)Jj*1/ 'IïދpCFmhCa^'!}@c)}pTysCtjX("%nz8OU IW:-nkjVf䮭֧o֨砳j-X Hk<Mh^ug  sviAΗ4 MH^Py_B MGbk&n{zwͻAɼCo?a[ߴ_._}m($ J4LtknY>xũ&Oy`8H2"|=|)P{#NB%Ee\!=F=gmYZ*Se=ܚx{r𧛽kd,tf:+sv:@땒uMJ/Vf6܃5BhHvT2_X7̋ZS~8'8[p`UB̗Z-|lj`u5Υ~UA3G~ a>od>{#i xE75߫i͐p`@2GF诖GhĶ uE6;ZԿ$mӁr[nzKu xGgˮLakWFdhUgC*B\+p:n=71ǔS iJDI廡鐵D!:nF$'6yB#规(VuPqr/*"냃xv  K4 grcrad|R7 \BQwS YM>]~GH("ƕzb7|,H3A UzW:Iv,t! ^DSJ _^zA ,t6/CV]VHmt)KGscGX;/Ns1DH>J¬$3i705Ƨ+7&աcS+V76pÚ4vP!/]'BLu(シ#S-ZŠ}'~)YH"fR{]j*N* SH.ݩipJ#@oHkSfۢ,cΞ+igzjDxQ3vAߧ~B1X3jOѬ]P4߻l8Mry_M޿wΥ1=v:dw I^0nW'B*osm_*`Y6J^盠hvrBFXuqT֩u/bўh?+%cۆjB ANy'S;[i\JBg˕>3e:p2B{F R镵SʢX=ɖwz nj%aTDMqⷍW,}uSf—mxA}hn6=Y?F)ڷyNNр, \ ?iaϐTrlm2 !u;aeTKpnI+*N 4@='qvi tr\UǦ[FBi4ek`{&~: >p:({GoUk)-0* OvaX#*e@! ^pg 'y!mM&pyO@:HN4C`TPr%NIiCk;~b$}'"n+תi&RfgE (YjKޖ1>-u2ɃƸW zB~@CH5vpwq)=!)eyyDHogwSA_v?QLƞ߿/66q%u,5ͥnwӜCFWfYm3Q3pڻ㚃IKüP` v[:P28zT,k zr0bث?K%D*1O )Ѹ7Np,A+ g{Dۋ##fH!ìq$9hK0XGh"mэ ƌENԭ X wZvv-^&ex kmXY}~]Z{)TruI |`k 8@CzL4wCUbh]ZK{JQjK5cVɁƆ UD7[^e"\Μ`Ȩ캯$LؚT>tu|@QT;-NvvIW`=oKfɢ$h}[7Wh-^1BϘLL>\Jjs mnh&\c^x ͦ2 }bK c JžDZ:"]ZA<$Rdeɣ Tk*ˀՔ]-m9Z9UvA@$F|^%˫íVYS_%Bg)MggwFh!ȳg*SEY"|̤?S:sy1dzٷ-vBv-w`imLp<|k4eIdHQѬ8S5HQ)3C"Ms. Ty8K;5w,p[ -w5uS[j9XӎD^5w@q8 I5.3eև 8aVc\(kh l@4mb?p\v(Q0dn=c5ʹ@iB8n#k<=B'A}&PTrݬ"jw)U3_I2|BV s̊QxqF\R QwC:ۂ/ Lx5Km]hʉsyI!ėwxعm{`+*sHb7 *V&is"*Py I#k4s 'Ae⧸+y:(A#q iN{/zT?pOx>>"/| '0喗0[`h?cǏr]=؛EH ~JkTڍs K{EZYqeyd=:a^G kа1ֱ!@E1ƹ~_5?7ݨ{e;r!xQM~՚ O,aMrZ؅_w]q5fr rM rLcnMm[vгK8@TA w>ۯhKkW)mg}GC戙\U$ZXf[;/h\Le4BCq^ {9~EI48+1N$IU;uR^:eYOAE)J%i3@۟ ]_ :SI-1KK_ KT,M!򁛱e5̳۪XKH/,>xȝ# iM( XCBﲷPmu'`(\q ‡9W1#Gl^2X>'Rm~z%OmS*[bVP;\{rN]ٯgg@ uyP]CTE*or/q RO"kL:(?["ϳZ)^>4BK䌬bl!(*zjЇpSz:(N:~#PWUHU,g{Z( WudG*@L\ T&zei?}Xxd8Ҵ9aj 1؇-i|b?&#$ˀ# r%Hʾ`?FOmJn`d Hȶ.#@0`1E0{I,}l~Ţ&tIE3ԥ *!PVũ܌&(tVNzdHRP> SycȥK;;nETHJ$[]]X|#?Uߙd~KO"Z`4Xtyřu]^x w'VGߕ։@~=f7)<.Qt}"#fȠ%+i(l&J%k?'nSQbi(k wV1oPMZ?]0g! ko8-f }nTG0m,@(8 4^# wBsHgds_'e ɜPs=ə*P5af32=%Z  #xBw&2T>(f Bn!-̅ʍܻcf{<TihJO( :[x+QGH&@k9y"jm݉)*gdӔ; Fsii~rCˌ'1 ʢRXlzHOgpSʛ #E%@J6fKt-^>t0G*٪k%T6h :'Nʊϣ )ƉSJ ^I~rm4r<`(֧Cag.r0)&~nا#g'3:>-4qtuLrMLJVy}2΋.sݢټT 2ձ_T6A25ai>f{Ovh?DnÑ54m-cb^@O4znp0O _CEp'tz5njkֽ%OT ,+QtN+$O#[׍Ӧи$Z;i'{(WKVK7Ɓ}UFX6K.҉Wa"1/2M uMH`Yd=4g56:B[ Na j1?qlj?~)ƁnwK8w0/HڈYf8n43kk/C@-d,6/_0V3~p}X>5 3.Xi'``7'0vx#, ۇK|sm"P7EzSO.m­q!? utpnVdzI>|Hƚ/T^ze'wc ,1(TgXŇq.k;>?bN093ԧ.@rc o 3J1 bDC+Td:Vլorcy nVkAzأ$A' %DT@cNn!~K>t*j%*iG/q3W:N D.J=CoBy{^KʥEfbqE__S$ර# !Sڄbj 67^gcT ɥC.Iܸ lD_A/:Csj;r5`fuYOO0~ '"|X h1犊c@Pr`,P/8pͫ'Fڄ֧- r-҉{< [B@lGTqw{h[. iI4swg`|ھ_JVȆ``>f*ip~&C6 ;KxZAlG-2QE]6#Mm̆Ů׾&XhyG}+Է˨A#/BQaZy?(pUzbGCsݽwԇ({Fagv5U+B1/*0t$ܘlPq!MNvMHtmeiaBfD=29'˨p ҍt@4TJC|"eU"a-ʷ,/`71(;D!sb>^y>Ї0݂X>)RR!48#'0G x 90Hia5dN)#MS\s+P:+`+o 64!*_BrjS8-mS+^ovg/ןql&^A$_7 sZ*P*\}Vy"~!S,y#:?IV=^>Q."Xs*%Rh]rZ%6n=Q8e5 MM~=O5JZ׹zg?wTXXEɒ-Zt8Xط'%2v#&{kh$kb\(:J3"I$+}A+A{߯EmWyK"H~f궇s_<:oL'eX Hn״5 ԿRcT8q_ʿF\lb$Z4 X@:F<4ZXwY^ܧ0t)]ݿx4@ c*bA;X6rҠnej0U}pWk(r!"a MC8[&b< 7%e4TkK y=C+`v|!\ʳq@}B0 ^ Cr!J7&b "nOJldF%3/?/6 5i 5pkMY g> W+(aGq-F-ivGe0WDzE}J j!.PU^*]>UD nNkxP80fJ4Kշ[as:*~A  tz뿵 _B2A bHc˝1AP _X *2ҷh#4X|ϋO1uLke|NJҬXw͈2d0$b@هXLFs -90$hSԣ]<<`t jIРE#X]}pba 遼Mn09341QǒxPMD(?9 j}` ui<ۦu)]kRXA9&b( j*۹ȓi>@;mIM(-6@X1㻈-FbG5sVHf˰AZ QjiM]4OXxXz_. 4PxkdXV]|8ot*dx15NgK8cZ A1Ȉ)拝h1YxX硛L* b(|E ?,6z.Tu8Ef1`` ~B=9eF>FAzu+ jHP:H  uS@s$c%YPv&HlUŸyט 7.X }HtNg g]g* >YZٚ[f}f(eNqA_[Çfo_EV=gveA'#3YrFASB3&{n+T_$ g p3EqVGʢ,fQcFcf$a4p1SNlҢޣ%EЬbcmЦ^yy-+;O7 tgLRlVP^2x tØb)[1K`4:4qdTbًJr W&製;l0"Q% oeB^Ҫ .=4+4p8ĩY#fJ픜нD: "5ރZT-,Ϫm$OتD澊&=WY~OG"djVF$b@CPjp)]Eov@jh+1w!+wmy0d<\P@ōcأAQt;a uxoW(6&?m߃mk\%Հ~A:ox!]"񵶙Iv 0a'N*BgU+ޝ銚$s{U-yn+ur!mBS1cT5%;0Q:*f|yqDG>ebTa&[ uDۗR?:'<)7`5Y`/΁uV޶[׿XtИחj\hX':k+kKMe ~fs.Qu-2kChܕkMH`3ˋ7bFy^O n 8>a_2)& U `!p*b)vTxo/Gqu0a*AF2>.RL'fm l ! 1zzjoFQՌ$Pf#mֹ80uk2dY~q` ٟd2`uMv`uH`e;hf۝nzX.6bx4}+\p{@g$pa^AK\6c ,j`Լ]he1c(b{BH5 ¢,q? ЩIVBX}F<n|8/|倰>gu+K'J ;i'XT9wRFaY=1~r';ˈ| ${GhsWh;֥4L'{?BG* g|3IQ& ʸ~ }6%vOot& n fes yKI^X(pY4L1Ekm`b:L;*ȣ9_ WeIq(_ )f"%`4jpVߗ~5_}><DuL{K"f'R[A;"Nnc(ʵuIվJ *+Zf+; a {=k|%WԯR .঱wz\80hZv157M^x-P*׆2zfS@unnQL 7=-#M-ĄG_QWOJMR)Da`W|38[뭕8,/ < xsYE||F)Po<28}M%Mf/RPXH&ȧv^lږ6BNz- yo!ۂ]Qɼ_wDA b!X!iN ^heQfQ+@x~񺎃bdc[fEjX#íPS~j1WZDQyV)nJXٹ铄y*9RV{זVWqԧ 2wJJ[FяVҒ"g-I߂yV ĸ:a֑Ԋmdb:75)Ih\ ;&}#*Dblv絫7؎5t\2#D(ҽe z;ESVԹmooQKyQFSMU]uvCl$nСR.fZ޿ D;}䅅ȁrȘS@/*WTn^t2t*>HeJ% &'w&3Sul3g(F_uV9WoIaV=y}`J?fF9Q,Pk}֫=܄1jv[J(v hNؑO6^(hwB=Q(9,c, +A3jF.'%f_l3}f%rOr?li_*(}(ƣ ?l67TNeɂ2E<(=|EG_<#Mթr],rISR/~9~ȁҐ=ƽOSbrgȴW04Kn`63|6C BKdMbrٷ؈W%8$K3z`vE6J /wG)|/fA]u/&wB݅%=)Z8:4"g+n3"9 2/H̐|Ҏ|W5"$-QCz!jKR/U$^eQ湐S,~Rd3+XF3[G˧p  !r)qIΟѹJŌ-MՇ#aIWyXVh TZ }SHKpJ׭DD̴j0g `mP|jaE0]:uM.B2X 0}995a*YʇK V.4}hxz@@m5 >CgO@$HpNն-Z% ղ(TAD9UDp'+bڱX G`0`ju{R&sӿJcXx-F5LmU_G1{lC2BS%,>If.8UePڨ ]{/D7bFL`ұWТ;iurݜ=q=}Osvs%( m 2_{\t{vg~EHb [j`k$wٺpCx7Crp/Iǡ z GE3nJĎ17o4bFRA_…ԣ1L ʧ=c&hғV}W>G,at%P'G nǚg豞VzS1U&s^2>NW%;"SJ^2~}:Q * .L ܻY3"ЂKB84ts1V9IΓMC.q2ZH" DN:LÐQ`EXRA&ka`7\ҳӌiAlUDߣ. bk~gThY=/@h3BT;h*XS˘˖;Sb M]\2YDAYwxѨSG/zFOV{E=e oDtfh-.'\5ZS3}n7y6 DF8³`j̶%gUsb,5g-YbD^(DshBRw0p 9羰xx7!.pDÞ)ONy2Dz(Z>}Wv{ZOv:I\*qOf;t?{&d |/8|F=%TWpI yA,§nbˎ2r`CSnՎɒl!Kzx !/,?2NYx'_ZɰW]ퟻO:ocS(WUwCÖF/Ԯ4BGT2Y#țv" .4]g;@HA2?m ZGGnkH z*_qݨ,hB==(p$<,?L+U^wۧro %wĶ?U>=LߵA⼬$+=[1x Lǰy]@~߷dOc Fwv`=4MǺ׺::?D: 3y`vj|5u4ܲX]j> c "|:60s6Lu]" VAIjPI~r kk! e<|}X u_(lPWh}誫'C^t+ȪeB^s9^Pt=7~sK~EE=!wyo[[QNTGm%[mq5).4Սk7 ^zXmv>x=M~MX D6]ii"=ks:zdg1X[%G?+vdbhN=Q;2nƜ*Ս F?"s/55eҗ1oMխ-Ee/R`" ^:( U񔩦>+o 7uc[eVQ~aX謲+qesFل\@7jHHBN)Mum(mH.ۜ-Бс ;[+{Eα*HI2)JH\# 41bMZzyeґgo09cATB:n39(5/ eէcs9W9WqdTf\5g4"t4bwٯS6V _!M2g[us'$-*ou9pR5,T_+.T]+DiܙpcU073Ғ3 ۯ-Ѻ["Q{-퇛IGY(:].Cr8fd\(GJKNO/.}ubH7'z&E"_qE7tS X67AC'&lm[ 8$g;oL(72[w$ڵW=NO5+ίÍ=TT't>V;g, iZjz-F2ljI |":w2btnn^|2z==N4| Ev]=pzWa;p2<%Be*nlVʳN|x3ۮϰaR"7kdQ}`H-Dg~V[2zӹ^XvNAxĮ}*0?+@ѳl#ˠP9!YٝגWv;SMTd5Cc }a|4 E-"ǶC^WSƒ 8XspFQx:l/:Q (T֤5jܑ]Pfe F i"1Ng 3NNNˬŷ(!B~x4³%[E{le*Z;\f_*/UJ3:Ф9 څfXQjBIZBhy.Ҋ/%1=~3`['?i>4k3i[t%}Uv%;k%獁܀Oќ74]1]c[iod5pGee{:XgsF jS(^ö@]fQ/ 4ЎeűFc]FfƸn5ĵeSap'VV Y4k".݇uXi?l~:If顮*CJֽ+:s:Y  ")_xDgV(YLt"֒in顬^߽lMXi$M^‹x,hd q nN$.j@ $qbDw,\=?N钝.U$ `g*lrlJ"-́Cޔ8(6Lh,?l,],ޕ T?aZXT5+WA 0 ?I&"@BRXWrC6\UO蚒@ 'R 4Bt;L^-zͶ>4#DX,8nv.TT˖6 wv.;Obh_}"&a ,zfƒ=e":"I8rgatyL%5iv#R,Dא1`6+IgE%X~Z[Dߊ Vj0v^ j &(>6s?#AbŸ1~XK@9b h#.Pc f`٥TĬb ~6h2NK1?'JR&48 W%]{ :u{~S)y4Q!Ֆu M]cܮO ڜm0tTU/r,YFub,-Ӂ*1%GcyR_%m0oG_7Y>x\OI We?}#Y5[̖,[nAԖb"gJXUԓl$N֟ꕻI5HޒٔS ,Ο&9NF\=R.#R1xIH.]7ܤzJ}2տ#,!JgC%à`ғdI3K(KU͢2 #"I V)ቧ#y@xP (1V_+`M,V D6fչ;|) ? 0]/ˢ im͌&&[j*$:9?_?ѻAł Jtk \ۘЉa31a{Djj}TIhhI) r:M ȫ3om9v1PXx!F )JN`͍5_I!ZGv)qb~/.rz%#-&t!6K*&#'q!~";m+|ewOAs+@&a)xŴ"{q.UDW ƱϥLEPA# s|ЭhńҐi v1ĩRs?!8& wt &Gm[U0N$=tdI,l]>ѡi^KS2s󒮇ZzOJ[.ZP,e%}:@t~k'HvF<ƐSgkّ+ .pZiKWv!mXN󞼔}x hVQʇQdRRvLTB +xFܥ3O~P tIws_Xb/sWZCٓM yũյP pVS'2 G|WG\όS3 )ytXu?ې [HpU@K5麐NqpNU,5 4]?m 6PT^ѷEiXlg9+er7RkBG ,Z#/҆c!f'0؝ k\_u}F>3Gs,\ꢥ=+Rlp8;eav#-vgrSQ<S%Jb?^dSKŢ1{'=iT@X֐9pfFhJ*o$IﭐDJQUϛV5<6.*c w6CVg F׌Y];򋙚xJH*x*Ltlw o8#ݰF8;ҪNqQP.+&S9l}7cbhHh xI,l$$JvLRbl.DJnuMJl'ZC{+ϤNE|λCٮEV?#'QG3F+ސvW~Te ,VFmHܔc$x.w6"@o=/1%'hIf0S>: KP<&:<~[NV2 xjRЪGE%弬,/bBi(/!JE=]gMzovTg=Kh?\j~@ӭTmu5Ei_JRk瞓*A> :峸,$+veaUekא+[5P/ύΤD L$_ m|%[!ꥬ9jc ; pSlӋZ@|ԅ+?[u6@lqCT]Z~m_ZNMŦF9ʞb؄ , x_!*?d7O0[7!"v ؐp CWlى;?5f?I; oN am'eI;2'hc>n x&tYy?nQ 78q ؕƩl\Qލqu{ڛ$ćK\"A+\.ͰCދ+(d}Nf<*,wx`iЌG' 3J"aU5g7-'jIbv1a.(E-d5WhdFg8jɳRbtSqѦz!ķ0+Dpt7älk%22M!Yyb'RKo j/߅Gv$U^kPlj<-7 -Ac 0E$}R kX5àI^Jet$$uy-6" +a8k\>!c.OPam}uFN"L/#nhoA̫FI89;%vFNH0*&JEԍ/#sJNUDH?rLA&mXG)pDD]jxxVz}}+6!uH'ҩh>5wz 3 *`:J 'ظ3SF__#0AD)V|9<9bi0%nA/1`\;#U9f1]!-]8A@;Y/_`AQ*&9Copv98@ w*+-@D$ElI"ClG'{<` * ̰H7.+T0o06biIJ+4J֞qAUa)I1++;&.]߄iA ^ԘwV!MOk*78*:#鉺/c,50RToSW:!״W) ZJA=Io@?{c':Koho? ]p*YI_ekP &Q3=O$D7=WҿQk iD;Q2&MBmGyw(GP8%&;`AK^;6ncV M[5Cdm-?ꉩCϰ8T P ל/S x)Xce\OYDRDʙJfo(}?51}@t|*pC  $Or \Y674gnEMq}b.i:@nDư$N_! cr2Y>Q؄RR& HeO[x@ [ŝ̌4/e64_E򐼔) G7XyZ&c?>XdImFh+֒oZVLoS*T,Zc'M߆S[-ϟk.b5K[ }?M?fG~BgVۋG>8 ~3B[F3xK_sx-̪Xn#mU"V؛!zrq"ShC*mCZֳ V~? ԰NX^p4Uh݀l>U4P?`WUXb9>k-tUpux`ل)WfR]9_1KGZp ;@&CYC@y"+j07'J. Jƶ)rL6't](jzv~R[7uC` y`hHGշvȞDCTZ_z.fI} jW9GVJH֌Q^OԺ+n j~UupH8{09I97= {_ Wp߲̋RbW؉5irNK{/  nU z(S%L(4xXꇈc#e\TQ8NR]b`EW)x[wsz#SKI3)y@"dvr}U^"Bؼ^[Nd˷ɹ\~2Ԭi+Ŏ9YZ@ˆ@cU?4"F\mVfﷺ׽w%33w bECikrZ 󨣨Lay .i6Z[b6kTv嗛9|I֪hUv7fBc,v䑳Nwn6b&GVty7nxY4JCOECph$Emspx4$%}G`Ս:g5;B!~9RzC<K".1h1џ`(`?#"9g]JTOm=XW8̹Pңärn#UO9peةHrC !##u=rmqlGw9 lQ{6CQ Kg.VLIeS8,;U S8Q#DtBIܾv\ΓvSIBw"iZOWT9)m7??[]]CŴW?7OK6wGGX(BymUOK*#? !d![]t݂SgwJ@>, !A '{j@eZ_cI;GgK%$..< *|k.n܄RW E9 &S3xG a} @>58nL`iJsBgB1̠ ˍ\#8*W7qޖ=p))4 :gp1r;Gj$Ms'.23gcӁޔ|lSZqiU)eFe.e{4obm։7G8[3{ß1UZ`mĬ˱4*zb2]|;@0 cv٫[,{ Px{PMV.kSyD#QnQҼҎDCɞT)+*Oj0j 038:h]F!J)bqA:[1S>~` "d\tZI(%gS؝S<&A… ,K2MRU1ӜULj3v@z2Uc{fvwlN􌍌 KE6V쓟/Za|i)ݕ:m mcojKv@,Dn?P~J KkI_p(ffG2hU o4o79Z̪m=(/-i9bHqhV(Wo_$@B};|q\1>+[:צ'&$Ƥ}Z# H^rS7f€GR2'ju+W'n^k&v0?8Y[q89u)cٖh4XaDأA'K=!#bdwLC{x4CJ;*/:[)8Vq{r~d$]n (M#w %imϔ^7G>CW ]=ySeǁ,/WZ=* E(9)o?}uP)'a zhȲG'$IôhN.a ~KV폌eM9n`fgҙm?fWRL^DZ>k m|e?m!R^Ԫ`&Y7x{iq}B-㖱Uw#7H9~ÌHX+†6/+]a ֤IXLp^&+Wr4 Y.TfOT%=* {/7y_!6!|cU^lS9bþ el@7# 81 أd2*1M;S՛ٻ0x̓뒋 րb;x+6Kw{X'p0d·EJAZ{K}Zqӑ^7.־հg v_XHB~Vʜ)+^% O9vNRW*(?eMf D{3/+h*z=5oD4zm fY<%)w :&b3q*ݩDՍ=kLְ`9mGXH)M'+/&ڗe}HlH M'$L8W!jLҪqYeť@D@tboE]:΃we@h@, -xuFyذ 7SgP}:ZQ,Q_?46^ 9cs*jtRЯ7yί&T~}uXB Njc#x|BkW$pd`ZEdݟԿk:K?03Dj`'okUB`U͜bK[\& Vnt",jNhAyTiR 1uM|iJϸͲ椴#Q@§gTޞ&>ݥgO,4)/GEOvu%\o#FWRj:IjdglG?jq*lg|ߡ>aZ(3ukWMx)5=ef5.mrW%uɌ|ݸKۓQ,yn}/sXf_^ˀ/B}`hJAYcB\*MDFaG:r?7 Rs4?m\=c3vD7VutkH8%l*bgеfBO&>qsxv&if5'D6΃Q/;TMLY&RE{%@Via;0CpQt8)249&d$XxQ⢺vס}V$>mLC7tER lsPXi&`RC Pi.!)Kv5nv0{zs%}CVm*.w%g{\u"n1P=7q—p <4d^Xo9xE $dɕ|(OP>q˳%V^&V;@/T -g orKLh_TMߟxt* E3!_\9YO<;r8j}ثNyME ٵt|,K' 0+.^0t>xlWҶw({te Ur9.VA!HW0}0HlhoY2j?&*G%x`q,50?ӭW*YDzgB>C'dìP\p:z+b"lqGYe+ \1nQwW\Jsq%3N?4}HKa YIVϱy_* >zs{ڻY(p3dײ2t;<p#=iSty1MY_ԦPdx4U|_6998Q@y &V'{ynvcOLNv~0s;.ӮO17>^w?x԰Zr+¿e O\QKv zIr'`ԆEu[H:lh[oYu?eZn/h@oI92+ G8`Z¬Y:n}|:M!15\qcEZl-!%@=B7xI&0tҾ$,I30ZjUoj4:0'MQCꙻ^F՟( *#X؋;,jc.sZϠ3 5LBr\VzL9\f {R#BS*ӧ,a͔p?Hyg% fk_gJ`PwxS:)GҪUou9PZ K6ZBwT$YXH(5 :ãVf k09ڬJ/W8>&*¨ª@sRXxr:10ui鶤ΆZzjjE7,dwі?r9b;SϚJP1ݤdu瓗yO-Θ5{+BcsF˭בVy!]㦥BA>Dko˭(j#αZHTGU ={4޳^6;Z?\dW*HTVʼnͩØFfT Ε C^iW--[[!6b6!-{ˍe |ÕU=בr^Eoʱ71񋃉s1[ 7H*gSb$ӫ  2:/gx^`Y3af%.B)YiSFԪfsZ`Ʒ؋Mm1bf)}m̬Q2i'TBCgc֨z ڿP?7P=GlT+G;tj` //>KiGU3#49 c+pᴨ   CHqeuW4{:xثRkf$l9]/D#>>P~nʶkm5P\b "haѺ53kɥut&[Tݻ2ϔ]HiH*,]ԃn PފpR+kAF v ɢ4J.eYC!Rɲ皟-{_a 7|-o&jAQ>(^RY3v7bȊq,#3(7!IaN͢Rqځ`[/{+%'+SV*j$\Fpp;$ u,FvrꖵguZU*:Auڛ`-<gj9Kd*UCD\[-^z=FGLL !1gG6?$W&5.NBevBeX&5y]n[D?/^C.2Wb1Ͷ5=F$ ,xUe r"ib(2Uaa׊/†=;$PSfM+yfAW m7$щQTЦ&P:4U*&Q{c y$BdpF kϘPL]%T](񃎏Y c4X ׾Һ `IȶJJg@D(X(`'Z0E 9XC*mXY suV8&eѽ ,b+Na-}3ˮ[5EޫcV#ăJԢ|/RNt2TJpiɊrEIZ@PV%=92QS+~=[Ԭ e-zH$\Ϗg= 6爞O$Lm]MHkZOplD2o s/ td_ InLQ NZhIu7W]Jh.ﶿDq01ț_T׍).9_*Cz= ?a#q+L}p$*llփѧ) 7]|hwNwUx|(*hc @doo9!R%FEY䇂ΉJHme{Zi؜l^g4OE/\V O>g8 _Š̟Xw^H\$wE^s6uûZf 9x{ٝ^-K4+C >yRH S$ѩP xE*!i*Q&(*Aw[-LRo-)˯6 NOKlrIVR*W@.Ny7{mW;%Xc, @,-ib-ʰ}}:(b;uJO~q![ >pq,{Ku~8 oMec'O)p*/M}8u>_4(t,;.`kFxkŘ8ڏV{=Êi e/[.j7xPdi|}tGCQyg99/ϥ@b\k{T޴9?,I=O2ӲwI'{uq$H8\'rFD$Md,$_.UfSlH VF7dC.sȏ  ˆ'&Rmh'Ƙ5GgMY ráTψVU l^< UTe2E+_QwEK,LyA9<0ʶl/e lt naQzJ R)3🜁OzŸ޿yMV#' z޵2HD{r/mE}iv>sx! ܲ=g;tBA 8e5IoOּcn4f~ dOtGfK~x2ՠsv̪ TE*w3Vۦ$kWD =3GE\a'&ͻ gjvSj筆64R>v v'-;vtś&;"" Z"1mqul@׺c#ىi`B#ǍE9jOVh5C/,<ϭڤriO^0c(_4˶wP[L`\"533oZ:k ݊?tEVc,J$qWrQ+@VCV?}.$˶nl]d?IU v<AB>ߒh 8˧Yhl3gQdi}"̽na5Q&v"B98Py'ƹ-r"UcrQ;4WQyhU"chjoT;gò,Ҍ/xMkbs+ر`e~:Kkk6B%+b tfKs?Dg{8 [.AHJ :6jBW2:ɿC9TmZ},Zk xS&Cqr&^-|'@ 2Ncv#%^![LĖn ,zaybφ0 2*QA*RAJ*iR vHy<^~ɒ+՚K|Hn.3O׾uyGٷ;";a@=/ˆ4*P1ik*ѣ cx=cS ۝O('z`=c xpz nmuomqtIΕUan`a#FPV!od5W^@!f),6u8bQ_t_buyvW1Ëʕ"c:́_cV:p,;+qqEb席 MnJ:E}̆mSaZg3t=ogpeâ3G;;x[ՙ.f2'{YWDn V}=嫚уi*o RGd΢.g OW #mOxb~U.<Y>(jܙԟ'?q"s"y/£#V*&r{Z_} u[ۋ08eGԙ64{w,g֝?=~Hj*Y<.@rsI3.Ec)@lDJ6NΒ8K>'tՈ= j%h?T=Gj{3)~m'~-kX6.WښH$P\`w{98h>iT) WCذR*8q0[0(R2~ y*DJoVD~2~= T/ڜ9ila)R5Uv|PW *z&V]x y2U/v-"`b>gO#V kp7,d 77)j(_k\q}#F &sdI1%LGP8cԫmdl0|:TbzquyDZgCm<=K/w" =#,;xڴOPa8}7-QN۬Ѣbcq?2jj3{AV2]ƴP|96ƚU\gI3I-M>Yj5VT$)-p=5Dڲ_XX⡱5U\ýrhW!6_W&|'O |Q7ϬJ{>h9&p37W= ?G&}YY8i%r 9vT774"#hA6P &A_jLc*"gMJ:EpZp^bMF7OM1w#l>V2dv[ބ Iu4fy/f`X -JZG&r!w(1[o(<Ҍ}x[+? WUfqsL)1Cjl ! MjMNizXC/aSn/Bc5]ݠGptFu99?\ {r};*Wi7iʂntmZ,_^KK؎-ri~yszs(wHOᬪ OԈu&t#iQٵX'RXDJ݆MDgpR**T}q5-ꄙ.7!=rpAڭ"дJg+Sgga{A7m=d^2ے/?-/j%V泲杲 u8`.y]U}i!ދ@c!H!CH}ꜧ }k ?rڞ. =o_1ަ2받~N4f)aT2(И5P/O{ eO(bZA$b{ӎO6]/pD?t]$*LՕp0H[oy9Ln 4I >`c /Zs[0XS#AF{S^_A~i鬟v+%r;ӳ@SYM z$-Q?r<'LkG& ynK[ˀj!Glj4|u^K R=ʯdd"gKcoo5+_o;e ux.wv:»ϰpFv%8sPGTj8>Y դ0)JU{En$* rj߮{;KJ>nUpx~A:8 fkM k)>SC8UAgZZћL[`a1APGaKDUR7hFdur{ܧY_4 ~=*˲rҥ @MvYlwO~ o)xcZ@x!= !_X8p,?>2,ҁN7=gjGj:Kkd}+{by,[֭/7]lmeK-B<($ӓ%b5 )_@"XMbdƤ*q妹e<jj494;&b:NU@w B]ah 䰞Fi.LM -٧;V/4p5nqd52ty)FZBDdUxPdD%e%x[ eb'tߓD&l:ץ2/P\J Љjrq YY&hr9sS0 +' ik%<\*Jݖ/RIU/LeU*In@' _U/ >Oؠ.a qB<-Ζ(Dr8JtS+IQwnVE}T#&Iv*3rCq*zţts 1]+[S2(&@Y$!iaj!qYODwCF4J>K]_7<ա״Әr|Rs/C2GvV'Ā@:baNH4䑿b4<2"bmӳb#]BDlP'W#O75X7Ļ+t&< :iUWƭlygVez`*@sa$'&p}YHǕz?bI]*oWD.u?uwpfveBL' 5‚Y+:-K&Fԗ~C8xM\EPa9Vӧ"./Ș*<`ϏOMm~;G m|&F29HG[31/h[Q,?xj=kba2n&9ܱx-:qW"zmQ7}4yW]p%\5ҵjSjBzҖ|TUWJʈyzATUr Z#%RϔW1_"7\|t4wj G7KuL)+a Tpx@ m6n]e/F@E\GGs\%G*v[JjD'8<*xt?Z8]LuK/@ҥ9@+bL "sXubuL)S;F>@|{/ B:PiqFE]RLhtbpBrEsܲlϝBR d{3`j'J5rHΆk*)+,]s}#T<C ÐJTEھ8nPH g Ȏ.*ބ@QORec1fMc,Q aؠ{dhC@npWBsd<x"v[ W 7ᚁ3QVSk}q.Q !"YRˉ֏uilߍ?bCWvYkӍepZ#qMf-ne=CtKb5j[>DkB-4|tԖw9PTv$j~Yw?^`ö1TL7W=at5gykn 3 l#y-P2(qv<#2N| o٨V>@PhzA*~j2^H6U+mf2}V6b*MMn$" mMI JbXWxܯ Iu{VF1ݎV Ԋ;W1MFM B/( 107 !!7Lɓ:j7±\8fHM6HMb}:^΅/Plp-I6|,!^/߽gTuqTp\K'P0&Nk,"ۺO \F[ Հn jϳߖV]v1lB̋2 p5 "άo7.*|3DPx G?hyĞ64@nDhjm!S7_y>1mK&XM@ϭ+ 䕄nLkX>6zOD/j+/ ^ ݐ˖JS2.PaBQɞOe}A7z!85c54iɣ~eA~ԠFb2?^a[>MkhZf*kLeRFmve~U #O"iXQ 2D] P4򐀹%U$)1ŒJX͸l-pBț-Mӱp$YA%(AK[-,9]?`݌ ly0o_RWcD|DjaK,˺ٚZD&yj0lPՆ劻{c;[_:jX.8jߘހE;% )?to?­?nPJ*w"V&9Ka7Hx6Q3QI4"m~tw{~CwcG_<s4MhXyi[idtWD%N"]ڦk&a`n_J:py 7_gvjyDhOWIAEdPHwHkh:hUWiIXi])`~[e;u6"URUM^, D'ng림17!ZQY{3oXq`gPIJ9%/*a}5SK{%n -QΦu9bA֡hdz#@ރUh&,룐S$q@zLlf3>74"V3}r؅Ev@ܞL{OzmTDPTk]UvrZ4>N=,@h|p_ǫ[k13뭀uo?6U>ZQKOJ&nEyTRiQz;M,iY5/X4Z- !ƫf!xaT $ōmߖlPި۷oL,Υ%\OfB1Yj#l< c-~qcEx as.D- W놳NVwgLZ1De89 pFwCVU ޮvBO}7vhFt^SnYO #'pFf#܀\yZp0i6cru5'5kJ<)=R#Ld NVDfBP%&gsO Ww}؁Qs}RZyS~STz#ũ)AА9\AG' v-QJ' м Lc?%/"2QbPA%˷ue&Ȭ?e_']YdeB7*{2)zNtqiW]qn4`jɤRD:k ^/`q|Hֻm+Bz= S=hs[鲲>+E勡yӴF dZX4{.lXV{+|]UU\Or GߣjE;LM(Ȁ^7-` 0tj݋3ZBi4(b13U<LOWc)m5b%]?M⦿ P gWNmMnyfMϡ ̈́:%)O (q^fW%u2VS|O^<<&0B xK^:!5pu%&D0.M /ٔj"{`"E 0q"Fh+^j`*ώW|3-pm>5ul5Zj^OR(+b+36]6rzf OkwUjH[/>nUj3V-*Nmر#U<;>te-dcߣ7ПCҏ+Hv1ڐL7`Z,OcΟmu'>pV ^O:*vF=I_ŠFD8Rtc  =: PjFEde{J{Wy٢MJ/n5,HE-+\$ sE|p +d@<^EߘMT zn'*$m݃bVri2 Z˜'aBO)N#0ϫ )Q)NM~$Ʒ @ ci|"wSdPվqIrĈW_AU>3joHōf|'DyEig{hfECZG`R2p8}E Wv F7JâU%Wf59pzSJ{ěXD<5Sh%4o"7i}Kc@Ý*X^esSM3}KVC%,26_-fQFE-; *k Zv/԰|ƀK YY1+|bȏrKٷO6 2'E5Yhy\Ś#]Ynv3rӟeh֥e{]Uf&L]X ݖl>q-uѐlJRV\z3̗otj9deXϏVXEcnFh=XʉOJpAx0 c`V؄7RWfϞXcR81ެ}/nT)rT3P+5˦)gYNx<@DGQ\;[J'[!;Vϟḧ́=~u)e[\6?^Knv_af&)U"<& kQ[P}QV7^0)2JKA| 6g8W.y!8 DWRBu3*(pa7g~R7#~!hZ('Pґ7IU1a )?c)`R{Xt:Sc3?w HX/iJ!rJ.pKT֤J2VLFEEq#,&O|F~(ÐWm@zYZ+kZc%;jaoO+\]nƔS0lw bf-$e0tCHS`Z D5exS3blG M0jLQWZ|},KQELlF#5U4wwpPuԑrI73-ōۖ d/g.Z]cb&'ZlgLSZt0Pi`kDcv]"N?ԆHkTl&N޿1)57F}U1jT+H#n {$^Eh % <!}/t6]g~a>m-#dM>ta%o=;F"ѼFŤ.MpΊO9tRT r'!P/Or0=FYR !?`ִ< hk#<$"j:2`ްqD\tV\ ͜'[UEm#Z[T,2ol㞣D@4Tãjce 9'M$@Ӭ\ h(׉*{s.BakT #ɃI] c귊Pb1ЅʪHv;ͽ$E2&Oݠ Ӡ8 0YZ=nCT~/dbǴV0ݒ`9{czlb.M vOpLP3 gԽP9[Ԇsqc֕pR KHppH%U( Ƌ+tJlǜZ94=Wރx>uh́ k&T5@9G5d?* J7킇^ESRBn"qcy].aRY_)Ie"A\LJ {ӭZo4TX'Vɺ8XUReVZsFx# pW6gǠpi^E".U%]~ S h-K/L)wj&P@\Q/Q@]p*j%˾}qv- K}/S)p'u>1oGr:hAתT>U2_cmr\Q<ӛ+3hF]BrmQֱzbCg3e>޺XմŒzGr,C a>mB  %r136P@d bo(,z) ]C\Ak ڗw*( H PLpQn@\JYbpD7C2TPSpr֥ހhKaHgRNQ\\9(rO+*/N*zkb>_Oc`dD$BSI=_:E#&ü)8Hn[LĆG8 MRn +Pz%@$(MCol!/v QEQҬ`XN@[}Z2^5J8}d\&-ô.lau 1~o&"((@pRPAY͛xL'AXjұ9-W7c7# f< Er8ezrAP d.V]Cɍ[?)X&Uh|ؼ4B۟*w,P}$Qb"}(^&I𫫸=A&Z8on!dn/#N}fѣP~h +q[ g g&r8!-S$íB u":r={N0[4>~Rn^uUG-vm$L9ٷ+fTcL\|hGIiOUxy, [tkɖҞJ폈'ihlK=leyÕrtcŶ}u15R4RQG{,+2 K¤A 2Jxf[p4z{eaJ2YiOiVB.po82(63XDCXYC ¿t[7gr@NOjSlN~c7 \!EIR6@ I1 97A0xEO4ffrA$VJ+vr L-wY цaf"FA?7<59_j,+inx0cKqU6@/:ՅcBzgV*dlAHy\бc(eXV-MM1IYIY7$ɚ-)/Vs *A۠W !!@eO>| ͡^̙z e 7]+]<1Ӵr˦51DJR)-M( l|wP:88r$wE"zK[bnX7$Å@lN 0Um],#EK:˾d < g?T$OjFїޣW U}Q3ieD`4{||!Z NئyYcŐףk\KN`*qQ3|" GV%2})]ϜOrϯ}jU'j$dz)~ױ3Ijxsr=\cjgQ"Ѿh8Dn֙rʾ2amFAhHh< !*raǜ\ryY R!oDvXks4msVh쐍#wfmJl;~<r!mdeDV >ڷˀ&ٕbl,XrioWU㻝ПfUF,?޷JlLMdB  @T&WUk:A"y!l慇ŴrLOxѵ?$f`B '[@5}SuL7jOyGS[W]鸶SRbr()eS]MNնg_xS>(IV(cz Ŗ WkRگjT9h*bứrR~+%_mYٍ?XL{(0#3>FO7H+Ma? f'H}US ع̺mY\t+>8tB%Kѯ.?M\8UՑ &;lU?v^eH{ ;+:' Օ]yq=zXEdc *'ҭf`X_Δd >Ѥ/CvNp>&E|_ I ~_ 㳡O)K-F~irƇZ0Mz|.`LN:Ԯ q ֫db]96B M.xkҬ[|2"\D&(ŵX_aNf ]yPLr\u2s }n-QfڌrDtqmB!y >;y1#8yVgK" rIc:"Ujo{5vRDQ2T '#H(99@$0v"N-˞X}К1(w||C0>%IPD|0@@t- M1 e7?p6y7vĘdF6zGϏ7NzZ?8G;U'!UCæwbCZ*o kz);P^!.=g1女MYJא<,VaR-!Jt;,Zm=&d>xAǧ8M̥Pa*upA0o5NYJ# AE-JC+%9f2BN꯱>&6`w1_(Elf(n6O*)*$=>POu*;tX}ro/}MÓ.kV[͑1לs$|pjZ߸̠]wtnB|&L xΡ}'K};Ldͪրއ ô X_ 2~Yf1sb *mj0\u0t.JKq/һ7W)n_O;*D]S\iYUh<9.Դki2SֳH~S ߲:mHh/M* zH4njROy_'(U^죉s + J_Dplk*qց\C av?UаRG,ig_UH6PK4!id?JU"cm.Y׽ HFxmƻ!IDG= $LFGs҉& A>L<+jmW&k0g>_ajq-1%e&yӾ1gz "/A|&RUM8͏ah _m?pgGMjZ)K(^BV<ھMQ+2->*\FV<66+ʨMCy.boJT] e1z8򾠬Aa1'=OhGM"uQxeϤV+wܾh7lXSc/ٜ v.`^6隯)e^Td6V#4BK{洂pG[N:]t+jc+zGFJ\ɒz`p骧\U6a!կ%vb ?N뗻wP;k2E'G{ۢO<:ТáwXkEufQ3OX vKNx>Kf޾e{/: {_g3fjݶ)!_޵{EU}k#KYx`gvcUҨv`;aiH U|ߋ'!k@<´|%ҒJ)v -Yϡ'14vf5+O)7*_I(/#3gV E!kkA@:<Ѐ"O QN{[?TzRܬe5PE@ t̜~=f_AKP!Jr@R8I/W+^vC$5=V3*j>}M2O*:E2ԛ/S.qg. UȥmyEW]9Aysj9f#IS Yݺ\p79z0 ?tL 04sƽ+?v7B4x /Y!ԊpF @nbVc68Zi!'p1.'(#cA} pMRnjDmO0޻͡˴K//@p \|qAXey'X$N0 HdCB[@- e$֯X& 9_d]EJOWoC:Fjs2T>=`-8G TY/y X%T:4\=k{.u"-=#64/iFH0.D; TC$k }\'L !gەPDў7?UV]Z.3a'w]Ih‘8QrRziIgw(ou 5caj'JEMANl JmL+eqcT:"VuŹ{Pt3>ŦT݉ܣY2ܱRT6Q}/m+ϑft d)^45%C-}&SڠQ-e{xhzɷOzf!6X N"t hס*5|܋Xvv6?E4 қk |YBz9l/7NK87=ib^n_Nh.-/@=HT,;I@t$rd_;jCo,K˚_ Pr1<p%/(WMO(|sK$5*IH5< H)lJ*{W2YxQ$Bol.Raqhs@D*gȄt1ZKX<$PIi JJ˕/1eޯgfb>$Y㧤,TFPY$ȧPrx0^F0ps]~+ZN"jEӸH4[/PmGXE&:֙BK9 `bwxD~y]P -ݔ\t뀍>g)3,62AWh5@x]VQUwAaRK vrҨ:;ZkU&D꭫Z ؗ(V~ƎFF4!h>mGPClR=?򖅠Kr-Prp8٢< J5y};Nʋ7¸Yr c(W/;h_=YS. 9us%IWl1a쮯f034&b\I=d Yvv~Ok7|f(V8iFZ|+8&@14h1,dmCz02A,տbTv?+ mpm O-_l~4 uԇ-jV&c*L}y_oe[UkTnr9I!\} ^(C2rWvs=J Iv/*rO)LU;K-rA#r3)'oAr:(k:ͯ%LXjK0P*wa9.oIm#Mvb c{;/maQR2"k%.왉t DY>LZe5&{˱NHG\}bH g(D%e6'FiSPIvORp↤D/6QzW4J$R_ͨ1Nd$M {&C+_iE[.5Jqams h+;+"ySq܇V4]rZI >MxTd@¾>A^=hj~g($? > )l<"ߪ;aΩ `}}K"_S%dBAcD %QJSqXk`[ϿDmL&d>YDHђq~o=Ģ;4e(֣bM$!&6R$]#"We=6gΩ*iOi,rf;1< ,ZeKogh'eWp#㓖JL2q.T@hzyND3  Z'Mwv`V}yIq<%krj4F]A28p3[T s}8)csj~ :TE, I3sr$M>Le&·'-ܐ$ @&u c#3.;==XŚp`Iۦ)YѨHv{ z[( 2U&YJ=Ӑ݅>Ve]10r|*(4zҏ^S =g2hG5A9461"ꇩy !X[r/#q鲏ʾ`똎%)ƌ?9) *h0cHB j"  jt PX{ f* A5 ѝpܯ]Z矐*;Q\d}7Lyey $`ؗi'ˬ?6۽{ۼ57Bס߄W~“TSD_" U#Ld ˻&u ?gD @Bi+裆C(GW y•; I1E$c! ]0GFRIq`5'06(Qll〸v;}*lhٶ;E]5K5 /;hw[`d0{Q6>`leأ+[W^;6z1cN~Y#JdhZPLt±06c@\-{AQI! +EE#kR^QKՐ"76 >/D8(-=iV¹cٰ3v.]=R\ms48ǰw6qqbx+=mzVĸNbՂ{ZO4O5 9-Qm\zrMsbAѳ ^ _KZ驛#M}}yađ~j=fۨ{qˤ5}{粪 0C` fzI7guFb~[zϲuҪXYwp7J"Y>-F }֟s0b9F4+;а 2Yr;]k^Ⱦs٠7".7JҚf "} @zSA L? Zo"].薉GqrVR겶{ۧ1j$>}-%g4tR+{zW-?ASFȩȞ5P_A9m>}+e^7 vlG6qNy6=_˻5dhlkW֩7%yWW=%TLk{02N!pVVn?O~g0{?0G-X&yNT2_I \Xk=qx Z)按8JR\URu>טf(_(ya$G76]"bFRnR:J:i[VY"]5 ܸ X1V0?(~̬YG@wU~|@ 3e~Z /!iotb?q`Yؤ9 eHy*۾>P.{Rf٬<^LnUB2;jE~;Ńufiq( 3qVumSNˑ_~ŧS>Eqɢj.ڤBtcHҡE٪gd'*DU>Hr3|V(}+ic>+DDe$HDQ}Զő_,½!N8Z؋Y;m=QeWS:ڭ663mx)lx]A7Z31 t?]J#4~)HJ$Qdn5.W7|)> sP4)b {fazXGVzHaƑe.HL4u~mnM}0G'S!!^}Ӌ7R5BYTK_PUe1F jf*kUmh'9)DhųFc|9b=ʊ'n7%(W` f"Fܝ W}ԛY PlͥҚʹB*T`oY"WӚN[a^OcGA8;eєo8\{*/,댈aԃ~.88e~^"a7tj╀?f4~;!&i 7򽡅޾~Eyڡ+ڵjToaH3nEnO}K(}}2šY7l#o<,9BUN?}Bk0}c x9uKK;mbjFɃY-lNKMMC \x:PI^:/ Z afZAѷ0]Mȍ%M* 8cGjclڴ,g+ ReqВdŐ͌zԢ^X)qʙW8R#DIBU?@U;9 ~A7enD-"#VT˺ڠ˗7#km.LS MWdMr]wm_H2A} \YkO!eGv~ ­Z;7ٚZxL\}+G8[ڔD!&J-2,FKnVA5Z$ _Z)eZ |9S-rJ:0m$W|3)NzBPmfO6Lfi,xV4xݘZ"kpE/5>Ab*%c.%/95$.is~Fs-=1 bCŲ>k^aB|.%.a?>I/?H=@?h`Oܵo4,$ۑmD`$JV/%BUĺ/0/k`~}䳵AK,G'Iƛs`X^x YZb}ݝΥ9(Fx-C:씤7\̱`RS@T -ÜהL[isх:Ɇ @ \rPw{~ }JIoREPȭ&D)4 CTp ײܼnon*d~/ٽY='c{6i@8D5LEup%l7r%cj/Zf)e2wٌlg/o),Pun<1+_WlmH/bgjujLrgq NǬ~ rx9Bl͹[Ņ39g@%5kC3\Il (EKloBVz g'!3}_-G&xlΞ:"c~_B>pY#4TP O\Bwa>wݨ1 Wf̚XsCֶEau5"0M^j9mCS!@Z%䱭ḺymNT}ILM c-h1Ƕat1LmXerꦋ)ɏ g so. 1f7mJ½+=4=iF,V>#WӋHo&Hp/!11WܩQ|/ ƫjr|(ՂC~U!X[:'tG~xs-ˡ(G6֭=$. ]Wl4.\f&~ޱ3 4x>*C_-C+_mn^-Cyq GT6{QmpnШax\cf#<|۔ئ}{<:ToXq$lN\v|OMn:fq;=Z CLWE_/\w|lJ^ 2WQGK׹-QF;榮XU#. m,܅1a+.u.DƠvn1>PTjn_RR)n;| R^dX/b.?@+\_ͪ0o}⻋&c gL_/:WU oEƕ+aR[nYIO k h]x#׃#ŏ(3)*B :syRËh|(G1p:xn| Ԇ~/Z[5nV^CO=0 `[ /?sDr4? G3jcFLSp9)mDIb#NЙt* ) eFLLۈ$UDX"(Xašb^–&5h:IUҌYU9m#M' *j0*=FQ#t g%8u5|zG!vv0H(ByDQ:)͹J[߫;SquS1{ /kjpEy€z0LO` /`)Aj|g>u6AJ)8 {FpHnywiVwavcPGEOA| ЌUmDu15vs7 r* U[ ʲqORP+kr3lku+ AF@e-xWI#T}}h&6|+ "oך` m`iVK;˚SɌlkmT"zWf 2K<+8|`{K ؚZpyzRp Ԁӌ7o2uٖ޿%}|^^:KuSHwJGqR).\iMĞZ_\BELng;͖)z&_t>aS[ÆCuȇb[0Kbc=_tч{$eRh [2 ja^%=g\J5Pa8a&!m>Ϊ40t T/\9}$ oA*qTAYB^TH SWYCڹ{ǔkϿ>njv|Oy!@ $WR Ǯ[q&9o[TJՃm"@<;oa?/?kG~# JXϖK'8|bXCoǝY?qWw=?ЇWgP ZϮbڪei|$[pE/CO\P5iCm|ő.I(r\R)FdGRKvyjrDQr|{ux#%f/˩$Ӵ kjq*5J[~ہ L>[*>,֑͙$8wđ5^ʐYz)R O.m3Q( AB4gkÆF׸ʅ޺ fSc$\W&=LVs_0)|+se~Tl8JV[[*F]bi)|-"d?FS,*L"F^`#}vdC>h{S0u4.yXw=BΔΧ2FK IlWTV4Ejcvt\9?MaI_sæ8@a1g EVƸz(a-R?@:7g+g]C䶠NjlGCk`X$hk`<ڧnfaA{ɩn*Um](vVqMn2FL '95VZ)Nr|JiQPZFI,>\J&DwvfՌ|[/:TQꭒBn n\9ȥn#=ڊ|[8n@t]#b. 0qp8ldN ]g~8SサCr[B'g+;eO7$~M:!hځؒ5QS$ˌWon dTg| X]G̜e/_CVrG',7p\PP ;w\ rb~jOS7tIAejum^kwExa*b=[҆c W6ՊKn[ɖvڝtke(}5HRt{Z+.k-oBtDHkWt@ϓ)3ѿ,hpjnWfQ\T[k Ig!0'ۄ q &">|Q\Gy<׃bq/W>X=]Pwi E[^aF|jLn'|"[l#l~nz| 74uKuFGb:6< UmPsRղ7-jG#I@Wzs " ۝y0iy[˾@7 WQXM1΁}p5ڲXN0 NQ"=H "&%pK 35p%*_.15h=`3mcWZO~ 85h-Qhɍk,5Ҍ9>r-0W#pGT_cY]bAD4+pEq3ʧ#7EA?koHexMuxePn"6uQ|1}'::$%-q!L}N؍ [ Y 73=zv/kwv7ָuzΔ{xxޱQ%KYChw-/VFO;d#c6ތ,/{̥\⟗Q=e`6,_,֬`vATD[_!>Uex{^_M[{ .! 9Qp_3k,o.5ε{kbz, vx;j+ʻ|lY|$hČ|gqO/ʻdRp4}0x#Ń+5L+ 3GZ /ƞb IA+GG\>:GCe u\TQio`mBR|nA}Uz虝NHp CunE{f Dx8NfOcG璊$GHf% G舃bA)O$ f+#i4a&d}eRyVzYRrBT8:0{kߝƣ #)]Uaf9ʦx7=e4D'Ωw= )q 'dq^f'l `ׯo_g4vzM[%(ʩG5o0/Wq˅B^Ϻ z<% GM$jC)h'!םX*HPwҋ/1cY/*yӲxX|Z';^e1*DF:Qi&E$ cIꑕu]eU| r]   !U$%\q"&Ń ƧQ\A0؍ 0_DЭOp>< o)CU>\KΚ?p= UQk+qrb}8tJ&*{e܌B]hxO Ce&ewW$י2ʏ5D doƀoDv9&@y~xX$iL{'x1 qhȭh`kƁQ1o6xy\I׍tW얢d~ya70@EP{0* 5\[=mN!KN >< =Kj~b@!Gm L#0.Kx~n7 ib!yjWM5Zd3O+drk ;zYCR*ׯ+ BU?-M7{u@(nզ!gQIi(T~dU xB$ւs^`꠳ %`tAwcB|X\f47QJ#QG+>֝`]uk| V@'}֡l/T?ؘWK>>b|.fbC>B{Q.{f倁u$<]so{= MO8|"eVr?F6Pk/iF^\Уf-B4Z4F!AYl.E&?*>W~gd. SAZ`cF:i@ 햝O>PN-]PktڲTr\kXӌ6,Ԓ}s*~OξС<`]vwdGϪi熍&v7fLe*XD2PVI |>?UiY|s&-QP߸q^Isuf擰y2h4UfEtEt !C k*/5zɘ2#=~"+|4ZVSXI>nv Go8F\\7&-̩uYpIr!?(BB_br 7b\@ -|I-x+卪 E$3o74(q f3d%Cti1(;T$+c]4K5'Gr'@n.dMV˒^rFvsڻК(MI\Yh_K0}*(HB[$DƜi.Œ唝:P߾)?A]HCJgfeܪ20vi˜52y{،F)JlE2gb؁"v9geA?kףCKӢa3I:U2CqڬuYZ9Z1'I7{\Zp'm\e|301zBh[3]}h⭗RH@)} x\ 0~X}ayL̖wf{:* kv%: /S?M Q# w1:aɕ &=D*)Hl8dԎ00--7yh#g= 7GI50Xf3J[99X&Gsq+ +*&ǯftWĵ#whා+MT'oH3(s5I'~ⴷ,\=M8.2'uỳ0~(RMG˕pIX>.F8_y'w1葑AֽcDkv:1;rY%{܍Jz;Ctm20&BBƎ(K/3#xTpٓ4l<6R@Əq*&W$}v`=&A4{hw0j2?[P^ujlWUv=ڇy=PHCRkZoIԐcv2}.=h\4|أ>m?.XJ,H\jeX #qNrYґŦU؍ C}=6yjB4RkR(@491g*F_ζՕe@Fsc"W]1CmFonZ,ՀG5oc6߰CL'xjc 84ۯr oܬE(,(W#7 ؗfژ&BD3 =R:c^Z/~5; cqyB9ŗF>Y?>5k8^9a;!DxU~] ӷsr]Þ^B>C3<\#{L kzxN)YxrrM]a2n65Wy l}KoO05abb]ղ~okh/?\I(IUi#=~9y TvQ;"q>m} "Koh?Y· lgUϑ4LЧYt 'l#/5mm 2?×p_ r΁?K 2 Xxog367w OM2 *y j M[=4&󆐘yfwGw&yQIh.Fqؾ-;NvUb O(r֝{ np?tz `wA5pDdՠ[nxx2K^ #n49`*lTVNR5lS=Nv` 빠% \0[N nXj) -u\[zxE@ihimdX4Eٿ>n"&aD*8Y}b䁙}+t]2(o3" 1x'?ꭙ Xͳ9h֧pLq~:oOLEEy.S <uaU?*}Yak$>_/rl|l4L)I' z׬&#%RK-(-w@oJe "PoU6|ǨQm;`]*ʛ݃l.XV.ve.1f+2GH؊`xg B?)j-"` 0ia0ؖttwl/A,cjg@t\/Ԙ5x@lqÉ!ȫZy $Y^(bx XwV^6!g̬Ju /d*1Mֳ̎ :K)Ǿ7LP06"u^/4ot/xन聥:ٖ $nb!33*Nv*直wgXMXM e@X+ hҦ@s?ut tz#ȮQzH]Jk! K/96Us隠Iv5rs+wtp.s.VdOrl34A%y;(j*BP̢maE5Xèe $Bݞ(6C~c_(]op.k%ިå vh ޗ0q``!L&|pf8Aef˚A}zp}z]hƟlvӿv@0Z O7dexke`Kݵڡӄ߆(זl~7{-RLi5 %O\"1vᄦ%yОgdJ@Eh!Z 4]>=C1DzIM8hޯCJRP.+ђao6N;!!&Iу'u]3=ב52NC)gHy^"fĚފ~5YժEޅ}aOQcQ pYl?5<#`16bxM?/J"Ciw?N3S_5ISboJ eZvcf\&lr!wѸR'+maޭzۇ@㝏d̓NPsEU> WNzͤ&U{ 2N3wP܆/QH-1RB" LUk5# ]ݏl`n8?~5^Dq]-܁O)\{Nz 7owr fbK pmK v2ȩ Go^%&05 y agY?['Ρu(o*fKs Nh?,\X#Uq58g8xn@aECy$?:Xw؊?b?3Kh˘o0AE/H O-$ȍQ!n>i}gy9N̐I͞uO=,/36vIk DGɮYng-(܀::G͙%LԖ96 S%9KBK#_j?5H-AVUAp靈iȏĝm9Ε Uo m-Z+)O~a"͡I|EcE6.D>;VtWd1f ZIjc {iU'OX4,dmM CKĘd{19߇vavވ;9m4݀pGߡ+9͟?zj/x[b}JZGqZ>)BBɛ HD ATȦ& H}k6o@Y'I 9R(EG `1=i2dAoǟQ V 1 @#aC_(vltKjn@$a"46Bg jjL]J;q&^pS#Y!rKZ "N .+u)q ?R$oчROgWƎls(nֆ"˜o޳kv_܇!-]Auq 0maB߀8 IoS\3 eP:^i>^o!@$`-`# ۵ }H I=nVdtc3vX,L 'Wjv6]uC|:133 p)ĖnǛOa..I*@H_&rљ)קerA>A s !s܀Gb}[w6$QY~J}qJNﬕR .a P+@? {Ym:kGńO9sj:˅`Vyda苷BLj}*\U_7"=Mڪb1!n=-P6mSR' h ϕېjgD';*7qH:KY&[I2:س.@i ՗&Iy(9\+t&BW)PEKZrgyc"B#Q -yOcEE!p{T\_u{̩ )ެI$?ͬ841Tp(lp+1LDod ^}]_]R\KBDrE+ЮD^D.^(#Jf|k2,GZqSW$ r*R [;οN IpU@+=ScMTQo[!S 3s0er3- 嘘PebOCP2]kJ uRIF?,NdBkNk>Rv*Y^_7M23hL7T=:Nd/mrDH?u,4?-hGv<݃. _oFw{xq"VG'm(5:њQ:Y}uh"Ќפ Cm [qx!خ؂\i($M$87D%=9G/3ܧb{W ^: ԁ9|B螡^B1' (E4F[aepՒxT5A/:QDK OX@&2 >45 0rͻԀ?H-:$Us8"1c lStu/N#jخ=R 3TpȅMPh|Ś>Ngٶ0d# `kڲKI^dg>o3ΛI[kGŗ VqPZ6%nY1}Kedz×Gj ae#_z#2r| PK/Um~_ )(De.XSUdVo-otXj7>[9+E_X?Ϭ};qb$&'g_Q%?18_^7xsOS۴xpJ M#?\)׋O#A/cpM 鳣m/mF59glE L{?CŲ⠜Ir|7|7;r̉o7oɤG8<@vqL]`w3O?]L;#Q]uaU~.PWJi!U:镔] Jf7+ȝÖ~ί'*SĨ&+"D[6a*&UߵD!QU q),(ɀ!Rq Ig 2-oh%/1h"N7D_ncisfuIޛ QoqOPBZ 1m; ѝG z;Q[CT [g@`@KS uU)y4_g陲XG|}bYE 颊.5T "wI=m!m*,Utlgf],Yt#~E$-VX.HJEk">5I\ }/> Q"!jz?TƆo* - {RNp᥂ܔ~ 2;KP越>cCiNިک_ÕYi󖨡GC%E $SgI~QjEo EgnjNxI?}b Y4>Ra 2aEfSۂt$ 2S*i C)jx>O"q`׆{"}vbLЈCg9XBd쇇fbU`3oUI1*dd=*Z֩υ7]O$/}k O`׺ _EѠ "|Q`ӘvtWZNsVaNPF$^*'xr |[ g9XE' SKzxn[TTaJDM͚Wc{Xu#W??EW8f3cw['DopJfZ:%K;Ti⟏:)d%M[~Ò@r"q7M ,^|ӥ2m/zic3;qXnRa8a5(xG?P aїƙX%_dz=B7Đ. yM]jo$u`н蝩w؋BXKEx`H[ϣѓz]VaHO!3b <x:=xbzQ/D`=^2$\35;jtJ1<q*mӵLTD* .ӝI{dL8iiԶ :y˪P& Wx2GN!}ɫj  B^!԰ ۶?$듑_f Pj*ӠP_"(vrHFaNܡ `*j5^ :eҊ_2= O-O*|aܮw@#'{*d[Ǟ0aR0 rw~gt/Kkx"?捷]+C;v7LO88& N'12߂]H4J WL~n(oe e$'?ܱ;+7: $ΖظD3f\.t@;$PHJ OySR#[6j %B^-2ir|G3sx5$dչb=ܯ|>ګ[c0U.Jj uASS6)i}=zgAmA"$n-h4%ʹIZxpyRLf6%໴ywGu^m. adabEͤd8)qa^ BCdq zp/؀+0NysyEAgM.,m0}@煴mau@#ĂogڀHqݔڋ 93>BW.㷛' P QQ,|)"l ³j[?Y_՝̨Xf.`5L]Ċ3,RS{!.n˜Q@-Oysˈm/"P[ָ 4;!p'wESJ>J\6)P W_%O'e Vff,ȉj#:a [ĉ+G7aGLGo$Gq 沴X8ɞ%'~ =Sgs،uD'?@пC/@}O!k$wwk=g;!fYCϢX lW&q2 zUduIx?}Yd0}Xa"zV-`q͢1oǦѹRtmafjk{~-\Y+U8s1pp4fx; hN(o'Nۉe'P"RUKYP GyPwP0) hwvQn͔^ega3\(Os|2t3I:"'HGQN4BhiskRE 2B0P\Gl~ B?2C)"PPHYifJlnfUKpH3Xn5GH'ڰ{Nq ۯX'7kte!ɬg讻<ȓz+o*4{-N/|uJ:GRH|ÛT'#C|^!ն^q)NQA0@VrsƞFb%S7\~ǟy[b*ыw|$S!Ko\4 c"AA9<^B. LA)(p.iҟ<9H?kBE~PS@gBf+01/X̴@ Z <1N|J$[Ji_U}NG7X @M|xA~T2p &f^4#w߾wktT% ="$4fƙ7QLIdj6>dx*),2jOHE%De /}]GďyKy=؟4jџ$@{j$Bϰ[W`*y/CxAS3ʴo@>ae7Dw`p&7ƶ'9O2 YWCm4T',t,g=c,7gCbUYY7a6Hv+0R9ٙv.G-y[molz_g][Cm81x-Zp! uHYR3-A=m;8|?%c 6.P&43-a>~@#|;~[l5؉5Eue? UX[XLFv5nYHᅹ^bB)WsN-ʊΩ`a%W+%bg$y(,ۍ}   5!.-E|Ua̒y1sl&J%.;㫲*߫2MT2P)l6Aٞ %q RO0UE(*0TLUTX5l(Q7[rRqCxHvempzkՁVi.`:jf4'nV ggNL&VQ0]`.bnᨖd>)4 3CD/k0J6;RekU$1<3`J, @,dnsu&Y]Tv'F-Zzqa&0#N%Mݮs7z)V0Idڹ|^)_H=I<9lp3N*0L[:9vCӫ8?(LX!N JT:ogٰSs_d;,,})k"p'ͫvJ{ OC kV-+Mrj5ޮ7>ig8J):5!_QWx=.Jcְ5S0>\BpQ Z ź"75X>*.δ$~St2e%Jޥ*ˬO`I >M0Z׌۝kw,\73=4ٶFvEp2og-=StE ¿h ^fY5հ6 O1+9)up|Mwb1R_bud-yN{CrQ񀬮ۚWG(dv3:dg Վ_ǜ4<XEZ[KVSȷB5UKX&3|1qBNKdS)BSs=#lՁaY6 },|Ff=0mA}Q*sBܹ}]݄90|a ?pa"P~_XwۖH27ۘ_zJt;7qm7pj0~J5 Gvq|Jhq咽RS "Bq^TAM^b; ;nHӥV2K}{)/2t7-c`asq4;&h\vCRNk|["|QzE5Jd&=u4aa#L,-NBb)"g+X0"8ހ9,p?^Ƹ]@o}^cS,ۏ_UOcJ9MK"پŦӛZvJDR>0 ܶ oj94rkk? 'fRyWV֛R*9~)T,m;\g8]kfbE˄Ͽ"lܙEpo@"evh|gš,)& wz2,Z$63#0_ E`k~b0]f2[UM?ƪ䨅 [{y֯ Ԧjd9d rEZ6]sZ2WtSR 穲@3hgm2VNRq/[+>~7F%6$uHp7.= A5c>t9sT ai/{jd I5|-Cm5 ߝ.acرOHnPj=gq/UG\r\ \Pt^`os~|1q/f,IbƳ9'ωaIs%rf:\0Ulj*CxMä555߃qK*TGf] F ZuF3 0@ΑgDZ,WC~8ds9ҝ2K3df#*IMYb=/ 玏S-}FF̋ Oɹ2VX72ˆpWO=JLc{yoKO#WHzn9V"^u|-71 viRGV e?swe1*Oxω۶_}Aq8/<׻ ԓNnDA'ca' GxV߽IHG7l\H~ݝSrCC7AovWM~_ٝ^|}mUo@:C1]ZyXz*8VWTg!>ΖjUl2ew됬@nCҭ&,΋+en#Ļڮm!ʠu';2s[ZTod>ɮ>{4$ܽmAh G"L dlݸuEyjdDy3gy%uT zt -I=̔/ߊ;y}XrE XOa  zrV3޼ѲNq +%q_KdY.h_?:5h=ɡ\w!d_ {;ާZ[ WG:oVo}Q;XZbּ/S 4g)PGX?e~Z*mݳղ4qy?XKly^lXW%oP2}2fFiyZ}w|6mRn/tKfIvn{ZcUs5U9[Y|4Rq۫k-m@!aɄ<./o3 4z0QckͨX)Žb-_<:g8OͷxsLۮg܅!3|~._!܊S}2;`Ox*puZf%'\9 믯lGsbZibͷMnIGjTZWW25TSNvsaVΦםEP"xc2 I.ñhH$&  s(b یЧd2׹Zgd aDW4Ud@ APM=0J 5@Ke4JoBF[늝5w\f߈Is_m?KРy˗; OA2hIϦ@9N ˙\&1iꝎ67 Qsb(;)+eN2 7I f]Մ0+tQu;`=^5sdSKg}*19lgK2>  e{(ys4Kx MՃN5?74HwaŔf=7!HT&߅_E`/XEK7Vׄ>$~舮)May5lB}yKLt?YL R9XnIɶΤ*Zi܁0|)&+ZVNvO[čf+crl)pѯI+@,v+z:Z(zⒹHBVB.r+ĉToF:fmh\CB.AAxKP߭h"V+.W[Oi+-WLLRg"MrHla;ڳQ2 GUD mR1/{%>td`k-TlU.߻f"Yױc <&Rj-d|=8 5Dp1ϸ:̀}Zv碎9jչR7BXHhF ]MU^DX?FS/n̍luQL(RaoPX3/ELx BW=u~ƽ#x=Z/ \ESޔgIЁn %pU J$yjsy߫@+.jIᑍkhIn@myL>L9-j.d:,m%/&?iH?,/?e`p;%jU0u: &ƈ;ѡib/2.~'U&Z$y):\$,bA"q(SZdId%Y A"z -iwb*rO1tРZa[(F{[_~#dt# 0cw&A2`NGHP"ncKmW n\m" `V3? H%IUGSnL oWEuJ;[LMyr 4]WsWٌE*S0K∳dy8J t`\l]!YTYE^杣q/-J<ۓԸ5?^?ạCHi<$ =;ȉ.@L)ȗoq-1'>!Ks>/}cz!JLI2EA'9{f=)[#0n= n H6Fݱ{|P/’Gu9 IR02VΏ,ىCYr0H] |<$, &d !DJ<\a !WjļX*Se>RoUz9T70{Nhc-pa)^X4yQÃhs:C{r^["11_J5浖7>/hnDL:d%}H^&x<||Dnb׃ IS$/R`>hh,9Mg\$UR2+a V.tg~(qq4{EK*=BIێt"C `׀B2ߨNdLjgB1p8 rp${:b bb4&X;AXmڱNZ#S2z1טn$Rҹ* f"Dd#-'=Mf' ic(5}kaqgƹ, _"ޫk 4)(QJU|y7k|oN%L#Y )YgI6DТ }@[G|V)%$-f#cF7`G7 03Sڳ;*%Q6PˉHZ<V;-H_Ͼ Gm}QF%)wA5[ 9CEƀx#R;2Jj"c$ӟn侩BLW$?j{cWE(ŲhL3h@*biY"\h| Z8$8K"Y,:`&\ԣyvfJκNF$L̘#bEYOU36!&T0H-Z EX~{xY%uRU[ HZbko=o5Z(s \rPy8IӔP#C?ОdO: !U5=GgƈRI ~6|t9 E棟L;ݕ֍CE$S.xpnM`]0Ҏ>#] M<3qwTov2tmFQ^j{uc@'z2]dQpjex7DQYǝ3rL 2Gi߆~- }ou蟳G7Z!B >PDgQK.O.H|j31&~ B(c52S`UCuH- KI|x>(ZP=W`lktLu,q~Uђ٪cm|7OdĥLT1/54X<[@"i]-oR %wϦ3bVG `{a݁#]l7twg n],tE!Џ+7.18z A^TfH+,5FlwR po*vcW$ӓ:BҮq?u y` 1/cKi3.R+|i ٨Fm =$?o4AgE!j}ty# xMsxpE ҈kT'oxs2I. 3ƜTMGG8|I B RB@ϣ:D1XΙNrnJS# |dHFf jXjuo %p g1JP\IOGQ(+^: qϑ'7xK $7vnxx_z]G)Qm%,e)8*TF ,<'h+.'#.IT,GnDV./^ӧۡ`SBIf'*H11BC}IYXPa-IBe?\Te&jgYH &C=8pOy.2b Lcq߄AJ@l[ JOz5IJ~aigSNw/i)"[@Ղр,feݡ787ebX|Ѡ1*r9)c.5OtL)CC`nzٸJJVVc/wyKgXҘ?XM"Y,m<tqU3mfOPo tJ>{WWã\ԝ0%,ګcXͽubbZ?3u,?DZ7IY-9u#sQ=EBdF,#ȁņv$'B`ƅcl$~tqm(& AmiaU~br[ Ф_y&G5q jm,j`!v 9CTX^\=B# kM{x\„k*La's_8xʦĎ#rp"ҢB$€$kepG<\'0zA)HT TB%Q)hA}`%~'J&>i}@AL[Ep+"-HfÂ-mY^q~yJb#ٿT^ŵ͍^i3ר[ѼKQ7NQ k]E{Rd@f.DD$dm)%$~%]*ڰ7rAz\/!t#DF/K&G$PRPdE+dēV8<3^!Ȱd&y},ĬwA1 .iJ[, UmɿjAQ[^'5K@rS nǺ1bSk%bgd+HS4"_0%+dd(baAT y0ΏER 1C& 3ERn 5tAóM(Yf]@Gkwn+"HtQ&Ӟ|%[{rBsКzZϨZЦEŹGu8o܉^3o|5:aG6ײB+EؼZO-+Uy Վ֤w{lxc}znR¤wmdMz5k3=_Z!e(0nJ,u.xvyzaIi\Ef=>Vg$k60ǖ$jfM9(0P"{ծmu9Fc UtOhт#|fc $ S]Ȋ%{6xgyA)cw* _]za.& sĊ%Z1vsadҠ$F<@⹂1x9;$'NlVyKER|A#Lآ NBbjН5SViv Tci<_6yZtӷdRkw?u)y[Ησs}K?h.$̯ǝyjw#`Ԩt?P~% XމmZXg%v&4Z&<` dwoiJ6zH8 Ϝt̜ZY*=_3Ȉי%Pn»UPNK=zhMd(f,9jTʙ؜ uBiL|O#;(-S!/ien ?GCfC0OQ){H[b,ޣ1wib;QR9{et%OəOG+@Ֆ]OTw\FE%MPFLƧƾ9dyr\0Qgyf%` K&f-y#1h^mn=3cFQL9N\~rOb:t)5>>>XNR|s+5&Xk^cG|%ʼOq`ԷcZmLR4d^X8y|"өqi{<*(ESuR^-:̘v}hXt4f&jF96S6wR-- ?wT F)\`# L$t)"QbibZaZFrMV߿VuKC]¬z֒rI<ΫDxxI(Rx#1KwZhas02E|F9$1.{dxRY.lv˥,ī·"D<+:+I */Vڡy9v1TCMth_DcO<nWN fTWr WLgs')kA[1.@e1ATkxa4`<>0~sl^~+Ϣw1fqg@t#0 9q|q0Q?Y y/G'jQ0K~n {vx0j]<g"YUf=`NtIP`.A_$/_s/FEh0dǖ7++6 LtZ1m}q$uU%zv'd.6T#'.o1Hs0ȧXZ`Ui,l-朻1&Y92~Lm~H^^^F-1s^8)?j4&^DbʉfV"(T z֜0(of &H\ɺ R1}*gرC1-QUFkގC|K$0B)B*m!y=0F=UqFBi<[qhg Ae+y &}#@ѽ,Vթm+PB" ~fyZa4J`Jw!(KqIH+mq=0܋Eiَ=Zxhuh2N%Vް oaO݁`qDR>2Uv{a~0ۺ4}8@0״]?"LRic150;lȜY1c}'䆶7 %@Ed1IRrVά"KK9lJU9*{\_˒wWueTfM%@-` ,X` ,X>,X,X` ,aMju,vգ~+H FƳyIԪ Ͱ JxeqvtN " elxDxAsQ_j"E=a(myu"Henhh*ZւaX!>"kOm33dϺFC0-;= r*_ߣ$I$IVpq,EOH" (aX!ΈPƯecBZv{d$I$I$I$I$|ڋ"BY!It{$I$I$ e|bތ Xq"eZ:)eǹA@\|{[|c+6VeEkElC:7L+Du SHˎsÚLDLDDD3{_eB0 p!Iߟ+Qj N;{pZVD-~㋛Sfb̲tQf8猠h4 )F诧N? i__XBP792|Zkֺ jjӌkc* 2Ie,)kԖӠ@Bc8E3/WA%7*6k$5^6HI=')TژqL~P!6y@ 1R[sQz'SE^W<]Q KQT=֏YW5VdQev{Rz6A/1}=k9Υ5qf%%J^ife<]*TaVf#LQD͒,JUFmfս`lI?/k,Mo7ZhlQq 0pйR]6pwp{J[cpw1og%-pyB hWg]s[D k[ء[ r Vl|'bǖT# 6,td~g-9@AI/+Z3g \S-OB4bʎ^FWNG >`PJf<'@b<|r_\[5{nM9xQɬUTӲydn :yw ~<8B%__]ω ҫ} iW D0`i3ԑTY,:fΪc9tPsU.Q>/-}wh'%سy@*֝(YQ8888i d$h-$n;!$g,Uo~Bwć @p=Y%T"Q7deQ)=$_<#xH$DfSn >ŴRߗyeHQ3͌s2dc9\JQQIHbNxR9L!VNe.=Kߟʜ}lh#^=٨7#^e9r*704261ihnBw@$QUꊝqI}[T S _bT-S%!r-ʛ~ 4E{IVrȦ3ӕ*M q.c}ˈ}w>af +Z Z_ۻ3c$3`\>a 33fFM]Snݘ3r^s~Ə2Kw;ҚEx"kx2c1c1ZI?Xi08$"BYRUUUUUUUUUUUUUU}y.$i6@D(+e[Wso +B_^08_T "ߵr\.Wف9ڐzFPƯecBZv}_R "R "oqmHhjA2^1L!-{ Q'@w\UUUUUUUUU]3.M5ERx4?1JZk;Ŗgrw|mu:/7gh8;D e\ܷ-P[taX(Ɋi+a9~ ;ZH2HQڏ'Id @LyT 0KjaZ8ֹ D(Ɋi؛7%~r] *$p ֱ#37$iϘ.A9Z%v.WŮo;776QUUUU^U߽aK*Kjwƃw3!0[B$j ڕ%蹀 P^'eq#ъ|V!v:M2m>듯ak˟mvܙ!JuB7LޟKx0EF _ @tj(P vԯ8JHJSj5q?rci&a(ƈfn 0؆tn camRuk/<BP 6(`$]5"@*aYמI$IO$I$I$I$I$mx|eKD2ޚnBZvWOP-9e"|5ZT& sA$0 BRJ({_*_Zr bXnRI$UUUU2aڌYs^>l:$I$I$I$I$I$I$%I$I$I$I$I$I$GAY˚yUt4A3F.)`wYfhhz zN6\m IW"HPeMhvzFqIVTʹls"HfX $+?@)d9y4h4h- xUVt:`'Mg_,-,Ui~{ 2Ѝ'ёwz C? ;h,X`@*Vkji'Toaegq |$ @i@gP Hn1 f7#b5< "G֢Nqo/ͩ $0ѵ&Q;#',ۡE3,`5#¹L.)hx JjaZη& &$tĮ* `[9ll : 0&ʳ<}SzzڤE-cfx|';;_$fͶ4><Ï M0\&esJ_]'>g|vx#_VڭB\i!5ecBZ8m'?!18C2^1L!-{ޙ I$I$I抭Q>K#733+e08mwm۶m۶m}p|[)o۵R> 222L!-{8:z` !B!B!ԃ:W5$I$I$yfffffffffffH$I$If3333333333#I$I$IJ$I$I {Gw kAsy.4K DI$`S* $IVy\Qp| gK*"weZ:)eǹ/@L;I$I$Im۶m۶m6,n. I$I,|c I$I5Y$I$I` I$I$IJ$I$Il۶m۶mP*@""""""""""FP> ^"2VjBZ8x_$I$I$ɶm۶m۶+PDDDDDDDDDDpS13333333333@DDDDDߚSDaRJ)RJM_ZkZk=J:c1c*QeZkSDas9sM_{{?J0l (ujm۶m۶mUUUUU\SUUUU>(TCPk:)ea2)6$^"2)e۠ @$I$I$I$I$ٶm۶m۶Z }s>serG@Z.U:( G( g( W(Nꟴ_9 'jA( p6U‰p\9 'jI( p6pp6p6p6x*GDmV‰_9 'jCrNԆ`( Q8Q:#TUZk~8Q{gNԪHI$ضmUU ^'j姮24 m6DB'aabVp8!B*%۠P2Rn "!I$)I$k$Ilpo\u?0 @i` "c9 `nx4bʎ^FWNc<__|/P Wކ~ ZH6#;@p{41W@!@,@>X,/dca+D"T&펆B=J@btKכR^#RN/2j8s**`\_SK[G--#וa5/}hEZ9~xiKu890q+l`+*-8NvAo7f!r!?١ߊ4ZMn9w9mp4HDyul67ƨޔ_A ޛNjWiŻ8(j%\\k|emYr/>x!z"ݸ2cqp(Y>`ژrC Jt{VD0tYV>o:$[Op鴔9lA5VQi]E1"|-zϹ6Ϸv)vNT)FC J>ĹK3 v:(rSKs+ pPu҂gq5ґALj*;v6ĸ* pa"AHU\G#%jma8!O}a:gi/ĩXIDWՊ1cW=I5[]`#Xj"5vN.ZBhkjj עV,3;e;a'ieU7m4/apti JTM74 첞IE yF2RiFS+j54#6+GDD6 j8xZ !%#B -=EʂLl]vY/ $ o" 2YlEbTSrTUo4[N Gt6_,Ww3P8I޿(L3x6' R*4r J˺)$zw1G>kt ]V01(>P$HerRhuzw}v Ͼ]\=<}$2J3,6O H,錵>]zO@m:OBЯ , ɻ.=TYGsg𣣫o Ү̧niܮ<{ڎ'L"W(;]S(rE%eʺǦ1X^!n]:jSg9#xdwݎˊiَM_a')eU7mrI\v<_(ɊiَAʼn1i7 FP 'HfXDIViَA)Hs IUd:/+e"KJ6Wj.=d3GYZjmvr-릴·cƇb98{5#! KDG@61,l\<̘ѻV~Y=$d&\HQň'^D J*IHfɮnfWPb%Jr*ApTk$XPaE%Z3js>N }W'lTrRᆛ՛_l9rAWVb%JIn^FMhՆy%֣W-\9ϋDve+VYg}d6mٶcׂEKq{'"/>"b="L(1BLJ俻Vb8e/LPNoptrvqu3c`b1KVDDLzd ihDmooiΡS \ܪTQNQ2ū[^H DKG4:8nf-nw[.4W54Ҋ<4/݉K 0Pt#y`=7뢱x!Ad*Eq`eدI Jc-\d ˌ"g{UltL~b/{/.moo(*S BR(mθU Z g7Oer`~7#Q #0MW[V,<ѭɷ|F35^cXr!U+RJ)ZcVRD*mَ k0߄41(Bԅ+٤3^T> k?֣ƻ~g~(;阮6a-w8BB )r!U+>(|}J$ 8 )]}F~N,dZ藒y)d@.*`B REmCJA9.179s΅B!2uNqϮK+5~/uGsj!-یu(D/(ڽ\ͳ܈[x=]:Zq$3h.i-SgV;.{bZ4y#j;sF\69Re?-r!3(1=UUUUU`-C`Lv=뉘'^+$UXep*psLQ ȅTQYJ)+ RERJ)RZkVi{&a+ `ىO6@΅3܊=Њ@:gl52s;Nx4m6sM/=-xt[1 ަklkFFCKy4uIæ5e}Mh#ԻJ.0TD!]S?ude9}GN{׃z^D篻ϟOTta}×|eOO:C:k͒yhOgn'hͧO.ݻF wY޴49)C x˳{Cl?>H[Qb-C!8} ̏T 90P8Y='O[sjB9N }kN"?RڛTH!FHJ}Hɓ c;W}r-j)_gFN{NU auL;=ոՏ(M?l܇F Y]VcWh`$KAa#W]rk-˓b14_%(pXU\19^"?M}^~k8-Dp'+M_-eˢkݰf0q(f4L>ӿOǀ;)w~I9~֦fԬ\e O_n&ڄ_Y7Ѯ!R,խd>Ƣy =5}}zsBC5.LoG~VtΓmW;$w+pB\vG"2ѻ(DCs>AɃ[aމk:WsIԮw)RfkbV\zInp?޷UTK$m&}W߇z'C:]ƟapOo[_F??9f?k1PI8DfuW4<=ő, T|t}|DP48R>AXѤGeI{gr ބLj+,#i|3Ϯu_8)p̅:x?T~^l6~:,DgmC/x01^O@1z_C['M,/Ye'#w-Q&K IkvT*8eX#i'#L}u×aJ.wc2szUzjKř7o'L_TӅ؃%E~/$+9_ȸw,&$unX*S)?27MWhNdr2W7^T'c)~}V}?Q:)KrnZ#]>7*[9xT\s.U˵nxn@2?˚mai#ldN -w6y'V*kQ齖{/bh.;2їE48jv x"bCX d% bP\`6O aqx0(pGō$LL:2'Ohu<A@qs|g2O!q@qA@ÆH7m y@ F8>0BGhԱMNbL.ӣT(mNM12s@/ry{y<ʹ#ti0(VU^]jf옳bef{e5okc3|ZfQ.tO?DFg)<_|i)x*ftbYz;ՇRPIy{n9N`ֺgqrMO.=J5Ѳ2TBuBUJQ뒜q8ç;/@^FAKJEk^-eR7K-GF2SEk$m4zuIdti۔) 쏅?K$K+>ʅ(Ql[')TŌntiSz2׫&nj&nj}L t"d'$'K+!gd4S7|oяVܘ kM1!R+:+]r!Y- X<۴oEgf.&F4 rOX/|VYr>3+sH? 烌7OTzW՝o{=r!Oac V$I="""""3333sBKo1 J)RJc1@DDDDs9|0Vbx>K, .? Pve:,¦֯u)B*`5SF~p72c͜ӜMb1Xʿ !D2@.`RJ)OM+\4n=&X[ slnǰ¨@Q-"9hh$.v^NZB/^|/ޫf5U%ſNYg&<& P5I9>Y$x dR$߯uGuwjAoiYmkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/lato-bold-italic.woff20000664000175000017500000057143414664334534025753 0ustar carstencarstenwOF2  f`$f  @C6$< @ go 9[axt04=<& 4u"ʋbeMKKjuXA;i۶SW@DX9e1D j~)}>02V:oBH|6& U%E(&!aQ≜$KD2Jςl&-R[\R˨<*r+-TEG̋P ـ"xkɚ:ޏE(w8iRPR#I *}m::67pA;B];.RKZk{vϣzRo 0Pp{ MWi5ziqܘ?<$ɡ#0?uýkG( ,`\4EiXÐ8^^k:6"& &(::)M|\;fvFz ѬQ:9 YϢy`~D rBjAm2q%pʚKσ [|ʬD)VQ"F.,_OQVAȩR&.o\~0+IvhR+a. ^cP[&nefeMidl6 ;:5F |8^rU~v1 )Fd2Z(FJ7K3waI.RJ#0ۨc~ E)+RH8S üR̠ ylMbEatUA(v)5-,mYC@@5(E.tq7*/O⇳xv\CE F#7ʠrVl;&mpQ*uzǘ \8G>UѱE#E5kQk;5:+w]kd+1rQgJ0/Jx^殡MPfK' )t2PPC.+qOIٔ X!5E_e2$h=-Z|[ԺB  hTpzp5āXDi:S8.$:l0V %E>W> KyT 5HʘwSx͓6p]4XK`4t1UK_L/6T.1L4~# H8twv W+YLd_n2w?Ikh=4jDxor v`jF]jW_ߩ rzǼԾţ\?,s:ORA%|搢"AJn|p%Svՠ7L^.m@׬Q^nŊzl6ڑZ))Y[jDs-oaG:ojknʣZSo U*,1>'v@mȶS^Z蒏V*n)|V|U8ՁRwecdp3iTgE$' /Q}O0X"P^"sM\j*a ~jT_lůJjt.b㽨LzcX ++"F:{gKi'm"ZJHQJTԼ[ jv )C4ײG|zԛȼ-4%>l-=nլVv@΂P _uRWȧ=*-]WI~RQ6OBWʃO\qKϳu:T:p'e&~Ji('b;gќ(s4kU/`Mɼd5|ECpYtӮɣcz;| 07_y-qK#ǼF$&TWoVu),GΠ6|6qH j[W*Yxd~&.xX@:Z Ϋ4"svQFWC^kͤX6-wz,/:8&ʮ:ﮚ&xPy6mm7X_x! j”›<\|Gp?>} UP~ISz҇. @U UMOÇ~O?>b TPWK6GAA" Ua(Bd2 ĄpcyY\%܅>*1*!W?9::ڟYC?=gJoXyu A^_;g'PO'WlVAgd|JH" )o`7.tn7Vpdvu(:p[0sռL&$+R|1x<3d:(,E0t-5^P`^3=eWpuGi-'̾sk+s?h0E|;v*3^*WyGt~. ^Nl\2C2a>;Y;O?yi ^ ?S~m8UR>g:?)J(CaJ_4!n=&f|hw&P0䯓wՙjQg $U)_NoO)[?X^zW.M,/o9'vJ>E~7V+S[?R'H!??A)OKrx\޷­`>rң/x@<GScXDg? WeV YdOqp+^e=N/,, ~ 7(uFkSTmp:a4F/7A +6@.U&"XJV.+F!^m/)o̹ o?SOE3KVa Țm$P@C9W$hK)"R.QabXb>~Ʒ_wp I XC?N.k X(!؟NL>[2Ry^[)?]q<=/*^+X;iv7Ɇ]BɏY IPs|J*!r"֣[TR+zZOLD']ʂ?qQ7*߸Pϡh`1?/ $і+" N )i&](P;\NdcB$$([2_aW}خsV_Q/Kth [-Q$$cLk=Ldޞ}q !X*$4ĩ6B0+mIIq1-*&6hR<.T%g&:īUyfP23qV=d7qWn _cbcnl~{kB$ZAQ.D{8c#Q~T AVπx wμyZbL**,0.CD95jv{_BKB8AP( uG>udu>7_(o4Z2Z2?EQtEQ(.j`]h CY4!9BEZU1.r%tHDH+Rz^yBOx"x+O!Bp,\8qݧKe/;Ο˲_okXV *%TE?UJ-M=P AL 9 /4(Az_+쬈[dXCc({FF45-? vME4EQ4q~m3EQ^sg%abaMgW1\b$MɊVLa¶ TuhKGi)oL4FN57UEWw l(71l !>F8~QT.i%VXNܒɴ=_j9\rcד3Z F^]ߙ1Dclrz)IaiOe Lk3)at t!tBjoI őnIu6Ʋ`^D0؈0,@B}#~ŨWZ 3D&ĻJ阇tkmeUVA#ä0]<=s8Zg.~Ηyys8Wsxxs97K=:b+&,p#z$0r -UkAH:$,"aˆAA0h0_Lz/ Lv>- ogŔ %8`_# 'vQPҸts(i'IۅM 8힚^ (+0bEQESEQEQEQFh4FQwLLOVf`I,Q zvRO=a?)*"gKZ83&wVcH!0SW':9dR}_PHS.}rR -  K3jc+ p a~N{ 0]k8v  kID\7Uw}DRb``圳6cQ͵\?J0!,xkK򮦙hͿnvcFE~ lkY^r w|nQq5{BLS 6-#i =.M}k ܣhh/|!k !IWm,%]* Pv, ,pسv [k`abk[ĵgO ~\KL2b" IBQPMCajeHt {x06/qjSJ)d<}NTB BխD<ѐ iN!;,€j?~x%J!o̷pV2C :2JZbR4m2Ss߹^ټÎ6J#m~#ż`e/y}FԴ>Mv颽ъ\fa +\n( s^1bXC'szcg+̻aBZ@њh)WvB8x&%A*Vh%DHʗIz5_ ~wzcj4. NxAh l녍1YE3Ӹے>?Xb3>[t=~fj<ϻ끩Y^& >+?@,L޲MHk~L#43Eۧn;ϐFqdk]=kLpM_g>g=+ۥ 0 !!%uu'<\f {xrgXJ_&}2ϽmxxXo?^y]/L&/MͼC  Kb"$> >#>گ3YhH۝ ݊=#rAG?{PTae}"@XQͪ} iFtXqW=Y%*" Oz[rE&a_]SeEQmQ=}Gn58En%GZf&vmQN {< yRDx!aA؜(Ĝ5VC$Jt# YPf6R.=v~ H ڀ"WZ!"E9^v4_2c12'>2޳ J=sߜAd&8˶ØPf/cm%-y+K  t>m:ꟴ1kW:ȉ5WvaY˖ϒV٪Ki9:h }mAI%zB[W1.vW{ HJ)JIJ) dZS*t;YO׳OM&mb=VM{{|!v;͡']_]I]S ÒCB^꩸h£PyގSn$10\+ Y' $9o}PpyIvĊPWW6&PUU kRI(O+RujVwy`YKƲOtS<~W3YOw" YrT')* _ \ӟӵ1jAQ*(Gh7=ՊUJKU?+;n(̇[g,obLZ=&||c I\6!plzTi2ҏ W4Q \^:D}3WY&|mhؼq~bhôlqxxS{!UǗE9$ 5FhQ>'j *ltgOiuXieHt&|.)T(fs0f[3LՖ:bЪ+xX,y_i(\G!f%UY.*7y>4aZzz4! H:|pؗ*\`1&aB0k[!]b2)~0\B l̥AdsoPZ-UAjǟ3_kA@D0s}SY1xXN@"-C-jqW (`idm}NQ1v|@ރf}EXcOo沺O3'] d#XW*.9x;Gz"0cL0!0tg?[60UCWyt+霽"XiAEv˗|܅D':_ʿs/?SOxdHt˂~ZB+K8"hq ~1OxnCV/=!KyU0GWYKX!: 0oz>h _YW}׏dz~(?N yߟ0#s}Cq"+{T5&@`-יy^o{yG<4=>||DD};O_p.о䏗0g>T!ܶfw.J` NIJi^C#VVmfØ*M>?#.82.fuY&aKW=[5+W#@ZTUJ&v8|XQ1Zn>{_R'@=lAG(Ф<~@yT}r@kdRv&GYdZ~f|2"n Lճz((/>LyFv܏}z#'O^͓ɏbGxWUfX.vΔJPTM柂c gёzvpq36@F8Wh`4-V@U 5-q!`߄J%QR `ݿϼm=뽥}@}Cȩfny{οŞh)0{[AVN$ 2HY0[Rtޮ/I,0,εttw5Ɲ\]'2)YDO1ei''<R~ǝ 8K7;_)/zN*x_iJm8)y yT)c愤x\LC ^bD3Xj?-t[D[["g~MqTLDfrFh[ll!jXD%%d6%y֓^LO{ 4`tfw~U7~cmg#ʅL X+d|KC$b56]CP7u' q;K5TIGe!Wr$/b?!L~{V6\_n I R2ּz"neMrym?|+?:7s103b^HfX.`²jYfcOgy<2_*?ݟ~ɳoR+i-nV&l+dPmS 8Vy&xmచ7Q( q1fp" >@A8!::?X`PaĉH^%ޱw5{?C̅;FrF:/{#o/Yf ʸbphxAdey_-ѬTM7,ve4Y6=haYQ5="o? fX(ɊIaBM _p @$Si bs-,)B0$E3,'HjaZeQ/Sضe8ArD2=Lj&{-ʑ !!,̬'OFQM0 HL&/ʇ)";Y"$ fNB3FE.%^5WHynkqт*=y׭=MfG!j5sPKӒsNܼ|Ĝq,Jzc;Yr>4eԒ$ʱCL(B*@&q!iَHh*UjV7E,d Fg@LZ:e"A1 i=uzAlnt_dsGP ]=fgy֢Qi[߽ H"(H_p;̆n2[)b'#wYCFQ50-qf8AzuֈCuyôlOѧ!Q' H~ &0< N&jj0e3.DPN%YQ50yiĮ# e|JTg `cPS!$G{eZ 18r[&!k=$mRӧ/ OQ8Tŗ(O,夵Js"*BXSіMnti)gF\]bܧnmⲗ[XydTE;/Yb X Glٳm`U1)vhԶhpk ں uTΔ-щ@T59 &nyi 1eXU RnsOy a]< o41F~ޕ{dedg&XJ֙ DhYB:c:k}[b & " W/{CrGwBo~ΐYW>񈺧7E#K@Xͅ0ȭ |Nl\yZy0v3])))ꁕIIsw`)ed&섒 GB G-k2[-{qN)LE}?}74 `}63; g]-X0)j 30x:'^z9ƕt.zRДX/5~vɨvO,uV~~\w9ZUTM7L aBR h „2.2k nm9Lxq`:nҊH@d||"c1 )a֟BmyAQ6R D1 )a%R.29PEb B0b8AR4r@EtaBMf\H'&j$R\L'*QU `dN3ćE_@Ű5OV)B!`̅OxL8qLI'-!닅4LJ1A7Ojҕz4nE0nUȍ%k`|'#?L> 9A[p&-&RbtxjΨtHk5WǻG'/\2YݗH ZO],(Ʒ%R 70dE¼+ṟWijZs,'۴%TԒ]Ҽy ԋmtWH){2c'$ sdbq{<{n,p0jY>ǡqWrf\iZ%ʣA PD(Y:$Im𦆛V0] 브cY,u2jNdl=Ju{mg능ȥ\{yDBXrn>[(>`P>#4MT% e,tXetHt"[.'wg i/iziH*80YPA)װ;DZ;R0 ګpb~JɘFt}b{kr#ҸA4NgBq13 ]~LәGLQ2zTq\_f\( 5 RI" mS p(Rf,Yػ_L(10>>ȳs^44oM l];WU;ŀ]n;)ߝ=`0+9+[>ޣb )a9^n}$.N e R7Saq hbx009FM4]?(N0fxĩ7\}ާ$ ,ϗ$ xX] S59>D1S$rt!md$at㌳1 s t'|ܬYڶm۶0JilM6bma]>wfigߜ.W{tF'TNͰQU zf냺1ЭuRVCv2M@ 2y.x7\^<@ @ wO40Db B0b8AR4rR2XwgPA[VN^I\ml/JX<԰fyu ~yd8FV牍6{c ^k7l.l9ţ\S4WuTo0H$IE?uaBv\k4D$%5}91L|| 0( ZM2鞟%x<th8Xfg&J;ܾee7~0&a e0w.tW耾JF30tB 'HfX(ɊiG(ιs۠=uCN*]C;%v:?u(ؔD|]R᭡E)he!<!*0ĔXI(Qj5HjqԅN=41hi֤`mm*:ji:8]C:Ʌ^'?0@ 0$)Lw?" d8h1 %*GfҬi9aXJElpR_ݲ@D ) dJΌ5AaBXc /Gh׉.sa洜Yˆ &̾aX "xّ@(|ztw ZdB㾴0EjՖ1/U.$|l&CՊO}׮}])EyNvk/E5~)EpD0">d@qvo zlTs|Z+qDٖǚ3:<ւ(_ƊM:3XըQnmٝ)іQcOCCHF"""##UƼ;W 2 ֨:Ěu#CϠd1gK|B<#&FGXO&AG-K h$ [AmJ /f2G:7Ȇ*& ):i8vR,0Ǩs?n}^kTmTF!/ߢob 42O#/ !20/bdOW-c>r fV4g`ɠ wKFQv፛77 ]͑VlHzb|կY5=L^hNw ~;ba;ݶ':Xzf[>ّm]Ѷwqay"J~x~MZ$X9vogpMO5y8C(Iŭ+!1(A'()HTh Z:m[Zz̎9nXyY]yqX(]3 A3~w\frUkӻȀOŖE׭qV/IF 1IJ8TiDdl9,]4ܯ[yJ 0" Qd$<vg3|";8h?/zžgګ:w5auTe4)HdXKZu צ;vُwu.lݘz ?n5'H% 71F˥qBHL28 V@ZӴ $?S$n yziB;JwӃT:r,FGLYpe']=I3`Rtcm'h$J||~GZxI{c$XinFl.#S=OyKvKF & Y%4~^IrUBT*U(gGG؅pr "%00-dja*P lBgX2G- F\Py ^OGz^>Q)#P6JNƪjԼhYBq{R5vS уY6B?7VIL t߀*8$~Z tq[ \݄za]1SZM[;H7'8))ܝ @%S8 I耸pם 3zKF, òʅ`"Hᖯ.Fb 43 Qײ~pdz IUSRPT* SwE*n!\أ +شaa|PLĺfpɻμۭMhm>'wȔ#/ (3? O~")\-v~՜y9)i^󔀰pfPXawO{Ý`+W< \O*hT~̓A$JwPl$nwQ(>,PӀkőS?֧qXiGh.DiJ$9*%=%TDQaJ[ӊ+ozT*9LY屖ND|0!,멪`7_== )a9^n}!Zm[7㾹LBpApQu ?/SMw͘ 9376gvc;H}h #eCPdbI8#.9X'$p= ˈeH/앆d,Wgbc1s{;حħhSXTynq{js/^H+@#"S 9 wOVx$i8fț_:ǹ޸JƞoUW(f|o^Y KM2w8g!5WD+< $8H$IFl0w$Mw[ܑ!sxZ/+jc5ʈ +R\f:K r $}F5:NerQ Έt19-T.O$c%pG ( T)RމRJ)** }!Dg!ab/J<$I!I0$I$IT(Hp@x+A~Cf'鬭x!@HQ*έȯ{֪^\Ɔ<6R{QEFTƌuV OuF!Xfn!{hȟ}YS1Jo_  `$2zL3bwe_[9?¯e({_F7\J #\aO>\qKk35W~G5SJ*bZr (i^ u9@kB*(_]?p|*~O{/~gK ?*tʰ%FK<ڸc%|(!xy~oW}DR럟?7%/%[?VwYΔWKgCJK{:bau>wIk0yy{'w?Ѧ=12/Qٍ6xԅϗXgZA&s=to16oa`>EͰ4PհTw| un?}}se*py `H qkmv{wm߇9{JX(:tFuJU!a"1Ȭ70?68?!4|{&O;s( Qg[J =jo`ou rxʧ#Y-1 'rXI [/Cʿ}Srol?eMj^iYW50n%DCSa=SvjCSO8u tqJ9C 1#stX\ [f ffn%y J9ʹ\1j볽r7A8yKQZiOe?+Q}B0m6h컗Jbvxmq=|/(V]X%~4@FP 'ӷzd" jZ+28:3i1[=SH0 )ݕfXnzVIVF] YnzuރGOynūީ(J]6jU^cȄJx?"o9tq 0a9NͰ/f_fU ӲE8<{ͻvss`~9py|hW .JZ!Y „r Jja2q~2VZTN>nj ju`yFcշj??_+!e#Gx=]̴E #($E3, $+.3oxp (Ɋiٗ۷|h.7!1}Yc_X[L('PX0$).I@;ډuk/]a:h\`ء{SևFW@&'xWn37A&пg9_W_4F nn yv2gp؏Kݗ̆rxU.w߯S„>b _H0$S:*`vb.=}{8dF8\QIuPtMjӎbvB"nH괭-z CaX}vrPoa9+}SP}.T5Z:!ݕɲ5 BᲖWH{D>C9)R3s|T RvXds&R%iGVRk/**`'&R!bs<@K[GW]g7˪t+\*g8AF(ɊiNC`ThvB3Eok!&D]K a%D;EDdZQN{پtg }zAܿenuNtaǓnl; 4 }I9ߥT_^8oiKo~_GQnM_(A?)ςo֥\.^/sŏt~믑>'uHoTQgyRwLbf*_(\ͷFL+*r *bNMj#!*•1A%YQ5ݐirؐÇ?ӊe"wdPh~SiE+ɶzsgCvhpt9#r%cx=yd3wi2j9.dhF[(;Ȝe_*!G he10 fcQ!)[|T9j)ףVI,ؚ^%N#w&!PaD)f3.3׸9uEl'w=H|sDefw3 A%2 !TekTTJU)<4r,կJI4w&9]HrWn7ڤkU7zf#H蝎4CL`v2W2" "z 4jGPu r5H51Zm*9xBx\.RmVO)Khs&GVRk:T@n,)FvJ0*P`\H% @EtôB~\et?FP 'HfX(ɊIK&Դx\diX/?9aJ2plvWax^h Y09h֭P]QsΨ)i9Ci3`AYi@ ec'HfXD3jaZ8Nj{ū7>|=ƁyTppy|hƕC2BRkڢK@F.ih_UIьh2[6@*jZ6B:DPDIVTM7LfMٌ0F4K2"+SE 5&B0kkNA)%9AR4r %YQ50-{~xxx1* -xAtSr8b %I IIːyvk;k9vlv3<6a7 lb @&OVιbO^ E0ǿn3zȯT߻FtXYK7 x J3 &-m]weMpbVwͺ lqKXfRcARx^ A$g7. v:QU$*Ы 5qeG'c&f5ƜA2plvWaQ9h֭Zx/^POT_? 3h !8e{D+{}jǹ=<Sd|rw/ „p'HfXD3e;Njxū7>|=ف%9kpy| ".ܐ[LP.=?B02){ &jj0e3.KY@ xAdEtd֔!ceB3 ʫS(բPTDxl@k\8Ar>o'.U BPEն NͰ/ܪfxpq$E3, "QU Ӳ_8c'^zç-l ߑ8kS[[+?5,rHLPM`RQ,)̃:k>#ɱ&䒏')DHUj?ס/ڭ[&wYcPOZj)C)+RmCB'#WՍ؝};_FE$E2Y^QQEW `#ʺ]Vڪ{dܚ^K ciQ]<i}D?h1́?vXu%1M֔shfn-TZR+QU5uMB}oGj7qCN.ïnPUib:^|:pfQ֋ J0(JB$(rXjY ھrG]QFӤDNnus+I0l-жT`nFrAyMRRJ(<5MGHiZ4UBT+V-Da*.zC'fE!$BB2atxRvJp Ћ12d(T1Ylhi-(8]n "(+ ISͰDrI ;?DIVTMFt 5{PB^1@MZQ+&94jfq\%2_Q,6 P^q!\T5 ;~(B0M&s9/<Kg&U]\ȾqGqr d1ƾf##+NRT~DU #($E3, $+.0-x}9AR4r %YQ50-{@R4YH>xAtSrr_*;8<vIk!7Mpu/cX/ "4` cr9]CwM3cDaA"U%;.d f26Ήq*B\y93v9䚧ppXP}h}zssSv/OCo|y\fvo(z~^9%.-E j^=w]Y12,Xx *hJmpw( #!.Přa]纁s˦JIڰn]lM;ukOƟb"@"X'% $MU]'#߆ձ, QshDSڸ^ACcg  'HfXDIVltGNTS4S+n Q`!Ļ1]۞1ÆJ;6#;|}0l7NͰQUD*n Li%+S-y6I4r J2!67.%(URe1 wQcR+HbtO:`S8.D&,g (Ɋiَ"Ox݇O;{|)9:f9\_ ' J1Mg B0b8AR4r JrZaZ.+CI4a9^"\2;@b dXm.nn{uECwlX+ƀ#z#dc%wvqtl0=R/'Sfӏ?3W?pjۚpal `$2zL3b}'vf?үBy>14zH̰FDE MX]uʓZ8.d1Jhilۺ *cY=N0g-QX/ =y'|V4?2[cBR0 Lv\ϧ]o!CǭhXmZH6E3,ˊyeǣ9%㻃M)ffH=xm>L7i I>3?)>y r7s & ²jh Kُy HPișծ\ە#8̓S;q=`p JjaZv@`$hX IhxAde%Bmn%(URLM]f ɯ/kq_bMAR4DIVTM7Lv\ 7UYa?fs{,'rCs{+E7rPϘ'W@::o%y]v>ޝP/,Io$AЇ#h[A)9PCXkiNh`\rWv,.IeAx"pvjD$~%"Bj_385~X:HtaYnON?O%5:$vu7Rܴ^[a Jz}+^ |o)k ssoƝj(C"͝1t}<:6msoַ7~?MPgpD!\(I2J3 &k֊@ aJr zPu|N,"tu]`n[砣쯽)PRR{I,YoUܚ#+ltΥ w,XFꉶ&ƖDCfԗ $??لxn/TB!{| NiֆtljXm@텔S4rE"²jz  fX(ɊiN;ވw|_1:h2[0b8AR6a9^%YZ4S3kO$ٶm%UTRUUUUU YDUlIQH@ *]*},B*+E*jK@Fp܈ KRV7ȅςd9d;o E: APi@B̰л(+HVN "Z$GZ4D&K̋ 4W>a>͇ \C+.B#t:&DH?.q:hsw*nw"xW=!_W]u MͽR{-Ͱ\,^Gx4 fX(ɊiNxn-vC=c1!+\IhxAd%khOR5J*EUHM]<"Jc@Lh5gAM )a9AU ӲC$E3,HdEtôlCq;./'ɕ*F[h`ph`4-VU 5-q!f „r(Ɋ,-MLPUr@cccc҅lNcgAbx@3΅\P釩 3E#iq^k<&_}Gy\ꅇrl-B6It?&D"H$ɹ n 9X{VGb>!BF$+{`)HPƅT"L(B*Ӳe50K}vN'B(9 Z-:$E3l jORt:N圖eYeYeYeY$In> 0 08o9j$=ܦ*jK :!Aٓ_[Xm۶ @Wb䮚lR*o,H$Iv:}{';%+4ݙJ5i)L %ߚk@fnr*v= fX(ɊiNd_q-4I@:% %IW=YBXU8Ṅ$d$ byXkR@Fh'HN% %xH"!*1c#9qŴ樨n„2.Rt@ e\He>$cm<$I$ɲ,ɲ[XLy\Wdn H+M<̶ap JjaZv.!f+v:XL(LA($eQ@H-!2B*miَ݃laUUUUUUUUPU+q?k nwT0CDR\,)5Fg #hiZ Fs~+KUޗL9*oIpK̃1H"͈_uɣJ5eNtی=ej)irDm ZLg, Èу_rZ4k,[1}{$I$Ic1Ƙ9ΖpoWO1n?WCt Thh{1d7vY$?틾վpW:׾H}D,Rh&ݴkiiQ\gF>jKi*$\\m-8x&~ee'NͰ8!{G@f 9E5af.$I$I$x/vH8J%I$I$IXH' $jkw'Gw*%-lMmZ!dnKlIX^rKTGJ3zet %It2}PlWIu)ϯԅu*p}MiR^x&W*CMך>) J?KH,Ð}>=~ґPz^Lmw\_'da Ϗ&Nfqw@ۧzZzGH=c$HdP}`=q4瑧xb7cy@y$$E%R?U)H]Z 7CAFP}TD楝,$@:)淶qphQRZR`#鮹Ad+3\rD$^6$EyLu| Y0; ӵn¤u ׀aBR ɴl/鐠NC[RU x2J3 &-m]Crs s+j6$E3l jfmc'?dc 5a9*ʜupʸʴw!6. ̀Qѧq?D`H,@FP 'HfXNn Liٌ dQ&DIVTM7Lf9n!*wT ɹ0f" g B@g GsYC)0 fn0`+oi瓩M??$r|J.>BdEtPi"lEkIKCt~d+p}ոݡW p=y7Bn[__Z׆ A1 )a%Һԑg[(i29qqu=# @T}Ebܵ%EY2np ~ݮ"v>#nVb8AR4r<DIVT @„͸Ω0?aB9AlZja2]PN/k@ýj;Ǫ5$@BA:HƛO 2yR~Wo]![(7VB]12F:z_w;JEwtdZvޫ~ $7sS5`ލ-A=8s9s,>眿%P$+^0T%jtB0e1;]8M1 vӮʳ9qF'B,Í ?G۹4 [_K$u[B*|ㅤBpʼ.]kpQ 8jbc]~- te"\L.%-#+'_];piGY`mQ1,./0\o/*$KnWMCUӔ)~Zw~ lݠN6;V~?}ƋtJ4|*EAs``@` ΃P3\C]!ya:ă-{nN[]nU7įX,/VTM7L aBR)m „2.2BBK BPxӸGg4;>uC>m dʩDDDDD{\ܙgm#RiMv\+uYJEl@"ʢ-BeZ؆2 3'I|ߪ9ߐD7'WvxZGu%}ԋh+N%R[mBY>M1砄jyÌ(P/iEZKsw0@e<*d( BP P qHŹq"HfX(Ɋiَ/T<"!Nh/#t3aw?["sP@Wd 565u+?Ʈoj1䒤xe=#7< &*VXihevB)5(BcBj憇3R()ѸЌl> j PVNyvwNMv~l*2y>Z}kh)ekj 0ɚ<չB[RIMPBݼE覡z:gbM;@hpz()1Y9CrlF}SyEo5dsc ?"cJ&ey9ɓL`&]vrTBēVsG4e3vNQ@}ş\ p2e"[Cl>XظWYoX%$`҃E%gj6{Lh6dM!v,)H@2\l`w&j}XhZ"p@`C!X8z^%@Xa# nt8B/z{~F{y 9lg2(A/h|U(;(]rz B;2!+ΌG`=P`K[BIIr.h'ӡYDX6R`-alHǎzw0}؎Rߗ˙P05WA~Ԥhuh^R=k7۳uex-Y;dfٱƜĎ=ƘsH24l?3PD!*Z>4CB pxXS+l;DJN@-&yvz)CMTxwϳ1nKC]m&j?:Qy2(TQ[RlyvK r'7sƃu@qo\E_axafXD;%WQ!P@ez% *jCNm(xU. ju}{1ʚ..^ZǷ~O tn͢ \BiY|MznS$pv`N\1?v&)„2."!A1 )a9^%YqU-ݓ Ӳ2 (Ɋi9*hxAtSri;6./LP.@ Iьh2[6W7w?WQi"m1ΐP]tFlu1s߁  #($Um`4-V~1ߨ0mjk/vi_}H7cCY]4 >HQځp*L Q[OPæ5r(-i+*fR+$7\pݗ= !DslԠ4!:f SLX 4 KJhǠLfਊcRx#r;kƂ'TCoD:wNC938˲QcJ׀d";ކJS xI /RRs'#2r۬r?nc踵jmG9cg:劈N۶kK.Kt=5O7#jq "/'"vJr'm1q_20f17[2Y",%2#FHF@uhþHƨc^^1LQ^Rt2͕#ŋUj `5'*" cMѫ/ԁv{! ۹2;CNL9iF/c/׎.犘ru{_կ Xא▔0+SL7P}|P:9P(v b )TШTà:4xhhhhctNH99bag2 {7@uqht}0}"KvT4ژq"hSEAX?7¦R@O/5}F̡eD~D=d`xTCoD:wN<`D &vĘ"Rs_I(3Fe?@^#}  d%&X謹~{fMB{A7 <{tnoWS6ftcÒnMO>87%q||=\dcnLJT)R&TrYM3C"AR^3Jo5ϻe807 M3ئpڲ:WzzAkq b3l>3n$!2R%|naP] %/huhE3}&-nꗗr9[1H_$D-gf62^Fu< .)u3rV@~IH5d=C)tlߎƻlq.W/|CV:::z46Zs=ۈPW[nR`C`\<3`oKp0'[BO !*sDgO'>GHȕ"+IƏ!:)=֕ & A`\d޵zLV]O  ŧWDP+"SaNxYi\ 8rKIgba+Jg0q_5ڿGÅh&3緬42ԟ?96ʿ7?  8+?kѤp=ױ{ejϯvCŠlXx й`oE(tC|d`(8n2/_6g1pQ 2ʬ.S3^_\ YM5 _ 5@r{PDXc= wp4ֲWSR22 s {ȼB9j1!:Qaju̠3,2{XvσXrG>l20Md}[߾`RMH YdݛzKy2>&I;LbMYs.gA;'\%0H/,ewtɸσ.t1Is: -Pθ;^rX7GDP!%22 cSX(@mLѧIՙyIS.=tkOe!ktƂ59-զeg938VbPݐ[}IͳczleR (1}%򇃪 P_&ED5ꋌJpsWUNvJWjI`8~6SWdt%p+Rdi5yٶh͸1lw/m)O@w~py8{xVD(A| 0/"R27dLlMR$@[ Ls9hVB: *$`l]CG !"tJsToda!' Ȧ>Q{D7'z|1{/P_ ;PHNꔽsi,G/g#iu#i / F8Jiv09.Gi.3:QIdR̡PPA+*FCub… }o 0E*Qޑ,`PAnoS>eTI qA骂j eޠRa)Q\Ujko-.OS)JcU ,UtPLjь=Hv.Ku{Lk>oW` sVuTbEljwXjaП+B;o|ѥ,rƙ_[jɦ7)7`WL|,Yjm\ âQ+_%x)_4/m%` էa߃T| >~ǐXXXzr+-F !Co Bi HS٬ZS3aQM# 1u9Ǒn zi?hC.f.˕,Tѧ3xI*'~!N&5cA5@3V+^.sy;3*67#bdY9o97GH;l;_f—e eJN?,5 0y]L ANq*n )R0iDTF(cEBd-Lr 0,e?@HH@&u!C J 诃~s?Xdy`2z@rlmDLh`e V"gs 5Al}=z|yAq HTT9Mu[sJBRR4l%+I9鱠aINWϒ t ~ TFHΐMhs1<@.B5GY6))ҁθ 7b9iQcmj,i;nv|mD6>ze-AN`"Ik+I/7)JnQ*"G98f|[VзCYLUaQOQ$XMF1 "NV^tUb{J *Đ3ڢt?N(,t\Qy0dY-qܕ|s%$+&=d%>m/!W^?-$p*p"mo31 $M6c1(=܃&+؉0>,HȨ(qxukJ"桡^չ+t8m":$RJ퉘_H?yÄvHB&ʚYX9*$gȦ+\?֬ 7HGo! A"$BUw cd&t>.4i L&1 S>lr)偉 )y9wK\]=Fb^FD}73м~> Iѣak­pk3ӣ!y=:8jc5Y7cgoøS=g]XG9'./JerJѶW #d Hf FbPQ5@PӲ Y „r(Ɋچnr\$R\|Zن@F&dBp%l6x uV-Xk/^cG[C{l%/ԇZk;9ItG><\UFL%0_QQy&Ovy '?`~Ҵ'dҿ/1KYJVȯ}D?fE+9ٳ_W~xBݦVnfQm~`Sϔ:xm[ZUV"70WGJj~A[^ǓQTCH o.4_ VR&$=fdzN[ʔˆ"-2bĒ!PPh e7~&M=Bhp!²jo}YʴS47? ់|#dd.P\/zH>WiχIā<])]9KxVLsg}wAsL%הDL̒hcc*#0<> %GDDDDDDDh1LrSX++-+e4,X& T1YlT ut x`"0:XgYh,뜵Xt4tF9tuS`Th0o1l]l}Уca;ǥw*ȱF{~˕Z2< ͥ{PzGzuKqs&q8n+bʀ e;oi6390t>I!%I IBU 5-q!)fVjV@FNs74Sgd9:ּ!Ϗ2w{Rs ݭvGsgu) ΃oԻϤ9τ2+jheV+&#CIlft,x!$Iy20yЄ@ҲCpAく=t|KZ4P`*tCF!x%s 3iJRFΥ3<>Un A*ľ #; Ib#ĩ#gm{-y# cI`ЀSP~dh XĻ'6圈>qitn>_?Z OW L(B*Ӳ=HDkBӏOrzD*0b8AR4r<DIVTM0U>yw;Õ/`h1q I)iY9LVX;=*~Q2 CƄMͰHdEtôlx_drIZ7J, Nmo;]Ӧ_JR^Q2kr ˕R.u=$Iܨʘ¨^v}Da#+zC/K,sĺOzrSZ:/Ja[h @X196i!L(B*M7DPƅTz92Ee0K1 Uf(CC> 8WBWK]lavo3LгؖmpsA9|!@j,QƸ*QJg}11c8AR4^9Vp%):癍PF$Yy_Q@"L(B*Ӳmnx ;#EeEjQ bLäed>tx12Jc@Lh5gA?I IeEtôl %E3, > f@xeQ+ ߹omr! !Č`SB!B!+@|ȴMmrf~[sW~ݴXuy0o 7c_7׭4n"쬏uwѻ{CE:<<ސ= :U_TVxR݃>МT݆XG\pҎno׻hx9@@^ |rf?w L?lM`-SkYA,*綼=%}ww)A woyQ\9̏sBI ^%9fDT,n By`n"6/%4ayd|I~Sr^M4iOkO ̛Yћl9777 7<vCL\?LPxA(d? 4YYxOZd.UdB8)8?#{ }睆Sޣȯj«'Ï|8{[N[| Ǘ {l@ ]h08k`RȆP$;lYgSߘ؍#fb07|uiiRݗ֑~ k1%Svi)'㿃A!$=|%usoC#M w=7]yӊbDIsQfMѬm~'c.`P Uy jaSX ¨dr9GISX>X0H߃iaȵ%r] S7¨f&e?C:]յBDJKڸă  `$2zL3bODVڇ.n Liٌ 2sN{~KHJIcFaW!%LË 1 &92kF&v:ǮwﮤঀUrtn;ߕg7~fAO9$E3, $+.} ?ƤEaig6%Sz߾3 R?CPNkUNP}$^Ym1)Lt >wnX@r|RW'۠.?qwUO!kxe5iғ)A'`ItT:"=vE&A] 9Wo̽j=t_0Eх\%? "p>'mj)%kb2djwÅM;vowu ,Y߇H.F݃"{]P{M @&kH$9KviA>Uivt\d \)2Ht/5!1. y,g'K7FeC;\roȌr=<Ѱ/C=<~1DId ?,r4*G{΂34಻!V=*5'Fx#I=y6&?צ0"$8t /J!کUQG!d0X=zX, Ec0d I <*Xj{#$rH ˳K~-|;E~߉G,ߡz7{ SHac'&x ^F٪\b@u.Ÿ bR V [D+Cu =Qm숐o8ޒ58h!#{I(LǚnT&7vM6mڬ{r}ˏ)S^#{S"ЇĮ#[Ʋ?Q]?v+gi1 ,;#K`/ LN0FI I֐ZLlI2%,M ,Śb7NKBtau{C\jxE_Dqh3I\5r6Jvl,u` XuStIrm dd[6U¢Tp=nXlb8l+in8YeNm7j0="ۑ^UV+wvu- F4y+-VB+˔Vlϟ{S'%W:] ӥГ1lćK5Oer}ģ߸C }3;Kn{r6W9on8*׾z+DT2#kV 4&q!:9D1ڳRFlI (Ɋ˭j70 !a0ZUUJ$I4V.Gohri. HHH D_yc%{CIqһ ysỾov  a*ںw0xGD3pVN%0ᘂej~l: q\Y㸓38ԟ3 I[1|L(B:c`phxAdVt ôlLhx@$JjaZauVR#14lTz AX~P u<%x>1;c|ex|P$HerRhu`!A1 )1MfH\z~nݍH]ec+~a/?iV׽(26s\q@Ju*k :w 6c!fw*jpXMP&U$+ǚntj'.YnYUmӁi2J-znHxtDKS3Rl̼Wl=f z=p %Ppz_%V.<;~uӣ{1aqޱ3{[kH 4=!]p Yp^ E10Ix-Ѡݎ(#O@->xrpƆ + B<\[9aU`Ρ 1<\ yO~G01q:'0RQx E8EđJ鯓B'Hu4*!l8A,o`f|c0KNk]98Lba֙QS5`}!?ׄrЃĒR0>"y“~ulҳ/ie:( D_LO/SɎj;OMjGՆ ',>lH}"#ɶg$v$+##zB:Nِ՝Zg5 uYrld6)yq++{\wy_%NA=\qg@č.ƛjpI=]zj/"2w^Xmi5+V |5 a C7YAy,QڈB""""""8̲uSK^.I6)q`pj霿򘼗r> ڧjD@ϧE"G%өF2Y :O]:=pxS-!i=HB}1%q=-~ p8/"h:y.eed?X> [Jϱ!uc ,?-ad!i',!Iz7 `=HWPMb C1$PTbI 'rtMQL-rcOIx0*Tg8HYQv "8$dJUE"%5S2]kXjEzGl.n4MCz d pOu6i^9 & " -Vx1HR9Q7;sW+G$;=#.pVF>D腻ZB4p"qkro_JG~DsWߊSE1T\AfU5̭hg%=?[5-CHS8BS [:A;Swu;J./[t%0btZ vS/aɦ4ȏfK2}sXզRLթ=Rы3L8WU8 a[<ka x2ZWю${OnG!dt(Zř10 xDǪsG 0ը#0%kb0YE͚=u0Xc&+j9HzBޒޜ:7=q6ZQhk|L!yZq4M$w(vd]$s$I I$G\!$I$Ѻz[&JGd/.hKN iL\$nnBݻ`i C b qo}0 Q| }VC򮗲a`8L)FaJB7BH؆7333ZѾww!aBpDg&Cdλr &pP2W/Gϐ.(3&kfa;6yщsɀ33YK8ArR+ΐBvMx Fr=j/քjaZʸJi &q!HdEt㩼>߲2RI#6 =ѓEI [z CnQGYA>Bp!6дlBXNͰ$PQ5@PӲ NKH2b|5:!qۏDw_s#jcx ń1QSQd#O LٺP+J{{b>a÷Μ짳=^󽸼oԿ?QgDʾr*'*5 ~f_fv_wy]??u~5QFh=P0^ ],ƱӬt HؼL)[vJqkonHhi^@;.*n_LuO :T,Dz" 'OXacPYJi=֮ԟ𩎾SK}h~dܵk,I (Ɋ[NfWo;D1E3ޭpǵ kJ͋bGHzhG3/QTM7y,ż)aeUӂ%}wދCw=(}9;JӇgPH**^AVyy::\!SZr.RaÙ&K <DWou3^wyI'[kS[kyS4Ry9^SªYvwqגz!#!A@8I"#b ?=^ d`w{`(S_z3[{nDIhxAd%khO NǗIT>@ +8T$E3,HdEtôlIQ@i5,m_-@ΚT`*%F4.hDHYg'VJCłH1<8R%ԃi $NԢgŴJ`b^2(@Գ$UL̅#35w@$-Kb[({6Cvyy;G= Q~෺Rmu՜V[ PRĵ %3`ΰbAϖS{V)u +@f`Z5pF/A1FzJ +2orwg`hެ u (e2tkoY@fb~if;P{D6^=S:{pq5f.e[b끄Fg&,r;[BP6d e+_͒ߑ8{?x<9h" &9zf2N>;$Q@2f:B%]& -S}vm ~--E{_mm^ .~[l!uı`&IM.{Ii-(4KW*o!셓vj80Ai(`G5;}844jʥBiLў8C) 2]%pOkU;+:.`{MW3^Fw^p}=~Ӭڵ iv{LW&G' rFj st LpBjjm!#a:Q@`JG^Y&r_ 5U#=ĥ~%qӏ9}9ͳ8xI&LIcXޔ x:N7vz?avϱ<Cbb|n'}wKăӮ 1.Kͨmaf숞Sq$`(2Q^8цB _hԡ ~18<ID8bȒGA{"ɟBF H  |YHXF);eB(83 4+ ZpCəg‘C~`Э0 G1LP­$=X$qʜE8_aLme\2\!U~9W!!9Q!I4qFq󺎺!qJCwyLNTQؙN]_ F._A\ TRn5HO>ox$9e.499$$̏iEpp_2Gz?Ķ\$Bs3Q_s`p@CMSEw,c{"YD?WH pˎcn.{kR.Usf*j Sȴ?v8qoFv򍳹oߝIs||0GhN(PsrJL"~^H@(h]$#xaKYnZB ^.c*%<*"%+`\ŚG|@? P.R  6kTQ:]{op/+t+-g#%p;}$yk2k{V~.X/_Qof)E˗rѽsqZ>3Tld= Q M(5Rb4m^Q-&r[X:DEtwDZ9!Ɲw 6$4?LbО5#^HY<^0(Yq -$ VM8t(p6潸}^ ^3%3n̼̺{쒈`%޷ b1IûT>iL`""rLMasb)\G8ɧXVh$x=_z':a1GzVx" BJ )8Yc0m26yٰaer5@&㧔} o&[1W Ɋj2P/bTwD'۸|n꟬4r;f/ȭ;MYKuؿ vFFu@hNx`vn%4!^4okQ}^Yl6K&m kR5sZ:0Tۻ3qbӥQ[=RN.\iun!!<[n`YH4jLј!xaRRāMa=}'L8d3wļn ~?Dks6G?HyGl=VV>ܭBLmB;5V\.X5Kbsw[δSⰩlL *{3ԙӎ6am@@ , j󴺣 QEzlpFzrp$겮4u=K*=6C74&K<5ؠS >]GCDl)üYEt859 Ix:̲tGA_W}ZD.EBW{5{ͥj'o73m29VHMؤOd J7Ula6Bs$.A(># w|; WH&YLlSEWv^mZSoZʾGsλƢp$۸S{A<ܣĞ裑zO{&c:_7I VJTس%9GX{jQ[ 4W<3Di[ZlF{{?]9 gv{vywm-vjOWm44ZNXA\YDNh]A|$sX.~hrgb^_Hjb/qO (],iAUdzkVx9w~d^c@bN-`;3f#|D-"zC>e/}Z)|<ڏi9v('9Is$*ε9@'ƗCbZ-x@A{^pfۣzϛ+0X񢆮:ېJ>pDTs$F/Pއmrke i VxaCZ^"^Z|s;БΩIO(Q;{ ]0[tk&]rڅIz|ңvnBX x7intH'Zw^]GW3t N':u05PN;ckw);(%bp0aTF?n"kyL{AVwqϳN+ 4SJߖs_''ݓT)_F\Hخv,x%P|M-:=n.%Lf g@Plh` Gd3VGLyPB+K>Ir0:=ckڐ"P>E 9(Tj\Y[3qcG5m 3[@$,T{z:rOb!"?|{># @/j/RyH9𵶩nj=GJf<'"'#``0% rv")g,~Fg6L%qגe-u"v=H5eJj>_fY;1J vl.šhD =A,ɤMhr>S98HLÍiQFcqmv<̛|SoFC wTUn!NV{tBs66 =L8¯="j<~tN pb3K4p h ׮9](l>+np9]Tԡ+tL<7&=H6a"^#H*YM삽|Y[kO`a246]UCW,L r&n3m#TFAtqJJ,p$='IR-I3L`V7jC]ybq4EPiFkЉty BEEٞ^Bnޛy@.f(ijiGة (}0H^8^婨TەShQ 225!#L湐Η$TRHT,042tе[SB|C&}kи_?jnV6v&{G'gW7wO/oPƅT/ZbU'ieUB@еV8#,Ģ|rD(A1,k@cx@bQXEr$5$Vu&q!$ P.#yd58+_6c, q=GGVY={7'KFP !1X!PD~ dX9By&q$͈ T4t dsQ0T:04#͑̏xD3,Ob.O"*`I ZBQqIiY904ˋClڔRS.r]BPưqĕ@b)K+*0yWVLIRdU]"gp nyŧ|f< -j#&ۄ#EkFn뾧|$Ap$EIVTM7Lv. "c5m',oe۫_Uݴڝn_Uݴ]_m,Jŏ JJQk:HK2BR $+zUSzM-mli^m?y\S#BBCKGWOa9  „DPAe#h(5vJ J@`n S. itlaK89n"j)5Di-E$)b r hJ!eSie݌ V6valwӼqzqug͑eZaZq{>0[6re;~s(&FqfyQVuMrWjbʥ6r6.9;<||=9ʩt\|?O?hۧuk̯q}%а:ffK9~n8h)R3m؟P{.JB)Xj+VݕW'?Z_F.^7wkkX3k?fo6P+0K-p+`#ŲQikfc\ukKl;?y9D[[K"v8B|r>6!{9U76wZM(ZZm=*!N֩5ZQ+Cy"3U8?e҄XzA]s]] Sucpl}g>' rߘzD(.:*܂,<ҢI$ȖRz9sKŗHrAAf.pTHQ%I|o.rheTB%QQR c[aZlV;ccNbӮyOn)8Pat&ˇp$'tFqOtH?JiyeuMm]8˺yc>߹k~2c]r"#+'7/q=/ƲTXefh muz}};IOyCNk:9}.r;ui_׿ai)7C37۰:"MbNKq*M"\ةOa M=ޟo\/)?]_QVuiw~(WzjeU7k-Z\Dk+wC7w۰:"MbNKq*M"\ةOa ֢UE{/@9VPqZjX=} 7d*5ޠQ`Cacr 'r!ϴ{"iCk^ b+b}yܖUWTyjPs[jxR 6h*n~W )L*a&Lii?`q'xN7,1l׵[rsW_hfquy{8ͫear]J"(Bul!à垘&bQZ!fuUhLY:}4?Nh_[ VUb_ @%~B.BT/d;Cp#8($ Y6XRW`wtSbj}dt4؄J;M1H=OਠgCWr ;69~'1M'Fwb.ӊZn4cbڍV0+J`2tX%D:vC]OM%-^ qs[eqȥ«J?i*>C IOW!-)'s(#7}jxy>(&NdDxY V|AO(#j[:># :pQE-v<\$uMbGa8ɕ>MN@-]#:ˤn,ұ#t'׭xKi3 D{7,j\QJPvUȴ.T"$Oz F:huѶdr,I)-aaI[!^k]˧qNr#C%dϖ20%h'@^$EzMڛo&t$,cm4`f=\joe*Mʭ#ˌȩ|$4vv'5wB=HNM@a-S+$Ew;s¦ 14Ŝ% :!+Q=B IfEK~w8&pq&OܺF4#R,̦@"ZxXq].Sݱb$CcC({$lC -y&mŞlvÑǔ =!GplUg-fe$Рt5J| |mxT+wNHsR Za/<-a!m|S2I*FX%'_X՟pK\Rh=cJψZ V M@v=Q©hnĦh˶0ȀexGî^+ޜ#{c%#q/l[R%0>8m5ȷe\` q1 ';o?y}Yu/S얎1A}ٜ/)ջkwu c>brr?ϟ1Kdq9mSa:/LTB"XiK]גqIQb.YF[ˣ TTkő}li<ʘe\3 b{ ]Q[#%i]$IHdI3.T,`*<[^$ {\_5Wm>^rMEe |HO;h`b(/}F5ʓ߿|mN 3رPQYs6l"e~!tLW wۨ8W;/0 *}r) x)`SX^o8k2Zn'EDFh[Z#]ZHs Ж |.In5B;1J5R-yJP*o]lqS(yZ'47T/5mLLVjƅR'ȔilF'R87v}6٦ܙ4Phz )5hMCIUJgO*(m%rAԡ HLSkKQm]"t :B5Ts2T<\^C%46 -j}+餤۶3xC{00xqt6읋PfAܟf8<~@V)^{ k$ގx]ל9ubg8zо`jkk&L#5@@t1'^Ad[=H&Ks}8gR0KCe(q"xd߄GL>9FoH.ç\A) B3n-ɧ(+$B] ;3'NARcD|6%j\nM8hR ,ND)J>GiF)51+>p p0,g 9QȅsI)vW)A|%+8W׮x^ Cy8Q媚)0wiW}{?G3pZ ]}(өL m-CuP/(шHy[ϝ~Vq DT3k4GÍzD3\ F彸U4LtPJse]z:DI8T]WqOa#Li15sLBү! 1z?LzOoyL" 2MeC?AA=\2h{A~}7x/[Ya9u㙫j0П׽R:1W(+7MMNTkDϭ7 etVDѱ`%֊V,==V /ۮHT*М .*|ˎ,ޅq:q0%{cR#ՠz  e#>*r$^[L.mK{בGkso۹1T7} Dx3/qLL`Bؾ끐AQ_yNA'd@Kc҂ R\t?28YdTa︃q=J??UF5ݽ0]! wQ^_^g8b%A5H9~ ?,̊>4)^p"s|~lZDWHspZI1((O< V:!]Z#,79cA˵A*.-Z@{ΪES}q=djE ªcXmr[4?ԭ1z/*/ =C{?^q6{7>ԟwЍ31{GkFYtMtH$>`wt/Nqszu)Wŋ=lߕbb~<ԭ`´6Ń_/&H;OuSxlƭ!rz klj N$-ٽI"ʢ۱}n0ړl$˓lT䎍yN.{ϯ~X-e v & Pĉt \$*Z18'dˇs9+sZe}8"Յތ}5>o49U 'x% oa+( ICY(E6um*X)؂jiYT즐4H%Ͷ*n;Ɋ*I) t`1Btߤb'7B@G܊A`pC=}L*:%($*N՞zZ2y`7%ETZ.kuj %kUޮ%.8%(t-HI˸3r+Ǘ.2„Qi6`F*ODzqv.8FԂBH};r{t!"$6I7_x!0N3BWYͦș}RTx2=+FeA$A[ Xk9@! rd,ȶx-why9.86<_|pk6:G?-&w:ZgfFcXEΊop ht%gǒ_ OA8"kCy$VWGmMY F*4:Z5~l{qP;;Юvl95| -nK[$ьٝr W -0?#KAAe [3п۝n?a &2dSM7Lz8Gsli rؠ6o9D]zG輚96ocZѪVֵ5m(O]lE-.l-e J/+, H2aDfb382)Zu)Mm߻(37څx` 5VBig?$\yhnS4P$FR4P*JXk6ء Vn=x:=j! [v4>>BXE?#i1-Pz; 4xo28_T7hoOVmSlM, z\-F8$BI,Ut2el9rk]D>T;SBgft-# o tO/95 ]\\fV6v!B{%HJF-gu,XhŖRV1$5ϓh{oUq|UZeU^UYki]ڤs[֊VѺϧ~u-U/碶A}MMیu`+ۧ}{zz7Gwmq/U{*tw[ɪgjR5DK$ekOM0q$[ ݑHi 3+Чz '*RUsWFCO Z:jF!'x dX ^up'+wGcqib}NqEn=#JzEpH }"ݗ=_xaBE܋Q`diM,ACh6-ρSC@A ˂c(ٖ,0ͻQP2ѢېI <i$ɒcir7|VXkw.7(LyXi-v'I\v}ONWQC +|nF'WrzE͢,;q|.nd`@;b$iS@zFeg^vNӼ^_g賥uTTo(9yE@ ػ>5n'd>MG52flW^Omfi^ѯG{Vw|;ȾMBD纲SEj9Eli:26`ܼ\TovdkYBBn]݅g+6.dkZv^+[_E2YjL-J?$I*Z*{b%m-CH m=G:%Ҩf91ΓeNi";*q5V_u1m}W>VM/QWJ+ iG8JW#N::hVMS}w]SuJ/jO<&"JWgL(Ҡ )aڮߢY`ϝ#M 7͜&G) 6iW*徻m}+Y4+>v*_4,T5h~$>tC+KUҔt/ `K-7<7ug9SnͭH—6n@(,LgqSQ^]$G)QTiu*SO{M߸<  xdy$ WC@8][#x]y |4/@35!;C7C15>ڠKW7{FVnv)5սVYxELLvU_,j(foAJ4TPN%X[(&],}kN::+9nA>oSm+m!_/yG ;j8FO_Gf{dk2? ?lzGfa$YAQ*@.i{)nUOYŐmZ0o/bTo?5ܚ˺ _+=s|Dٕj?RYSQ5UK޸A;""%;̷g^+O, žxq6qswp O}^:0£q`s\wޕ[ȿjJk[;=@ k y9=^}(Gt{K> $ѿoBOy<tw_Y5|] ~[zb4 UmG.H1e&/ao'#hO 3C-BCt\ERz#_q#O Y5\#e?o@Ad &„&l$<5o(P3LHTb~= la,Kb0E)NIJ$c)OE*Su{>Εԥ> iLt5Jwz*қg Gb+x&2Lg&f.Yb?Yy/I,o!ٺlg'W(9ir^ UU[\Y5'P3Cّ G/O^/lՙ^XgnShE%UAjpj)jeY5;Zkh<' Ue֔) xz/z/ ?Gku{Sרj-\PG5B4[ (iFhCm)Gk0h{3V[vkE!N$HJ,M&8 BP4fmKҊm[֎rmiG'Yg9yWa ֛6(Ե 6zvxۿ_6\gYos(ZhVmWaWs0 tC؋͂&3b8ARtpy|OkU& 8O *΀,vs.[ 8]^)rY56ϛ_~dIYyXҼEJcbب$Q.T5Sv}o(keV+^MS+o=zR,WeY@!Rd*)RI!Sl9rWPZE2xPXa7_a=7gL6"Yj$Ų4J-^ ?H&Abw}I,E>U2r s\tp|XC ydi\V"+9C76 1|,ce ֖b#/a'{qGkc6A.qP pψH/h׎9} 9F >Q VTX]Gsi5Ftքٜ4Ӣ9k.\*= +a; Qk G .ɾw+ 2Ư 4P d$  EѱI;~܄<&E`SpШtJZŌ#zD )F$ FH֓fs.rE/bQwmn\9e˃VXuj4VV#  4@H%F/J4kbB0t*3yiSI O`RZTS1J߷@akX:i~3tÖ/fc&7MmzC9e=vA~ܷ޶ c_jVկakZsPiOe?g\ŬV%G'g6}or^8խUDC5ve {&h\ ,S܎>ФN7qޫFHpHOoȰRN"WKИ6rA4V't/(tWwG}}%\TF hE)zlýcjc,IH xޚ|3=L@`eW a&Ufq>㡱M83"OP(=eP8 P)*>uh螬 +d`k4PU/O=,x 5ڇ87O.R %٪)"-j3jog),ՙ o&a;YvQ'G_ߚԨ'D1U.4tE6\@oAs)$OR+jyI)JS<\ lzVc:QnPmKW|9Ownaoq:b(Iu O'iH9 V8$YIsvHք'+B`75!Aa3m1<rXp:|,})g<2.Zy -&q ҐzM&S*-][GzDv+rP$r յhv^ ød,İ.Y#9?; {S"} +TE.lMDA^MqnA~]Z@`'P7q'tz*iAP8ܞρ?hfP-+^ B%%6Wׄf51d+Y%dӻ(-BRPUQY6͉&!Fܞ瘕A@ */Ǵ0݂I\8&5L[f (P=b>S&{rǣhB*S;BN1EUXm 8Q&\ 5^8' cs_IeSX%oBQ DV$"`%hM:(DK]ՕYSQ@5 t< U'wbsY 4@fv^#miԏ{b,!8g L bI-6ΈKk՞Hz|%+P*fJBaSGC*ZACf5k12$\B2)f@ Ԋ]T Snv͵3"0Q;9l-_VBBmgrF%. #y&#G"6@:!fP+g@dyT+g'-YPv+b;*FƃQ߃Ei{;&I;bbɳ%:Um\^Nq;/n>'!7x/?jn\Z%CYE g-͔_}|!s7_=FUѣj.t똶Ә*IJ;g>5LX)_# e(,S$8Hd8&G*jn..ZPr8͎>6CwqYWTp69("iKd25=tF*hQ. 6'[aJ"4|7O&p[ˈ&%e}'H|y'2}@S]vJ6 ;*Ȉ/BRO|_ ᐿBR\m+wTrBo " CL8{ ` _ BS># }Rz0%b77bK6#Hkƒ8Ue WA]LtDƻ(OO9-w㑛8.ځAۍd!@n cka&>-3Bv> ;H3p'Y(n{`z|6`q0ʥ+7pR4JEdտS75ѳO"V*䕕Rk˷=d/P{yغ9Q;dI.<(i0N(zP{1֒FwalByg?O[IbV=MD&WBM֝W]@= I= (&otodWȶIKLEL$,D'"^%6e/5|Kݩ/"v5֊sXkEbs@gldŪHƨ LNER+at`y)h}qc->愜8Y1T2v]†(i]U5{Y\C09Z ؍.f$3Q?~6VBq{\'bh6:/˕ R ї}4pAZ{J;^/_HTmKu6 cH53M]rX#?nZN ix/U!2IiwBX+Fu ?Tq/RCa1B('Ϫ-Hثjbq)rS"U hv5'TQ) lvmWws`Ґ?[MPiomE:| |Z&U~p^UF A?lenEhCz5Gkf/k'bEZ M<_$m} zzIBXC <Am`ƑҤ=v_hŢij>WN_U10`>=I{'XYW!H.g ˻x]XqaĹ ®Pzffx*}t' 1YV10@gFgi=A\?#OpdJq( ,яx&/AعކIvcyD#Hm(ZM]؇yRս0`%3W ĬVՇc`{SP&GR`S.MC6vй[yeJEȢ>ۚ^ZW%2`1ez RBDf601FVq}Ah#ˠs[(5ϒiT2NuP(q}+N 梞`{,%~WUNIkAc0xξޢ@!l/~=?}Aw5 (ȼ{zJj\\8ijvg8k8~rȬ1fW?P[Jye7q\PfJ2lVܿoQ>˧iksG^?Կ *{[2wXG 1:ý[~zc:d;Dd=+F{%Y׳B(2BIcqUAkR T56qf _yÇ1Biڳ% R;.Bp˃ZyV Ibl7VWǻ6)AUtu{ۮ){X`) ng 'QL9gN~r 4EXy(#B(˻H-3R hE9XLP*WzzaUeGXyh#GDG}(is*`oaFfgiZ&:h!HY<]ZFS,M7]a3mD2F7DuZߧb ((mTX#pǚv!G L 3>f_喝ƒMstK/tp3@$v;N"/˾j/neE Ȓ zmcϠ $ϲRrG$yRxAw';1Wef8IDN&ӁkkWI:8^ͳ3}0jXI{eөagR{t2X'pڝIKU=O' !}f{;M-p#.vGh32Tn #'D8'OW:P`I,.ԪLA`SVC\X'ydܗYl76 jksݯn.cZAq[6(k*$2SRMbR㺛Қ7ۡrJ$%@h&8ۢK^# $b"T waiVoLGb蒱r]4\ 8zһ.!O,ZGPilհ! p6:n>8EN_hsc=|>"E>BîPv[Q$KzK9bGʖ@<8f :Ⱥ*]rLj!U|D'M2785'l7YIJx?1MnʳFՋ10U Zj ?=Jz >"S &BmTkNI S^aIBp!Q5W@k~c gUmɯbk)WAӵKMWT Uν}-YU6\1ʼr9yT2kUqho?ږŭ=#Sɒ*j]ߏV=5%tԪ:߶Zy#a Sb+*uhњfUS$f'Hԙd׆\܃|p)$KqL%v^1yX+6S*ߖcK. 7C "mT3G8ssfM6Buʗ:qg?wkC?E*B%zb~mpOfw9,a gRfxҸ#d^CA@7`.{^\Xް}ǒ `OB zI:%ţ[΃T^_ [ߚbu_HV•MRi~{nm{f BĐ@z1QI<{\QC| s'|U34{ M>U}u46ZQ/[CfU'yz{ðˬ%nDot9nt=mvMD1 b_XFC ǔ tʵ@:6H]B׆h'܁\Q\MY%˲I=Jo"4io+]f/Jt$S%Pe ])_ lvfHkAPW {d{vs:uղx@\2jsN8kQTW8Z A\|Nߒϡs5 R_5罹>ق,IU>`=Oսsd?q-+Ѫ]^/nsw}WV.}Gwu>ynBo"O47P_ϧȏM?y2GcΗ2/ 7ziVCL]ASD*(qص3ʑ[XzZD(Y5}"U-e]Ew:teڬC9LϨatI`b*k{FHy%\d,Ry> \GB5q낞$wqwtcS>>v^ y?h'|o01gdp GmW39f~hu4 #p~ crR$. Ĝ7sE1lkkiȂlIb!-٧h(k{BYހD_%^aH%@3`L*UV zEz ɞBj$l;mâ+( F|Hj[ `Ub#}`t5GsNݒZqOB̃T#J7T+E|NPIo&F֓y և Nd.fޙP-9/M憧p*ۻbUЍ5믋s}1hW++,@4TfJ@!7y?).p@&>)U.~fg=rQ'9+ Z=w3ET=+bKQ6alYK?.F*goZ99J-ݩ(:PvXVj!DV2!i X\ƅ(oAJp4iuA^&NCYKr(8 [B s^F)w.]^"SЕ,ɍX)BAυ_o)=^b/rLЬtAy4 1#Q}"ϡdHc7tNoǸ "o_ _3l6GԆz+MLȱ u׎` zxîDntTWLjmn`J#z]uR,jӏ],,+태*$nD9qI\f?Ţ6NM~Y\Lfce#_)k@dȦvMM#DgZ7)f8E (@D2f ~ ytjkS\!vF">R=v `ZzͦWpNF};CL&iJޅ>q(ߤB5޽VUb͸$nk7Z"D JM;e~7 !+,ˑS˄dHWoGbMch`7[MRd״ HS#y9 r緳gޟY Fb5.Jyg˟Pį[>%dzJܯS@K;PyW&NX؅"h}^~RRX;T-eQy݄xdB^Kk!e#MȹQ ![j6iմGM?/)J6tzqwyL5F\VTO;g\ I:rwA c$~}=o^R넝uS[X (Uة\À 'L44peӫagY0_/.l#45N')_8m<(Z ΃ E:E1b ybgj]p`f͖ŏժ/t2g?dmx3?/voaB_=> 5ɲ՟kZl~+<<07gdɛk/sYQCͭu*鱾FVH~+;{O]CwVO)qЪ3B%ψ=Chzt QY{&p}$= P 5y cNk# "#ކ \ԹOjBI>3xVQΒ==nv;UϫCϛ.USVtQuyRj'Z^d`YSHq!8!~QBD1MN2k*nJ7q Rӫ7)N֬#7 +[;v眿]h': ^q.J"K5 <,=>2_1śkyt22XRT.}lI"B!?iysvCO"}֨ %kY\xgcebY$sa"1_>9B7r1ݩ*eEzDEY \ r\ ˅E7}N}8&jdEru]0銟E2O2gZK\-6H(ib6UBUD TOzLuSa/$:~ ">D*P,I蝎v%GXKl%q+[垑\z+j}!WݺxtSl&ARf]!Hۤt&\'uF[QU'η\}$XB) hBr&[`4XR]# 3pAمL #Atrf~" ĉT:JѤXt( Y'VӞju.N 'kQ)k,$,$[pa>&o}I~-61ŽZ"97Ȗ\HEΠ˟1?gsJ(YA]sx$6/S_r[1i;tuYX~@OgfcŁ;GBaE=/c*`$z;?ֶ_$ 5)T\Nֶ\\2ʙϟʚ<4`~z_xgi"\FM An8dyC}P1<$ mSK 2L9})X|n.bչRvΈS\p'1U,lӡYdYizT{lg~)oJm\cN$P^~b>G`\00Dd=zFr!!l5QuMl^ E2{92&dx:P);*wK2q"27Q 긣E޹G7xWwT=>h&2~R&i1[k!Q텚 ӓCۆLJx֮>RJŮT N[{˒,KbvגȤ-uy3,5;b -Jj$l&8IIwZ.OДhusׂ2,ywV.M6.IFunꞢS$z}@yqD^ 'Y=nHI,הkPyB!!?exZ[X^`փu:}AvL*k)s"o 3<;[1hW3GZNJ nVcgH< 17`y.^9q$K0)S5CАO<</M\˘7PZJ2R/9ighYn&?m5y<"BwntBy|%4d>80A j0l .g0Jpj%aʼ&P.ʅ2e*6x^p:~29Љ̃FI'" ZsиI?vhHRߧ!sẁ)?i^Nw _ l9 HVϽYltjxS>39Z ~, 6*[^RF誠`X͢jJ6+0۔dlQCgu,PV{AKD$AViOg ~VyX"O`Oct{Vl .E*ӭ-M\[ٿumHl€>ZR5ԮzQ ]$A0,/*lpao8A{>AyjH.M^abɛK5l#7*e?M/-p)]C-]oki9{b/#RVʻM%% v۠Vކ'h.t9αMj`ifh#T+pgH$!ju`$IW$/?&H2SjrHiG[ozo{Q)t'>j}Zv?9Ց!KC/lCNXcTKC$Csl,)Qmo'7'rK>J+A`ӥJ~r:UBޫJYE/ex'ƖqGo9HkD{E"gS{_ h\kF0ܷ;X̵uh׏%\dme=q-RL/Qs`Ĕ(1ؗh)*QC,!8,ȕa"4J;Ź#T {Gj]l7n)rxdG8Xԑl<qTͷΓ"OOj1h5zϜ]nK  ~Rˈ*j[dvG1W~WyN (~| :9ʄcCm;xW+ΩT~F)@B 2Zҡk3&-aL.Sypޡ\9j#D{U^H-R}0&$A4cUkdI D{ rpr.0N: }g.$MCh?޷jx.\*U{=0fy;e4V Y ]jZ KE錴 ͇4ӏIXf)]əVZ^ ^ ~\*XM6ui:'͏ pYa1 lT-`FĆ|^'Z|uT`c+%qB*Z6!/){5 Lih.P/d0ͲZl13$=[YtْrIp gÄM tTWLCͶ[c 6'O5<35LGk2|@^?tԃPkD?Us"#Htϯ@ .M$x ]׵6k4{cFHW7[^ ,4yF}4U0gɐF)&2/ )$TJm5;6|ѳs8+̠ fB*N1vø#gowFTI\ӭ2_)3+\]]DM2-5I ({IM䐶(1+vF-n6j#%v`љz _ە/PXtGM "ǥĿEJ`Rs\1~15{`;3 ^LES:w͂w|Y9WhgYIsslҍDc JؓlQED0ky͡R8\zq3sGj> ֵR[! GB-' _B.x]08IC8m* o +Z+)6!~HIzslLUE&ɓCC?k%AP2sUdl1cE-rKڜs/u54y~1~ QwԊ jTc{J1 K0T) /m/B7ˆ]3<~!\u!|cHAWj3[ {齐3;*E(o J.qȾҴzqϒIc# wj#Юb #Bnۆ]6Ad?k濎UAd{ul<~Kgt'hM{9kJQJGKRTAUǠP#uW|.K27,S0fo`#1!ЫnM9ު fd/ 2(q7\c!G. #f(cxiřf)V?=@ wgoju*OisFo?"EEI! 0!k_="؋ !&}ɨN,Kr.=]# Dovh0"A>zM'㹅nXĔ.!]r|&?:8W xܾV>"ڹ(WñF)XGMx>ýdv]v{3 .kH׹ka!)^Mm7zN^ jZͺ&"(Scq1,,k rauy\܏W$̰̍bwMXE=X1\@rۏɜ/>B3~[HIb qe|n't;`kHp$ZߋRvtǹdP@4˓_K=vR $iMR"Zၫ%a0OB:F{bGF}K`]S_e `ɱ/}e@WwZ=oLqM>7|45=#LJ9\Bڢ\S*YS妰P3U#Yn ;M,+`k%{վM%\Br|_Tb iO2!8V_.Ҭ4[kyH'Hb]yѝݡGi:Ҽ>w49VؖsN.dl$Vvz9wPf~8z3zF:zBֳƝz ޖ)&*J}^w 0wn; vxJ|GN>7^?* .>D*&,@5boe! W:^HQ*;>)'9+8?Zv?[rcMW iy( P5Gn'J[:`IK '񕉔5jؔ{1Edb[ ?_[Ii Iӫ*9][3j]GIT | ]A%h믡>ߌu bD}P(7d* d7GfusKM`*6{qϋ*BF4k a+ r*&tg;,@13OqF?)mZ@A0̋{HNt0gPC)]!:E~ίInoiܮd=]. Y!z^f ހcW?v)K"3i_kR@Yd4m(QH}]g!4AF rKooecyUn6>B}Koh-?c@7 Wa08`գ +3Umn菢4:'IGqL}4 \F ++u{L?{DHN_ՁcvCY {":o}7bsCYS~vLg Џ;4bNA ķr&@Ur ;fT1s"o.Tg๙*eje}7GX\Obƒ.(̺܈[{MtPQFe G,fG6T/ ]iL(-t,&>)Nl$ u20K!jmsh  dC6_BU>X׍h<5fagI*ڔ$x G5DbqH,?q]"%I%N1 I PUO u\Yk.kg$dXXeܓS1kjbgV8y- c+RR`L+\B'U`EibgE/(ٕʾ%N҆PgN,ȑP% t Fl :UkX2'E 83*Ӭ_1eۜ4`IZT4Ykx`VA3&1]I8«e_uF+nJZEi >!!BMKq!z@ A2u4:NL*d}¿Y%FҧlS[iggK D<$K1&aIxx^]X{ɹwt惫ci@C~X/;o|x)nW /x{HQ4VyPM@?7j0A%"1$ďY,2hiT 9 /U*)IV\R$"[Q~'0ָjy_\0+ eb^6֔U)~qHTH 9TBCXz^e,re"TY\dWZ 8TAvQ׼ͤ߹ ;2x`w$v|D*鐻>*aJD^}wCP\pՕ*2^$bbM]著L,FK9t,!佳wW{(0۾1W4b4S 3T8ʀ+fK TXA:o;OϸRx{ol߇hzp7<H4]M>>)ۀ\I-VJs݌_,4.2"05}3, V!J^HV7k*Z_X(#} # ZعJn66j)]`$?8%mt|ލSN<&_ddҭKM`՘E/,L3M:*YwYқGB2! @RŒF(Jn{lKb'7R3ѿ(_/\ݤuv̠. sUYq(:ena-nRD\-)=j{)4gwkcD܋~/# rrLWH}`p)׈iyp\ ]E rj4Į*GC!ҿ FƑ̓UR -9o"tWsHF=g)+W$["z}N3\xO<~kV}Jb-sI嬩RbimQV,?1h=t{ݾa \)uk⓬Dê >ΡLO dM%VIiެԵz{u+|.ᯁ7K#_kY{9~UO1[V1+>A8;ffpF(MgدCiIҪU_@עa؎ f澞Ū&ҭɥ+!+^frlf]w}!eskZǕ MR@nedJ): Y-ƨ+,|hv<&R~q^Yٜ}mm.YpUN㹫kzXD|TW͗[A v"+SbbӜl\}h}y̺! {+MH9ïNzff!.j a 9im,Q(^S3+,P5a!cJ("57f'(H61YA&yLbh nAUS-'p9wY ly4:zYZy a~".ӹ0>ɧhBgПhnCl aRDXy݄Tb z?L NklŠ=Uo2M28~\W&m_bkA 5HUF.`"imYgWRt,yj6P?9|B\TO!/bp]-֪) -6eۇU:B as531t +5/ݭ W'̘rtP wЩ}:>yak*Ky }iKR~UşM3"L1ϲKYXA/A|("VcROdυ$f JN&&"AEcKRo2d,T 3mz5@hhu/Vt8cm岝O0r"'z+Xc1(antTeQsm iltr8ӶuRx m9c\UKa2`MlO{di+fG KH4CˁMD}\6~פrop_u믪s븪΂ CzEH'.=MM0nRe'VWv ~p{Rd aP{,n#)>eCR^ XsODQO}*c jHE|*\YY>RhϓoEcZElD"æQα8b~]x' hWc&@Qsi'֘`沢'rPl!?} ߃%w+_!EWwccXGO{)@޲j37b窫&[*m{q-D@}bL{a g4=i=ճ#Mݸ ױao86015t籱e$'YAڥA^ũ@x/8Ê |>cE z):?J_vω{%2l6e;殬@ ~ v)~ȼ "^/+.#-'_x Pkt T"Rmvf)Pr-)ۣR6m1ƍMճ)38c|ednNw1aLCB8 *EcKo ̡( SxЉ8bi=~L!-z}PԔh}b5^@RU=).)iJhA'e*KvBʯDX%vonrhgU}%5tDfB >d!CRC̚va_B {N7(>>Y>ਬrtũ6\3. aY+EA;4NȬd)Wsg8_0\ ZQnQvrkҿz3[8GdԄ#-֭ &1>xɂ)-97ԭa:*%NjIC-yN&(A%HAJ|t],MQǙf} UR%Rnn X -vd7k]3I !M+X{׭-JЩNjPUhޔEVDUܬA W?]*G{sP(ܲiE?V8ٰɵQJ!!GJiLi^M[Ռ ?6aCدEڇfPdg4 H7pɝ5wsѹ0v'e"]0$jN¿i o'lҥtLqpSȣ@ູ ކJ~2ǂ5męwP&?$W7!=d[6UL+){,HeXf$n*c{{.PF+z1+S@,u+VSS8e>nhpy }Y}>Utx 5Jv"ա~}R4ic<8T=n_fSx'җ1 wܱjGKF:1+5L@hNxN}u%ZK /;$aoiwb#skiD@pޞ@8p~U/K $EhXV``lt%ʿG;{^8lfOíȳ AҟF&.,$uTV<I/^c-ģ1V#5v#q[pzt`5><"I*P͵(n0p$Q6p<5f;~V&t';Ys+RI@'fì'a1!1]g y#UE e_AC8l1,ׯS繏J fN`B`wVGچcZzD !|]CCkd{>oT$KCK[o45ݏT[e$CqWGgO97]&[BTCD77is4Np-Oζo2ҨVAΏ˿دz=z0]?RMV37{5,N@3c!+cTJ45 [+!8U@D3f3uVd٤_ك75䧈%"]WR'jrEL/PAH۩w4IR;RWr:]j3֛7ke=2M8>~'vswy LJE­;ǡ`RB7W'ĭqu UZX'vWhϰ[7<Փ 2O!/.#X 1Yǝ^j(~4zV+G/<$} [0HV Ķ!$@ "o`:!1gZ>K>tUCZ װЫ/͟>K XK&`Pq)?K}+aSx?x{l~s 3 hҬ_zsP~ 0Xlinv*,&8&9]{#*;DŽ;N6dzYbilF HqZ%Y} q6TOѪO&U'YNEeu!Mj]QrȫY6 r:H(d"r}B~H?CK!I#tRir=0A5S7bVhy~|ޑmbVjļ.UMn"+Q}c->U#Pqk?,e#me 6] e&xo 2&6ls+(j#d7łndvF1:KXiМkU ⼧,5u-=!x6]d eS lBs朏h<%lP`ڶH KgzS/-K >rɆwqzT.:],\=_?Uz>ZH͢uHJT0 nnsA/Z`!KZ*} u6u_2Xٷ.hq9e{T += P4)6z]j .ؓyʯ,RPx."Ʃ[H¶`&oϗ&$[0upWRaZ`1Zx\[4Y!jz}KɟYVL^Z.v;VlH wì? UU7&@2#bwP7p&8a>H?R2)A0r0>t1s,M;T(RBZdmB?p~4pf! E>"f%hΘ}n&Շ}|AҘ7Ɨ=)CcJlxvx b7-2^C &2)іDQ=BG_rO)I\&_6hcIBlW0ٚa%FUݥbd%qo=1:Fߍ^z2u2f7W?<,`z"կ<@8Q -JÇ83JP㽆RFDQmLkSw6!*$0" *N~s Ϝ naMpK$A\f@~\I.IBPdvG΍e<@!|`-S#誃C1dH|.zR`!5hEKhes/UIstx2oS"Oa3|?^(izI&\A^<@=y7>[Ȅ$QmR-9%눨k}paָ!tK%W+{{q",)f@T6NwԒ_{@-TrC $b9oM=E$}50Dxn@EAZ<܏xԀHctT溆HDbt͖Ɛ ;ʨe ?WVo$/&Kf+R)f_ cPgRĜ`E0#V:S=dV%[?-,Ϲ BU}Nd,М@fءj89߅_Gq0, 3S_IIt 2fr ;A*sV78~]$c1?3' 6d xICBJ,I ":73j^!YX@O1q&\Yԗ`A 2TJpN(z$Bb([:&@Kz)Tb|VNN{<rMOtr~7=<9{-5e){SΗde(m{05.?wf<M&TMܾ/!n1I+aW?#g8zܺÀCw)fi@1a,e>K'p-1SXˡ6\d4О0%H?{е}C j-#@+~#{G^j qg|dD]d!i{:!c^$CiQYA챀Bv)K%-lANcۍb)!gMx;9!wEm!PHـ"1: 7 &RFkD^O=^ 吏àRŠL]ͯLi!rs\ٱh`P^7J\.^'^>_JtN(Wdۚ: _0?-G/vu=+Ψj8PYH.R vLEB<@t5[Yn[|\+? Պbd[m\?>ߦQWu\4r9d3Z*p|0`'RݐT1/BJrMU Ch8aɗ`\*=DpfxP@LdFpe 83UhW dt/Btzqo:uDFdw|i JR$H2**\Œdk0"?)VC-}/%@O*ڥ CxƓAb[o|~6q(6G\w4a]{.f;tm[~Ft״FR W'Vz»µׂTmZ(b>CA&w&nk@'wc.s>1l6g\Ѥse=O20 &prmZaW}Q0q=Yj/V볲o#1P -UT{S)KճcK@3ve؆(jq]l44c`&IlE\nZuWR eٔ6֢-)Fܧs_/#PSR|eAYӴ>xAmרTFf'&G{ꩄ ̪|$k`_`m8[zXP hs+Hd*Ͱ1g 8UQc!mVVFqڇ^ϱL" ȃ,NV>Ҫx'D ܶ^~b~W;_mO^hjS ;po"&&xS}gzsEUEĬٯO7U%vMlQ&1"-d^Lh_y(d 5^Ӎi9Y|?񉛿o F65-e: `ʮr%H6!G3O.Wk|y$N*}LVUZRwSϦ9rz8<Ϊp1yZZl/Ohas8C69hSh8_T[>F[ϕFKG$[C0U⤀kS*D/YgR019MTnÅKQcvmjEa9 LB8ye"GR'ȹ?:8l魇OTUDOҋC*T6/[mHT2 6)(B 8uس&Ic-گ,ǙZ׻2>vBNc̄'J`*PF=}%E0-wdW$R/dݩ3rFw! 5lf薈;>CKll<tGuR D/\/Wv8D׳zCV+ <)~4ۏcdi#tX#gW_LE>:X]WEi<Ny]S7buZQ>yyb^aRVו?26*r|؍(~`z)gZ^aזyK{]5WҜdhp4k[ s-h-c_,S?ڈSr|Jp^'L LY/ GY]ZK5Ǖ%2M-MSyv1faDY5P 1s \{bgT vċ[k+?sObtl0w {Avk 9ޛ_$H@y9ɾ5g8 \gm94wIe/BgËs.^(9ǔiTcv'|0cIVwA5wQuQ6V4~GC_zx9r-g3Do]m6S$N^PFSޠ2V ګC2:Ww%dUGM(DPȱ"B~D pm9G6 ?41U)$/\}v9#6lH t73WUڦ:z l+,QcPzZєcWἔ <:ΣpPh/ZM,7E-4*,BDǵ**M+n\m},si)uqQ*}.G$`s*V rC>F ^GD)Cr%Uؘtw1<ھ#9*[1Jf =Qj~5b 6o)-[]!B30~Q{ucs%u}G}yWն=Jñ aoERN&xUP:дӟ+oOyãoIğz:)ܗ`{_3>$_. , E H] }8룽oqulō ;xi.0b0p'|'c,ZvI:Xphe?m"-֚m^(+2Ŷ,B79 0㈜:A:i!U5KGY$w0 bH#K&aVj}\J MO lϠ`{(0,,+ aZxW5&ET"*GX]%}-Dͻ5%IBVW/} CK.^&<aŌ$kG53l^YlYv4_x݊hݳ/}nÊ{CnvpCnBu~k:J4^ 'u5J}q5K6wwkϾ乽z0n [:XoFhT(h퓆Y.}l4@} XDz٢X\CaU !Hhmś1'X0hh&07cv1,\#R) =A;V5Gu +5ı2zg;Q}轕s.s~-<dPQ`*Ha59LmAAR8Rp;Ȏyt*z7lW~ g7Fxe OWuT&I.q跤e|%Q6"*2?y*5v,h c7M]aD&kf'~mClu†w:i.D)_(]Z&M 'b$9O\(AD>XUe$ZinFL6HMw4KI _dQB-Oڥ3\V5#>xF˶g$ci" 7?{\`оdon|Æ颎d f]s$Q|"ԉTj~wz'X@{.NX1m d۳;'Xn22)PiHIeN)JT?YtggL"8u?G+֜jn.~,% P&OśM KG1.I9TZ4W&E(cȋhwDTKxUW_~?σg7&g+sNs xeG*k{_feV yԳqS nbh"R\фFC+aL#Q .J H-}V0ӭ!N g-̠5 'Ά91(4ߴ>;H+ IG kBȀK㐄MP D t8+Viv'y0=ց0WpҦ[Y$Em'Tmegꂆϙέh߰3tEWg_YK.qGzW̢h&㗧 n$ǭE T ĊBFraÜ[Dp%x&~ 3N7`g̒%`VxhE&*lF6`0"] OE#B !DʢO[LX8ͦ.hzyd0j 2oI2K>I#.A 7/ >ev}5OɍFf+d`uxjF;х)2HcՀN9 $vZ[ @~BEۗdk9Uj;EnhL`|&'ƥz˗!z:d~eWN}H~P %,Z[ac1!g6iUܣ[Hd[A P&Z(hU^-^)NX)7APtpJ쳣Y;Cu6N5Tf 姆ZΚK RyGbʼn(,.ŗe$hUn'Y)BN DT{%qsyDCbs%:`շc7rc cg,{)d|<5EGo6mg䨿XmW BgDfƸ?7Ee.X [wyogG*(-]0'ɳx]>g$["?=ipkkbT޼0 ;7)K (*QW bOaή Dp妑Y3gRDFta#vχ9]du3LC?EWAԟ/,΂\7x Վ$ЀjlmȚ;WZL|gNTSPԝqBzty|8GxTAT p{"gH4Bsȇ \h0H ˚X?/P6 %tsYΟDa)CT*JD2Ŀ`ZH%6)B=8rTT/̥5;5~Bˁ2zoO?خ}?TMFNĬ#@ Ay;p-K)3nUm~;;aUk6oOSQF^_zvq଑eUn孉 jXf;-<`hGSq晶 hKy^>dH5DMZs0κg33t|&)Nװ) Xg_x%hjU`xYe{3n>BǬu@܏㛂tDѵ5Bzu:@`Fps.S|QxnA]o蚀 +L5D}g-38sSh:"ʿZv\jE v~~ DlX7^B?GE\ꑧ B~B?R6F\șBaȕRՋ (gnU>-C,|C6}Hl^C17:b '2Y^M.TҮwDA!W{@YqFVT=vfF $ݿ%qZc  tNfHE)+o ؋ӟOVpܺH䶐_#8TW 2JB)H4^c`D<'RR͒LrXuKJv+~jvG[[Et&XR"n)?~pD[hV[ͷ=Yʖ>8'eTMu\Loߔazaq3'5AF*_\1`k-8Meٜ/NJ6ϺbNb;k-Dut ww5#JgEIklcAw{F7OPHieN6ǒ0QeNrtYEK4PXVcqÅ+h'e3tv}VmCԌ:jI8 *@~bŌ-l7K;vPaܧ75W.[Z!jVW J>gg(-\+&Hv8*}Z?|)zυM. 2>+$b&5}~m)9d̜Zyj*Aw$ ,?^Qq\P2()z =hkzcIn*>X.H)$-?ݸmfK%Ogh/dL[ESWҪv`Eܶw7^8˦ysi?aѽ0sM3̪ŝnto izMI`.8l4G 4!׺4zfaBε`G[B:ES:ĦbNpRO93|7s|Tt9D^p6Vl|Q-c9s n+07]0qۦX4]&t;Cnaֱ9ǻEyaq^B$0  &)צEI̍j8Jnb+3;752,$IW8#~*t9Gkq-5lF>m3./菽_TU FϘܱ^*eFt+)-7<]o/װhE#,L64^dBմ%Ӎa)66q mTiMʾ l}$A΢'@_};Ts/?&o:S(i?$=T $(oS4>w\#r;K+D)7ZM0!:`0F6U5Ve/zݐCQzT6C+ǍgZ6"&2/ &/eY}wh +/m;Er]yϊu["6޿ eEPSTe1{Q CH@!4ifNo ^);ϪŬgKQP!}ӳwU S#`jn7<a*qQ A6b[-~kÂ6~8Ż'lHtcqSh02Ia._ ns.:Y vu;ܢWo]Ňpѳ{('pcQRuy?([Mzc*gRR"C͜x?"8W=DNL]T`% U{4M'^)$؇8)*oI9PPS+>ℋ*K3]"H%#X6]2V{ Tud$-Ml^S>T]n51aܗ@3C͔( =UY:MY#pU=IFd&U@bFp- 󝎺]f=_(lmdU5\ U}SP qS) Ѫu}&1z2z{{࿂bT|c-]0 !;&b**ND[dAUC 3% F %$V,M/Yi K?~-"iv.;n #S D;g9Dž\&>b=\|M=gu5VP'|\|_dDJU,e4m_%t ؜k̢`R LqMvNۮR'B L|x!``2NccG^lX߫8>y#[RM}i^]y ٠$b:R^26Z:Ѥ,G 'oG8w]+p fP/%:͸EϤMg=sFJ0wR) =SpOAgRn;Uձ_7U"elC a84WuW{TI?mYk ]Z'L'&x&T@icޓ=.ƀD,'e  ɮ<0ϟtM%y|5Wp +)7y7E` Љ/i#Qsu}GsLZ'A 0ƛ!˼ܝ2_yzFWwQ7ޏbjл}}M57;M=̑K&8X JPBni7Q$p91̃1yJ#kz֔) ,ì@p G%kpPhwC gPYuTESާ@f#DUf%Vt%ەnmʃ&v|<wm.5(X(G1lZqNm6NSݘ N/ ,{qeVS|_~djkm| igskG-$yAۧ `W+15pCqi cR UA @N)Mrxs 8Y,7ϐ]ޚ|%h]SVX 'dϠ(= V+ X~HG].dHyPCG=qQqaBNE\*.&Ev'Ÿ׮x&x돾|`ě#HnT`5xVhVN}j]"I-mm4Y?af $/D$ù%yzs`v̏| >!O%E%VCy&f;,A ;ܼΰ&28Ѵ=BBNdE( 0?YK/$?ޔQHFX :P 3i~nQ{Kf^yϣZz.q `+6bw\\EϳytAJjgCzȥo.'X (Mq8ovJC\nVEo Y!*ocǹ 3L gz\9Wq v2F9fIv >z PcB}CܣcA#[cEc\O2w5`tzy%""y(Z=M@xn!+cj)a+umǦ<03qm.o=ڭ3(XzBaD+GOMx32a3)DG)Z &Q2ejnpbU8 HV&$J J}Ƥµy[`ٲ%\:v5esCP4RuONGTo ^}8)*n[BOckn eɟ5Np}fjjz/&!ZxZo%pW"4iR)7"J4)oE8ZfxKWHJtlĺ播 wɟrppٯ8 f(뮈 [X9ȹe,&S k &A" ^%(ԝXr) T^R^}o!ٛkqdp8x&PEM)^__RwRJZ= 6Y's*,TZD caQ2mO,@][MKz`$m.غ Z)j9G|M5c "0v׮Qɳ2z`'CXa3K46 *F!ȥgj5`oN_XF}}zhȌ?CxcFܯC"d+j>fq4ZiLcM4oBiTD$ZhQ*'wY 1l+(0'ݸW f[J809s-zcma`H@@ )0Fe5/lG2Mi?;~,ҫ 9wkG19:@(  59_MGW>.W>;ħv) mDb<tn%pV֘+G 6Ʊ~wNrW)"03B#>9ctg1 сkAy#AK ߏ#(vƃ }˂D"U4 ݊@٣GH.xiR*r= jBl߳ަ!e(#W>i=r>I,n* zkʝT(rMk\͗D(;5@U/#^EQ դIdW%ۂ?p/Ql*cp֓-wďnEV\9O>@x.%Q>?f0'}aCW=xi]]s[S5l1R _Z(ߧsݝ:P>\$|o8]VT+L $LlT(8<Csu/hoU)=j@IynמiG{=AiC!9Dw IHM2HaW+tr Э)}=vR{/Ύ[ܶeeO_F9N~%ilՑZ@K `mst_g؉<M2?)7C9ڿܓFz}uE@R%Ar*܎mN7Ra7E{@1L ;9HVH~[*i'IѼ7LMњ2^9F_y-?4wOGu ĵ-?[qV`>(PƝG(*<[rWq,qIό "aw^Ug+#4k笂Kmk L&q]d҃qØ{?~2PLmZ̘O lE25_) Psti.]*tS᧫e:Вs=%.Jo|rH|U/R(IP= +BZb] q==N+i|\[iH#4Y,.C /4;-)\P]/L@)1qChX)P+ `ǨG pIL@x"ׇOF1sr}ߢ(n--&DE"{aISY~"QI;(uQkKrx27*3 ȎJۜ>4^+Q:fޙxzdNnxB'uD]>8SAjbϐ/!¡oǰ!oie0._-$ỸbSָYO{3; ~`/YsTRUbq#!bJt HWͶD$,mܩ(YDHȮ#w$U%K'ۇ_0vGxMZ]`t{i-f8-t76Q &tJUvgӹzY_FYRx(ļ' l#>0+ycPޙpI"JP!tY^B /Iשĺii%.g`=rb* $>JLIXxm+/`dOO tAtD yB I,Jf1D| +gӁ)2A?}!Tb!;BpX:8d>!۰3 Pf텸UFĺJѐu}zW ޏ?韸`Bmž8HKݒƪf0!~/ELmʳ;$b(/נB֙jUڜ3J[j˷UEP8zd608m q@HZ<4y2!t7r'OQ: smZKj<" \lel&͎[^~W|pFۜVdLӊ5qhPާH-ʊ 2@NpMnvY^@9"kOGJE9PZ-5$#W<=>eƨu'Qw}VJ0t[=%Cbb7w|@=a/ݔ ^ CopYAOnWI7,xE95vDZA&EI;c* 0 A:>D˯} 䣓9;l8؋kZ5n3dc̖^1\L 4+S7bUa+Q+ Y=1?~KlKSdxaqnt^מR }𭈚;:WWz:ܡ\?59В ώnGG5f&~h':硋C5b(r[83uN49n7Ι8v(8(r#TPp#SX^J'&Rlb!9?:cY5S 0(4 a 1)Z]QU}1=жTixG-k~0V,ֲf<#cs 8d J05l*$*~5) O%w^~UE.Y:VgVt眘`OhiCdw.QnaS a!!8ha7\B NsZu" b󘱤#Zw;L o:vaݓug핾5ZuzLHM6#Ɲo탆|Z dd#r4b;d^sdm %N5o}]9JeB MYqW|:?p!m'Zڵ"-C!/um7:lP( ٓ(EguB+)*b^'?C,#{ ގ 1)+e$)$.UeMr".3n_N/:q:DQV'fi,1K0{TE r<_0iJyJ~^HOv[0*g | E;SܡX;Z1Vދ,xn½ҍ0Cl g6XO" VUNIn0 ~X1,! GaZfMjo~h,hG児]&NiJm|"Us^MRt-r)D)/o ڟ K(TM=!}YiKZ&qXpU0xRBnLN`ٕHt  Y`JI2JT rYX0jP>S t){}FF)x7l7{ Hi7 Qn랈ߙ(cLd_ qbY)ky#衆ߋ8͎tk i' +wq`D&L:'d[/ g`d `<߮k9Jcp+1ѥ: uǙm`E|20#OP8c:qJZfv c<\;Q Ջ R7_z;"f?AI\ `N@ωV[dR7pS I>t䆋Hp4D%lH~RP2e|O ےϟt˸= _qd^eGB2Jj#1ٷ H1`6"IS}~5 v ڦ T+qaGf,d@"ګpj|E #G$UǤf^G'Ԅ$Ra^%XրT9čr7RA xMp /{CCxV$);$Q(>. 䫑@;6~{s%VfqBhpTm1e""񗀱5n (Wr![5>|xՑ`ťu+R`F}at=Jە6.ț"ou";[.2ՠY{] -43_X!B nr:̚T$ךs .z|V\,t: -IT7' 5"l$9|>34R5'\ ?RZBR A'T%T4 1a-|oXſ5dtFvّ0v/-Sy+{p-Qލ "x\7n+^b3f<5ZyΤ/ >gݐ#&Dl~×YgĶu;)5>n6$]?"owh C7=|%dt6h<7Tvi6=퍐>f5'CҔە6ʶUJWր Al%M`sGRÝf5; QTm+&3!S5 ]%`|rb@?zax$"ŒVitx)Zԇ \ KAA)oS-@@`k)ƭD%tptoa ^βW8dYYW؍?`^ }f#U]1ƋUgk$N5 #ѿDT;T_j;[gffL_i'gªM´YPdL|zH4bisҟy&{)l3ʱY^?zM+㴍AExRfޤ4/! ד|BuI0N) 皌Ngƒ|at0A}hcf5wW@<֍Qt=ԭ5&4`;f&\4!}麟^0X8h?a)Ea @+;Y$ /6p%AH;,.ޕYWp\z ޥp?h)°V[TiYI0)5ysOLtT!ZD`#>7-7l x%x>,-̹yks-CE {<>O.'N_J`>\ X#u%Ume ㌁7O޿%/i8Wwpuaq/޻^{VYX4Ȋ?~\X}R`40¦zT,iښk1ѷU(زF>R@M0Ǖ܌wr0Vv+R ۋbN}/Xgjl#ou9]n|Q7Z}fúDѺ!=ܰѸ؛2+=xvBL=p;vBNoZ*BVlmV2 lZ,&Z4R myN͈5(( r8}MD6uLW42Њ~,̪\&q☔g>k] B?BUAšx@{.Kߑ̇.M{΍0$x{"c5rຕAT{6=2"Ms^K1s($TwP`Waƒvo.`J_IAܯȟWWz'֒ mQ>΋>+eӏ7] )Rnc%# Wv p}㯔]Td*cy!ED > ؚ:WfRgJ-+cȮQuj w /fϖ,xOʢtW5Խ9 3 LSP~o&uDA)H 丗DŽlȭܠw6%\)CN-Y%a1L21|_@#Hdh!=[zÕm^HҴ?p }by:gofC%KKGH9\h3!˛Xlʞ!B{(eLQ 4ϛ@YJ́T|gZJ H|6=WDՅ"B:wRtF PSFw&3vY(N$;,[{I-xyQ ׏wWZa \auc!]Ïtũ@j5ڀ ^7V}|- ;&(Hl`d;&QFS?_H\?VZTe%4!M?#F+j󠦂NI řu$,$+j`B~v}6F)qaWe>.Y@|t -Gq^h (zr *n"&VX]4},{~{Pt˸A8z )ËB"'e`~ݸTysGv%orR ct*HP9$sbql ey}6α>Ii:Z#L8A#_~g;Wy+䝃ъ'$9.n< pTv z5sh{⊗0KİS/aԻ.igvVvZ/k~|ĖpFOZӊ<佗nF{yie]~\GO.(Y*(qEwUێ%uzKmO~:;»S;\-^߿5\K{=5e 5kLzjT9i pKy>mcSQ~[ MM;=} }ٵ٫nЂ£@MDE6SjpRSu10eכ%5Us%7X5wKٚqa|s ;+V-B =g=c*Gk1YYOH73sC9sy| K$v3+ (BkcۇrΕmօa\j&k# `]%zyL[!)lߗJ$B_/=)qfA(z>Цy`Yk O.,i:^v@ u >(C6joJ+?u1>v²!vSU%oӲ"'s`bN VoH,u;3:Zbom'abmXFKXubm]:&pމ JqgfG@\ }[X7)kהm30,iEG@o키Q4}pRc#1JtQPvDlۢ/wmՊoRP1۞YJ %pZWY$&yxjyNx`Lc,#{^JhPpWl\ɬ-WƲÌ̔4RßxxZJ`;M'6ޤ8ea}X>)C@KyE{R)K h-ʤqvhSg2?Ad^LMd,CZYK D_F,E2!Q 3ޕ.+s(\fͅcQ0 MP))Y(96Jy^0&0lT^+Å"~ _KQ*^Q`H~2EVqi۲+-QtU"*k̘jYPygX{Ƀ!x]*-LShY9YlfQg I..MPgp?Av.G [AO߫ f֤֔5^g0е4%g1",~,Wxb +M`y1Q9L̽85n@1N/1I9`-.lmو\[-2ᄀ e"o-KnSghɲfy ,қbMlҠH T{r7CK:5\+$k bۣY@mE\cVP6=qaI~\{i4k/ 1Q7 GlϪ6,OaoN DL~K(UXQ 賗?!92}*#*%\~OLyIá0%hag4*c/IRi wt_' ͊pf$P@2Ԧ ;6w-}Qp~󆸺2:ɢ|}J .OѦHړ,`4z4t!&RZİ4J DDMmy$zz9DRV62 )߸&q\~70#S-^}-Qe"Pɮ8v/ \ okxx»x`.,gEBC 9eLc}/Y: 5'< ~wFMx(grMk%fX(eMq8v۵:w"Bq( xa|v%V`bH*SO\ReYD"g iK kJ nbcrpˠftD*s/bp `9XZ)_;"$A䤸M쿡 H*^sػRp{B H×` TgcWcHe^?Խd L2ʶ.6y[~M D\>n]Śa|<T+Y=A-6-*'[r;19\}Y]^8Jf%6c{@prj+U~3#iCYVmSl %6*jTVc;[B1z{dsʍ`FZwP&mP_{dH1~ zt 0@V_Pz.]r3X C JmL_Ϫ Ʈ -*';h"Π%W^hyd~`0z5޹\3 f(W\+2&{\͵b J +I9'.߾McGY8 _@4e:>F%pE]?gY4cPSGvLdt}s$v7pKUCS4swCMHo^95QU$jY (Q᥻Y [!jl WJ>z+[ŜH!A7?1phTjsK\).#0k,r]j"L41 V$O2: n7сl-T Blύ飪 >ORl=yN `B0qc}lmNk77Xb !a}|ě qb V6hrIҭf54wz ,DhT5z /fv2xm}oB!=Cw5xi4 `|D@Éȼ Xє2}>jT H.vEl mHyKB$X"N::B=,I ᰽&vDo43CoC\._Qf#'HMr}YE?RBӺԦUOYPGVē er0/~OwJNܺhE!߀.:4ol%ϻM(ï˾U׫9L n1K mS] yf,iǡ Xj{{0ZcB75j#>4SQ+?I|##6vcx]4mT OR$S`(31|򠛚c$^TLC_Q;dGIq$[CXc ƆAH w[{Ǝۜn!65MF 4׹ 8&#(v3b}!U i) P'P#ׄf+PeM=!P(icQz̪JB +2eY$57g Yo fÈ9Քɵ ͨ4L;- M g7N"WbUb]mi_$ Akqei>bj"(p5ꬍ1D!][afBS(d0k\C s3)2J=7m%^$-B?:uѶ*PH1*STtA9GDQ _)Ede3 VD(_' Y:KtZJsM.LYNLWezv~ p,H\Dz/j><8'7MezQ23[AAq+./(- /F1szCQCEi dzVy^ôlL>l,̛ŕBtrn#V~JږCg>lC˟h#I7 @7݈-hJҙs(e pC`&Z {IQr)!ɚ5՗~4I*#BDm?3¡zwȼ֚$VeL[ D{4ED *3 3zLH+IJl|^P}Ĥ$~&8 X5?.fO.r6#@g"T HM7PFCFC=Lh z^73E 5-z_ ~?_9&YHc˜T/ bgj5P(T~w1";Kòq_SHM6mqtZt\ =q) @Um6a./kiqe&FݚODzHkCCj̤Phj/5ړ\`lgb֘I2Vmw@ GB8#0Zfc)E ~Y8DSǵHǫ19eݣ~*ʴow_-y.⮑?|O:HqD3 .y4Ç猗9Zs~kYN 6?+A$* y#m;#ǭ ZvkXCt=d} 1iEp"Fkô~0/􎛮1Ezfޕ'Ӑ m4>Y7df} !`ۥ(kZk>˿xD>/. /l/eҨrͯ ]7:T^+{~}cvTp38i0yӘ5GZrQqp Hŋ8gig@Lш )c^nJ^f7SG45P.}j+s@Z˜i,#y:#IZ}ZpW!_` ^-1IVVS4+Bf+ K@G B y,0Yq+25a:,dwql!ߑL wjV:m,~x'RmʼYThA9V IIKIi\#J ]u98ZV0Ŷ$[pn(5` ߕpe&UU[/LWH=kzf[YqTʪ,Ja\,e،Ra+tB ʤ 3b79ֽ?>/DVwRRv[*_2}ZV(?;-/.u3pwZW5]0rer`~%08~[m49 N2^UӹD!Qd567rNv ˂4+ZW9vݷ7H |WkZD>d/^yQUkȜ^ƭPXZs~k"+Py+' W/%&߷1ۉDΤ꡷O+A;)/|~\Lz8l{j'GG46F5ԔD )5n6(SK%CN*OJ8=.ie6eE2I$/˨!K/<҉ 06Z2h$"%h}3k)bmTT>l:g)tНb9(z"菰K;ǃ7E,FWy93Ivj~;~~.@2́޽]يenV4pCƸ )?"dR2l'kÄ2uKV*R&;TU52xs{vg{O89ڍ0vR"K '_!FG`Ҧz)]aR!HSQ԰L6}w t `I:R7#bo}ZQ0J5sZC4/."eXAfX6nm@uYџ>O +XK4Q4WZNk%0Mw2kC+M$W"0:Wˆ#KUoBhfb[Za?ZVH-C3dft< :(:0@ S(ϦO?4DY1xt=sBb8>f(6."Mk{7IE-_睏OLnW~I M&~SW\ܤ?v> $]!AF\J߱ۂfɮ}Fʺg%Շ:zrUbV&ҋ8CO_4SQSɤ;aJ/7RNt޿'azEZQ?BY_e^ZQP}V}j &Ӱ!n:*}?qMmJ)+%G](jI_ QV yjLŎ_kVn7>Tiw-eMΔ<؊+{ɵ>qTUu< 1~c*?[emPU̸M@n`FLRf)^!H<8r\J=eU>Ȑ~}kC)Z}Hۃ+/2ۑ@K]/-wd/sV T]O2.~|⢬_u_}T޾2[ڔvv9OCN;00d( SLc_7%CS4ztD\EWpC͒[^SY vcN 6Hթ\@E'=y #qfyfn!s qR>;3ZUޒ:E"^0*=Lhhdz;_;2Q h[yKMۊn&'OD>iۺzs]3^\;JkXi-I5P[ǸX\Nz/vn8Tvy9B'Z1o.fԸSl.afF;AZ>@2,-ǡc5-r9)4ɹh !ڣ{;AhwՌ2梲sZwk2l*[d֒uU"vkuޖ H<kd}ҾmjmHFy.~8B-Ђub7zԃO8|L6fkP K׈r{T=^ՍU+X ʶ#xoAߒrTd nLg}:IX>7ΐSNuzMk_#,?NdMVv46!}B9)w82GƼxGjԢ%&* ۃs3΂蜅 0%lNFWP#]~zrMasy2?QzXX`ߐ@cޤhg6\0 |l;O%1Zlt0ͮ 3/GFf "؀W7[L26PD:4.lkBR ژ[-ȉr$gn%9:SvWXYTY\qh'&+GbQ=mfr y9Y8ӑu:OK:<^N5qtN͏]4UPΎd1A@id_{{+_rxDX zcJE`.h/ѫ2*:Ȝ0Td#< hYc-A>'Ua >gySp}X2~?hӟU,#7E^S7f\,w \^Xcg @ HQ,衢ZIyӬ[rSsy/OcWrvVږ& +{IY*,7W,~\UHrq&Ljȍ&Mt}ge0'ˠE5ɱkr.>*yN~ $~(W"J@wBaB'տŒZKn c0&u=RH(*7"kNg@1U Kĵ䯷{dV-0 ƀvS!T}1ȔHߜGyxho0CTONv=mAGZUKMmfpȖ,j١ kYz@NoE\CnȻN9-RITlWkbs-V2kj%oY׆-Z#RÊ^4_GDtAn#vcr4:B$SWU@}67EYׅj1>-7P?OL}RXܠutyZlTxE Ip'T+W qbns.}(w)jH{h~,v@mQ#VM 9$'^L7!/e!MUˤ|#$,7zq\+:zyBYcMye[;rdeNoueWˬU2ކ EDРkm, S€%y=9Uv?c0^wݗ(f}n jU h8Iiy; ,ZMF䥚 ѽ|:gMb=|mņ.h+@Rt޺?O Xe&QLy xw$L`a%& #(!)Ύρ%6JD{{eSTtEaCU>^ܷ!EO'_u^xviЪ.^{2~_-L"7C칖ac1G6z $X9c:n4Z?p5|ZNZ  qf-gC8G\۠{V{H)@K~Iq+9&gh@p3qGZǬF~GѶ$*K桒5خIriIxOy4\ai`IQ"[-h[ƒ{oP@i Yնz \o*)5'.X^'|) =ADa5R#]zy1jxTQ$~x@flռG 7wL=[֚mU)0 O9tӯ;-gWC:*3B+,FYeL6vrLfc&eSO=TDr|  :Kǭh=WV7z)eJmo!#2/q}IVd:T-LM563EY&%JnO(cf_Ȩ$Q: Ss&h+Nvc[*zJE5e9v9O-8h _y*b8`/QuyfHlǟ Q ɑœEJu[|CX?犕t(-#W3#|ИWs0B$ lH.jdԙ-G]a7e'׵OƝ)"$|REg*3NpL?>8_to{w>9ۗ5:%%4|nazl l0Ԇ>5kElID$J/,7GFxkcSra $uD3zlͷ_A#WB H.UE1E%vul@͞cV'(fA@vڀ 3nީSȹZ' JPbeѢ4c=zB땙:ƾư<*D L0:;ሟKw ΨorXz*׆S\O}ѠT![|Ade˃!OKy*\c\AP/w![2gDAݐ+gͺ?29G%OI/<NzyST.NgiBtߟK}E+ZuӨXlwFbMDM;PvH&)*-u jav2^V9nvw1/&24v=iR'@|;,,_Nl,{qsQv]e  m4Fn(uMN0ݒOG7hK%'0ym'.ބxBz6!ZGo _mJ8ijz%WZ4 d5O+}/vZ*˟H{b!4_1αrܕWjK\G˲0S XheY6ndRcA=.s-, 5-<+Z*'3 Iȹҟ:ԂW(vS98%|*MM{OTwjDsOx Xsoߴ7ͯS/뵄Kφ,o- +V k5rx$Bx.#sư|[Vօm(kXPF IfR|)NV67()/8y_ro2ņmYOY?>&;Ȯa6J'/f̐Dn'|Ff)QxJQf_ny%.q$S؍?A<\^@\@_ 7W2>6dwE=zՁ?)Eـ!]B$__/^cJ_ߠ hG a݄?%=vRo+zReqG Ar/;dxcߧKaMTL9Z?&#ju>n. `j?b;,$Y YF k ώ G6K,vQ.}m1ziKsSO:Wc5 }fqbg@ׄ?t,kkġqQZ$pa_F5O+%Rpp]`Ij]LrRUy%bQYo[BQڳ[gec>`EZ˟kBVazn[%tT7ǁc/P ECH0kD|7"em hFQۑrRGdiؖ(o*6%b.txXYp$e Y[x3ݘIV'>[(̄-Gƛ~ׅ>O:\w8z&mZnaARexC{oF89g&9>Z!u*OڠRL#8d/09?\`5qYOz ّF[4_|y]nx_]?K,J2VҴArE620d;5MJ *-X*Aؒ3ZW>!3I@d]26iT*R{:2Ox#rGy3-hIZ\'c[ZNq">ƮZ)[1ܾqv ' 4Q_QFow?j'"Rr.v&_~S 5i[gcA'CڱtX@i;)yydU B&$GDŽEԍ$Z NrR 4sg2cJGJ8fٵЋqNoe}hgW=Nd” "6ailZ0FհՃ2x AL||lY E+JgPՆZӔ"2OMyYdAuHK(5%e VG!N]ABa(TuoeLE8w~{#HVUe'ȌcE>6a|UU XJ4-':Yd=!!F۹ "!ֻ:hxqW|kYʑ[w/<9 Z懧! %t;GtS7!  8p Ⱥ y p{?JEDPŭRt*JqF00Lb_X(wfO g@T\8 fE~nBMYn>HA&-̑',XQ)fP9PYhRt e?Lpj\ʭt^_ˡsUqE}[E蕈.{=k3^!`#@@#yrt&]Q^]S'p)\dTP$B& IqHQ˼~g&tm44{]46M ( .뉤+Co<h C#h4 @m`~8\i, $py0QzƉD ܆xN;u\1ـoGOJ܌x51}CQG,@$W,LK[l&/?Pe(;Z 9;q03ݶj~yaRraMCA!hwf4 }>U1_PhT2-w̱ⷰ YW5{lAd)'lJдLslؤhMrPx&ڹ$;aNJ "0 i9 Fg;iz0 jvdz?Grٴ-wX䂣6L2PS׮N::l_AO3w @kͯo_ebap"pz- ܓOUdG-+j9;(vUy]Vkcš`ڌ+6HV\&^q]$X|Yhf&5DTe:h\kPK\ l+5o&S-:w}]L=#8)V-?k,,ןj}njɼ^%hjY܂!;՛mwfyU\x7'-niŸKyjqzފ45/q733b i ^4ϋq^d0IbGe~<(Sz8 99gX33otJA?Suf}?#vzGNJtr@p̽O~+GvP=VN/8{i1]ߕ5.%%eo~Q"+$< ؜[v,lQmWAY⤶#2֘r։ybU:`VK(@U/M;qN0"3"PEd~}^֜aԤ{B:Ha4@w?lfӳ8>jDX~)1cnT7%I@Tna?H=^&b|uh(I,8{wg׃f2L Bet2ATEa1 ruW󘂍 $WA#EfIP˾^.o廟}IvV Hi%oK|1lų4LPceoRQylD(~?Ryթ럁Լ4]tln}V`#_R+sŸ!Mk|^5'8' OV]<.P2tA҇C'y8|`rh:?妶Ȫp=0㙹sb^)9^@bE_)&54MC]3[oeoe*/  aDmoDDQ31$if )-lD9b/UP7kqm)Wlk}(Ep5D w叇yCid=<軲(_T^Īr7*|",=^+9Jy3֒M]uN]Z)^mG12~9}d:NJȃ eOFK.]@ܞ}I[Մ@mPkoN~]G{'߷9~, +_0 L:oF=rgo.#̲/6]Z7Tc56ܘ:ɱ'̱Nf85ʸňg_`X,vF8I02̟sR-1 Jui^^uuϠ+#6bi9 078yo R 6цֻdl3ZKiO{q7#J ';vĦ03M#d QJD1LwX̎ i=_y\G)1v69'UlD D˜_Z^>m2c( }N&? iq9w ^ZFb)bSe \y?z}"K? 0}/0UW>WaU8FL.vCXݽF놙e'ؖ yz1SrB6k7UծDx2i\ cT RngE5J%`/YNұ`suvybԡ}­1Wo* h#;:&T"s*͑c:;>asH/lӂB*f?2{%L9_>ݍkٮL,䣏뽷Ԥ7.9K|yi <ԒnvH5*K(cjB9 /%J͝| tCٟ|kY^ JXD,;DpAEy`Pkl8٥2Twy0b;&:CB'.'a}}Syۅi aTjvcB:1q9qyMu]JfM7֮muZ]W'rG.LcN,M=?^H-N)<{Ia&ZO;..X+߿}DLxqcࠏ8U@M|r|8#޾[+j<$ 4HTpxL<80l?f,Yn1-E8Z9XtnvL$иQYF21`LXaJi%Z=#,:+[s~tl}h/-tnߡbL;o/;ag <4ۉ\{L朞!*;K|3A@P ]5M=GpAbyٟ=9zlK{%EyW܏؃WCxdlVt헛 ?NZY(cr`_T"S).G >]O r#N"[kĪ-lύvȼZjOm*>~oa:ҾE}%JŨ9W{@Y/ H ΀;[wlnԿrocL2  zθx5\BS2zjsp׆"L^49JSkY^^Ꮃ2^3Xql44OqӅׯ1MYV<iJ9Y90M1Y_זР2M 3\. @dfL!8기|'%''Q)TU]Zy'`qoYKM /dfCXTCg2s pb2IJ[Ӡ3‚Ak 9 ds횢D? G;}>6$AS.Z}J.< _! ~͸\92' C @%}6eNb,qޭ$ ogHXsܝw`r̤Yy׵zi j5~fBiyIOtuj_0*9V`%7URN lV5,ޏ.u9WQ`)Kv gtcD\~[I'j0GJƿɕ֥('zCVu]@ 9 RmO%j{G9ibl7`"'R` 500]u6{TDZmd+:\+y4b+^h&u,D4DUp0|cY~SdY'b:-O( K6ht7'i0Gʭ^fAOdp98$l.wu\d GI4悬yՙ΀_4 1GFƞjzgua:m}02yPK9P yU;1$`Tj 83okI>sL)G*:̦)i<@wޛ>fSNg<>n$$Z; i I.wL{R+map}OQ2,*_Kb7 :"P /j.nY# 8OOd߄9a.N?tzq NLE%f3@l掏םI_ՋT]-x H\xMAraAfYk5\pk |2$\=Q> ߽[&mP7ܲ~JT7U7s @ԝ~SN6 ij̝IHG^r}m|4rp+ىGbYOU}g`sdVF쇲{Aa ; N[&ɝglT`?wR)q.m Tv P,}F׏ւvґv ͿUξ"y?2|/} {3+,2q&K$r M#&[TE>q+,  DZ}q:3HƖ r#(A~ø4O(݇Q>*ǟS3_=4/jɘ"\>"՞ˀ=(l۶8~#ŵy+_/SDX3Hj`LV3g}I&ReњX+:ʟCrr7"}, xú V-^2 ]۷o#J~bw7BKj,Lo@CHd["8DTu2i[?Gwo9SQx w,d*ſ4myCw+8sqJWy͢~n't:aG~~Z܍o^(Յر?^=ͼED%L~?3vkSMc]\SfSE\AhzE=I9``؟!ߔ1Ϯzۏ)<:,8G7NǬsҏno{#;p/<KI7U,WŽ?MI̾TDj)4;bxDʝT}_^Od&M)aQӺ"j?2;^36`X%yPq&Fɛ nGJ"D9]|?dC scI.Kn4+;AzmF;Q: Lɠ hlʗRy]մL[!QE?=Ϣɿ^TKkp f"^׉|(.܈;JHqQW7*u ϩdq%P#Y ]9@33! 2@:=نTj8"h:Leэ(BBrE5֣kMxmգL'N$RuwsQR;( IԠx^ `jL_Tyf&p;d_9(rCoN Ċ%6}S"MZflg׾3q^nRiDENu-Ꭷ(&wJRէ%"їk~%r0oUQN&Qp*lװ 49Jk_Üym昮H"g;Pd!'?t1ٵӟh`Y8jږ)*Tr-뙬y_͊ Ej<vL"VbmK1˻q1 "{RQ"5VW. ni+"Yʼ䄲.S<|q!<U-HV*n*ňr+Wyq5 ~Vu_ z@L,KNf.0AyR9(\EV_T~>ysHrT1fA`j{#&C!z'P]^{+_GZ%;~;]Ca<+J$7z 0'~3y!a;+/`~}v4u.6H9;ED]I,Q+EԐ?=OZF_%"!K6 EШ6s@Řb㴛aurI봩BqpWC9Vi/f(ڋ3|hh7$j<P3SN K3DBHӠ9Ȣ;?虡4[TQ_2W%{x_\Вѽ&sS &!Gd9Z6R -9=qDEKj㩍T: e'g*7GU9aANݡOiɑ/OfǺLVr9#eW:C(PO=_ɉI/:w.!Bȃ+/Bn P'u <1vuco'ñ(hi1Zh7y O+sj: j\,LP~m3%yHxpF+@|*-7ՊR iݝy26q S:i'0x-Wȏ+ůbh7*j̜ASa3f(=;ySnP/dmXbBEfGkzy 1NqX[D/mYAS,Fʜ{Z\q,Xzz{4yp MoS}B Ā2;XR|V o٥Ԋ&ғNӏ]gUpiVg>}OBĕ[nFHKM]O){Lnһ8Rs-8B=dp>PcHǼq4>pĝɊ')&0%T^F {fΥt?tɉx4Zu+LTuxɼjtF'un0Q\>9oߴyCÑ], (.Dq]K:ѫUCCM /^_MYMdbiZ]` Ա3N2܋vy1%'g9QL`ʺ.eTY F1&GX w?u1:2Ч곷Z%<ӷL;@ };ax+qڅ.=R=O*[n-=2v6W~7Jh7C,4[o~t^MY韖9# 0]k _F?8bcƷ@ g}J5/df,80? v#B%\z+\/4C#\΋IVO ?}Zqċy cOނؔ4V80/n*BCU _ xhr;T7vRvvR<72WصJ J+7[)ӊilMZrV|ws#hr3/$GSv: F ׇʱDknKU,-LmIv\{PVSj=up} G#M4q@QBf7;.Ygm> ϨoN{˚3O푩i_af5HK /?zY9I/M ]}Σz$:!KPG@O`y=T}#<&]g'Cz1OƜQZB1I(Y؞tQ퇟6'b[c¤p9ߓY:4ӪT DEԄ'8c@xUo(fu1f"SV*as#g #犢wv&-brїi5Ebx%ksjG='d'ɡ)͌MlSXe"m8jo1ca*5l!sJRd0ʟ+)g!"eL ࣂcm Ɩ ??,‰`2]q6pɀaXܳ"w+3,E#scUJ `w H^.Ʊr%lN{DVH(#_vQq6botqOFpFpF&"߂Og&o(ћ.5+5/Cwheݪ"r20_t!썎v`$HW0_XڜY哪 TKbv>n]"q ϙQVμ]`Di aVo9y$˜\Bq)cK$rŒ4w),Eɹ!Z(%F3Bz[5iQr].眞]A|f$14 WPsCQg֫IE=m)r-bEM.x@HvvC&"xA$$z{l`.E`(fτy{,ZӶ&=%Ni^XkP9R=~ڤV 2*o" BY OdO3U]5,p'H}8%_9,,@Ю|2qf! EX|uqmE!pۊBʼn;l@{$e?ɍtG~F.!' :]BYqZ_/JNJdC(YFXFD)!3_(+G>C["q¡{dvdEM ]h.g[ߗ 7Ff'zV(=2.x!(#+ DLjX|W?u!(m]Uj"v|or"~. "^QDATЮY.H8#P+5@v~zwH2iT(pL woFATƬޑH0P!J `WP ʹ2>:?VSAxZG2ꕹ#bR11?\EWFCMԧ8״%oD'ϯMxX->6L@!mYv  ")!2K#"&⇹`L'3eO3M_ 9"J#!* c650g*Q\KEҏأ?'B&ʾ-9sC.B;3΢&aq`] @]H\w=֌ߗ֯yNm(=KK|Ĺ* 5RI i'Nc n8oi`[xYZj[a+*'LI<͕Y\ l=6%>{xQSMK~— wJy.4ZWdqHndQ *H2d+ ?Ll~$PlUˆ>) ́v }+s.Gi/taI w'ۉv?G ;OBsKצd=v7;M0n祝/#9L¦r#\9.zTkJ2tԱgn1g|ˆe=Uat/}ooLmxoV5 dJSbP5^-gaI?5\K 9CWaʠbsY[u:n-&eA=h|A^okAus7\,_7nUۻ66&G d!27{cojE9|=qB1{=JSt奈,H~icKYT$U?r3C~aNȆXt,^g%B{f~/ir>t=jvl@dMt/5˘Ho}"B*U/pU|~jU;[>6fP *~)V-j>}7n;~JVz7nA|޶64^=wNIwnvEդj=`fQ3WI *]S_͗cq7;(yf2~[y+l[wm/=_)@dr:'DDV^F/_nW<jWzEg QNtTP$k0gDGkqް{ʛ1fpWdbp9WWbL<t\ckϧW+rٝ5o/wiyn}Au0*eb%qY+X..R/w *)޼C{:]-׏.<֫ׯmfna;SbǗֽ2]S쐄)ty!aH呔H:L&3_QSWB+GސX;qF7 |A8d 3꭬H yhItt3ci[sL۶{X,wxf;\gGQЁG!"~y#ݟqI?$5'M^ZjONfϤ? OadxJTXr 2=GW+V;m>SEs$umȰl;hK\ZeVM| ԕ>2K>_̀U!3 v[`:e:Q@bUTY ;>$`Nj%;nHS)=2 QuW?  =JtID=p~=$֛SwrB]^;gÖS1QWa_vGD2oVkݼEI?H's'FLF,"nhuSB҉]yTe= V%|"׍H2}Losg}} =i T*D;&5C3ge{S@S*8$ә nH|4Rƥ%Xrju ҚU|rY$Wq.ÃEph 'EfytW\C#ӫqdqCSTV@ɶgs4պMMړ { &2{c:ky)uB5R K?"}JMkVl7TP27' kFy\5P0b5B-Xd3XLYSg_VQHWEe#ˉ3J=;Ukƣy\9Ҧ>t Hp-ߧL O(HlpD:1Enya{?L_Z\'|egǏ'*_7 f$KT('BQz.qδ'w/qor-nb ҕXY#r)^ѵkIo OH|Оx[HX m<3%(@19'MM'[}k#[L5L` AnH`$|qz*uZ<peNFG+Y>R&)H"g5ы&ujwpU1XXeK"evf%\:X5OsFzYe\jSgɩiDR^ r MKܫ|˓Ca%PKx׀^zac26zz-4Yg Te{3FZd)I5`aбwgEr-8zsF`X",8R&Xh}wXtOX//aGḣLCqbV}4g'Ae)V"q֓S+*P<G8,*KʫmɛSl\jVq]7-&KbSkLv:~|nx#:k0H[ ";8jp@w E%ᰲ bQ=aܾ"ߝE]x?ꁽI]CUX!5<)ቪBfV~(RsdwC6fzЌB,yϪ ΨBKE/[jmɽիyv#'zdiQ gTwte蔌[3VYZ;=̊9g,tį̎> Xcٺ//?@%Nb=[nl'{륈`3wdX-)hFO=X[PM;' 23NwOqK!8WuOk 05+ቝnE,T:3X9}TL=& ɨab=I6S62Jȳdy,"Pnu1o9LF.{QBi)5G⽙>=.zbK`j_jv*sg_G'(xVAp;e+k(bqϲUT sS#H]l\+3Deʂ'dÔKe0hՎn#FRrxx:P;)e3ҥ ˯:ZHG*稊Ya);[Kv̿y-pɓR F .hix~P޶_  AGH qod _^` 6RI2(MxYy8cY"',jUNЖbdxhbɁ N::(Z2hVjƎ!ZC&o$t?2z&ViҴQ=U@ySoMZ13oS!wz, %2f] :𵴌Qk"g <##کNWI{4Ԃi! ʰnr1" Mع&;Oj0NX.z`z ­4˷[ޢz̭٢/$}Q5)Տo5^bqS!|s@kg(^8Hj[|, Ե 1&N8fO [t"[^kCgX!3XBV{ItdMrx* ̈ ޣJ?#\ (AgR7"^D4leFBkDn6vl>VNc m˰G@m O7K^80elѳ>iA5r5OL䮛ހ8ʚ%$yfǶZX*UGxg|?%V:%-z/ pk۬i#%-igwxqR*;<(~| k(g]馆Dpc C8\`r Տ9dX%LV8+L!e}붿.,y|ϧX*+dz^Q#`,–Q,w6֩y/bEza8Sۚd"#u&G7rDV.'˘L|^G()`';(#bjI/%-##Z3_xh,{=o#lgTLFm+*_ AΫb$Ƙ"٧xƛY<c,a!jbsb"#VeH?I%4>RC]rjAͪ buu1F}Is-hKy7#B#ҩmt1Ƃ6?ڃ=IP=SI2EFkeKC14vc-31nʳߪz*uT.|)E_"5-@T4ISK *ƚZO{skm}m|G*`[cpVi:cA;Trt}1FVas=GEWx92~'\M\ȉ_9~GI-(ZWHwڵvAzT+j5+sN:?CE.bيn1h^ R :9OYf9ZA,׳qFd4@Pf<,@-r4TJ;ijȭձcu?.'enud3F ?  Κ^ofZhNuiYm: X0T2XYmژ vRj0x%xV 84j"Hadh-Kl{}1p_^OLf6é'LEHak&hu !}lW0C aPjpD=Nc0kHiƿ)(KCq\I`2PmqK7isO.xYa+G RBEES%ʆE%kĊĤzU:.et|EC;.s~KFQW@)ICaHԙ/2BQ4ävB zcqPa("òj=ESW׻{>*]/K ,pyR3dh i+6d3n)7N^>  QڕiA99A}%FL򍱱hH,R" hy-]0k~SGOx}|P nYhڥ)k*AN'5!OF<\B]լւQm;j-iR1dGr!QeF%PTD+-IoZ u3>˒TSo| @O逷-wGֹIFĐTP o()pn  Ï 9X0~0i>n1 '&X8xJ7&0nTޚpr%\Ax x~>ȳwbe+4gI>7zrAkVh8W<-뉘SE&pfa:<>mݝ_I^r aML )?|)-zHp.O`kPhYShzԷg= ɲ( q\M npq˞2ڳFCxG4@apйDS<Ny'dȟ)i_"q^6 )CVQqzD`iED}>i'A'^~$M3t3*&Fj7KC@As@XuXV={~G=ڐ`I擬Q WO@gU\(Lb8pbR2O,*t7低H@o엑}2lP<7m<xo_7kЯ <8w~73ea? .>7;Gߥ2Q2Oz1_?_Y5^FR`?K (omR:ɾ`P-<YXޠ{+a{ xYEsqA=gwFƦ!z0!",&q} X2ۻ߅ + ر6uJ @)slк*H ȾK_ j,&c 1J8j/B#,Q]kJ$ LP;,0"Y@K, }5aOEBYsQ`z\OH i8rX>PjlC1c-le>߹Ի贰h`Ș+!nˊe6Z>c:=41^ Gd/ XI2b dr*ofXNۺE@+˙5Ӊ >( cԔT/ c4h2܇ ^Up+qQ׸]7Պ|o*{Sۛ .59]tpk1홹Vs:QC5Eb;XC<' (en)CQ㊖ GEa%U%Ē?M.G׌.FSרLzs!1LKu^mn9ǓJ!wRKޚt|jf{ӶZzFP 'Hay $$eM7:˝/L3[QT14r(ʪit{eAŘ"IV40-q=r É )nkSIEzG#v(kaBjR7Lkύy;2T &!uôާt"4WSh &4R7LkF)|s%$I$IxRxsKája2mPF[/Ls5R LhV#nS@$I$It[=TU ҤEk&!uôAp[ @|m 4     Y~J  v ҪFe(²j7b @U8`h?:Lv$Iffffր<IT@RDDDa Rw sS\:˴%2]]p>lA@} 0fnFhCWIk\\Zg+4_spTkZ؏?&0Yęi FG(A h3ƦE~]bRrJܩi!Vwi8̏|hx@$JjaZ)VtԻ(/,}Eս/N&jsquvx};㏻Kd(6eSfQeX[-7F Mb3ʹEm=mڥ9n1/iyv歶͎\L)!cob)Bej_>T,)41jN/?/YM#v9I)~ǞاCþvDU]bK?Ah.|Z`^aYךSf0 U_ zMzgtvV1z-Q'0瑛u$H3}^5H= 'dma#&M(@ I55:dT١ \'aMT֟FWc-/^Z &Xb-?Q/gxO7Pr#RߪtR_Jv"D:YztYCSRRFi1ԧbK{xP<˟?3HIp5A׽lu'Zo˃4E„f9Bieg]qҥK.#ΰBm QI5 RaB!uôd2bX,bX,bӽ_z9:, OXXY+2$@gџ:B>ϵ;fn m7GoKo6 &LG(B8Ɯ-B0b8AR4r Jr:xS'4P4r :D)"mMذGiFG 8Om␳8bԥI=~f9?˲,Zr0٨hj|fy3|eE3~'|I%X+! ۜۈ <yX>۩uzo_VA)BDgF"U8VC %PzAQr~[O]o3M,%Pn1)(cFJzVm3Gpe 9DE56PGo5I-Btrb @o`k֚fs]r9|>.L&CWǓjB 0?R7Lkq#pTUUUUUU+<-U:Rj돧X,֛GENWr\ݎm۶vqc1$]?s . x{r]H\p|a/?yIS{XL>>VCM<!_fKMQh4{f'ou9.@AL(Bq #($E3, $+.aѽ2ӭx|7˲Qd0I @%YQ50c>c. \Hut@1(!KPe ^>T0Rғ/ނ5 3]Jk>pmpvIxXWÎLsV, n-[ Zxu"=3*h{BFYPm1 dE Ӳ#0B*ּ+x3>|$$ @O>X($I$I$I$I$I$I$I$I$I$I$I$I$I$IB$IHb6&V?哸}&\k:2lPƅ\il NZzQ[ЪlͱW1ԬM UA($E3,AdEtWff@8CPC0f3 9}@x@(%徥jƏU١QgGO8[?Z|0>9Ts.m>GXb鈱Q/` t>x<-Q'a^r!0YmaZc7 U~4]bF  LhV#nؽZ*(((((`@bF @0&׶K _ DDDDDDDDDDliiiiiAdh{diiiioJ VUUUUTH$I$I& x I$I$IJ$I$Il۶m۶mvfffffffffߐPj0fȇ I'bUI$I> l۶p3^IG 0m5vV@UUUUURJ)RJ)R $I$I$4c1c18>$I$I$ٶm۶m۶$I$I$ UUUUU+>B@41Vb AkۅJH0EP x _V :>$I$I$%I$I$IffffffAAXVT9s9R]maYQRԠ ,+VeEJ?"""""eEJR6ZjjFU+533333K ²j$I$I$ٶm۶m۶}kO$I$Im۶m۶mC>!MQD+@Ь6GH0M*I$I$I$I$I!9O(X&!uô@@`O$I$Il۶m۶mxo*U$II$c1kZs9FMb* JK+QZLHQZNHQZMHQZ!b J+) B&"AVȦX$ DE(@X$ +oUU$I!9;T@RUUUM3E1AV1 @ |!Ç>|k011111111`jjjjjjjj\=[."""{1v{?CLZUwkb7K xH YDԀ@ 5sm˕:,Pe}kgN\3֜A< ]o&h2wK爱Q/ON I^mTV.ً=ZJOjq觬p{"r0wTʂFXI2AIf`}"%}b>PD+m$d^o~Y S)}{/~3`Mj@ނ'D2̀lN^К߄B[v2{^3WL8ǜp >.sq-Svk|E?n#K\VTM7Lv<@$JjaZzVA3, dHV40׺m]d &86g/.x]x\@n+wkZ&E'CPt>/0!E3yf/dAYP髎F{߿y;f C'/VjE@%Z̊s I (Ɋ˭j Lv<^_)@P4r :D)",q,H, JIьh2[6Wz%(TUUUU-C2 vn?sCMb#VVM8>O_$ @OaDf,ufI"v+!MU![9WŴ4@`I#콌L9!"ɸPZQŠ]-ekރcv>:ij}׃e2s&|}.hKX~劉ibCXQڝ(Z١=VHOpa1-lfOed,$}y=a@+I]ʗBvڻ~dϗ߯#|?TX thLj*,bW$S|{5e[KhunJR ٭gi|e]M.lORa!D!rE柞(Ƚs&E+yYQmV3" ʇ?j[CH/Kֻ NwMXD|fԦ$=b_UO }1*{SVlOM=nj=hϡwfmog3#kBKy}q̃™߼ѥ1n^Cpڕm(9Z%`NZX^2yfWtq<_^.M25u >͔8g !$b-W*A#4ptq; Dzk|@Na['X͝"\]TfW"r_ЎWcɆUr=&V_dCXQz)}+o}ٞY_]P|/o߶hB -zb8Y{s^fˣvvɜPX'H:!lY ^ f'^i-NdJ@3 ,")6MÈrG4qĶ*>Ҏ;&f #Q4靠abA-#^+TLu"#|Nƨr}k õiۤ0 }W,S0l[ m^oEMXIt,YݗmRu;4€i8sXθ͕0+yJ)隋LU\#jlJɸ!ӟ馁)=2G6{_o8Ot!(̬u֐ġ*0"\pXb+NAbxH,E4 r:'@^"D+H ,Д.,F|ykHB  C0$Dshjhh.FT0y'\^E<fo!Եb##1hܪl-duJhvDĞ8+yq'_V ,MX̝EU|)It"IWUqӝѴHwg⼝U-ηnͶnÎ{N;뼋.꺛n뾇{hCaX*UФY05& ror(xáZ- R8-·-nC An;z'W^{wl$EDE%5-} DHAd rDLB!J},a f>&&Tٱ*%G$G]D1X DBpy|!K+K, 0 ]D. yK[DPitpy|P$HerRhuzəRtD'Nr)3gY!_rku)["6-bK:Zn;9xFw/s|!dqՐ4SCɓ J*3L=R9Fi*]#U5xѯziA`G QOt>LBX"%.F&j;]\ܥwKWPTRVQ_[>}ן M-m]=}C#cS3s K+k[;=:9{\t&La9ʲlYTpt2, /n Ӳ5 Wl'Hn+( @,O *`.L*K^kgEqrv#ׂ4r4UשVdKh++-Zkh2['gh[;֭nj`ݨu^neo|2 (A!P4pk?iEF[,[ %,֝2. ӲR(N,/ʪn|"Ui^m?~ެ/fceoIfXDIVTM7Lv\(N`! 8 !A1 )a9^%YQ50-q=?97i4 ;~ΗXYeh#Y((6-7ҤTkZ2v tiµ(媍u>Ĕ/1v4ˮj!˜ KpeU4h<κ^q -,|B=~  $ "L & Vn&R\To C08Bc8qߤB*H"SCF,6I0%R\T5Z`4 a*km@$%7S ce5-U|Db}CDIgMVy}ӄaͣK#Ƈ•/D^@d(>D"qmG`ԐK0}Ke݅gpϥ~Iia{T]~U^Nx×T{DUx!3NyIj=¹G-z"ڈ uaBq!)D)@Bк"""""z,'DBL\u]RUi0 B|t&   !LJ)RJRJa~Y4/}ҫf(gOj{M;,&X` )7wE`R[ETUUջsqX u߽5z;d:7+&y\{#JVqHt a˗ܠhtuTD]+G00 [ˇ.t]Lq}.LV\w-ƒ?h ۄ;2A8t7QO8Kl%z^t1B U='#E4 !otgKR, RJ)O[#R4&YStdA)å'(#TY[~jy=B֣hS17@PkUN%o"܊YSi=ɻEj{1TUћ:ܯ^q[n` 7Pkra 41uL&OA"dCo(.Va ~}];z/0 >c+k"5"zD1%,kp6<#(V|pA:"V={o|2&#'dЏf,}:bNi96<3mYO‚Eq*OWAYP'{~܇3f_H h2D$KY+՝!-1ٯa,?>߿uj%$8).;#qԲ2Ӛx9}ҽo)=X^i}[zRH+OM"c%y5ÙC1OW/U/qi SV8Pr_qV7;7C=*\O8x? }qy^H#rͧ~OZ]:T _s7V4~3W7]@+9/pRJN\Z~p8Tz0.=贉aX{z?b+{CSR>g.. ־ Ν?:?Ο%ԋveWhUlWG}OM 6ô YGu1[&v8iƈ>Hc< E[XRJ<$dmF!SXi'&ə<oc&=0x/X j@ѧ,wbjIA . FgWlcv*iߧ,}+cCճf_cY:u&%w2}җ佳ztcL䎩Ɣ13c-n2Q~_tdu.;N D/^-g|F9ʞO=ֆZy0&B+S,Z?SGhzB2 *ܔ!tH\ B0&]mxT D#qe4qd#BG,*FBK+qZzv`4TOc7oc&lnd0Y{e׶ WȨ ƅ\f1cq9)rX_rp B*vvFˍ&<}88AMG9>^v/ƚ V1 o*eI[fZ#5j$uKp_BÆpo uڐCSi VZ`︕LoNZxoy6{Oh.3LC-JLMOE'z| jxC$ZbJ&DLC@]|c&8y+ 8@L}BzD}yoj~xuip4GZb <Xg<=%61 Ks /44H{s 7/vG;y 8>rHYȶλ:~wcU˱QStT6dY L1.\}_.tW!.jҮ+ǀXK}>Mfi6gŽ+ƽ:v,^i_ |q Xдp#*4S_۽xJ.tbl[NIM+]F㭓{TM; {.Lnw](];XC*0 S| 6 )#hT| jLj">µ)+2;B"bjw/ҾլАAe0̊UsՆ=KUw2b"t!VZ-̃М%En-q$5rbo$S#\xW gq JJ1 j4 p &``s^Il(V@BF G'q,7%l} A.aqE^dBhB.UaLB<V1 M'?حt9tdwpy<m1d\yR =]d;KY*$ nz_R~vW ',0oål!B.IzRJ)1cq9s.B!RJ)J)R*Y$ c1B!B)RJ)c1c/t~&+F,lϨI B~*GI%(#͂i[5[qw*2K'>NcSmkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.ttf0000664000175000017500000050325414664334534026371 0ustar carstencarsten PFFTMkGGDEFp OS/22z@X`cmap : gasphglyfMLhead-6hhea $hmtxEy loca\ maxp,8 name㗋ghpostkuːxY_< 3232  '@i33spyrs@  pU]yn2@ zZ@55 zZZ@,_@s@ @(@@@- MM- MM@@@ -`b $ 648""""""@ D@ ,,@  m)@@   ' D9>dY* '    T     @ f %RE    $!k(D'  % %  0%/&p@0 !"""`>N^n~.>N^n~>N^n~ !"""`!@P`p 0@P`p!@P`p\XSB1ݬ        ,,,,,,,,,,,,,tLT$l x T ( dl,4dpH$d,t( !"0# $,$&D'()T**,,-.@./`/00123d4445 556 6\67H78 8`89L9:h:;<>?h?@H@A0ABXBCdCDLDEFG0GHIJ8KLMdN,NNOP`PQ4QR RlS,ST`U0WXZ[@[\<\]^(^_`pb,bddePefg`giLijDk klm@n,oLpqrsxttuD{`||}}~Hl@lH T H`@$\XDTXDP,8d\Hx tXpdxt@ Œ\ ļŸƔ0dʨˀ͔xϰЌ,ш҈ ӌ8,՜`lHش`Tڸ۔@lބ߬lp 4X$l( ` d      ,,8(Xx|T@| !"x##l$$'h(*L,T.L1t1230345t6T7$8 9H::;<<?X@ABCDEHFHGpHHIxJ JKLMN@P@QRSDT ULV`VWXX4XZZ[d[\|]^`aHabcXdetfhghi\jxnp@svwxyz{h|}}\lt4t88LT|| 4xLX(  @lt$xLL HĠT(  ʈˠϔldPՄxpڬTT ވL <H$l4 Pl ,xp,xt d 44,hP 4   4<,,408$8T |!h"$L%0&H'()*0*+,.$.012@234t5$69 ::; ;<(<=4?@ACDFH`HILLLLLLLLLLLLLLLLp7!!!@pp p]!2#!"&463!&54>3!2+@&&&&@+$(($F#+&4&&4&x+#+".4>32".4>32467632DhgZghDDhg-iWDhgZghDDhg-iW&@ (8 2N++NdN+';2N++NdN+'3 8!  #"'#"$&6$ rL46$܏ooo|W%r4L&V|oooܳ%=M%+".'&%&'3!26<.#!";2>767>7#!"&5463!2 %3@m00m@3%    @ :"7..7":6]^B@B^^BB^ $΄+0110+$ (   t1%%1+`B^^B@B^^"'.54632>324 #LoP$$Po>Z$_dC+I@$$@I+"#"'%#"&547&547%62V??V8<8y   b% I))9I  + % %#"'%#"&547&547%62q2ZZ2IzyV)??V8<8)>~>[   2 b% I))9I %#!"&54>3 72 &6 }XX}.GuLlLuG.>mmUmEEm> /?O_o54&+";2654&+";2654&+";264&#!"3!2654&+";2654&+";264&#!"3!2654&+";2654&+";2654&+";267#!"&5463!2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&^BB^^B@B^@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&B^^B@B^^/?#!"&5463!2#!"&5463!2#!"&5463!2#!"&5463!2L44LL44LL44LL44LL44LL44LL44LL44L4LL44LL4LL44LL4LL44LL4LL44LL /?O_o#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(8 (88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88/?O_#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88(@(88((88((88(@(88(@(88((88(@(88((8 (88((88(88((88(88((88(88((88(88((88(88((88y"/&4?62 62,PP&PP,jPn#$"' "/&47 &4?62 62 PP&P&&P&P&P&&P&P#+D++"&=#"&=46;546;232  #"'#"$&6$   @    @  rK56$܏ooo|W@    @   rjK&V|oooܳ0#!"&=463!2  #"'#"$&6$   @ rK56$܏ooo|W@  @ rjK&V|oooܳ)5 $&54762>54&'.7>"&5462zz+i *bkQнQkb* j*LhLLhLzzBm +*i JyhQQhyJ i*+ mJ4LL44LL/?O%+"&=46;2%+"&546;2%+"&546;2+"&546;2+"&546;2`r@@r@@n4&"2#"/+"&/&'#"'&'&547>7&/.=46?67&'&547>3267676;27632Ԗ #H  ,/ 1)  ~'H  (C  ,/ 1)  $H ԖԖm 6%2X  % l2 k r6 [21 ..9Q $ k2 k w3 [20/;Cg+"&546;2+"&546;2+"&546;2!3!2>!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@@`0 o`^BB^`5FN(@(NF5 @@@L%%Ju  @LSyuS@%44%f5#!!!"&5465 7#"' '&/&6762546;2&&??>  LL >  X   &&&AJ A J Wh##!"&5463!2!&'&!"&5!(8((88((`x c`(8`((88(@(8(D 9 8( ,#!"&=46;46;2.  6 $$ @(r^aa@@`(_^aa2NC5.+";26#!26'.#!"3!"547>3!";26/.#!2W  .@   @.$S   S$@   9I   I6>  >%=$4&"2$4&"2#!"&5463!2?!2"'&763!463!2!2&4&&4&&4&&48(@(88(ч::(8@6@*&&*4&&4&&4&&4& (88(@(8888)@)'&&@$0"'&76;46;232  >& $$ `  (r^aa` @`2(^aa$0++"&5#"&54762  >& $$ ^ ?  @(r^aa` ? (^aa #!.'!!!%#!"&547>3!2<<<_@`&& 5@5 @  &&>=(""='#"'&5476.  6 $$   ! (r^aaJ %%(_^aa3#!"'&?&#"3267672#"$&6$3276&@*hQQhwI mʬzzk)'@&('QнQh_   z8zoe$G!"$'"&5463!23267676;2#!"&4?&#"+"&=!2762@hk4&&&GaF * &@&ɆF * Ak4&nf&&&4BHrd@&&4rd  Moe&/?O_o+"&=46;25+"&=46;25+"&=46;2#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!26#!"&5463!2 @  @  @  @  @  @  @    @    @    @   ^B@B^^BB^`@  @ @  @ @  @ @  @ @  @ @  @ 3@  MB^^B@B^^!54&"#!"&546;54 32@Ԗ@8(@(88( p (8jj(88(@(88@7+"&5&5462#".#"#"&5476763232>32@@ @ @KjKך=}\I&:k~&26]S &H&  &H5KKut,4, & x:;*4*&K#+"&546;227654$ >3546;2+"&="&/&546$ <X@@Gv"DװD"vG@@X<4L41!Sk @ G< _bb_ 4.54632&4&&M4&UF &""""& F&M&&M&%/B/%G-Ik"'!"&5463!62#"&54>4.54632#"&54767>4&'&'&54632#"&547>7676'&'.'&54632&4&&M4&UF &""""& FU &'8JSSJ8'&  &'.${{$.'& &M&&M&%/B/%7;&'66'&;4[&$ [2[ $&[  #/37#5#5!#5!!!!!!!#5!#5!5##!35!!! #'+/37;?3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3???? ^>>~??????~??~??^??^^? ^??4&"2#"'.5463!2KjKKjv%'45%5&5L45&% jKKjK@5%%%%54L5&6'k54&"2#"'.5463!2#"&'654'.#32KjKKjv%'45%5&5L45&%%'4$.%%5&55&% jKKjK@5%%%%54L5&6'45%%%54'&55&6' yTdt#!"&'&74676&7>7>76&7>7>76&7>7>76&7>7>63!2#!"3!2676'3!26?6&#!"3!26?6&#!"g(sAeM ,*$/ !'& JP$G] x6,& `   h `   "9Hv@WkNC<.  &k& ( "$p" . #u&#  %!' pJvwEF#  @   @  2#"' #"'.546763!''!0#GG$/!''! 8""8  X! 8" "8  <)!!#"&=!4&"27+#!"&=#"&546;463!232(8&4&&4 8(@(8 qO@8((`(@Oq8(&4&&4&@` (88( Oq (8(`(q!)2"&42#!"&546;7>3!2  Ijjjj3e55e3gr`Ijjjj1GG1rP2327&7>7;"&#"4?2>54.'%3"&#"#ժ!9&WB03& K5!)V?@L' >R>e;&L::%P>vO 'h N_":- &+# : ' +a%3 4'.#"32>54.#"7>7><5'./6$3232#"&#"+JBx)EB_I:I*CRzb3:dtB2P$ $5.3bZF|\8!-T>5Fu\,,jn OrB,7676'5.'732>7"#"&#&#"OA zj=N!}:0e%  y + tD3~U#B4 # g  '2 %/!: T bRU,7}%2"/&6;#"&?62+326323!2>?23&'.'.#"&"$#"#&=>764=464.'&#"&'!~:~!PP!~:~!P6 ,,$$% *'  c2N  ($"LA23Yl !x!*%%%% pP,T NE Q7^oH!+( 3  *Ueeu  wga32632$?23&'.5&'&#"&"5$#"#&=>7>4&54&54>.'&#"&'2#".465!#".'&47>32!4&4>Q6 ,,Faw!*' =~Pl*  ($"LA23Yl  )!* <7@@7<  <7@@7<  pP,T MF Q747ƢHoH!+( 3  tJHQ6  wh',686,'$##$',686,'$##$/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?O_o%+"&=46;2+"&=46;2+"&=46;2#!"&=463!2+"&=46;2#!"&=463!2#!"&=463!2#!"&=463!2        @     @   @   @   s  s    s    s  s  /?O#"'&47632#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2     @     @   @  @          s  s  s  /?O#"&54632 #!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2`      @     @   @  @     @   s  s  s  #"'#!"&5463!2632' mw@www '*wwww."&462!5 !"3!2654&#!"&5463!2pppp@  @ ^BB^^B@B^ppp@@  @    @B^^BB^^k%!7'34#"3276' !7632k[[v  6`%`$65&%[[k `5%&&'4&"2"&'&54 Ԗ!?H?!,,ԖԖmF!&&!Fm,%" $$ ^aa`@^aa-4'.'&"26% 547>7>2"KjKXQqYn 243nYqQ$!+!77!+!$5KK,ԑ ]""]ً 9>H7'3&7#!"&5463!2'&#!"3!26=4?6 !762xtt`  ^Qwww@?6 1B^^B@B^ @(` `\\\P`tt8`  ^Ͼww@w 1^BB^^B~ @` \ \P+Z#!"&5463!12+"3!26=47676#"'&=# #"'.54>;547632www M8 pB^^B@B^ 'sw- 9*##;Noj' #ww@w "^BB^^B  *  "g`81T`PSA:'*4/D#!"&5463!2#"'&#!"3!26=4?632"'&4?62 62www@?6 1 B^^B@B^ @ BRnBBn^ww@w 1 ^BB^^B @ BnnBC"&=!32"'&46;!"'&4762!#"&4762+!54624&&4&&44&&4&&44&&44&&4&&44&&6'&'+"&546;267: &&&& s @  Z&&&&Z +6'&''&'+"&546;267667: : &&&&  s @  :  Z&&&&Z  : z6'&''&47667S: : s @  : 4 : | &546h!!0a   $#!"&5463!2#!"&5463!2&&&&&&&&@&&&&&&&&#!"&5463!2&&&&@&&&&&54646&5- : s  :  :4:  +&5464646;2+"&5&5-  &&&& : s  :  : &&&& :  &54646;2+"&5- &&&& s  : &&&&  62#!"&!"&5463!24 @ &&&&-:&&&& "'&476244444Zf "/&47 &4?62S44444#/54&#!4&+"!"3!;265!26 $$ &&&&&&&&@^aa@&&&&&&&&+^aa54&#!"3!26 $$ &&&&@^aa@&&&&+^aa+74/7654/&#"'&#"32?32?6 $$ }ZZZZ^aaZZZZ^aa#4/&"'&"327> $$ [4h4[j^aa"ZiZJ^aa:F%54&+";264.#"32767632;265467>$ $$ oW  5!"40K(0?i+! ":^aaXRd D4!&.uC$=1/J=^aa.:%54&+4&#!";#"3!2654&+";26 $$ ```^aa^aa/_#"&=46;.'+"&=32+546;2>++"&=.'#"&=46;>7546;232m&&m l&&l m&&m l&&ls&%&&%&&%&&%&&&l m&&m l&&l m&&m ,&%&&%&&%&&%&#/;"/"/&4?'&4?627626.  6 $$ I     ͒(r^aaɒ    (_^aa , "'&4?6262.  6 $$ Z4f44fz(r^aaZ&4ff4(_^aa "4'32>&#" $&6$  WoɒV󇥔 zzz8YW˼[?zz:zz@5K #!#"'&547632!2A4@%&&K%54'u%%&54&K&&4A5K$l$L%%%54'&&J&j&K5K #"/&47!"&=463!&4?632%u'43'K&&%@4AA4&&K&45&%@6%u%%K&j&%K55K&$l$K&&u#5K@!#"'+"&5"/&547632K%K&56$K55K$l$K&&#76%%53'K&&%@4AA4&&K&45&%%u'5K"#"'&54?63246;2632K%u'45%u&&J'45%&L44L&%54'K%5%t%%$65&K%%4LL4@&%%K',"&5#"#"'.'547!34624&bqb>#  5&44& 6Uue7D#  "dž&/#!"&546262"/"/&47'&463!2 &@&&4L  r&4  r L&& 4&&&L rI@& r  L4&& s/"/"/&47'&463!2#!"&546262&4  r L&& &@&&4L  r@@& r  L4&& 4&&&L r##!+"&5!"&=463!46;2!28(`8((8`(88(8((8(8 (8`(88(8((8(88(`8#!"&=463!28(@(88((8 (88((88z5'%+"&5&/&67-.?>46;2%6.@g.L44L.g@. .@g. L44L .g@.g.n.4LL43.n.gg.n.34LL4͙.n.g -  $54&+";264'&+";26/a^    ^aa fm  @ J%55!;263'&#"$4&#"32+#!"&5#"&5463!"&46327632#!2$$8~+(888(+}(`8((8`]]k==k]]8,8e8P88P8`(88(@MMN4&#"327>76$32#"'.#"#"&'.54>54&'&54>7>7>32&z&^&./+>+)>J> Wm7' '"''? &4&c&^|h_bml/J@L@#* #M6:D 35sҟw$ '% ' \t3#!"&=463!2'.54>54''  @ 1O``O1CZZ71O``O1BZZ7@  @ N]SHH[3`)TtbN]SHH[3^)Tt!1&' 547 $4&#"2654632 '&476 ==嘅}(zVl''ٌ@uhyyhu9(}VzD##D# =CU%7.5474&#"2654632%#"'&547.'&476!27632#76$7&'7+NWb=嘧}(zVj\i1  z,X Y[6 $!%'FuJiys?_9ɍ?kyhun(}Vz YF  KA؉La  02-F"@Qsp@_!3%54&+";264'&+";26#!"&'&7>2    #%;"";%#`,@L 5 `   `  L`4LH` `   a 5 L@ #37;?Os!!!!%!!!!%!!!!!!!!%!!4&+";26!!%!!!!74&+";26%#!"&546;546;2!546;232 `@ `@ @@ @ @  @  @  @  @ L44LL4^B@B^^B@B^4L  @@@@    @@   @@    M4LL44L`B^^B``B^^B`L7q.+"&=46;2#"&=".'673!54632#"&=!"+"&=46;2>767>3!546327>7&54>$32dFK1A  0) L.٫C58.H(Ye#3C $=463!22>=463!2#!"&5463!2#!"&5463!2H&&/7#"&463!2!2LhLLhLhLLh! &&&&& &4hLLhLLhLLhL%z< 0&4&& )17&4& &&#!"&5463!2!2\@\\@\\@\\\\ W*#!"&547>3!2!"4&5463!2!2W+B"5P+B@"5^=\@\ \H#t3G#3G:_Ht\\ @+32"'&46;#"&4762&&4&&44&&44&&4@"&=!"'&4762!54624&&44&&44&&4&& !!!3!!0@67&#".'&'#"'#"'32>54'6#!"&5463!28ADAE=\W{O[/5dI kDtpČe1?*w@www (M& B{Wta28r=Ku?RZ^GwT -@www$2+37#546375&#"#3!"&5463ww/Dz?swww@wS88 ww#'.>4&#"26546326"&462!5!&  !5!!=!!%#!"&5463!2B^8(Ԗ>@|K55KK55K^B(8ԖԖ€>v5KK55KKHG4&"&#"2654'32#".'#"'#"&54$327.54632@pp)*Pppp)*Pb '"+`N*(a;2̓c`." b PTY9ppP*)pppP*)b ".`(*Nͣ2ͣ`+"' b MRZB4&"24&"264&"26#"/+"&/&'#"'&547>7&/.=46?67&'&547>3267676;27632#"&'"'#"'&547&'&=4767&547>32626?2#"&'"'#"'&547&'&=4767&547>32626?2ԖLhLKjKLhLKjK "8w s%(  ")v  >  "8x s"+  ")v  <  3zLLz3 3>8L3)x3 3zLLz3 3>8L3)x3 ԖԖ4LL45KK54LL45KK #)0C wZ l/ Y N,& #)0C vZl. Y L0"qG^^Gqq$ ]G)FqqG^^Gqq$ ]G)Fq%O#"'#"&'&4>7>7.546$ '&'&'# '32$7>54'VZ|$2 $ |E~E<| $ 2$|ZV:(t}X(  &%(Hw쉉xH(%& (XZT\MKG<m$4&"24&#!4654&#+32;254'>4'654&'>7+"&'&#!"&5463!6767>763232&4&&4N2`@`%)7&,$)' %/0Ӄy#5 +1 &<$]`{t5KK5$e:1&+'3TF0h4&&4&3M:;b^v+D2 5#$IIJ 2E=\$YJ!$MCeM-+(K55KK5y*%Au]c>q4&"24&'>54'654&'654&+"+322654&5!267+#"'.'&'&'!"&5463!27>;2&4&&4+ 5#bW0/% ')$,&7)%`@``2Nh0##T3'"( 0;e$5KK5 tip<& 1&4&&4&#\=E2&%IURI$#5 2D+v^b;:M2gc]vDEA%!bSV2MK55K(,,MeCM$!I@#"&547&547%6@?V8 b% I)94.""'." 67"'.54632>32+C`\hxeH>Hexh\`C+ED4 #LoP$$Po>Q|I.3MCCM3.I|Q/Z$_dC+I@$$@I+ (@%#!"&5463!2#!"3!:"&5!"&5463!462 ww@  B^^B  4&@&&&4 `  ww   ^B@B^ 24& && &%573#7.";2634&#"35#347>32#!"&5463!2FtIG9;HIxI<,tԩw@wwwz4DD43EEueB&#1s@www .4&"26#!+"'!"&5463"&463!2#2&S3 Ll&c4LL44LL4c@& &{LhLLhL'?#!"&5463!2#!"3!26546;2"/"/&47'&463!2www@B^^B@B^@&4t  r &&`ww@w@^BB^^B@R&t r  4&&@"&5!"&5463!462 #!"&54&>3!2654&#!*.54&>3!24&@&&&4 sw  @B^^B  @w4& && &3@w   ^BB^    I&5!%5!>732#!"&=4632654&'&'.=463!5463!2!2JJSq*5&=CKuuKC=&5*q͍S8( ^B@B^ (8`N`Ѣ΀GtO6)"M36J[E@@E[J63M")6OtG(8`B^^B`8 ',26'&'&76'6'&6&'&6'&4#"7&64 654'.'&'.63226767.547&7662>76#!"&5463!2  /[  . =XĚ4,+"  * +, 1JH'5G:: #L5+@=&#w@wwwP.1GE,ԧ4 4+ ; /5cFO:>JJ>:O9W5$@(b 4 @www'?$4&"2$4&"2#!"&5463!3!267!2#!#!"&5!"'&762&4&&4&&4&&48(@(88(c==c(8*&&*6&4&&4&&4&&4& (88(@(88HH88`(@&&('@1c4&'.54654'&#"#"&#"32632327>7#"&#"#"&54654&54>76763232632   N<;+gC8A`1a99gw|98aIe$IVNz<:LQJ  ,-[% 061I()W,$-7,oIX()oζA;=N0 eTZ  (O#".'&'&'&'.54767>3232>32 e^\4?P bMO0# 382W# & 9C9 Lĉ" 82<*9FF(W283 #0OMb P?4\^e FF9*<28 "L 9C9 & #!"3!2654&#!"&5463!2`B^^B@B^^ީwww@w^BB^^B@B^ww@w#!72#"' #"'.546763YY !''!0#GG$/!''!&UUjZ 8""8  X! 8" "8 GW4.'.#"#".'.'.54>54.'.#"32676#!"&5463!2 1.- +$)  c8 )1)  05.D <90)$9w@wwwW  )1) 7c  )$+ -.1 9$)0< D.59@www,T1# '327.'327.=.547&54632676TC_LҬ#+i!+*pDNBN,y[`m`%i]hbEm}a u&,SXK &$f9s? _#"!#!#!54632V<%'ЭHH (ںT\dksz &54654'>54'6'&&"."&'./"?'&546'&6'&6'&6'&6'&74"727&6/a49[aA)O%-j'&]]5r-%O)@a[9' 0BA; + >HCU  #  $  2  AC: oM=a-6OUwW[q ( - q[WwUP6$C +) (  8&/ &eMa  & $      %+"&54&"32#!"&5463!54 &@&Ԗ`(88(@(88(r&&jj8((88(@(8#'+2#!"&5463"!54&#265!375!35!B^^BB^^B   `^B@B^^BB^  ` !="&462+"&'&'.=476;+"&'&$'.=476; pppp$!$qr % }#ߺppp!E$ rqܢ# % ֻ!)?"&462"&4624&#!"3!26!.#!"#!"&547>3!2/B//B//B//B @   2^B@B^\77\aB//B//B//B/@    ~B^^B@2^5BB52.42##%&'.67#"&=463! 25KK5L4_u:B&1/&.- zB^^B4LvyKjK4L[!^k'!A3;):2*547&5462;U gIv0ZZ0L4@Ԗ@4L2RX='8P8'=XR U;Ig0,3lb??bl34LjjL4*\(88(\}I/#"/'&/'&?'&'&?'&76?'&7676767676` (5 )0 ) *) 0) 5(  (5 )0 )))) 0) 5( *) 0) 5(  )5 )0 )**) 0) 5)  )5 )0 )*5h$4&"24&#!4>54&#"+323254'>4'654&'!267+#"'&#!"&5463!2>767>32!2&4&&4N2$YGB (HGEG HQ#5K4Li!<;5KK5 A# ("/?&}vh4&&4&3M95S+C=,@QQ9@@IJ 2E=L5i>9eME;K55K J7R>@#zD<5=q%3#".'&'&'&'.#"!"3!32>$4&"2#!"#"&?&547&'#"&5463!&546323!2` #A<(H(GY$2NL4K5#aWTƾh&4&&4K5;=!ihv}&?/"( #A  5K2*! Q@.'!&=C+S59M34L=E2 JI UR@@&4&&4&5K;ELf9>igR7J K5h4&"24#"."&#"4&#"".#"!54>7#!"&54.'&'.5463246326326&4&&4IJ 2E=L43M95S+C=,@QQ9@@E;K55K J7R>@#zD9eMZ4&&4&<#5K4LN2$YGB (HGEG HV;5KK5 A# ("/?&}vhi!<4<p4.=!32>332653272673264&"2/#"'#"&5#"&54>767>5463!2@@2*! Q@.'!&=C+S59M34L.9E2 JI UR&4&&4&Lf6Aig6Jy#@>R7J K55K;E@TƾH #A<(H(GY$2NL4K#5#a=4&&4&D=ihv}&?/"( #A  5KK5;+54&#!764/&"2?64/!26 $$ & [6[[j6[&^aa@&4[[6[[6&+^aa+4/&"!"3!277$ $$ [6[ &&[6j[ ^aae6[j[6&&4[j[^aa+4''&"2?;2652?$ $$ [6[[6&&4[^aaf6j[[6[ &&[^aa+4/&"4&+"'&"2? $$ [6&&4[j[6[j^aad6[&& [6[[j^aa   $2>767676&67>?&'4&'.'.'."#&6'&6&'3.'.&'&'&&'&6'&>567>#7>7636''&'&&'.'"6&'6'..'/"&'&76.'7>767&.'"76.7"7"#76'&'.'2#22676767765'4.6326&'.'&'"'>7>&&'.54>'>7>67&'&#674&7767>&/45'.67>76'27".#6'>776'>7647>?6#76'6&'676'&67.'&'6.'.#&'.&6'&.5/a^D&"      4   $!   #          .0"Y +  !       $     "  +       Α      ^aa                        P   ' -( # * $  "  !     * !   (         $      2 ~/$4&"2 #"/&547#"32>32&4&&4V%54'j&&'/덹:,{ &4&&4&V%%l$65&b'Cr! " k[G +;%!5!!5!!5!#!"&5463!2#!"&5463!2#!"&5463!2&&&&&&&&&&&&@&&&&&&&&&&&&{#"'&5&763!2{' **)*)'/!5!#!"&5!3!26=#!5!463!5463!2!2^B@B^&@&`^B`8(@(8`B^ B^^B&&B^(88(^G 76#!"'&? #!"&5476 #"'&5463!2 '&763!2#"'c)'&@**@&('c (&*cc*&' *@&('c'(&*cc*&('c'(&@*19AS[#"&532327#!"&54>322>32"&462 &6 +&'654'32>32"&462QgRp|Kx;CByy 6Fe= BPPB =eF6 ԖV>!pRgQBC;xK|Ԗ{QNa*+%xx5eud_C(+5++5+(C_due2ԖԖ>NQ{u%+*jԖԖp!Ci4/&#"#".'32?64/&#"327.546326#"/&547'#"/&4?632632(* 8( !)(A(')* 8( !USxySSXXVzxTTUSxySSXXVzxT@(  (8 *(('( (8 SSUSx{VXXTTSSUSx{VXXT#!"5467&5432632t,Ԟ;F`j)6,>jK?s !%#!"&7#"&463!2+!'5#8EjjE8@&&&&@XYY&4&&4&qDS%q%N\jx2"&4#"'#"'&7>76326?'&'#"'.'&676326326&'&#"32>'&#"3254?''74&&4&l NnbSVZ bRSD zz DSRb)+USbn \.2Q\dJ'.2Q\dJ.Q2.'Jd\Q2.'Jd`!O` ` &4&&4r$#@B10M5TNT{L5T II T5L;l'OT4M01B@#$*3;$*3;;3*$;3*$: $/ @@Qq`@"%3<2#!"&5!"&5467>3!263! !!#!!46!#!(88(@(8(8(`((8D<++<8(`(8(`8(@(88( 8((`(8((<`(8(``(8||?%#"'&54632#"'&#"32654'&#"#"'&54632|udqܟs] = OfjL?R@T?"& > f?rRX=Edudsq = _MjiL?T@R?E& f > =XRr?b!1E)!34&'.##!"&5#3463!24&+";26#!"&5463!2 08((88(@(8  8((88((`(1  `(88((88(@  `(88(@(8(`#!"&5463!2w@www`@www/%#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&&&&&@'7G$"&462"&462#!"&=463!2"&462#!"&=463!2#!"&=463!2ppppppp @   ppp @    @   Рpppppp  ppp    <L\l|#"'732654'>75"##5!!&54>54&#"'>3235#!"&=463!2!5346=#'73#!"&=463!2#!"&=463!2}mQjB919+i1$AjM_3</BB/.#U_:IdDRE @  k*Gj @   @   TP\BX-@8 C)5Xs J@$3T4+,:;39SG2S.7<  vcc)) %Ll}    5e2#!"&=463%&'&5476!2/&'&#"!#"/&'&=4'&?5732767654'&@02uBo  T25XzrDCBBEh:%)0%HPIP{rQ9f#-+>;I@KM-/Q"@@@#-bZ $&P{<8[;:XICC>.'5oe80#.0(  l0&%,"J&9%$<=DTIcs&/6323276727#"327676767654./&'&'737#"'&'&'&54'&54&#!"3!260% <4"VRt8<@< -#=XYhW8+0$"+dTLx-'I&JKkmuw<=V@!X@ v '|N;!/!$8:IObV;C#V  &   ( mL.A:9 !./KLwPM$@@ /?O_o%54&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!26#!"&5463!2@@@@@@@@@^BB^^B@B^NB^^B@B^^#+3 '$"/&4762%/?/?/?/?%k*66bbbb|<<<bbbbbbbb%k66Ƒbbb<<<<^bbbbbb@M$4&"2!#"4&"2&#"&5!"&5#".54634&>?>;5463!2LhLLh LhLLhL! 'ԖԖ@' !&  ?&&LhLLhL hLLhL jjjj &@6/" &&J#"'676732>54.#"7>76'&54632#"&7>54&#"&54$ ok; -j=yhwi[+PM 3ѩk=J%62>VcaaQ^ ]G"'9r~:`}Ch 0=Z٤W=#uY2BrUI1^Fk[|aL2#!67673254.#"67676'&54632#"&7>54&#"#"&5463ww+U ,iXբW<"uW1AqSH1bdww'74'!3#"&46327&#"326%35#5##33#!"&5463!20U6cc\=hlࠥYmmnnnnw@wwww&46#Ȏ;edwnnnnn@www ]#/#"$&6$3 &#"32>7!5!%##5#5353Еttu{zz{SZC` cot*tq||.EXN#?? ,<!5##673#$".4>2"&5!#2!46#!"&5463!2rM* *M~~M**M~~M*jjj&&&&`P%挐|NN||NN|*jjjj@&&&&@ "'&463!2@4@&Z4@4&@ #!"&4762&&4Z4&&4@@ "'&4762&4@4&@&4&@ "&5462@@4&&44@&&@ 3!!%!!26#!"&5463!2`m` ^BB^^B@B^  `@B^^BB^^@ "'&463!2#!"&4762@4@&&&&44@4&Z4&&4@ "'&463!2@4@&4@4&@ #!"&4762&&4Z4&&4@:#!"&5;2>76%6+".'&$'.5463!2^B@B^,9j9Gv33vG9H9+bI\ A+=66=+A [">nSMA_:B^^B1&c*/11/*{'VO3@/$$/@*?Nh^l+!+"&5462!4&#"!/!#>32]_gTRdgdQV?U I*Gg?!2IbbIJaaiwE3300 084#"$'&6?6332>4.#"#!"&54766$32z䜬m IwhQQhbF*@&('kz   _hQнQGB'(&*eoz(q!#"'&547"'#"'&54>7632&4762.547>32#".'632%k'45%&+~(  (h  &  \(  (  &  ~+54'k%5%l%%l$65+~  &  (  (\  &  h(  (~+%'!)19K4&"24&"26.676&$4&"24&"24&"2#!"'&46$ KjKKj KjKKje2.e<^P,bKjKKjKjKKj KjKKj##LlLKjKKjK jKKjK~-M7>7&54$ LhяW.{+9E=cQdFK1A  0) pJ2`[Q?l&٫C58.H(Y':d 6?32$64&$ #"'#"&'&4>7>7.546'&'&'# '32$7>54'Yj`a#",5NK ~EVZ|$2 $ |: $ 2$|ZV:(t}hfR88T h̲X(  &%(Hw(%& (XZT\MKG{x|!#"'.7#"'&7>3!2%632u  j H{(e 9 1bU#!"&546;5!32#!"&546;5!32#!"&546;5463!5#"&5463!2+!2328((88(``(88((88(``(88((88(`L4`(88(@(88(`4L`(8 (88(@(88((88(@(88((88(@(84L8(@(88((8L48OY"&546226562#"'.#"#"'.'."#"'.'.#"#"&5476$32&"5462И&4&NdN!>! 1X:Dx+  +ww+  +xD:X1 -U !*,*&4&hh&&2NN2D &  ..J< $$ 767#"&'"&547&547&547.'&54>2l4  2cKEooED ) ) Dg-;</- ?.P^P.? -/<;-gYY  .2 L4H|O--O|HeO , , Oeq1Ls26%%4.2,44,2.4%%62sL1qcqAAq4#!#"'&547632!2#"&=!"&=463!54632  @  `     ` ?`   @  @  !    54&+4&+"#"276#!"5467&5432632   `  _ v,Ԝ;G_j)``    _ ԟ7 ,>jL>54'&";;265326#!"5467&5432632    v,Ԝ;G_j) `   `7 ,>jL>X`$"&462#!"&54>72654&'547 7"2654'54622654'54&'46.' &6 &4&&4&yy %:hD:FppG9Fj 8P8 LhL 8P8 E; Dh:% >4&&4&}yyD~s[4Dd=PppP=d>hh>@jY*(88(*Y4LL4Y*(88(*YDw" A4*[s~>M4&"27 $=.54632>32#"' 65#"&4632632 65.5462&4&&4G9& <#5KK5!!5KK5#< &ܤ9Gpp&4&&4&@>buោؐ&$KjKnjjKjK$&jjb>Ppp %!5!#"&5463!!35463!2+32@\\8(@(8\@@\\@\(88(\@ 34#"&54"3#!"&5!"&5>547&5462;U gI@L4@Ԗ@4L2RX='8P8'=XR U;Ig04LjjL4*\(88(\@"4&+32!#!"&+#!"&5463!2pP@@Pjj@@\@\&0pj \\&-B+"&5.5462265462265462+"&5#"&5463!2G9L44L9G&4&&4&&4&&4&&4&L44L &=d4LL4 d=&&`&&&&`&&&&4LL4  &#3CS#!"&5463!2!&'&!"&5!463!2#!"&52#!"&=4632#!"&=463(8((88((`x c`(8@@@`((88(@(8(D 9 8(`@@@@@/?O_o-=%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!!5463!2#!"&5463!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ &&&&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @   `&&&& /?O_o%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!#!"&=!!5463!24&+"#54&+";26=3;26%#!"&5463!463!2!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ 8(@(8 @  @  @  @  @ &&&@8((8@&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @  (88(  @  ``   `` -&&& (88(&@<c$4&"2!#4&"254&+54&+"#";;26=326+"&5!"&5#"&46346?>;463!2KjKKjKjKKj&ԖԖ&&@&&KjKKjK jKKjK .&jjjj&4&@@&&#'1?I54&+54&+"#";;26=326!5!#"&5463!!35463!2+32 \\8(@(8\ \\@\(88(\: #32+53##'53535'575#5#5733#5;2+3@E&&`@@` `@@`&&E%@`@ @ @      @ 0 @!3!57#"&5'7!7!K5@   @5K@@@ #3%4&+"!4&+";265!;26#!"&5463!2&&&&&&&&w@www&&@&&&&@&&@www#354&#!4&+"!"3!;265!26#!"&5463!2&&&&&@&&@&w@www@&@&&&&&&@&:@www-M3)$"'&4762 "'&4762 s 2  .   2 w 2  .   2 w 2    2  ww  2    2  ww M3)"/&47 &4?62"/&47 &4?62S .  2 w 2   .  2 w 2  M . 2    2 .  . 2    2 .M3S)$"' "/&4762"' "/&47623 2  ww  2    2  ww  2    2 w 2   .v 2 w 2   .M3s)"'&4?62 62"'&4?62 623 .  . 2    2 .  . 2    2 .   2 w 2v .   2 w 2-Ms3 "'&4762s w 2  .   2 ww  2    2 MS3"/&47 &4?62S .  2 w 2  M . 2    2 .M 3S"' "/&47623 2  ww  2   m 2 w 2   .M-3s"'&4?62 623 .  . 2    2- .   2 w 2/4&#!"3!26#!#!"&54>5!"&5463!2  @ ^B && B^^B@B^ @  MB^%Q= &&& $$ (r^aa(^aa!C#!"&54>;2+";2#!"&54>;2+";2pPPpQh@&&@j8(PppPPpQh@&&@j8(Pp@PppPhQ&&j (8pPPppPhQ&&j (8p!C+"&=46;26=4&+"&5463!2+"&=46;26=4&+"&5463!2Qh@&&@j8(PppPPpQh@&&@j8(PppPPp@hQ&&j (8pPPppP@hQ&&j (8pPPpp@@ #+3;G$#"&5462"&462"&462#"&462"&462"&462"&462#"&54632K54LKj=KjKKjKjKKjL45KKjK<^^^KjKKjppp\]]\jKL45KjKKjKujKKjK4LKjKK^^^jKKjKpppr]]\  $$ ^aaQ^aa,#"&5465654.+"'&47623   #>bqb&44&ɢ5"  #D7euU6 &4&m 1X".4>2".4>24&#""'&#";2>#".'&547&5472632>3=T==T==T==T=v)GG+v@bRRb@=&\Nj!>3lkik3hPTDDTPTDDTPTDDTPTDD|x xXK--K|Mp<# )>dA{RXtfOT# RNftWQ,%4&#!"&=4&#!"3!26#!"&5463!2!28(@(88((88((8\@\\@\\(88(@(88(@(88@\\\\ u'E4#!"3!2676%!54&#!"&=4&#!">#!"&5463!2!2325([5@(\&8((88((8,9.+C\\@\ \6Z]#+#,k(88(@(88(;5E>:5E\\\ \1. $4@"&'&676267>"&462"&462.  > $$ n%%/02 KjKKjKKjKKjKfff^aayy/PccP/jKKjKKjKKjKffff@^aa$4@&'."'.7>2"&462"&462.  > $$ n20/%7KjKKjKKjKKjKfff^aa3/PccP/y jKKjKKjKKjKffff@^aa +7#!"&463!2"&462"&462.  > $$ &&&&KjKKjKKjKKjKfff^aa4&&4&jKKjKKjKKjKffff@^aa#+3C54&+54&+"#";;26=3264&"24&"2$#"'##"3!2@@KjKKjKKjKKjKܒ,gjKKjKKjKKjKXԀ,, #/;GS_kw+"=4;27+"=4;2'+"=4;2#!"=43!2%+"=4;2'+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;54;2!#!"&5463!2`````````````````````p`K55KK55Kp`````````````````````````5KK55KK@*V#"'.#"63232+"&5.5462#"/.#"#"'&547>32327676R?d^7ac77,9xm#@#KjK# ڗXF@Fp:f_ #WIpp&3z h[ 17q%q#::#5KKu't#!X: %#+=&>7p @ *2Fr56565'5&'. #"32325#"'+"&5.5462#"/.#"#"'&547>32327676@ͳ8 2.,#,fk*1x-!#@#KjK# ڗXF@Fp:f_ #WIpp&3z e`vo8t-  :5 [*#::#5KKu't#!X: %#+=&>7p  3$ "/&47 &4?62#!"&=463!2I.  2 w 2   -@). 2    2 . -@@-S$9%"'&4762  /.7> "/&47 &4?62i2  .   2 w E > u > .  2 w 2   2    2  ww !   h. 2    2 . ;#"'&476#"'&7'.'#"'&476' )'s "+5+@ա' )'F*4*Er4M:}}8 GO *4*~ (-/' #"'%#"&7&67%632B;>< V??V --C4 <B=cB5 !% %!b 7I))9I7 #"'.5!".67632y( #  ##@,( )8! !++"&=!"&5#"&=46;546;2!76232-SSS  SS``  K$4&"24&"24&"27"&5467.546267>5.5462 8P88P88P88P8P88P4,CS,4pp4,,4pp4,6d7AL*',4ppP88P8P88P8HP88P8`4Y&+(>EY4PppP4Y4Y4PppP4Y%*54&#"#"/.7!2<'G,')7N;2]=A+#H  0PRH6^;<T%-S#:/*@Z}   >h.%#!"&=46;#"&=463!232#!"&=463!2&&&@@&&&@&&&&&&&&&&&&f&&&&b#!"&=463!2#!"&'&63!2&&&&''%@% &&&&&&&&k%J%#/&'#!53#5!36?!#!'&54>54&#"'6763235 Ź}4NZN4;)3.i%Sin1KXL7觧*  #& *@jC?.>!&1' \%Awc8^;:+54&#"'6763235 Ź}4NZN4;)3.i%PlnEcdJ觧*  #& *-@jC?.>!&1' \%AwcBiC:D'P%! #!"&'&6763!2P &:&? &:&?5"K,)""K,)h#".#""#"&54>54&#"#"'./"'"5327654.54632326732>32YO)I-D%n  "h.=T#)#lQTv%.%P_ % %_P%.%vUPl#)#T=@/#,-91P+R[Ql#)#|'' 59%D-I)OY[R+P19-,##,-91P+R[YO)I-D%95%_P%.%v'3!2#!"&463!5&=462 =462 &546 &&&&&4&r&4&@&4&&4&G݀&&&&f s CK&=462 #"'32=462!2#!"&463!5&'"/&4762%4632e*&4&i76`al&4&&&&&}n  R   R zfOego&&5`3&&&4&&4& D R   R zv"!676"'.5463!2@@w^Cct~5  5~tcC&&@?JV|RIIR|V&&#G!!%4&+";26%4&+";26%#!"&546;546;2!546;232@@@@L44LL4^B@B^^B@B^4L  N4LL44L`B^^B``B^^B`LL4&"2%#"'%.5!#!"&54675#"#"'.7>7&5462!467%632&4&&4  @ o&&}c ;pG=(  8Ai8^^.   &4&&4&` ` fs&& jo/;J!# 2 KAE*,B^^B! ` $ -4&"2#"/&7#"/&767%676$!28P88PQr @ U @ {`PTP88P8P`  @U @rQ!6'&+!!!!2Ѥ 8̙e;<*@8 !GGGQII %764' 64/&"2 $$ f3f4:4^aaf4334f:4:^aa %64'&" 2 $$ :4f3f4F^aa4f44f^aa 764'&"27 2 $$ f:4:f4334^aaf4:4f3^aa %64/&" &"2 $$ -f44f4^aa4f3f4:w^aa@7!!/#35%!'!%j/d jg2|855dc b @! !%!!7!FG)DH:&H dS)U4&"2#"/ $'#"'&5463!2#"&=46;5.546232+>7'&763!2&4&&4f ]wq4qw] `dC&&:FԖF:&&Cd`4&&4& ]] `d[}&&"uFjjFu"&&y}[d#2#!"&546;4 +"&54&" (88(@(88( r&@&Ԗ8((88(@(8@&&jj'3"&462&    .  > $$ Ԗ>aX,fff^aaԖԖa>TX,,~ffff@^aa/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88((88((88((88((88/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88(88((88(88((885E$4&"2%&'&;26%&.$'&;276#!"&5463!2KjKKj   f  \ w@wwwjKKjK"G   ܚ  f   @www   $64'&327/a^ ! ^aaJ@%% 65/ 64'&"2 "/64&"'&476227<ij6j6u%k%~8p8}%%%k%}8p8~%<@% %% !232"'&76;!"/&76  ($>( J &% $%64/&"'&"2#!"&5463!2ff4-4ff4fw@wwwf4f-f4@www/#5#5'&76 764/&"%#!"&5463!248` # \P\w@www4`8  #@  `\P\`@www)4&#!"273276#!"&5463!2& *f4 'w@www`&')4f*@www%5 64'&"3276'7>332#!"&5463!2`'(wƒa8! ,j.( &w@www`4`*'?_`ze<  bw4/*@www-.  6 $$  (r^aaO(_^aa -"'&763!24&#!"3!26#!"&5463!2yB(( @   w@www]#@##   @ @www -#!"'&7624&#!"3!26#!"&5463!2y((@B@u @   w@www###@  @ @www -'&54764&#!"3!26#!"&5463!2@@####@w@wwwB((@@www`%#"'#"&=46;&7#"&=46;632/.#"!2#!!2#!32>?6#  !"'?_  BCbCaf\ + ~2   }0$  q 90r p r%D p u?#!"&=46;#"&=46;54632'.#"!2#!!546;2D a__ g *`-Uh1    ߫}   $^L  4b+"&=.'&?676032654.'.5467546;2'.#"ǟ B{PDg q%%Q{%P46'-N/B).ĝ 9kC< Q 7>W*_x*%K./58`7E%_ ,-3  cVO2")#,)9;J) "!* #VD,'#/&>AX>++"''&=46;267!"&=463!&+"&=463!2+32Ԫ$   pU9ӑ @/*f o  VRfq f=SE!#"&5!"&=463!5!"&=46;&76;2>76;232#!!2#![       % )   "  Jg Uh BW&WX hU g 84&#!!2#!!2#!+"&=#"&=46;5#"&=46;463!2j@jo g|@~vv u n#467!!3'##467!++"'#+"&'#"&=46;'#"&=46;&76;2!6;2!6;232+32QKt# #FNQo!"դѧ !mY Zga~bm] [o"U+, @h h@@X hh @83H\#5"'#"&+73273&#&+5275363534."#22>4.#2>ut 3NtRP*Ho2 Lo@!R(Ozh=,GID2F 8PuE>.'%&TeQ,jm{+>R{?jJrL6V @`7>wmR1q uWei/rr :Vr" $7V4&#"326#"'&76;46;232!5346=#'73#"'&'73267##"&54632BX;4>ID2F +>R{8PuE>.'%&TeQ,jm{?jJrL6 @`rr :Vr3>wmR1q uWei@ \%4&#"326#!"&5463!2+".'&'.5467>767>7>7632!2&%%&&&& &7.' :@$LBWM{#&$h1D!  .I/! Nr&&%%&&&&V?, L=8=9%pEL+%%r@W!<%*',<2(<&L,"r@ \#"&546324&#!"3!26%#!#"'.'.'&'.'.546767>;&%%&&&& &i7qN !/I.  !D1h$&#{MWBL$@: '.&&%%&&&&=XNr%(M&<(2<,'*%<!W@r%%+LEp%9=8=L  +=\d%54#"327354"%###5#5#"'&53327#"'#3632#"'&=4762#3274645"=424'.'&!  7>76#'#3%54'&#"32763##"'&5#327#!"&5463!2BBPJNC'%! B? )#!CC $)  54f"@@ B+,A  A+&+A  ZK35N # J!1331CCC $)w@www2"33FYF~(-%"o4*)$(* (&;;&&9LA3  8334S,;;,WT+<<+T;(\g7x:&&::&&<r%-@www  +=[c}#"'632#542%35!33!3##"'&5#327%54'&#"5#353276%5##"=354'&#"32767654"2 '.'&547>76 3#&'&'3#"'&=47632%#5#"'&53327''RZZ:kid YYY .06 62+YY-06 R[!.'CD''EH$VVX::Y X;:Y fyd/%jG&DC&&CD&O[52. [$C-D..D^^* ly1%=^I86i077S 3 $EWgO%33%OO%35 EEFWt;PP;pt;PP;pqJgTFQ%33&PP%33%R 7>%3!+}{'+"&72'&76;2+"'66;2U &  ( P *'eJ."-dZ-n -'74'&+";27&+";276'56#!"&5463!2~} 7e  ۩w@www"  $Q #'!# @www I-22#!&$/.'.'.'=&7>?>369II ! ' $ !01$$%A' $ ! g  \7@)(7Y   \7@)(7Y @ '5557 ,VWQV.RW=?l%l`~0  !#!#%777 5! R!!XCCfff݀# `,{{{`Og4&"2 &6 $"&462$"&62>7>7>&46.'.'. '.'&7>76 Ԗ HR6L66LGHyU2L  L2UyHHyU2L  L2UyHn X6X  XX ԖԖH6L66L6 L2UyHHyU2L  L2UyHHyU2L n6X  XX  2#!"&54634&"2$4&"2ww@ww||||||w@www||||||| !3 37! $$ n6^55^h ^aaM1^aaP *Cg'.676.7>.'$7>&'.'&'? 7%&'.'.'>767$/u5'&$I7ob?K\[zH,1+.@\7':Yi4&67&'&676'.'>7646&' '7>6'&'&7>7#!"&5463!2PR$++'TJXj7-FC',,&C ."!$28 h /" +p^&+3$ i0(w@www+.i6=Bn \C1XR:#"'jj 8Q.cAj57!? "0D$4" P[ & 2@wwwD"%.5#5>7>;!!76PYhpN!HrD0M C0N#>8\xx: W]oW-X45/%'#.5!5!#"37>#!"&5463!2p>,;$4 5eD+WcEw@wwwK()F ,VhV^9tjA0/@www@#"'&76;46;23   &  ++"&5#"&7632  ^  c  & @#!'&5476!2 &  ^  b '&=!"&=463!546  &    q&8#"'&#"#"5476323276326767q'T1[VA=QQ3qqHih"-bfGw^44O#A?66%CKJA}} !"䒐""A$@C3^q|z=KK?6 lk)  %!%!VVuuu^-m5w}n~7M[264&"264&"2"&546+"&=##"&5'#"&5!467'&766276#"&54632    *<;V<<O@-K<&4'>&4.'.'.'.'.'&6&'.'.6767645.'#.'6&'&7676"&'&627>76'&7>'&'&'&'&766'.7>7676>76&6763>6&'&232.'.6'4."7674.'&#>7626'.'&#"'.'.'&676.67>7>5'&7>.'&'&'&7>7>767&'&67636'.'&67>7>.'.67 \  U7  J#!W! '  " ';%  k )"    '   /7*   I ,6 *&"!   O6* O $.( *.'  .x,  $CN      * 6   7%&&_f& ",VL,G$3@@$+ "  V5 3"  ""#dA++ y0D- %&n 4P'A5j$9E#"c7Y 6" & 8Z(;=I50 ' !!e  R   "+0n?t(-z.'< >R$A"24B@( ~ 9B9, *$        < > ?0D9f?Ae  .(;1.D 4H&.Ct iY% *  7      J  <    W 0%$  ""I! *  D  ,4A'4J" .0f6D4pZ{+*D_wqi;W1G("% %T7F}AG!1#%  JG 3  '.2>Vb%&#'32&'!>?>'&' &>"6&#">&'>26 $$ *b6~#= XP2{&%gx| .W)oOLOsEzG< CK}E $MFD<5+ z^aa$MWM 1>]|YY^D եA<KmE6<" @9I5*^aa>^4./.543232654.#"#".#"32>#"'#"$&547&54632632':XM1h*+D($,/9p`DoC&JV;267676&#!"&=463!267 #!"'&5463!26%8#! &&Z"M>2! ^I 7LRx_@>MN""`=&&*%I},  L7_jj9/%4&#!"3!264&#!"3!26#!"&5463!2  &&&&&&&&19#"'#++"&5#"&5475##"&54763!2"&4628(3- &B..B& -3(8IggI`(8+Ue&.BB.&+8(kk`%-"&5#"&5#"&5#"&5463!2"&4628P8@B\B@B\B@8P8pPPp@`(88(`p.BB.0.BB.(88(Pppͺ!%>&'&#"'.$ $$ ^/(V=$<;$=V).X^aaJ`"(("`J^aa,I4."2>%'%"/'&5%&'&?'&767%476762%6[՛[[՛o ܴ   $ $ " $ $  ՛[[՛[[5` ^ ^ 2` `2 ^ ^ ` 1%#"$54732$%#"$&546$76327668ʴhf킐&^zs,!V[vn) 6<ׂf{z}))Ns3(@ +4&#!"3!2#!"&5463!2#!"&5463!2@&&&f&&&&@&&&&4&&4&@&&&&&&&& `BH+"/##"./#"'.?&5#"&46;'&462!76232!46 `&C6@Bb03eI;:&&&4L4&F Z4&w4) '' 5r&4&&4&&4}G#&/.#./.'&4?63%27>'./&'&7676>767>?>%6})(."2*&@P9A #sGq] #lh<* 46+(  < 5R5"*>%"/ +[>hy  K !/Ui%6&'&676&'&6'.7>%.$76$% $.5476$6?62'.76&&'&676%.76&'..676#"NDQt -okQ//jo_  %&JՂYJA-.-- 9\DtT+X?*<UW3' 26$>>W0 {"F!"E    ^f`$"_]\<`F`FDh>CwlsJ@ ;=?s  :i_^{8+?` ) O`s2RDE58/Kr #"'>7&4$&5mī"#̵$5$"^^W=acE*czk./"&4636$7.'>67.'>65.67>&/>z X^hc^O<q+f$H^XbVS!rȇr?5GD_RV@-FbV=3! G84&3Im<$/6X_D'=NUTL;2KPwtPt=  &ռ ,J~S/#NL,8JsF);??1zIEJpqDIPZXSF6\?5:NR=;.&1 +!"&=!!%!5463!2sQ9Qs***sQNQsBUw wUBFHCCTww%1#"&=!"&=463!54632.  6 $$     ` ?(r^aa    (_^aa%1#!#"'&47632!2.  6 $$   @  ` (r^aa  ?  @  (_^aa/#"'&476324&#!"3!26#!"&5463!2&@& @   w@www& @B@ &  @ @www"&462  >& $$ Ԗ*(r^aaԖԖ (^aa]6#"$54732>%#"'!"&'&7>32'!!!2f:лѪz~u: ((%`V6B^hD%i(]̳ޛ *>6߅r#! 3?^BEa߀#9#36'&632#"'&'&63232#!"&5463!2 Q,&U #+' ;il4L 92<D`w@www`9ܩ6ɽ ]`C477&@wwwD+"&5#"'&=4?5#"'&=4?546;2%6%66546;2  wwwwcB G]B Gty]ty #3C#!+"&5!"&=463!46;2!24&#!"3!26#!"&5463!2@`@`^BB^^B@B^www@w@`@`2@B^^BB^^ww@w'/?P+5#"&547.467&546;532!764'!"+32#323!&ln@ :MM: @nY*Yz--zY*55QDDU9pY-`]]`.X /2I$ t@@/!!/@@3,$,3$p$00&*0&& !P@RV2#"&/#"&/#"&546?#"&546?'&54632%'&54632763276%>S]8T;/M77T7%>ww@ww!"5bBBb// * 8(@(87)(8=%/' #?w@www#~$EE y &L(88e):8(%O r    O?GQaq47&67>&&'&67>&"$32#"#"'654  $&6 $6&$ CoL.*K  Px.* iSƓ i 7J ?~pi{_Я;lLUZ=刈刈_t'<Z :!   @! j`Q7  $ky, Rfk*4LlL=Z=刈&$&546$7%7&'5>]5%w&P?zrSF!| &0 ##!"&5#5!3!3!3!32!546;2!5463) );));;))&&&@@&&&  6 $&727"'%+"'&7&54767%&4762֬>4P t+8?::  ::A W` `EvEEvE<."e$IE&O &EI&{h.`m"&#"&'327>73271[ >+)@ (]:2,C?*%Zx/658:@#N C= E(oE=W'c:#!#"$&6$3 &#"32>7! ڝyy,{ۀہW^F!LC=y:yw߂0H\R%"N^ '&76232762$"&5462"&46274&"&'264&#"'&&#"32$54'>$ $&6$ G>>0yx14J55J5J44J5Fd$?4J55%6E#42F%$fLlLq>>11J44%&4Z%44J54R1F$Z-%45J521Z%F1#:ʎ 9LlL#Qa"'&7622762%"&5462"&546274&#"&'73264&#"'&&#"32654'>#!"&5463!2 55 **.>.-@-R.>.-@-<+*q6- -- 0OpoOxzRrqP6z~{{Prr^aa]054&"#"&5!2654632!#"&57265&'&#".'&'#"&5467%&4>7>3263232654.547'654'63277.'.*#">7?67>?>32#"'7'>3'>3235?KcgA+![,7*  2(-#=  /~[(D?G  |,)"# +)O8,+'6 y{=@0mI#938OAE` -  )y_/FwaH8j7=7?%a % %!?)L J 9=5]~pj  %(1$",I  $@((  +!.S -L__$'-9L 5V+ 6 T+6.8- $ 0 + t |S 16]&#"'&#"67>76'&'&#"67>32764.#"#.32>67>7 $&54>7>7>7rJ@ "kb2)W+ ,5/1   #   Z -!$IOXp7sLCF9vz NAG#/ 5|Հ';RKR/J#=$,9,+$UCS7'2"1  ! / ,   /--ST(::(ep4AM@=I>".)xΤlsY|qK@ %(YQ&N EHv~<Zx'#"&5467&6?2?'&"/.7.546326#"&'&/7264/7'764&"'?>>32.AUpIUxYE.A %%%h% %hJ%D,FZxULs TgxUJrVD %hJ%@/LefL.C %Jh%CV sNUxϠ@.FZyUHpVA %h&%% %Ji%CWpIUybJ/Uy^G,D %Jh%@U sMt UC %hJ%C-KfyEX[_gj&/&'.''67>7>7&'&'&'>76763>7>#&'&'767672'%'7'+"&'&546323267>7%#"'4'6767672,32,+DCCQLDf' % :/d B 4@ }  &!0$?Jfdf-.=6(:!TO? !IG_U% . k*.=; 5gN_X "  ##  292Q41   *6nA;| BS N.  %1$ 6 $nk^ '7GWgw2+"&5463#!"&5463!254&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26#"&=! B^^BB^^B:FjB^8((`( `(8^BB^^B@B^"vEj^B(8(`(8(/?O_o/?2#!"&5463;26=4&+";26=4&+";26=4&+";26=4&+"54&+";2654&+";2654&+";2654&+";2654&+";2654&#!"3!2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`' "&5#"&5&4762!762$"&462B\B@B\BOpP.BB..BB.8$PO広3CQ#".54>32#".546322#"&#"#"54>%".54>32%2#"&54> &X=L|<&X=M{2r_-$$-_rUU%&&5%ő'- "'.546762@FF$@B@$.&,&.]]|q#<<#(BB B%'-%'-'%'-"'%&'"'%.5467%467%62@ll@ll,@GG&!@@@@@@!&+#+#6#+$*`:p:px p=`$>>$&@&@ @&p@ &.A!!"!&2673!"5432!%!254#!5!2654#!%!2#!8Zp?vdΊens6(N[RWu?rt1SrF|iZ@7މoy2IMC~[R yK{T:%,AGK2#!"&5463!!2654'654.#532#532"&5!654&#"327#2#>!!ww@ww~uk'JTMwa| DH> I1q Fj?w@wwwsq*4p9O*¸Z^qh LE "(nz8B M'?"&4624&#"'.'324&#"3267##"&/632632.ʏhhMALR vGhг~~K „yO^   ʏʏВ*LM@!שwwȍde)qrOPqȦs:03=7'.?67'67%'>&%'7%7./6D\$>  "N,?a0#O 1G9'/P(1#00  ($=!F "9|]"RE<6 'o9%8J$\ :\HiTe<?}V#oj? d,6%N#" HlSVY]C =@C4&"2!.#!"4&"2+"&=!"&=#"&546;>3!232^^^Y ^^^`pppp`]ibbi]~^^^e^^^PppPPppP]^^]3;EM2+"&=!"&=#"&546;>;5463!232264&"!.#!"264&" ]`pppp`]ibbi^^^dY !^^^]@PppP@@PppP@]^^] ^^^e^^^ 3$#!#!"&5467!"&47#"&47#"&4762++&2 $$ 2&&&4&&Z4&&##&&4&4&44&m4&m+DP4'&#"32763232674'&!"32763 3264'&$#"32763232> $$ g* o`#ə0#z#l(~̠) -g+^aaF s" +g (* 3#!| #/IK/%*%D= )[^aa !!!'!!77!,/,-a/G t%/;<HTbcq%7.#"32%74'&"32765"/7627#"5'7432#"/7632#"5'7432#"&5'74632 #"/6327#"/6327#"/46329"&/462"&/>21"&/567632#!.547632632  *     X    ^  `    ^  b  c   fu U`59u  4J   l~ ~ F 2    m | O,           ru| u  " )9 $7 $&= $7 $&= $7 $&=  $&=46w`ww`ww`wb`VTEvEEvETVTEvEEvET*VTEvEEvET*EvEEvEEvEEv#^ct#!"&5463!2!&'&!"&5!632#"&'#"/&'&7>766767.76;267674767&5&5&'67.'&'&#3274(8((88((`x c`(8!3;:A0?ݫY   ^U 47D$    74U3I  |L38wtL0`((88(@(8(D 9 8(Q1&(!;  (g- Up~R2(/{E(Xz*Z%(i6CmVo8 #T#!"&5463!2!&'&!"&5!3367653335!3#4.5.'##'&'35(8((88((`x c`(8iFFZcrcZ`((88(@(8(D 9 8(kk" kkJ  ! k#S#!"&5463!2!&'&!"&5!%!5#7>;#!5#35!3#&'&/35!3(8((88((`x c`(8-Kg kL#DCJg  jLD`((88(@(8(D 9 8(jj jjkk kk#8C#!"&5463!2!&'&!"&5!%!5#5327>54&'&#!3#32(8((88((`x c`(8 G]L*COJ?0R\wx48>`((88(@(8(D 9 8(jjRQxk !RY#*2#!"&5463!2!&'&!"&5!!57"&462(8((88((`x c`(8Pppp`((88(@(8(D 9 8(ppp  #*7JR5#5#5#5##!"&5463!2!&'&!"&5##5!"&54765332264&"<(8((88((`x c`(8kޑcO"jKKjK`((88(@(8(D 9 8(SmmS?M&4&&4#9L^#!"&5463!2!&'&!"&5!#"/#"&=46;76276'.'2764'.(8((88((`x c`(8 6ddWW6&44`((88(@(8(D 9 8(. G5{{5]]$5995#3C#!"&5463!2!&'&!"&5!2#!"&5463#"'5632(8((88((`x c`(84LL44LL4l  `((88(@(8(D 9 8(L44LL44L  Z #7K[#!"&5463!2!&'&!"&5!>&'&7!/.?'&6?6.7>'(8((88((`x c`(8` 3  3  3  3 v  ?  `((88(@(8(D 9 8( & & - & &  ?   '6#'. '!67&54632".'654&#"32eaAɢ/PRAids`WXyzOvд:C;A:25@Ң>-05rn`H( ' gQWZc[ -%7' %'-'% %"'&54762[3[MN 3",""3,3"ong$߆]gn$+) ")")" x#W#"&#!+.5467&546326$32327.'#"&5463232654&#"632#".#"oGn\ u_MK'̨|g? CM7MM5,QAAIQqAy{b]BL4PJ9+OABIRo?z.z n6'+s:zcIAC65D*DRRD*wyal@B39E*DRRD*'/7  $&6$ 6277&47' 7'"' 6& 6'lLRRZB|RR>dZZLlLZRR«Z&>«|R ! $&54$7 >54'5PffP牉@s-ff`-c6721>?>././76&/7>?>?>./&31#"$&(@8!IH2hM>'  )-* h'N'!'Og,R"/!YQG54'63&547#5#"=3235#47##6323#324&"26%#!"&5463!2F]kbf$JMM$&N92Z2&`9UW=N9:PO;:dhe\=R +)&')-S99kJ<)UmQ/-Ya^"![Y'(<`X;_L6#)|tWW:;X  #'#3#!"&5463!2) p*xeשw@www0,\8@www9I#"'#"&'&>767&5462#"'.7>32>4."&'&54>32JrO<3>5-&FD(=Gq@C$39aLL²L4 &) @]v q#CO!~󿵂72765'./"#"&'&5 }1R<2" 7MW'$  ;IS7@5sQ@@)R#DvTA ; 0x I)!:> +)C 6.> !-I[4&#"324&#"3264&#"324&#"326&#"#".'7$4$32'#"$&6$32D2)+BB+)3(--(31)+BB+)4'--'4'#!0>R HMŰ9ou7ǖD䣣 R23('3_,--,R23('3_,--,NJ ?uWm%#"'%#"'.5 %&'&7632! ; `u%"(!]#c)(  #"'%#"'.5%&'&76 !  (%##fP_"(!)'+ʼn4I#"$'&6?6332>4.#"#!"&54766$32#!"&=46;46;2z䜬m IwhQQhbF*@&('k@z   _hQнQGB'(&*eozΘ@@`  >. $$ ffff^aafff^aa>"&#"#"&54>7654'&#!"#"&#"#"&54>765'46.'."&54632326323!27654'.5463232632,-,,",:! %]& %@2(/.+*)6! <.$..**"+8#  #Q3,,++#-:#"$$ /:yuxv)%$ /?CG%!5%2#!"&5463!5#5!52#!"&54632#!"&5463#5!5`&&&& &&&&&&&&@&&&&&&&&&&&&%2 &547%#"&632%&546 #"'6\~~\h ~\h\ V V VV%5$4&#"'64'73264&"&#"3272#!"&5463!2}XT==TX}}~>SX}}XS>~}w@www~:xx:~}}Xx9}}9xX}@www/>LXds.327>76 $&6$32762#"/&4762"/&47626+"&46;2'"&=462#"'&4?62E0l,  *"T.D@Yooo@5D [  Z  Z  [ ``[ Z  2 ,l0 (T" .D5@oooY@D, Z  [  [  Z ``EZ  [ 5%!  $&66='&'%77'727'%amlLmf?55>fFtuutFLlLHYC L||L Y˄(E''E*( /?IYiy%+"&=46;2+"&=46;2+"&=46;2+"&=46;2%"&=!#+"&=46;2+"&=46;2+"&=46;2+"&=46;2!54!54>$ +"&=46;2#!"&=@&&@3P > P3&&rrr&&rrr he 4LKM:%%:MKL4WT&&%/9##!"&563!!#!"&5"&5!2!5463!2!5463!2&&&&&&  &&&i@&&@&7'#5&?6262%%o;j|/&jJ%p&j;&i&p/|jţ%Jk%o%  :g"&5462#"&546324&#!"263662>7'&75.''&'&&'&6463!276i~ZYYZ~@OS;+[G[3YUD#o?D&G3I=JyTkBuhNV!WOhuAiSy*'^CC^'*SwwSTvvTSwwSTvvWID\_"[ gq# /3qFr2/ $rg%4 HffHJ4d#!#7!!7!#5!VFNrmNNN N!Y+?Ne%&'&'&7>727>'#&'&'&>2'&'&676'&76$7&'&767>76 '6# <;11x# *# G,T93%/#0vNZ;:8)M:( &C.J}2 %0  ^*  JF &7'X"2LDM" +6 M2+'BQfXV#+] #' L/(eB9  #,8!!!5!!5!5!5!5#26%!!26#!"&5!5&4& &pPPp@@&&@!&@PppP@*  9Q$"&54627"."#"&547>2"'.#"#"&5476$ "'&$ #"&5476$ (}R}hLK NN Ud: xx 8    ,, |2222 MXXM ic,>>,   ̺  '/7?KSck{4&"2$4&"24&"24&"24&"24&"24&"24&"24&"264&"24&#!"3!264&"2#!"&5463!2KjKKjKjKKjKjKKjKKjKKjKjKKjKjKKjKKjKKjKjKKjKLhLLhLKjKKj&&&&KjKKjL44LL44L5jKKjKKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjK4LL44LLjKKjK&&&&jKKjK4LL44LL 'E!#"+"&7>76;7676767>'#'"#!"&7>3!2W",&7' #$ &gpf5 O.PqZZdS -V"0kqzTxD!!8p8%'i_F?;kR(` !&)' (2!&6367! &63!2! `B 1LO(+#=)heCQg#s`f4#6q'X|0 -g >IY#6?>7&#!%'.'33#&#"#"/3674'.54636%#"3733#!"&5463!24  : @7vH%hEP{0&<'VFJo1,1.F6A#L44LL44L"% 7x'6 O\JYFw~v^fH$ ! "xdjD"!6`J4LL44LL +3@GXcgqz -<JX{&#"327&76'32>54.#"35#3;5#'#3537+5;3'23764/"+353$4632#"$2#462#"6462""'"&5&5474761256321##%354&'"&#"5#35432354323=#&#"32?4/&54327&#"#"'326'#"=35#5##3327"327'#"'354&3"5#354327&327''"&46327&#"3=#&#"32?"5#354327&3=#&"32?"#3274?67654'&'4/"&#!"&5463!2_gQQh^_~\[[\]_^hQQge<F$$$ !!&&/ !/  !! 00/e&'!"e$   '!!''   8''NgL44LL44LUQghQUk=("  ! =))=2( '! 'L#(>( & DC(>(zL#DzG)<)4LL44LL  BWbjq}+532%+5324&+32763#4&'.546327&#"#"'3265#"&546325&#"32 !264&"2%#'#735#535#535#3'654&+353#!"&5463!29$<=$@?SdO__J-<AA@)7")9,<$.%0*,G3@%)1??.+&((JgfJ*A!&jjjGZYGиwsswPiL>8aA !M77MM77M3! 4erJ]&3YM(, ,%7(#)  ,(@=)M%A20C&Mee(X0&ĖjjjV 8Z8J9N/4$ 8NN88NN  #&:O[ $?b3'7'#3#%54+32%4+324+323'%#5#'#'##337"&##'!!732%#3#3##!"&53733537!572!56373353#'#'#"5#&#!'#'#463!2#"5#"5!&+&+'!!7353273532!2732%#54&+#32#46.+#2#3#3##+53254&".546;#"67+53254&.546;#"#'#'##"54;"&;7335wY-AJF=c(TS)!*RQ+*RQ+Y,B^9^Ft`njUM ') ~PSPRm٘M77Mo7q @)U 8"E(1++NM77Mx378D62W74;9<-A"EA0:A F@1:ؗBf~~""12"4(w$#11#@}}!%+%5(v$:O\zK?* $\amcrVlOO176Nn23266&+"&#"3267;24&+"'&+";27%4&+";2?>23266&+"&#"3267;254+";27#76;2#!"&5463!23%#2%%,,  _3$$2%%M>AL Vb5)LDHeE:< EM j,K'-R M ~M>AR  Vb5)LEHeE:< E J ABI*'! ($rL44LL44Lv%1 %3!x*k $2 %3!;5h n a !(lI;F   rp p8;5h t a !(lI;F ` #k 4LL44LL  2HW[lt#"'5632#6324&'.54327&#"#"&'32767#533275#"=5&#"'#36323#4'&#"'#7532764&"24'&#"327'#"'&'36#!"&5463!2=!9n23BD$ &:BCRM.0AC'0RH`Q03'`.>,&I / * / 8/n-(G@5$ S3=,.B..B02^`o?7je;9G+L44LL44LyE%# Vb;A !p &'F:Aq)%)#orgT$ v2 8)2z948/{ 8AB..B/q?@r<7(g/4LL44LL ?#!"&'24#"&54"&/&6?&5>547&54626=L4@ԕ;U g3 T 2RX='8P8|5 4Ljj U;Ig@   `  "*\(88(]k  &N4#"&54"3 .#"#!"&'7!&7&/&6?&5>547&54626;U gIm*]Z0L4@ԕ=o=CT T 2RX='8P8|5  U;IgXu?bl3@4Ljja`   `  "*\(88(]k/7[%4&+";26%4&+";26%4&+";26!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@0 o`^BB^`5FN(@(NF5@@@u  @LSyuS@%44%,<H#"5432+"=4&#"326=46;2  >. $$ ~Isy9"SgR8vHD w ffff^aam2N+ )H-mF+10*F +fff^aab4&#"32>"#"'&'#"&54632?>;23>5!"3276#"$&6$3 k^?zb=ka`U4J{K_/4^W&  vx :XB0܂ff ) fzzXlz=lapzob35!2BX G@8  ' '=vN$\ff  1 SZz8zX#("/+'547'&4?6276 'D^h  i%5@%[i  h]@]h  i%@5%[i  h^@@)2#"&5476#".5327>OFi-ay~\~;'S{s:D8>)AJfh]F?X{[TC6LlG]v2'"%B];$-o%!2>7>3232>7>322>7>32".'.#"#"&'.#"#"&'.#"#546;!!!!!32#"&54>52#"&54>52#"&54>52-P&+#($P.-P$'#+&PZP&+#"+&P-($P-.P$(#+$P.-P$'#+&P-.P$+#pP@@PpH85K"&ZH85K"&ZH85K"&Z@Pp@@@pMSK5, :&LMSK5, :&LMSK5, :& !!3 ! @@@  #"$$3!!2"jaѻxlalxaaj!!3/"/'62'&63!2'y  `I  yMy `I y'W`#".'.#"32767!"&54>3232654.'&546#&'5&#" 4$%Eӕ;iNL291 ;XxR`f՝Q8TWiWgW:;*:`Qs&?RWXJ8 oNU0 J1F@#) [%6_POQiX(o`_?5"$iʗ\&>bds6aP*< -;iFn* -c1BWg4'.'4.54632#7&'.#"#"'.#"32767'#"&54632326#!"&5463!2#$( 1$6]' !E3P|ad(2S;aF9'EOSej]m] <*rYshpt.#)$78L*khw@wwwB % $/$G6 sP`X):F/fwH1pdlqnmPHuikw_:[9D'@www34."2>$4.#!!2>#!".>3!2QнQQнQQh~wwhfffнQQнQQнQZZQffff#>3!2#!".2>4."fffнQQнQQffffQнQQн ,\!"&?&#"326'3&'!&#"#"'  5467'+#"327#"&463!!'#"&463!2632(#AHs9q ci<= #]$ KjKKjKKjKKjH#j#H&&&KjKKjKg V i jKKjKKjKKjK ..n(([5KK55KK5[poNv<+#"'#"&546;&546$32322$B$22$$*$22$Xڭӯ$22$tX'hs2$ϧkc$22$1c$2F33F3VVT2#$2ԱVT2#$2g#2UU݃ 2$#2UU1݃2 ,u54#"67.632&#"32654'.#"32764.'&$#"7232&'##"&54732654&#"467&5463254632>32#"'&ru&9%" *#͟ O%GR=O&^opC8pP*bY _#$N Pb@6)?+0L15 "4$.Es  5IQ"!@ h "Y7e|J>ziPeneHbIlF>^]@n*9 6[_3#"&54632#.#"32%3#"&54632#.#"326%4&'.'&! ! 7>7>! =39? 6'_ >29? 5'17m-VU--,bW.뮠@Fyu0HC$뮠@Fyu0HC$L= ?? <=! A <`;+"&54&#!+"&5463!2#!"&546;2!26546;2pЇ0pp@Ipp>Sc+"&=46;254&+"&+";2=46;2;2=46;2;2%54&#!";2=;26#!"&5463!2A5DD5A7^6a7MB55B7?5B~```0`rr5A44A5v5AA5f*A``0` !!!! #!"&5463!2ړ7H7jv@vvv':@vvvMUahmrx#"'!"'!#"&547.547.54674&547&54632!62!632!#!627'!%!"67'#77!63!!7357/7'%# %'3/&=&' 5#?&547 6!p4q"""6" 'h*[ |*,@?wAUMpV@˝)Ϳw7({*U%K6=0(M "! O dX$k !! ! b [TDOi @6bxBAݽ5  ɝ:J +3,p x1Fi (R 463!#!"&5%'4&#!"3`а@..@A-XfB$.BB..C} )&54$32&'%&&'67"w`Rd]G{o]>p6sc(@wgmJPAjyYWa͊AZq{HZ:<dv\gx>2ATKn+;"'&#"&#"+6!263 2&#"&#">3267&#">326e~└Ȁ|隚Ν|ū|iyZʬ7Ӕްr|uѥx9[[9jj9ANN+,#ll"BS32fk[/?\%4&+";26%4&+";26%4&+";26%4&+";26%#!"&5467&546326$32]]eeeeee$~i qfN-*#Sjt2"'qCB8!'> !%)-159=AEIMQUY]agkosw{! %! 5!#5#5#5#5#57777????#5!#5!#5!#5!#5!#5!#5!#5#537#5!#5!#5!#5!#5!#55#535353535353%"&546326#"'#32>54.&54>3237.#"Q%%%%%%%%%?iiihOiixiiyiixiiArssrrssr%sssrrssNs%%%%%%%%%%'32#".543232654&#"#"&54654&#"#"&547>326ڞUzrhgrxSПdU 7#"&463!2!2&&4&&&&4&KjKKjKjKKj &&&%&& &&4&&&&4&&&5jKKjKKjKKjK%z 0&4&&3D7&4& %&'S4&"4&"'&"27"&462"&462!2#!"&54>7#"&463!2!2&4&4&4&4KjKKjKjKKj &&&%&& &&4&%&&ے&4"jKKjKKjKKjK%z 0&4&&3D7&4& %& & !'! !%!!!!%"'.763!2o]FooZY@:@!!gf//I62'"/"/"/"/"/"/"/7762762762762762762%"/77627&6?35!5!!3762762'"/"/"/"/"/"/%5#5!4ZSS6SS4SS4SS4SS4SS4SS4ZSS4SS4SS4SS4SS4SS4S-4ZSS4S@4SS4ZSS6SS4SS4SS4SS4SS4S@ZSSSSSSSSSSSSSSZSSSSSSSSSSSSSyZRRR@%:= :+: =RRZSSSSSSSSSSSSSCv!/&'&#""'&#" 32>;232>7>76#!"&54>7'3&547&547>763226323@``` VFaaFV      $. .$     yy .Q5ZE$ ,l*%>>%*>*98(QO!L\p'.'&67'#!##"327&+"&46;2!3'#"&7>;276;2+6267!"'&7&#"(6&#"#"' Dg OOG`n%ELL{@&&Nc,sU&&!Fre&&ss#/,<= #]gL oGkP'r-n&4&2-ir&&?o  4 _5OW! .54>762>7.'.7>+#!"&5#"&5463!2"&462{{BtxG,:`9(0bԿb0(9`:,GxtB&@&&@&K55K`?e==e?1O6# ,  #$  , #6OO&&&&5KK?!"'&'!2673267!'. ."!&54632>321 4q#F""8'go#- #,"tYg>oP$$Po> Zep#)R0+I@$$@I++332++"&=#"&=46;.7>76$  @ ᅪ*r@@r'/2+"&5".4>32!"&=463  &@~[՛[[u˜~gr&`u՛[[՛[~~@r=E32++"&=#"&=46;5&547&'&6;22676;2  >``@``ٱ?E,,=?rH@``@GݧH`jjrBJ463!2+"&=32++"&=#"&=46;5.7676%#"&5   &@~``@``  vXr&@``@+BF`rks463!2+"&=32++"&=#"&=46;5&547'/.?'+"&5463!2+7>6 %#"&5   &@~``@``~4e  0  io@& jV  0  Z9r&@``@Gɞ5o , sp &@k^ , c8~~`r8>KR_32++"&=!+"&=#"&=46;.767666'27&547&#"&'2#" @@ 'Ϋ'sggsww@sgg@@-ssʃl99OOr99FP^l463!2+"&=$'.7>76%#"&=463!2+"&=%#"&54'>%&547.#"254&' &@L?CuГP vY &@;"ޥ5݇ޥ5`&_ڿgwBF@&J_ s&&?%x%xJP\h463!2+"&='32++"&=#"&=46;5.7676632%#"&56'327&7&#"2#" &@L? ߺu``@``} ຒɞueeu9uee&_"|N@``@""|a~lo99r9@9;C2+"&5"/".4>327'&4?627!"&=463  &@Ռ .  N~[՛[[u˜N .  gr&`֌  . Ou՛[[՛[~N  . @r9A'.'&675#"&=46;5"/&4?62"/32+  '֪ \  . 4 .  \r|ݧ憛@\ .    . \@r~9A"/&4?!+"&=##"$7>763546;2!'&4?62  m  - @ݧ憛@& -  @rm4 -  ٮ*   - r+"&5&54>2  @[՛[rdGu՛[[r  ".4>2r[՛[[՛r5՛[[՛[[$2#!37#546375&#"#3!"&5463#22#y/Dz?s!#22#2##2S88 2#V#2L4>32#"&''&5467&5463232>54&#"#"'.Kg&RvgD $ *2% +Z hP=DXZ@7^?1 ۰3O+lh4`M@8'+c+RI2 \ZAhSQ>B>?S2Vhui/,R0+ ZRkmz+>Q2#"'.'&756763232322>4."7 #"'&546n/9bLHG2E"D8_ pdddxO"2xxê_lx2X  !+'5>-pkW[C I I@50Oddd˥Mhfxx^ә #'+/7!5!!5!4&"2!5!4&"24&"2!!! 8P88P 8P88P88P88PP88P8 P88P88P88P8 +N &6 !2#!+"&5!"&=463!46;23!#!"&54>32267632#"_>@`     `  L4Dgy 6Fe=OOU4L>   ` `  4L2y5eud_C(====`L43V &6 #"/#"/&54?'&54?6327632#!"&54>32 7632_>     %%Sy 6Fe=J%>     %65%Sy5eud_C(zz.!6%$!2!!!46;24&"2!54&#!"&&&@ԖV@&&@&&ԖԖ@&3!!! !5!'!53!! #7IeeI7CzCl@@@#2#!"&?.54$3264&"!@մppp((ppp#+/2#!"&?.54$3264&"!264&"!@մ^^^@^^^@((^^^^^^v(#"'%.54632 "'% 632U/@k0G,zD# [k# /tg F Gz  #'#3!) p*xe0,\8T #/DM%2<GQ^lw &'&676676&'&7654&'&&546763"#"'3264&7.>&'%'.767&7667&766747665"'.'&767>3>7&'&'47.'.7676767&76767.'$73>?>67673>#6766666&'&6767.'"'276&67&54&&671&'6757>7&"2654&57>&>&'5#%67>76$7&74>=.''&'&'#'#''&'&'&'65.'&6767.'#%&''&'#2%676765&'&'&7&5&'6.7>&5R4&5S9 W"-J0(/r V"-J0(.)#"6&4pOPppc|o}vQ[60XQW1V  # 5X N"& . ) D>q J:102(z/=f*4!> S5b!%  (!$p8~5..:5I  ~T 4~9p# ! ) & ?()5F 1   d%{v*: @e s|D1d {:*dAA|oYk'&<tuut&v HCXXTR;w 71™ Z*&' 1  9? . $Gv 5k65P.$.`aasa``Z9k'9؋ӗa-*Gl|Me_]`F& OܽsDD!/+``aa``a154&'"&#!!26#!"&5463!2    iLCly5)*Hcelzzlec0hb,,beIVB9@RB9J_L44LL44L44%2"4:I;p!q4bb3p (P`t`P(6EC.7BI64LL44LL  .>$4&'6#".54$ 4.#!"3!2>#!"&5463!2Zjbjj[wٝ]>oӰٯ*-oXL44LL44L')꽽)J)]wL`ֺ۪e4LL44LL;4&#!"3!26#!"&5463!2#54&#!";#"&5463!2  @ ^BB^^B@B^  B^^B@B^`@  MB^^B@B^^>  ^B@B^^5=Um ! !!2#!"&=463!.'!"&=463!>2!2#264&"".54>762".54>762?(``(?b|b?B//B/]]FrdhLhdrF]]FrdhLhdrF@@@(?@@ ?(@9GG9@/B//BaItB!!BtI Ѷ!!ь ItB!!BtI Ѷ!!ь-M32#!"&=46;7&#"&=463!2#>5!!4.'.46ՠ`@`ՠ`MsFFsMMsFFsMojjo@@jj@@<!(!!(!-3?32#!"&=46;7&#"&=463!2+!!64.'#ՠ`@`ՠ`  DqLLqDojjo@@jj@@B>=C-3;32#!"&=46;7&#"&=463!2+!!6.'#ՠ`@`ՠ`UVU96gg6ojjo@@jj@@β**ɍ-G32#!"&=46;7&#"&=463!2#>5!!&'.46ՠ`@`ՠ`MsFFsMkkojjo@@jj@@<!(!33!(!9I2#!"&=4637>7.'!2#!"&=463@b":1P4Y,++,Y4P1:"":1P4Y,++,Y4P1:"b@@@7hVX@K-AA-K@XVh77hVX@K-AA-K@XVh7Aj"#54&#"'54&#"3!26=476=4&#"#54&'&#"#54&'&'2632632#!"&5&=4632>3265K @0.B @0.B#6'&& l @0.B 2' .B A2TA9B;h" d mpPTlLc _4.HK5]0CB.S0CB./#'?&&)$$)0CB. }(AB.z3M2"61d39L/PpuT(Ifc_E`1X"#4&"'&#"3!267654&"#4&"#4&26326#!"&'&5463246326\B B\B&@5K&@"6LB\B B\B sciL}QP%&#"!"3!754?27%>54&#!26=31?>Ijjq,J[j.-tjlV\$B.R1?@B.+?2`$v5K-%5KK5.olRIS+6K5̈$B\B 94E.&ʀ15uE& ԖPjjdXUGJ7!.B P2.B %2@ 7K5(B@KjKj?+fU E,5K~!1.>F.F,Q5*H$b2#!"&=%!"&=463!7!"&'&=4634'&#!">3!!"3!32#!"3!23!26=n$32>32>32#"#.#"#.#"3!27654&#"547654&#"#654&Mye t|]WSSgSY\x{ 70"1i92DU1&=  =&0@c >&/Btd4!*"8K4+"@H@/'= t?_K93-] UlgQQgsW ]#+ i>p&30&VZ&0B/ %3B. "to ){+C4I (  /D0&p0D3[_cg"'&#"3!2676=4&"#54&#"#54&#"#4&'2632632632#!"&'&5463246#!#!#5K)B4J&@#\8P8 @0.B J65K J6k cJ/4qG^\hB2.1!~K5y?^\Vljt-.j[J,qjjI7$?1R.B+.B$`2?gvEo.5KK5%-K6+SIR[&.E49 B\B$5KG#!+"&5!"&=463!2+"&' +"' +"'&5>;2>76;2Y    M .x - N     u  , u ?  LW   #  *:J4'&+326+"'#+"&5463!2  $6& $&6$ UbUI-uu,uuڎLlLAX!Jmf\$ 6uuu,KLlL-[k{276/&'&#"&5463276?6'.#"!276/&'&#"&5463276?6'.#"  $6&  $&6]h - %Lb`J%E 5 ,5R- h - %Lb`J%E 5 ,5R-'uu,uulL/hR    dMLc  NhR   dMLc  N1uuu,LlL@  ' 7 '7 ``H ``H !``H ```H` '%  7' 7'7 ' $&6$ X`(W:,:X`(WLLlLX`(W:BX`(XLlL $ %/9ES[#"&54632$"&4624&"26$4&#"2%#"&462$#"&4632#"32&! 24>  !#"&'.'#"$547.'!6$327&'77'&77N77N'qqqqqPOrqEsttsst}||}uԙ[WQ~,> nP/R U P酛n >,m'77'&77N77N6^Orqqqqqqt棣棣(~|| on[usј^~33pc8{y%cq33dqpf L 54 "2654"'&'"/&477&'.67>326?>< x ,  (-'sI  VCV  Hr'-(  $0@!BHp9[%&!@0$u  ]\\]-$)!IHV D V HI!)$-#36>N"&462."&/.2?2?64/67>&  #!"&5463!2]]]3 $; &|v;$ (CS31 =rM= 4TC(G zw@www]]]($-;,540= sL =45,; @www(2#"$&546327654&#" &#"AZ\@/#%E1/##.1E$![A懇@@\!#21E!6!E13"|! gL&5&'.#4&5!67&'&'5676&'6452>3.'5A5RV[t,G'Q4}-&r! G;>!g12sV&2:#;d=*'5E2/..FD֕71$1>2F!&12,@K r#"&5462>%.#"'&#"#"'>54#".'7654&&5473254&/>7326/632327?&$  $6 $&6$ !&"2&^ u_x^h ;J݃HJǭ qE Dm! M G?̯' %o8 9U(F(ߎLlL&!&!SEm|[n{[<ɪ "p C Di% (K HCέ  pC B m8 @Kނ  HF(LlL "*6%&6$ 7&$5%%6'$2"&4}x3nQH:dΏX e8z' li=! 7So?vM '&7>>7'7>''>76.'6'El:Fg r *t6K3U Z83P)3^I%=9 )<}Jk+C-Wd &U-TE+]Qr-< Q#0 C+M8 3':$ _Q =+If5[ˮ&&SGZoMkܬc#7&#"327#"'&$&546$;#"'654'632ե›fKYYKf¥yͩ䆎L1hvvƚwwkn]*]nlxDLw~?T8bb9SA}+5?F!3267!#"'#"4767%!2$324&#"6327.'!.#"۔c28Ψ-\?@hU0KeFjTlyE3aVsz.b؏W80]TSts<hO_u7bBtSbF/o|V]SHކJ34&#!"3!26#!!2#!"&=463!5!"&5463!2  @ ^B `` B^^B@B^   @ @B^@@^BB^^>3!"&546)2+6'.'.67>76%&F8$.39_0DD40DD0+*M7{L *="# U<-M93#D@U8vk_Y [hD00DD00Dce-JF1 BDN&)@ /1 dy%F#"'&'&'&'&763276?6#"/#"/&54?'&763276"&'&'&5#&763567632#"'&7632654'&#"32>54'&#"'.5463!2#!3>7632#"'&'&#"'&767632yqoq>* 432fba  $B? >B BB AA.-QPPR+ 42 %<ciђ:6& hHGhkG@n`IȌ5 !m(|.mzyPQ-.  je  q>@@?ppgVZE|fb6887a %RB? =B ABBAJvniQP\\PRh!cDS`gΒ 23geFGPHXcCI_ƍ5" n*T.\PQip [*81 / 9@:>t%6#".'.>%6%&7>'.#*.'&676./&'.54>754'&#"%4>327676= >vwd" l "3 /!,+ j2.|%& (N &wh>8X}xc2"W<4<,Z~fdaA`FBIT;hmA<7QC1>[u])  u1V(k1S) - 0 B2* %M ;W(0S[T]I) A 5%R7&&T,Xq&&1X,LΒw%%;#!"&5463!546;2!2!+"&52#!"/&4?63!5! (&&@&&(&&@&&( (  &&@&&@&&&&  #''%#"'&54676%6%% hh @` !   !    #52#"&5476!2#"&5476!2#"'&546        @  @  @    84&"2$4&"2$4&"2#"'&'&7>7.54$ KjKKjKjKKjKjKKjdne4" %!KjKKjKKjKKjKKjKKjK.٫8  !%00C'Z'.W"&462"&462"&462 6?32$6&#"'#"&'5&6&>7>7&54>$ KjKKjKjKKjKjKKjhяW.{+9E=cQdFK1A  0) LlLjKKjKKjKKjKKjKKjKpJ2`[Q?l&٫C58.H(Yee    Y'w(O'R@$#"&#"'>7676327676#" b,XHUmM.U_t,7A3ge z9@xSaQBLb( VU  !!!==w)AU!!77'7'#'#274.#"#32!5'.>537#"76=4>5'.465! KkkK _5 5 #BH1`L I& v6S F!Sr99rS!`` /7K%s}H XV P V  e  Vd/9Q[ $547.546326%>>32"&5%632264&#"64'&""&'&"2>&2654&#";2 P 3>tSU<)tqH+>XX|Wh,:UStW|XX>=X*  ))  +^X^|WX=>X:_.2//a:Ru?  Q%-W|XW>J( =u>XX|WX`  *((*  +2 2X>=XW|E03>$32!>7 '&'&7!6./EUnohiI\0<{ >ORDƚ~˕VƻoR C37J6I`Tb<^M~M8O  5!#!"&!5!!52!5463 ^B@B^`B^^B `B^^"^BB^0;%'#".54>327&$#"32$ !"$&6$3 ##320JUnLnʡ~~&q@tKL}'` - -oxnǑUyl}~~FڎLlLt`(88(   7!' !\W\ d;tZ`_O; }54+";2%54+";2!4&"!4;234;2354;2354>3&546263232632#"&#"26354;2354;2354;2````pp```  !,! -&M<FI(2 ```@PppPpppppp# #   ppppp j#"'&=!;5463!2#!"&=#".'.#!#"&463232>7>;>32#"&'#"!546 %. `@` :,.',-XjjXh-,'.,: kb>PppP>bk .%Z & :k%$> $``6&L')59I"TlԖlT"I95)'L&69GppG9$ >$%k: !+32&#!332 $&6$ ~O88OLlL>pN  iLlL '':Ma4&'#"'.7654.#""'&#"3!267#!"&54676$32#"'.76'&>$#"'.7654'&676mD5)  z{6lP,@KijjOoɎȕ>>[ta) GG 4?a) ll >;_-/ 9GH{zyN@,KԕoN繁y! ?hh>$ D" >â? $ n"&5462'#".54>22654.'&'.54>32#"#*.5./"~~s!m{b6# -SjR,l'(s-6^]Itg))[zxȁZ&+6,4$.X%%Dc* &D~WL}]I0"  YYZvJ@N*CVTR3/A3$#/;'"/fR-,&2-" 7Zr^Na94Rji3.I+ &6W6>N%&60;96@7F6I3+4&#!"3!26%4&#!"3!26 $$ ^aa`@@^aa '7  $ >. %"&546;2#!"&546;2#/a^(^aa(N@@4&#!"3!26 $$ @@^aa`@^aa '  $ >. 7"&5463!2#/a^(n@^aa(N@ %=%#!"'&7!>3!26=!26=!2%"&54&""&546 ##]VTV$KjKKjK$&4&Ԗ&4&>9G!5KK55KK5!&&jj&&#/;Im2+#!"&'#"&463>'.3%4&"26%4&"26%6.326#>;463!232#.+#!"&5#"5KK5sH..Hs5KK5e# )4# %&4&&4&&4&&4&` #4) #%~]eZ&&Ze] E-&&-EKjKj.<<.KjK)#)`"@&&`&&&&`&&)#`)"dXo&&oXG,8&&8!O##!!2#!+"'&7#+"'&7!"'&?63!!"'&?63!6;236;2!2@@8@7 8Q NQ N 8G@ 8GQ NQ N7   8 8  H H  k%  ".>2I20]@]@oo@@oo㔕a22]]p^|11|99|11|(%7'7' ' 7T dltl)qnluul)1$4&"24&"2 &6 +"&5476;2 &6 LhLLhLLhLLhL>  &   &`>hLLhLLhLLhL>&&>G  .7)1!62 1!62he220e22> v +4 [d+ d 135#5&'72!5!#"&'"'#"$547&54$ Eh`X(cYz:L:zYc\$_K`Pa}fiXXiޝfa  (+.>#5#5!5!5!54&+'#"3!267!7!#!"&5463!2U``'    jjV>(>VV>>Vq  ( ^(>VV>>VV=&'&'&'&76'&'&.' #.h8"$Y ''>eX5, ,PtsK25MRLqS;:.K'5R ChhRt(+e^TTu B"$:2~<2HpwTT V/7GWg. %&32?673327>/.'676$4&"2 $&6$   $6& $&6$ d -- m  ,6*6,  mKjKKjoooKzz8zzȎLlLU4>>4-. YG0 )xx) 0GYޞ .jKKjKqoooolzzz80LlLD/7H#"'.7'654&#"'67'.6?>%"&46227#".547|D,=),9#7[͑fx!X: D$ +s)hhijZt<F/*8C,q؜e\r,WBX/C2hhh=tXm>NZ+"&=46;2+"&=4>7>54&#"#"/.7632  >. $$ p=+& 35,W48'3  l zffff^aaP2P: D#;$# $*;? R Cfff^aa'Y >O`"&5462&'.'.76.5632.'#&'.'&6?65\\[( | r [A@[[@A#2#  7* <Y$  +}"(  q87] F  _1 )    #1Ke34&+326+"&=!#!"&763!2#!"&5463!2#>?4.'3#>?4.'3#>?4.'3Xe`64[l7  , L; =+3&98&+)>>+3&98&+)>=+3&88&+)> Wj|r >Q$~d $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgYJ\m4.'.'&#"#"'.'&47>7632327>7>54&'&#"327>"&47654'&462"'&476'&462"'&47>&'&462i$ $^"  %%  "^$ $W "@9O?1&&18?t@" W&%%&4KK6pp&46ZaaZ&4mttm ^x -  - x^ = /U7C kkz'[$ =&5%54'4&KK4r7>54 "&54>2"&462%"&54&#""&546 %#"&'&'.7>#"'&'.7>&4&&4&4&&4SZ&4&&44$#&&&j3$"('$&4&[՛[&4&&4F&4&]\&4&$  !D4%  ,\44&&4&4&&4&-Z4&&4&;cX/)#&>B)&4&j9aU0'.4a7&&u՛[[4&&4&@&&]]&&Ώ0 u40 )4#g&'.#"32676%4/&#"326'&#"2632#2+&'%#"'&6?676676632%#"'&6767#"&'&6767#"'.7>327"#"&'&6763"'.7>;7632;>%5K$ "0%>s$ "0%>;;>%5KVL#>H30 \($$(\( єyO2F/{(?0(TK.5sg$ єy#-F/{$70(TK.5sg$L#>H30 \($$(\#(@5"'K58!'"58!'"55"'K#dS$K K$Sdx#@1 w d>N;ET0((? - 2K|1 wd#N;ET0$(? - 2K$#dS$K K$SdxDN\2654& 265462"2654 #"32654>7>54."/&47&'?62 &4&&4&h՛[&4&r$'("$3j&&&#$4[ " @ GB[ "&&Β&&][u&&7a4.'0Ua9j&4&)B>&#)/Xc;u՛ "  " Gi[ Xh#"&54676324&'&#"'>54#"32#"54>54'.#"32>7>767632326#!"&5463!2b )   :4FDN  [1,^JK-*E#9gWRY vm0O w@wwwC22 c@X&!9{MA_"S4b// DR"XljPY < @www%e4.#"32>7676#'.#"#"&54>3232>754&*#"&54>763 >32 ''il$E/  @P@ ^`'W6&!.. ! -P5+ E{n46vLeVz:,SN/ M5M[  ]$[^5iC'2H&!(?]v`* l b$9> =R2 #"&5467%!"&7>3-.7>;%.7>322326/.76/.'&6766/&/&#"&676 &676&6766/&672? =1( H/ '96&@)9<')29% &06##$ J 0 7j)5@"*3%"!M %#K"%Ne 8)'8_(9./=*%8!Q #P"\Q#N&a)<9bR]mp%"'.'&54>76%&54763263 #"/7#"'#"&/%$%322654&#"%'OV9  nt  |\d ϓ[nt  |@D:) ;98'+| j," 41CH^nVz(~R 9\'  r  @L@  @w46HI(+C ,55, f[op@\j;(zV~i/5O#"'&54>32&#" 654'67'"'>54''&'"'6767&546767>7蒓`V BMR B9)̟!SH-77IXmSMH*k#".o;^J qןד>@YM $bKd ү[E";Kx%^6;%T,U:im=Mk).DT4'"&5463267&#" 6;64'.'4'>732676%#!"&5463!2),蛜s5-54&#"#"'654'.#"#"&#"3263232>3232>76 $$ Cf'/'% ( $UL ( #'/'@ 3#@,G)+H+@#3 ^aaX@ _O#NW#O_ .* ##(^aaq[632632#"&#"#".'&#"#".'&54767>7654.54632327&547>P9 B6?K? %O4T% >6>Z64Y=6>%S4N$ ?L?4B @{:y/$ ,'R! F! 8% #)(()#%: !F Q'+%0z:zO_4'.'&54>54&#"#"'654'.#"#"&#"3263232>3232>76#!"&5463!2Cf'.'% ( $VM  ) #'.'@ 3 #A,G)+H+A# 4 w@wwwXA  ?4N$NW&M&L  /* ## + @www O$>?>762'&#"./454327327>7> EpB5 3FAP/h\/NGSL  RP* m95F84f&3Ga4B|wB.\FI*/.?&,5~K % & Y."7n< "-I.M`{ARwJ!FX^dj''''"'7&'7&'7&'7&547'67'67'67'63277774$#"32$   *'ֱ,?g=OO&L&NJBg;1''ֱ.=gCIM $'&&NJBg=.%w؝\\w Ioo<<-NIDg=/%(ײ+AhEHO*"#*OICh=/'(ֲ/=h>ON.]xwڝ]7e[@)6!!"3#"&546%3567654'3!67!4&'7Sgny]K-#75LSl>9V%cPe}&Hn_HȌ=UoLQ1!45647UC" !-9[nx"&46254&"326754&"326754&"26754&"26#".547632632626326'4#"#"54732764&"264.#"327632>#"'"'#"'#"&5#"'67&'327&'&54>3267>7>7>32632632T"8""8)<())(<))))<))<))<))<) Tد{ՐRhx=8 78 n 81 pH_6Soc F@b@?d?uKbM70[f5Y$35KUC<:[;+8 n 87 8/8Zlv]64qE 'YK0-AlB; W#;WS9 &(#-7Z://:/Tr++r,,r++r,,r++r,,r++r,,ʠgxXVעe9222222^KVvF02OO23OO`lF;mhj84DroB@r+@222222C0DP`.r8h9~T4.&o@9 1P%14'!3#"&46327&#"326%35#5##33 $$  }Pcc]321IUΠ?LL?cc4MX &04;0XpD[[DpD,)&&Q 9V\26&".'&'&6?.#"#26327677>'32>&3#'&+"?626&"#!'.'!"&5463!>;26;2!2P P  92#.}SP9::%L \B )spN/9oJ5  !+D`]BgY9+,9% Pk 4P P &NnF!_7*}B<{o0&&B;*<@$ucRRc#@16#37c&@@@ J"@*4^`ED B o/8927 *@OLC!T!323X$BJ@@@&AS 0C 59" 'D/&&D4 88 $5A&%O#!"&547>7>2$7>/.".'&'&2>^B@B^ >FFzn_0P:P2\nzFF> R & p^1P:P1^ & R P2NMJMQ0Rr.B^^B 7:5]yPH!%%"FPy]5:7 = 4 QH!%%!Ht 4 =<"-/ ?1Pp+".'.'.?>;2>7$76&'&%.+"3!26#!"&54767>;2' +~'*OJ%%JN,&x' % ^M,EE,M7 ZE[P*FF*P:5  ^B@B^){$.MK%%KM.$+X)o3 "a 22!] 4  I>"">,&S8JB##B12 ` `B^^B8&ra#11#$R&  "&.2v%/%''%/%7%7'%7'/#&5'&&?&'&?&'&7%27674?6J" 0<=_gNU?DfuYGb7=^H^` =v~yT3GDPO 4Fѭqi_w\ހ!1uS%V_-d 1=U{J8n~r'U4.#".'"3!264&"26+#!"&5463!232+32+32 0P373/./373P0 T=@=T֙֙|`^B@B^^BB^`````*9deG-! !-Ged9IaallkOB^^BB^^B +Yi"&54622#!"&54>;2>+32+32+#!"&5463!2324&#!"3!26֙֙0.I/ OBBO -Q52-)&)-2 ``  ``  `^B@B^^BB^`  @   |kkl"=IYL)CggC0[jM4      B^^BB^^B @  @ !1AQu4.#".'"3!24&"254&#!"3!2654&#!"3!2654&#!"3!26#!54&+"!54&+"!"&5463!2)P90,***,09P)J66S"@8@^B@@B^^BB^Ukc9 9ckU?@@88 @@N@B^````^BB^^!1AQu#!"&4>32>72"&462#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!546;2!546;2!26#!"&5463!2J66J)P90,***,09P)"@8@ @  `@@` ^B@B^^BB^ՀUUkc9 9c`@@88@@2  @ ````@B^^BB^^(%.'"&' $&  #"$&6$ wCιCwjJ~J>LlLśJSSJ͛>6LlL$,  $&6654&$ 3 72&&  lLmzzBl>KlLGzzG>'7#!"&54>7&54>2  62654' '3/U]B,ȍ,B]U/OQнQ>+X}}X0bӃۚӅb0}hQQh>ff#=#!"&4>3272"&462!3!26#!"&5463!;26=!2J66J)Q8PP8Q)  ^B@B^^B``B^VVVld9KK9d` @B^^BB^``^+;K[eu4.#"'"3!264&"254&#!"3!2654&#!"3!26%54&+";2654&#!"3!26!54&#!"!#!"&5463!2"D/@@/D"?,,?pppp@@@@^B@B^^BB^D6]W2@@2W]67MMppp@@@@@@@@n`@B^^BB^^+;K[eu#!"&54>3272"&462#!"&=463!2%#!"&=463!2+"&=46;25#!"&=463!2!3!26#!"&5463!2?,V,?"D/@@/D"pppp@@@  ^B@B^^BB^D7MM76]W2@@2W]֠ppp@@@@@@@@` @B^^BB^^A#"327.#"'63263#".'#"$&546$32326J9"65I).!1iCCu +I\Gw\B!al݇yǙV/]:=B>9+32%#!"&5463!2#"&54>54'&#"#"54654'.#"#"'.54>54'&'&543232654&432#"&54>764&'&'.54632  ?c'p& ?b1w{2V ?#&#9&CY' &.&#+B : &65&*2w1GF1)2<)<'  ( BH=ӊ:NT :O )4:i   F~b` e!}U3i?fRUX|'&'&Ic&Q  *2U.L6* / L:90%>..>%b>+ +z7ymlw45)0 33J@0!! TFL P]=GS -kwm  !*(%6&692? $&6$  '   al@lLlL,& EC h$LlL /37;%"&546734&'4&" 67 54746 #5#5#5ppF::FDFNV^fnv~"/&4?.7&#"!4>3267622"&4"&46262"&42"&4462"$2"&42"&4"&46262"&4"&46262"&42"&4$2"&42"&42"&4  R ,H8JfjQhjG^R,  !4&&4&Z4&&4&4&&4&4&&4&&4&&44&&4&4&&4&Z4&&4&4&&4&4&&4&4&&4&4&&4&&4&&4&Z4&&4&Z4&&4&  R  ,[cGjhQRJ'A, &4&&4Z&4&&4Z&4&&4Z&4&&444&&4&&4&&4Z&4&&4Z&4&&4Z&4&&4&4&&4Z&4&&4Z&4&&4&&4&&4Z&4&&4Z&4&&4%-5=EM}+"&=#!"'+"&=&="&4626"&462&"&462"&462&"&462&"&462#!"&=46;4632676/&?.7&#"!2"&462&"&462&"&462"&462&"&462&"&462"&462&"&462"&462@?AA? @ @R...R@`jlL.h) * * $ %35K.....uvnu....@@jN  * * .t2#K5..R..R. @Hq '&'&54 &7676767654$'.766$76"&462&'&'&7>54.'.7>76ȵ|_ğyv/ۃ⃺k] :Buq CA _kނXVobZZbnW|V 0  Q2- l}O  / :1z q%zG 4( 6Roa ą\< )4 J}%!!#!"&5463!2^B@B^^BB^`@B^^BB^^%#!"&=463!2^B@B^^BB^B^^BB^^ &))!32#!#!"&5463!463!2`B^^B^B@B^^B`^BB^^B@B^B^^BB^`B^^#3%764/764/&"'&"2?2#!"&5463!2    s^B@B^^BB^ג     @B^^BB^^#'7"/"/&4?'&4?62762!!%#!"&5463!2     ^B@B^^BB^    `@B^^BB^^ ! $&6$ .2r`LlLf4LlL#.C&>"'&4762"/&4?62'"'&4762%'.>6.'.>6'>/>76&'&.'&7&'">?4'.677>7.>37654'&'67>776 $&6$  ( 4Z# # & # # & y"6&.JM@& "(XE* $+8 jT?3#'.'&!3!2>?3.'#!57>7'./5!27#'.#!"g%%D-!gg<6WWZe#1=/2*]Y3-,C1 /Dx] VFIq-HD2NK '>*%R= f 07=. f D]\|yu,0>Seu#2#"'&5<>323#3#&'#334'."#"+236'&54.#"5#37326#!"&5463!2 <  zzj k-L+ )[$8=".un/2 ^B@B^^BB^5cy    (ݔI(8?C (3> #"($=@B^^BB^^0K S&'.'&'./674&$#">&>?>'76'# "&#./.'7676767>76$w .~kuBR] T%z+",|ޟj<)(!( ~ˣzF8"{%%#5)}''xJF0"H[$%EJ#% .Gk29(B13"?@ S)5" #9dmW";L65RA0@T.$}i`:f3A%% BM<$q:)BD aa%`]A &c| Ms!  Z 2}i[ F&** < ʣsc"J<&NsF% 0@Wm6&'.6$.7>7 $76".4>2., &>6'"'&7>=GV:e #:$?+% q4g &3hT`ZtQмQQмpAP1LK!:< }҈`dlb,9'  %%($! a3)W)x  оQQоQQcQǡ-җe)Us2XD\ϼYd /?O_o#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543%#!"&5463!2++532325++532325++532325++532325++53232p00pp00pp00pp00pp008((88(@(80pp00pp00pp00pp00pp0     @(88((88     /Q/&'%&/"&=.6?&?&'&6?'.>-#".6?'.>'&6'.>54627>%>76#"'% %6 27 2G f!)p&4&p)!f G2 72  *6 " 47 2G f!)p&4&p)!f G2 72 " 6* !k 3 j&3 %,*&&ր*9% 3&j 3 k!./!>>$,*!k 3.j&3 %Ԝ9*&&ր*ǜ,% 3&j 3 k!*,$>>!/.&6.'&$ &76$76$PutۥiPuGxy Զ[xy -_v١eNuv١e =uʦ[t78X &6# #'7-'%'&$  $6 $&6$ 31NE0gR=|||">"LlL^v!1f2iЂwgfZQQ^>"||||wLlL &ZXblw.'&>'&'&".'.'&&'&'&7>767>67>7626&'&>&'&>'.7>.676'&'&'&'.67.>7>6&'&676&'&676.676&'&>&'&676'.>6/4-LJg-   $  6)j2%+QF)b3FSP 21DK2AW ") ")$? ? 8A& AE5lZm= gG2Sw*&>$5jD GHyX/4F r 1  1""!l=6> 6 ,5./'e    .*|Ed! u & &%& &5d ))66 @ C& 8B @qL?P^7 G-hI[q:"T6 ,6 &/`  L wQ'   A ^   "  $& _  y  * <Copyright Dave Gandy 2016. All rights reserved.Copyright Dave Gandy 2016. All rights reserved.FontAwesomeFontAwesomeRegularRegularFONTLAB:OTFEXPORTFONTLAB:OTFEXPORTFontAwesomeFontAwesomeVersion 4.7.0 2016Version 4.7.0 2016FontAwesomeFontAwesomePlease refer to the Copyright section for the font trademark attribution notices.Please refer to the Copyright section for the font trademark attribution notices.Fort AwesomeFort AwesomeDave GandyDave Gandyhttp://fontawesome.iohttp://fontawesome.iohttp://fontawesome.io/license/http://fontawesome.io/license/      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab cdefghijklmnopqrstuvwxyz{|}~"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~glassmusicsearchenvelopeheartstar star_emptyuserfilmth_largethth_listokremovezoom_inzoom_outoffsignalcogtrashhomefile_alttimeroad download_altdownloaduploadinbox play_circlerepeatrefreshlist_altlockflag headphones volume_off volume_down volume_upqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalic text_height text_width align_left align_center align_right align_justifylist indent_left indent_rightfacetime_videopicturepencil map_markeradjusttinteditsharecheckmove step_backward fast_backwardbackwardplaypausestopforward fast_forward step_forwardeject chevron_left chevron_right plus_sign minus_sign remove_signok_sign question_sign info_sign screenshot remove_circle ok_circle ban_circle arrow_left arrow_rightarrow_up arrow_down share_alt resize_full resize_smallexclamation_signgiftleaffireeye_open eye_close warning_signplanecalendarrandomcommentmagnet chevron_up chevron_downretweet shopping_cart folder_close folder_openresize_verticalresize_horizontal bar_chart twitter_sign facebook_sign camera_retrokeycogscomments thumbs_up_altthumbs_down_alt star_half heart_emptysignout linkedin_signpushpin external_linksignintrophy github_sign upload_altlemonphone check_emptybookmark_empty phone_signtwitterfacebookgithubunlock credit_cardrsshddbullhornbell certificate hand_right hand_lefthand_up hand_downcircle_arrow_leftcircle_arrow_rightcircle_arrow_upcircle_arrow_downglobewrenchtasksfilter briefcase fullscreengrouplinkcloudbeakercutcopy paper_clipsave sign_blankreorderulol strikethrough underlinetablemagictruck pinterestpinterest_signgoogle_plus_sign google_plusmoney caret_downcaret_up caret_left caret_rightcolumnssort sort_downsort_up envelope_altlinkedinundolegal dashboard comment_alt comments_altboltsitemapumbrellapaste light_bulbexchangecloud_download cloud_uploaduser_md stethoscopesuitcasebell_altcoffeefood file_text_altbuildinghospital ambulancemedkit fighter_jetbeerh_signf0fedouble_angle_leftdouble_angle_rightdouble_angle_updouble_angle_down angle_left angle_rightangle_up angle_downdesktoplaptoptablet mobile_phone circle_blank quote_left quote_rightspinnercirclereply github_altfolder_close_altfolder_open_alt expand_alt collapse_altsmilefrownmehgamepadkeyboardflag_altflag_checkeredterminalcode reply_allstar_half_emptylocation_arrowcrop code_forkunlink_279 exclamation superscript subscript_283 puzzle_piece microphonemicrophone_offshieldcalendar_emptyfire_extinguisherrocketmaxcdnchevron_sign_leftchevron_sign_rightchevron_sign_upchevron_sign_downhtml5css3anchor unlock_altbullseyeellipsis_horizontalellipsis_vertical_303 play_signticketminus_sign_alt check_minuslevel_up level_down check_sign edit_sign_312 share_signcompasscollapse collapse_top_317eurgbpusdinrjpyrubkrwbtcfile file_textsort_by_alphabet_329sort_by_attributessort_by_attributes_alt sort_by_ordersort_by_order_alt_334_335 youtube_signyoutubexing xing_sign youtube_playdropbox stackexchange instagramflickradnf171bitbucket_signtumblr tumblr_signlong_arrow_down long_arrow_uplong_arrow_leftlong_arrow_rightwindowsandroidlinuxdribbleskype foursquaretrellofemalemalegittipsun_366archivebugvkweiborenren_372stack_exchange_374arrow_circle_alt_left_376dot_circle_alt_378 vimeo_square_380 plus_square_o_382_383_384_385_386_387_388_389uniF1A0f1a1_392_393f1a4_395_396_397_398_399_400f1ab_402_403_404uniF1B1_406_407_408_409_410_411_412_413_414_415_416_417_418_419uniF1C0uniF1C1_422_423_424_425_426_427_428_429_430_431_432_433_434uniF1D0uniF1D1uniF1D2_438_439uniF1D5uniF1D6uniF1D7_443_444_445_446_447_448_449uniF1E0_451_452_453_454_455_456_457_458_459_460_461_462_463_464uniF1F0_466_467f1f3_469_470_471_472_473_474_475_476f1fc_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494f210_496f212_498_499_500_501_502_503_504_505_506_507_508_509venus_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569f260f261_572f263_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598f27euniF280uniF281_602_603_604uniF285uniF286_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629uniF2A0uniF2A1uniF2A2uniF2A3uniF2A4uniF2A5uniF2A6uniF2A7uniF2A8uniF2A9uniF2AAuniF2ABuniF2ACuniF2ADuniF2AEuniF2B0uniF2B1uniF2B2uniF2B3uniF2B4uniF2B5uniF2B6uniF2B7uniF2B8uniF2B9uniF2BAuniF2BBuniF2BCuniF2BDuniF2BEuniF2C0uniF2C1uniF2C2uniF2C3uniF2C4uniF2C5uniF2C6uniF2C7uniF2C8uniF2C9uniF2CAuniF2CBuniF2CCuniF2CDuniF2CEuniF2D0uniF2D1uniF2D2uniF2D3uniF2D4uniF2D5uniF2D6uniF2D7uniF2D8uniF2D9uniF2DAuniF2DBuniF2DCuniF2DDuniF2DEuniF2E0uniF2E1uniF2E2uniF2E3uniF2E4uniF2E5uniF2E6uniF2E7_698uniF2E9uniF2EAuniF2EBuniF2ECuniF2EDuniF2EE=O<01hmkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/lato-normal-italic.woff0000664000175000017500000120133414664334534026227 0ustar carstencarstenwOFF GPOSscAGSUBˀ:(fZdOS/2ڼ``icmap5j&&cvt Tn:lfpgm gasplglyft2D!HWhead$66 7~hhea$$$hhmtx%/5bDZxGNa' ŵ&Qt}@1\St77|_<~vhx<]>F5]q2 ^<.qW7bDԙ::~c~aذS75ظX㿗[*@>S >0uj6f;w׿2Z mqȸ嬖.WῂVu7_cn\q7ϾyEmεtݑ Y׎ڞk{wv=هf :qn溧f6~jy<8T3[>3u=4nzAw˼7m/v}1^,xk;op,xエc^ˣz`K}o>罹NYv2:׭eEDc"b>\fY.nōh+wvL?dxR*^>*&uoW -XX[<*ҸY:#QH'.'G1fcF-QoɂrqF$}џdA9[ܽX@a dp#ahcaLI0< SQ&MQqqxJ τ`< sx<8g_W侸Wa]C|">;37YwTz2;qbC)!.du\&tǝsbMsWq(F|j+Tqs:q1Ff^y8P7218T|aL0Yl|R6΀0 f30wN㻰s߃>2X!4X685>/`d\/~7~%&7_&ȖEY *I'S~_a'&.a}A8cI0Cd)Ȃlȁ\i8ypJf*P#Jj!*htd))0A<4z^+Soo~ݢix4-MClS2&ho3 ">8%E JtQrAєNk,dxOrx_~i" wJ^2 + #e!Ez 嫆eay0U>gxD.3yWF QQd0j6G.=1o1Ɋثe0|"3`ܛ!|$&"&MV⿓_zgG0Kw0B41 ).+b>wӜGpJ*Q[peW2Z1(˔nrhFh-Wk2Q+DS$ĚLj"$Rܗ>r݌ȵY& ݭ%aic,S+X8ΨC"s9Sz :xY+~1eJ4tG #Y\2}Mk;Bݸ4g-kXӬiֱuakXֱua mM(:^0aQkK0r,0 Yd,*}h劉Jwi͸jk8 X_z 6װq7A=eL1Kl3 {`t늋=t8 fȀ|2JW8dy-6,E^Cd̀VhB3t;+tp zC n`ݍ~ `۩۩۩ééééé6 `;쀟v. {`/p!8 G(48' 2dA6E ʼn ŲX@\v(p BTCjV`AHY0@@,I 4F@SЖZ@KHDH+erֲPifh )V6NT.p'tVz@O=` R.R.R,R,eYj]J `:<xG)xG)xG)?)x2y /  ؙ)oBXx>>ᚫP P P P P6s& w ~2RtVy+ݼnJ7o[tVy+ݼnJ7o[tVy+ݼnJ7o[tVy+ݼnJ7o[tVy+ݼnJ7oU dR E`b(28xbr' /ASDC Ă&4 ]xz  4'B\ WxwU&Kpy;._ȀZh3SCœ&>tͧ SBt.FF!P7)xW3hҁ砸WC߇?}3uW={гYfqY3K-3~W"0޲/eofד+~O:~h=f4 )r/pEdS  $coLNg<g.}>C}>;SSSvPvPvPvPvPvPSSSSSSSSևWR?寧*z1|:ӜH?o -.z||6|aE?_L?_,n+mg0Y>Xm6g볍lc}>.ϴ91s) 0SeV0 3bFvfAE7c4"Zh.HU\7Fh+3ФC܂VCѫkJϫ*=Jϫ2~WUwU]~WUwU]~WUqUz\WH'}+g]N͗4_n#w5;#&>!.eux5I\VwU]UzWUOQ5ST?/U`g(;J?q0 0 0 R`40&$ SAx7ȭ8`56Fmd56Vrt+9Jn%G[ r4urA:Q90~(5~+j-Fj-Fj72-|V?HS;5NS;5NS;5NS;5NS;5NS;5NS;5NS;UNSRT-~KRT-~KRT-RmT-~KRT-~KRT-~KRT-~KRT-~KRT-~KRT-~KRT-~KRT-~KRT-~KQTGQTGQTUipԨ[vknڭQU|/ZK#3ɮ̈U]㷥8݅^y5- a^v.ȕnG'b@<17=LVp\ /7L^L?Rb7=KcG7T5|+?;s\6jg}쒸crd6{;C>7{;#gt7{9߳^{scس,aҝ}J P*О*К;Y%% *H/߃#=g;ҷwo}f_O~}= }e`"TTav@chW5:*G #E!N ;{L֋!W/G 9J6J6J6O<g308W/CpQ8ipN@:d)ȂlȁreW+ c 3Aw<?z/TA5Qu q-8oܮ4F@Ss4ZB$B\v٫J+tǽuZNP_zB;O\!9a]>ᚫ` s_:ʱװQθTEoxla+l:e;쀟vo v `?p8 H` ȄSِ`p,C|S)s`"A1@,,b10Ľba,2tC wH1؛qM1 GxGf-7Lc `XixDQQĐX.LQ+9~,CbA'Hlgc.E 13br [tۀ{U:aJQ_{B/ Ҋ ⱾjC9+7qF0F 8`"L)+U"^ B-@ ~)JL 4FL MY8V Vľ0BY쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃B,}0F0FA 10q0&D/˰HZV{>C'0FE?C1`cZŞhh{ { { { { { { { { {QsT6r222H Rq--T }^>/@/gr*J^.@/ crz*M\\\\!ݓ8i&f"idZS2+TCtvmģx1W+ NjjO&"n$n!tXNC5 YWmffsg?ٴ"'ȅ F0pM<{Hd?GLp$u/ 3~I_Rq$\* J¡p$* J‘p$) GJ‘p$) GJ‘p$Hا>4;Ҍp$' Iqp$' Iqp$' Iqp$'I$Zqu޻ \:<+OOq|Vd$t>= }[;gvә8sTgqlLwаYwfʟp8{d^CX.։:X'rub$։:ON$։:X'DbHu"N$։:X'DbHu"N$-ŇHIbHu"N$։:X'DbHu"N$։:X7Zu1u1u  ֘ZؘZؘZؘU ̮-gvO3Gɹ\,LrFn%EW3L`Ef&2,X' Z85N`X85N`mX9uN`X9uN`X9;kÝpg="w6;{;{;{;Kpgm"w&rgm!8$@CqH  !8$@CB8I f$3 3!"7g>aqL̫8/gQ3[& }[2BHOk9kf_TꦊuAzR/.:Y @<:{*hr7ÇQDt^k~҇]^C3}&s >0Is LF3}&656HՓn'0tvGM՛C{'<**Lz t>@ӟ:dxd2U)S]$Ʌdr!X@ނí:m=cȇ1Ø uxڎAScac}_ ѻd!|H&ɇd!|H&ɇd!|H&ɇd!Ya>.1o_ݯDk5~Mt ~6m@ۀot ~Aޓ̑dZ1?#EN4zVBO3&ID)rtȹf߳'链O~6/- *"]ȻN49cHG\Cnw;N{'I錄w;N{'I錄w;N{'I錄w;N{'Ie =)^G|^ x adX,=a擄 LeEw7qEN'Iw;NgF~=NJ8888888888888888888888888+erK;g~ݰ> p1Hp$!2dA6@.X4<8 P%)5ңBA7A7Eo)bSM"7Eop+|UOhVxX+< $RӻaxGxX+< kZawP'o"R¿QIunkƵ јnk7.WWJOW[UU^x&_Ņ.~L}#>Ÿ?aB굟g"3FŴ<'4~^U+7ќgg{[dF˿ǪUE~Lq;ןy&CzϮY(qTa&ȐVYwH+E+eW#uRXi9V<9XD[9*?EaKu'D 2W|arӸnmCwpB?pfӆi_/NDD%GoK޷D̛@\6Džrml\[]w"6 waq#Q妸8>O|=Lx f09,y0^yߕp/ A0C8dh[EXe)K*8ꊔ<3M= zq?=0|o !|=c2 ÈLugL#y< Rzt9`\Ӧ u6Dy{|=0 scu8`zGޓMKjz_\iJ2jZ.L[M#yδBcZ)MO!*yeL3K3e_rid+_F3ma+l`{f?/+`=~8#pAa*4qVy8 dLvgə8|\z 5,[q_DD1(y_yd|.W>+_6w3>?'2>?'2ɾLL9׸J1~*Ӎq\+_F EXRxRa+)P2̬!3kl!k}4F0FA 10q0&Da <0GaLǤ8<O O,xfb+&ɺb+&ɺb+&ɺb+&ɺb+&ɺb+&:Y"\d>2X1|S >'+u%`| alo[]v ;7a}A8ciImEOj9m8.E:OYYLSɴY"jߐ]dSW+ȦTM6ɎZayS׊kEԵ"ZuVD]+QjkEԵ"ZuVD]+Q׊k5Ե"ZuVC]+"[~1.b#SldLt!gl|%__Wm:w- _qG7w3w^̝+6|ņWȏ_){=L7D$_OYtĆ~bON' $?q'6$?Ol$dl$z?O's~bOl ?'6Ć~bOlI5~RT'I5~RT'I5~O?q'ā8~O?q'ā8~O?q'ā8~O~bOl ?'6Ć~bOl ?'6Ć~bOl ?'6Ć7~O?q'nč7~O?q'nč7~bO?'VĊX+~bO?'VĊX+~bO?)OJR?)OJR?)OJR?)OJR?)OJR?)OJR?OC nGjɰb|ZW/ƅJTU2ptfq5q3CwIq|\#5ҙ,Go7f-l8H6p 8H> v 5w 8H>ΐ~wHqt!wHqt!wH| o!-d̷2B[| o!-d̷2B[| o!-d̷2B[| o!md̷62F|o#md~9_N旓d~9_N旓d~9_N旓d~9_N旓d~9_N旓d~9_N旓d~ iMO/{GѿǢ+w춏S+}JF^/_<Qwu*\tg*.c#o%!TJURE*TQ*UTz hj4TnBC5BC51 hF^hF^h&jBFC5Pj4T hFC5Pj4T hFC5؉ib+DDqf鈿Vyu"A"|Oi",Y̋YD~FW#*kn|BCD Q?Y4 fx#-D B"o![~B-D B-D /"[-^,߳{|ςY= g,3{f|ό=3g3{f|ό=3g3{f|ό=3g3{;6 K FR;+CҵpD &%DaQyPyPyPyPyPyPyPyPyP_KV|Ɋ/Y%+dŗ_KV|Ɋ/Y%+dŗ_KV|Ɋ/Y%+dŗO:#>An[r+PV\'RC׏z2P{Q;Q;QW`/ @HԋJԉJԉ:Ӊd{7ޱpnÍwx^DiU(͉Ҝ(͉Ҝ(͉Ҝ(͉Ҝ(͉Ҝ(͍(͍(͍(͍(͍(͍(͍(͍(͍(͍(͍(͍(͍(UJV*QZ%JDi(ѝ{އTX>:̏(͏Q/4/J4J4J4J4J4J4J4J4J4J4J4/J4/J4/J4/J4/J4/J4/J4/J4/J4/J4/J4E1\*Vnk9ݠxmF]WUQuΤ+˙eMk֪^m?d+ň +R1}R(O'D B?!O'D B?!O'D B?!< ^(x(>83wa䠓ܻ@=:3?y"\䘋s].RR:|Gu8Yl}ArE9?9"\^ \䑋rC.rE!9"\䐋r);Ga#ahcaLI0< Sxtx m?O0fS0 kߏ6b k7NkKDO򡢳lXe(mI҆*Ѐ ????????????г;.GYx(U[=gª r'Imd;qF?nBרO2.F<*XZF5G^acPR.DQi\e?}fp,cp[(1=RzѢ9W="ꦡ4Tנ4PVJCYi(+ e4PV*CYe( e2UPV*CYe( e2UPV*CYe( e2UPV*CYe(eU U*PVʪ@Y(Zb_Kk}-%ľZb_Kk}-%ľZb_Kk}-%ľkLKEܿHkd _M!~!_~!_~!_%~!_~!_gٸ~6gٸ~6gٸ~6gٸ~6gٸ~6gٸ~6T(0,삷)KÿK0~CT*3󟉼uY6bduɋs]v@Px~ܗ\I\W_]SV\W:ĕp/ F~#swوgn=ޯ}ރ_@T@T@T@T?]xE /?1g_/gV'"?^=X00 "?t.T R\*Kp.T R\*Kp.T R\*Kp;b]츋w.vŎq;b]츋w.vŎq;b]츋wq.Ł8p]wq.Ł8p]wq.Ł8p]hx_s4JBi0xl nX¼(̋(ˋro??F:>9jd~5_r(Njr(Njr(Njr(Njr(Njr(Njr(Njr(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<( T*SrPNʩB9U(̯&=F~X`ݫ|fTY-| badj"*+*+*+*+*+*+*+*++++++++++++++QaFuOU::: USэjOd58V .tTêTVՑLBeT~FTNUSU>N :vb~VϊY1?+gb~VϊY1?+gb~VϊY1?+gԠSvjN کA;5h}xV-ڋUêbUGXhOVvV.$+J$+J$+JҤ. p1Hp҉^(ىNM$+5NT?KR' Oy!;ѱ;ѱ;ѱ;ѱ;ѱ;ѱ;ѱ;ѱ퉶3N vn{apa8Gq8頢hh䝞~ 8g~'ż(y\R]1UUijTXXipw4bKQf 3OaדudF 8}8 ͞f?0Ȓqr#3 +b $3b; 4u\+u mav2WQV2\(?3j݈Qa;s<(uhհAFh~r1+Qϕӌ HN} rj#)Э#cel3% V-VЅhqbXsrx+Fdt/#2b5#:#U0R)#E3Vc3mWCk,"FaETVIdEv"vV䘸xH-fla>*#mr8 5d"k +h\JX\Ü AD +&繲W67 |8x`OYg"+]E1 MG^vbaa[Y8wopp2#菬G YV3:Ȍh53ɌFk˘xf6QYc(60H(O`1f:k=*=Y}άҘxffF!f3 'sȽcJq%@=,'4pc`3^Dn 7L~ќu@K>-L|ws;;x!rsùb (*wFAT,HmiB#1YJ桒]d>*T/dgd>*/R|T2_8F B;X|\߮r}>}O8!.}aקJ2wɭ}9RN\3|kSCTE7UGUP}TEUGEQ}TD_"g}AQ|T3TPڹv!T/v>>΢#T=Bz>rC3zUOիACPA9T z%YTTTkZƧV|Y2z^*ч>*W}TF2ggȔ!3e)zFjʃЬӅP%=TIz@ Q%CTU2DQ!Ch܋CʨkLԿ1&FB!FaKmFA1|l-! T##3 ق3Z{*_Eo Y5R9Qoj/ #+PB.>dwB(JWVTU*OOQ%xQ%xQA,$JVN\e'e'NDjh""TDEF)Bc%%bVB#hF~kJkƊ$5_3!W""XYì:Vd+Y̊,fEJXVYQYUQY|%Jp׋ѧ]ws׻nw}>]KkVѤ&54IPѤ |/:~vN=x!p?qt{,S9ܕYѨWqMABTjbCl6 g(p2b0d>w;ud1wWsw]1wbNArq3/fO0̼2choS57zk 8xA1Btu6yDqa䎪*9r'%I wr"=38G,ڐ_cі;)N*D4NJ;p'PjKb}^g,k < Da($ ˍ%z; 19VRseAw#&~7A7A;a!&Uq)%.vǝq'eI1)N.KEf1[=, '#A.3zETF%YDk b{¿wU3gDr\e_p'%~T,(r1B%P,T UdUdUdUdUBPE,T UBD?B/-Nfn%h2>H4U]c7D4RK#;§#?G>QFTDOTh-%繳YH'z=>J$I;svֺh'DhZYK4f5Kq)gW#=l"j{E^-Z|s `5=韌:ID A]SO}_4ͨ#K7}yfQ7^f|l{=Bf[³<[_*]滘q%3y oёLAȎa9~VʬY뻛s?%`+2YH#1K.e F.]R4e }b!#:.('y xc#c<Ę'c͘>r+5U}=3m^a՛7FKsj$ G4(QhKpmȮWk|4>߂jɳxƕp3]-^\̣'{^{s$|<7.ro'9%ߜXASfF'Kn[V.KnU[Uy ( 48`p \q#$&%*zK5!p/ A0PHap O[0 R`40&$/W>&qo'٥"KZÿyg BAy, qwJyY,!Dߩhd:֒m.\b[!]p'"܅w"}f3da\kXRޅ%5=Q}+QOQp(3&QCz{Ԩ<~D5ǏqΥR嶨5>/`| +_C䯔D*gDӣ?EWl%F'"E}L>fgʌ,Wj+ffl7tlFM? NECѭcw=p@cOpLn+Vl) jOqqO6qr|[|mX`1 K`tmKp!83Ěu|ҿfǿd!9%K֢Aɺ{\x-nn ]t^@_w25ˍeq8TO`|*?Zuoenkqq#?T%Nz\U1A<4Jh W@3h-KID_?:*P#(A)Jn3EC BACh14K\gˊ=y /6TQ6QP\E7@V7T\"*""M7BҲZ(J)$Cdf2ӴHh$I izϽx}43d/u ^5xk]/u ^5xkRo5xG\/u ^7%:.u7Խڥ+.u׹]RwKݫ]]]]j|ns{P}b6T bCP#6TQZlņj;?φj\Ns %` UJ6TɆ*P%dCl UJ/PKlAH j̆P3jޞP[l6f׀m{l]~lC=0ϵa u PG/RE[6[ǖz̖j.tST=bOJaM]Ŧ?0מjr kOS%{W[%=UJŧ{vny\Os͞gOoOoOaOaO?SwSwS|njj쪖Z쪖gWU-vU]bW=`WU-vȿZŮjZŮU#jZŮjZŮjZŮjZŮjZŮjZŮjZŮjZ^G9ZgWUGy=9zs9sͼ;Y{ԋњh]8ƙikcӿfp1l͙-vk­X+%v>IW٭ѻ>n8ⴰkN 3-o,|g\pӋM'Dk0P8;\Ҹ_EQqD;g\|Eӏ1~DS|[hN\mҰM ]wV|E+G_Wl__j-ժ=;c؇‚< _-ugF kʘu Foi7}R}τ>>> ='D]aGpdݪ>,fa.aaO~v#»ÝAx/kCc/SX(P}]C*&[^zcPxc!SwB;-՝;/}?u.cq>W ;$>O3,>y/$"Np*4|U}WӣCWyu1.UWb^]p9w9\ }|<}QG4>?ľ@ NjX}l>yci}]͞|}Η}Iўڐ>]Րs 7|o=; чp/T6l:c_Qg5}.jk:JSc6}ñm<::#FW7.⍗Z z܀ev7afboTv/Kpom}Ђ !XGN[ц*:$юt=X^!46X ؈MxO1pgf 1y#NG0F21-`+\ƟӍSNa;sᾸg<:cfl|@|žx5^׆;^x=:orތY>/;&CGXO5} 'p<>O >|' 8 'c.S%/+*N#M_3-o,5s0< p!"|!~'ViӥӐ'kŸvj_Ne7]k=6SMׇBh1ڱn 5-n6gӭ gd{6ݎ;R܉ w܋߇֦?A,CXQ a]fZE{E_?~ڣ ݱ>v69B7~GG_X=}Bh+ӜN3yfmN eę8 8 Wg ?/pmhmXqsh~\ WDGs?%s]\\\\\\\\\\t h.Wuk00#fv)-ŷ|.=7 66C_mۗg7}\.Sl+r ͸q~qVZц 7aox+vwxލ^Cp(8kA|>-Gࣞ>cFµ 5Ep&wp60x..q1b#?%m!QQG;EpQG;Eu9Q\Gsoak㯝.MXŸd?7-n;$2222222䨲ʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʃ*:;;;;;;7Յzl4q4a^c/Ŏ8+팢Q3vF(E;hg팢Q3vF(E;hg팢Q3vF(E;hgC)ha148q|ӄ9x^F쀗q.sl:hMօQ2d- k1M;]hsrԪuͥ.f .+e& Ϸ%rDݻ׵O*|PR;jzsh75YMoVӛf5YMoVӛvs;ֽv;pցz/>:n?:>|>O;×~+:b#.:#?꘏swgq][gu֝{ysKϸ{YqtAC/nӗ%|m`o{\_ګ>`N/zޫ?wW_^ƫO7Wop5]KjkVk\Nr݊V_~M7.qUOܸ'o:ξ77-)u݊oںaю^hE,zߢ-ʢ޴tՋnZt,Zh̢E-~=mZ_Y|_+?#9%rA7O|| nN7ܼ歷ݲvˡs vo-(n5~^փo=Koֻn]q[>wێpѷ}n߶nG9sݿ[;sݵ][嗢2-Ѻ/tFoN {pt:.gxޡߧD/sCw3m9 =8y8Bhx`}_ }/]|\_⻽뺐6X>d{ӭpLb=d>6ԝ5L7g١ױ°N} C'!dw:TwCX% ZP$L.tyݡ7 u~=+B#v1ǼU;V;]YI=G2Ѽʺ @>H(׍z?o,+FWԍd݄eIW%l۪>mqu & k!UԿ(t?z?y |sfn tOP~#AoIlvG͒&}lޟ]C4gV͊BvlOfy):faҳ_g675:xv[tm ~yGPE:*j7;(:! uz62{K?x k7cR땵^yZoZ׍p?~?A,CXQ .?pC?Op q)2 pW\ 7܊vw` ~7]XqcA|A|AˣYZCZ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z !߄G<ɸd|3*>"J(ñ4XN+U<2?36ldzs6ՅRS=ߚf s";%x)vAk7>RJ_q:o | g8+䚾q\q.w=\b?ďcM;"op~_'\kp-ׁqnį8dn-,w.,ݸ⾰hxVa#xhCaVc bhG~) !46666666&Oiz::-s />Ym6Z֐v=^WaO{yO4'OX ?a'OZ ?a'Yw}bG{uZiZkZkZewX=Rc52H^k}~|-:-n+'RK)ӏkklt^Lin*: !BBH<.CR!Q)BXR aBxL!$BR خBZ蚹7ÿLܛ)&D oouP]jKMt=zfԦGucI]<;O]jr2|mFBmta 6h&#Uae`5)(yI)@R3JD9Qzv(O%RTND|sTQ%$J۽X߅UuK;}cxVGۢ#ϑuz?{_ϩP>PYevoWM~(<RBjWH iBZSRRJ+NԣV+NS*8:_{9կRQkUZթVUQ[8] TGz^ȨRS]jkqqWܸ [\ꙹڿSvK؟KvRc 5֥ƺfՇL̊;2YJY =Pi PiYׅR0ZZK5jrRkj-j-ֺfy^[:mBvbK*OfaWnP> GC4(XDxxħi|p>1_)NWU87q3mly8|\ }|<}J>.FRe).XƕiJiJiJijL7Gommx*zUpZ6E/k(E5Lz^%ڵakgQNQMؔMؔMؔMؔMؗؔMؔMؔMؔMؔMؔMؔMؔMؔMؔMؔ-؂?b *6bS*6bS/T|_Wqt,4^k+\qn4B܄EXq;j9j9j9j9j9j9jj9j9j9j9j9j9jM-'rB-'rB-'rB-'rB-'rB-'rB-'rB-'rB-'rB-'rZNZNZNZNZNZNZNZNZ~ZNZNZNZNZNZNaP P !oě<ތ7**烔ßG*{u9|!WIͽC;/K鄚N鄚N鄚N鄚N鄚N鄚NDb?\fj:j:j:j:j:j:j:j:twߍQx{S]wNuݩ;uTםS]wNuݫ{uU׽7\}?{c% uݫ{uU׽W]^uݫ{uU׽W]^uݫ{uU׽W]^uݫ{uU]K]w.uݥuR]K]w.uݥuR]K]w.uݥ;uuݡ;uQ=G]u.!"PS۵64Scj{Lm1=XNkg]2솗M-MPqއ >#aXVU~_WU~_WU~_WU~_WU~_WU~_WU~_ת~_ת~Vݪ[wnU߭U}Vݪ[wnU߭U}Vݪ[wnU߭U}Vݪժ['U}Vݪ[wnU߭U}Vݪ[wnU߭U}TSwNUߩ;U}TSwNUߩ;U}TMկQkTUFկQkTUFկQkTUFկQkTUFկQkTUFկQkTUFէT~GUQ'T}Wӓ!ݴ3M>7ߥT~GK^'w3?S?S???Kw).ߥ*?Y1a|BߜlP)߮B'^6o|OzvToKDѾQC}ގwxލ^<_2:sqJtdtZk8=d3-o{YP=N q.E>b~4R>*]s"Gkn |'WG]rS]s?3 ~)W65s?3s`F+O͔RgO+ ʿOgä*O*O+O+iViTY߫+v_PWB~iIş~oSn{~rƗfnok?J?))WJT*OϨqߩs*?*Sg~Jw+u ?{~S= v[dR+u3GT}VէU}JgU>s>ꓪ>׫UiUS9US'oMNʴViU߭׫\߯귨S)U^կUW USkT}RկUT}N~UUU3S5׫u>s>S8S9U^կS)UVկݳOvUߥsWgTiU߭T}W9UV9U߫׫}m3-T}R'U}r竾3nR}Zѧ}JkVg}Vg}Fg}Vg}Rg}Fg}Ig}Jѧ}Ng}Fgg>賊>}A'}Jѧ}Iї}ru{kZg}vפO*ONJEgQk:5ߣUQI5Tj>{|r|Lg|Fg5?߼L5woc^&ۙPoVoR.jj~'5oѧ-J~ߢ(-J~ߢ(-J~oTJA7(%ߠo|oP JA7(%ߠ|O*O*O*O*O*O*O*O*O*O*O*O*O*ߠ)O*O*O*O*O*O*O*O*O*_J>J>J>J>J>J>J>J>߭J>J>J>J>J>J~T'|R'|R'WI%TI%z%j%˔|P{)Õ{|Nߩk %%SwPoM!J>J>J>J>J>J>J>J>J>J>J>J>J>J>J~/%TI%TI%TI%TI%TI%TI%TI%TI%TI%TI%TI%TJ>J>*>*>*>*>*~\gU;Tz^ůWUz^ůWUz^ůW9S9S9SRϩϩϩϩϩϩϩϩϩϩϩϩϩϩϩϩOOkǕ*>*>*>*>*>*>*>*>S*>*WW*_~߯U|IŗT|IŗT|YŗU|YŗU|YŗU|YŗU|YŗU|YŗU|YŗU|Yŏq?UWezݡ;wPʻCyw(ݡ;wPʻCyw(ݡ;wPʻCyw(ݡ;wQ=ʻGy(ݣ{wN+N+N+N+N+N+N+N+N+N+N+N+N+ݣ3;3;3;3Mn7+(((*.ݥwR]ʻKyw).ݥwR]ʻKyw).ݥwR]ʻKywܞAyw==;{wN+N+N+S9Ri=mITITIViViV`}~ޫwRq'w9Yq7+f}_ %9W=BގwV%ݪ[tnUҭJEI(%ݦmF$KѮ***UEV]UTtUE>ݧo]9:%~78ڭ="*۪r[m}PnUda'oЬjW֙GmUvLVE@+ڪ*VE[UUER+VZ{D[>֝*[Ue*j%CA>LnP ,兩E/o=aI?BUu1.ꢪ.ʢ,ʢ,ZEWFQATQUUЯj:BPUUuPUU˿jZ-jZU٢o-f٢o-f٢o-,f٢o-f٢o-f٢o-f٢o-f٢o-5}El7[k,f٢o-f٢o-5}El7[k,f""٢?΢?΢?j2?hp[\7F}2s\fy.q&,b܌[p+no[>Ϫ*>Ϫ*ʾV́VJ+fҊYiŬbVZ1+VJ+fҊYiŬbVZ1+VJ+fҊYiŬbVZ1+VJ+fbVLڊI[1i+&mŤS[U ˢjYT-eQ,EղZUˢjYT-eQ,EղZզªE}-~"-~"-~"-~"-~"-~&MOG1neVneVn [y#2rKt4Wٷʦ C~ ?f5 23B_pxCɞN;鹱B.:y#|GE;E;w((:Qt|GE;w((:Qt|GGtĬ:bye#垎:bT:rO׻&\{=5~ y<:v|kՠ.zKlq FFѾ,̎5E{;fћC{Ѿ^zrPD~;8 _N  ᆺGԝ/$z[]s(~;B[(5aXI| gY|'8_I8sE/T|Eon~YQSch&Y9XnW+3\:z{56+\7af.ڥq)2܍{]NWUkPZVVhxi7kΗU+|WWn.]Z;w;QUX᫰Wa _ +|V**,,,,,,,,,G+vB;t,AwAw~ج;hڿo;hںvn8h#ڈm_W{lѓBkv֠oW-U vBj]ЮZhW-R mB[j-ЖZhK-R mB[j-ЖZhK-R 흅YY6MMg4}6MMg4}6M=g3}L=g3}L=g3}L=g3}L=g1}vLg06̠ 3h .Ko.vK2h -vˠ2h -vˠ2h +ʠϠ2h +ʠ2h +ʠ2h :J *ʄ2aL*ʄ2a*Jo)vJ[ۮlspT{#^b_ Š}1h_ Š}1hS 6!~'͸q~Zj; rM4'O'j},ǎ m)_L+!K ^R8UcUrqwKڧ^r0;Dž'g?ǜ9۝3v>'hK0c>:fkj`g[ccqom,?179]kwǓ1t9Gcx}%l+\9y3K1vyן~ӏ}/!ǐ5<}b\3o{y{̹.w˝~/Lk{@1v!&;5ڡa0lx*zITǃW9tXĎ򞏏Xkc_NG^32,zəDI/KwG㱧;%S###>w#hZp-8Z8!8w!| ˨]:Nu~G]#0L q.Ŀ>E%>.C?Op ea[l lnEW{v{qӏXNN [[7'kݷdRA(lU? y֪=ֶ_9uG*WuosGgh Pqqqq/s,) hkpmH) elm RA6HHcُ,6;؈Mē،!0c Xh=k%1 lEOOxS؆x!3f,0c v3 8>ΰ3 8-0la [[ކq&N880q18+?I|p>xz#x,EP A"(X`,EP A"(X`,EP A"(X`,EP l߁%]XqtЂ !XG(Zц*:$юt z)A?a17qO`Ob30#K| EP8&0 mf[O36ldz3B.lS>۔6MlS>۔6MlS>ۚvgv./nx:l V\+Xq+0g0>xvaܲ+6r g9Ì<ÌlfaF[㽡v&ަ[|?{ގaXxXxXx'Yx'Yx'Yx'Yx'Yx'Yx'Yx'Yx2=q|>Nq"pr8e.p,\f2 Ye.p,\f2 YxXx,\fQ.  $ Op,\e* WYUp,\d#^ogxLg4qVg5q&K1f.2s:uߨݢ,]f鱙6.t,]eLo|Atong2Kgx'Yz'Yz'Yz'Yz'Yՙ6.Ϻ*LYwedI.3$SO2$SO2$S4r G Q81(q8ħi|p|]NpN\|Kuk^8Au,- aBb!lyAoY,m6 a66o)[ Bo)[ B;s)2܍{p/+߇{-xb9Va#xhCaVc bhk1jAZĨ1jA-Q ,1 b̂ F5=h EP8&Uƒ=,١-zme)70l[LWr-r-7g ,e?[e~l9Ζl l-l9ΖGG-~AW,e/Oe-KlYb[زĖ%,e-KlYb[زĖ%,e-KlYb[زĖ%,e-KlYb[زĖ%gq]Yf2[ٲ̖ |-{_Mf%e#8voETPDGT&AEjQg**ZPj@@$dhڦj7wE]ݺs\kiʻ<]@t-]tKE -t R 2H -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2L -t02L -t02L -t02ú2L -t02L -t02L -tZe-ݲnYK[-k閵tZn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nen[en[en[en[en[enf2XW-ytܐ_*|ϭ O7T_3ɸp258 'd\u'd6ǿ[k8 ^T܋{Qq/*EŽ^]5܋kQq-*EõעZT\kq5?ŇkZ|ŇkZ|ŇkZ|ŇkZ|ŇkZ|ŇkZ|ŇkZ|ŇkZ| עZ4\ µp-.\O.\ µp-.\ µp-.\ µp-.\ µp-.\ µp-.\ µp-*EŵעZT\kQq-*EŵעZT\kQq-*EŵTZq-ոj\K5R_5\kp-Eõh עZ4\kp-Xõh עZ4\kp-EõhZ4\kp-Eõh עZ4\kp-Eõh?ŏkZ?ŏkZ?ŏkZ?ŅkqZ\ŅkqZ\ŅkqZ\ŅkqZ\ŅkqZ\ŅkqZ\ŅkqZ\ŏkZ?ŏkZ?ŏkZ]<=<Bq-7|\K RkZjp-5\K RkZjp-5\K RkӻײRk)µZp-E"\KJ?ą+qJ\ą+Jjp%5} O4zdQ-T])aR5_xo #kTdz̷+O;Odm]y879ܛ,*qgg-##eglӥߐ)S3#&#ne`Z?.=2j7xN2 ?1 ?1?1:>xna5|_&p2 0Y̽ D{ƙAtogixB?mF~oxH$aL7Mp3m0n;΀0 fÓ{%N>Xa>+`!<B{V;,NS'bd1u:YL,VeW5| `#|'xZցuixZցuixZցu<O:n dO:<O:<O:<ON<:N/Ë>/Ë>/ËIn/jn/Ƌn/ƋN/ċ:N*ċ:N/9N/;N/ċ:N/ċ:N/ꤏ:n/zn/Ƌn/ƋVExjh5^/ZƋVSx=?^Ϗx=?^Ϗx=?x=?^Ϗx=?^Ϗx=MJ] sa7'͉s7?͏B]TzJ f>8 wIp*N' OΗt@].8nnz5}H͝Tv7Me/S˩Ts7ռj^xJW%T]TmTmTSl1D `;|PTr*^]%TyM5wSKN/yRKe \SUJ5W*\TsjRUJ5W*\TsjRUJ5W*\TsjRUJ5Wul/Klm2! vNBAߡ?w_"%p) 0Fep9\`4\ Ws\ c:IWYyp7 YO4I$tF:I#NR@')I $t:INR@')I $t:INR@')I $t:INR@')I $t:IM'qITb7M%vSTb7M%vSTb7ϿJL%vSTb7M%vTb7M%vSݱn*Jn*Jn*Jn*q9J\N%.S˩Tr*q9J\N%.S˩Tr*c9XNe,2S˩TYRUJUV*UY*TeRUJUV*UY*TeRUJUV*UY***PK%Tr U\@}M&!@RUJUVʪ(X'՘)|V<SF{^{ϐA__& xG6+=6{&qM>H ݉Q0П c`*У@"ФaM6hSMqL4*Ш@kB4*Ш@ nfUpu:^X+v,1X$gggg'9S!p:zE^QGW+%V/=T 5O֥߭K#K#K)6]4ޱUƚ%n/oMf\auqf\auÌgeͻo.7~?'=ka+5vH.Aw=l}/05fc]@__O3ZZZZc}7{PRRRR}>} | }!]2_oaldzWGQ/l-vȄ,;adC8`7\ `?A>("8pJ08ke2zNKޥSҩwԻt]:.]>AKޥSҩwԻt]:.zNKޥSm 8Fh![3)Kv-5[;$@ ݠd\ö/km2GfBL^S/өtѣSsL7=ّꝕNj\{\3_ ^.\l%r qgd0M;L7ݦi23RjRK5 mUׅf6C20G.'f `Hs.'qx箰0߇mmgm~FQm~FQm~FQm~FQm~FQm~FQm~FQm~FQ~6Jߌ75F}SojM75F +wǾۃ+Qv.s8pO=RFGFQzd^EuQz]^EuQz]^EuQz]^EuQz]^EuNi:^4zFB_h ~/4FB_h ~/4FB_h ~/4FB_h ~/4FB_h ~/4F]PoM/gKzjv{M.SQ!f㌞'SETQ{f&`UG 2m z䊮8cL_䢟\'rBNcJb wzt#7[f֋vխknxc{7u;ѿQcu{cijd3ybu["a|z1m/#x^tg濈WDwN{a#6)ۅϞ[G\ _B;U"%p) ѕN\d( WU0p \ `<$BL0 0pL&n[6Ý пģ?4Jj4P5"TӕDf{L]7v˰&Z/@lB4P4FuШA:hTQ4w;륋d.2hT5A2hTʠWpP&{2G ~_`l-vȄ,;adC8`7\ p )J)PPŘՂ} Qhfh Z a!J tnz~*Q%5FԨURJjTIv*48Yp6ƼGQx $<OC ,gYX ^%x^Wx3^#@k5Pv T]ծj@k5P쭬{zC ״7CL\G5IW,S=|;}US9jPGޫF%ŞA .fLa,Y.Y.Y.(OZQ*8J&U,ޔS65;٨_?,JxëYTɨ0dSpC; F|TTBJʈ~ P~kzD{Z;jwW9bxH.L\X1WmQ[qV ܳl=[qϿkZqVkZqVܭwkZqVܭwkZqVܭwkKfWd>\jŵZqV\jŵZqV\jŵZqV\j}$N}!l х!Fľm@dzMYSwНq>^uu<Ӟ\'DmGw{g{{OdQ}rᬺ3l_! GRbWbW+_! WB+_! WB+N񿈑+_! WB+_! WBO!vh98KŵBbppاbpA\guqA\guqA\guqA\guqA\guqA\guqA\guqA\ggup!E_-$Sz0n1[ F 8FٌVjZmBMh 6&ڄVj}N1dhNZp{tmnǠQcPž cd2={ghOg]q<261 3缓ޑUw 05}I չݿ0/+ȶ,jOG1/8#90WKeV~^gqv~qtݍMScWl<~Mnyvu9}Ʊ;cgǎw%ߺ1OګMGkb1su|xuq4ۇ]zq@lx=W0;Fb\U6K,iׅuq] R>:N3[~TFWRs{ԎiWbgtYb{[{$J#F*Kަ[ڽ=93UT4Ž!{,|)4h_2KQ{~e7gVV1+==h46񼺾 -ƞcϻ=t<lȂ2;~ Ɣۑ/=5f4"U#3&3&sq ͋:и9gYų,i*ג{y62Cqu{#420Q9XthP~#6{=Y2R/dzC+ϋ2A2>*bg^,9r-&G>?* hQ$?(.Q9yB*\&Q#oK{WN` LGeu d ߯p bbb';+;+bJT=2_|YEd|DXVf$KB\S/*oU#wp /Ug|W BvY>K,/lxUn#ۈ6"mDtFDk6"n#ۈ6"n#ۈh-FDmDnS[kSIb ۵>t[Kzldm1'5x&['*u0Tnip#7-p+v0flw\wK}p?,,WuXo@p xޅ`%@Y|kX{| )|N::| _ | `#G ~_` a lm2! vNِ { ʣ"K8/t2 E;QzrcTUCT|_3Pu.9ރ\TU/!ף({ ~:EݯT㻞SI+,Vezp%(4.AKP.AKP.AKPh MCi(4 4BPh MCi(4 4BPh MCi(4 4BPh MC(4tBQh: MG^< "x OS4x<x^eAdd@Add@Add@Add@Adj2`5 XM&Vɀdj2`5 XM&Vɀdj2`5 H%RɀT2 H%RɀT2 H%RɀT2 H%RɀT2 H%RɀT2 H%RɀT2 ~H[ 1gv SPy ?QޘнQ41+1+1+1+1+1+1+1+1+1+1+oź0r1H.Fb^GWa.Dޅȷ$ɧy"BQ ),'5x&}݇}G}G}G}G}G}G}G}G}G}G}G}G}G}G}G}G}G}gz澞gz澞gz澞S;adC8`7\,w'9̵u s?Ϯ3"ߝ92{osQmy*SB1ˋ)pb(f 3f0 TB*c!`bY}@?b1<Y 0f1,ŀMWdY 3af1,0fbY 3af1,0fbY 3af1,0fbY 99ႎɨ&L R3uUГ^/2>+Mp'<r_}Nf{ ~0DV`{&f{+cy!p :M't" DtDt{Dt8NFa"gw:LDp0:9^husMWdW+$ӟ$\k9D$JRNFX4fD4f]h6&D4&ZBr% u2HNCd":&ZZ}vn"ڝvO+ڝv|g;-Md&\~s ǞA57yvE]_oW۳g㞗qq/}Q~:z|:EN>ɐ"AhjsdzeJޱ2 eWwE﷡+zwFh>wE3|"ODh~OBsr4砤}zf>'}2z9TŨ}P*o@˨PmTcdBqEj.T]Pd+lEQC(؂[Q` lAm(6@/ lF(،Q[Q`iЉ*M4t6.ݖTRd͒,;ulpHe7vͨ%D %؂ [Pa *lA~ GPzQ`%*,Mm Z9_ [Qa3kEy-NCuP]3kAm-(oFQ(JC=P,rjiE-VҊZZPJ JiE)(flD!QF^;: N(U֡ h4fҌZZP4  VqDHMbhcT ulc泙叨'k-?~$Kd9ȶJ핫-ubQh{q1 .?׋q H'*of"Ht#7lr Þ'H@nFh0^#fc#chgхamFۇbmhvh1ڟiOFړd}e+i7F##H0ZF W 7uٌ[c=e^#02Y_fuN#S)6V9rG=(b)ɔ$i:a2M1MEii7M7)9D!"մؔL-3-L/^M^'jL*GG3Wg5's_י' SS7o0!.50̳sp\|1Ҽ1yƜlNO$b9Kbyyќj~Kd~qCyyxʜe)]\ļ\%^01*s#Fdn_[-CWDfm%͒&,-EcZQaI|!j,_YQkEx!"NgJ7iy0.RIg{2?o e)[=7~3>wg=~pN›'(NI!);ioRARIRyR MyCִ [~c8vͺM^>{==uw z/ۂ7d-yAU 𢅗/sσ7z?S?FCOV{L+#p*;uLhF9p;ݨDuU;IE9˓ 8Jn2\ 9XwT >ᵻ;ٵ8팺 GznnnnGtwFhOm6b=}>͑r5@Tc;yzg t;=t?/@ t|XG:Ac4]σn!?OD'"#yD<|"!"!zG=t::\=֡G8,zo%ENh3CD\"z7kѡd"hYYY4(!&ɢXiKJ}BM&VEȢյ02g sgD L&s's^f/9ɜ5#HthE3.F.]60RXV'@y,WnRpe)|,E;KR,E;pc)dz3Fp\Ŋ+*V_LϜpnYJ])E[ -BTRpo)8BR,-5yz-í-@K8cKAKqi)49MCqiҾE^*zel4:NGt4:CϘyhtmzLAy8Z }7=~Wǥq),=.ye|nUY'B /3]l=3c0KbzAN+D}AwZdwlES_s7뚧>/`{a욢~Pf_ԯk|S!eH_c~nvfKss9zufu55k,k{ ~ )dztgssYׯfΥffVfdXIdȢ>R[z:96ԪԪԪdvjvjfjfjfjfja2^9n;,'ġՉEz_x|仟UXUX#y_E{:K{w?%߽~QEW|9_E|>!*Va>O37 kZE0䬗^KzW/'_g7MzY/9my_mUEjqq}v饧S)qy%䱟<~<`H3zL=}z~E QKz_?'䯗cǫfVYVY*w#9^EWUx9enwUTts\~1bwPdV3jC1 dYl9laX9/4,hΏ1GGs~4 ќCshg(7}@k *VT:LtC>tC>tC>t؈}0Jk˴I$]Хp}"f# M?"Yhޒ>}hҏ&}h҇&d#lDb#^RA/Pޖh -6؆b#ZlDh-6EZF؈}hчh1 -nA[-nA!3G~G~苹N?Z?_aYg ߭(+; [Y<"* &N8o:3Q$T0 tGP$TLASPxT0LAף)` *8tGPA؊F\;q7;Pٸ'pqO:q~8 LB-bǣ [壔I(eJRΌ]J)d*Jَ壒I*?)vRZwT=v;,j+yW:J:%uǙnBM7~*Xskͨ;ꎪ[cwfI(j[p5uF]QlcEדCw] ¦)(lRNfwfݜ9)nw>2wg$I1wW pzNNs#31*2qA:n#c'eh(?24]3tWt.CEYW7ZuQuU8#12ZfU@gUOekg(d:+C_Et*cݱ }"T}Zge5ZFKnFGEt*cݱXEE*"RJHh"SvNQGjd:D'$dL#V >ClH+UH$^%bg^/t:sRwҥd{ wOWǾm'tO*XUvrIVr;6*SQ6pme;Gy7z^8S5dv3].B9>W+{zp6W GlGy~1ށw {ia=J r#WcPl|8:^PtsŏVG+8QN>WL+F=H_ f`* f)4.XwgxcCF⩿_\V_ŋs=T(%3J zqPu)c,GL/\9J!皏ciOKߤI A=t18@ m`8㒒w"X〒G>'!8d A2C>q'!8|O9o8սa1_w)F}a at{5^ދ׏G^wj_EWUD|_ދAɳ7QgE9Z%q[fQre+GQ:P 3f BЈ^ZB!4:ZBCgp{9gs]6p?s8矙3Wr~Ϲùo754 EF~dEO89Un1{f/ua qZ,FFa#bY0f1B'Џz|j||||#{M>GX-fWBP 5@+&"n"`ᓢM:<۬8aXw7Z˳l C_ӄ8[s~Y~<Š*P9ƫz:TFaYQh?7D!{Wk(*(*3T (*(*(*(*ߣh! +Q5s͜{3̹7 yZs^y>yѻGݕO!_%)zL洁L,'˙ۆ?H9&DS@Sqj@#?CC՟)[+MѱGONӨl籽،o?b@9 ܂[P?2伂90œ_ r~AEi ~8 y|23;]D; ='/ŗK:G~m4&[+ ԁcWTqWf(aݞ/W2F%?qܛ=?qO%|(1zц" rw^<71 kУsU^zz:G@ut#3:Gr=^gYoٌ2a[v=ȶ*eN`-{fo^nFbݬFu.͜N٬T]$[,־dYaltIܯ>Smf㧒mXӆXӆXӆ8ԣztRN5;Qk2kdul5D~4MGd|(>apB)TֶUmXVнt+@ ^YG 6k?O3W,[ wQxK\Ʋ>ȃB(<J;I7, s2>_/0_3_3_[A6րQ 1PUC(sj~*@\l{x~Dnd72ō2+N$qИJf2?lk=r3\N~:]gE~H~H~#?,s9E~fW9gYM~搟9!?sbs9}}|X$jd9$',r2"',rr99EN֑d59ENHNfYd59\NN搓9}6"99gE~.'?]rfT3Lj6e2ru\]N.'WjE.'WYjC19C:A'9!sr0"r8v a0^@tYtW4>rbN5筯ۯ  {_ 0A8@W\&W&"D4*DSeT?UO?Z=b٣g|qj :p1f zsFTb,0c_]X3cuT2JSx*O%Q Q#raqjG?nv" 4^%{tE,k[: ҍhU_7zz@A\_B;\P.a0Fep9\J 0kaDH 0&u0Tnip#7-p+v1<C($sUC} 5Fpa\ct :dw%+Yen֋?}c 2>>mq,E[XYl\ 5^مcE1g&>jqm?Y'b\&ΐk!Α^qL7gͷp{LW9 <#t(kҫ xR]V>` |,mS_UQE,8.a?A_gC ۮ sہeŶ7Ţ/~Пq/8_g')p*Oc{<*9$3e8 Ζ+F':|YKe̦2fSD"%p) 0FTHAr `6́`䶓K_v9+x$޶6 [yL8zL Qʵb2N,W\%IP/(oɭJԔOd+e 碫<`Li\f{~8~> =8H_KDڙO$ OBhL8 &$HB!)VE|"QCDo>q>TčVY sY3a|̛yѾhous-ļy=Ǽ7c|̙91g>ǜ3sc|̙91_>|/(_fLFHi#-bENOGxͬ^C^CTC73>7e~LI0)0iXۥv)]j}jdR2e)LYj >P[vZ,w]ԍǬ3->g3=x3Ì0=x3S9efy6,b{,ea{"y,fv!3{'3{33{3{3{3{33{3;v1w012l73{7ìǬ>¬Ǭ`VaVfO<fqNYa{fq&,0=Tf/&+J"C{|!=D߯"C{|!=oF7![EQߜo5B"C{x!=D"Cۈx!=D"C{x!=D"C{x!=D%D| !K"C{x_r\"57#j<=# x(7 x(7VsU*`>0 O̧SA嵤KRE!EO\ A7@Mp3 !0p#a10xs1Ha.<OS4̃g`> ' b,/SoG㻣]Z_bζ۞S/WkLl`iaٓKb|"뿄?#X 2ç|n#ďֵOl*H P b:BԀx 68ԅoa|{~5p `=lTH_`#lͰp pފ~ܐ `7d^B6HU\]#&LQBCq5!8D2|(3>9J}C_#~}į>G_#~}į>G_#~}į }0Fhca p{ާqłZKL; 1TO~6}>a.<OS4̃g`>s# ^d, ;Lke"А2P)DO}/zF5Vb\E2'`s\1|s\1|s\0*ՄU~ZV>zY1?|B"O+o:!N"ۄ4!2ML"ӄ4!2MȦ #D=Bd#D1Bd#D1Bd#D1Bd#D1Bd#D1Bd#D6QKCdؾ^WUx 2 m.C2 m.C沪 >6C|hm >6C|hm >ԓ{p4p94Xt.Awul?ny[@/e 2^z@/e 2^z@/e 2^z@/e 2^z@/e 2^ˀOQr!!(RGy(1(2.)q@J+e XAP !jt.@ t wp0!Lȁ;@][* 1Yd%)҂GFDx5B5Y~oƿk KmQ(RB  ?(jY~j,^\ *)j$Dg]fэǺ-d[y>*RPE H(ω|Q6d,5M5_[%zPǓ_gF WWW.5 M^w+y@fFq^Q3eʞ,ۗq:(s%_>XD}Ȝ|Yj.8)rWY`>#K,BfZLN3-\bv(uLi`Lӿ?dO]q~Yb=*3m}+~ 0nAp نaQ0Xamp;Q5~C 3f"gQc| ++;| R5 dZ*O'Eu\!3|uԂڐm%6 3ߨ0 > (L&Ia~Dɭwe})|SJP w֚i(.7uL=hi/4^44Mk|֫E VroBCs}9>Fsmу 7k:B?7 n00#`$Z'0xr.q ?e4Qz:@hxQ5j~_ר5j~_ר5j~ }WuԨ5j{^ר5j{ a16BChcm !1.BCb] !t1d_`#lͰ A7d.B ha- t0]?B8E׼p J A(04./о@FQkFQkFQkFQkF0F#c} a0z@a= 0Z@ ha- 0Z@ ha- 0: Rk1ԘAj 5f3H Rc1Ԙl!h_ }/M*h)VDxkѳs1\>s1\>s1\>s1\>s1\>s }0Fhca pq06 & w44z:ۻ 3`&ⱇΖB\!nYbDL\xi|x< , ^{Byʺ;8;AaY5F3̖Ǣf;-ǏQOȽ8l_†7y[6-.…BP B!\( p.\[fVP u,E)\( p.e-%VΏ8;?Ώ8;?Ώ:?Ώ:?Ώ:?Ώ:?Ώ9y" xsMx ކa |G%K{@M.fYbV.fYbV.fYbV.fYbV.\Q>(W+qEJ+@[sCIet :C ݠ;0 !0Ha q0&p<NS.`.(n`.(>xށ%|Rr>8BV!wU*] qWʷ2]Yj~a k!~u6@*/6f[`;tȀL! a>cypRGP(GA 8 n B2K C9hp Nï FU@܀:o@7P yuހ:oPkȽj<ԄZPpRSOZB=uEqwG]l ,QCuMxKԱu= 6v΢Et3pwbC=Abr3 C`( 0 F `J>{e7y1zrJhw1Ya=*cf#c1cD挓޴߈7{F̕-jhlvY$AhGkƉ+dH0-;_$ʯӨS;ԨT|~*>?O+++S8ʹ9wDa L`Lf}~xf,x~xo>{^<sz^<sz^WgKWx RgXaB,'@KHV@[j tnz@OzqaLC0GQA2<s xa<YxƷ__ b9 o> o> o> o> o> o> o> o>yOVwG B `=lTH_`#lͰ A7d.ȒuF]ٽٰr R{>b^Gxp\l'28 !C9hp Nү0APG+Vw}à1uBh ZB"'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh' ̄Y <afTq O< P:< yx^7`1 osw` |G>e>oZKRxu:^j/ZKRxu:^j/ZKRxu:^j/ZKRxu:^j/ZKRxu:^j/NNNNNNNNNNNNNNNNNNNNNNJj:):):):):):):)8+qVR㬤YIg%5Jj8+qVRW"2l\Ũj!`#ek&yȸo ʨ~5qE%-Ì^qɎJq8q7ث~e{أ\[Yε\&r \d-Z圻s/~Kq%6=gXK~wWQrԃQv`Y_8h\ۙ`/1'UX/цNPFF8N}Q}׾i|_|'sSd Q1S8?ucםo{.ɱ'׽cw&͆3tˊ\zVx~eaB,u/x![f-*,\[<ڕ~Y(_O?82KJqEx8ٍwމ-%[-Lr ShœTob$37,ʠp3vMMŝNhj"/pP/9L!g[M>?f|̥z=#Iվ1y[jN2[O3֍ϳdEio/ùܿ@(q0.q[ǘoc̷1ٌl{SG%X/+*uvejW=Zp*.\RPaQ0XaP1z;PmaL;a LԻ`Lf}p?<f̆6YA2<s xa<YxX} "xobxނxރ~#`^2`~O~ oJT=? B `=lTH_`#lͰ  gh( Y.\`N.wkjU\pZ+k̎Q̆dl9jyrdȆ Ul>>>YT;7Ȇ-%S!}2s*Z* [&X&qbee`y)qe9qee1U1ŲȲHLayCeyfƋˬ F&bx`m+fYW9֟)"ٺޚ*ikuxzzHd=l=,^XOXu6xۖhk->Mlm y橩S#ެ^6n6¾4VDn[앱qK*40/7jdT[??t5[ռ⚞eϭj7sskZ{Az\~QTܚUz}k8gg3θfϽ5oܼq?zܪ[|x q/[ˁۂ{[k5urmŭ}?q~UmR:l5/跳[DJˏ/?0?ӭ21Gn*R#goayH$j+]DUؕn"V#)D5[쵄1 =IǷM̤7U)v(=ڻ}Hzsz\fj 67[PT.jtZA=D!;)| WWw~wGX?ZHa i lMVp6#_)Ӳ@|X5dEWJW SYc̪FS=Sq?kQ\eՏCUVTYÍꫴ_뛿Ok^vs,2q7, ȉ* Yu@JPV/WIA !RF9r"R~J!B*-!!7z`rl_9V̊$r(́2n>k]W52h.ղXYb+|)}UFvB ^B6xEBe"c2$z9>=@Чӟ KnOЧi1}ǣi#Q1uDnɬŜŬ"u>٠l+Y@jjj6?e8q];(rzE/S'|rȥS{wE[^[kOoաxzA+=V "3W6.1b'\@&3cQ o:q8G(T3Ӌ: }[@oӷπ߂HҿE~=B3u A?3wIڻzꉯ\J_߽Y1f1f fm=Y=0k& ѝHJp"X^WX^ͬI"z5CǥzW=걚r+8Vl+[r,c){VeP=/9O8pn98+/z7& {KWcqh} x}،6Hg/Ee/EG {h;Њ=$;{3Cy+5^+ o4,;aQV>6 Nٛc8jy-1qfP(h^[W'!Xu)Ѩ3KqAܧpAg6Ejgqq~If)n3<Կ7m6W6^2dzB-< 8Rܦ4ut_Pq^I)|?7o*VYS`,56; E2JO6_ms^z&v1,)2BR\@R\ KAe2BR\:X d.EVLqL!)(BS2`' J J^B6sA*@>`*p#B1ճrBTa( N+HtP cc`>R\Rr;Q6tL uWQY3J~ ~3}+uiNDG ZEʛF*N/\lDy~ nzn[=Kf=軇t|]xrk8 z8 pP>/Qp\Fz(ߘzM4P.5$ט?__7`%|-<%[3re>YϡiakmOȓ.a-`5|?hmC7d. Y<@ֳ~ȅ#28 !C9hp NïIy.@'4vr=~r3ufv A0玀\2G%X/+*uzܠ a a0FHa q0&-p+0&dTG t{aS̄Y <ax9$0')x30`a|_JWI;| ?`FVk'X )3R! ~ 6 .{r\l^_ЯX z)+4VNM5J1LZ*PD/7ȟ;jC#4u1j#gVZYזEa9c\:Jo-#)D}&o>#Met!R)ˈSD "H %DN4Q !G V C+J0Q, ˈeD2aѰhXF4,# eD2aѰhXF4,# ˈD2aѰhM4,# a"!L$0e|W߳RQ:;qJW )!OJDN"U"#XwNKh=pHoۈ0Q0(GITF?#~8FQ359^l 2"XD)D}^ P3>+,{+?Lsg!gG-f;FܫpvR@zU@T@|^wT-ţE}]|SB1P.#q{|خNls=lS'JL0_ɯxded%dDžhbjb+Ԏ|'SDe|ߞ-ُvh?*>슿\k?%RY.\He*%4éRg~f~5&fq> \^Im')xZnUY!UCJ ŜK5!Uˣ(QɱPOڡɨEȻQȹDlJ@@q'u6\|/;:";ˇL]EϢa#Ƙa>/RkdЯSk$ҝ7&?M͟  QwԇPSjCM}59ij栦9ij栦9ij栦9ij栦9ij栦9ij栦^j5uPS/jEMk-QS/5I-S5QӐ0 QS)4 5MCMP44 5MCMP44 5MCMP44 5MCMP44 5MCMPT45MEMSQT45MEMSQT45MEMSQT45MEMSQT45MEMSQT45MEMSQ-tj!(?QПQΝ({g(Rm8J6ʸGVv~c/~֕*)%f6#_~__,ݘɝU{0l}Sf{*y/w9:#wW#5ޝFށ̭vemr6hMSf ZZ;Y}֌rfPL$x9x9=Uv._`#쓳P{P͙9WXԗQ( ֕tU-Qu#*ZOP9r,nx2L3WnGQoGYYo*a1Y㈗ct8d, '}-F^FGѱб CGrCb+z x^D\ACV=MƁ&@q8P74MƁq8dh24MƁ&@qnh24u@+ʊk5f 1טk  1טk5f 1k5qA\c܎LCwƣ;уAGS@/ z)z==D@у'Ѓ;z= acQl a{g[j[)n)Gg_ MiKe2p϶ UohlqDnjq%:P7Ŏ~vs ՖW T[5%хgs3LwE>ۗ[ފ3PoƏ867r6lOLZkjS3ιnSfԻfZ\+g]69 }Ǒ^f^'o4g=ϽLk97ofondx^՛&˚{阦Sh`ӔfJ孧f6[<|Lyaƿ^L0.ᑖ[Jjumj.jE~6m.jtW|=/]fng:Dsa"uTUu~͊.q׬#.]m%]u{e{έGT[[tOG nMew*n#7_!_$'|cu6i۪ϕ'؅xt>H;H;>H;H;>>d4چ,% fSɩ5ɩWSɩ-ȩSȩMȩlrj 9FN.cɯt>F}Ʀ/Ne$Neq~E3(W=Ϩi}0 o5D7@5bM{C% ZCh WB;ܕa0 0 F( c`,0nM~Fi}4Ѵ^Ѵ>GhZ~7ձ8_M//ŗGZ܈7Mkq4-Ѵ8GhZMkZ6FhZMkim4Ѵ6FhZMkim4Ѵ6FhZMkim4ҿ@Q3^ʹvzQ e Rj&WBKffka.4:,fƵ [ TY$2b[W&+u#h)a8HmZF]XjǩOO\uWZ[qL}q ͑lma9獜svzRܞֿ޿`_pާ9=۸2;қ")X'\o.د_Idc4vooEt5ؓ"{2{rGﹾ_bgw>΋nluw=蝽n?Uס/1lpn$/:e ;l[sP5F`ocvVƊ^0f4'͉1&۷D Ġ;Mѝ D{bО'A{bО'A{bО'A{bО'A{bО'A{bО'퉩 .aZ ֝m}EC Z+TV2M٪ƪYYqY2+UfʬT*ReVN٩2;UfT*SevN٩VmQe6F٨2UflT*Qe6F٨2Ufl'zXZKkc*p7̂EG!VrJ=Wh}#oH LtXZKciu,ձg[M屴^cZ%)I:bg]AoQw=haz+ gr0VZNZ is0~9hU jEZӪ*%SOWvKkӚ& t7X:Kc`,ֶuX:Kc`,t0X:KWT^qF>y\I8#3+NzI 81 ĀpbA 81 Āpq/3D zA+qJ4R^Wxz&Q缱uZ9ZR1F+Ξs5{FsqwM#H@sԈ#5:HMWnu{ZBQOƳj{i^W:= BU 1=fW+c-Xybmrؖ=5v5ٶ&xcMU4RS2DRԧkv5_&} tk87lrU\YUmWrf8ά!gր3kș59+8+8́u;2)MKu2;C ֏̃̃̃̃yP?23e-x 5h'~PiySU;gtK>s2vNN''dq8rxH=#y㉢ 0tWN8'd|l265'cdlq26N8'cvNI;c'}줏>vq~.D=#.<_ԝ_UQ? !w%eȒ.瓇~#w>~}"[8ƻ^kFB#xe<9#Ԡ[ή73Gb\7xa?G5"̑8; vC_|Q`9DZ:gT,Y*r=IwW+=ոȞ|] J^OB_%#yyU@tW| y!^16{5{XϪr{hz+ʽrq+G^98f2^YTmʽtexvw=k^p>ryآejU;TXc>fAK-̠}ڌu}ƺ>c]8w9T Z+r^jI+----e-eeRmJ^m`[`}Z&Gj$ZD+;Z{U&-a---.&2LKoKWKoKoKoKNKNKoK2OKoKOK%Uۮ_sl 7i{cڞ@xE0Q~G?4Z 5F?\C?hC3=O-1*mLDQLZUUEc}јhL_4/Ƒ_;iL_4/7~ۘhL_4ViDM% )8 jVP@bDCeo_ zs Nלrmzzm'y6LcWc#8j"AY!ƻ.Xw`MZ۴l&- e#ؿ?^ZZՐV5U i*ʠ^_6!-m&QTYު$@š67D@DPvwEqWtQ}wwpQP5J@@d M2_;!,.KJuu]ν9OާԴPjZ@M i3m-ԶPj[@m m-gVLPKufjrYszV.5 hZ(5 hZ(5 hZ(5 h: k ab4R\B).'|;\7jmAe.G~߸e4=[" A=38W q+8yvxFzfpƎ$l̃Poܧg!i9آܭ9J6G8R,؊ҪѤ*ZUW+}k?g̞b>jԁvqϱb1jV1juVyHeҵQ>QQQ975Q5Q5Q5Q5Q>s|t_FS-9~Hz"1Z$Fh-EbH"1Z$Fh-1\@ SdJP:n|5ߊFb{]ό#q#}$>OGhm#}w~&BGh#{v=BGhRP)k>?')Tp8gxꄅe9&J(JFt(O(J(J(J(J(J(J(J(JXN&= :ZVèUE/I͢,J͢,J͢,J͢,J͢,J͢,J͢,Gp^2nUʣV1n 7q#=n5ͣy4Q`,v:7p::3t 9Éa5ͧm>ͧ6S|jOmm>ͧb+hiiGiIW1Ut_*J>O*J>O*J>O*J>-1PF±0%\H NgRN-F|3OQQRjo$8;lh~p[۩dPFDD)ZQ[;{ yӯQzJy6s=Yj~Dm/l6WQczC­$# m?O[m:o'P:.+~=γsK`^*Z]A% ?I{^-<.eғ<Ѽcَ xNKzN/կn7WO|$s= %:i_kF{`Wz֫@ f,zzF-jަsuAoUKtZ7IhޢVgIZ'OHZͶ5WͪM)T]~nN4`ۛm]-^/ߙO簢y_50mUY7~#x<Gcq]k1Qk',>Sitp8\p  DpjOK2p9\ sG18x< Og9B`}X_.<'8XebVI9W#;Ye%w(#;ObŜtϏSX0`0 p0q`48'Dp8Sitp87߁-Vpw{4^]\5k6jiE ҙz.\z׋z%2V\X +sae.5_LY`.(|ll! dl|o\ Z`:| >3L0 | >/% | J7[0y`>, "=X %%`)X2lcM~;.l^oxl!2ߎ&, 9"qZ:u ߎ:5qB +G(ю ʝm{ɔm*j:w%C!k*O)-JI"/ZG ʬB<35rwp|{57}?|N*tmd`bJρ́l3$ڽNoso18OfXk7zfWJffLry^s/gZY*P(J=I9R)<(6Ԩa]vٰwð.Ō0IF+b=8hjy(z_֧qz=s<롞0}[tWӫ8ρ00 X@ 3{zu6-kQ?_Ot7zEI?}E _r~'2DOCΐ !#*9ڷuix!vB)k>[q~a}6iƖ_0IF֏X :.H P JQŗG{Ek,ᔵZ?n  =,[Z)STJ/M Itzeq2iӒ/#}g12m%5Az+c^{^v?;R=0&3.e,\d PyA+slSaO2&^eLLcL,(}1cJRQofB)sN4כU_s٨BuDZsZC#pbGDOZcßYsօ J=[)|c /ڥ,{7at 5Tgbbkl26ẝכU鬹=IO[m_}__4 84ח-o_Uu,i_ھ}]1p{MD% >Li`Y -naՇ^ļG3˝cuR-r/3NjI;>:]NV!ev2 W*3;ĹGUS.ξ3}鎴rX茖{ry`%A;mm66۝_39LαNUiKUDMԤ9y$K Z8O&ﭕ _[BěsWs\o9G]_zU_`_|_|D?0ח2/`N X-Vۢ6S۵v[=ոKx@l[GTj]ImQ-v%DI&R-*wa```````]w:p=߹[biϾwEo:=|?^l`XOAɷ]ۡ~TNžo:9L]nWϙ#ds33b\3(Üj+__U+ԥvh~}nSW>BQѪ;= S;CaBu^/Qmԟ[OU)fUUL7=KuӰbEXfz!Ujhd#iS]w]g:0KU3Tl~XW`~=D?ƥu2B?ݪWꩾa`8FQ80ƀXDO'qp*8 g0 B0QbSƩ5XTq*8k5NbSƩ5XTq*86k껑~>-XG_]axDO1/o^Uj0\1=|<Ow?3Y3^/> xu3o;Nf/ j{^l/e`-vBabI,4):sz -jX:b<@[_oǝP8V\~|,T|Or uoә曈\0?'?ӯ%GIuL baz#@oGOT}(fc` `F`8ǃ10NN p&8 ѷbFerp]Z[ޯ Fp?{p nw;]n܋O/TԳhF_8 C=8pyo4F(pް'+aG.욬'cƸ P6esݪgԷ{YHzT_zL/p=/宗` ^4:l=}p~s﹛{|LX,0y`>S5#_7.wx>#1fYS >_9Ko`.( B|2}J PV TԂ:P6`l;`'n p^nY~Aa2A(1rA+oZ6 h'Z@G .+8OkLp?x< 3Ŭk1Z̺5LWk`z ow{z>|030|s+5(߀o\P ;,`1,K2 ?V(jTu0*P WV-`6-`+ئXI]/vN 4g  < ,`? ,=ˎ(1.=ğoG@dsA+ZzUϪWUv4xFY OV'xF|>VWpz8Y}յdup:8Y,'p4'+p,'KpNV'+dpr8Y9NV'U*dpMp 8YVobծAzk$8;G~/قf+fuinV7+*fnۻ^H'ge~%g Y~%g Y~%gri߄YW[ق%j ZsW/|-_K|-]ppj8[.w7 30|sv`fW t=A`z#@oG~( p,`w#Q|I8_Η%|I8_Η%|I8_ W+|ep28_ W+|ep28_ W+|ep28_ W+|ep8/p8o%o%o%o%o%/p8/p8/p8/p8/p8/p8/Kp/Kp/Kp/Kpo9o9o9o9o9o9o9o%o%o%o%o%o%o/pz8_=W竇|pz8_=Χ|pz8_=Wop:8_W竃|up:8_W竃|q8_|q8_|q8_|q8_|q8_|q8_|q8_|up:8_W竃|up/Kp/KpW+|pr8_9W+|pr8_9W+|pr8_9W+|pr8_9W+|pr8_9W 竆U|pj8_5W 竆U|pj8_5W 竆U|p 8_W 竄U*|pJ8&8&8_W竀U*|p 8_W 竄U*|pJ8_mp80pj8`5X N%WR6+RgJ $~ ׯ/=TY|ĵl_hq},MmEknMwYOm'7ߞN5o듵ڐ:qFļcѻU{}R~H+:GL7n9k(u^1K 0gmi,;{}ggڎ& K|>&菥#=H_OeSnMNJxz}ҮfLs~C>ebX~kxߨ?lkEmZQ_,VUO@\B_$[wѢcێfzXNJ) Ss޷*}ymE\Km5_7Vߒ{^g[\L`.}OWuK=r=I-r=S>Y,O-zD/Ryc7SH8s2-hyi|RzdϤbϯ[87QAbnbη>Şgx>ԏ{m-KMOJM>魿d9U?'[nhH.҂ϥJ"%s?5MAk~匧VܕS:6іj]Ǻ.aakkvqq:Q:u:u:_u櫣++JoB UA}W}ݫ=={AMMuoKu}I_^Bs"LrMbŮ9%tLzڔHOӦSo ?e}$OaX Y9k0LSkKMY̨؇%ab,K$ V+ sU<[ c+bayy47PYPzREͧlǒXbI*X9Lǒ =KDbZc;6kBb X[!CXCXCguأzcu}ԑXQ?GsxԹu.$yż:Kԥ2uW9d^5SԵ<근:ԍXMwfu5[݃ߛ~}pyWyu0G"яԓi-O` T1188Vu1Xl0'#*l2F<8[ZcuJF5_FKFDƆKCD@DƀK@2"2:03 ή+Whddu^p&ovwVuNu7{뺗-Rm]Ucur z z5z<=U<PA;XSe{ܥz={TW\6ޙY&Zug|Fr]]5uuS|C}ǫ߉ ,Kgܶq1=2Z(((ȱdX2rB2rB2rB2r 9n92rZɔ)#c0KY.0\<),3W\sUfjs[Dn˥r-e|ĺՊeN[N**z†SuzYG=ib܎rBGk8nGk5hyИ3Uk5yI\d]i]*z;OZb,_^a*s'kWkŭ YXnܖzOcimlٖbeEw"ޥDg>j4Pʨwy37~?~_?у>g'}Mp= ƻ޽  j8HXk`p]|6d8I9XD[;t0~x密F^DDY;aqTGD /~Jӟ2.WAlu"fmu-o NTZOsOW=q-жN ouT~EJbO>RO w^mJ]*1R=.!u4TʼI'XH,9Q/k*?c q53~'- "y}5ubh/$ҚԾ~^^AlVS[GVCl'tGKI8ׁڮҿ a)zO9gM_ &H;PO ^l52{WOWKޘ~8Gs'#p6KHu˶ KX{YmkC_Ϲw҂UZej(zOE0^"tTU7'_OM78ZRM/o|jxF!3"xy3*BpI<Ƿ8͸mo3v|qیJ[[M<׀dlՋz`GI(b%u /<Vթ0u^wc㰰c[ر)Lx0bF| j^X5aaaDv7`=!8B^^u'|!|9Sr؟!%-Vhb!(Vxa>ŨbPfXf_uZ:bX_3,iubXgH/ u:bX)֙bmXKXKX[X[TXG,#^ʴlcخ) ' ., ., ;6ŎMcS;6ŎMcS;ĎMc[f w5݂݂'*d̀2e g;VNRKJ[DpECT[bF,5Nhc݉ l"}-ȀDA"EZE%KZ<E2$~̖!#$_T$ZbvfK #k5GĚb͙ϔ%џ)џK\HF" $˒ϐ/ _DyDyF ÖϐX-_b=u\>u">D|Q=l\<2rdexː(/_F]v2Z˨ H˔.[i2޲_x`݉ڲ%j3DUe剶bV{-:-\+ZIJ4["8C"8Gclq6[t[t[t[;Ct[t[t[ttnNӬdt[8[BCBCBC[["DD!%BJhI-_"DD%Bl-bkedɓY&_f|edɓY&Of /[n^_1}O,=(qD6CYLyHO8V|*QmL7}%N)\~\ئڟι;?H⻽eupzJk 觜Rk ?(ԹS#~uly%nĹZ|z.XE['1O\KLfO~[FĂ-"TZszW#1s:q(5?S9-ֿM&-\zO09oOrԦ֛˹Jޟ-[c3bap>Ow֖`_[Uuw'Gs6D} 1NTӗ9^?YX^ڶ{5sK;}מosčR9-;3(U.!\tV~>G/QMWǩNn}oj֍TTuwJzHO{֩Ro:ߢmjVERso-Ihz}>{}o3R u7di(bgO)wliK|l9Y>|#FbR'Q[ }،XxŞ7{z.$=Bs\6ẍQ9qF+yFqxk q.}Ne=Q">ltf(f.FtrZDr~ ?&te?2X 33= +b%_bc+sY/u>= ĆbC66Z׸p ){Z2ݕXUfYm`[[Yn"X؏td}{FeZ,<[,˳lX^D,/[,/"-3<"v>%sykg/P^,{%إ\v:XjaF3JeR#Xj-:5*{u2Q xU:jJ^){5F{UPj'XbC @ #F&X^G#jDYw쯃_؟_/c᥺ml(`=F??וe7*4z=``lќ9#Sќ<9Ds$ C'K22DrꞪ7o|&˷ot{v3tvfs窛 0lz[ĦuQIJ Śu/p/PK{sp`ش_l{{eW^cY77ѽIsovoV[NvUŷwz'*qLP=.q{< }z!=nkll3YoOT>|C|O8?qW ;zh?DF{GdhhhfoTMyެdwA*__"?2U_RK8a?j/1[Diwo#ޞ0;"X~Z>ĶuO˰:Dz>^~O^rz& f=A?oH'HB=@al.2~"oOaU1z9W6mMq_8μȯB6Ӓ}c\پiI;^g8u=>O8ս,$_of흇9&OM~aO"^ܴԯ?`67{<wbdc%zMԙ-su9B'[9Y$娐m3&%MkDϱ#b)YSyd"RM=q瞊!Fɓ9xE/sJYȻ)L&{_*u-TquS@gz[>ez<e>{oo^WU^cc}=~3G5UhZkS99e-jll()NYJ hM[lOrJ˟kg4GFstU+T&_:Kg{K ?%ۣ] (ν3,hL}g=H+$Q" 0,0l0Zc=sN^F%#wLѐƐ%["D4nh+uS[rENPK R $%I rUӔ\մS٦R?U2L|aȗN/ p* \0\rzKq_rFIBLr-rÒ\w:i/ܝ[K6{d/$k@r,aKCHr%Hd8Z2zJ&Pd^%f62E zOW{ڪռ KD품D$)=QwPb~KX}$ΑX: tEKXҹKKgH,+tҹE(zDm$n#QtJˑ(:W$n-QbmJ}ܱbs*6wܡbsu.6w\`\|%ő/y$r\|%Y%o ̍Qn_ S-rn,K8b1T8,vڻ_WEh/@{QF:GԁuQF:Gԁ~2|xD'@Q::0BԁQڈ:u Wԁ"QrEu Gԁ\Q:pDu W[ԁ\Q:!@QrD:FԁCDuu Wtt-h#Z@N~G!@QE$QE$ 5Vrf-l|JLŝŢ !G1 t({{jH^MPlɮ -96AK"*968t={@u||ɨɗN3IrcCCUg&:HL9ʖǙY:Eɟɗ$gə$ZFɜ$3$sfd ̙ޢt$:||Kߜfκ!y5$fD(51QI:JMLi$GuNߑ'9-#JJ%',Jd%/8~qp4rh.8k\Zmɕ+ ^T ^ ";@t\+<$ǒdvF%ϯXr\E9D2zJFPwH^PQyHvWӾȾRe<@4w 2DrNKUgQ E'hуJ6=(Wa=d"w.=_`aŢN/ьfA4.4uAG|_+e{slV X~B"uo%2_'#"_ 9;qFu v_ub;+:Ӛs4:Oq«jl-#Mdt97[:-OK9 96}{u 5?Tfcbf/T R̦hq/d֟/d}w#K羸U^IOwxZ>YKߨ8MzJ=O-3S\ R-x&=glT.kzzO-TnOfq?+\{;k#Fzʸ޹$?\fLi Ku.FK[G[k/O:W: 5"bW j9V.\9yʮ,dpVPuKWg3iߪĦ11c=<==#=O,:ͻ3z!n'#B|EK}S|}7c'|_---}[ķԷ̷W[Vr*_WK|};|?vv}iS9f;uuuuuuuu<̥KM,Em[%Ԍs%O*\wɕxSWsjLy%--_b~N[(KaSpEeJ7촓ʠ^f>a i+EkbYe4qbòَ(1%[r%We=]"Q""Q ""Q";I4v9ͱhEs,cw}D;Z+zP7@! /GVW z_D2hկ~QQ Dk-)[T?ST?~>QZd-2h4G%_hYelA_?hE/Bo.pG}ŢE;D*X*{D+Q:ETbH.;D, `;Ht.unuCD*jQ놈Z7DԺQZZW j]kQzZumD'j]umD;TԺQb.j]uYֹ[1[.$j]u}[-ryEEZgZ.KԺuF\^KA.k\S;Sf2G;܊D;Hp+XԺr[V$wZ> nDE;H+Myu*OԺnuD+9@欁=rEr\#W$=rE=rEr\#W$=rEW(=rEr\#W$:`E,Xtp}tEr]hE(`'[&I4N MhD&^4΢ , vM`{&E4.ZZZ ]ͮdKl-5RFwl!֙ /g*KhjevhDG;ZtEG,:`ц6@ta刎JtEDGk#:ZT5-j_4iYeȮ5-KԴdW%jZQӊEMk' Qк],P DGf%^0cHJy+.rT|'k)I rT^,y8`&dɣ'8OgD@?:OkL}_,|P mu\˩B^O>?AvXpv0fYFѴQ.zn -Q,D}2IEClyblycD# ~Uݧ)e,n'67+_i;yz&1|Z^>ڳyH{R} u<ZT\s|^Ε d=ܹ?Vzzӗ)*uoѓU_./E`~f~W[c>X^wbz.S e9~w 3?(;֪OwcAZ>g*uz6XN&osAtVzg%{;Ӽ+Bdy~YQia'GF9kݞ s_s@ث彶e{}wJ$ћ5W6'd`g,=єɘ'?CC4Yv pz_qb"7H>'Y@A|Al@D ۇ;a褷yy9g[|o9|`~8,m6`ep?ZY[XZY̞v8 ,ti3f f߹%5$5҉JCԪw$ QWTZ҉RQx$2%JteHteHt(C=!{BdCU&m2Xgg,'$ΰ%Klsmf'ƚc));#K[>6'܏//—”””||C||C||Cy3 K5oWW@>ZTZD0E8RT ^'!Q-,鳐E,EWޢZj-Z,zEo+ڈ^NL+ډ^⎳NW^+zELBvW^!zE'+z^INb7Q+ډ^q>+ZE-=$WpQ-zH*Š(!Q Rw:CD1h/AQ zն-m-AJ+)ZAW>bǽŎ[Jp]E%$*AJP(*AD%( ,#d<"*AJKTX;~ډJ)*A'9]D%h'*A**AoQ ytPTBQ ډJNTntksD#Dsg;:[jHƪ!:@_;HA(_}eFFrk={$x.Js+ϭd<v2ɨn'o;nqP^w 9WBB2 Y $@; e(]d.(sAG])%|גזĿ%+o)fK)oN;II"B|{IIfD<gV2$#mPmQTJф=(DʆWReذ5~e} "h nP@|` 灉20nw#)< vOo|9jY9o K`UpCp[pgH|`(jj* u :3t^hb [Bw=z*|hJhZ{C ЦPC1 [p8;:>9#37< <$<*<6|jk7o ~0XWo<\^. W[;»3<̌]2/㘌a3N8=c|d\q]gܛPfjƛfLϘ1'یK2k226dl؉3e3#2ffv<4wfA#2d<3̉eNμ!;3|$3dN|+̏3?*4sQD̚M Y,++:}VY=f 5*kl֩YggMȚuEֵY7eݖuwփYe=b+YodA֌ϳJg-*ZUU%kG'dFr".#""DEFGN rIu#G<y"lȫ7#FGfED,,#k"U mQEHUm0-zhwtPtDtLt\yщˢ7Do?H)iѷE?~*Z]]MDFk lWn>sv}d=6쳳'dOʾ"웲o˾;Dz~17 {F%geʮ̮ޒ#{w2c9XX^~cbbc'N]$vUͱc={6r؛wccbsbĖ5؆ض DrZ)shN9r<3wv7 l67flVDĈRDHbH!"R"H)RDSL)RDDRDDD#"FHy)y;b}>?s?yܹs9 5&ۦfٖVmklml[m;lmlmͶcӶV;&Q{žwٻ{ۇGG'ڧاgۗWW77۷wُ['gmCv6rIG111QXXXXhrsltlqlwrupvuwru Nt8}Έ3L9;:89{:8;9:G8G9:Ӝ3s󝋜K+5Mέ}΃f1 ig.r+J:\]\}]\]\#]]\]S\]\s] \]\+]]k]\]\;]{\]\G\-36-nc;wqwOrOupvs/t/q/wr7׹7wOzc8<>O<=]<<==}<=AO紧˼Fkoԛ𦽝u^޾aޑqމ)Y޹eޕ޵ mޝ=C#IoO}f|1_җuu &ffV||}[|}|{}|}G}}|g~?S.n>AQd4L|"R `c\@ HҁN@@@@KdL- AsCX0;{{cビS3 K˃Mu-]S!!duYB/ CPPPPPPРЈШPChrhZhfhNh~hQhihE1&>)5#;/t0:::j 1l [îp  'pp]{Wox@xpxXxdxtx\xbxJxzxVxnxAxqxYxexuxmxCxsx[xgxOxPH%|2|&E9bx"H,d"#]#="#"#C"#1Iّy%UȺȖȮȁȩ2P֡R( bjP~ ˿ψ§ 8>Qy9W9y|̳42Cjl_sg) {^9*pv/C g..4O"K`W +A E~n½tNC0 !4A&Cg+惈mp=[Bc&Zxq&sDI~&POy?|dktu@cڑ(+У--UPpWb~ D>8"hW\yV@i z M'M^+魥q-w@Q ïjV] rnR2<@J,=_W㍨>DVA},NC|0>CUsŴmOdgGqӟ׃j)S`CF~ o+ǵ2R;AРF5ܽh2W{%Y߃W.ڽj ӳpZJh![U[GSV(oAX6"]8:7S3?i?*X SS2n٣dN_Tn:D$KBVo^A~p OQF'<[w[ Se4&Fmg}tȢmRJH}9xON{pGt><w:k[ΙӞAueM@Orꜫ_.)}Z,, 9v(ѺF;p /)*i4i.D0uD2io^y `Gg3ŪMӚ\<3f"[8}K>(iyWiLk2̳ tr'GI++[G]t:_.w^Us̓r%`QzNinxoMnƮk֨lRM}ZsQy'`:Ү됇i?_4FC#\{9 ݅u}IG\Y*˱GuDzM#_ͣMsGGE(q5׆HAրvkgq4طB h{H{}d3F;B RP4Ӯ&>a?BFIZAokC h/Ґ0TjCPcHj e W:4t1\e3\mjFa9*J9%g@N^^*?!oG&lCABg?3%\4NR w #HJuTf ݄Bw寏GAث .( )Ep3~:oms_> ##Lwjma g=ֳaY{Dxb1!;)bᠤpDR J {E H.#BRH"iffῤ[[3pҷo 'OBhV̓F(=-=-KkD9SN"Y+ѕ]t:xΩsW뼺UWL쮻RENS^KG'ޚ=.[6]ozx>#7o=^^oҿ?(ޭoֿ#ޫWLO2?/~}M|A=u*>hp8paK<⋆,/ϖWƮ+[˾.o={#ﹼ?y;^a佚*k޼yo}}wB;sȌyR;Or+*URx6ThtF*M!ҵơۥw)`X/3c'77N7/ 6N2Nn5N3XϤbϥƥƥ$rJASƧ_k7tZZazziM[ƷGGKsOH'2~,iIB~Фdzn#'eiE~Bie~QUZYRS^?Fڙ?6vGJ/__Z'77k7|Uf}辚ɢ~~O꾞t7yU7@NpHAn%? ?}K&OӍ-ϔgFs9{tcUS{嵺䝺?^79kVݔMC; ^M̗Ed&.쫄JaJJC )_8pjم .)\^p]- w-AQd4L|"R Siiiiiii頩tttZĊE"k(P-J:u/UԷh@aE#F+X4hzѬE -+ZYhmцEۊv)_tHQKɢ3EmfY662Is<<<\ocodjamg^h^b^n^en23o4o1o72506572- -Ŏb_q8^*Xܥ[q>-Qo]ݼ=}C#c iޙ9EޥFz&Vn>Ao|Fg|_ԗ}|u^aѾq)Yžeվ ;m=C#I__f1ҟww'ggW[{GgB_ R.n>AQ@c`M`}`S`k`G`w`_`9p,p"p:dAc]@0LN````KdL- !sBX(ʄ:zzCcBCBSC3BCB CKBCBMu-]áSa!lw[Ž/ épppppppCxrxZxfxNx~xQxixE1&>)5#;/|0>>>n1bX#H $"HH]{Wod@dpdXdddtd\dbdJdzdVdndAdqdYdedudmdCdsd[dgdOdPH%r2r&V+e2OY,V,˔u.Z֣wYeCʆ՗)_6ljٌe-)[^l]Ʋ-ev-;PvhSegBDQ_4GSю.nў>AѡQѱцhctMt}tStktGtwt_`9z,z"z:Zʍrk|z /+_Y|mw)_~HyK3m1]Lc'bX&95#;/606$6Q}5RƔ)eMRT4HSRu^aѩq)Yũeթ ͩm=C#ԙT[F1j<5XM&SӹkM5j ^S_3f|ͤ53jf̫YXfyͪu5klU@ᚣ5kN՜M iCCڒv}H:N;{GGǦғ3sӋK+ҍ5M}tk-5֚j@m6QT[W۽WmkՎ];vb鵳j.]\veڵj7nYv#-'kԶet9c2L($3LLLLL̐L}fLf|fRfjfFfvf^fafIfyfU).1%=+7s@ϭ;>oZswEV}Cwde&o@;B348+f=8^ 1J^,K7cȃqC^#87%͈3bJwAS8ň}k`R>owyS| }v:K}xbW m\@ax7$2 óڻ/B~W #L+X}3K!_ W(.rsL u ަQ8H5{x}Z5[:h H7} gpv N<ʕ!?y ؉J; f^i7fHߦCy2JÕ0HHhҳ?9D܉#lFA<] R 1E|XqST+q34HՉ< O43*,è F|=מNT; D<GdsPJd9Z+e\ʿKr@&Ǩ_A>dZFnw!oz/۟Ⓢi ȸW %x(=F)QeУR|_|Ek"HqV %9b0P8t,,*%/P T2 Z( " U<zX6;V.'AZ4dL3 ־8 $:Ggk=BOrmUd ?P]@FB y#>J/rq&"9bn]ip2ts1+"}!,n< Fgc KH3q!bk(+)nk.a "Jm6[`t/Wki#A}1;4 \>GkC#z- с̍j,*=u ˕/^y*D{4gBµ.ZLrjN#"< k S{~N#~50F  A 4 n8Z{SŃ@Ns1YD H XcvfeT>B'b<r֬ ryFNM%bN(sd.jtڻ^dhf־ ֎HTWSo*IKM=oYxY,'qM ?jSC2lzm0g?Tk qd *2 sKv3H-YB3i^'-CkddıA? \ F= }_ZX$U.Mg].y@0Xo D0V4'd6$ks$C31}Ix *:a}ބpni~1Z G43QG?H5Bz|9N$ VgjOM"BiL%ܻ%q4Ǯi:% p7٨[qҤ!E Du[}}oiTL@ A#:y#C3dXѐU1O}0^FXd^E_t*)tUXW:.{Z{)<_ލ4j+@=62~ZJm"}Z?bթjM胫_dX6a 8%C+хwRe/rNyPi/MJbp^zǑF~X"0s`YBFs5&N}0d9?F":2Zg~I{iY91QwirTsʂv4ʜFs hfr\>ñ=3\j1Gş=Rsk'RnOsʱP c(cI'\OEӫWisOprِ1WQy=RknOQ^}C|#cyra":'s(ld>NGƎ#9hJo4ġn@8.bo\]kS/q'_r^:t׽9 J4]L2!WV)#riE-V|-FeN< q'_E.*B{?hHc r:s׸']PiΉM_j*qiNij4ޚs+=hב+rG|vVk|rK/\+!Swr 8cιJhg*if1W4@]ɹeZJw"{AQ{*<F,jNn/Y }DLi?;N-ԯ5_WӕJ\W 9 WUrz"fMn&jX;㈏=pd|-/g"<.MV?Ic(FD޲*~\Ą%g-vWWsqҧR]=K Jcfԕ;} W9#(K˥=/_yye&'TlqYe$B}Q4 \b׈~K}I>4@e kJ@e MVJ&{A.1/LrhnCoC C.k'"k{ gB(J45}UaR>gz\T.jb_Q7WH /邑]ifVIM*.J`IH pp™qf5p_'7*umpja0AN(LnR f+}ShTF +BO/ C厣1a}ٜ%jafwX^aլZ2*LVJ/JY}f~(H?~¬OY|]!Kd-j]Nw#Q|"U|"[w)W_aZfO&ٓYww-l#Kk(6XC!Ύ3cFѯ{Xfƫtku۳u/3^ۙ=3{x5guw3Wnd)9}qqqogOgO&?lhWk ?;䝆#Yņ,(X`a s(R߳0O D ˕J MJX/-JzoVzz):u:(^ؤaRfOVeaMUt1*&ĴISr# ܣ\ƶhј,-;SA,*X$<^BPX$XvEB*3y,:&oa+1R;.DM }J(!:*z*+a*aF)a0Y Ӕ0S s0_ T +Ш5JXMJتJح}J8f%S %VB J0)J*!f:)N ݕK }0@ 0L #0Z 0Q S0] 0W X y^:ysy^:ysy^:y<57_Z#vXϱ9Ҝ^g>,x,K)y*x-j\? hː9@ ¾CO22-Hi~ oӧ@ўȰ'"nAߐx?4d?di.ZA@&)X$/({??(ddT"Opܪ hhM#oQiC [x2Q#-(쯉Ui4D,G\x2?cD]{@!vY߾\nҔ#坐?'I|JX{<*YJ x 4"e)6F!?8!%5j鈯Ԓa@hh:s6FRU߬m,iqG*q#7p~:%8kF6&Z`H~v"~SZ9!SOgdZ9w#ٖ\ZzT`h?4ot/ J@$]LꎼwV44'/5KXjȆhF"cNu I/jE<܇OCdi4@UDǵc 1˕E+gp;Y3Zn՘ݵah̍8 y[Sj]VA ߇~T\?żsFdi둂K#쿸{#zS~W?fבzru3ׯ{P "Nqozo؟ hE4Wa`!ќa*RO4*LhMEExSm.#8؅>;^n S>}|YhڗxʿӧžO"D|!/{[}ѮWy 8x1^h?4=#'Ͼ][ڪYՓӷ m{B wމ8Ns5Y^9WsH1y1ZnWw8yTwT3~xoѴP݋=b_KHwB/~ktx\Wx-젥H^_/4TYz6Tw^G|Ҽ%|k7y?@d '{y6d_voIu~CMECv~!eH2NΆ.:CW/\&q9!W5rM-oAp.2IvO_7;YcUDn /XVD' V4`uM /T[>)B8_w= 龍ttSpast+qn,JŪY.c>#Xb' BVfJvD㥫kJJ=uF4@$^, KC!⟤Qi4Z%ƈHIxUA(~*5g)sI$8wEFZu1{*o NݫFߍݯߠߨ:/_doTƕf;J˞ʛSyq*o-3t7ÖgY%PJeJʍy8ֻ1FuqZ6ֻki87/{ZO|<}4˲^odOdOOdTo͞ӷT.`3?c|xݚ xU֭[!q{X,a5 d ak &AA"" 7@83l}<̈u7F?0}ﮮsN{nw@ Musz$@iY!$5B'OD _oA4ZCC\V耮d XLDfnIr_UبwǢ157nF*`NLu﬎:h_ ;Rp 0 )-Ua!G_b$BTBX)}i@Mq|6<$ 1ע9Z#nD/mtC~ّ Q5Pqn@[G'@ P xL]7rJ p :'n­00 `Ɂha0iQdapp0]8N;:0U8C8[8/} EeUµMm§3 !ħ Cp5_DJX8e* GYDxJCI|ږVF cq' M- I>4l=F8Q8Ux0W8_8{ {0_X , G%Sw-3_Ԗ1̖0JfC,a)#uppp0_X ,̞ۅƒC#’U}JCY9~-~&c*/㾇dE~m~҃<[y8Cr&;?>_5ۃ؊H>؃xN媹>ku+lI%\Snʠ?uj%zQW'!uLV/ߨߪ6&LzN=~5^n=k*s[Yeuw~kUiW߾ | uFO^TUM}>RôV.a5N}>MNw68Mfou6Va}\ЯWku>~ .n~o*Ψ}yѱ;ǡ2S}4Α⬺`ҷ@*zN5Jo{P=uu1}]}ЂNNw'7:C/قlK v&#5Gn׎/P+d3! yu0^{/ڟٟ#ch&gz@/@S 65F[]ؼd&q;՝Hs90b0W ƈc@sBN%8z vg:ENril}2OOW"㹒诼yֿXZwcsɩYa\Wj~jϾѵ{, _aqLDPMY|bg-$v ['8/ .UG(wA4W9\QrP*"L #TB:MgC:K,rJVcY ܿo]<ށ[DGbh:}Ͱ 1Ha>`_UhvrF_Ѷn5m\7vjD7ZA[]Y[C4ɽJIQ,]gf"0@HLǭ {s4nc0v 8nk5?/a ,GGdF1Н=ѓћV`v0]f7lEfk3٭ɼ>hcn֯r3~w/*PO]j@M8PG9ԏpa{knב+nm>rOxW{T{L4=.-m"}U4}MhWh7M$=ݷD{a?wG=G}ΏDE!?ao$#1%3/:k(~:eEdU+?{ڷG~}ks(?Us͹σzrcn[ǭs[+2pϱ_gdV̬$r_鯉wTiYL|vm;K5ڮ&*^{{A7uKZto]Nۃ#1q42כxoieڙon1feƙN3L7wYfoYiS`6̻͟bo[V{zzom -c6o{=+;vMctmuS [VNuGIw}*GZ}Lgkuif&t7&Ť`3Ĥf4434\3,0CfYajl0[379k>3/̗+s|mgy!o+{; R xxY&P tyPLJz  x՘gtU%464`zwLyC3!B HtB-Ѝvx>oog$i4BI&HB=O&\b[d KvdK\֒eZѲ('+9ENt_9]SzI1 "@$"HDjFEF."BD"&"%*l*%WED QJE[Qt}DwC}D'b'1Q֓d}L5YF9i 5h=m.ݡ{El1[vm/ھ6^ll(.l,k&bl#[˶bVqˆPCn[Vٝ˝r#.]bDK6[ dd1FS&z˪,)KⲄ\'9r(rh*ɚ,cq.īx oFMjJ?ŊbX+FClv[fP앇Hoyp `8&U`da/K U555 ]==#Yy3&"UDDdD#jE1'H22MdH_dȜёm";dR3EdyRQɢRGZ4HYDYd{.ΰ8w}>|H:b!`i ="’, _:QKkH_o//)=-y%=-CK͈#|ԒӒ>2IZc2ῴ,:-s]$-XXny-+muO]./reohbБzmAc Nx|R&$;?Tphp!2pQ,\67ǝDnueeUk16omDGz(yj"k]z,+zy':#Lg.^>yD͚H A9ZJIHO 8#z<H{7E멫&p` {+4^* fMsh)圊qJ1D}QSUT9U^ƯUUQQ}U%UYUQ*VUUT?U݄jmVuySQT]5XS.j&jjFf>S3T 5J}~fCPjJc[Qe=%ǶhE#mޡQ.hlE5atJTcp #@h2;qN۸ۆV5mIq(Zvo؆NRkpFS[JؙT~Mbjn1}nR;un*FUmm0.?CTƎ ZK5^MD5 xJ &Z5?Sm5^MU"QMSKRL-W+JJVkZN*Nm0F6jڪ&#OlKڡv]jڣ}j:CVVGQuLW'owuRR:Ϊs꼺.xuI%ꊺꆺn_Vw=~zֹzgz^W5&So[#a(g0̋Fp^._(o7 Xg0΋+V".`60es\ w'y;W^B0p.43k `64kh~2昷sMl~1KR,7+0ƼXP,ep*,1H岺q.+ ָ+ ;J+ʸkVrv xqQp'ZCVCGu(MqGpMĽKNCgYq6E/.فⲸ"⺸!n⎸k.";z~y;K`1̋W7rX+u]XEt>]Tt]\%t!]~鲭gjq| +ռ2q~'2x#i>g:S\(.^WP>C)tAJ$H-DI-2P2=e·dZNf`ng%ce"l2!sO)=i*Pm&IUerGtY]]5ty]SWеtE]:Vʺ[McUw41Ma\pL qp 6u73s6M ` ܆p]W;ynNxHKǰx {^x U80#;8qc8pZޝu_&?մ3w-9w/>ǁ|E~'x~ ?4i ݂9p^\.jx .H! R@JH! @ZH!dPp" A& QB69 'O 7䁼C(0P C N% aPB9CyPAE9¹ Ds ՠ:ԀP "z2: u0[yo>@=(QA}B&'y9ifMmg?ƾdi[a|o";o }͠9gZZs@h =t :C ݠ;O^/ }wVa0;7 q[0=fan-!;8: N])t\77p*W\mZ,C6'xg>:`R2[mJaRJیRPzۆ2ضaRFlwl{P9;/OkP=;Z逸Z5v9u+]I*bWS/Gc7R_Iui}@_؇4>/co&W4ɾ[bT'ͰkJNM8 nqrήź6O۱ i6ؘvaڍMi6؜a ڏs^W^C[قv(èN*bGRQ#YұKK\fop{%s!.K]:һ`fl[vkq= 6cg]vN؍;s7= wupǍ܇s,< < <$$_tx _;|o5i'گd;NSESF*ϋG'^B?ro捼7۸8\Kp.17)S5&W*9cN9mΙV< <"ˣ+Țrܡ#eΜYu64Lo5on!r#x\3[5KuQUW5GU=7jYiVfYk։:QC433|&ĿQxc` lnn֙ _d/u,,?AxjXg0u9P+j0!j2+.|d5%(ۅXa}WM2xVisV$NBuyij?B0`B,.JPZ)v}~͕ig7~Z}M I;Ôa|ϻ:zw JgVvt٢0:2Q0:o6! "!S(M{Us; ہM%ʨ"IIqV5f>oNbA FIF#+ "vpe=b ^;tiLp?$3r($$ ~_G~%zODw'k" o ts'#Xv(h+L1+bƔ?$/94;9u}7f2%k' ?>ex[GɞP/'2,Gɘ 3eXMzI٢멉S^eeX/B;OMflUԍ(3]~@!Mii5s:%.xEf4Tk7HrzLCoVI ֟U1Gfl&gg?d.b;H8yldK6V_A&D$M߄RR0%呱7MSj^wi M9)o`9Ә1\%gl]@|١E,gTeJr,RIyT2mX (Q!C% :TC*˯{]-#K>YJr>,G+*|dVsEC}"O㣸*29h82J^c@+96*DKI\!ã9WgǍ`N4zcO7d5d."ˈ/;:tEUZ/*UX*h"wzlbuELi..~[f B^WBzڋǢA9 }s+xYa=ͬdχ.lyR{(]/Jzq3^lG^}'KX̲JXh .m`D.Gh[q#GTNෝnPM~eYCjnh50|}"綢jK]E=f9(K*zfK+:vkb>vKMb|9- 1 s8_˘ŏO5 ]EW!Z5y |ʆyDq;R SǞ dZК-aaǜ_0a0Asgs_37a1A`9 :aeEGi>m}-t?ᰉn?AԈ?iԟF_j4bCE7GG|5b1z: xrT8rMoxX[8s @Hb3 l0xx8cgWؙ]ɗiߗi+i]+ }?XWyy{ι b0qF,Hed2,ԛd@r!&5 %[-f!b1dw$N_v8 .ǂIKR)vO_QޮdMJB*z%{^J:iU-]k:47C*G'dK n d%;qf3 @&,(P*Nm?P!Yz!N.RU+ԅ.>A4 HM!t G,`v`1Jͨd5+[+6YO|u|\ q¥x@/PZxo6vsgǪ~ s?./0eXs,)S qE9B΢YmY;&ͮRe՛(CY|'G?D 1&8x׈O h+#oOV{~?_vn y?[.ccL(g xeȊ?>X$- xZS ɜ'O >I }QwS}!z~R#5d&f&V6#0!ǩNnBGOhh<@&nnX#pr"p-YZ[ HJ(^x?Tq-IBdZ NWo>8gjVTZ!r(I_6Қ\]cM*Gsmi6Y?KʷW*B#6Ww|jS_- #{0{H&^xjuꅫUȕ*Ҕ!C㡍6RNߑveHXXKdCxQ/*0 W-h \ W,/XƄ|s9,&\aϩ&0\=㱯ǩ$'83Nw]ؿ MZfrgZI"+Ee.&P19-%^޺+^gM-U¡`BpCO2lʵ3poGv:V.kEvgM篠f 1FICGIjRȐ "G1vR"'픅D:}?~a{v{$=?,& GĈ+`g>şh3CJ!C'))Bz(@X*g ?ZѺFERJa(ܙ/ -Y N@2H?IJ4* 8)f-;Jibcqq$Krn1ܣr*uqltHnW(rt?Iip!PR#ZU:ABZQE$RXn_~/*NO $r 9?;wUhӱU|~E 0dChT覇w윟,)X%>xIs4o|?=2-+&[cL2=CU SU%GZ)tCm~2~>>{qC ߞ轰!T;m7pJM*S g(ᑹA=*Bmk1{HLtwA ‡z5QeoW̡0^r') ޳ &'5ID}>)a^8Oѐ_!뎱kS`yEcIG'{.bW"b/h%ym%O^<'t\񕽹XtYUJJ(% NRx6Έq&\߇G$Χ}O<3S<]Xy3r!}P)bQ1d&l=|{F)Fc)-S^Ѥ 1[G-d2lh E!gN"=/4t`H^1a2fggJ_ >.A}+?;Ҍ.{퓍'##}YԸԸI$nB5sF`j!h*Xjwt ~|G˧S[hLIz-xI sš3ıc=[&]+~\+e+*Ccmd0X/±⨱9>:h: b3"8 Q&W2߱xD ZJ"cE{uDb[}NSh/jPsP@Eਭpm=D|Ğ0oln*1Zxѳe3i!צ8jc$| O6zb $)zo$M2/ǘ02PH6BK+cI |0 Sތ)GCz?In-Kw3Kg˾.\>;qǡC[TޔQ(Je3:{~ .󔧻b >c2$Ė./jוb1@ryzժM2&I* T/km.\Iޢs|Cyz RF|$4YT:&^Z{-qJO{KdmX?|lRX3m/[z(CF (]}zCGsZԳ4B(S$B+HT!1)mqZy {_Zx7% s->]J?o^S!=Zfo%Eyl&ZS6|3kq͞`/&Mȸ07v̂F|pJ [ wb t7szф1"|d.vh$ZnɫHD`2Ud@^YUtg*yEiUMU-.)un!6 S+JlZېfu;慆$6o W WB_Pw'+]3Кbq>B>,&ORf ^onK ua*WR _jPhEZhT& bx+ku B֥IY-*D8BnFx -R~^ᕪhɾ!ءQ)>}bF1Od-9\* b~xn :}qhz9c= W<J OIZ6c̷'FvK@saSe4x"sH2QoH*bsꝉ݋WH|6YT1tW}ko#v^ZXSX ں(uf+ۑo+&\I~`.e.L a]aﮊ0d>g"ާw$#0v cC?!&щ)hP'PS_iW[-jyQOQ} ˆl;lSƌ c.wԜmm7@pU30RVdpΠo%o)P!Kk%/LŎrZd./ˋbdԶ80 O--tNjp;Q碶dgKaS}_#J}cpF6QKTrL:X6?IA,MTJ8gyck˨K)4gւ5m_ۑR҅xloc~6>XxNB%5YKuذ?0W{R{CZv`o@˞ڀ8ۻ!R%c0V2R!#MpQ9`4;bK5o {$XQl XS5e"t["YbjnfTR|eIʓ7$ω]ޔ+TD'!9_4"M$;g;m>gݳ;;ejr}u{ 5yi]c!@i M4R%(ط8*!>/gd 8KRll^H.} ]y\ҜӺrنΨ$#aZH`qQx}kHF{Ƣkѵ.7Ĺp"aqWlﺜ/t#_M2E޼-/T5q؊)r]?5'ef~LVnFOL3\XhwLl;hGL:(ډnj wwLe/T啠B^We)5EfI9vMS¢ӴiE9-4Du̷rP&745^1A!H8b@ioI'XX+l: c +UՋCȭ9(8*F$U9=ԇ0gHzß~Z`@V.O\D$G#i|Q@$y_=p+qFOD  i ex[wR YAd2>GLl1AnbøS8M3SbY?$$m7sSzocD>J>hF_7<ȨN:IlGhXrkY'!:uvP lipk917dAOœ&l3nm3x-m e4(sBhN67 x ޸}2g?DS))m%I3aʷpPk {'hJy=5 y\Av/ͳ$(WV[(s,3VJHaW;I]e-DK!HɈ7܉dR}^\hE+9+] wS/&̚I${',yS9m* )_uBȤ2@,=n2M}7QkП"F4cJp$[m;`A*l SQ%՘Vem?'UT\7f ,p:n,SfLo@ކ;-{px2-#mqyX^OX_mn# Q.)/.Ub29TJL֢1)En%8Zx_oVK:zR** G֫Э uY;ꡬ=\:^'K%1inczݒ8ȂӒ%}RV;5G ZO,,ghQβ%x0mOC;%ch'juL$/($tҌ՜WH^11$ !#U!UQi\AMN_Ӱ`L`fb Q&#fFx<Mf P̻@I+)`J!0*}Ž'Dǵ_sپPw!tYѿ&qjWNv"y/A;NS@-Qӳ 7x~sťVśrsJ2+/Gy KV(z[ԘzF"}l| 7%X!\$f !Fd(~4_%u`$E4t8 A"Iԓ)Pkq% N4 \m\j-ʆ/?[.J;忦Q==i/vy. 2r=:l. cUE}IrCY ey;>UX =N-'"G򤠼˞A"laFH3 Lc*W^{EnS ޞ_=z% au&$0NF!a ,SƅMR4 KƏM)Pu K źuk8_1˥K%`uʆC dzw⤄V9cxѪV'1 |TGBy,*TPO@I(}1SXd{W{ K)/Teꂨ "k*_Dxjx2i8kA]3oۜga~fӓ g˲b0ҳJvi1rq{:yRtwQOƽ&S&r Cs3"\Z܂ɰ38TlK ^Dzl *zSebix4~\_^HvǫK{qcsc_{:L;|]/g_X!g$Ch%aEqt0Y` PL(jJsS*K2DbCs2]B߆hlU.Wq^4"C $:Ӿ[x{ХSBRǮ`!c IH&:`Rw^9%_ʼnu ,L.UnlLKђgXe @/Fmvr5ւ_ 8z%%vUJ7 nН"|QABiRZ ZB/ƔP+8׬H_MuZM>Gy^Zb{ q} νjoŽZdcԡ[IPX;zR۰eN7fLZ}WܞrGy' Z(V_+:jGK@me?gk.evY'SkeI g)}CyhcƙRrO[].Rh/jג+3\!U 0db]K>??f~#P脴A^xιeeF,LsYqY)n#o,?'`ll3K8כb3Q"󅦄|ԧj[֖躳yфxB"6zJR{ۗy(&>ݔⰦ5nYVu!)Ͱ[%-djq¯֍htˊs6\7i\5ˎAΞNdN {U9TL)31}{C ;sѩZ Wݾ}NB 8"YS>]D礔35lVƖZOrӺۍD,y2y)-[R"B،]0_pVڝQ|-{JfɁQ6r'sXrs"Y 9ߪoqs5`NA3,ۙ@eDG%ٞ"Ν_N,[(w$g֧q{jMBZR]MZƜ{{ |!dE$tۓS ҲStCޚ#T9QeE?Ba KPcJ1U +Űe$Z]-,kS^PV Y dPICnZۇY+\!\N_Re==f8̚ehK4^ɋ +w[ &}E8=mz~h!/EuGrjOʐw1wC¼ zө F+) *C4WȋNB̈cT2m=DVJB%$ 35DR}"\}e+"˖%d2Rn)˩r xrVR^dUot_*E WfR<\Jk%b 4zo6Ϧ 6}vBogXH$20ڳԥ'lGGO?8AmgjruzFŦH"fpe!o":zX_xdwr{~Lk@m6c374ܞsUy2;UZg[͹tЬyqcrnM̅|jN$R0zIZ{Lk3{id.YKsSގ!GgoYaj(n&g 4͵c7/L}%j`cn|\Znobxs;&I-۪2O%MOZz^8O>\)!1_ăJHБ,&Π0$ :?xzVq&BfE߽s qhXP8f )=KXXS7̣\D = >  e2\fJ1"vE0~C%Ƈd{n]6ETm]C|_X1$"q{|sbvcoEBU!8`%I`Ɠ$*J^A,ÊXS Cӎ4C|F%ɑFZ-m9O1;;)-X1g{kRlA{F | ]߳ޚזRVGٍ|b!)"[ HBc瀬Q,/pW`Χy*Z5}}\RE7݇f_TJ/%LldnYu]\.b` H8^MkB`cz/I&JOsLF)kF$'' B9D2ɵ> g5įg!~df%E#pxG{Hbצ;oXWӔJpeSik2R эFk_GẹVUE>!eG?5^`N3sz߱>S V:>iqvCG-ejU19>WnZyi ɔX ° }Lj^6)Ƃ0mI Bn7aDL ym-\^8[e¢DwMrvtܔ`_MҶ(݌cK6u#+뭗\TM`c5Ƀ6a7/,!ۙnn$cLT(RB}0zseR&f6ƃXL\,HԢD&㣘g-J1)n/U4,F"Pry)2F5eKqǀi5]g'8gA'Y&vb`j& : , F>V6Hv|!=UXUB'AGLΧ*t% !ALt@b"GK6|[0\n#H4ݐ~-& gN"P;Z9gODQPl)"6ArT":[#bwñ#[Z[B2Uh)Ktn?1I*0\^U]·e&1VUgx|61/!PJUsAF"qW1";QyBTeP nhzY IFm=wEGy*UWp-QrLjp z.A* Q Tjbr=% >?d)ɠ֡Ld1z:`A[ ԨD*LԠ/70+♪|ofVGIpfJUL~Arc 90WӔ/(L`*M#O+F> Jˤ=YWPRj16&7.&(s7r9 x?ڣr^x?mqr/9 r :&N Ӌ`TC(1H{(܎`3_1\y+>"T$Q:3C>BHz![%G& < ‘mԴS`=mP,)h:Dx+_{s-d;6l1g M#tH+uL2o 2Q\ [#^%ꄀK1>o&s/ȇp"ZdZcYctUՎp٠T3 5 ޷L.+#|JF N⍱2JS\)AlJB?(23!\S\ arGy y#|RAQR%]NT@q/6r֨L  gcn$Nzcpf!K3e fxhzAЂ 歹~,= 5'}[X\T x2Rp7w\ BJ q逸2Nw#Wyz|(("4X@Ĕ i1)4!C0KYQՊPS) g;=T ")CKeXHO7&c>CMI1dwM¬oT4ob_iϗLy¬!<#+٭wA0,HU1&IJ^VS)A"gb{RCGKva8av|27'K v~WO{O&*Āk!L<=]ƘD~J^ŀ7r@!d +bŘQI6[ Faub%S]%N8%t z? m[E0W[$jWԔnKnP #&odF!P(Ǭ)9n%ǦYc.BHqÙ[򓢢(O#>%%ޕal!<Ɨct1ύ; xLaouk\-|ͶE`[ne(B: RRkq44Ao>'CBM8N+BfWafM4;ٜm6:5#Αj󃯈7cj4`ll&536.s|دנD@QU6šƯmDOBQae!4b>4UR]|hB,mx,X##+: UbL5X0_ V#vidA3mW#!pE~R8/fe4)$ !l `nj+:gX.@x-lԔ}P'HTcmao9;իL;{b<;vi)R[nY J?4ݱOb;dA0I h2X6CȩXBh:乞Ow3X)S|jޟGLU!"gPrwgokϝ zm9s;Gq38$GB Ș&.aǏil3*v csF(K<;;J]Q0CԎF24G:j">GN<} g<= GC^c5c P;r Fo@VL,WŚ&R Z#֭ F!#Qb'p8b"Y%v.TĉR kJ0y0S+cprቍjG0ԉ"C'ᇻd,@;J 1_J:%B/W<'T>Ρ+H++lr"WWW_-7ye% ]6X[ks[ʻ͊羻c𵃕9t^e[Ѽw'w4!QeZn;]P~tWCb r^u5q`",&2&RMiQ`g^]GnjKAv+@PE#S6}\E.Uoؘܖ[ rۂ1l%V++jF\Gw9R%#geokәcLGQlCcc=yB1-f9锿pXˊ`ɪJ͟*Ii/v³e#;Wl^PG9rί'1ж85Sۜqkѩk jw=Pm"ƎAʒk;cO ƀf|c+;҉iR=ki\ٿdl/XVjL- `Kx5x_#y <;luq{sxVh;+>:oaK\2 QUZ}r$3Tbq&,z6(btukKc_ۜB=פF 怳":K{i{}‰h+2o&) 4cN+gmE`bT uq YT,~EQj\S;[1ب.[~#ʍVER`WR2K[#s_LCznyo^ip`#oYv$ԭiB"ih]*0/9:5˓cxj:hO_iJF#hЕQf(iVxq'S \_PQQLgUJ*tZ2X;@PTW'ok[G+:m(ǒг~juS eKwq.J+Uem>XI3!_- &މ~dބd5G]Ԗ@YTWf(A37)Îen"iƠ[:/?RگRgU>}# Xgsqsqs5?dqoy *:۸Vm&f-]kBbJO` kRZO~3_A8hºb#$E >$APB=,c?zsAMdivOL3K`#5j\kjʗXL9mYvi B^;`m]`yJg|̦066Z\K,,y4}>Yۣ Q|Uܕũk֫ ګ2HLt$H dT9MBG25֊;*b 'rfnL66ox)2Z/O5qve%{T8o;>Z2nueв:iwcۑ.?ė3 ֋$#5c<3AFiBʸ [t;y21b9haR[L#!.}iyVFB.7?OdQzڔٱ@GQG\ڒ߼2\i8B@ aO%!~pۤ^D`|%:BRƾ6p]}Btm+pU >^gQJKʶS4?ӥ好EGFgҗ?йGf> ny[ \NzK[,5@.#:w]U=0!2&G\Ϭ]/j30;g{ߝ驕 E^29ĢM)c{j.%KC4}2DOrq$BT_r- J4ruԂ+:%y\&Z컻0Qp%NwV |dn~?-;$3)&Tfk4]EO$lN|9-%>&=)PY2֝9c@B{I}zrh:L[:3*SIkJE'r/A\[t Jk [{(V |egp䳀'3pzdY&=by㞥MBA|5[=}`;l\$enzbuPbgvOy'sVo[qv=udeL54..*\d AB>4aée^ǗkhUkˁ@S#/35 g#KJM@@GJ=={c;'hr^LGY$%Ⱦ#nJyCfP:.g NaOuWe/QApx Go4q&2篌_}ȊR[֦ j.rCd9Q.T"H-PK-]Bܡ-'!F9=q)x @QYX~MD} G{|5K/P56&$(h"|}ҝF93pץ\eOd:ȂIboB%ʸykifع&_*W"SKkpy^tFy^\g$*.gYҡ[;>}z= =zG!GnTzo~UQ4$]qg l{ E7 9CS#o6&h>׏at OK %X "DeH HLRiK$KTbPp%0 q̬4f%1|{r=Ãs!f2v`RscdPyBQV'cuu ZDG5Ppj3/SX\)#k(%3{yB=ϴ/zumi}v%zu(Γ"CWw!=#idMo)5O]^QenyX2o.dN>@=;M9R2kungsX /xp@V [W<[I0lZ\K0jSGqM0 9ZIӉ<8>ghnr'S BBʅ+&pHҝFK t.tbv?*>8J \b;"Z(X\w[U^*̉)p%Vtqy N|HkI$5X(V٠>Ju;t9>3:~N+(Cl8ES4*_eQ"&= O<8tՑއ!9'PEX4Mjs!/P$<:v߇W Aqa){ܾy6a i?[K0 'VemuxC`8~zJwNwzjV7[-M.r )1ciƴPIH$zV;YGb{o̼y޲')ԫO'Nܻh/\}g8껛x/_ΟMp |u')Ƙ$! %~SN z_P}vxˆ[ (Ob%*,_tn]p a3,gӴB_6yb͵8A]/_S qoGPix_>5E*618zzth]Mufq֓Y”k|Zv<11C:ُ*} kz,: =H{cWS;G$-W_Dځw=0E/d$+hZ'H%$RlIiR?2_#ԛL?9]K5^%Mk6|~Î3-]pMئN&_\NSƮPd ϼ1 O0Hc$7.zg:Bu*pQ s[/m`qF1bheu%[^^7 p'\{aG z@Hf{KG/,.9h^nں-L`N;:Հ n̒P1G3 GmɺbQȜ9&GW+o1伂*7yޤ[$2ҿµ jk:upC{UrW@ ,ԗ_!9=m?$bruCmU Xu>|U}zվҢ<+8muf6F5byA V$"]e9y6WDcr%FE7^C+Fpƨ઀ԾXަ,\aBunzvoGYAjh5~b lzji <-pj8cw^[_ģxj_Xqǵ WUĹj4tQm8:zr1⧬ȚSnBd_!pg7$#QJ4db hc;h㩋,x[<BUhMr_gYĜfҥX<2F6%;+uGW,H죁J-&pk4,JT_E]Y:RF N-Ʌ7Dn:u쨔 ǭDoK_mtiN.|!z񳭅 :mSM5$IfA 1c}ߒJ&.}dlT Xlر\ Eư1֝g{m9N@!UДTUW7lWWeܞS^]#pL l&8(g%1zF1oSNF%xF1(V #EuhvʴO,Lo<#{6mSuj^VtE|U EXL *@N%jdF;'ÿE"8j>Ea@hm'63j&,+1W `&RG(-8?#l%HK.D/k:@ UvEedAeOE&KUC;ҚgŅzNr`tfk6r 8ھ,j hMßI;T%fcfC!W_%x"cZ@kL&~nt[;gS|L'հ!xyIgY~yWFIn=k&b\Ij8~&yW}D;y6U)JfOi,`0~ 2 .# ~K`dnfgaϨC9vEB;[I91q@npqJ7D9El.ONZ<9j1p?Kt3O5E-Z>;z}oȷUOѤ\a][xs4) |+"&sJC6{`/y'G/&i3R,h9sÖD}tP <@ XMiBy6gr08EE33t;\)4ĸf4=[Xq'3)E\i0+DpmG=lMc9d89+E*$paķ?a2q9bEɟÏ-8?΁r7GC!&/zm ܸ U7l9_d( hQEb83S<_mN7K ۺJpbMCά:!ow}v p BĆ`֢9x@LUaloi$fɳ^6/@xқVEZI$בN:wv f3g R9o@Qu_eݍU[{BUZT->z{#z>0w?xv%#7# 5B(8~MU2S7@OZt$̰qQ2KB kyMUsoo:nNԁ\ρ <ݘ&7%Ѧ^osY+'>ڢșaK λ|b^zAMJdyg#[gii"?yW],ϷUIU*[{1kR2v|ί[Yҟ56QJ<"ep|0 )  _KvW%rn`>}+Co}Wꁆ#Qߕ\s}sB}Y@PjB:ބn&߅_{#X7]:oKifd\1̉Lk.3ѕ6P=뱃v cm⧐A'l @coR`_4!!@GGn5ez`=1aUDpwDGǷaԧa. x+M6fTS pBp4.ƒ뱃Ca./ԧSg8n0clCߒBg4i΁RrA*2SˬOON?0Oeߓɉ&>d։3SgsL{Lx4or2cKc7}ewW`b .p%^SQaL?O<ɤۿNBV\zxUz1<{e=#9(d2U|Y_ywy=gpouU sr^USw0kJ;~? cÚْjݙs8E5LEs<nƂlU+!FE;1b PH<9N5e"rem xS7֟=p~"G''Bl (xLԹwA+R b:ge:J d3pTƸzXi`gŌm{.vΝViFDbEB OD7a$0o-ovcr ͳ[̰􎝭DRjNv+W/m+je֭ -^IG{z\dM$FB'c?v)F34a'}HbiDD}WK@ 8ff"p.Ʉ:GN0d ڬCYIl#!Y(i*k mo~r!ZFQJ7 @j8Ρ]me2PD哺)ew)dˡ ]NrqARlr%QV,0\5Tؓ&a9qf er[\GMVj`"u7:M(x)RQ&]W 7q3eS&p6x*:XavئDm^: i 7 v6 0a{}| Qg ɿ̑DPqt|هi9T@opϜ @,1sj'Vp"KgJ1aApXNN Ҳ(43s)K4響 ޟ ];p̏mY)(e`(9=M[~xΘhAcL 33+˻KdUn΋F,II=.{{p30ʩ(y.WP'66r˟=# w4Ud}%_>:t޲ORܛ_ui/\\*h%PA&UN+= #,gv1%ٹf^roNo젋^@ 9kY>m%Kg^A;FP3Y!_Zk;WAeѪ}}hj~$ܳܕ5|CgŚPaZOnJ1:R"BX+.Þ=4ٖki->!J!=n;R-H׸@ALYJ-.:P*Wz>%#$k C1Ff,p M=WQɻ#b@V h5i@U gK{i*:RO޾ћ~m_,?VH)n$sWrIR}Z GR >XJkZ(֊@Pġʓx EaX VsrL: R$ R+ ./Öa3EQ ʵ3h dl@HHMr##H)_qB DET[gT*l4bRDP*{85.Ǟn9Dg`3bø 7w3ff!mJֶkK捷7#OEĜ%mEkڂ5Ԃx*K !atN,tW<(+ʄD5h"G^c)/))ɗޘJ-Zzsf:IdS t_c5RʣiRumc]GÊҎ0kt , >6g9%%`֜P.G4:seb-ff='qv?l,jsPJg6}}kc!^\߾ktgh(wFdFw±ض-䀰!c`{i? v8k 7SS`%G"axĬ*ǬjiuE^X!H.}vM \=?pbI"9l dz^d.;dGnXuV`a|S2=DۥײXq?a OGg8tጭe[M;1Vw`GGpyrU}=6uAZ/NTflY+;fU}2? z {6=܀U-ny39@ܴBCۅ&ơT%u}n<(7U0V vfQQ*„)(<|4,Ӂ4pi b957|Ds?N 6{5NTvnS[\LLA[ZŹ0W2v˛v+8hQZeV7jI;P tA6->rp>ػ‹9f>.&Ҙd9,t لu;Xڴ=[^7l@Yp!ȵ?b7LSS!2+_q:H/̆RgQW8MHvej݊[dNJ DR_4DM Mc&{ 7Lمn??`Q[̾֊,Y*(ؤ}vo { Qv5ޒ;6#ӣHG 7nS7'@DH-^uA=_u2'kc+ /wi3,'mm6mL̶ۍR 57R.CHJBq?Φ6%EPiYs)Hg+̪`up_>2ysCqB3%z QI|z[PEBH PZXK(B|e)ziv8|;Q ~HfGͫKzoYrӤ$e<>VѶJ;^9nE1O u,j(m&+w4>7mN6S:@'%"d.ÿ{bKB[Kuo}}jp@`[x_aK1Z$aGAwV}IuW-Lb[_,Q3oDsPDb.J廙Ѳ8!-v-wjKݝ;<9EԐPCDv{p ;ӧ2-DxګGN%pA[b l~ +7C``׋릾n=Mekm*7uyM]A6=΋w}`YƆy{_ݸ]H[ + (^ .Q,+$`hyjTplm۶a]2R^,xX-V~tpQ0N^  kI3ċBnOM 7IJ%)${U+}c 齎km 9 }GN[)j`vZݲuKd\raa*qR{IF;G4ѹUU/?^>ݵvuglo59\K:c.lPC,MƒH;Uj͒m[-h__KlGjp_2Òk) ";A^#Q@۟ژW);?XN~Ls3o^^4NnkWj{A^YL<˓/ ; $i*'A /jiڒZw#Cb]ī +]5ge{Gԝ`禊UO8y2 n 6Ze236DFxj`9'5YB&oV|pqހ6XTaMehx~ą^R퍋]`{تuz:,@!#g9|R9Sm6Hmz\H5&;.^PY .U-D_ =ˮLX8&2C9ȭM fOeulҌžWZ80X܂}WŖ^ߒ>:~yqV}Pk)kgۈO@UiealFo[kT}9g惣y+ 7=is>}PβycY`tApņ*S[Qǖ67=aGQ?͇{ 6/6e[қVP!=ּv-塾]u׮/d NzDd4cL(c@NlHMlj5 %V f5YUn8*t竼,՝>|m͙E@yfy]e1Hhp6Wᤁ;隗y| C1p+h=M}L7#C{1|;}/|?7 >[K@p?@[ќ[7vhgQG%E@E{ԃo/)̓ڷ_cة5 F>c]!ԁ+,m8Kiv܉gvc֝C<.-\>sMpb?S*T-ʴֲDqzkl,{m9rh͚eẰ]kؒ7 |[ZL\sSJSS@3U>bE_|mwHTk P{YŪ:t]]0,,<^Q;&Y⬅WYDB2ս:7.۶`mPG u]y'Z~wSJ-m ñN,`Z֎:l4A>ue=zBD(J, Ⲝ A M ^Pq+2wiytm__ P;ImuY=I-T1x];F.gP[喵k(B'5#ˋy)J!N!O?9W4( 1.<$fLHpx]&P~j'* ,9; Nحp"g4mail"jzXߴ,x5# 4-+Ukn);NJ$jOJ*%ea2m`ۗx]HFmn$)+E׭JW\I!KZH,ܘey^ڮIɲEr)Kxj&ė5Xjn(^Ww+ivoiqS:#b|m[4Q(2z`Fv$HYPhU(n!eo4`a,Όx[rյiy=)^]dHְ;5KUu)HR&:iϳ2J=4R?{ ^zN8!Q1ŒϒlVub$Б\4{*r]En%C+vM:귪dLK*X2k&#5mk*O(V(.N}GjS,Cp'k,ñOY] |Sg>9M&A7x"tA- SRp$?aT8G5݈S^q;;.ĝ_PhVm" (\<_!Բzp"v6`RA0:{3AֳD@9T)؟um\\:QF$8Nۀџ7N֘2TɡY4/lOr|_^;gvY,o'N~!6'7Orygs, 2.Cqr<ݘw .'e)kB]zu3Ϥ)E.M J/fRlyJ+X6J'\L2.UŘlѶUl}^ *:u~s%+v'+RLo$K.$cʩeۤz [m>q<ĮQńVJ y{ 8N생Ե`N !%H0J 8`(e8)H 5 ~͓BoFQ!W'݋ĬzcXx:@G'3lHόP:dcoND~ž_n>e׀O%+?ً]l-8bE׼vcij @p84}4?y7%ѭsh6J"EKұIP:xK(ۘ噅x}6#/4Aza'x2a~S>Y02yhO]9BMPC~yzW6TޙWQH+G lI2 a 3Y%:u\bN䎠_&K*4_|aJRE'ПMԢjYa 7Y 4I`8K"[ /el/\aI;ݜlOJlP,8#/m-Fm1Y"* J653cRFxkxc[9^n&Frnmw^5'rFO~.56Eq2'~)pi:;e(Htl@ӧysp7J @M}f=Z?8/ ^q:13 ̗qF=@g3> Ѭ!egk驵Wʵ N+mQ(,)jǪbi_Ճ24f?{|i_=+V/MfUkcp(=ҾHK1]ԑ<;]W&x<oyfNX YX7_\~gvUH]r^UkewԿAlB *5/[\%}ހkv EolЮZgolZTyώ'^H3/'%ćm2LM<}2QD,a* 5vXpwo߃nejN`=O_/O;=j"G=Ih ^b@z ƲwSDyc'|Ne$ݚ2e&G^lQ ?~~ [Pn[-u$u)p6oU{Ė8YX~#lZѼ'Z2B? mٰe¹[ =8cg؇Ɖ`эۿezbY~`L_eʹ$_~hIޡ=bíKzzk7C'o~g5:Y9N]z3sAĥ@ DF;CFR`@jk>ו)xӺƴ\h0ڪjheJgk!\=Wܫo5 EjNK\*Էir67 FÒJu'g0og$@I@,$ p#KȅK3x~7 $╤O}pdhQ8+}z0 KYK򴢁vIf(9S]i֞k3YskW$֞sCnp mio)q2HuRyNҨBBi6X7 yF㊊4Ր.-j` ~7 17뱫Kй=iX}#fzf=܍x6Wn`8aGC+ ؾLKIbⷴkK)Bmp})YDe 'Ul9W3]gDWLw^i;d~^JZϞ-u; {s,GJBfvt`J-U:U,Ӗո 3}mnw3~*H?9s2)#k)_z{ɤ LLk"&SD2.3Tc& Hߟ%k06vT7=|H)S KPO .#iglGɜƊ:n}kd # rV6NK} 2dsn^*>{G=klp⸊n :ynqN#Y#!c& \#c9MR{]v#jl8(ex8GKr& 605a/WK E3:0vd7:C5n=uxˌO[y<)l`c4Rh S%S)Ԧ+@- cpHs N7!>qA |{v\tBy|&|C}h.ҩS@Vd2!2 lђ~e _2>%wsW[H1j麮`iss@*םkd<\ȭu*ɬIE;fJiv(Tl~8N,Wm"9o9b^}RNM#ǫ89dnzuԬMKVETXQpe3z(kS:f*zSVM=e†-5 jb܊>pI(wQ9k_[M[ܢ q*LAHɏ%S1(V"P*$ dv=P&6Fl®gs݉TMv*iڮ#C!DMė9 bo_E:/c0rDͽh.cs@ekeTzUhi[挒ꈕ7iRr9EM`J-VMp`6kxd)GȫQ o{ΑwanxyQ[~H}vhIz @ NozO>}wʎ~;4'ngCaQxC/<6C2٤@2Dl6j 8CT>N q)_#։RN,arjqY.å'}V=ܩ[.` q>{^]emY˒%Y,yoY{xI8ٛL&аihK[:h)FJ[^ Ki|?^Gн99~&މ=._5|R=;Jz'bO-uCC̅BK[BҞ"? ~^sm/9Z/I'dX<:0>yK*_w;¸7/> }*Ǧj:vʖ?%=F堿m<ثרIJBZ]з ڻhgުJAr(e"Jދ* )ۇyR'\E QF!ypGx[#`LZӄ!WB..B7^0VC0XIlҷKrKQdBlJu+s00ԻIEC: #ۀĽ]` K| N%G<؜ˤfۤ:"-6Si\ uhL*As]Rz~iːپJsocFm_7֤OHmx1g:3#]+r5Aߥe\i>` s` BK-KyRLu䀯2}Q'Yk3L]2m O`ܨTG*^Sdfzpw`o',c[x}xAGaeER1Qj=HL 2hVf/4BjLD 5q:'? lA4*/LGA];rew:-`rX*Fݷw#DkΈa Gz JC)ABe@_gxJ1w8!Ku Yej#Ax-x s$Jp No,ϧuBתU?0GHeIS9ii?K_n%RΜE5X U:z҆7L~\|9fnj_ %&-(b%::4SdEPyU"Bc[9Ai>'_g2Cd K/ |jYQ:L{(f*&?o>MO ťvfxO*1OpӸY'>§ʊH`XDz23dJPJ'e }czI'RuL #,zM*}DC$hTEO}PNN u2& 3 Et=XOBLnlwO$S^jVj3dX _:It I%J7ADb4x ۓKC${c,E6Ƹim ?k(1Qh,Po9Srdpx"\cq[r<LN133tNg2E0dZԋ9T20 apQ`hQD3(_.FCQ1љ W{lAĒb]Gv̖;|*ʘ%;E3-N3|qc V\CJe#9^Fz¥E"BPz;{w6UE#_i5OTzef}Ttdt{0 ^g5 O"&?&-p'g,N234EU L~xkΖ9<6u}Ϸ&6!=ϡƿ~t$ӑɢ >-{x2"ȯ}1 7% u{>jj]ެch<* 9j;Z2Z3+4&vH M' {F|ޠ3cut緭Sљ|ӳ`kȤ %[lS/snjzTT/oF;Qjʃc(29GgOO@{b.|JzI7 &d/vLm󮦾;6w:VFkrH%@NpνCJ\5ra]a +C&ozo}{Շ^QdJn.pV ܃ʔWQN))Tu8B:svm͖ٛg+sšC\aAvT r$(j(3Tyb=mFᗥE~q4t[^.PIdq7:|6g1y/iDeawR*>>3䯜%W 9f8'Imՙt),gl(ٙon/eUB\ĝe3 {xӐ-z TgEP_(&-{oO` Iñ"л**@?Ǫ 4 L[l0*?#3PZ9 q8ZqUl\C^@LjKsުF*"^SjkXCt  xq7SsLhS7DBYL F]}(vV>};X}YDSCx>0)vĠUΕG"=>L)PXr7Wu+L?zn)w1GePm%O@~1h]nT0dR w8yu qdӵ-sh9)62־pK㋷4Kюp6 8LD1\ ;;XF[HQ1 z3z tBu0^J@\HO=vSH_>'Ba~>%?>I2\Ȫ}/lO,Z`ݔv/zȔͨ/ 5o3H{ JUy 12 cwW:ڷJ/{Ǿc\ۧ.o)FTd5ONV[KWw:GWUftk;:\*άfh-Z T4+!< BhP&ysw^=|(1>eˡzLY,>M 9ժmLYZf 4]@b93lkl";ĝik>F ]WxQuGQDr oL[[j<2b7` LĤaCeS4<\3^@(3&`l4;C}z={?xvt3~yi_ۧ߬ R[y}=As]L"MTV|E:^mRlzv3Yj/؞CfS| l-jcob?=[ !mGpD_PPP&'h{wmdOwMJqA:/5 "\b{xTN}%boW4KWz""/HT&T@}D<i+"vA>6Ÿ54 {VG|YxG" gUpN7Gͻے$k x rn=e .SݝӾˡֱsyݑ[4Q$8j7W51H6?S#S(66pY? QM edI5V,XT~vj2o(d.:qOs-/0Ygڒ,9ϦMzpݽýυ-iEq=>#GHiH|vi\yτR3i_W38T±Kr7獿0GkN7opS-C!Ffg=Z@ s1po xg$An_ к3R((m{ \Lp(/׹?h לH%)q y?qpX_TKOl*V3o̓Jg=*Tܿ"Vw O'Ɏ(JZ&,yJԗm)E-Ub)35br49UIȸ9T<a}jPg t:Ӭ6Yd(:\D'Vqvgǯ8Jw\Q0I;q]`oP&!~9;n8bkb7],E+sXw ?[ _}.xDg.B!v;BT@40$!S@DBZwbbwr'GОC>߇HLpzDpR|:Q੎p"+zc7^zָʦJ3UQ_~vVb\pv[0RizZ}w{ e2&lA_-46]NDRҒH@nzc}EOμ@]Lv5 Y8Jw<聆7Y_ko&2lI,noI%ķ¦?w޻0ny Tg tcjIܨ _dЂ8U::%|Xt~@_lʓ_ر އDJc ^K4igk^#TmTL+sJu'/>֪rG3kc_L՚mB>֬@k>>D^ A'*p@U5; WBD*t3pe+%\Op,-8Cl5u WFcf0&G#barC#p&V|)b^!1* I&Rq-ۡ 'CNHY֬jK&ѥQU.ͣ@,Um X'O>x7$|w_-t#"WBᒱz9Y̒\cIvGX>0C 83!1jIŝ*~[A̷+?fM;\ܶ@iG^Όv֪>/68JnhյOmК̽yq,7X0"_ZkZCF'O _qPXFuj@i c zG_:ol.f1ͺpWm 슫,9#Q ]~I^XW$Bo7>AނG&kf:LJ-uY9& 5Xs -vom`Lyˍe}ِU`$rW`(̩4fe+<&RUa'RAx "l\%* c$k`! g|vG * :G>JF YfTJQL1U^BB'W<@X)va6TLĝ+i*4|`X>qqTOZ\ō.eVk[FiI)z3B* ck+XbQO㔋1o">Jkf'% 4džĜpO]^vqVLg0jWy|DD҄ PsSB1tyF̎lVb@.V {/Zw̛cqa :c[g܈qYg`/x?{oKρB v)Eq' )LE!v۸XITkwU2MCG9Y`r96TlI!˳4đ;gP8 4?4xdJ) oT  +,coWW^UA.(ژ !askn+V!7oH| \yEa=,U9S{i}Re Zs=Г2q.L=RP;2֭ Jלls&]並ʡ>cqv5:r=f*wil1l&Cb*nvX h-l% cA!z:qoBf‰e|zP U㯇d:-tv[ʷ=:yx^fk,yI[LX ;ˬ$L% Mu k [y*T1ޛFUyǺGܟ<^,i(T4ˀZ{r'+et ೏H!ژ475qR+Sg"l8yA:5C\5 1~7Ÿ́vnĊ BCPۍX:Ф7H%U:f~&AN%4=t>;.Z兴W%ag~@d4:T0ts5<1h@  vm DuE (r"M@}ENJLI(ޝe*p`3p&8eBWW]4he`-fi]&F谽A+K8:yze[LUAߛy4G0߄ 0t&v3|~ FHM_RR!\fH fyM]vJbz*^VVI/R}}twO e"(cn'd§<KkBhsHo.+"Ѡ<,cꕯ.8R7b%4g){8ّԼkۻKlt|k>jktarg4=!][# /a1{?5"Q`Ml 5}-UKsY|kR .5v yCFb}W\E#hAPT18|$D/V)/;u}^]?klNK NR̫CdgBS9Q*[8ʜPoSEmhY8*١|R̲VqVf@M}M@8}؅4KrI-q䚍y]U%)*¡rX/Ϊt& ʗ)4rhrJ'+ǓP>6jgcBSC^#.Ty<<f+m Y, Nɿsp=O"0#*[vEQfg+Z>> H,F 59͢ jmb6ؼוPrfA"ٗWґa"nTzr}P׾!UWg3b>Ev@ܧcˤ@W*+.O0ZYkzrTf{؛wkLH>5Bs8| gڹ,qK$#cTB:h ]4Ah}a~E9y32=o!b!Z*9G&E$ 5"!t6"O g=xbs u2nŪx$V{CmquNVxO϶҉r%J?d2IrrzcrST_ғ[+:W=`3^7scS)x| +)n "&AWJ537X> T|8`kv&VB?ԑ܄Q? %Iˏ#G+`7^hUE#b?K5zrZr(>L)':JNNp =]oB\3qń؂xIK|}(pXs^ižÃ 2 oGu08Ȧ.@UP`t ɐL~;KukMW@T-";. t q*tԍ߽:JV'{'o_$k*޸8׏ 8&0fj0+aY!\IbȿF~OBӘTH%xyxb&>y$ nH4z 4s 3X2&DfPMp1nz}!:e?32#\,Яlr@h #($p:`]婲x Q3ՙ< ?z#%?-$τɅFy t_VH؂IqF7X֋n' Dev§(6~-b@FD_|¦/kВS 3紬.kݝ =v'&NQƦzۂjm9zKV7[מ8{7_vjPAcUm]u _ ="f?Xvnj+qLb[VVcA Z X)) o3Od7J35"+fm5ԁUB[/^%}\mLŭT(xo8qBzЫ&2ktR Ddouu~#SHjf ס:_E ʮ]JZ@шP7aK%Ѷtm8y[c 0׾\e4 SJZPF?WIlga־=M%~d ?apsq:O{{xCۦ^De>b,O YI$;XmMK#Z p K73G4FF6J> $-|Osw0ahoz rPAB/"6q;kb |?aPp hi{I3j{ g-pa?nn+uL`scc+I:hp{UJg2Y8 X!%sp L<4m|_jn?ҩ0$w|5(/L#rtʗ7p. V=jzUyw!-L,*f"1⥲aB kX"(8Kڃdr%f AFq B^h ؇G7B1L;݇w>2*a: E6\ nB'kMV'DQɯoSwTᐷ9LcJF1N;mہo͖$M~'ߘEpGѼT b?RL_7:%5C$U4_ի\X G…)(.,;tMa8Ymsa<kr&%ZXĘ_eB(f||MA]W1;S_.Y15L;b9bBIkML_lbCܔ%o*(۰^iIH"%swgbM*T;0ڛrg^t{~|!vx(ѽpE2z>ŸH"17gIuY0kz;jύ$wijs9Gw 6nh?M qfqZ߇oiϹ|x!/" hqw㴴d*5Kptc[ $Ox$E*r]w+}L~yˤ)iJm+$p&iTPlYWf&q0 4uJ$"O#;RRI(Dbefߒ3D4kcSusv=iT# f2lN- gY{{Jc5  .dM;/ $98*pJ+8Wwؕc3ٵsmYΒUL(0b%C^V֖y~-^KQ3}jqueϜmRr 'kmK(=8- 8͇ >槥%pK IDBTҐTGaOaI(@6Kh _eg20ɕG #=J ޴|-jSz}’n.GHˍRz4pPLg<^.Z7rS+qe"PRAIA"iۍ,LD"@$. yOד)xN $ q頋 ME6͑QvU>X=\;7gOagb&w>f\M}g2fφ9F;Xf*.޻{D6e;o37E, oO{x"t7zks8kl?6LxG ڳ>Q5d v|{hWOAiyQT\§AOM=h1)baJ=}G$b`Ii("kI!6]杸md桵[~gOI쬁뤶|,$qe|m-sYrC}hSpû޺Zޑ*:حwp#Y!I9 Dԅۀ%h;;Š\1Rl$T\oz˥dO NfQLՁ6+"s[Vmȝ=74; zh*oŒ֚ێnjo8|S @DYԗB {l[< Zغ3S?o(]loۗcKVnopׯhh0b*Ĝu lh6`'Wi,sЉ$VHJֵ iY!3lEaAU6kt ʙn2e, x0 MTz'[n;|EPs<)!էc56jo;RYĒ\#]m.!?pCQYO.>V^{ DU" U,A7aM=Ȗήu,3@7QF5R-`ӖTh[f!Xin1Fi<M4+@ KZGK:xӚ3ؕ(q[RqLYwU-Xҁ+hۖRl҄D&/ѕ~%^^y@ yg5ya/_n{#\TjHg:x)P9O.~ 6rrWx_x8 5",|TviX` d_t%+ǣ4?v<%Uܘ4ވ`%$a7m71+:JY\ߒ%mnTyV^vŏ\84ӲdC |]^{6Gɀ.ΟD_<ѼOџ>؉3N \G>;~~|$HcWȋ S QQ_(_۱7}Ix_dn:k\l:]0}!סぎ`~͵CÒ]{ !xy)vEIy|hl[W+YTkՊN0l`.S46ˋxP(|xKG>n;ux+OF+iI$gqj#qҽ)11 ZP$׺/âZFf˙"eg`35| 5:;j,Tnm%RO\rt 6K?/oD ufۈ.ЙQ V|fǷLÍx́'2"Su/4u ρ!e }8A37_"8gjckVF[Ցh+ P- -0z͉N>,hLhE n{JjJ6ݿwu5W;N[JKfr?eSCg~HU]κ% TdWt<QRF4uֺ}@Q5;Te1{ulO5˲Ƣ,Ym޽29^82;Gϯjfɝ9Jg^G sr1x7-A^fO{@ж+Я 珣/.Wr/!rwxxz#E?|r<{xK6UJ:S0Fl)K%r>#Ο\ au)~@\ ?|ܾߴmJGDftզ*}E;y~Se=Pkup{i߰*޳(V ǀ| F=c.QWOs<|~_}^#A97$aC9 %J썫Ä6 QwmzWx/`/I3Z|uև[ ڢ ދ{Zŭ0W㯵WcwAo)u-`MwQ%}ȋMf%x4<=ѵmڻDZ^t-w wbO|ʍm:6C(.5&晥L ?[ B6M㪝DeAʾMxe&nh4C>APdQ Ot3uheYs0njr\mk .k>ϣ97p 庾os:6* 3Y:]m7 = &|Ѷ$ѽvz\R|I8cle>!B(ot9~Hn [nynTվL]:GGP3gzK6ʝ%& r]%i[/}Ug:o#Emfz#ec:Gсf:pн@Ӓ%PDp5>aeU }w:U,5DShUp9pg@1hٷY(%$3yT(40JC)+~A w3 ?dɏx5 J-# }0 bP9/$kQ*B1T ]: %LgCz|֕%PȁJ}mj4Z@>hv wL$"݇a@Ur×*ў߉vY$#T+`g';]>A8/:)\?%+:jOVQ>Q]V&jk !(sʉ'W%4 k6m C_(l\%6p~S;!n4bԚnd ݽ0y;eZp??>O$YqY' C%"Q,Sb4VA^J? ra1@s0Bnf<Ȁꥭ\Xbj1ODa5 '65Y /]?xog2=Hjx%; z=E y/džu:@ȳM2N<l,q!+J#^~#h&o a7ذvDՖxعR舧Pk%&j} \襒lg{ɛVg1-bkN{ȫ,__c/kғYwCBe)u9aوZ'-)ҭSG4݉`M Bi7vYA&q[4 a"7#CT&GU!/[qZxu؟^Nݕd I YqEm}SAMt.')kdQ1`82B sB+ #v$%\eL_O;h瓛- Ow tYΤY9 k"HPC^"7DڱkVzc|5_I(/ ?w]AH,:*FIS=p-{8 .MǞ,Q[_7 ޗ*+x3' TRi]mjȱ=S0ͬBk`{P}L%FLH<13Q]QM嫶_Sї忾 V\)^~һtEe냝D#\d9:buΆ D鶶]ΊDfUwɳgxCT~}ɼv˶ڛh( ^Y4J_%ŏK=GV;7794㋏R{y:wm{/.,-e)l:kR=6t44pj$t;7MJ?(J~ +j׷%-[., 5y:b|ΝqN@BbmmwMAm?6|~M^Η/ '6-Jȳ;,<3,!.3s&fj$}Vz+nN^{OE .hX.ot{b-ݱ>;) 9u{^?֘Yyfџq!&lɓZ/L$a:f+)S6@,jdԆ﫛PKу6z1Z6է)ȇjb/w{|vyEDe-܏+.ejɼӅ%h.U0ts, eF5~L):۔5(=caٲ757w9<4TᲶobjbhٚ_ߋ"oimg/op3G{ŵ1LUxjv?rU꽩]-(jV9D}XamK]xweyIoSea%qgk)}~0S;Kx3^0D+wDgiWY3l-L؋CzD#"'IJ,+flq&ޒtDre1-rRm@mZu$[vEZ%_և GiPKtT)y>5&_$F3"VVjO{Ɵg[ p29|-;p{[8oq%Sј"řUUpH֗|iۖ$KnNZ>ErT<|l=A6W|vnnpO[p߼ cliE1$a(LtʆhEdL/Y\ >&wec6Gn鎠{ N!9Z=8 Sw}N&i~QҩWkCt(RQ>? E{lc21a)8+ d~7zq-ڝ#Y6+GB]w=e>NFn}}{ldåF44YR M;3VR2v\4TQ3o@څ܉H;c4$- *,Iy6Pi[?ryCB`/o8 Dzn7Ǎ2We2GZdid}W{M2(GO7 {}NKyjÜ?`<7y 8]sCqBgPup*$X$Mc쉽O<%ڼ?ur(da 8Kŕs+w \tXvx QxQ7 FFBŖr!Aأ'8@'1Y$.J:PaW[:!/82ce# ZrjpF(X¸R>RK&L"FOR` ~E)ةtQ_ TtI7_f|&K~٪xx\NqqHYez1^QcW^;1Ďu]4IOjUZ GZq%YLwQnLlb"R^D]%Bu[3uuP֩%9ߧEL 0ǝ:^?u/5*n}'ӻ&)Twچ,и#KWɦN RaySҞxN~8Eg emu4ʵLNZ^p#Ljμ纗fgtB[6zMˋ- e"Z]ʗEe|C\2.e~IA͑ےΐ?˚d|Y >V]G?@d7 q-]w(r\?1F0jPo,rض,wՠx_Nέb`de9VԷtz a@L[2|K'ZV(J_cd"7~{\3U f%B *pY%..MS O&;hL~!im@Xl28$o'`%beK"%0˩/AOF~>" *0?B:#Upis 5muʼn6]naU]"%6ZոU3RFM]0ΛAMC:xOOaW`N2c̲ϰggr$,Dj;%o%°!K9kUBojwNWwc?V#6t59+n\-e\k,"(\~k7\jZ|t,ۅ Y3kw]OLZ2rCpLd:#d^{-p>u;} o3}_EE1.#NE7"~r#?YEs?M7{ǯ3+ &! #wWʓ}!(m~cj~Cy6#wh暁kK<XU#$SŵYqQt'?~wj Jwؑ? Кq&x Bb^Jv7je"tjPQh95S8zGl:6cEF"bdZc{Z9}+uE$9k~& 0}YS02nn|&顁b]nYS`Je<9_!wmAD0"b%Ԩ)K) {ֹ<mDΥ~0,F*#9f Gb*(&/0{#;=.ZSA+ۘFTmJal8%h_ĔQȇJdOEZ3>>Ȭ56^Pn^م2n5gוEm?~nnZk][3AR,o%ĝ(S꭪V.3g-5<* ,ڀMiZ]]Wl6+Y,<C9[*0@`X!&: Yqk~ "KqDx?ޔl՛6"F6kit"#)QeiM~x[MK2^_`p65Y&#W`̔ly'6NyӜh4BTMѴ?_߮j`d1~BZJ #:$1O;<м3 i୯5hzU)kwb+֢;x'~d MrU3xLOqk˗j~+oIxj,k <s0}O'Yp<h7i}SY[[0~uZ;0rJR9Qh{L5J Sȥ"Ufow3Ji,/oJesL>%*g SlVsU>IcKYxX\S2j !]W1WZ*e^jB5mky†IH&Fxjp h2Gǟ-Ӄī-h8lq탥jju&)!:Ś M\UE큱-=Ѩ\a-)uɸKMKȊ[HcdfMT.]+4&z$Edҕt5:'^Η HھTLr(K1ή4Kk6B9^c)lDmP""h")+U85pOC}pY8GaF*DGD: 6ŅOg֒b6k&`}*y5zԈ4F=!'!fb,tFJEoOquN NoT$b( TS$Ө!"$NުbA'w&47}Z;r1_}K"ʹwB&5U$ώrjYt["ݨr\DeAMRۮwV9j;hL[2f 5Qd ]yʛlF eJk,RK1K(W"^wN,Paj`G6"Lڐέ%\HT.cR DQ>aI1TG u#Pnx0xݽn+MxPoᖙB+bY=\j6P0T0f7w%*uv88l\4/8mA *9ẁT#.^Rt,)j~ [ĺ~vJl7X _L8`A~9ɺd*/c; LOV+LkUnޜn P?H0!R Z6P6u; ]\9>gg{&VZVe Z7q?^Gz{[X"LerAPO}k8EV v½"ޞ0SǼlUYQ2KhGKQ֛?Re8)?<5qʙ0NYV(S홪 e;%r1Ljtȍk,pxۚpW;%jݺ,N Mno1|ݷ YO~}=t2e>`ҽ [.KW5: t@hZs=RrY$[)$oݲ>o *t{Z--{ {{]o!ru͙ }t^eZLvH k3]v8GgŋdpHvE-V q-%$W%[tpלi ~Nul. ¹#MY2Tif6([,Ma -]bDb%TG7V*+2vs9dM nYp~-T=؋{≁|yTdeWTc X<]ag`*@-[3 26ԫV/Y2Q1$%Wb+j&r5^&TcV>oRǗ ғOE9:· ^A(@L=HhvUy&7>* n_5wS>/Oe WJä]WZPS)Z ek"z6a?Ǜ'7\=BOlݿo0쉜#ZaS}}8ҕtOaӎ:Zkn@"MAE—pekj:~_ 0e#};eQAOpUg{)vM'cjwֳ \7t Yu17HaE_4'Z8T؍IDk>g_|*$KI1Uun^fe8p%B=~gz2'&ҰP髏HW/qZrT<|N5~1rgmGƭϢo)ns9-WҮmc:<<6%!y.Mr{݃EKew.N-vSv[EFuf>H-4,--¢l+W͞D+:5"\U Muː3v,N<].M?^v@sEo~/IߢN]PE eѿnFiA+fheE1\qI LPgbS7]6g{gdqޚJWٽY{Y"^ۼN!_=sK5L+ J?lp.] Rp0yʙC;ƮRM<, ~\}=_?q)]YܜYS3 SC_6G3V7+39s&fWa!A墥}mR*~M}&MGu0 fc6w\2Dr4$ P]_gUU@o}ڀ/#.y(GnP>%99= G;Ci^H :gUoDi=31 I|KFQ $BeL^W ce#v~&w ȇ]rz9i\lZScM.?,*"lɍ2w5tAip FzKL]%<Zx.QTVlHT|Ut'-[l 2UBTqا $譀b~s0^Սe*5VT*tm3B #Ԍ"iY$o!#D* }A'Kyq$ 7)%vGCACBqxQOFt@GkVZ o-kġ09-/[vi9^ r!cIϓ-_..(Pц]F.?@1-'_YhHe}0nXvA3hiH"3K+[tL( sY٦)bV+HWx7c <=[:C:UAw]@xyZE,} jZI7sGފiS=9r#iP*/n(K" BvCQfш|&dd?>܆pbx.L^5d) lҒ:i !b xq.dt~ c߭-~fؓ6l6dxf}k7wPsͧMeʫ"iiaI@$ZIB-˸^ˉZzǕրNf㷛cp4&ܪ&TZFC# ܥz Ij0-4оuNڵ$4A̦Vuޓ_>61Kw|ˑ Jl8l\<1[ }L~ҍq!0RY[R 9A(9(kRm[2 .!0jZJAHxrIgm#ScjZ`r [e>iSX6K5*j/:6"ugŤ{A_KT`7s췴͛7t` X|.W$ smmp!Q6UY[oS_ZJg xuR'I`\>*a|1Yϴϓ? <{ 7M TvB&њWV$r0HYX6Y._ ,Ғg-^@Ğ! y,UB;={NxQ5?_")#bϺ eM՟X ;5. r<6.Ymg rF1n jICue]icv)6V,nsZܝZ<EɪO5cuζ߰{-@~Fx<ʤtzTlL%dv)N"+j\.T2EsXs9|!߮W2Sᩎ psHGi [2D+52)FvpdR H{vO]}u,M%8o rEAH9SF}j|Tn/$ޚ$<,s ^07%>.t4mwnK6MPF'GO5,\d,$JJJEJ Ad4 0v.U&w(l1VhV &<;eN]7 G3W$~|C5Dn]n6wkXww ^;~;y'LLw]zf4o7r9gYтhd*w0s1)1VLR9),.M0(dKY`-L/qǪ8b,uc1'KnWٮ.= /~(EZ ,cǫ8˛S@n$gvlR:O,v̯q0[ ! $yv.i)dL=2CE!IwY&IUK+:+aZi`{MsC2؊LٵT$N]W1BHR҄(H!CO[bF8+on&{IY3/Z6Ţbc$?Q,iPg Y, 5B-z!a;v\4ckkM7JxN2qNfPU$K ٟ19|HUҵbb*?E>k_[+_k@B*I(uQo'~LYٟ7RUŐkHJ11ΟOu:Y}筊2z':綗Ah,nɷMQvȢLhI m8ɖx!_W"Avcpl3I2S=#VM,zxbRits;kܰbUX4Ayۘ/ڿf6s w*1%7<ɷxL. :)c˘ss/3t^L޽xX2O#znl\:"tr1wZvv&O 2ig VTa+@, e4Rߍ0IFCX@lz4Qp>(6acd\b(A!ʜgR'ﱭ+pc3'x2ϡG}5|X)=ֲQ5l74f\of<%c5J4Nu{f"ٶ1VE _zEHmy }0FtY_cbHCE#4BH%]*8#vEO~YJufnֺbJK~@+4Jթ)D1_De·=[lMZۨB:9ᯏs-sjcs.ej 9ۉczҊnc&쳉3߯cdq{K_ZN㥓P~$ X!go<;<<{~yy vGn0i CnmX~~߲ vl瑓u$&.?{l DKk{kˉ]2EϞxⳓe 7ǯPk?%?s-sA+@X8?G0ps%-T[8wSozI<,#(\wcF?q8s˵p?C`NxΜ܎Yt~mIoWӢsk#;gF \jD%σmbMOn3?zw߃ 7zv՞wZ)>!ϑݼM <P?Ʈ:LX)v&G ʛ;'x* =̓8MJj ~ p|'kU"_E2qJMHq|ihH)@'UB_A$3o)\_ZN>.D%st Re!h@A W4Oְ!9~['<)|Qx@1,V`$Mx5{BJ/XTwx1"N[TS[}ZJcC|tӞd: q9Rᕕk+;U&nh"$~D:cZvZl:B{?u:E~!%b:bVO/6&AjHP߅哟[Lb:"357QLT5LLͱn3D#1kU Ψ~|!R/50>Qe{`jRM;6o՞rTF>%G# ȭܖB9d,fXiUvK R к 'QR1/Kp52 UFw<Uc$Ĩ0\+fC{B&5½ʟq;^)J(0Qn Hrd% m#,}W>+Pv۫-~bAJ-LMdBwYw>jþf#2u{zSERYPחk7d\'JW4x}nk3Y߽A/XO\}z-_0gѾl?.\2T;)r L̑ώҽfSw؜n4 tWyF5~%PGK[?0~˒Lǖ5GlcVڽ]{zFܕEi/?8No(){`)b_4< +v|)g6u#ڳⳒ$;;ˑIv?56 g ]ZTSIz !>3᫅澮/P(Jq7mɗqj]_QhO)P"8s~r+5)DpIzىR[*V g⚮Ɠg^+[CctX +mG_\yx8SacL= jV>c0byw7KNRߓ5Z#V-WH ^Kg>Pjq;~F4 B׈@X!=|s9bԥ=++nr E^Ȇgaͩ J&KQa:Wps{:/Ȉխr YhTk[;{jg讠nF5@QVBzcWBSl=:+hWZ9 T-dn7/9kZZ*hcJ E2 %cvA0YxωBzQBΆLcE!g>7M4C`!/Oiܴg2u>R%%1֮<^R%'"<1Hk"^=?xRQTlEIW e|7M` )WnM,%]=\rPX(ϋF2*Cg!oh/ P4[w5Rjl"8.YkBɂ*EKsZʼnTkBvp>ZO({xKpm9fH_'A(-):|JWB(DZ)1uX͞SӞL: /Ϧޢ yv?fϲpVTwf-$8˕r*`珿uD &|/_-iX{ª\zհ)dȗwP76UNk"x_k \XL ,ͬW8p즶-5Dkj}zP"^򵭫^3q+ַ~Uw=NM2<;6Fg`ZV.MR:ߐфeAO,.FNҲ`4_GaSGq$l@ó6`3)CxBuf+z'fv{`v0!s ?Gp3`g?^>{qK>Q“/b/>.{حvތ)s)kNV5lrՙIΖc= BcBtZ!Ii4t Ol=“<%]:Ҟ( B\2qtnJM>'w֏o07,cJ|c&|2{kSf,\TmZ=nFcF9ǡFu˷voq&+C,09ڈm/dO;ɕO Kv5p d $l'dƂMKg_BLJt"D7# }&[CXu̕`];w9ݐO}4 '[( sJq`RFPIn>)6ʼn0qj8x|wk25ژSH Fr ?33~eI1L%3S|S :M!6YO=By VJ(2{ըh1&>A)b*fخY8dwJە\X^j\_SGC^<"䙫'ѵCp,]>Beg7ڽ:h^Ǐw2/>A&_tZ&X- ` @Fx.l}]G)_!rAHM REwpqwt0(is?.˹h}7㠒!W#" 核jhGmN=R\@ڂ%7lLx# 5 mɷn[B} u]fm6ş>]raKayK @ī;h([c)odz$Ƙ#Ygx&k=7w/ K%ۗ-_M}Ё7(BNd׶OM>Xo% 6]V7O>;1s+L#cATOhphE$.*w4up5D7(jCZ6[><0yQ@D]T,$0\i [F+,Z\!r9W=ZְspOo27%ìC A1&2=QoΥ>0P@GgZd_dd-N0"}=NmR {-Z BeZ@XvEX{mrꯉk;ң(<9 Q%fl3}'06k&3*#vB`1x.յ;~ۏoo[սT K\зZkbu6l;ߑv_ߠxwWo*ka톧B\R!__Y`X?84W(0t j;%Yl!v^~j[ddf%TwS<պGԟ?r$_A~rge݁]}ygUM\ZЧ|{;o;Bx'i],;CrN٦ ZCLR?-\Rr)yZ>3y}?,sK*dA[Ք'in4ݿp=Õ*׌qn fhwwPQ@m>"TYiPV S? HtKM c\cx)3Էl%*k|wتF1Զ NvĉԢ}𱞵/nTbs=ʡ5d&Kdgnyq91 1idҹdmQ`>PNYIU{ǀ2{h %Z|+6Yrvez|k•Yzs@=&]2d]GӋdAZsU%ZB asMd1v!D=`o{&/Shʖx~AhKR*rm}4xzyU=TnOj$^ۂ gXtfuݶ(d浉ŽMў-5ekԩKU%UKcֲ%#W\׭dB❐bӱgd`/hmKu"[/v 1HYlxbF[d:Wܵɿᝈ3r.Lfz;]8_[gl4Ia^f~" y'[òtɠkw#67x&0}:q u֯3Um4}q.6'0 K\^B5q3m!U]"ggbZ@^*J7m·dOb>gȫV%W6xdGƋ߹AH.cB,~g>=߆-{nUyZ|>;}cWebٙade?P6ҧ8SiQ9տi E5Kyrsךsמ=spZ;|\;S}rMK?D69Zsƪ`LKTpj7/n:Wec]3\O  nD2Q=/>_gUVjrwܱR-p)ICɞ5j-$łlI"HӾZݍΠ簝 -x) yWg{oMi9bo_ a`HHL%]Lƛ)ܬ^`h#r&Q~khPzy%qMk7mV}Huk `Td&5?6 ];NË|,ר+{(=_beI1;f7Bc^ؚM]TOQ޿zgyr=E8Z]6&x=al ]qYwQ9X9w] IqZh9js:($jf.:Ý&tljEM1.f㥶gDgo4P8%6jLV8 @["TqeUAZiCTA5T24Z~M9U¤ư:K2&wJmpuYx>u7W}%7s7_TRdD~tHB5%R;**VZK֜u,t%*θz+/5FY/6ZExWx=+w: ZkG{~t{Ҳb= p[#f{DqnZdC?϶u[y %m: _G/Hdpkw_tm4o-i) J.(e,ݫ<-6Z#lz{@Gu\;l]ڦViUv]+H]2ETӋ L1pIܝ-b5I z{o|ᠷy3w{gnkq JҜ{V㫓Ô<<:.kV FAQ@Al9DdH1H)bu1č<QGE4N (KGԃA9"%߯Krg艉ct~c"D(i~ \ߪǏBpHI\da@0E,2%+\#I:Lx.1S3qcS⻅ONjz11yTD6"pË䨒8 N!NNu8gY|{{ 6vnB@ J}8: tyDQʹsnʃ N.Hcm LxQ<ܴ:vt՝Sh?]g00PeVggweGSHx6=p7Nj;7(wnvkSY $Zd,ȧ~pfL\/H&)9jJW@zP{!Ҋm˙WWզ lX%-TlN˜tJVP**"=acZt8kI˭2U\,] <w"3[jtE{tILO*'厎ֽ݉3V^$a"J83v^br~MQ*~L-'KQEQ5E֢{Wէ ;ɾ s9._U|W\HρG֮߶ql Sq}~9}t]z\~}oQ}N%ag04o?Qi$yrO7H6[*֓>wZzr),OXs'qE`BJOHW*@l8Et¾y} 9)A&i{dy]S`d72StAFѳ] ƴ!l/FΓ'Z׃.Xg%̙$'6ׯcpCrSb#΍O/UZQ$2g4G7:RZOWycWr*($rjm6`* }[:Rb ;D :=;`͊% @ʠB*V9cF) p_d@T_eN-p~ÙfﮫT(\TI33 1:LJnr.[(=JK`[*VVLgh`W 26W[L)LT#\Ԁ^ꜻ-Dh2GՁ9”A3Ͽ*Ϡ?ӄdM|X\cɔTjt@z#QmZR($l0nH畀87Ocip&3!Rߵ śWpD1W+ 8Hovs"I1i$uc`"7aqT*D>GVѯU"QML0\p=yNA#%)3&HϟH2#4,C^dZk"5| @ KRz*R`VmO |UKry5:?={kݧggSc"#}~&χ-1 &7!y⎞☺"wuVP(eԜ>Obb(ǒT״ݼWKl(I fZbҵ&-.up_R̨q{3);xH8qn /BŶtf[Jw~ϸa)cA{㳷[GvK >*gix<vzs.4G."On&QNiyyM3@ǃv}?h"|:O}!SwւcSͶ7#^?3rto^A-shloi6vE\Z dT-K4.2EWCu1T}V?~H3}drVZ2X?D8&^,TTp+v]- n !&)f\-NGRJ\.gēN;q9!*';:52WHgi[kT5th!r /W~iyrWefG) FZ62KX?Jq߻^ndIBZ-Zyv;GWI>}2[ZFϘ3Ԑoneх"[6U=*mddcی?= ƯȌ6ȱP*.$\7 UI0B?M̛fք]!-DBgO|K,b ^s&)Dw6od.mRJ0CXڢ;g,,s )M 6k *ΔK1| >%$IN:n*%*R [;}UHSV3-TFgRQ:+gf8krRG;GxTF &P +w9|6Vk9IAx ^Z#(+zT ?#yN;4KuO/~@JٖC=i '<(I)28bU&I"+O' "lW-yHo/^S{.Ϋ[d^E|䵤?/)n縱q^ѳ[.WkyQ\=r)_c*.ta0D6NOlhyZ4JMo:7A\'`=kSd,"ieoT8 (:5Kj_yU"MDbv$d T$eaY^EԋqT: g*O ջG[Oʳf5%F1ex|:CMX:l[pĂݦ}ҨX,,{CEIt7Ÿ(W| /gg%9Ô7Aic|xNYeAƭ$ؒ(Ս._?G»$HuH4_>~C' ~W<tEe&K{u_d?ʡ:lrv޹ yDR7m,Z_p=F]7?E5C+`_|X#[̦lVOy1C9BiE_3~c3BP6U3Rںx0{kIArGX^*w)wkVŰbuZ,Rwa}Yx4vEB_[Zy\aގ`a,D!jà)yeRfqBpQovQtWC=G|(1t + 璊ޞ67 3Y<6:#^BM>[hpnM&@@|%ytB1Ag3wKT!l+<^r<D}1@|KO˲טpxn 3@>gnWdlM'᣽;?q'ϋ9߃Ƀ.kj2iO NxD;S2 muv[G'б}h6UV0Id;;E~4M}=13O=]}u@U \S?&|4c"{TyŅgϗa H),}NnB$\}?d7^a\O\qbaM{w58靀2$?CPnKgTS{d e1II* =U좷!Q<Mw =|nq DO)]m^n2)V@zCqA1/W$R91MY4Vo3h<]_4ϼAP%_ǎzQ$7޵Cn6̹2(7Pǜ}-QΪ޻lxrKceiID<{-|,7}C|Rܸ.+udIGdToWE%Ipof1mHn^hN7E*bn*?5ř O Y@fnqTnZ:kos/:X==u%Y[]豲؎Y-Fۛ*-C58J"G(=JŘDS'pq_9ጅtD>+!uAq!EKوΰ p@vJĊp{{&&f&p>:x{7@3QVrLjYuM (jvMq;T\gBi E|Ald :iF.h(EnQZB]IbG2Eܕ^1\߸+qT7.\R t?iҒARݳj9O7ÙW6.Q)iBd.;i0Iu޻ҙ?e0=wD\\D;,"<ۢUE˥ UCafj=!Rrp#т<UPv4I>({NRh0u5CK<>˛'OZē֒+JYgbD^DZLYJʹE>PΌl]D]B(bt|Wd#"a}AiEVx[Oc56/W&64ջ|.!;nMI֜lPiW, 7ignSpKn0PcY}`eQ>[&E$g'UZR< 9=Sɹ3s?o>\3č9P+R^tL߭ HZ4O <]5xM 3{x&OZse;/\6xs1#+.*?Q2/gz%AT}XffZb|5OF)hC&̑ؖHdsE'¢VٲYvG$Ⱦ>1`F_-u_MXl3AH̅U[6IY%fd %#g <6g}KMvRdU=7:~ [u(1Șf2:M/y ]" _2 Ո~uxsd ,Uap18$$D i @,"vsԫs^wlS:6ԏ~ְ0 W0Y 4YK>'g VHC9rcXrc,ݚ[p;_0c;~)&$_ɘД#H<)=ͅdM2 nI& |o :Ců3%?@t-G3MP2QQ%1eh<+{|?X QkעM,# ۆϩ^= ٳ t;7P2q$ĕ˰`Q5Yդ>,hZ92n )5vB5yˢawAGEk-KS; b%CiktLsx2"/Od39JKB)WÛrW6$D/.^\jztՅ{:ⲖՁ6_=Ѱo %~\+欆PNH_,xĨjY) :(#n@*8й!mQډW)D:Hp36hqߢ8sI9E\w`vF;oY)ʥѦ7ÃĂ |g|MJsվ:QK9Br&G-1=*MdɖQc@PMTJǚk:RPLK,nOJІ@co b1՝'3|0cΞxI^>Z5֙/SRhY4V-qHnh &@'F 2%τ  GQkExolCyFhlmEiEE1aMRC͖ѐ,oKҲ?ztN#1eJNN .aԡ4}2Ui15k; AXZSiYqY^za$㞯V^\=tEfO]ǒY=OZ!IBWbh윻_|OO`g+BR5KP=iN1aҡ kؼf)U%ޮۍM`U.3WeiŮ$mџ[4:U~]Gu?=_>((/tɱdP?*pteY9cuݳA檊+9eE@FUҦ?]m{[rb~5Ig/ۼnKQkʑ@}.y*:5ˮ7'>[7%gif ҺUIT)[\XqjH.:V?bL fC JVMFA`GEs]t\lNB"T~K>pwlfmͦ~sb#V0=9|L*7V,:)(M}`Bo+CH"m$732Ptrxj@g1N||anP6c72 q+Vudcg.ݐޚ+ɘCeܤژޮdߩ "0hKFM|Ό(ӛB~6&BfL͝v=tEDL*#Էy DoH- 4gACTz31{hm*G-zx[YmZ6+_NNs'~0M8r6GH4 U|^4ZW;U*C|UD9s]KJKF;^sGBtyݎ[VpfnA)p;?@:E5lj)}KGS&tg71s{m9 =gktm_HVݫ4=<\M;g'ܺfOj4׺چ#iWV1Qpo~5\]\q->x,ѥis' (y.SJ[ڇz{WPNHsRMrm'i(rD;ٸ6EV$6[ߨ@Z'2|_Ci~$*jmg y)j3-Pn e =hWΛɍb¦o )-t3^ :PBi 2ʏ\7xbap|붢7D#z,U; p" !g$Z:Vo1Sdupo-` ‡ӭYTA*QZ ;\ k7h;ـyT, >_GUi(tq[w m*MP:jn*=^ hŃ xcO-_E,#ZáR9.-X@PG`J( :>DJ|]0X@ั]o8@yr> TNb.D ZPW yμ$ oIS/u8#z?֏h7SǶ\%|T`<Нfd Tٜ >x]B|&w^Üݞ:5-IYo[۝!c3Rɢ \2P\86&S17=:0yV( zϮz"ޱR'ƫj>WiO2\t Z o ]'N` ]hRXұlAr0͎E+{Ϯr/Sf9{V8K(2x=lYq;Y#?-GWKW;Zo[Q&GڐSħmYb\=o]ё>4}5`D3Tޙdǘ ' \w9M=L<3 M)%3>1(/&n 33(S.=g_%?U;u)wu+!S\b恻vsjI.aHkNueŘ4]O5*L_b[b]\!GŖpqg8W؍7l] m|Hֽ(cg"b^ɕQ551ɶpq5*Yx-C_חTS<χ_沉puA\˔eP@`~(: HBZOaPV>OۖRƮs</~V%YQe# j9zYKǾz|yB~l#3ɉKjrC ]_(WPN|)|[q9,N|; EƘl$I"M"-Nw醶݉kWnhۗT:jiZUr.R%U`nM'Wy&DQ8l* =kWN Ҙ<\-EFj#K,r݁p>U#SUS! MaŐvT7iCXDl*Uxgh|E8|o>@7j |ܿA038ċ[^Ʌ([nV<=~L,D (4x*GmDF XQ hlۨD⏘9rlUxiN ̑!D*xėĪO{ 8f\jȬy3F1ؘ$?h'hi"M(=v(ˠ=+ϴz3.}lݞKaJu̝2",Ƀ#:qRVÍWp\ԙ:6"C\1j-ÛB~)Z))J{W@**k })mJȷSS &vF91R [u6OԠJ6B.vFVg1$KD.9Odw/y|-.Ϟ;g'x:73<7op3id3iR:P̞+bh$5ᎶEzmԼ9ҷW/):/0"WM!euA3^R2\! #H`hs!-eK4ZswUTcߟ!&REHڵ1 ªɝ~=0#bgF( R%|̑HYW暥ʮ*' wgq(c瘕%bMҊ^SLC޿'{QQ6⫯ŧ9s`0&3?ap:D"4rOùZdjoB_ aO&ƈC1B}ESJ:UMy2 X')XzX#R"Kδ6=>"jºel'}x!FWݲ? ΧӽoYWJ%i뉣|O.Xp}=+ i؏^p(#Uivm2% iM*7h9N&ݡXfhAjN,Nn ળ>֓7˦W)V̽ b-YZے [7 eh<\ex"6/` [0C7?Mw/y4M;зo܊^s>yMGb|N>cegHAZfmrV]=2fyAZ]Rhu6Ռ)pDƖDM/.?<ӲΎË2W>E^N|wSgѩgrVLa5(9}MfRK2ԚmEnO4#u62Xr^j7\GRW![7 lE~d0@tA FQ">ץ0/5Rd׎<ƜXrZרsz>X11ԯOKb[ >c-IQHHYo+1(?`S2h.cZ[:%Rv,lk7]6)F 9f ib!,.Hȳ%虜!l̥S>rEc\VpVO˰UOͰ %ޔ ~W)uMa"W(5? sȗ~ۨB%y?;X5\/ #ajMBث,Ri,r<*|H=@rzD Aa{%j@ fݯƌhoKTf.Y˺v"88t<8q{yXςi났V6ISY—":rͽL0kus+ˈb(: +y;tQo?%5ΰE"]x1|P}drdr֫P:f"0Gm:".zcSeD"VG`XQ*7޵NޡH WYEያJW6& me{wpx󥅋?<7ƻRdnr[9y'"bKL~,CSv>ӑ>):LBk˂WԶD@ `,+i<ѻJôyxm+~ :6Ȏ /]õAtx9_!1|D]pނp יzp:RG}POH0~>M/9oARҞ SNxe?'1yz =O@b=g!^xY™qQ8fdaNuԦ?oM3-H@B壶¶1_'N?^oF^|:TES$">.Lt)s&#bLI!" |OWH<6xAGȮ]äәp0klslzo\<$L)e ^iC)Dyæn~T%3l"W|ai\[Z18^&~3y~ŭIdTdBϾD.9s2O}oɹncf\'wfִrdTAKu/K2ղnN7zJ >Zɍӕ_z_݋287Vq\9ot^''[ 'Tŀ*hd&ǫW%jTqM-#~G4>пl;4 L Xw6{'Ɉ 2ix2񐝼lw_X-PY/jaa51;sMg&{;NDcG,o!; -]xQ;>/,6T'ԦhbQbP(aEDVEzm+]Ï.KnUhZR3pCoI0з͜nYR;+poR)AZ&Vk|h\M龵#Zzy @*U=y"EӘnD0b+" 3/98ǔZ統xJͤ=2S۰+j %?3_9Q1ѥ^}C#ϵN;j 5> 1Nv+2'{n깏ʟ{;M9WOΧNIC g%No'NA#FpԲ[8o4E yEK}_xf*{[SMc;6D8g;Ex]V'FM,C;n\o4L KrDY)@̋2X 7'>"U3F1owg_EIdWP)&~!~b_j1_\X!t=ה#Z,ٿ? z`e#d}`}BNj8T~q ٕ .ECm㟒;7 ǧV: x)$vJo_\(%*fF`Jkj堙OD 6'9E n N 7>d9%g)[ѸY>B*1@g,7bt30j?!F "0 }#996ɀ ^th&&z PTxAh3(Y-3 k ЧqKA2OҺ::fV9V+#4Hj\{F#iH$6B5ͤR42I cQTp)(X6'Dx8\B`_"cųM2_FLu8se3d2#S %dwɕR# ] mXgس@̛oU~Ad`lր'yD&kb3Et󙴦<'Mf hO,dIt0mfX0 Kgt#2۸a˵&jN:UQh'xװoJYIYg %`K* U!Mv؟5~gUWٙ)U2=# "ctQ .\C}F/dB+)-ʐ+Xl(}ʧz=6RaK, ^ R4;/Kոl\'8j`9^nU=4i_V,+)aiE4H`ɣ()GԊXR-lCB3KIJwBKɣ q:kAo(.E-apkngQcq9*dB,X 0i΋B yX(3?ٓL;H˺-9ց]HlL;-u(*w0q.Z{g8hn նTՒ"PϋvXBl\>"-˗Ma!#_lUA`d`fƓ@^ET'R.ʁԄk&|b3٭QFנaz?%*d]&ǽ҈RyC![WnGąe*L w$<7N}㬻Ǥ+wbG"GQ>s'eIf>OۂimQlFc,P^O2*id6efw#b2g#1H @00@ D=(32N? %I vjp>'8"f2? |e3)yL\Y֔f@XC=6+ɖ$Z\bjy&ZYԗDd'6N^r_Tzmf BH[cRNdYYIdE4dmE&R>[j}21MLc2l1$+)S[WG#KˊaLSE۷,`)d(bO1Q v=͘==LvkFs Y(Ұ5@!9(аZABfv3Pp"T_? 8P3wB^ v6ݗ)=wr6΅};9B#A؋!YT"#b/`})>}N+!!M jh\BsԻ޽ ާʽyy*FVT0߅`(:O@؛N|;AFO)Nƞ7"P1P'1La.N"bJUO5czD܋!rBm|K9V3h{%T2RWC/!OZ])R^ )ʽ1i\;4rTnlwpBmԼ|X.?Lk'a *wwHN`Uܭdr(ؙP@-,-;}zw ,j\v;,FQ2353 !pZ3[rdBI\j`} }{F큰(ث!X#}m {* IIbl'53 KB,'jL @ -"H##ߕOBO2Ӻl4f m<2HӁIApGʟ\d!kjF3-Oi͎-{=D^־ص n%3bd[U*я.QMƜoعA"X;@F2qc-V^ڕ%?LJ|c-CȈx0dgZafQX(u)f33Ԁ2[@JAyoAOT,Nd&+_sa[eŶ s.mo[KzgG iOYE| K{)7gZ,nhW]o~F53.nvqyi&ZFj U npUMUMvt(<J6 K"y!c>*z @EeI TB֪>P^Pw2@q9 zl#b'༇1>GNkq]/1]jʇ|5^j' _'/_2IT'ӤntZ&z?%p 7̢49eήRVësKK!GGf-m<^^,[7{tf?d֛saS0?rLl"e*DqM|cZE*i~.7}hoxtJ4mPXkDA\5@om I:pQtݷ{.qho+ޮ XqlxEyu(ҭ".<# ֊^TKeO HAdZR5gOND x >H Ŭ!3pFa@]<טi8E#@QmmflMeٸPAxYFOUzE^ G6qFQӛgmў_cWU5L\^б4L]2/0r}4V:T8]>M]ÒjVY"2agG՚RC/-$nGf6R\URO5Nzя)۸hzS{F GSSG F{R'X,Ynޝe$]ZnEzq}ߦ2lS_JC@'xd>H@b@,>t WUchApy)ISO{*潓'>kT$%١T8l˴4͊]>pYe8pۖr{F*<.jreœ]eB6;Qлy:6J٤7)of hthMyQV$cDH+ c/)Jψ*HOSLͱ#%H=y(JeUYEG@V ~~qR{ݞߞT<\p?8`ɣ{qf2d$3dLkL@NB#7 (޺ˮ'+yeo]23uWUWWWwWW#r@w#-R8oV2meyUXEوs۲:k%ήЧARr]mVknUjј*C!=Q<.^ K ȁ^r(>wLcffǢ2t؇uG[m Cu*0vpOvǢ9C ~x{E6`ʁkdZ*fk^Tif̍&Z%{gAպu#ZCn =OU[q}q }>QlrfA7*c[bq3oȝ3F'D)\[Szȇ`=L>Z2=,&P¹SA\Z: ϟ;P= ^F~Ė$JfN'8B Ze1`0,Ǹ2)*ȗ3\zJi$&3͵iEҳȵit$ݬbsB*dt$(zVbIsZM7U@r8=|9D@xp|tV*\v,IʸQox5L}vч)ӚyG@:4S?Tƙ_,Nc#rJ'=ȥR&̻6ѐ2V-201) tGn1lSKo.qb7BѲi66&Elr?2'y%wRcs,m [Fҭ]4TѰ-7oNjfn[ YgJUS~Y2ϔeRǦƖ j9 N./^ʛel%qiU*ءmYL՜N4ϱ$&Z6L+MOύ[}Z8}("%cߣ(,QwAI':v Ž 1.o'5['Vs܃|6 n?,'&sC hBI"n$nCh ?*= 9=ldce~eUJGȲ|g^UUލJlŧ0^~ ++ W$:鯮_߹HOM@nWKXۉ'׉aõwЪ_xY+R/edR2d^"Z /tKpr b69(K^@VK хodXpX{*GR K^~/1fX rcY{ nϼtКGO|/e w>9[d o+^aCh9Q(OyjJɷMF>=[TWK:_A׺h_2YC '߇ZpÊ>hUk+Un8VQP?5gat綱YM֮pvej;w0H9Lw?~ǀCtgrVLI ^8jKܶYR~y?α{ w{ϕgesK{+/rRpF`QZdNK6w|ns%A5~r8嶃0Y2|YNWh}!n#9.0Vz'C NXP]I&yi+1 ^GAMNnyzCzoWGC]\⻇=a ue񞠈#` 1^fۢ?YvRRfQڍO&׫k2YY~o+b/luMj(Kj[]1wDb+EWl,K~kɭ8b/d*c7%j0kyyڔ~u?ٱLNuVJ Őbf-K۝GLhJh!M9f$I{Gb]-#G8\-}4|wU)vrM$lTD6V]}`3 \-How $f\շ~nJ3뎾d߿CשoZt}2|u}dÑc~]7eD$*lѾ{An\Lwwzq]Ege1ɇ'x?%s+i} ¯Q=3I=Q {d#t6hQ7pS d o]ۙ& ]BI"^t%ȿK/\!5[Zv߱60 !]l۹3* ܅(*WV-,_ۘWk1.ídGP2bJ\^|v4Ӱ ڬr茶$_a`:{$az[iIuT=o ۴wDq/!6.He(+-{/x0o`n1ъO6&JB78+lٍu-iȕ&/3OSVq.ưʰSbev-8,E5eZmYNљdz> #BYdhIu[]gq-)ݮ# ?bM2yʊA9`rbb\xW W0HUPr]0m1]T2A($MR,ZF|f #ް9Jp# Lx[ 'b:FYWZ?NeZI&@2uJ1%…+aA i`%Eo8O [W"Hν ޢ>hƖʖޖ6voj<+#h$ſdΡI&Bffg„b51)B}ULj-]ETc9}vAc MGn#RV1X =eݸrSe!' q##o_.䔸=/S5IЭџr&P&=>u7ǡIqBẋ*WBZ*a3#Ga;XWs_ csPP7p_$?&8}"&\_sjVA^@0tpZK1`V?pΑ}!F'YZ/sP@9Ql sȲuk4(GQzG|nLqZ_#pγGW&GS`O(J3Ukf.OM +k|9v}dvk1ch(I<0c}{sw\&߿)'ٛX5駍we2*.TF²_?۽Oy;qWO>ee^+Z}Iwcȥ#wMCdtoCjZcqBBqcZj7(')>K?=.766.-83%#&v gqWwy^iXY[@"": ϓMN.uZ<G%1"߽ z)NӥTPlӂS,/.]q'Xd8zYy0i6Gs0gv$dM٤ ͢VͬpNZSoKg2CEl4f wr$M g+7 [qp,,eΠ Y2Aqwv|,$6RހN>ùoL' f=Pljy^oR(MJuQOMAyGxYHϱC1?Md(3 }K{."|}/edO<9gLP6B>w@v$iq^N SG QL@<9(< 7%ċAKٛ Φ*G\ĭGHP{TLh{7 oB] (.6Ys񦝻;N(45+wEkY-3єBkS^ǭHh!6k$425g߯њPL"A ꉮ3o%jd'ifN>s.ovVqkܑ F đ7k.hʓB@15߮PVO\PQ4f>ޛ,WZUt[g7v *)%OX)u75Uȡ1[0fZhw[C]}2'OWHx_[:Z!י\P-dB?DA Rrqwc]mƠdBD.S \~A"0t5x8dupm'8b- \A4}Vz`F~##e 3j~~=h{tR~Yecw3fQ`ՓwRdPrO?u@QuLl|luCSTZF mBAyavb/!wP5Н͞sRք﷨0Cn)nOM򜍋WP`Nd:t.#@Z6Ɨ75ԫjEؕMy˝ QXG\.Ade/>J tiΆ!pB{d.>@+a3h̕(h,ުR5kjPc~R%ܫ;oΐR-gׁuF2wy{]Jr*ILkmߊpؾ2V_JHnP.A-"`JP⸿G I" Y'g>mE?ln{|e_(k貖hk'׀)W)o%6rn%ΆawiQV2=\>9b|''$ ܖa[b.E3h9{34 nYוs/ {H*K ^9_%0vfJkl\L5Wa Ǵ~}nh˘ZLϰ`zB -1y-/)nt ׹Z$U\.8˜t2B\IIZYrU瓀b*nT̗P7ޡRL^'lRc3L@=t#Hw(O6Z7s kH*~[ǨPNsq[ȗ$S0/?_3 _Ć)/73-O y{;bzue.o5QV1es\+VlL]4ţQ3Kꗟ˸kVZӃXSO6Rfe^W{kWd6P~&s1t&Xa’)"ȍk|K?=-+v$Uˍs/ӝCK:vj7-NkZ*%= ,11| }<&@FB hwdy9`1f, vC)hL$u7\;×x{I !4d/zf,xi-I nvr'%(f뺕 VOP" f lEc[Ie@R$aXi-,PЫ5:Ϡ!޶4)*ֵ ֜Z:it\ReVް-[<0eȋpSA\s(ZM 9hifp8#uhm'&3DF.Tl^(}U)n \?Ռ ,Hh52v5wF}H!uD,͗Bx+㩃A,\/4mR3hѥ^||5xM2ޓ 8I*Ҥh:,GM~Ѧ47*Py$UeUOגs *MJpq|rcMj>3cl*AN3Ket,VR,59ff0G&P.k&nM+˟q-SR=j1Hs8X926NDD-{fzSf֊SʨYko2bJGC&h"]=\bͼcY-i裀3h/no8T%e2Y+fL;uvq?T58S{d*xD7k 0o~,$(͠$!'2=(=k;NnQ\-cVJȠ:aXoPlVi~1nx!~_ 0 ='Y/{ mJLZÇ lC=zE{nQEX5qIh?h^06(-yT4OWc 0SQP^ `njpy缂+K] JWm:֪ Y ߁|(S}FcؔҁYi w8OF),x;I*K9wPiMحBz2 jŗك a`?U2=_$ra>]nx Ÿrs' a%l7 < oEA=D:1J"|RܛYآnVF.F`N*[_p3&'$:QOdLq ZBy@e/AxU RTD$)+cT Eu"f[,+إڹ9iL ءfYSZ6ZT=!kfY3LZ|˒a2fX>k"g:O0kZ [q;s}ov`( BN{'qPyyd-vdtX*#׮C@ &u_i`ON]Yn5fQ͖?+7Шz𚼆>nSJXfmynwQ^&K?/qb8&6zW{Q|"&~l"j꧜&igEOVu[j$| />k܏}W!!31 Fo( SypG]RLjɲolo|`^栶ޙ4d|ޢ޲d5|PFN8M%$a1|l~>.AmxV*lǍ֟}V~YɄ} uS|BB~6Ĺը#_QZ{$Fd9y(Ffsq<0d֧K l!=nOgHKړYX/Y|ƢY<%KFfLƏt`-22Q^24]EJc876*f1#Sm̮K[} [UI&-Q]u|N#^?!G^Q oxL M k{ܗ U,+"0*\ ^`K6" OrT r͸V˭厊0 }d6@I}r&k{JlGC40 Űzb {;.¢鷈\;iVm;!rψR\žaYQ& vJAd.%|>9V"C6g=+>_D ^(=-5àBSo_о[1]tǐ IEW.4i|G|?،``t,kAFVXϧte*?N&'$Eě`~JZ^^&ϠNp(r*)<˾*+t^~; ohȨm1 B'l&+=؆z}f,5RDE /嘶"#R_ܫ&zG^WS~镞SUK&=nV*7nl}F4DY~54zcBٜo0ħ /_YaYCB]x7$d^C@sD=>1u[.dJACb/,!Cѹ:̝Q'>A|4x1oHr !)371{Y," 31NChød()s *E.l]AV(%ۅ. _Y54צ,gɮGv,Fwmy너?5,{=,;*I"+]<܏=._%6kl? T:2M <71zy\3sonx} WՏChHp8꫐T}۲ o˒vq?؆peXҔǫq蹻$\EF_)'CnP'!iw-؅4Lm(j8\oŋHFtͧ%gQ X[kM+GaQs za/ߏf|`T*HG>R+MݣK2Bc6u4dV0ٙBh ?S8^wӿqw èghABf\?Uu}ְۊQ+l' H𺞩U,΄E4Ԣ@:'儺V B(SrG߿k٢iw 5[g^Vsy7F/KڰQm?KPHPp@0uÉL@%j,O#PF{s3O?rkw*G%oA-8ccwCw#6p.\لDKӦ0yI)!Q~6㛐2aOITl r#T-daξP-b[m2CERi(t-)~^ |?A<*^?nga+{RWT0k /$6~ wG6O-+Ja, .%XS.d^,C+IQv`(=UmF?J~)޶BqmOkx\ɾ|)_"oOlE[ ;rwOm](UIP}܊C#tZޕn!m #fT'uf/#}m@KS`Mp-皻о\;9S)J". x *(I\2TIƭ~33j 6zsv ?/HN_av?ZK`<&ex;Ak w DyC U^ ,l72\ qaolo/slA I62#w0v7? <_jRhiɱO2AIK!lSs ocRngA?f^$ak2 5|pu| ~ fgj8Cl<(i=jy5~Wf@=>_;y0ӍsIv-Ql)ޞ`_G`|U^*4;zn׳2m#G@6lj4  y.mNq B?ZüNEİu< x9AxYuNӐc:?tfpUBobΊg%\0-'ռn].ϹOc~H9yy!y7.?z.9w_.ȯ@*obo_ճ~t|ǿ_RJS <}L 8N?qoaF{GL8|;O9k<ÏŹ %~?A?u<?SGq֑ {83|9|7?p?zN7֏Y"OmuKn[ s,% e о ۱]b0yqoޔFv_JG^y^ :Ne xroyھeWpOp/>yk *_-ԏfw]o!8)zAq=zJv1VA"Xһ\Im,_^bEQ@#`m󒽓権h̰i(?u>tKNXњpNl]9z1dl;Wȯ ~X -?hL41Ό8p-u~iC{|h]䒅ZTsx,Oꏶj;Bn{:5U|; H #bޤAoQ /RSlpdۤMho?ĩ5,`v쥲Qq&Yn3B`B&Ģ+vahY9\Z˩)dm0Ԁns"߲l)Qy͈*ys?Ƕg<|SzL${=kxy6?4SZb)q(jmߦ;w*!ȩyz>Ol KM]<1[])~a8ٓ ?qw2KplS.9NDwX|贉W=쒣X;1ٱf{}Gn5`L(*@cC&2t-09]jCrcɔjn2]*= [DY@ ph>/YAcJ(ǂĩ};HDYE")rM wl!ȡVdj/oE$ai=>R3@(6`՚2F2צ !{mZk%/c].8eΈw#DlB;ܑL!"a/Rޟ_qɎK8;,":HFa$jne8"٨]P8q)94LU1(+?1[|˯A0|,nwQJCYP>f?q?nnZ#O kq}R(!~BӭςF C}=G<@Y^[_clV]}_e JBaQ_Hr)dD&=X QNk:IIk5d g\~wş [=(Z\M,޳={hN< MPǯs8$7$[E|KS{ۓgF7' |gArI\~Z{\ A.1aPj_ |33{?$/GZ1<ۿ9m8tւHP b7QCBzىu2>:閷nzႱkZJԸ|un̦/au #1=aOq0?KlA$Q&=Ξ"N3xߧߗݍ7"GVxLxd>,>)Uu{)!"Ef1.TtH E& 7m}nQӭov'N9>DuE ]pfs #Y<~j8%v](Oh2swwC+ C׎ڼ:`XNa'@#wQ \'r/s3#Wq}C}_$x)3PJ^#[zy¾~}$;wIc>%pOy1@8}Ù Ad{F>lHUug)ӧXwr?ʭCf]gsys[;wV/=4{k%Ah]ic =MSo$FqlSmONm6MCdIit 8:T讁:RƿF->`}r?,C~+GUUՓID8y綦N1xpc:k3(7k3o>z 2" J #RnԞr#i3aL] B=$^F2ۆpYwf:,E3AN/ɍҙgvw‰$B[ɋq[1vQx Њ^pyd68%Ӈک/t [ sv+y|>m!'ód. yKsӕ!#sC "6†P& SkNv>G;,e\2%Dos51b{vέdaoQ._ǁF#OH9:E[S_# 8\0S=6)"]H cA솰 AWr k/'EXw?'hTJו*F0.?rˈyթ/q>wrt8iν)'hi`ߨM)5*ֳM"MQT~999Pp~o$sX/ g?"ln#Q,(8.&jzC9S5Lrُ~ wV<ɚa3ۙ4+1nӥ)G]6c""YCW&$_GNiIpG3F(X0[iҞ5P2HyF"*Z a~ G?x8?N<7 ¿Dz!A}LyL*< lq J]V(܅K2j{Sh'+!qx0--; 8]X"Qb;6`Ѱ#8 2!yy0wHxl$xBR~X񀤼E%n};y:g~Z~Å}" T׎vU|=?$‹}1=^GwK׋gQ~ ַn&k%x@"g u`/#ό]rR% 1/Y1"]?w~SVPjmZBqDPݳe~ LAwB[Xg>/R9hQo O? X^G#<&#>=o)fp0ы2gOTpO޸ qӼdu,Q5˗qـ)GvInCL\OsP=15gMFعjӕCwiɉ,sLdlqFԉ埖ß!^c~CN7ȼ"41cWA/&>cf{  w' z~cϋ|gHkME`#cRBw|޸BpQ4yi@o1#󃧋z^otQs J[Od1.|n 4ѫYB_boJw&iP_=Ak3dr9}-y%6Iq,.}K+3^"&\f5ii幙6SECNcjRr3bLN>PGPtX˂ή"$7ȯY/> Ms/3ye߅{h+?"KO$p?)Q'/ ąh?Octhʁ\ȮLE_!]p.|̧%s1q{q~!u>Kȡ%Y[| 3B>MP9xǐKOy3DNOMF0SWץq8ydK957-qLQA^7WC俁xyY+!ɻ68/{Sv|OH׺+þ9*GpH!=|*nǛYv",D b8j"K [Ix@B2 >]qw+kk@Zȴ֚Q\|&68u^ #;gt{k[F5GGYf.?4|jswOf綔e:9I*?i^wV$OuRI[Вg]rxm5+˜ih}ЄC%׎Fn# 'Q!6`qܦ8z?C1LV9e\?sk ;/|^Gz-R8xx4/xYva堜,T&g]Fɬp$§zА\d9=g.pH_py~e=r*~M'N|0||~p oGQT4< `dE <@VV\dgU|3iʼ7O(pV^|K ۻ^m.JNEKuJj &_qastq.Y78vZҤp @b+B k bzaM}M $}_']"QR1¨n`>ԫ|ӧz6]Ox[7=k| ئ.u)E;Cb}`Xz%&U-ݺkBݕ ~tJAoxWM7~5yv{6)WE?4^g>|?0J# C\;wζ[Ÿΐ5{:wY9fH>P˃^M 1zւkaT͌[G&כ[KW Mpm5ޛ3q`e 6$Sz\;v`T}z,jzڴ{7tӋiY^³&g`h^gd4$"(W zE.ɝf֪'J)Vc(Pd =3,klijF=jNNfdN=#s;s3k,ܛ{GUsnK2LLڤg& 5z BAQQ]"ZXZ׺PWȝ9޹Lq:{}<99A6un{\Y8foUM\$̬cVPL\Ά`RQ͖RA4=y Eg=<b, f)` pG|ܑ9mAh;Jj>ODdqI38<>v{*6\ U q?0%|yNfX-Ek\,Un{J3|n$ZFvQD0p:"d\8Gip H)_TnQIsϻ]Z^ dDGDc$tN~dg'q~qn݌ $Huiz5olaGOXp( "hk(EO.\M*0ߌM370Lm/.;Azm̆0)QNrD Eg'skM3rjw=4TRku҆jpolCϭ6}F:SH ']x אsHlakتHu{:vf6op3ŷ?OPz9A&۟YWHE4ٗ!h9-i:Sو,o~7V^Xq/?ItO2x~#>g N 7}|X("ȧ,f'eeՆ@0߯ [ӁEΎE_v]E Q,^oR\6Mco LھkBez'h(3o^6%}\F㤼q8glQe7g7Sښ_Z[ZR]Y䩞XX94 Ԙ4۸~ǂj>(3 *eDWŲ(_86r0SMC =(kE:X ̀<_fs"Aa  u/6yM;?7viS[sV➜ c?zLy| *zKF^S۲)ͪs3•K6fpa;JqqMKIǶܽf|~]E(gxYO:8+O ?uC8Ec\fIW#u0ߣ l_Z@􄗔^J4 yYClnyθ -=c~7qB<' wb< @$,]\Mфpc$YQ/%2>.Fgze$wߦaO`yԷrݢj<ި-nɜ2nx|;v\#D/X2]ֆ 1.1^23UN /*T&܊eK>=-^XM)πg `:|$Y׃B; $x!C't/^;=!pؾqK. /'D!yҡQpYQ3Ju7[яc{(zsN@~|]L"7 *auvhl@f|'(Q;o7EڢOP-a@?EtˠSu.%_fib\pb{bׁVm ڙ)A~Cqj{'qg/ܭ2mT'9 ~bpE o o(7+$="8Jp]!@ G΋KtTc~lhNW["v'd|p"x[#P,Y;}wıݺn}ġ)ġnޞ- -8n:d$Xa Z\i{&q{8c g&% ޵.ol2ݪ]~|ninK]zҼ ԽyAcNLgBI|6#MiYV&ů0k Z4_iKʬMhFN[q"A=Zކ*zg9BsH>ݒշ|}k!NPf}Iӧ@g4ۅ5iV 2: >oT+mTSSrY[<<{ڄGK 'G, #{89x'Y&"'_ s#e='DHgNoHp]+Y-x&""R(ǾD]Xe#"+A\X_qcOb,C{5{!$Xʑ_-#")KZ OHo- $9P:|0e#P^^qH87PB?%,YbS'5Ckjtc>1/瞳+{_t]ԇAao2ma?%[%|K_9*^^K#3"/mWFѤX(OJz `B)qEy/m=H k#y1HaTX{'4Z ǗP,qnUѱ`C]SWzOK% K:|3'GwɁWG+|1_Ky3c<~Ba~CE~./{=ۺGz[.ۻҰ ,{']T"ae5M[(ߜyYj#cXśI|}^"gQę 7=_^ep4bS.= /s+=+3T7)ˀ;stN֭+r?x~+ yCZ?xI7po]0_en?<|#V4CļJ<9R#} [ e oe\lScp/H7WmM}6ېTǩz6)6X(4RypqSoPX œ o1w~Tq،To Sj5xw3ƛW7T,[xұLW*SoW.T '+`| q}|>oP^]W!=o3g@HyN>><~B#\Гep:elM'p=5K7=0y6FPU ~OvpgdzDg/藩:?N0Am(cڏ {QFD~cm-;ANDUaH =tP ۀy.wT1h"t1.8GfSϽoBWjTGx ʏa]p :dBY|nl?%>EMp mw@е-rja?PP#[Þ^K`GގZ=ԷT7:;=l$Έx^NHnoDy= m߸_vRwB: 1"n2Pw7ʢ5ch3a> 0Nm=Sa~r"]azg߿xyk$:sɒN)aSѶ>~e2rRe7"y>ǵsV]ro7GyZd),v|!!S_F|?&eN5 K_ޞì!HBmzt b"A] ,td%rRaQ@; \!E3$zFsfCrwubbإ3u=UI_P~0/ϚKB,a]b'= ql_{8 )QK>Psbb62퇈Ğw:bviDJkx}._ƙ8~,sgbhGٟ 8}p1tnc= .+!/ ,M>w{Forc5 T:c-!{6Y,t ^ogK1߼lgOX0,|oBpC9̋S%6eմ%Wu,ӴNlK ޅV&zJs4CFokLG7U:VՔsŚTzڙ5+/673dze`X<Ʋjz̊:N$,Z22떉-% 7A&my]ZLqsZ37 M1$pնx |y$b7/XV^t=&kArudڀN+>&T>i gXkƗUUť&ƪtÖ ޺% z5gHIIvA$ %c +e͙dQ `pKR7Ww1]Uť%K2 >XB+oR\WDTˠ6]Oo2F?n‡yM`UkrZ^ߕ v4]ڹvCjy7#"`VA e&˔IoJS8 T68CzCêr{ֹ `i A'5kcԱ͕鞚%y9Tug8 =ނLg we{ oMCr$a0$ey&Y\1asLe>TD|@Sr=K8(О0+t)LבoEwƻ >;?>ۆvӍϭoLA^%`J{t1G6ip͜|icMo!=A'+8(!9IHOAWùJveNL!x n~¹ X 4X:fM¢b͊5 Vr] F~^}N|ߝ^=a5,c ?p-Ƒ1y5%#?%dK1.80E׈Gl|[ 2 4{u6-lfl:9jRtqvP7IOS5"Z7@;Q|Ff%'}zfTTZ$$G5?gݭ1D{ϙ Sj8dt=)C,FIl*v`֒;0l ./L DT fXc0w]h6t:5 Il8&@36A#;(޻{710s|En5,TG~}:hNq4>< 4b 4/Z7y#IBW*D5*S{-&* ?nya'% "̻ʹJȭOShZi8v֐Bc\)rFΤj,kN-g+AWT q49Z>l(_<'+%>*A7hff1FWhUpRNOTQq*k -P W<,+xx( Qz:rP*~W@,a8Hʹdb<`HZͮjI x[侱;-PP/ {^y  KTj ރ5vwvr>@v}/yߋp×˸ ?#Aoq>G@>++Я̸Q/&oPB`<,CPZ%=?i^/}c\ 3Y~+9֓>՗.ϟ>~e~>WHCE9U?:| [1 `v>L^KåK!{anTF|rAZ2R :H+rȩ-(\쩞xÐI9a1V:cfV}ƜuX9t'f[O.ƚMTV];j.'v<{\^f2[vLiO}p;ENc&\\TX\L&art??WN; Z}j -:ԡtG_FŴFU*ZW'FшJ)AJiO'O\倡nPQE k'2 Q??r KՑݫ8Y56$^{7[<`7܊4Kb =Nʭ$gXjUAbdV t\D{w`}_6}%OfeYmgAS9Z5LtWԪ`;I ?)iDԤj)yU> p@M96O2xnG(뫗t+f C-ٵD*~gQiJc3XjR"ǟvٲ1?GxZ5ʅ ;}vU˵Zwfpom>%~œd{_#iNp%8hЖujv}x24EN2mLs=3u҆-y/PEĖrZŋ\|p;5_l|0~/^.W@b ŏtd?EX]#_zqQ^7(b]}WɅu`z{|^y+}T|VO"]~ncJ7z?s2 qƾ!6τit #9".5(j1ozZx2af x ,BQ,ڇLݖ#{_ܼnAӸ]L(5,Q.K/ 9[pxY/H|l~hgqٚr8eUEw)͆1% aˆ-÷Y9oXT-߾Nivtn[3+6 ~ ˠ瀝$ }T{jmKz$;UV;YHh^9БCco_P&H<R[a} w4.Acc :懏^>и41aU ?q ~:ӵ%Jql<^Q~E"^8^o0]G<.7qQ^7qڑ&Y;ᶖ%/r,} =Jjo9{֮݁?6~֚I4{{-ügXx=ølJOJq.J؎Py{g0ߺej?>: XX^'zz0젌>%9"dFq ?sl2 f'@ت5%f3S2kTL t-kRY)RY_6VsRH.k{S4ŷxKj90ecp iFY1F՞*j4)FZƣ{mHLݯg XlpD L-KHG :tדRIWi\|y)?t<+˫ķN_Բm+]>ijpf1hdyI&7//P4UgW-jT%ҙ*Gfxj:Qk;*xWIKfsvU%4pd'\qIXkn2LHVz!wA2J,dB)ud\۞65 T4(3CH4Fh/j8ܾ~=5?fKqIU*)' JJeB3`΄gK #tݙµ^N}`εJkVb6mJAx'~whEa%/ȉl[Kk4j7Eiw^n%6=[!-tR]&v/ w'sQ\*E㦀CH^g.ֻ/MS*}3QD[ ڮpŭoVȶ򡡬4&;E75fٞI-AƑ6[rãCgW Q(:ꑮG;Enȩ /,t䍜]yJMS5>8FOͤbfi("'>/ԇ E)G\ HO(gCB8@\.tg%#q)fn]n2ۉTZTNbSm_mZ+)~G~cs8EB+VW\9 %X@7)i/`E5ILYgfw=3!?˜~?3LF:j7^4F6$=x݄T͊k +g$3Wf*kF:W'(4r>t<}9êwdnP.C} [0ջ|qA\#BYgY xG>~$[ǯsr~\8-&ttтkKAb:z%?;Q 4t%ԎlRآI>|3C|ۧ]̱8 SbbR 6MWu|6MB8u \YTLF'8:F,)9( ˟_v\B8FqJrfQ07yܼ }?#݄ee*E%kOPwS3ʜUL3l0zDK9+Q1* :>uHX Չe$m)h/ #o21ϋ_Dӭ\8lӣaվm4sd!R6p}r2 5M23zL`3iW4֤4%9VC¿Rd>;1-&&C~E#!y.-)UW96̕2e|Ҽ]ӧni# [01hBpzM`38<7L=J #n`6t>!mI\$9 aBrtDQ{3e?2Wu4ێJ>'iC0er 3+>i0 ~ᕭ*`+ƴwCW@|4 IX-3 c(W r}hC`6oY&bB/ɠJ硬Ih-]% XZ|\X]ylˬ5Nc}}z\$N<ҕF3*м/CL|4E)C -L: N A;48h²k/ùGaq^`9DJYz@ ~3Q I}}!$THT}'`y7mp=0ro2PLP:"/?Ռ=8dyRM*T8{jkQܚ@[Ddh+)v͠ eC eͦ5ZSj;qƱ\W!.S%Ùh+%M)rS2,]⏝%gqd61eS\_J,>>Z)@Y& 9] mΔD&nie"1w?OrBPY:zٟh>SxcsBFeu1:o{Y6Z>_FKBb8 mӪ'557%'RKF>X`A-)gOcc}e ڈ]ͫ*kuS]%̟5۰oo}j5S5VUrWzװ/zn:/L{Peb7Q)] Wov3E{mt-;PUgۖ(sTg2ascp83$^ԘǸ8 E5]6_ZWa[6_z+"ݺ8xq~voâ oa+S3QDgqmb*3AK5I4+Cg 2r݁}"%Fb+s*%a}T|1̱חFӛ#Ccw_/C"4ǚ2: vy5ñLw*no6:;xRŽvwvneiOm]11?z<@n t.Ӹ vև?xFJDu:yLQQk*=d+Ɵ1x ?U ?( ?/$Ae@25P-Ɉq[&.mZ&'U6&RO>7FYV Lp5 M58b1+#OHZw± b3x ܜXqnv'$u@ `>LGcx r ԥ {Rbt Gtϥfz* Sq*_Z?^>/6_/^w 95)E.h7k\k]Le_ ހ Y0G j"XR҄2͕TE:>)oMaJUʤ$ Rm0Ӆ &2ɐ")΅&rd@?&HP痗;HU h7VelN~wiFlbY{avm,[Jr|{\(Sr ;Ғ9T3eDh uu_ %#'IJ׺U.gBhkJEZI]bp;`3-XB޳TLMHS6)ju>+-S)R>WpyX C_{3.Xf/)SxDd [cS@Kfqf@M%B]] -;LӺI6|FEv G8 qaVtf*iJBґA%c qS)D?9*- XLpJ}b9-Y^ʅ-ؤ oltzS9Wޗap}8p^xֲ6Ub0XiPvϯzL  ׾h"hѯ \'92_ ~%&XFj(uS,7(8Ѥ:sM4*zeЌ|?Q[(H tJ%R#.ДTӗkLNoݶ_h&ߜpZ'I&*4#C+U~~Pcõ1OJDnP!*hgJ|ϱ0il47>DO-'.P4AU/VR5|J?Ϳ4:c |߻ʹ yպt }N^M9mhh|wZ> 1 y)_s&ɟĔqό\Xxnӄ6[`pb$ R ]6|v >D|KW)vv4ބlA>b>j|f;}={M/F6W6~I\/N̉^yW!֑zQ<Ib[(Ms@!Y YF9Лif W.m/P5tnCo m]c0;w9ZbN6.t$?NBA;ɳ=ֲd[oۇt򲱲lY ZXNjs+8B 2RNBog9`-TFj :.Ӳ}?qfʡLPP*zcfS7ԯF(VkLIwnmu;FKc h9ʘ4ı(<P+Y|>vR( ι0(It+YD)YD8睖7$2)sb08)>o0'қf,[Sj][F_xPȅ],c#ۻqRsp.t8Wʐ&Eܧ"] k]32Y4 Rj(G7|ڍnmTXGl#뗶9}% 5|̞yXwԝ5u}y('??+\oܠQtmꍗjyz~G& mAܪָk wvR%m['MVvμmmSf//;2? /OA^J%so_֞u`c8׊9JTkZ#dB~dn- "{'i=薕&H [lx&L۾gNIɂw̜+&e-JxMNuq( [uv%$'?  }; ,[+gWܜQA7wڎv@1I**p1'3guP(aX7:қ=l\ҜҺ̼1>lLٰ5c3W%ܠj;jۥ ޶\iL_\9)q%L`0odr95Md8b:ux1[͛oւ/Wkm Ȕemۧ=7C<̗xD?YCIa>uL:/jXl0u y oWњzH()CR/Ns%8//\mOhVϫmͪB"jv炼1T"հ.5։o·# %o Id6quS;gZй'_ImigMbq1j> 7f~s$^~ {=U=&q[^G27YƟ.4n074\KU[˦ I֘S̱lF7-V7ݠLB=lyԑdzE0/ l1WmZR|[:E^ýV'qk@Uqg!|9!}|$ M8-Mxgo`$Y2J7]|S+ ֔hLTQcR+&WJk/x-7j.xsn=MDEo ѵPBzDpEGA/wՠԀx]b .-8_$C <&^X:.qkE[Q=M%`1dz}jHZ;L \|R\D|Sð&ʊqEql%i0Fc{8ZR5]2ۮ美F}k .<@<-/4oi~^C =97;>@*yȅUU*bjJ6m85U-j[UGNmq+j|(5$?3?9aʰUO,YEoIz*܈/0$߁}6g3ϭ֐I#ө]$iT5bylC^Y^cHzQ(tDNvOل .snSάfq5oT;qWsn*ZL7[]ҕ]:}Ŋ.V\pci7ˌ$DB4qWJpc}OK /shKҦ旤/۟SZ/>b6@ \]ˊC 1Ax` /gd[ZQG7#Y}ny&Sߖ7}m8a G1F+`I}Cg1ɝ#Yy(/>[hjgu]wJ>*OFְk:5y!qlTko_ *}ࣱB\\{|q[,mxl?߇ (-ku_iw~Mv]g bokS+s\[&g vr[cjs'[%dԬP 0ƯҔ6wRqz*J?m\(zkFrqSE͌'IlcĮ"{P1Ek53=Cp!}?2tW\~ Ӏڗ1xJ444.EM-@s *MR2&I>:Ҏ#HڢGc !r< Sz&bg;^ r}8sPW0ݤ/)4|manSz{_đW~w6,rKT {9NWL9>Vt;@76@q/acEK3P1FC!z#8;lRl3)0}f&eo=ۃ gT~bnmO]G v@~3FB޿Oyai$eU2Ռ{Jgb_egt;,p1ߟ# $W=ONkt7%U. -X[.rgtR 9tzgm>6_~E^GuxN!곈}6x|0Tb)N3h^1ŒKv Frػ`\6\B{ K-ӊ A,O`CL9"Y15 Јd6FԲ;H!C$jtF !=mKՌK>Zr[eӖ:m^’]e6%uL(uz*@ .n=O08WC:!aZ9)&*-UCrNZ9@/`e_ /Ģk?Qɦ=X*#M<ĮR7Z3H5}"w5GP k3pKEx-T=?0ӐY.qmSB^)8kXIri,H X Ă33 uN% & SMr}*Pl>aS@%DE#x&N$rפM`$kJ Cf=َ*rh.َ4 `4:B ucZ@Cucu=*ʞJ"iF{4:,aOkzH|FA71{$8Z=^ȓ\=G:p&ž@Mp$'Ğ>ٓ P=I홣 \!0О%ߏ8oec.4fym2f7,,/H2 _:}(!,0(L$Ҏ{')PQH=FTȡU֣(=2RDR샇%= BQQZUGc"4~-_؏5x &ûP\ ,.!L(gAe Q! ȅ0]ei ydmRƇ3q@(£XҰOy U@bye$ .ҡqA*$BQxLvpA3`u V2 LOL]JP%Ϩ>Hx1 1nACye@iDs 2$##`y4`a@qD,9 hh>z|S4$>DPOH;0J%4 g}@9D˅_:z¡~8/݅JjC ΂*Pq(H{! d ?\-v޷:Y&A*Q8ٻyIϒ.zE(z$*qP?:>t(1!:$$$xPS ,GMZf qִff q š/g 7:ր7@J7:PXuϓƓ96%_-tc)"X dO3@r@|ǠL(@AKsgCg(UfsL3DFЦ?'a<؜@qRH'@c"x;e:-k/38] kz?xP4{PS0Gm>6^^"keYV5AΉQy򳖶ڜɉ0(+E]~InLAj#;ibEof.u}K1z=“ x oQגx_ fuG?7k.~3W%=J0?H)\/6Â^=''YڽH?=Sow3FL; Yx0!K*+|ɦeAȥ/p6\<ߞLuAbdr]v3<~wOX2tReɰڠ_%C'W g\>S09f!O_0HOxyZ}D%ϕõ E1enmb;/bxjaGwEaXm.(TNi*qx,.S?mGC2ug7A)qS6hIYϏ@g>H 1]P_J {f*9a\=aYp3W3vF Y,-ѿGk H0yLUpnxT8!lbk˪jyKgޘ` Z-Up',v=ћdOI7U+F AVcС)" F|N5cʱ8Mb A~)NJfp*+n*o"Vm65-ITA"J3gu lA. !?c/ I᷆ߠio+Z)|J^e=znX5 @7@hEU1,[O!/$/Pax^d`; |#_Z mԾ[j_+MSx߁ ^snb8J rߊ:FqLH'嬗v0a^Wv }zZ >:"t>ptx{btwlVURO{XI&Z]"VJ¦P`~귿Q52|>.5<8CX:tbe͍*э*wLer,Ce bqAgO07 8݆^\#d-"4S`Ѱq^0ݡіUɣ0)F=gH {hEG/KG%|@61>ŕKnt (8"ߜТ֍ Jޣ!Ӟ{vą _fdK|Ztd]a5]dy7&=&5}9`PR 7(Q7U!ɅۯE| ULmhÔ-ΤP\llՙeۗeFeQ-完YmOռ |rk,}fͨ{Z>0,wҤnϣ}g<3??^ǚ=tN> Infr׳+V6Ycץponh(6m?Ûux7 MZpX~J׬))VZ:{ wFZvܤ*򞴏\tUݱgֵ76-6{ŹG/\.lc~0Ķ 2{z"&l!2<& 'fʡG#{wKG s'??4tJYS F=74JK]My55FhfL9@gg "|͹ޢmwDo`onUuSG>LVi]$ZVm4Xds56i!t4Txo蓓)f"tf n伕!Gʇ ںn+k@JgYl)'p'R"%A*,_F؞1~6Plߙ+& 2"\Y1jo` ^jM+3#Ǟ^mێ=t#ᮟqEv_?sw* *.vU=p+ |&spW9W=qSWNi~Į9Ȝoݽ]Ӧd9 :rBkGǠa f bYA/_< y@  k V   xݚ ڀw~{)$ClcfɰdjgȜ!2tT*ȡ4dSGDTd.Q{^~6s]}=kw]S^?o9fW:"k D2(#0Cre)P%C'umI~>x'#o[ަ7G_Jp&r]L0Ƞry.7Sdd,J(z8➁$IbJIs\#ImzPF^v'BeiJ."cᶑ0DATE TK9/.m2~`rI1SZR8T6ȍ iﭷz$ŒJ ]i);eBrC.I4d!C[&%uǣBYGRƜf4EEy\[iY+9uj+$OwJicc;OהyMFV D.d2ftf<5ԇ%D_]GikOּxjB]…W9a*!l1եi'ϒ["=H[6t7j.}GS~&2( *Aa VVv="5s%EW#<Y֛oY\{a< #ЕԐ k]-Ld L)qe w"X ajL{a:,MGAJ&[@(WFJfѶKUeQe(}Ȫ$[u.M<'^!bQ~}_Ǹx$AZ2o2el~#TgݺdIzԸ4.̵o+;v\d"wkӐ58M(tRt-6O<`#s-kgl 3=]yssXr1W7Z]`5HJ`Kѕ?ص zIɫ26IS'kyGctUZe}IWG*뽲?A^k#]"=JUp61~f*AZ:(BzczT~Ma]g*bUFfr0iHpIt& LndI1wlu=~◖2`{ob1Y;bKkQRY$Gʲ8^WkfynXΪ`ht_{KxK %Y|IPI3ow挑z]n=T4IhwdWOکjk$UF[MQ:UNvZD<y)uG ߍQo.v1K2~@/}ڝF(@w-'T]_$/&Cn0}!cnlRմfv7Z'HmbJYXE;nlƌj.-I{oeLߥ<[JMG=0ڀ~;%F2{}4q\v@PNFck=N^lNl;relӛIa] x܇{/mr"il/$Qi{ .Yq右۱i.=NU[d`HvS2n%=^>Dz ^OZ{WPQ5gWW}llNe*KmvnL9%JifYǦ-c_/TyyZ/ Q坑݃6!^a֒Eź0=;;>y:'#3݋4rb%1Rpl~9gHH=id [%6$Q/ľ܄}N*Ό-3V yeqF͓kNI%MMYm ~?].wdHyI$uN'eζ7DmH&aNZ#c\v9_&ʠvYd+o>7Y_vżu[:\f s$pKn?VJ3S1粈c?MX_Y v ]o.Aw+u ;>U_'W^؁'*[9 :<޽ ]62O'H"`_bEqaߖft;:hLt=]]z1tcޥ&`_ޝ:wMn8J,l7m }uٛԒnYt)I3 vn,EM^@=B⺲"""|ݔ0[kV~ulʟi\]e1ҁ޾ m=5b0؋19&XowVZA$l5n7Kwo\<]2v8]ݞCSI<6G21/ƫ2轚2X_FَrIjW=Jګny rfTϿEnvv t:\:ct /+?sMb0t@)I3a/h{ad~&4؃䂢+BUam~ȡ{Q\3%&)5UMIT ų=? ;o$uJz]ukTY\9Κ+%myꏀ]W)0`$lA ~gkJv~v3a!#ﱏ/~)zw:ԅN vܾ̽K۾2O֢½!c,s=g5/ !pPޑ {6{i9k_2kD?b'gͣ\.&e> @: 2> M2sRDgP `sgn^oȞp0G6zYw_YΘMѯ5+e@7^ݰWz乇v:{_7q6fZewGvH ~tH<)%)G4%nQW/1IjSFE~2&$Jȹ_f{N M(=#R^ lxa6O>gO^+4&*ȢpԆxf&FP XXBk)9X݃!NڵR.RVVX=N v;]^{/c)vo$#~s輻wf15fd7#v[`yW"v_5sJxvwY_‡Lx|7ۿX^awh zBxDli[F޶r"+r*6no6"6 >"mRNa灚swgv>cT<H9%2qml=wgxi>ʷ9~ymYۑ; $bfvӣG?eEsn_șܛ {]gj/xYw3%+bߋ dڧrŞ耏({zjjGר[_q V_lwj]6ݏJ}wOQ[w_"sEcT1⥤vK\m,$A mYp>|%gD߱:P]7n/ρin/kOkkpHSH>t.pgGcROY/ %%[!W f{;.EImi8Ō2&1o&;gbd8?;MN |rI 7\4o|^&[zGsr\|XI=6>GRZfFJJ{# }r*. ϏxE7 @քP)=Ys ^¿$_c( % j^yِ5| a";E |,=GΒg;L#IRwP;u{9 %oSg>o>C^^@~Ǒ8័O%\~ dS _Ź12Yq<yq3dK?@:_;`kшy|F3-:"YVM>#wȱ߻;}qx?J:ܽfwӲmP?mRݹ6qK±J[z/V76;*wPJAKxH$,Ifh.=N?em0?<3F*%Ύ'C@zx!߆һ!/ȋgRRԃ135<{J7*[<>Ɯ _p\ )5sn\7X]Y,j6@f2g2tٟa1 8;͸Nd4kH{x$ydey^figzFP!Fڨ4/FQdW1pfΜ8Ԩ&7E!Zme# 8{N:wz9(GŁzx`hd~p4paCp70?oq QixF]#1#G3pRs4n+kg^9 ww}xA{Cc/wc.goϰ9oG.GL1 ,@֕드yPݞx06w<6>kxtU#0r?7)4~?/!"[Ke ފ_ůmu~owkx]#?%=w=zGw| >ig?/:vxkwW`?rnx\Ȑ6D|>9'%QMk X7rLdnڋ&nS%^bӛl_-xUYoŷǼ߅x߃Xź!lb;8˸Q~oO6x7ރ}cM?"gmzŸa_ExTyt*^GO$>x'qx||3iy8g1tȫ-[C!2dZLˊiY1""xތOgy/a_ƯUކ_o76~1%4Os4Os4GOs4GOs4N4wL[?mO[[C_xrgޭOs D;߉aW8ϕo S_ȫoG8OK}}<&h|QMA/B8&Eeç eÑAOMx3~ ? xR֠i_[^ކ_o76~ߋލī #t!#p̃}5d~yOK|G;| `?2d~ ܈Ix Yd| ^oŷhU4|/*ĵi?ŏFDdHWc"C":\rd%2a#S0K<*ְ lb B*Y5dŸꑕP=#S0K<*ְ lb <ŵO _:pJYtS\)~k?ŵX:6-lc'pTߦ6շMmoS}Tߦ6շMmoS}Tߦ6շCwCP};TAtAtAtAtAT};UߩNwST};UߩNwST};Uߩ^2ׄOP723̱2oû8[C~mp?'2 s,b &KTDKTDKTDKTDKTDKTDKTDKTDKTDKTDKTTKUTKUTKUTKUTKUTKUTKUTKUTKUTKUT7 "L1 ,/˼2̻.˼2̻.ݮt+Jwݮt+Jwݮt+Jwݮt+Jwݮt+Jwݮt{TߣG=Q}{TߣG=Q}{Tߣ7TZ4n sP=zdX`_ֱMla;lec.s٘\61lec.s٘\61lec.s٘_____________________RRRRRRRRRRRRRRRRRRRRR+BmӑVd)fce] ƭs 9DaxUaO}S}Tߧ>O}S}Tߧ>O}S}TK9jE&b9X^]WyUuw]]WyUuw]]W{uw]]W{uw]]W{54^Ckhz M54ֻkZֻkZֻ zqtdxWd)fceû^8`X`s#û"L1 ,ӑ] a zItdxWd)fce_ s_xǑ/vÿ8n~w|/ց:Y? )tGn 79S{8ƊyOxVwo|~rG9G <מ|/8x=WEG#w_m[{.KsΞqu4gw {[GS{bh%^o+q=?[*ߊo÷?;.abuyh3/ ˸x~4я8ވǛ?gsy/a_ƯUކ_o7#18WnǗ聁O <<8vہ'||pÃ'/ <3 G18otˎ-^=˞W>{ "FGW<ߏuIOY=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳3>3/+q[ܿ93Wѿ(pm#u䣎|lp,L NXO'ۿOj>{;gOXX?{07lM,{l9Gn|(2rcAW~oowq=9r?"7`Cx=O^}d܊'>(>s>s82ް>y`|5|)>y>Ϗ +- ?lVQ~ȰBdz} ܉A QQ^=ʫGy(yqQO|#Sn3x`yϋ{»}W8r+[pg>Go|.2~wd>s1?hp{gvշ]oW}{ #oT}{>5]au]z82T?SD |rpnswExQWՁ;gtӝt9yNwӝt9yNwӝp/ ^=#\od3\zëz#o  + ]γyv9. 7d/11pKw n |_x,?a%VKۗX9/r^p^=ӫgzLW<'| ۟Kߵg/ xTq~ x{n2tP?)Yl}(>7 ŧ)fc%p|kX6mU}{U߫^WU}{U߫^WU}{U߫^=ou(>o}P|Y[oWul`[N`|~.0~3a(>L1 ,~ۯculױ:_~ۯculױ:_~ۯculy7ߐ~C y7ߐ~C y7ߐ~C y7ߐ~C y7[㳧)03̱2 ~4n?{ ~`%2>L0 s,b &wNG&b9X^Js׹\u:Wz+Ε^Jqko`%2> L0 s,b &礁ӑ9i`)fceS203̱28[ߠjFJ`%2~#%03̱85c6vk|ZƧ5>iOk|ZiuiZiuiZA{=hzZރVA{=hzZރVA{=hwxfx`+? ^_xwo,Ƕj3gx*`Gȍμ=M=}~ ?=+^+l<|/W"+k|5^KR|-_o ]2܍{0Žؓz'g~ `kX b3*5vTss8 K+7#Q~oOMqތOg9<~0ނ_/WV*~ oï77{;} n*?7N9IxlO8̓OId9G̓O ?vN:>jVgS{NvSgn??4<^;u<|<|ay5cO|Ÿc'8p_#7'88؟>ǎ W ߼a VOp1c pW7ųmOp_n8/;{_a=?+ƇQu{Qoxu7'8;ۏ#?=#c/2> oojGkOgW:zOTa^IUF~?v,>>HƵzZ=Hӟ 8H>?hs1Cd;S$N~Ig3S[O=dbYCd "xD2xd}J'~ŸHH 0CD2D2w>v5> P|"D2p8֊O$7zuS<[|"!P|"D2,{^a=z>HO$dq?|z>H|z>H'=ECVD2_ <H60CD2p75Ț?HދO$j!+/ ?7pvcI''y|8]S!KÃO9px8<'$|`D|Jr8"8Oç3:ßzU^ : eᰪ'ɇea|X&ɇe2pXg*ay{8pEael967P7B={+eᐥsKCBWC.>^U9sO䖠x*n } ۡZ1?jXK w%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%ZH́!֬5ZXNwVxt\ +?>yN}">%V~'~#p{a<9QoDŽwE^[:Ӹ^uWמ>2NO}֑/o|uEk;_ N`_8;>z-q-S0K<K'ul`[NdG"/܈p??ۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺwK8[.e`%2ޥ L0 s,b &x903̱c#S0/o_g/ }xT8[ +*x}d\Q#[pFÊ߅VTVT`XQ#+*ߝ g+*?S0K<WT` &ȸ+*p7F܄x4!5Y6f}۬ommַY6f}۬ommַY6f}۬ommַY6f}۬ommַY6f}۬ommַY6f}۬ommַY6f}۬o[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6ovv=|@+'W<Ox9<Ǒ#n؄/ o-2-2-ӑzWy^=ϫ{|zW/^x^__ y#/tHBBB;l',|6mi_4<.en܃)ud9_֛l_?5p^T<.e\2gR^2*\gw)|a_Snwߥ<.e[bo͍\2 ~o›Si ~?_CE<_ &ށ`{/~?n'^o]ߥ iw)B\.9>GW+v;|̫G2ppnBj]2$|rT3.exIT-.ek X720Aw2кdߥ ,xw)}? |cމkZߍb6y\e\KQ~oORnȳw)2!_Dߥ 18W2p'x Nߥ |GߥIa"yD&0|?^Dbx6yx>^+Ux5/%x)_7`.vux^n{4kQfh ۱wg\%\\18ވǛ7,~?_CE<_ f7'~;%pyN}">?v4> g$[OIS{'N /~'>9SۏƫN >^QvJ`?8ongS|ovJ,^ivJ+GSFoގz<&~;%'~;%pXS?aOvJoދO>z2'~;e$5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq). _ |nɁwkp/fsepӁ #/j%wھ{/ )d{c^0 ~o›Si ~?_CE< ފ_6:~w;5^{?xu7`y90?(G !܀8|"> OKvl_q>o6|;{x߃Xŕ/d~?Ï'm?8R*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjRx#5HG4<>471rcTC#?f|_"Gϊ}xJ|^W۾_Z|߀؍7b)ŦcZx=7,~?_CE<_ f gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZ7L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&4y#MiHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miH69)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8e9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wli=OyZz󴞧BG#}>BG#}>BGQ(}>JGQ(}>JGQ(}>Jc1}>Fc1}>Fc1(S<&kd sf5;jwԸAO' }>AO'I$}>IO'I$}>IO'I$}>IOѧS)}>EOѧS)}>EOѧS)}>MOӧi4}>MOӧi4}>MOӧ3 }>Cg3 }>Cg3 }>CgY,}>KgY,}>KgY}>Gs9}>Gs9}>Gy<}>Oy<}>Oy<}@_/ }@_/ }@_/ E"}H_/E"}H_/E"}H_/їK%}D_/їK%}D_/їK%}L_/ӗe2}L_/ӗe2}L_/ӗ+ }B_W+ }B_W+ }B_WU*}J_WU*}J_WU}F_k5}F_k5}F_u:}N_u:}N_u:}Aߠo7 }Aߠo7 }Aߠo7=AO=AO=AO=AO=AODo0˜H4HRdu;5|C)ߒDO'ѓI$z=DO'ѓI$z=DO'ѓIdz2=LO'ӓdz2=LO'ӓdz2=LOSTz*=JOSTz*=JOSTz*=FOi4z=FOi4z=FOIpτ?PRduaکSkNZ;vjڥKk.]Zviڥ[knZvkڭ[k=Z{hڣGk^Z{jګWk^}ZiڧOk>}Z [sI|8ݏ4}<&kd^!_M|;z=Cϡs9z=Cϡs9z=Cϡs\z.=Kϥs\z.=Kϥs\z.=Gϣy=Oϧ|z>=Oϧ|z>=O/ z^@/ z^@/ CehEY)cFʺ0_zYe^zYe^:uPAZj:uH!CZi:uHaZk:uXV{Q^E{Q^E{Q^E{Q^E{Q^E{QD/ыE"z^D/ыE"z^D/ыEbz1^L/Ӌbz1^L/Ӌbz1^L/K%z ^B/K%z ^B/K%z ^J/KRz)^J/KRz)^J/Ke2z^F/e2z^F/e2z^F/rz9^N/rz9^N/rz^AW+ z^AW+ z^AW+Jz%^IW+Jz%^IW+Jz%^EWѫU*z^EWѫU*z^EWѫUjz5^MWӫjz5^MWӫjz5^M _$ ҏzQz|GyT5Vv |Kf ^Ck5z ^Ck5z ^CkZz-^KkZz-^KkZz-^Gu:z^Gu:z^Guzz=^Ozz=^Ozz=^O7 z@o7 z@o7 zHo7Fz#Ho7Fz#Ho7''''''''''''''''''''''''''''''''''''''''''M&zDo7ћM&zDo7ћM&zD?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?Ko7ӛfz3Lo7ӛfz3Lo7ӛf999999999999999999999yyyyyyyyyyyyyyyyyyyyyEEEEEEEEEEEEEEEEEEEEE%%%%%%%%%%%%%%%%%%%%%eeeeeeeeeeeeeeeeeeeeez Bo[-z Bo[-z Bo[Vz+Jo[Vz+Jo[Vz+~~~~~~~~~~~~~~~~~~~~~Fom6zFom6zFomvz;Novz;Novz;Now;zAw;zAw;z藊a9OR1(_*Y)cF:U|]!ߔoɷw;Nz'Iw;Nz'Iw;NC__$=ԣ,2C=ʣ򘬑N{}|U&_o7[0].zEwѻ].zEwѻ].zMwӻnz7Mwӻnz7MwӻzC{=zC{=zC{^z/K{^z/K{^z/G}>zG}>zG~z?O~z?O~z?O}>@}>@ }>HA }>HA }>HҿQ2G1Y#ke]Wj]պuUUZWi]ӺuM5kZ״i]׺u]uZ׵k]׺uC Z7nhкuSMZ7njԺuS-[ZniҺuKmZnkֺu[m<=%ya+JyT5Vօ955555555uO={ZiӺuO}Zk׺u_Zh=z@111111111Zj=zPCZi=zH#GZk=zXcZk=zD'ZOh=zTSZOj=zL3gZϴi=zLk\k\k\k\k\k\k\k\k\kBkBkBkBkBkBkBkBkBkRkRkRkRkRkRkRkRkRkJkJkJkJkJkJkJkJkJkZkZkZkZkZkZkZkZkZkFkFkFkFkFkFkFkFkFkVkVkVkVkVkVkVkVkVkNkNkNkNkNkNkNkNkNwzGwzGZϵk=z\sZѯ-=5ua+JyT5Vօ~ [QVʣ򘬑.eeeeeeeeeUUUUUUUUU555555555uuuuuuuuuwzW]wzW]wߑJ~Gf؊RduC?eʈ~QyLZ_NzF0V<&kd 3E+E+E+E+E+E+E+E+E+U+U+U+U+U+U+U+U+U+M+M+M+M+M+M+M+M+M+]+]+]+]+]+]+]+]+]+C+C+C+C+C+C+C+C+Ck-Z[hmڢEk Z/h Z/h Z[jmڪUkVZ[222222222>(V<&kd s6mZ۴imڦMk֋Z/j֋Z/j֋Z/iKZ/iKZ/imڮ]kvZ۵kmڡCkZ;vhڡ$eo}M䅹maĶ0w$~50n9ɝManx|h'T_L3{z}XtJ|,ˏ$Qį(So_yWEP>4E8Ҕ'?x7œxRNhg_sN,0˅\L| % SV=^TS6L$~-#HI̩)*5=zԌR?l #HfLy=$'|%z6{F'ߕ_M_6Ef0?̽|؛$RLW$o$܈9=W,c2[~3!c,:ѽx$FוLNIeEģw2[s7);ݤm'n~ȼ. ?ug>,?SftLxOnqjLg6'1ӈ9ӈT|*bN&dbN&dbN&dbN&dbN&dbN&dbN&dbN&dbN&dbN&d|6lSmrVY*Ye9,g嬲|ZXrbYN,ˉe9,'IJXrbYN,ˉe9,'IJ\{krY=˵g,מڳ\{krY=˵g,מڳ]i+vٮ4ەflט]ckvٮ15flw0v]Evٮ"UdlW*]Evٮ"UdlW*3P_aįQįqį(S&~3sQfh%O 󧉟s8|mWhXbk0ljτq'򣔯EϤ|=z}J7@i9m!zA_I/?_((ʌEWy<(7oߖZo忓#PbEe,eѩf#BV*Y-$[3h',_CGM|Mv*|#SoʷkS/u%e}_A'jɸ&%o?.B~K+ow;a6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"A/07ca27caVʣ򘬑.;ZwhѺuG;Qy<xy>~&T-)ːJ%Q"*QI`,!̐el%/Ge߷2B/8~:yHjPǵzHG8WGcz9!{j6pIi|#񡱿Z7 r:hƏfm^YƳu9gy5 o s-N+^y+r^Fkn꾈Ëxě0_2^/󰍺mF}[5mWVmgۙmfkWj^ӛ俎Mkox}ڂqzw].Ntδvޅ==꺫~7>y|{>C>>QOī'܏a|{W/zK?V>櫏Ӿ5K!dҟgi(o OO :b0nnC.TPwp#x7Oɷ<śQ<mfG6Zg~fXXZǪ?V^4yif/iSgh8Υ#P+N1 2ЋL:xL0W\缘H$'y^&{՘ o,O> f:?/},WټZQolf/ۜe_ڣ5q>ÏyqzNrjp'i?ųS;epigOw}7Osk& "5P5[Xba=Ÿ0uQZ1wbusCBq{g}qn{$ߞtFC#И?~\?6ׄޅbM=CBf7us>5׷g,,?|Z g[yK-³^ ^|>{n26>N:~Wj^_:o87ſ:Zh.;xٷǙw]yLgs^~tM{xJwX7<&nw|݃z!O?!;K#==c=ySO>c}a³}bzכO^CO_~C,Y;@B[A rv0rx=T&_ >5ާ1OhWb;ccXif)M4s÷r/{rQ[樃:7z_o oݛ}Sޔ[jE[wyG3Qwߑ{ge'='|:묧auY~]gߣ{b=g:U4u,t\tSntэ>;; vx׌PhЌ|CG{S͞fc>v;ezĜ|Lo\o5\ =^|_}+/Kk?O^f Y߈4 3x?P@~ ‹A0،7، VsLJu6ճ ?K:?GpgG9Oq=HgF:3ҙΌQjhF1Z2܎v3|>sٲ'h|2αΎXge4f=͌48pgoqg/t8n֥.]. ^fv_ߺ |3̤%ӹL=̤<ǫ3ޙ;;kMpsDNa2NOd&|bm9"o 4,yYeς,Ms*Sy?U:?ƩgSMmgri|kijNL49tNw=Ìx7Ϥw&fb/h/q,~lZgll{_kv=2le)f6:یeM\6ﹴUk.o`ͳ>--77ioo= < //xx9r`ȁ\w/ -4W ["YD"8Kw.ݹtҝKw.i]Lb3,fi1.6C-,K`-D%ֈ/UkZKZjZKq\RZ}ė2ZWK/r_nhyZnr%W?Oxzxo{ xnTcaW6i\s+?s3[=Ӿmm6=&gmM].o;vݎk;C7s;iINvҰ]< 9]}ì۟ɇvYqv^4a//9}i>G>z9`_{A{oA!!up|9wGG`yQGayQGay?11?7e98aNfO?yO':)qʜ2'sFD峖Z>k]^8D 芄]Y1DW5 Q!]5\5=]#6 |F/8C,Ct]W*m~B~!Ʃ0N7QT-/f5BTT^QyEqqvUEq:Ds+n)zOe|*SNe|S*tTUUaT[7լ%Or# Fus3ίjTq m߇SMj:_Ϛxx?`pAgtA׵\r]Z7}'}{FTum:jQ[>gߡQ}c꘡ߞQ}U84P ml>}VӋ?[[ h\ʬBfk[y~/K0_~6[[69ėvV ە#=^"z> چ)O|JS#U^*R\5PC?0}wx700?7ajwfp#G)}O(ތ2k((?sh^}f3kcQ{cy0`3Vtާ}iOv:JW7t7ηsa2+/Q p0C}GG#QɣLȔ]xx3hqjOTs\O$i,g2ϧȟb>:w,N߲̗oh*TL7 _4|+Gӝ~:^O3x: ^L}a /K\TK̂5W~uyJg-ov9ї9telڳeӚmֲmzs\y|ּ;_,u=ȡ#|ǃm-cE|Z"\s)Whz_K-R>,ygpKl9]+\f*}v7dL5|o׿|]OX:Zz3?<7dzQ/7_ӯfW^M{mff6flf=Bg[Vڶoߜ6緙;ߖvxgwށw<ߒN|wz.vکNv7d.4NzݍnGoh޾}~ӰZ|PAC}agpXp1GxwG=ucr cדq |Ow_t0N:/:Iޜ>2`69iN߼?= g0ʣ7OYg9+>c|'FSy}_?Ey=`pp/ʫQ$k(ǃDyc Ճ(?d*Y?d9d2XYD[[>õ?G=v(F}V2ʫ(g^56YY:kcGC_GCv>5̪|+!|KEBK奒٥JV}dwmjRJRSnVNک3Sy\o o6~RY9jLZ _vT_K딩^7Rjtbl6ק^h'1}vðz:&d?9:z=::5L AG'ފL^p3䦍wA&$O2QV̤G/W?WFEx'70t-'"|"Jg>UNmZT s5N-]h–h#2 ?d yULi)/]\R\r2(ODŽ] S 832O֦%Z2Ҏ?/х))5vT֥/vo&[{piRXc-PchbӸJ:iETűuk&cƒ<+*161L3Y]@RJVu* _r4q|mUK@$`.BZ5^u SIO1M)')tC '` ꦼy4o4xܼɞ2j6c)yK6\وg#X.{ V VX.αKה|o]IS󔀶a%h`-X{xsoٔr *9ؖ&!`̀PV]V EA?χn"HBG4qƅ*:PԔwQ l/c'LNa)be'Aqnϋ&_ ^Y"=S w aP%%E~5] ,\VUovo[Yϋy5Lް~uoWh'c۽kx|FjzNETez 79O&h71Ma`)h~EXǨؑCwXSdvSsŻNy8qq>;o!w1 ca*/,xm|6m%'effX.mJ)ܦ\{K23333333333o)M<Ѭl͌`4͌篕_㸞C%\,,Lpv>sq˜\ 愮DqεN|$Nԝߝ̕N*pVqVuVsVw:9)wG#ݙܙYYϝuٜQ\ν<|B"bR2r }JκnY YߍWM ݺ99ss󵳙3-UU-55ݵ܆6NgKl6ζvYnrusw7p7tGc--ݭܭmmݱNrr9 n;ѝNv{7ܝ^w;o;Sݝwr]in^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[usvfvrfupnvnqntnrtrvq.s.wfs::k:8;78!;NpprwvpF:;;;: Qssssss#ݏ܏O~~~~~~~~~~~s<<,QyIOy7---||,\,,\--\-----------ռЋKԫ{{:^66F{y{xzycͽ--mm^7M𺽉$ozS>ߛ xސ7MvvvNNNNNNNN........nnnnnnnnr.^^^^^^^^>>>>>>>>~~~~~~~MB #I 2Df&Yldv2E&y|d~Y,D&EbdqY,E&ːerdyYDV&5$!) UjduYE4I')IE&Qd]Yl@6$Fdc ٔlFƐdKٚlC%ۑX"x2tdLzȎd'K>O$CdB]ndwٓE&}~dr9D&Capr9E&ǐcqxr9DN&Sitr9E&sy|r\D.&Kerr\E&אkuzrDn&[mvrE&{}~y&Ogs|E&ߐow{D~&_owEuG QNtIg3Yt6:;Isyt>:?].H Et18].IKet9<]HW+ iDcДiFsZUt5:]Iע Aku(.]O7t#1݄nJ7ct %݊nMt,݁vqt<@D:N=/tGShSt!:Lwt7;݃I{}t??=HC0z8=IGc8z<=HO'S4z:=IϢgs^H/K2z9^IWk:z=Ho7[6z;Iw{>z?}>HG1g33;8;?89?9?:?;;I}>C E}B_M}CߥC~B?K~CGBO9e#28g)l$fal6'al [-al $[-͖a˲l"[j,dYRVgYVal &[5XkNVaغl=>ۀmFl)یa-ؖl+5ۆm˶c۳lƱlf$6NMa}Me;6Ȇ0ۅMcl'ۋav ;av$;͎aDzv";Na v&;av!].a v%]ͮaײv#nav'a {=a ${=͞aϲ"{^a &{a!}>a %};a߲#~a'[83ι>\#L|f> gs9\|n> B|a_/K%R|i _/Ǘ+J|e^!x:x _Wk5Z;xwW|m|C>o7Mf| ߜo[6|[ߞ;.>x7'ɼw| |*ߙA>ć.|ߕw{=^|oߗA`~?G#QUc#8~4?Ϗ D~?OL~?B~_/J~_ï F~oN~A?uI?ß Eyv8Wkuw{}?Ogsſow{_owWp' .Jb)f3YĬb61C)syļb>1XyyyJ,<- EĢb1XB,)KeIJb9XA(V+E$bTE&rQUĪb5XC) !Sku(XO/6b#Dl*6s&1bsRl%ۈmv γs5$+v]b/&n1QLEQ$z'TbH ]4M.{bO/q8L.Gq8N/Np>'q8M.gq8O/.:/;/:/bqT\&.W+UjqV\'7MfqU&nw;]nqW'8_;CaxT<&O'SixV<'/KecxU&^o8;:=NW)rxO/>L|._N|/~?MO.:\G;{>| ΀8??????????????_C?c?Sgo~*jZ~~_?___oooo ;C.f4? ~?џO{^S]in^>ή~A!n^ΞaQ1q I)iY9yE%eU5u M-mG]=}C#cS3s K+k[;{G'gW>ξ~7wO/o??#]I"dK!})!GʙrK9sM.sʹr9O/ :ȅr\L..Kʥr\N./W+ʕʲ&CX&2u\r\M.אkʵdCvȦs씥r9J+ד rHn,7Bn)[mr;+w]r/'n9QNeQ${'TrH]4M.{ʽrO/ʃy.Oʧ|N>/_/ʗ|M.ߐoʷ|O/?ʏL~._ʯN~/?ʟMO.ʿQQT1ŕPJ@P#Ljf5UͦfWs9\jn5WͧW BjaZT-WK%RjiZV-W+JjeUSTT ZUVWk5Z:TSuRUjmUjC5Zm6VMfj\mT[6j[^U;.5NWT&ɪGvRjSjY A5.jUvW{=^joWWA`u:TWG#Qhu:VW'Idu:UNWg3Ylu:WW EbuT].WW+UjuV]W7MfuUݦnWw;]nuWݧWCazT=WO'SizV=W/KezU^Wo7[mzWWGcT}>W_/WkV}W?OgU~W?_ H@@~ `d0S0s0K0k0[0{0G0g0W0w0O0o0_0@`PpHhXxDdTtLl\|BbRrP ҠdA*jZA#AgPUvN0*X7X/X? 0lllll 6  ;]`|0!&AOcSL `js0 CpK0-5-=#3+;'7/?8 808(888$848,8<8"828*8:8&868.8>8!818)898%858-8=8#838+8;8'878/8? 0(8$4,<"2*:&6.>!1)9%5-=#3+;'7/?x x0x(x8x$x4x,xx!x1x)x9xE ZDR_NlCθ1]#e$~>xl- u"E'[uzL&"E*.4L4,EZXc{L%(F5JQrk\5\c乡Yօn]$=㇧LޕN# k(F4ioBx۞֜ .B7u?1P~"Eaơ."]bx:$ETu]hD'=zC=ۡ0H뺳Q-tE#I~XHu?5^POg>t,3';C>kfnWJ䚊o ͣ]Sti lrP_kʸ ]ޖ=F=lӞISF{F=톍uNEǵZӱQXc46wKtOi;ݽhў^CM {D(b20 jܔ!mzdd*VgZXI-}#'tt Zt&aaQC=f9` k gWm>'_'t#Ѝ/jv+A~ԀWG]va}h'>ѹѩSt6Fbt.1:]Km;M7tO7|-=LJz)-];g=?a|wPK&a["F޶!ROja]?ԯFn3NXXXXXXXXoXXXXzZUz/6.4Fa50e9`lvtlunt"E.2](д=ePϔˮi53i0?_Nn^`0 aZ$p'dmmmm2 LB&z!^D/d2 LB&z!IѓSrXtBDt6K^DhW4+MN ͬ̊VEH.]"E jPc#G%8 5F1B3ՋLbz1S^T/f3hTTi1bkXc@I+)HFJ4>oS}ަMy6mT>oS}ަMy6M5F1a]6ՇmToT^T?O3}ΦnB#A]Ղ^%`['8xBց zӈ^hH/A.j`]Xl~elkZ*gFcr; (C3?C37 |!|":('|"{%^":* ":+*+*{. .=AE؛t[aF aFػt_0|T{ق` u 0,M@ /B /B /B kZ#?#?#7|#7|c7|c7?c?O?|M@?qfu)褠)OѿA_tot5E20?gh~OzS} 550O o~}؁quo֧;;;;|;|aD"lu)apG1ITMPjRLh׉vh׉vh %Q]v%|%4_;QiM&`Wm\NJܸq@q}U t˲Ш,m;+۵9QX?έUs(Ip$m?Εrs%yI`+'h9$ l_~HC8c4hoH0 V7`} |6}`s`!CvA{ )Hp'm?K~$ us:4.`?&$ش ve]`%Mv_ļ51oM1%E 4 30o1` 1 yiFom)}4Fg :=z*|1 b4{ikڰ~:@:*TCϻwDv v w٥o|7?<=r{I=znBx3LL_C)1}I%5}IM_R3R9O ~j P7 Gu3uýn(33f73 nfp# (75EF"#qH\d$.2EF"#qQ CpWnG FbﱙfQ0k/_东ĘFc#al06B!Fc#8`na)kjbϤNj)‘;k>ۑZ[o]U`ۊl-*}iAo};x^!ua9 a԰jWjWjߚvG )54#HnlZ8b`иv-c5W5#Sub#qm2` X/)q8^K0j kZxNKe1_֓6HCXOkmfmR `܆Ĉb?1O'F#Ĉb?1Dumm2O P P보#M&6dbC&1d\a*F%t@k9Qhe8.l..n..pQ[JY{`X6ڰ=-΅-<[wl{@~\Vz\gkxz9i2?e5O7|b 9lDY pa sLM9&sL$H1 |W:뤅l0d1XMM B\>"\u$AW԰ ᴩåU뷄C {gdhYp a|Ѹv5.e{ML^#)O ^<{`ᅫp`fh@} ѮnY>6 ([swa\~@VNLTj-MSSMiָDZpi3Mt4lj)N*=ZuffƄJ *5&T )/Jnۻt2NCi:cP5311/,a^jf֑#)n4aԇj .Ϭɔ)IJvhX&xKxKxKxKxKxKxKm-ZFmtͧB$Bħ簅!j!jC *G=u'^>9"tb:4.LhNɷ!HWR4UsFغv b%2fVM5/x٦RBʶLtl{G(W`}DK{(1%"%l㲉/y!T"W~蕈Ux^Mcxn=~=%jdӗ5]T C]~ӇS F-h XMnCcUVӟC|#t *W;Lᴬ [{tj <3jQ_Rf#FoɌM XKxC{ YA$vrVfVV=(ggD{U@*iVިuuYXtߊ(q5ujPnn'|x>䖱Eؑ)""6soa.-oh8 g$6Ԃk}n1>ڬѓ[ޮrborىZډ] ṎjDodɽ|͡JOھ$ϮHD B|F*{[oބEVm-Ìo^MfX2ՃS,2 dQ2-Jd6YH(H/a*0Ke=ӓ(lͺ v[ m:zûۼVc Dc1ږ9_d0JtqgJFHIYi@D =Ӭ[oў->Ō:A+Isrf ̛|+C/ju@dyĘ֙Q7{}ZY emdOTȖRH)%R]6J-5-2\Y$ +V]ӭ6AQ"-D:D4%J;Hs(;q|36w񰴩Ӎ9 HQBi;U;f9[]%g0ǞN栵0|غ%lf9!{-Y.MٍunC#520I|1%%elUxk#ү0mAЇU6\[h={Ua) ]k MikeL)?X*3S uC!32C!I3,ۤx14F77toӓ$Gnas 1hx[$´+aҕ6W#zvO(!XyM'+O=# 3F=8X3̪LMw5LZhмwO*vg5&| !Co%2J'l'm\'m$$0/m㪥8ouZXVX$~p7R>flZ7x"5{#mꮦ0?c//7GZczl5/uv)` X-d f3JQ0f|VHlߦfլcLAZC cJm, ?=,Q h@ ei oM aۖgHYI&]Y1636!p:TGW++ {i23enJ-ґvƷД)cS&LMip75M njpSlbF&XhdbQp 6fAQ@ii>|YiC{[}u[GKd$ {AJڲ릵im68?v"xTZU7N[faK{ Yc?,3Q+~eF6v°JUpD'>6Mi&Goöi:ؤ+yMgŧQiӇ"i#4/\:g6Ԏxb!PTSuteV^z~9TC-\A lDav`;q/**=G./\+x*x*x*|PL`U% nUek{Io Z8*K:*K/iaNT"sĶ(J{{D&Si*m yLوZEa6=U)j:MlV T̽nxyuM6ûjZ5Ch)6L͆q˅#şoٰ.hxzdhO"{"$`4ld@ ;'<͝_T$V1rSb^PGq[Bߢ!dn}$6R_Dž6VN>81lTa橁x8Y:C@aϦ!ʣލL .YS\R,mkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.svg0000664000175000017500000154373314664334534026402 0ustar carstencarsten Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 By ,,, Copyright Dave Gandy 2016. All rights reserved. mkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.woff0000664000175000017500000027735014664334534026542 0ustar carstencarstenwOFF~ FFTM0kGGDEFL OS/2l>`2z@cmapi :gaspglyf _yLMheadb36-hheab$ hmtxb Eylocae \maxpl ,namemD㗋posto`u=O<01hxc`d``b `b`d`d:$Y< xc`fdbʢb l |6F0#Fnx͒Jqgje>"D>{EO >,"u^[[[jos_M%:0g80B.Lszðפ 1YlKWvest)Mk^Zֵ֪m׉Θbk̳26>'YҖjukZۺgm2 (4-iEkЖv}XB Y``c9ZJV5eY߆6G ΂`3| 6[uIpn-[pL0Lp;׸%8o>F8 G8`Wί"E^_=(K,FK+ybx TՕ0o}{uuuwUWիnnjmz-nvEEAAJ!*(hD2c%FʦEbb6$&7߹UUW7 tw{98m8bI ڃ݌7 SEG!3j㔐=w;P^IA;RRnkLS.)o8G([)9O,,AtS h yujZupPGxN on{ho2AD-r]u5e^dMX8=r5ͻ^Q\~2V0 o0kC qA跍 G< 9v`|NXWI:"'aW޺O=}k#"7e %Vs~-y$ŵXw&'q.n.EK#JDڝn봽7=|wL:Ӎ2vmrRv:=0P@DۓVZ7eOd7HMSY|[of'BL}ƷҗV^+{W=uҤ֦='j,| ;vAo=0q8"I³8yZ6Ǵo9q< i3k1%& uk {H}@΁W—^qԷ4;gg7Ny/ qPOЌL4q,ԇ"Sv=jL /UjC-woȍnj̮{j\ vEk z>pn=^=ajID(෠quF;э5֮s7 ;QC7U[׈yZIۘػ*!$ dⵄŖ-ˇ?{mf6po~mԽwoG6Moza--m#]?]?Vkzܥܵ.>)9NH%&T/ _IAxOB]8(.v)G=HPSUP>fFE-GGs|'?~zI*R|[` -V'ݙGP3b'\RI̞#n;W ٟDTѹb80^s6,rȥ ism15kk,}qWȝ;tseYqqC/0q|> 3W/ըsF"sIoAHI 8C„ w~@ _(]h=r9p! ;H-[Ifw;%=d꯵bmH)k=o\hEi 7i:-!mn:`[G]GE,;syH62ƈs՗:I@^\wOVõ<g?]Y{?qKgH[X&tdn[,Z!H6#=nݳ;OWUG4]]6ٰp7[aM5PB]?4P呂7o\!׺ߜؤ 2>8/p2h@k~ھB~a[r=Pr8SescF ӗ S#P|0z'zS)8aFBFE VrJ(EfDpU\'h4P jd3}CvfM}Zlf,.pj1tYj2lƗ,U<:zt[%Y!1vMfrc:_n"7zwvm zuidtO.3Ku =.#Cjn(,THu_Z 6qhhP4#JH%jt3M)#zzdt1Dn~9/ȋB@NV?p'r f: ;bBQHb$h3CG|#v2ydm)esvw~٬fp~DG r 0^XzˣՇcl& \`\8HHa IC?6:5H;lވ4C&\FjԬ,|MCݔ/f8ܮ2 .ҍl _/AkTVΝg ~T΂<`2Q&;XAW@@gj{j, suuE ֟:A 8,&ռ }|b0lFQ$px=4ddm7nru"N:O u^x@񝂍CG*%F>Tm?2.opˮ1r\T١K+L؜cn:8qyN\Dvj[ܦDy/*=H [0l8=`Dd&76tOd٧,崅v2+׷ TU[NHN8W|fG{ܘlT_Z1 8j `Ar㼌` h *b #ռBj0s$n^7w $Gɡ;N .A>3;My?zpͥΙ4aqp҃GFw|]֯!ؾbvq8e+)h.,U~4]h.P4s)+kqD2uϸuE3 V⭯ҟfS8/D]5ޖ*xWGj}l&klnçiPv'6#(%)>qEo6U+6ŋ8ۢlޏ> `Mn''zB-t/ꬱ3ik3 55Z 1ao|+ őm 0$YəOa1ag9up9Gת+b=H߀Q1hT]ҒQ^?s9ػ lB|4TNYBL, g#5A㉐=!7~=/X]WuwZW避[ꞞWd==Bm®ҏ΋v?$ E# L!7ط!TRRI4)H#l*:#H.)pӇ źRMB=ƅ(ǂ͵˥>A,_2%5pyn6/Mbt,L֮l+9QGb]*D; {PZ!*U1|s{"3\gGχyG:-nQg7`ԏ3xAx%ÏUXMZ&HX9>osGa '!lü|EW-ebbxsY06E>)VH ߰}V=G~Ykh/;ۇ0{4.c\h`5 FA5Tg[4#So3yuy=<'j{ hNk6 @1c/5 -T:`YX]g~ilp!e>1x06?eoAsb̪fyb3@B߂Yq?;m)h4skP UfW62c>8F(t*GC ym srp? ICY:ϻ&͜99TY-k%)@|FFh9*(RtKǻTXM-IP.%C"?,+ˆ= >tUgQWw#Υ7 ݋[P ޮ'j7 7̗9ZI SO4YkDE͂B~`Ig;mu֢zSg)rE܉=mK9ZD]4~7߉R6Hۂ(ji!BldpӜ^zz拾gF:qꢝkWl/СuX2rTsBנͫڂt}}ƶ_5 k4 A;oHLϹ)z.quAzyxjk5F-@lҙcڗҗ\6= O]9/5ڔ볝\tOCT3f(i ]w PiQwγ=JߌvGޮy[[,Et&QocÂyb66kMK|֋$Yz%P(^87DrK`%5.: Ďx=mnًm]Ю&2G(-@Q7xu3%@p~нt S]=)AG AVg; *=$mz -|_EZˢk<5U5fFIj`=H})0~F,"N6k"}ṒkT"$mZPc',ϛtzՅ];+j +NG>K#h-zp6\;yb~9.m \=qrqü=fS 6u(؍3#0  :Nz{SM]"`R .Cr`-U{낍znq tx ic+Ԛ:3Y㳙N*aVP `1Qb@fc^X9̼ܶjtҜY ӂhھ3 ijs+\8Tvi|Q< v߹c81-t\16GInJ:̇hX Gr+4Hjv4l!,cC54{ٱ4dR~p*;9nC%d}dA 4Q8iOi TgdulUSAq$.j6U;MǶۏێۏj9JDvAFbmLOI=`jf:>IǁJ! 6Txưqn̓S9ĀM|!ґ8X)hͅͳ(,ӌ2+lD3Qɕp$`Pt[ DV2opo%xZ)n:p4N)F ՆtT7Mu`8P*r >(O^tXi(M4! t(>hcU<@ܦç$M'(J׳Q܃<8Vjj7P?Ͼ;_!Q.h|:B)Ӓxܘs_d9aN=.WO.\|_O&tk.".Dp53͓ 6`8IuKjk/wiUSusUlr ̥;ѠMe`TB&n¦\ g2pd[0Ovz I'm%41}@€:įZ/r @1m8_.WRlv(F5Aս~]*@Qؿ VgM܊:MʞQZ㖵. HfJwKIA\f7zl}5VzG Ɛ u̻vߋaɰZ(S6W z7ek[j #6[6iSڣn@d`[}i]<{bN&kG[Q`Ek$|'GOR4: yX1dhz3TʷL-3DG%Z b锥3I陌R^cy,3P!@ieNq좀FS'}@4шÏ~*T(PY+=!?}>Ю+w*3Usƽ i[9a\uWeY5 +,iK\ʚe<zKC&Hdbktݩ7!;BTR@J vKU8bUH^Q;Okb%[QHO 9谉0r0}U>ʔV5^ܵ}ecFmۈrqLEl "I5ڦfU2cW+O, MJ񝁧6y?*0&Nݚxq?)>e( @qTVx>sjAi2W@WU{LГK^ A'96&E[ h8J*X>wyW+Vc*YP!3 ^ %"`ɒRcD@2ܵG5gL6}*Xl틵\"*p9B4MzA65L.2k,0^>G@@Hty Z4iepWtAh,8<{9ȽǷƶwZOYE< Z)t#/崐\F7ʔB>(&6ldit/=n>?&s]@Ν0Z.3Ĥ9MG6XIJHXa:C}3 6~>D3UO>[vZ_}סqN!ʃ -W S Ha)Y'lg8=`z(bwvi:2E!`;x,Y ߩ =Іj^ǻQ^_Yy`Q[&aYQ us0{&m胑*j)TC$ YQ>*P}H˥_7!n?Vا(sOGRBXbG/*󨴉bE("lrʔ$ΫdJwGp6 P/#j mtCR0}Bj̣RXvI>(j=:ECtV:O[h[5"uE3W. f[eܫ8P)e 0Rԁd.ُ:~}t<)/Q cOBGGp<"-G-b΢y3b#5RPCk{d˚ ح6d]LdLu鋶 LCzӮIYs;A@*nyڢKˏɩEWeMâx[*u -zҗrizH> 2$ =_j7{!h7Ύ|pfs%9LAQ,2WH(EEug&/ $̃cm$0^(K_ C]Di+/TRhOJ?Nޛ j; 쁳#ISm0Q4WՏ5_fd "0ԏ ~D}R'k GK1(_/TFȤ8>Q8m.mstÁ-`wZaxx";ͯ2o2:h*4X-hW3snP,ɞ "ޗ`7Nw8ɐD\ (,f鄝 IM|؟նkÿl5nv xL/LM}ݻ/Еum.umd>Nh&kԵ-h# +qs}v.L8c|P=/2,T,\fxP!:*}uLvyj{C [ ^܋lV͛CZk9~_+2_ʗ7%\~NVw|:$^fH-œl6[DniD>=}4b=U{xCu:6ݨ18=Z%ܓ&?i*V߻"z,K=,5keb PÒ}aM)dŐ".Aǝ2AnK% %7; QΤx9: J's9:(w̿sltWN~+lAڏm[w77n\W<9-N߹ti?";iw[;LvP2zrgkcl;#E*b8*<~h!:Q@qӼek/#@wꪫ' r*2_2mppm"Oގ:wFgRۜ{zh?U_3m3ؾ)[_./d jG̨.+{7g|6w6؟>d5;{O"-<+jaW22pWagy6&BhI2%1S*[ϤF۷%nwT QĶ!=00!dP$Oj!%l6bd[6,6`^Hfɖ3V ߶[8|\MQ lƜYxj?KO3ٲ%))JrGƼQ̼)2c"^–;@Y5u!'hVGTi M9#(ן<4s{@efQ`Gy 8L"KB3+fOx_c`= C@d-TOj+Jw]f1򉠦J -L[,Əvu&}z)AԫyzX߶"MWwP-蒺Mrk 44LZvɎiZcKU/Nja,a !"Y<]K-{S &,- l5V(DSJZU+6UԤ)jȀMXju5xkOxkCf>v;oĂu)O[H%rJrZNCQn?|x_B*kgYn3:B4WͤuQ.RMF2>8G3J<ZŠrVŗY~P9w;< +iչ+5DDhp,;ʹjfƼ=䵫9 3Ƒ,@('h:Ƌ&mTkPq8󨴱!ä.#Q{== 4V#mx _)IfC#yFN uQRPQyQ u:]g*OU֧c'PfՅԭںo>x,uP^"yXdci+Y_'z6~(+q$U;{S<^xGn}ouvXt%&3`.:gA'%O0j@Ew:мjdqge4c&ūY3]*tI* r6% &AR^3$p,a2GÇ}O>W476Ոn7[YNqOecu/=cm:&4Co<}iAO6ăNYm:̲f3J"MK:Ek:e-O7 6;kh}x?1/\g^y}7|4q'7o^ o.Uξ&d5v 3_P MpĹVjlU  a^vqǹ܈\?虽쪰:Oob2AL29zXvQ VUq^k%@$Ǡ#o}TscFW}$yF$y^2:l4/maԽ&oL3ѤNIq!#ĺ~N>0=ٞbDAw Oh CTѡ ֩FI.M#Œ3ze{EvceR] ecsERn`{ahZ]'3W0vIxV[mQ8f64Sc%WrF.aR6aLv0n=,L ZBU\]aJXL7e銛 ljQƀcHj\}MGޛ [X@"WdNS<+#(;<"w~omyL'DpEbY?~{{,o,RD(JbC>ܶ_dՇwffsܦk3ގ&~L =$&Cyd"le؄ tQRʉ@*΋7JՄpC#5-Vgo !Gi 4&NpOo޴խ9k'y=JS4/;٬vY3MiB< (Yuv<9_m@|zU _<';^;#b})Kywno%6,i7-+v(k6ic"Ym=t#WRTmR[nafʭklW޼(IdrUU5=^Dfj}-:$rp( %\x+>wW؄ Ou gq/,W:˺/Ɏ+ y+&Lo) @[@exbiu;:Ykw[50x:rsS&_Xxf[bT:7ak}Yx<5r'(>q-proɴ2HU&I-Kmhɠ\YFY`|fM0]63Bw5%#'iH(8[*k.Etc&aNmVJQKTMbX4?#4c왓Q,<v5?J [Js'ڛiӒӇC>䶵hMz__m27b2HC' j ,JN؋ LuqMZW7'./^L^DL%S n4:OW^of߷Rпlq{\PȖ叙y4*xBav kx@͗qY’.3HQF|:rƔ9`P_SRL 6b|jAn~<DN"u0Q\ Wuާfn6oH玤N N'S;)̓vGvejOXJUPsps<׷4}am}SjTYCheubm20~t'r3:_H7M笜YrN:1!-z\MaP}l&pq6*_UYIG~O_KU8FT{t( av"CBf_F;QnqӳB$MU*rg,^GD,IH:7FD Jlk6c']u;& FbFiB"&͙MykUP\M]J~qZ JP$5K?1/,# K:I)DoY:Mg!'S$M }ÊN~$Ū3wm6]r׊sO^ ll 6H{RvBoLg(iZhVd˂]w!r<3H/7CyYN9Y@LceY֖Y $rz2dk`8v1gI1"0k~,c$ tyh2 ^/sv骩m{ TUM~{WÏɿmkUٹ?΅s4a:ZDg;@Vם4`gلw]x/goLvw'vڟڔyK<+Ǟ~NF=ΐ7.'hٖ}t)vSK4Yԉs]kWN-ЯK`~kR-^"9BF%`%5S'$^\o;NKM#_5yr֖ jKgMdn7Y n NlݮmGYN̂09E&WKbK|ĸJﱵWr{ݷkQcZ\2R؛Oۡ_h]Ըy&܈V;~M/׭n߮>_[./m2A qJ{ >L M8Af]'vHTUOμŃ̚u\eAb~u:ynwݥIٸ$j[QV*b 聇nEC*ZɭEo?҃&k=t#=KTrfWQjJN^yٔQW/Oo^rrj;NM4I`0wϚ _ߜ !Iouz#3tzi kjmfL'k ^9uDћVnǼ^߲rn_CSC "6Gi1#W0=p']@8z}Q/ F"̒ &=lFwdF3v1FuDFYV'F`.bNu䡁 Vl|I׀ɷ*~)Z*!+uQvCM/vԂ.qcYs, wDiN6 YrLU߲[crcq5)V!c031;B0ތeG͝UaVNUe (;;|d;_TA"?/}Mi ;]wt7WY㰛nNgh7EB7_RE=SxV5P sm`ržYazRat k_F= dVٿgCj߇%T}[n.Z$Uq:ۛ*<ggnGh (U?.b=Ђ z3ek 4 v^QVJRT+N1Ey D;YC+dNA݇n$9MAyhpJ=^蹭%[ҫ{\r8L^Rڠg8ޥ~ad8U=gP'1.#l =ΑѬzR6np~[EfnG+y|:fE˻~E׶Mʟ]f}jE3qMOϚ{d?]uU?#/;s~򹃫ؚǀK-6B'闘̵Lgcg&=G' }S唩VCIsyRCM)rd7&UC͝w4Nsca7fl]tTwݵFè4ou֍2B>#o7(J~jE(EM-P3/rQQ@Wヌ(QUm)!sG7ꜜZ4 …U lڟpd:Cce's2E;u*'$]" c4} vzyDzɨn4bTF.b4R#P*~6tjtŋdۥy1 W!ןD}glْW_A4R/u|]P Ǯ~:t[94{-.ǀyA0 x6-NMvM$c50ghQ61BnW_us;BEg}\"\aQ=#ͧվv1ŊSY(R.i[9 JdQӜ< 0@BNya)j0Vh2쬄sOeP5>I~1!-A8agjNq^76e/쾇ݳRuԢZ&UEJlpYo<2"_:979f阎.! hI4 RkCjGBu +btQPu/ А1TZ5V:+zp8jy\ST!zru8Y۸$ՅFuFY Tj +[kj`GŦ+yl֦Y닍4R,+h")=U>yV˕!V]Z8G_ jW pH ֬Q6P8=wQ9]W809{z$5p+҃D%ꔒ-R`5CbJihEI@xQ@-Jhnא!7#םY ѣX2MnƔi&#ix2nB~#}2n)Ͱ.woB( Yk"5nG PTF;NQ@(奣$%l7Q?lRPfB!wҤJƝaîGٍJ vKgWOӬL_$ta[!i&M>JLBfR% ۣ6!o "$,J{l2"Qo#BQ'!"# H:. o <9*a$ <1ʔ/- ᪠(J&$ f^o ћ}6,+7 g2.;H\Ұf,-JǒEw\Bwjǎ>fM..klDj.Xv}mW\:5֔jKضV3BS$l&ijDYdIO~q!rW)\3 H.iT2R ˔D'i>-(*Qoc$`g#Aꆘ0ߨn7.>x;w,yc?Ơ36I61q ($,Njwܴtr(yh2l{s\p@ 5H?]JHʽgIhhh{ ef zUs|+DWxst -}"<;p> #?X;$}upȖow/&ν'dޒM-3g֛떤$yIEuR ;5ItБfb{g-:6ާ>k0ڹQs.A,1xBU\tBBA= )~3.{ҍPa~OBP:sQS=:Ufs1KɗM @PsygQ')_@\l`|N16fpp3,Y,wZ1~טOnoy'ǗlfCW?Ot=Kz (UQCdPn.<=y]Sd2KZu{d^&P^ qhEAakFQ7><~̈^=QbyAsX Gr9Aժ` ΕMʆ돱, ,)4KݑYZ?0Jd\;|h~ki?ev宰Kv2)i9Jcj~Uivo V޴ʍX~eCkˆƆKڰZn߹ZXkon퀭:h7ΤG+Ș}I]Sfn"u!`*ئ(E3 M N4jnRXMGs/MtbRS{i+-v aJu3Z/WS9ZK]>Ɵյ68N^~i>v$$&x;ό/nTu _pdR7#ƌ]Kqk^:J1)Ǥ5$2 ;ʗ$X[Z(ޜhJ7*%2E叙#zg{hLK,M#ǤOkdւ nnVZĦپ[ȷkV%ʂ:@S>Զ}S~.vm[kl&żVLsHuvM[2/z9ն.S<#y\6 nGfmȬ@xʃEӻeiwXDv [#:bL_hkm[-NٌEZ~emM%Y뛮%Zbth%:9}6xn.^%,uXF>.1^xoUQO7}\1B,53V̒ׄ'Ōzw67Oi6o_rUqp,1qOi#*n;6F(Ny'+ܣcTq333~xh4[ A=,Oc⋢rx{+=.zfGA=SMϒk߉kѥ1|ug\==j=$rR3, xٰU`B!"LQ Jc@({˯F/43ibM6A >A 0Z( zcdI Q&Z+8LTW& aQ<a"*FS)1^T}uМ5`-q'6nh־ ڻO׬%3<h%rܿe :b VY zlN]6p/oyiOc5xrM{>_ؾv5>9Xruʓ3r0rdet|¶Ld_*5hct,g}Wi\<csp=iv6l۽N8E߹ٿ}aq̈́s+Wߚ DٶD^؉>[DPjq\j3th d[)7rhUW]jiK97 X|/>g],pK4YW_ځ/&-.S0+0:AH4bc7o|~۶FyWub^yV{1 o8S8#(緥~w޹jҢ6ĉ"h0PT u) $`]+E:Eq؎W7jD-7(3uŲ{Ql`Y$OCoɊ= ;h>E3g^tPeNB*ʘ!x % ֙Y}IK %epH ZR ́H+!)ʵ * 1B1ˬB`> &)ç & ),~)|H}ؚ"odA[aO:)禓GwLr(yļCgQ#[UN84~c!yzݰҔZ3;zss.FMؾ1 FSI`A 4QByE軼a"OiPSbnByḰXKG`SVЍC/|WM߫ʪkjv! :|uQ(UϜe׷]N#h<;vU{}fjH%X&? Vu~V~j6A'MYvM!GP۹re紳 Dk/s)kq8vI8#x G,c?;_?!syٯ3ηw>w`||tuP~IhhnE/&jy+ٸuTS6ooOoh-Np8ޗU2$u]v$0$ c ߂ST6hBڭw.ci[ҙ-: g*Khq{FA lW?}'MR~<3.([v 'Tgx4JA]ԧ?21:yAc4Qd8`b4Dlu*l.]&' NY ?_EJOG#yn ^TA/UB {dȎU}xX1r_i}~8b*=^]W*s->KdfgQU(s,ZeM\]2)1 $l!?OnG'o~P]h꙾V'E6Fo/q+Zj z*S`OƁ| MUa{o03g}(骪5J8+5OOWU$# +Z J,2Yin>ŖXp 'E!4l񺻜i S(߁TR_ʠ̈́$^ŊMOwޯ,cӊф惞\I`T)&IX3W Sv$Fݸ{e1fHțaw(Q \9u\Ox7NЍ%hۑ\WTT۪˻UmʂjrS-kU-nE*+g]4u,}뮻mfmsMX9UuuUNGQ>+UUG7O(YA!9ې#I%y\gf6)+{?DC<Ukmb~c|T`ᾮ& >E7"B1;/ ʤA$vBfYtجG_))P@ p7:z3hfa2 :v(^&m胍ɛ7Mi(&+;vv&1S {\ر%W[7mnYm}5qoqQˊc^nBq]dZCG6\i9I/`b}ޥ75!parHٰ) |\n@s؇Ӂfs޿jZV+m#~xd Iq|Y;$`kG^i[يFTX *QlN+xDՑ -ML[J ϧ},i.F,2"BGщ0~IeOÖ[咛o}Ta>ľ/oz>E}ʋ `vz%5QlҥH++l6gSÔ|Bh8ڱt}C_Ꮐ֣*=d[™M{WJfw.a44D o*VVA8sP-Ҟ}A" @"Ȥt0+||E4N Łݓ1 9)*YѶQoP@ J2::b?2Hϴ3Y_nx[b¼Y1-Mҧi.#?\!Бck3Fʷ׌8'חed($lٷYS hC:Sli,ɯ䝂Fi$柌tn_=PpT ;(3V{ID{iEZLI sҢc"3[*8#^NG#c`4cCf4q&E:r@B$=DMRI'04 'yP^?RxS^3Ԡj"!psmhg8G41$G>LxNy8.'RԇG@"LC8S1I.uߣBG?> sj6خ0FƆ{17qDXSJRʳR%FL!sM(~l^0av$.XV]Υt:Jt1"GЏeC7aR.#*fE|[rX\pM[\c3`Z*؇qfPW3f!u61SJrmoXQN[1c_.ʁ 6a<K#QGRs7gc7P߀sޝtos02zr {V{n͕{6>]yTЊX(|'׵h%" ׫{i`./Md!]Ђ[x C9w<XcpKCabP#lmПur8/^W`Mfs (=TA{r \X݃f?8:4gdYc O*EuDmO[, fs 6W X6 b%֢Bۇߕ"l?YkZ&|l !\I8 |`&11P/ IK)){@'ZYhv&g @6` wE&yIIJ9DI=Ab̚|/HuD@& 찇NQz^~y @^,, Q `qq__X(.l{^//T8 c#*bi&OaS l"y$&̲Ds7Pu =j\.Qܑ?҆|rz4ʻ}ǃ ufůsfBQBEv^M94$?8<"<.L3jL(L5FVw߽wpf.p©Mnc^8(Uν>n.Key@{SF׆{`| 737KݒpȕHdQ"p(@dY T cTYK KJ+VOwdC$ZѧtHοn w? &iG, 蛙|шD>yA-@K#Lҗ|sĩi@3@gM/<X6t\_ey̺q*+j/2+&Z=9s{] FlƎp7@Ŭ7G/Ð"^9M4%?}e %Ci*fFii&8{L?pG[mXګ`dl'k&cb5ncd`A0g -X RY< zŽU-̞w' v8 jBXV>גk5`Y TTj,OƧ. fء6;*;ZdNywM" 0ԈKՒ4D=#eLpEH6_-8(uwʫ%S$#0zޓd%NQoc[:@~ƹOqS>P 䬕}Ǐ{"f+wm3;a8Zx 9a>n  f|}XϓѸ?Gc"[yggYQ@z䛒K="aU5v:t op I+' /NAO٠#HzK/ ]^z 1Q80)]h" +_TaU8icm<ǥe}d@ųAc`h9NQS&ݫMXKX~ JЃ͠X)=PԯuM7:u&eVb{u+9denWjdSX 6>A8ozt+$5Fv_iN&,>V2 7>#_f 0ZҬ`>&$+H кeH!oڇևhN+?]¿0Ck~\,?0evgφ cuH`s$%C_V@DbQRUͫYA$|E{Z|uaޡU_CSnn "k ǥESʇ8A 2}桫j >M_dd2/?(Jt5XOwNn r>-|<+> z?=y W~><W䯀\0gj[yc~޷CՀCC<9OE2VnK+gj2*j~y\'oޱL+0+1{iuW7*voܨUjFc=|LƦ~߮e˴P9i̫ˉ~d 9yr }uf**?8?'a"U[/͑zyU@ʙpy=K.۳H+9ې3۽RNgQ l]}g+Dd3E d٠C|="猖D$1K/%cio&5OpFrrre+9Sn*YLID##@ fq 패a#'b}=I\̮' Zh|,=:=(T")F`EEVj,Q|FQ_/a| 2rKbIxX^bI&$Jt2(i]NEWؗ,ޥxVcmpF&+a) z؇d=>>1F_9=!~S`;{L|cpn|U^;-.߄m";aX(Ȑ1|YYz_-^U{3u!C+Hn9d>)Ȯ˵UIͧ@E$*}*~ V9_XAW6Я5DT@BlEM+Քd0X v mRfFu%Tc^*-q)tS9岠G)AojYJ}A8I}JJer(Z`Y~IrXimf)~U(0$(@z)p_\zvOw^9;]WU 5c(? z?ܶg'hNrG]ua!z"!`4yp A72E{\ G9 T2 ftBIQ WsxnRP> #G\(:4QSR 7~F9r@ :bQ&eP3RNZD%&J ~2{@1HrX/SV18cYϷw5m4y /T4"9 |O"u(M(֍nb.e1"r% ӆڠgt }*ݶ7DHBlg]rt9m72Z.T 6kuuN^=ŒBaF_lcY@2n6J Ea (z6id0[\IoھfЅ<jW}qG9aM\WWr!(^k=sF-멜 jH NQkpè],/?nMb=Zdy׻pQ/{B5T)~ +0cы[pkM[J%~uD.7Jwuw:l{ٻp=[amEeĉuB=\,UX簙ŀb\CӴq 倢#ҤZa͍ta[;OgxlLl {]WlwGO܏z a5xsbV3wgug=N~%8wo%q1c>(G3J&iJtX2E4} {ѯDVV"oN`4~[b1BM%CvL|"0-m}Fq$Y";(:jш-P=4]W im+wԀvZ9Zی|d涋]v8Uzxc]NnSz묝-'<ShC5j<Ҕ {=.t(F~>WZYfu3 i7QKT h2 SF}R&U*0, 61*ap2Հ::A/J\``AI _/qZΤoޒWz]aГ2KV@o/,hZ[8FCwЗ<O~pz7Q3;{aN jiZC1jvWqӰ^@ub w+#!δƮ2_Y~t$ّI)s";gZA IeߔZ=FaV;vkuvfe[ϳ}{XOV `^B5 5յvvNNyJ>)M`h3ͮsw׈sR7mKWlXu8wNYok׬?޲<;Y(6.x&U8ǹՓ9G̯/!?C#Fl ndB]]yu? y;x m/1HB D_A//Q!;tB!Ll 1q]ee%]/+ 8{k:|KVUY3i$ambAl]Vjoinݮr.xIA->9XhJf3UVa1s8ٗ7RmDC1/Th&Dc5[O`LoFE &_ugKy%:jz%!W`׌Ot\hԆMKMgZ" H{<ܲh䂥3BNOsimM6W˂͢oab x+@] &m 6bZؑʩ;G_^W"Z-FE/.[XGe#^eY3,1h@$NE `u:i4jAy : ~% |8@0mLtJ<,a ZZQ x7YfK'_6=iV;h vo8?i;ZWdu.;9 _H@X~w+*&V݄0ƳG3y&|fsGjlO8vN_Z?dy1BK:87+UZf{R[$Ґ&w(T5!=.MdnEk2M =2Mt,uEFq7-_ h᢯!ZESQ=w"6xoגyyQ;aZ@dԋc?ڭ% <%]C^%=Dhtw 2}Og+a9g5ԸA~ij]iXcǴXmŕc- kU¢HQ .aQiӍ.nz ~LC}SPaa#Tf-V5K-=?QUqxl#_X ,U{/~|ijQ?iځuo'?<]~dlp@`KysMI8pj 22 A8_;ͪKpAu|Q__nNg)!(NiU~[^T VmCg-V祯̌$eEz h΁v@bap([Ӣ~^՘)8oy#km>-<n~"5 > `,g0}`O1k(O1FN/2+lESs_*3 - D[H |$>h^zN R % xN!+ސ_SRCAp4Xetf+XO\7뮋/FähZ, :oEJRb[ hX`l @6)?llGz0=,El#;BcY[7?6s>9=1, ?䟃"zs`<h\Ȥ?,/gyLIhkh6ҋ;^ ׮}|GioH'anCҧvѻKNuu9/ mBrhSڱtb9y97e4O1 ĺb.yp vY&k[j_8ӟ籺\$%i2NC;q*O<$~J>oIzwm"8#e"L :R4pE\t#)_/9^\-}\_r9*GBpH~}>jƊOf/aAl}ع03wWrKDoSB﹄E;N#iQ"H܅ :33#^bZ=.* t7 /lN3/]#ԊYod/2'a-ra|ƙpg+}C2ٌ,KKK<]`mfkẔ&ˆ-NZhn;]-_TDךNjڢnNO]eOȽP4]}iCS]I_%VuY[ 4doD:9a*XP} 3FU. !nS`9^ik3XWG sJAyx4͢}}4WNIk{+B6c[z=kKLw|c\k)[#^ '?'xP:̚wkyݺ^tZ&gX^Z<4\kr|UrH`4͇ >pklw*iBU ~u㪗K:_m-\bl@jGC1`Y*IbQԟ X=G,=i[:[Y3 fȏgY\.۸EC铞|; FS[Z|QЁ> Y`-tSkESI]Sq ` k:/mդ7);psk~&*.(O^ްoPTQ1j}l~e6w댂NèZU@NfIbb0SB4TVq5H `9;Xed$i8p3!3@7f%St3w(7f*ojB(%&4H x*LTB<qJ7;xĒB1u9hԏ0P7@š!Ov)c?pY"h#^ކV!ю@JI+h Xjȏ3n AVpZC/LU:4qaEaa. `M18@ a)p#`DIqhފո>IP!`6N$Or[FY-aMz-JRƤsjh642@ =?4 yioO.6&@ƪ8 g/"*,vh_.@ku-X+v& N8,s{YkUCӂv#tᬘVf(:fi 46/9-ehtGS&T#h*zDlB J@]BZGzղ2Q\g9Fc6i, 2FV;䝎+ ( S@VL)ݛ%NV :aE(B?M'8iѪp|GA5A{z```]wxBaU&$nunw/E!ltg6tF^`r ΀vMs²=j_/ʷNS\ֶBrgUX49m_C{3 SjҚ=&@ h(6UCZEJ`pj&=`ZJBsŌ aL fɤee2[4_6{A\qڊ % k ^qTUJjZlpUHݖymĠWOY\jY`B xqz0 `4 ?1FQKnEF6Ȏz2zKg,zBy|Dk`t鳲T9 vCh hnBӺi~l/tkck6x֮r(rXc7L)D ElP{W(@*M1G3Q_\UܶeIsP( p[Ym\zipG>6o|vݫȃxHwxIJQ$*c|ZBSʳr_ tB[Q́F&FDǦ ݵ>FF^n4ĻHdZg03LE-6tmYQy[n[uZ]k]O-\JXwP4Qg8vi"3bN ~S QK.B.S(Wb d'~LYR4@lm$/kmȕX_51 isQ u Pf`>yIt/&NK4GK at=K2A≫ l6QK'? ݛR:!+ t³BGw$Iz508;6 ob-b!B6 uٳϢ) )egKY@\͍4VB}f$9zx+C#…{ i<AǜJ=żTgյ4kB(gjt7Lp:d<ÈSo^,齺S v5ku&sQ9QcsFlǜ- EЈ`s5DrYuo{wigamj `Ihf܄vSWzM?6YNB&Cm @SY:hk]һ 0b_c␾_]|Ik:dMZ#kv:##^55ZO]ƬNgcD#5XJxb[ZBPCcHTT 9FXe*:~gbmQ(-D6n]]}o #˧QA?W&Md8qWаcۼIS@.js1 /1 Ņ9l\>$6eb/_SfŲ'{n,8>;lO00-q`@6m5 zԡwգ2ӝX㬞VKuycRT9|b $OmkǤ%̣bgDܣ/</_ʷ_}~PDx5(߿|omC٫gߤ俾 F~VYCN$mk/4U9'(h, 6qpiĢU,i8hxk#9dwz-]|VٲY>rI@ڒ\0׷˷D]}JNJ9 W.h,cи H%,g5Px j̭fvU\hH[m\h5՘;;9i6_Q}֢c&;ڢ19-}>WAb .c)In%UD>,/h021:AJ1{+[{q`)~jocGj1iL b*idS!2}5ca2Zldiˊ9KqsTɴ; ;afTU>%+kbGYjQ,VCj)[eP G<\x՞[]jt=~'} 6*#A8ϭT 2 XbKpDZ(׷e!?x2K-_ȥ 5‚Ap ~Uj,{??Z/go~ڒ[ "m'N:La: hx>,jQ 8;Ѡ;_+BU۴}KPkj6uO{{iI= ?s~^X@,h**#Q԰Q3aXHp)Brk$,1J=$_ߥ9$t0us0(LL>(U3')˲X|bk{.$#{b*M 3R*V.+r?Q~{3FO]j\x _b}*JpPh=->"WT>#БZ: a^a"/9$3yɘHy❕;/)aPp-YVtEzk;KKCm?9 iN_u"iS"bPɦ˿ w:W(x 7(cغDdb Q"!24: nH%Ux;R<4~:wCr\32;^q]9;ʉ4q6{;-g*{tGwGUe{{7f'3Nzhw ahb(Qv,(YZPς sLt??0}s9eqr>rtA/;wS@ʇ*]Nr J=RҵԞguH(-]RR$l^ }{n"<̩'T] Gh=:6'cğ0J1HC1TOk0q)}F?H}wÊہ 4i؟qOm'ێj%#=k3:)%ї¾袺sql&{dܑxMJfW8O  %ET O'%_IhN$tϚ"58>sdO2~$3џ~烌VJLLLdRJjˡ\䰼N1=f21]8GЋARyã[f jSGZ3GZ ] &D g`6Ko$XL ZU}xRy$fsw,J6ؐR( K |FKdUX:4ri8Je~YhO!y΢R>zVtUGVw<0v&7TG8VlƢ!;^8OW/&H#LD90((ѓ? a)Am!L<| ئ%\ÌL4⏕`n?`VWkhb+iŚb%8ti5@/th$pK套sGXh%bɻb/u5K:`Ěcbֈ^:Mžrݹ׶gY5e\pA:K#xs"Nt;f dBC 3vDk/U1ղ9GsX-BC<27ǽ M.EguL͋\yY6{ZbuyE5%.wAP3}Snc ez52QYͫx`բ*'/ΗCi~E'`ciE*&9ҞKA# \:+/c)q!r^={pn7\ݱdq;zkڗ,\Ր9N.N[EZ4w^/<4z29愘+GU=0R= 9#}^)trgrt:".^Q~;3ʪrmNEE@~}Pf\tzMբI`/81iSNMPVv<_aO6)hNv9dyXOJA1`SNF 0d 7`z$ 8g0: aї Z\f0< \oqg~1?8`|l"[nb1 MysB'F~ZbvGN u_f͉kE/˚>6D٘HN T1P>GO6g\=WNeqot#uz:JO')%A]4QWCMR& $%j¢ 7Hl%GmPPF @9sBM\+,u`4cNZ#,U̥.aLQ<4I&ũ1@aWN]P9h^^=T0}\$y'ѾY!aED*nĈ\nE*eS4OpD1Kr2B}qj1Ʀ/T 78KYY&駵lWSJ9=4OG:ٝf+\*Z8Nʢ g^@$|%-ϦWHM VLR:/QJh{8s*dXJ5`j[pk&UYbd`l&LSTr@ tڞ){iEڲZw:0Th &!̀\V`);^L1C|]ߢr.-8eu J|W>RNr 8xA#b+<SfLM6e- !d#_ԚQ&qqPBkA(#ZqƗ!Jpl"1ײkIZVp@?-=6Ss,e:3eZ5R9+7N9InۇםXgCSٮ嫳lmu ,3m9zOPEǰB^rF&B^mc r4sͅj\g1H9T1rFBCZ0JPhwan]bյP5ނGnWgkuʥC?■ͮ |@-^%;x>@5eyAU954mƄWbp\!,GhD" 3! 鄛HT\6H8`9LE5tV\){`{ ꔻ@`N{9瞞ݷv5ٛ:WnYu?={%14*v e\{z?gme&b+hP9B{ OQ,mճU[`l\5zHṽu=`zrX ~UӚ gv^5y#Q(2'}CWKs륊O67Րo6kCD&PS㯳XNoQ5\8<On}թNh f ft+x2mS48vו2 )ѻ$:(Z1FbpB2kYcÐQ+Ꮏn#4wݩ/+kOT=#ʶN= ;33Q @&.֯ɗ/oD{ L=aMM=I;eχ,'d(E5^BK1gՀbAtp7oC/Ҳj8QQޢ>”YnPj.$Qlw[Dž@>|rFR=v?$ksH Lk꿿 N \|D gC ]ݭ~wS$cwT<б|"QDRMcjId*Y N5~wQHպAk3`$0 t1B(_%ZUh*\TzR׋PyRя9h`AsdӬb ဟRX| NjhZ; 'h0{*AZ+ehȦ`<r^PHm˄V}TWkO' #gmkOW.QZQ {p=4A6 Ҙ‹B3?#9Db%>OCxu'@<>W8-{j>9أW9.Yz&omC}s1e5\Z|犩] C-`.* 45K}_.]|[NIwzd 6?rp%K끼5kqAgZ 3g!BE RǕ>Cl)I]{km;sZ=-Cs[֯{l|~󪧭[OVƀ#@Ik<I{wKk[V?ZE?oxtϥA E?PR> Tk lR"7(/CmUe@$8} , a[ҳxq^Q:ZRPjVu t%n2f9ر]7~,Un6c6:gѫ +-.?M&fv߱s#zVwq:꙱m۫۷c$_g)O&&\@bd34n'BX̡1R;q"LN,`/mO䔰m8F0V\6&yhM&t3J0`g@5zzX—#Ն1oԠRڮT}V*yp-"D$ן2pԓ1 8G07Oy#xh(> MswLiw:&mH)yi*F)I$qKwN^~2I6JU`>u0P5mh9vyռ%M|Vεz0cQ[} Уcvg-3 盲^Y)Vؿ娢VԳVBa\Α.ї-&<_60¡0z̈B@} 0gI=FS]+(]` \x\J KRqbN38ʔʗ5 f jA3]֚@ZOjM$%RN Y[wzterZlJYV9q* N&[5L[2<2?Kl*}*g?je܏Id?r `^1}/U߃wyE|k4~ NT~WrZ@ څ _(Z VT%ZZ#X>u㲻^Eo2˽T'v <Ր*`cN-FK+P WAv4?JScF'c73 SRӀ\Q>j2;ⱳIܯ3s:,([.edW=s ~=; !FKl*`DǯP 1I𿐁I Ș,a8pc3X)WW`:5KQy7j$uE|pM5* `lh $J6R/#4*8BݺؖWX.m)R3fa-v4+JP%Fvځ'C78-6F @6aY9_,GoЧͳ%{#QkA6>ohͻ㥌d͟_G蓌/tk `RӍ) |:2r ⯿s<ʖ5E躉]]Zm/xƜO XR\roytX Q]$^Ӎiܠ*nR gf5/C7A5 (1Gu@|,J$4 DIIDmx8=9="zcq2wНvȅ GZ55!_u*ZmߴN3^#7$QLZu%!^A I1)91C|GDM߰A7Y݌:֨n;VBNRSq%yo|&5زgt1cL0o1Cٍe^w>½!6jf4K Gzi dߴL]/y rEF~ӛUQ@߉`1qUwb\L(bY%) ZRlҿ˪0-WiUФIS+_!y]+r=`'tv7{}1{\ǃ$ cϜZ; ;usg,kv۸U߻|ozrPQwGb "]lɵ\{h7{‡{8ֻo=`#vN_2}N$sSz̙Z 6t6@fn:6i!T$" W8=(}mZx}}5hKż{8P޾7yƾ7^:8,B7l{8O<Ĥlt jC`)7a9Jl6C/?4gZ+q+IaɅq&g w.yEZEW~q7 K&*/: ;,woܳeCk57nug͵&շ7ڱf}?uP;o>r;N}ztPu]C<֘јsUۧ. o bo?7gW ,I$Z* !N|˲f<s&|헪m:?^KgzQtc+kx>7n鸧H1L"bN65|#.hd `/0뉚]R>[K R;tHdNkVrh*<;?Gj3 d4 ьi1;^Cg&cP SV9y8xqcn蒳ѡϷ]j^ 閪8w<:ml튵ݳGVt*魏7Ϛq0Jg!=B_Sb>7LS*J&o#'q&]+F.O s!qLCDktK||4cLzbU[)3K!wY޶oXq¾é [?b(\5La乖/{s atq/RˀƓ/=V!疕 rR|BDPxt|߳eg)VA"#^A qF$ڻ"db&B%+ձa6U{nm0YoM}4Ғ|y|*I{6b =} 6d1yݰ=s/}qU|gFOS1 j~;q/^u 5eZXnKDkc`LSUxM֔v)#(&:!P UԤ:ˮ>eKqGe6(ABO3cC~QgTh&*F&ak[:V#UJ5.Ugp+* ¢*f=c(ךW1^4٠.QK wƐetC<(a,zB0V<[M>CwUc:y'܃i9}^< C08C\OPE^1sZR5Hvn}}n6mpb1, P ؊ A1eWv5wǽ# h#/_]ps3:u8ifٟ>0[v۶DY4ag "DR 9KvHR]SPŷzJƛ3в ?X§)VF 1Io0O%eœhyw xA;2ބI>gvz _ap^i5ҕp}ϛwJ9ˉlԔV4W5qH >.{C[|_B>N=^[r9^5bUΙvJڂk|߰8NgNJhJ,JA9*rDx0s{P6_WFjpm8Ϛl#)ku?!ḰГ V{=ӓi3a3 `F`vin`n7< 2n7unhC"$T/^BdG#yYl޼rU 5) 嘭C/YZ,[, rͱZhXqE~Djŗ=kqW[Y$9.v1rqj3܈m7%q\br2:.G!D8<%rըרi^`:X+r:]<cr6 yi䜂?DE;x6@KIhu϶aںqV-6 uU;V3 VZG>E ;B41zb_h {b#g¼ p9t(J8!RY'%saX{D_!"8dr50.&ʷӾ6ې9p:X qw3Ϡhu8eD07D{ s&Byfth sȤ'7VT lL./!”.75^FV= .H*^WR֮,_0.iW]ee+ܸ&wo]MP{(aW80=p\qZkք΁w3V]"Kf EJne*kT7*>q{-ȕ*LnwWXr. ҫ.z=b69bX`-Q @w?qmEp_|#KWW%eB3µ{ҷe(K@ږ ˃K{[@ Ǹys0df Q9)8{!p笯k.U }>}kk׳v@՗.q٥W&oE3C^?C?G[۷={b<}aA uip(uiW2JM_+X  ^]"~ǡ@)<MN=BóM-L!mL!]}c@ж\%:%Ko`**|3*]I˰@uXK {(|I|~_ hq% A_&A%D̠ڍޠ-hCxB>Y3=8:Y7bzS8?%,S/ҋ^$(3HݝH $#BL*f@pO UFٳ \@ݟ e EHquAo=SgDQ.b&.{f׋w Z%0.7s??~u?sȊ 'D;FFEl188:UgFͯ_6m 0cYV7wU֜'706L6rh+FZ|T~8155ipMVOKZ۲s6žbD K읁;!f I5k%fpoZNK$p܉7&x8"~}3c@qL4GK2m L5 TNy#4I <1BD,5X ay$yRcTPYLєP ZWfjzA3*SUs(go.KZ!Jڊ&A 0%Έ-B:)NゝKg u\6߸~-o_wSg+ggC.f$]Hx Ghc n@dV`2]zuܸVJ hsUW+w,WD}nOӤ тf}́Rj5NͧyO8<lH.6N;@{ È^x]8!Dh"=eN 23x,> I$,>扵pB]41+RKH)'!G,~%!z}< A &d!t2B &Jd41Q4yAI@6d=c2/c~{V̢4 WwvÑ@|']_41zJqKOtT)j$4+ӎ0KQ1sm|~2k5oZDnHg 1,:/X9c^k4yUzKqjNo6yu4vg(tN')&]tjJC!SF4!H!C3Ą'$O={bj6iA9CN@qz|jP8uMn˦{n2z$aF/K17~;D1cA2=|ɪx\T>m:Vb̗o}Yn[7}_Yj/c 7N\vu؆-5\ƭI~ĩ /,H]>|xq"vJϠ | .(D߼*+੧R\N?hp;$OUUӁzY&7uj^c`+)4U3ұsX&:tq{,8qd>IML]Z EM1V C9eV H꙾rJ XEE ֣o_rUxv|0'5#GTO|x\.PިDK8ćGKgd,Xo3.A 5 $@k37_ c%ByN;IpMhZUTM6 ;$==<RIR5cX6IQ!3;*j n^JCCYzAHElEz@.Y!ᩡlI%Y@Գ2+^D*ԿV" h2-0e򽻴2.tKUr]Uт@@]bҿk5ԥ-:TB nz҈܄ n"(E.VX䫋\I^X+PM2q2$ E)2(O\"DO}Q :Z B"g[?kDQ3[]Ь,eR*7j w킗ƤwFFP^A}AA=pQdrעļڲ33)wgys&p߷W7z0 D{satD ]3jA%S VW-80{WtNBD[|D`- BU0?1DɠXTFvKR8|dO2iMA9 6ز4OIwI~y~4=:"`h0* 64` F)br#!f"G#jS1s2_F8tr}]Fsu9bW&Se!n%~g!a?FD[&NתM8! !P+:lbmVֶ̯sYD󂼊%tH@`u* za-N2T_⾗+ZR>Y-{=MA<ɭ;S;xށ>\23 ['4'͝y6dF[Ha,rTH*OQW/JUZ<֋puBL!LHQXPu%!]Dkաm[")\0$R.w`бsZ"ebEVŸ]ӭ(8&t{+s^7{lyENK5c5*.J`sZϙmW'|/w;.Ѯx`mi3._#,9bnVw~6(b#0֟dD0Tپ0)H -^L*KlD?t0̹Ep|e ,uO =kv g8b#+6B'G|bLzpӓ ʜ%?ϔO31d~rQ|ϻ~!*LGZ<C-%< 2ɴxXnW<{;dmKQU&!h9W!sDߣ7#w_@ '|Ļ_oPF>K *5D"ђb2x8@ Yx ">!~S&JZ4O>ˑ!ټ;֗ eMkd#+MO#@ *)T=/9NW 1ńA)_$7">sZ̔JSrmXē`;o]5'\G] O3`TD.ķҕ'130#nCXoa.& aH% & )!i-{`D6 P fӌxI;RRw%cÆŒN^^n[^Y օ+p [0-XE=J0#,!1@Q8T #~!?؄~<!vCq_&`f} 󆂭t~5d&{ZpNMWd]iV\WBQFID$#N$5L ]qPXTMjVDIh>d]2tx9>>]rհ"0|fڜ ; ۬n-{w*EXP*sǎpj9V8jhJG;H[K·%';VW9hJ wTOoϢ1Ҿvire/g}}?\cS[ڲڧѭ5^sZ18x3N]3L5i'O݅$ #럍 8\|Տ,t' z"`Հ4,{K};?}͍^ge5r[<4LLuB Н/8ԭkGV$ʗ͒<pX֢c \?SP{zmZhH Zx*RkjJZ;oR%UYOVV*__?M̺vvqRc =80jY3}B-Ӎa{- VTD8h{} e9$![N;#gV[eɲ$WȒle٘blf馛N$@BO@R)0KB A84\KliJl}̛7oDNOŦt^'`HT.MҀF -' =I$ݨPWشY0V3V"ར4h=sF1\U l?|U'EX^*ՓbhV |(S16mZy|^v'`K€ ,,,/_>_G_?)egΌ1(; xϯMϯ}Bh* !(0zOެGvJJ<{cy K1qA| ^t@K9 #72e|:?\}c` G0%S вO?\0=C}%76 OuL:{gp1`]LKXcr,w'cAL /?d${mX3x9OC&~ϜbϞ/N W {C{m߾7[5ƼsO?ӧ,\x]!.gRښY:*doarrs3[{VEy>v[ˡoXM@Z! +VxV4Fxanwud<,>8d7[1j:pBZ~f3B5S~VrnV n# ~0,/x聞?^ԙ3e /]wuow$3gbj4ר7!*FyjgQ;9 ?2~~hўtO:)t='݃==CuY4$[:, tBoEԘLoHMe@-5 ,Bo;{q^̍,f4&vphȻv)"< '*|0Nز0[JnEE.W :LD.D8ߵ?ODPI1Wes烏8bavzigk6~[~΍qD >MfU^OM8Ru6.x~jTAkMgzև:j崉aU3iPRtLUxY`(@|R* EDzgcg@ 'uA`2+,vЋć/ DtUwmKbI"et'&d{bDrRINf$U`>[2ThӌNՅk-z*FO<(:sXv7b2uTt\k.7ǻt(?GC߱7N95Ct%igC̉gS`/@χU0>`;lc(|0v0:Җi#!5a *:0,O <R|MYJ)llj*SnE뇀`ODokͨCb +z%089fx1ÆiaPp_?=/!Uz2,lOZt9@`~mnCNNPf.l/IMlLX\ܗKj)Eu%u*bN c 7kg1(  ;p{1-g1@\2t 7D P4-oo')%z29L5)2<:B&):O¤T]EݶK~M [uN9\[F_)6TVpHtKu4ӬV6_WʧU;(+4%ɤfei^oH$S;C!; 竭>N5)D{ʎ! K} rљyVЌw1Hde;N \DFChWvπw;ty9rӹp \;>#~`)ahZbizYjq;~\lЛS +rjBkoPl )^NA]'ޮh}f"c.!ok岭o<PB{?L'Eԗ D =]*.gJŶ}Bot&& e\E^׭{/NK޽DX9#^4xC_ jK"wCjM{.(,ր+MsQD QcTP^/4y5@^+/'w4} Zsũ"`W% yGIpC0:E?kݺYɎ+ U"5U@SxW.0pKaX}:]zInN6C̦߾uQ'|䘔UVєN=?v7 9l&mONb{#pG^]/ SJVN\*T-@vfVO!h4RhtLaH\d,Ӏ"F'aKDPo(z p=cwd7b]Z8p`"2X:"ŋ׃'H-2s֯{/Ǿh{ThrĐ!CT0b/b  Ԝ[9>(^0atvav؀ńQ1So4Vx E Nln=˜zxϒŒ;ؼѤ$. )_$1(}5$ӊEP۔&~F̩8ޫ`(1E(ѻ&G"T¹|b,i((18W0w#BSGXK{_gS.ф6g?{i֛뷛⥶v=vlTRa dځӖȔ \v힁UU7V͋ *5}$2uC0w҇AåήCvELSY>{4&~MjF %ۇt_O\',}%l)h z%ۺZyIF]݂Շ_'7~U) <2N(;h-Pq]aV%?yyNM َy[{[h1r#}B+:>̮ׅ N " ܖ7Aq0t#I$O*}~TwDE 7^ ٝ#D(%M*6X>$@p^ ") zAG% b>>T^}; OǘQ;c-/ ^#7wVt s&G'*-#צQ%^M'pc"-W+*m9zLԎp힒{ɑ]}}(b0};ax]t[)Q@]gД vÉ7g㮆'fToJfȬ"Rۚ˫DŽ* S?u=95jU!9F9j.4p|P{wΔ"Nz(mW`yخ`ŰKf?~Fm(ȑX0sr6D#P2 ='HBL"-0j0dNG̏rF=/tu?"Ju*/^]2Q.Uԩ\|OYw/^p9ߡ%Ԟv%( -FʋkBeNk=vuP37g, }QįK L Z>:MN⏆/"[I}II}{R…wu R_KnxRFmX`HS]}Gŝ-g(KqAM"qpn 8o|5Rg1:?M N 1a%O0<;,A[w* X '!(=i}&?#^$ ^2)m4sDE|gPb2Dq>n.*?W̸x(Ļ8sDSD<\"53PsA907@R Fq 1xodYХ&]bnʁdbzya(rj~}@8  >>4J.]RRŨ 2*F A6r]eH}KK۔JҡObƆL G hN'%+Sx̒jU,V/}2D5NwY8G,JeAh*c幔‚wޡ.0{DxSfѢ2w$F-:WY\D,oIyךnNI ,i)m#YǪjU-3Y$v%%3ZpV򒲗.#cNf.5 d$C},KSצIX$fX͊DM^uVJ0Rs0=t@kToRZ$bX*eVEWϕ5T0Tnkޑ 7&$2iyThF7ubqey#lR*[)IMk\a#u[N^3VqאnL(v\fTGQI7p=3?קw(snYISMg''gaFmL*1JJ2U,O}}]&k9-Di-%}jS*0XXWb%cRLR)$MNK,NcإUdfI$DĢ*$R fLMMuLձK7)lJehZ%V1՛ ڒS.u4elJ=RSj>rlڮb4%ǎ-Y ]#,EJ ؈]?Sgz-K=:b+ 4A|hFCR("F'ch)= EjjR7﫧W*JoJL2lXBa ar:ZcůM?'-V xn ]mPQY 5eS0 Ư_?^:w.rMP ToܞL"ʛ_b^GS7eZUd lX>ͧAGM1 0Bǖc(B0lEguK Ppl G»vh[!A9v qo9b\#}v@04> B4ZQ)?ݘ:>uX vn(zHE~Jńs(7Pz Xx@?n;E)҃4EJACuJyc>,FuUiZ: ^{P?cYոOBk3Xt5PTErׁn*~)pD M0;bMA폨p[인ւ 4]Lvky4a.YB\UE/5lbK2#M%PJvWθnpk'`@ɴ`iʌPW8Ġl%t %ʌSQ~Vpj*$w^#G1i6}"vw"bzrMZښ]].?+;z##Jz~:vvۻ$31~eݹ+tJG;I mWyؤqk*dƜ^VX_<:7''wtq}aYa#TH 3:#CyVZWjU֕?;AY|.d7R]&ODh<*z@ i݉AwNA%L @vI0c*T.39R[VJЩ,՜bM1WR ߫>EƉN, `õ>U8z/{23Yh확b^āpQ{/RX_߲d8Ȭ6e;зk }B rfq HˠfŬD ζ%,Ĭm ?sx\j\WWUqCS~mlY3M>qs3`ػoSL4.\剶jlu[I77쵥S4m323ȧꑳlg@ ͢؏1W%`T;ω ExCt#8*g30Gx{!w>滢xi$plɣ` ;f7kAfyh3>>GU4VO-HM֌oK<')m? %{[2p;>κK>e}}ڸ0D2`TIHnP(A!6Ƣ2hk}U3Yެșt#d}s|'s|\P_ξGփ$į8;BhQ",Ƙ{ 5k'ZUָߚ8~)A^R--.fGWԋZGE*.FzӘP.$-J}&\VTTnv?a/'n-{4yʐ`ʡ5e9<4eU斕dT U6?AX&튨Řf5?MA6eb$d`t%Qp3`sb3NnMSpU5G [6CnqҀ 0y"U(tK\SR*1S$AW~gSvtQR[ %ZԛgXo3c(|:c(sVl` nHz*_~uzP5X"ݫ~P]#jDy%Kj $-v!F~32ܪQ5`.|ap>nw/y#?X##Jw5( Nx4슩qV^=~R'Ҫe,ҧXM}jJ-)T:אw3rT'x}scFy7k V0\SM(2@u:-YzǮS8W[4;0qƷr6SBIXqLt&t&#M G#&t ڠ470݆IpX2M LuwDo2` %\7߳g ^mlmW)sX7ao`BfbnQ1J)?FT7ѣ;C6XV}EBq:ٗzhW*S/'W I~F,앀 Ud A:ɫ+z:b4'Ŵ؉szkܮ.08q/8kYHE>QvŋgO~aժ bx.쨽'TY&7(w^;[Ս$\0w/6p'">@'w.XHZɋ(jXyc\X{'Dy>z-zxy>xm˔ۜS^O]Ђ{E&``w)+ySL>cua=$+h)V,7RH֯a=U<35@fF9Ni@6݅LDQs-cr졂 z W^׏~чS25$Z}݊#q~d{VF^ުԚYl&'Jk~O V{W|šG&$d]8/vDj&7xҤU떦ʐ3 {W(1O-T}2k@NH:e i|},Nj$}^\X,_+Vr{-sv7d/zkuxC499/%Vϕ4] j3=/#TQcϱͫHBw _Ee^f[џ3 76N3w\"R1v/}}"O{?1 E>9|.mV 40 lK҇k|2A?g`f.}WF\[XQ:J1D~NN*(|C^&@Gj1:;kN\ 0ƅfӨp?$0oGG߽0Cは/zF4X~dIE[.9љwI` 샧'ab$~+/m`.- Qb'͛"+6XJ̓n+fA0H+l_sʴ!-TdؿOdɜiLjNqJɘeO;;%G'o;"),=K ][ g|Mo<< 4/c遷xj~ܱja>txkla^3qniiЗ1MɎH͌و KQj1$ag2g#K|!yeDQLxX{i4{{VNl Ѩr|_IG$iu,N?TW߂bt*xAutAՏ7Ѐ \84dه&I~Xsul0eZ~rsUJkG )2S~mVyn#~chVA+c%YY Z!W1tA1y51+AE8ICo.V3[ '1;Sv2Q:pؽ{/fb/vܽ1l^:fy%6?a2Gy8rmngô0.ׂ~XnjcpD1N70%p{ UWܥ҄oS(آ  v-6=C=s"n"^D͐8'ݿ ڊEBTPAEU!DwUIOep$FZo|놪'܈s!}q"TPd(le+ VW^DlYs:ahI`XkUq&HIR& 5 R r#F-M>/?}DLeJ{L':y!=lgwKsC83jwV˩}. 'v cU Q)I{W-Ly}0W_훰S%  YIV١gD7;;ZX4vhH;n}5>J13U!P3xd}?1mډwER`*A 36?M~hIxY= 28Lq,6h=΅Pt{k0f7?rFR8`vG<ؔk TzgL+VaLwp # &ɼS,Y~>o~3b!wcE. k,)O>e 1z<gT%5" V*1'_nFBQX !I'P!q`3QltStb‚ /<;ɖ?&%yD,eOp8jb> @Tᄊcη歿Zyw~?zEgZsq snݴŖ'2;͹Gz,>#QQ?_bNɆӍivnjj~w`GS^`=O3cM#!ȧtxۄ~.k:D!,茮?:At$6p9*> bi([nϠA#鰺Ih*~[Dqt珓j`my. 7e5/6u_T BXa ?-t :Ufr4RJJoE--j#髳,*v>&$Q?㰗.;Q ]'׬=f͚S' 3rxW˯f8{)VLo0床|`;& ޱ~Riqì^OMNTuG:I.AR(_Mo=pNtMj7#~s&#K( =q0:]pN8DG^>HY4׻]F# ÷,FhLuO'zܴ%*cvvd Elg:1hr35kgFatu~ˆm>џz9qLI)U<gx _ifmљ `.l8 sdg鶍yXWx6ݴ e}ư_("/[0:ӻއ6: l6%P,4 P8u,:N/6Ƿ7.Aߎgd 6{r0x؋LF"\b6(%D"`Fvpg!b` _ J*eK83|q(ԦJ>WR!&)A|r*2H8%ݠJe[|MojP?C[8ra93{cbqo5&0 4%eٳw<<` [S7߇?CӞ̶{"yPn)hAcWzZ*yb.urܚ[%XqᏣ605n'Ny'ND~ ^%s%藂]ML cBuJDO_D~_8;U\W#'soMgC=P9NWǐu0-ת׶Nnk9tz9MF̍("QIS?E@!&O">H@!}Z%? ? qx6rD.L0"*r 8"GO5E7 9?Е)Aֆu)~Q}@l Lrz\'I,\zӷyMڞ0`V+έxFGO_C?ҭm 2h0~|lClq槇L?dnOuD`mptGDVf롷G3H >F`h㖋mpM6\.f/ђE8 :|12ؑ92^ ԍ5k F?pA Иwd< w=6J@l^}SCGmr f%[ϧgi\ [x,ރ u *Ժ0: |WlrJi6}w ,i2ִi& ׈y|[I0C^ymr򑯎i&"Hm$ۖOvyxt)^F( buroQ i7c#RsMav))fDjL(sb&[sdTb1s_7牀:U_UX /ϭXqX@ Й[FAQJq#?)ߺ|V}+-H6aGtSxYq~ㅰVjhW#r#1!w48Q{n/i=( U-zFnU5˖gRqw`c4gej+6C9 ein33Ѭ1[wc⭽ҿˏ^.L\xK1ms\rGU5^4Z!Oѷzh3Φwyeƹ;R=}&z(6It} |ZieݲNˇdKۊ8'slj 9I!R jp%p%HZ޶(hʎҾ~ߗX;;<<4kA`6KTV2^4"?K/AnyܵE!JbG*/JZX?3ҹO;OCBp`D8or[Lf5~V;>QqJD>C\K7]A-aoy@] " ;vsHH'&!zXX5gԞNpCMN14^4xF~Fe21)^p?#fJZRԙ1]顕j3R%i5!̐?B{WJ-sva{> Zi9O?W'+ӼQ J0]zLBVQ= > J}FS*)ƉFZ5˨Vj p4]!n sDs43Q:pӞ# 'N%;g_= .2I_Y-,VH>{LBg6ep;kJW"u.#| ]H(PڰFtoQ,VXSTfAápuN\[;olBMEhZة>g 6 %ؑY$h0ggyX$^TDVÅ b$RrIh;,J>`i9 P*NJ}׌.GBei:㳙CB01Z[-OL|9uG̘1G\~;]kLCSYbz ɪ:QRnNH_X>҇BB),l}U1ƙ[ jV]Ҥ]/?ϝ8i ~%I7モl4Ub5˨5Q7Sߣ;{ȅ0N|v4-]$eq2\Ni%bd.3]@8m@n|7\9+إ29e9?G-n@@RHTlI[RV w=bCA9MVꐗ#bPƝ &bf.A@c5Iؚ =>,/eM|ဌb7dI~ЌӦ^@5p|n`LZAŦ*C}d.y<5PU=kR,5D«2 +g/ G32 S}r .qnƬ(^*pٍ9=\<,Q?"|p)+Fkrxo>.|4߅Ad )S:ƦI|*Έ qGs6;^O~+r.uD 뻐%WCAQTیuրW3egչ+HD))0:&p L Nt~NmyFyOs[ `\ky;h_e0@.ӿx9? f`/Z^}WBHRo7z`@Q4ΆбLwl_7^=t=SUZ7HGqgEGJ}9RcjB=)Ĝl #=v~xqvwoDk(k. @@ºk!}!HZ;wg_8}Vܯpt>׵>x4G;r>p<8"d4\:~FB/PGbfUޓJi8ۆݹuM5|35.axnoX0f1K4?szRG|{GgjCB*:m6H}Wu{ˁ6֒B-yC=Jۼ;&[8ի4|rq^9pH/U`mP<=cxOAX^kC]MIh'P?LqAC`S6ħR_h fA tL2jXBZ`͘piDlJALxfˮѺԘUА1 3CO9Ka|{۾Tz%E"˫T*7Cxvi2Vd9'a=zˣVIxF:x- i !p;m/Yp|x(~B%W~FA)1S~?E4=KR0j*^FR0*9GHg PR ArX㲁xk ҽ쯎[q-E%C!P L4"zڲ\̛_L#e"քDWTSҁP)ǥ `Uo~گ9,O`g ^O&WK50<0Ħ]oGp + *HEL b5pdL_RӥJ`wDcCl  n%-u'w8_iJqXl0kD>%K>gg^Қ(a 󬬔H΂l#*~)e,3L],.p`v:W62|]ţ^J+qXrJŰ/ab `ݰZ|tyֵB׭Tupm_%mzcNE(OD}˹ 8%ٛ /VaMr8NJ ,3R,w_V^Xk a'VZ,CL{TpU"2vh{^scS*1b#OQCmxf.{@(*Fz孷A6/Vfp'wG`)gI %[ ?hN}Do.ۇ̡cܴm}J'cy *2u=/6uX8hk lleTŏP7h:xXhxQƯKh :a׈~RF% 6.x0Fsu.VltOa.`Epv:VvqdE&;HpYs`Pk3$7LXʎ&x9ݾJR35\zMphg>0[Ġ[JNMyFYԏO fNȼ믨Zwb!;;kԜ9_]Բ?RpD,V]Zn 6yA;SkWi` @]!teKm&N̈ tpT ڄ?D!~mR+u& Z9"O "FBM&A J&PDzP_N"ce`:PK'  `. c YDDg:1JjrQU yH"6_zH7c aO2is+szDm^uK~ I\J lذSG8ӧQW}{Jޠ9Q-ry!pF}FKA P}%#2mW2cMK~??X͈gf63F{/CxU~hx_D0 D/(g[~=jGօFtZ.;NX8)˞93DkkpHα6A #}w{{Nޚ@gDvYv,[a%ģ5 ;nPs;sZ(xpѐ+ uG4߇s>=%s8Vo~Q:Ot?5'f=tgt%_4-9 \GpOϒE7s0HuLcW@BT]nyKfm-1V|u+fÏ'76g#wv7 /F)ˇ/Nw'gH\Ǩ^_9]>3OPh4\JnxIA4]:2p97i4TzYSFMa,qXKAJ9%+dDFرDBFt(LF_2du"ၝE9*D\5A5ЌoaZwmۛF^wLꛆScX6K+5gffgUߛvKsn1Qδƚ*L'S]+ ~)WOK%W '-3 YP- VhU<įV-"aO_*}3nȽ]\g=tr ?|[s*Z9 7ݶwͥp|xbhd}-P*vsӋ+I4dʢ|ciS;<|ʊ}帤F9}4d^v dy֨A2 -d8ߒS80DeDo[Ā=9io4gpìi5߾L^d)LX&s7tsX5KIՃ<7seajEo9'F^1# L9>kGYܝf^LMR_gSduvmySgOOgr[SFL8JFQx u6ʆez>z7Ʊ1ɰ]5CքяҡLؤMf)7&\ Cʓ'kyD=X!.MXuutpsر^oS*qT8l{%zT TOmػj:D.[>*VRnBU~Q{ڞy&W(Z ɮvk: (R,P( 5\T:%E5 k2U::fgR޳!Гd8m/St=Z `I;BVUafte 0)/p!cUJƧ7ŀ=d!]3iu+*4ƀ3s$\(Rg EmpX7yLCZQgin^Rvzi{U{|*͖::+wiEHaWq9UuOQQ=>mLi\@WicUu`̶V^eL?UITch|58rTVRmSTQ+Ř~cՎ%p"覫!VS`D/\d߄[ Vy!UEd…[[Fص¨ACV<4m,i)C;wf\Nr+K\ ֊lmN}W͠޸0Ӯra#2uSǼT!z؊?n+ks~WV_Ww>ҁɅRSI?;|Tɢqj5"#k U++A14rFty+INy0MYcXpdW>q++Zbmbilˊ]m`A Z^Lޒ|Xb"ku~pt8Bfx>[&cf0{ ]3 ̟y~&H3P|m][`7TGYrfn,kfx/oK_ *{t@2#g=/{Lg5S?(lK?òc!_03 γ%  ɰRO׎- Sm r;< ɪ)1Xɫl ̊%"a  ΘG՞v'bXZȝ܉l fm"&}GPX9{ΰ&ߐRasfW1^|q4t؍Dӻ'w'wTREdji}GU7c..}!.zsEmj1ݐ=0Z,SqK+J,q&ʹV )A{07Ы.B,=1ydq޼΅mIƣ*? 2|*0VB'G!$hBVa{(HeRzq#.Ob{o2E+RGqaaalZRJ-[~[ٗV-Tl"C",zw0gѬJƩ7+fg<Džo*pRGoҟ&%c^~[$[⑩.wػ<Gwąu  aDZ.n&EuFC~L_3ϐv5䙾/\! ̫zBkhy8! GJR^ό*_4>Sk6 A \6nLz#UCر-Wwa HII? 2Pj&%v sh1[M ћr%݈$wHd~A7ś? WaºG~*|M^nYRo^zzj=#[ۀC^WbHRo0 sdy46~ZC7{Ɨsݳǟn 8d]IU֝{6NJgnys]7,m9F7 |s湟3i/峹7fe 6ʏz&1>+aK;i c*kپm۞Ρѕs0HzBτ =gWVOR>#9~Vs#y nIUMR<}H$ո6K.^P}M̓XO__ ,!0rI]^H@Ld\LӤ)5mbIV-ZP+B35p%oNਟqoD 6q+uVhYᔅёBVӊ*b Kh.8̲6_^ddyԠԘ]B"ђ),i37ܿM:_i~X@,-Ѭ,}pa<2 8<|{ޝʰ~Ő;,j^-@d.=4cj u V%]8})Ϸ$'*K X1l8HH̛J41E!gy,U=U=M5账zGV!=G?l^3B_nevMIYdkۖg5:ñlfpl\C l;>mJ_$\?7wj=zŊq }Lx {oFQ.j.ZM]ImnvQ{eW`el|cΑJJbLsIR0)- ;UM*C*.T]< z]ʗu@VޗSޕ53J'Grd ),ꁪaWwiְ] "Fs-aאbJ:Dr1I'.J ]-[|:j6"yFvju/cYx|P/Aޡ\(.]VH!O6qrqGvX?$K q3̘&丣߹|d:dnI&.BZzb@ &[1㹞~_OG>բh^Q|w4]`]w`増s^toǿLψu)VBlNux$V 6}yqc<$^GVM)$Ue_y[ń$`xK)J_Sn@6zD霘1-=F]` P{7>0!Mzm)?7?yi XyUUêVl9U5Qy,4(/5\}?o&,{w)3]:~@}.m@k&^I'%ŏqi%O(5LA١zjq ~q U@JX g[_REJrbrֿ|v e4LECލf ?_^r9-R7~'rfna@S4S`@4z9 Me`(x$ [vrQ p AW_v.L1@!Cd/;)̡X?x{;T?Vvavՠ8mrqFߦt>_A?P5(~N{'\:o_\zʬc<% }[J5<< _yR6$kj~FLtɦqNDrÄ{ x!E:0r D8ҡhWaY[pq.pQrFv: :&!=QΊPXǠ&e":آ}0hԺA oU{6:+D޷32-my,ͿH[>`PPtQZ8f :gA QV*)Bȃ&1^o)* kVy,Z/XV˸EJ?mN+gjGlч| }kC_s&`4l-B!W;ZmH5ƿ+qJ(l9@ gQY9O2]:jXڠUPRbTyq[T|,1%g2WZBbhuaI,{bA1٪DP놜z|$X>tBwʞNjaNn6~, KڠuXh}y=HЂh$ATgwLa엪͏1axr Jt<&5Q)`6/4M%gooj, Z cMZpLh֩gGdWa75Ł"֨VFm :jYhڴi6͛q4eMݰn1Bt\T1Ux;$1HkhbĄЏH 1S[.s Kګd:IJ, ~~=8pӬٻddx &%b(Ns ZFsE=Xx-9FTx ʡ6usJnԬ xO*(^Ffа4JH۷}wI@-mR硢',(1&^D +1/J_i^F"5P0c#ۜzw/]=s@+ܳ<4-#Hw4fEEixk!+T- m5_Vq&[A)fӆ5,(>,_mW` Ђv9t͛ Eos84*O{lӧo LjF/x^ý^&SP8>A&::ف V7C3!D6d!X|y:E_%7gk]&TmcVO#P_3k*"_/o>| 1r'X>ҧ/%Hyӳ>Zj4һT@hnu/~LyCaaU4Wi@~dyGZqi$ݥ9pC@&sr<>K1ѿK;JD,~t&@84 -9Z.n}:Εz#dh! ǥkO[:!]Y) tdOrrvP2+2*TEڄUjPBwKΘ =|Ǥ<3n魠*ڿfMhsX>WgON'$u7tAұAqh͌̇D0'*&40< BXFFV}oq|߻Gg^äkשGNrJws`ϏUL:J^ ck@ }ߓM$?t^"YSN[yļ+]p}LFY>HCAqpyM?x MzA >Dm7r)y蒾V͍l1ύ"wm_\s ɬ?=OMfR5UC ԫ{GeHa[y =sD RUW%Rd1'=uR(/_ 9ַܺI "%;0ݎb+MG`p\ {?sX΁RKV7M3y> sh)wdc yt\̌m7x5~ngl4mp‰Ѩ!k ԣIdBG4CBs5COYbjo۰8=vMa./lnMqfJ,ias2`0:{Y),fs~vAt T12?+E1VhcO=B@U Xy$c9h hׂU ׇL_CAkHq> yJ--?I'<TJ#2v$d1h0 Y!}=nbJ0dN݊Tl_9V9Jkm{\n.ӡ>AB0fsfX |,c:k;u>CvFގsZLWT xc`d```a<=|EdՓg_(ETu=O'{?Law]+tw^nD.}kzՇ 쯍U}ɩo9:΋;FШO;XSB[xe#2UoاC??✼ 9Xz{w> O3E*De[=픖wE:seI5oÞR݇G=SBPs|W+Ⱥ }[0l]1V~ٴFoMr;'O^gLyhol7/ӌrq3}=vCCHF=ǡv @ilr.r4CүVldV¬L[eN0WԿoϓiosWwz:zQYY3RyK >?+#B|Jzj6]@UD-Pv>n໌u;WOMeFYг\l@*!u?'m '18 >wCÚ\fMc}~5lmo,.}Yr[Kf\yBGyoC[ |EE@ \}d<z/ |x{TgN.iBdb!3iMe$׹4M='4ri!e}Nҿ1H6dHAT8T* HGJ%K^ 2 RYHYRyr*УBTq"(*ѯTDSTuT-Iz jpE/N:R]ɕW gKnl7wSGG{oxDJ=é =Ż7,5w0@N386C&9^5;J-H~i >j^+zOPu//wR+=q v@GSLLgr _:KຈLzK[w˘Yu:sGXK˟Qt8;*3 s3=6(T~G77L4YCٜ9񜋮z]%q  ϖ1TeWe}(=drwsoWse \迎$H} nEc2pϘoKS }woZ{/o?9w*z % އaa/G|wywᘋɀu}є<m󐼇O~p)>kyg{ü,Ǜuβ(MxjAƿݤMk`RADݴ7?MhbW6;I&avk_@+@Uo'cBMH7g<dE ,p?-QvZ^SJr /gp}oyw/xGY:wLƜle>[.1[.bq- uyזK輵mwfyx~bbЇ1BL IvQ K^Ik&LŽD0fb`0(JfRMdDI/DK1Z`*tMƬ d.do<UڨUڴMr;gzpXmk'F}FUF]=j;௲Ki"bD.xB$dy&_jQ>º\ՒO-9"ZmWj\DI滎SidIΩ+Щ})dG»2']ZJZrl$;2VznM"L4R+_ ek=~^^8D9yWy1E& ϋx}WtȲuUb'X̔ؖ,O`ݶ5- 0̏1}̰Ls~N$ݾ}oW))L?nJ].ucԭRn4d 90 X ư l l [ְ `{v`gv`w`o1P `8`8VL ¡pGp p'p pgp Pzj4Fj-hClX ]p}p5C!D0· B.KR .+J kZF n[V n;N {^AxGQx 'Ix gYxEx ^WUx3 o;.x7 !0 $| > "_/W5:| ߂ow=>~?O39~ _o~?Ÿ+ ¿/0bp XaQ\qčpc7psĭpk߄v=;N3n;{^7c XAMN~?Ax0p qgP< #H< cX<D<):xgxX:6 [ڸ`袇kCpqq-x^x^Wx^x^7xތxގwxލxޏ>>O>>/f| ߆ow;]n|߇Ca| ?ŏI~? E|_ƯWku~w{}?ƟOgso ?/W?_JQ2i TaQZFihcڄ6hsڂhkچDv=@;N3Bn;A{^7CST!LM~?@At0BhifP:#H:cX:D:NST:N3L:Φs\ydQ$E-jSlZM]rG}rɣ5S@!E4G@Χ B.KR.+JkZFn[Vn;N{^AzGQz'IzgYzEz^WcAv#(ot?StZ~Ayb: nN/vj DUϝS۫|\QHn vr3ot<ϦjCҾk5| lIuw9ba G10竖N^O踍nXouܾ sTSM!ˮnSV\ShKѳn~mX=[ڡ؍bZGNXv3Y_sT+N _L:>WGAhӲo{ NwG[VCɩrs#_e=oNgy5YVS&ufLD T^n5iY|^~Hˡgs;'MI#I3>+7A:p}=[|y-N*y.orJqQYX;(Ck8>koqDWpd5E=qunk 6t$z"cÎ|١(S cJ)0.Geɔq:-# $ Y=f f-YVtyXKhQ]ԗH e_`~(5TAFֱQijhr&|`DC {nA9YH61G&Ύm/% iźAJcO wtCŗ^l4b&ψ8WV/g|%%Y]%Ԯ{M>ɏ63Y 8Tcx7V.M\7r8G 6CpWlЋcS\Ha /r6z#^`ޑ5,Q!^ߴ]&h#*ZL>K,GҧK\w>5]-2䖠qRs#?Xb9Vq-ˎJK! <= "4sύ=qWv/TKkXedI$9GM7\@&SJ5H⁚+C%)RVU)&E}Uc|8L h,]M hR@dVui(KQIf)EU )4>&<и+RRb\kӵJ+ $J+ $0, ʂ( gu!в1tmZ&akEX+V4tV !6dZC@ 2dȐ0a zhL@fϻ?PUTTPUT*4US^nHKhĄ EE|Q_TEE|QĤ &!L bnb܊BLa)$EYU)&)K2!0XKb C,a IIHJ3bC` 1!f0 3bC` _FYeA!0ʂ" DzC7DzC7DzC7*0!!!!!!! LA)S,z.sK"!UAT!"!"!"!"!"!"!"!"1)DC"JU۴41kƙ")қ:& ]2XbB 3Kooooooooof)Uzu]uYzRWzB׃VzJӺlROi);y4ҼSwJNi);y4ҼSWҴּӚwZNki;y5ּӚwZNkiͫckIҌѼ3WGؒ;yg4Ѽ3wFhY;yg5ռwVΊS&5&դtVj mkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/lato-normal.woff20000664000175000017500000054466414664334534025065 0ustar carstencarstenwOF2ɴ ENf`$f  `w6$< @ =o 9[wuA΅/H"tvؾ%I?mSV@%%)yP)խގ! מʇc4+;g䋸gKNPqWmuD "炐{bJ$SaZ}& C @ J.t%}rEW15V5Z\]@0]F}C)5*oJFZf.,ЄOxJx %< r/cʦ@]{0+0;8h:TZ^]:狎jP) BVrcšQ6FI5zX7>P#810dj8ƹX_=F0n+P&`b{C Cn#ƴIziܔmFǡ͋n,rHM(6EJxGh[fa"BsHM"iٔB*qáp9R4nǢڎhBt(6, jv4jnֲ0;R$@IR~l(n Z??*!mΒ`&%}V1;`~A_Y M6Zt3 HI"1HɡVzx8VTy;qC)<"Vۗ Sz 4h9#/o܆PVYVt 'LLiJfFyu{g~ (T~2ʱSxKMJ*)fJ=̔mT:F?4)p䐺SB'DTIi|`>6=8~H)o¬/ T3R;PLyZh3zӳX{<}x|wyb7Zh2@-g;p^pT+ !](_ExKNL4D .TLKyF,[^{%gt}xV]AWLioc %l7a,UUW܆,md/ZO.jXQLj-t[ V;Bv}YϮhEH7w6JNp N`)ngIp%y^}|)y) Cjrz2k4 A`kt5rظh5_->ԟ oUq TrW6"E;]D|&b̮>EhzHa+2{[8H<"ȓ Qh%uǨɠ57lxʎ;!3RpGHLZӽ8?[μ$(@hSgolm1?aav8'>oβ }Y 0kp4=POȧ33)@Oר4/_aARzF@z|YنUsO<ﮥ=2R -hvtfM/;D㰔8r\U>?!ƅJ9ZLOZ瞾iJ`^c $ x2-;=K O߈KomM^4pớ _xV,n+%nI݂ݥȧ"jeMkVڟ _Ӷ8Dm&5X%Ȯr2g롍$KVNĜ|B)>g^]̧ _w!g(M7Eतwц[)R)0 ) PBG(A1ż{P&%=JKS<3wLڻnMX^)oS/7?ol}I,vVw{l= NJ@׾ǜ5l@ΚmN?9x yG_ *\V,6Rخ֎Ke<3}=W\%(~Vp:@MrkZ@jr0R5|{E%w#z| #rѭ_]tPRZ*G. ] ^9X4X)}+sffL >hR6a5v+ѐc*c M}=9)sú-k-Ƣ"#i}zfyVM54T)4 1203PMӽcfgL o)b *hRz&m\3%w@!XZvw0'Kv71Zݥ_$~tVd>TP<agٍxN'!cAMtK-!Us#_4\0W2mKOx&i0X&쁨f`DW]q\sqGDE1tߕ?(܁L/6k:) 䎅 ϗ* Lj2]f 5{@A8 =8(J`E`A&㏆1hf#z p(((t:NEQEQEQEQEQnp`MQMӴBEQE `? R!л~`MǘWmQlBEtَ7KGal۷ ,,fGa҄e1J$Ɨa6lo{a{!b0u76tņʌ@ZQ@$[ o0Z(7po}B$[QU ͔#lٝYJ`kp : ZxȞ5zMuZ,'8O," @(rp32Jp(_ұm]H:=`sTJE^&0vAn3O.\U0_GS* l\ ܝ9|?}퓼Lr骺.$RC28;lB1([*[?e=yF^#JFҮ|ش>s&EK!޳ r b V@ɵL8[ tj l((((((Fh4FGGGGGGѣ!kGT\(c+0o HĕI$I/SB#  p?;:=?3ĊR*b*T&~AP-&+Q ]8ijqM,֜E MJ Pl6a`bc~%&EJS:(%ns\@_mw̮,0uhA Wk}wd~8t̸:}fв. %@9X^:g..4*wk T(b=8hkoÖrFia o -1vFƍpmgM:NbD cV/YHoF%f՜b;|O%kD2e(mά#L)OxU?G(9" OYQSU㝢صnT E/ ,R]t3CsɝOS*%@$jKj :Pa'a4/Hhw{?gh-6zR /2W\r2l;,䷵O94GLޝM+T+t(ryD1)rYmOlA84#CKN_CuVU{F0@@cYS{}^iC.,|DF[T𰅃TBRJ@Q?M:P} ;%*]_Ke %kڥ@TW|?FC^mi qډhm$ϋUp-9IyIO{0A!I$WC!E9ɴYSW[#JW7G` l?_3S;It퀮q󆎖=<<.i+?X h/ھo-$pIsq9|I=&F AP~E=CGGdSK%JpQkޜ7EMiGYҫlfhE=y!%ĦM_BuPN_( B񋟪귪jR fc%)76!٬kMn8X,f(j ɣ7~pm$,Pijv^$y- SHS& ;J&FD*f -hiȺ1bWW׮&rߢ($ۍ>&Q$=W)Rz"F,>r>F9}T4 !SP`/]e^M͝2 2HY7t-MJ_G3&bd"Mw&,R0eN[߲zyД,Bd ی(Ck7wnTBge,[I>"ful߮%bkg섫TiS&P2qNVVO֙eLqY$VeY}>^#MPž_l `-`.SuYC2gPDN}I~UcF:bٶY&$%𣩟.X_ifVZ}41 k'7o {[Xs QpȂJM}ݸk2a8X;P&[%K16KT$?S{iޞ  l Gފ'([pC zR$'."w]gjE<7Eܕ/7&7n) j=*\-o@l?ZG恄TTϛa\UVP,Ʀۗ*ZkjڒKVT2ÝD>̡{ "11+ʪW~S=c1 ѡ6wG Yb#Ez!RIZck1uϔ ݴDDx1aK+~@Dp AD_)uwco_OV| !"!̉^MIWҿaga+[!zDwNtsJ&c0+Bӽ2D3Gn?^_uKYBUakB!Si(t3W&yY|Ϣ^rQ5ַcTDӹoZ#"FkZkG) }ߙ{߳ڈF(eԘ R=*bmx F<4)UBa1f1ssi^ɿ9ZkEĈwSK$.+1CPd+(or7/]`a61={ؤw1伾*f{(@7tx~mE N+ XdWu,TToeJxTa hN6e.Yν{1BLQ!KPa+>!>vA]'gSPBQ1ƥrq# OEiIZ(fܱ٣` 8+uAJT[ІA"Hf2'{U3&qXRȦ*老zaټ;V92LѶg l\M~j7%ڮ+-%f񓏑A^or`];P{f>_?MfJ-*:t*[ҊL|bbqERsC燻ǟc_s~3kJsRGO;g?wƹci~l_k7}3Xy*xmc}Xڙ`4KYĂw –^7)E=Tll8/f/E>[vWAQU+BuB!fmЎ`_ >SpJ1b$H!=]لMoe?lo׳#ٙ5n)36%ÕCkڵա#DUsRics9Va .O04QUӍٞN2JU)n.{[_+ೈro:9+ 1E5$@$)TQf|2 dTv2νV }-& '&*lWZxWkzsM*sd ( B%HerRhuz%rBU #(Ͱ/U Ӳ!70 !2ÆxAI Fj;+(:ira $+Uk:{i+:AG 'o) /d\ Fgmcx~8:9Rf / /JjC&q!6q2 ` #( /Jjt #($E3, teE<^n- :@0b8#)a9^opJ,jlm]DX'ful%Dԡ4 QĒ(:#L1_ 9V<ᐴpނ%a Ja',uSwdYZP, Lt. R.Ŋ_VJqk/Ƿ3VN7stx&GAcTPN[ FV100dew5v0b3. |OA(h*5,YMD yXv<\S= .` ?2Tn-G)y%{`];"~Y-ԇP; o7Wei h4jJ!@bI4syz:Ӫԏm}A2_W|V{կD 5?8ڵv) A1p8]Ͱ/n-aU8B30IP$ "J, J q  MYFŪe \( b^#Ic WlvSsv6rh;& Je؈8CfԕrFΙXҭHjph7b=97O%ͺX\8rTX*A6iMzD)Z/$I|2)HֈYI (9]nYQ5קeB^@0b8#)a9^oKG$+z-" 3]z81U%#rQS 51ɪ0݇E$LBwNYnz`mAY Zٓ)[BH5bo-42vz=8fDʸg<"v(`bu&Z6I6ǭ)nQB{s7]eg&muxŋEEd> GFCG@`bi{7Zϊdm#2PJb `خjb詃*riS\" 'f( u^fP N ~Ѻ?|wl`#~n'S4ƌ֏-+HU4;V,X~4 VmC+W?yϐ˳pQƆ.qEIS%Bt(6ȨwkMWhr $?{'ڿej1LkdPjQG&2y7}V>doVeWaYF6iw!{b/KfyKF9ΛM7ɶ)N'cXiDvn9l|fSSt42&mGSȅ;`地u%Ij|ϋ9G5*tmEG&e图m gK˵ /Aᕝ&ѯC_;$]77hKQ)Q8n"o%!?iJJ^XCT(.&X@Lb=P\@6ФUG轠Znh R (>2I% I@PwJgҴ%rzM?L!YU>fJ'%vER) p+,tà2ydC`V"Pp -VT>bwar@DBL,/n흇qI %<0~hYO %9XE2 Ƒ:L:73–2^emldP'r'FK6V<#2*/T $ lpʄ^!mѮCGpb4[qWf/`X0DIʅ4̺EЋY0B@½\HBI Wq fbomdyRy+@G bbQ `zY6V[[v* @%]yD_2*VXE-alKo PiJqȗǕX) OeU(XEwTU4[6F QUӍ3QJ6DIVT-w} 7^TBZ`@ "L `py|ڵ)O[mvD(JU5Z`/3гnYQ5w?oo6-+tôl~b_!)JjfmaPf sAV AV;inl#&꼀΀r mo 9"G\H((K -+WፓRXU.AK[s3#29, e'r*g,RMY9NQQqҨ2#x?; ZIN(3α2+}|njˀA*maNȞ02y#+hV%ay"956O{P3JIE ٸTͦC7 +om4+ 53?9ҁ@YɮPഗ2|@ =Pb'/5!p(r+Twդ^X}ie+tpGm3 gS~W rxu$3MnSPq5ΗDF߲cRU+AEW ' Jr,iShyY]_˶-hD@) rq~ %\uzc`Qolbj9Yf}@Ñ %/'SWUNc,^s "ӤLܱ/R/Iͼ-9$E3, $+ev`9oݳk$vY6.hϯnO_Gg!Hfr> YQBn Y@ ev\s3ރOmΖn$ص:kL`2 '\*Fˑm^jWku73iX՝t#`Y0lrx/_2Ӳ6mQ)yUB}0O#?_EG0? zt}P$HerH2o-V#vGr 'Hf\(ɊKʸU'[~ FbNxb8AR4r JH(Ɋ ,0ێa:V;N{X9" y"cY yH?_~a_aMg+YQDC,q()T3*]^SvOmB/t{h':3|ZNNPC4Ix2oq]G0aM!:gmO |3,7R27< 0Md$̔>@B!B!D"IEI$H$I$I`[hO($I2yƊXDX g-up~5vD[}3׮,ԓt4rvZDoi~+P\ O$2ryE\B*a5;@7/̴ LnBa1qc PRNMC/a^EdBYV..<\QV|U$׹n<{W>8#[?YT%9;K^m|@)}#~]\8@'d Fg0YlEbI@0 )as $+NC/"L(Bf131ᔁC6pOQ" AGNͰ/5 Jja "L(zY=*]$rrA y Bj\Lxz:vz!S܀1c&*gşR:, jH(w 1,R{Vx}p5BRk $qaqɸD0PUUUU_곶V MH߿lL.Lgy|HXLlNXy VK Q9Rswn%DJ EnRx+s$OY;肢=XH!8DIN: =#rAe͓bSg'gW71ѱg#3s K~NPitpy|P$TO&W(UjVSav}axo Mgbm,Ɖ.(`raD($E3, $+jp%YQ50&qq=o1KjcIKT@&)?,@*ģ$^Ͱ芮0ՙ~e#w}:$,>nW{UQ']ۓ]\܇*d Fg0YlEbIvdrRhDw~xOp QZVQU XaBW\MiOr Vpȑ}2%he/r9 -yYY=SFKG]޽"#& zﶥ,ڒʔWKa\p0@hw7I+(p_•E]QӞ*nLݷv:mQ+uy(iTigFDIVTM7L`A ev\XXW;p}i"nK Z*5i MffhD0Q8Xנ8Ae6ERic1R[smai9FS"H(2=k -Wa5t8l`xIL5'Jz©\ گ6q^dzfB wl/?!^$I)gu&p )a9^%YQ50-}7 gq-ϜRRqz QWNͰ/DQU XaBw V)BTbP`@  $JTG.m+kux<.U<0CK}r.: r1CX3k, [-})Av QYv)%&T-b% ]@HB46ulI 6葸ת(\T|0#g obZM<<<<<<<)N "hxAdEtô RfYeYeYeYeYeY1eևz%ְ},GB>,q_^zz[^ ?]4-1$rV*RTf 45巶0s,f-5P~P(AB^o+/BVjP3Q~-ikwQ7 X(ǣp)ja]sěWs _3IuJ{yFx7=#MWEIVTM7LEaBwx5 zuAxerQ P);lʅKi5_i=#7RvrO9|/IxEZ/Y}S7w?Y9L(q~~WWɁ)%:8 ┒pNzҭ`c?w`QU XaBb|YU KJ;O_&_ U"),0fΠ+L0uɛQ9`O-{,N$S|JBrP o9p]M:z1NY3kG<9  4K(e?sG-&yI} _JrG_aNUy FbNj#($E3, $+jM p%YQ50&qq=1ħSj)}+ 𚂨qDfXIN쓃\C-Ʋ0! Gs[3.7+t}9JW 8h(e ưdEDH0P+4ЛɜE͏ㆧ#DXLL,nQP33=&HGE@%FHA'!MBj}g0Z͢ɡȧ.(eJe6TR6[ۇs ,\Hc`VEOYЧMQQ.B#t3Os2Zb00;_`D^)z222Rю2̑y_AEkH@/t BِH-M.0w{w{v.Pκ݅p4.HR ~(`{[>^ٞ{Lxn&})ܑ߸y ϊ׻1!ofӃmʣ}.VowѓYY7곢{`a߇7!ujG|R-릾_>0_c hyɑA  w6*&\mf"m?U|3]ljbjNW]>WjJN[5v@wQ|DʃpξJvZQR< 9O9!p]]_+#*Gw(1Xfɠs9+z"F مh~渃ܲz Y Ծq N~[xY,WYP4Yvb ~\mGOa,TKRFb7$3]_(b2ĈO=Y ` {Tg<'=  Ot7nx0s5. +y3(?%?`qz◎nڂ=a+øqyA^q+#FFG.N鐻w e *Kgw稫Gq]w9̎oi`9{0؍O96<4ect ^>@U!pjiٖ($4qxq(""kD BLIB"AJ J.F2WcwY8XC ]I%_ѹ1d -XkDž=!}!$aK8b$#B5Rʔoa7YhQ6`l%=YV'V ᔂ5}W5ÜwZfnO߸s hl.WΒ4f &J1ەvYe̳B?uˬ~z׹!T3x-m8s>348T B (Gckg=ܔ,= QHhe24 1B YNシ'T7Tȱݥ~FL| ΍qwtS -)l؉=PHGAuiDȾS¤2+BAI9s+Ai<*voh81RK:^MLF̙_ /ʴ5)˥szeT*kim=zs{}XNIq1U3O(Wk.܌'}Vsb؀ߠtXk NuZ2 0o0w-pһtpT&UfdxeN1LaYRח U= 2jɩSS5 .#OR2J }4'Es[6`yBғ^L =-zć!W=P 5˩F}Pn.a%BtQl),< \  - $r6H}УGjz ' ]:!d6H)( -('30E ۼ}X{+_*Cd[%Mr+XJvAIa ?xEV,XsRz4EP[u"Y$xE>Q G^Ƣ`Dդqn臓(\S'wĭn3IPRr<""WN*#:2R{ >[p[gCvZ_vv/-?? VAdx("#430NLfu.6Y3Gsc3Qǂ?jN8Źxd08R?̌Iol^740333<[>^5 h(*MFk`G9;)sź}>[>QAimdrKv=0)Y|}C4!uh%_XJSYY~P/ў5ȟvp`L l.M8e/]N )ttF; ɑ<*F3(>,;C[9$Їѐ_UfZز8rjZUBb"N @$2Phfd[[NgQ-`Bl:*E2㦮f3c 8\_ QbT&W(UjV72h7tI r ɊZp0 ]fX  eIV7?3Q5ZB(ɊDuBa)1! ¬u!Zwzq̾c=ߋK lfnҷxk߱p3FK@4mS5Q`h|0\1X&^P2/٤3t\jZI[ĂCaK$YQO?\6Pyݗj>N'蕳a @FĤdy7_< Pw?T&ƼGlM fekhx$+EpJ) x'"/ _ܝuY^^ުWH} =/\ih1LbT꾟6yyz} Ew!B~~I/;A8 ް~L3mL,nƌ֦Mm>j>, sNfƹq^B!B!B!еsEQޢ(^ zJJ)e12p|{R؉₆ꬦ-VSu9,trC)KKo-ߖycN8mS>G@O.n 8zSlwu+%6Gu뮷#Ec~V5 S!$+5;mw=. ,CotM0.Ne.dyP/e:ʩ**j78+F>Lh$?4+L]^Q!Qd Z4 fq 7<%q$JJEv\Rr6&UPuڰhQ*jw'ë߯\AVW vK~_8b7݃%ϥnU&¿ojh r\d=1a9+s(xjD?JCVB$+`b&d @S( dsI*HI9P"4><eAlϡ}(#PE=3:חshz=}N~Hd{YCe=ڜvxvSߡJTGB;ƣ\UrLɟKY:rS͗x\g`+6}9D`8Gz x,@FP 'Hn(U^OTA سD%#Q.Ɋ16M[`)^%YF M}Q8mBs}bx˴l‚ܨ~nJA P(Ɋϥ5g+ E3,yAdfw)KiNqB(NPsr JV3NͰ/Ux}aZ2GrI$I$I#F`4b4\ S߲m qn^Qif0rlAQi(^czGK-0k_;#lȷ-{/~ES#7jz O1`#s.{L>XE-~5jAxkbA0bwNͰ/nHB_aDIVTM7~PюB; .RK;gh'kW+j2 go`efʫ;-7 )SFJk٦Y8|*pivIZgw~T׊e XaBY̽\ W"MLY1gA`-mآpfG]q2 :c9lB'hNKRސ\vxX Ð_4}zWqaAT\"„O]'HK2BRk:hkr0[RyIVZp:0 ~0yxA n@-TZ2$+j7_m;VSrYmvD(CoF?GHfXDrˊy>0-۟>)wWZQDQ'& Q}W2IW*w &mo x#* +BRQڑՊ^uw yM R_oPL[B0##r7Ƿ"f})ʋWo@n=|M;vdawT;4y L0C)d't2ө)um]uDžT4`fp,;2vޢ`i,뤉BT,&wXYh{sOLxѺm?v`\i:9#9j0 T&m[[Cy+I\QPY iF —ۯ(OΖ+؊H!++G**ʩF5ƅx o6'jfSZ4-f}b PZZ€8Rl֌~kz1 FoM&8&tpmSYۉ6yu8\kqn'g7T׼1G$<( BMN'=yC$r2d+u֒8i%{|qr*/ʏC-GjH—oec`:@c&xXsҬ0k̴n'lTK%ܲ͢Od;@Zgr>|r༬B +$RXb%$+Rr`Ļ& 4[6F QUӍ+I^Ve+")3+Zd0쪟# Jj!e3p$a @ $WZ0#ȯ*Ī\X:F5RJl #ITA FL,lŘؔӫ0Z3dhgyј yb8/*,ȷ 39,1 %S}틟n(b QuD$+& „2n;Ezּ"F#숓 mN{=h 8bh<Ex $}JJOO bd|N !|ȶJqȩ Ȭq)+XXb%$+CS.gH^MMhXm($E3, $+%^_ߐڨ(`h5s52[5j1 JjQy٬3#R_i9$K+%%] ǘR8E)W)g9uU 5jUzy /Ay'|%*DDB0b-F& Td  A$Tt(8xAY*iSp{|g'bV V!$&Q\#„2~ q=^NWՄ{3nw?LekX`l OPD%R\T5Z`l f+@Yj, J]!p –^-m$dEunѐ`p6b,\<(9]nYQ uO ? TC)Zp^e4 ]{ 3a7m -k!eL[J-(2]"Sj9^l"d#fG0shdNͰ_zQU ࠧj,V"fX(ɊS: =P~P0hkQgvF=G 'HfXDrˊy>0-[/ #(w AR4r ꏆY=(%YQZ= :00,&ҿYg@ߒA3̨7615 ˬYc-2"`@0b8BLBXR)&0 'HfrQU &q!_zx`4-Vt03A1 )a9^%YQW?6:AdEtDPmn_vuL7k⭥؏qm^}#6l 8`d*܂P~Mxo+fAuNZqHR܇LxbX+6su'{a1 Sʺʽțl ;P 'HfXDIVTM7G8gيm`h٪MaW`(ɊFڝ_iN?2(XTwR7Y9 g(ۧ* $FY3*rqX&e|GI_"1J *B )º{V`ޚ^(馊uњvwAy-nL^{ ~s^G,ǯ+ʮ$61aՖdtQ4r Jja}Pˁ` tΰ/:IVTh2[mvS]3 ztiƑY8iAR4#np/p={)YQFk3n&rq?jNe;_Fb gňEO%Q΁2vA,?/&ߓQk(y tD鈈`i24mtC.q\Hv*#jpAe6_ "V Ў3-, %!*&.(yŹB80H*\L{` +Hy .6GNp3&?ع\t8HunܥJUuQ nڅ=8Sƕ6r]U_ BpWo) 1[:Zby|{+/{K1?<Iʏ&7L BfDbƮȅTJkbA0bwNͰ/n\c+a躮inhai2 0uXgCc*KGW>jۅGʴK~XqH|,WKuO8CcيBV^")Tq̳2vd(qy|"<. S̮fw-+ [ŵ4i#(QU *M&s~԰#0dEa~pQrܲjfeqE3, NUo0V\Ig6;`X"LxAd*yV7_} 睪AO LPkt6v&ٕ_&4[2I W/JjC&q!6qoswPi/JVHB0b8AR4r JN[VTirPFP 't$E3, "5vRTPU0DZQ 5A Qt< {rQSXYF %$+TYU@*x*@j`@1 )a$++.{D2.ַusoLfaqj{~ޕ|%A d$=`U_mb9 UE'1fn|`"L+<[Q8)p)BcIop2YOxx h2:/A&' @FP ')a9^%-+eC@B01r $YQlNua90Q[ՠ T=ݤ* Ųr@H%R\mLf+MhX!A1 )aBdQU0 1@`p3IEIVJk`pBGR4r I0fP%YQ  eYD*!((!bC3 3ǒDbV1 ﶄ&0ԑA6@.Ҕ] phxAdEtctO(\!LYDַs 7(uDDDDD{}n0j-)\P@a$J)6߹R暹Ƕm*^u7ܯ"|ptH6f.Sk^̜k D*W(rAIfXDrˊi $!#(Ͱ/:IVTh2[mvSsE6;`X"LxAdFz3>qC LPkt6vJ/o-PzA1 )aBrQU0 E!A1/mffffff63)o eqh$I?6ҟ{͞ PJ)RJ).%____q{P{ƿt 3ϫX뺎?_q]ǎwU[ktMuBչw{segfoO%~<P JH$D"H$D"H$0ђZ[A3DX'fݿ</;:Ր`N/v\"a *GzIHWҠP(J!"3uLu͇2az͈CnRY90qYfoL3뻉(((ݺw0\e1n_ .`A$I$I$IA`ff@@$^{֗b-E%"I$n@wI$Ezhۧ[~hN$/[  P6#mrKVugrMFBd-˅l8 ,?a'->r@ZJV܁ %wnZ Q+0\c288vK$IcJ4k ™9® =Ceya6 p41o00 (b㡆9ZcWy)mjb/_Y0i4`\,ehYfFQ5m`5Sj#D" )MiNJ^Gg`3Jp>L$)8Dv\99{Xr{00l/On8%$+\lK*ܫR5A9f92ʼ>=q fV[f+5HeTr !]W_9@aɟLEbTR@ e\Hus{'_PH~}>y2Y^]HNb\ő ReUURZkxRe7A R9rsAVZ [.2/K tVמNNy7"r<@v 9E"G*jR E ez/HIqIθ½ڮ& -'`ptQ4r JjaޯX+G-U,˲f|fdYey|qČB05.H4pJwQ'Ɋ7MfpjU;yyH˳38AN^)D*+9[])m@FP 'HfXе(Ɋn DPƅTX!A18篅Q# #(:H-%Q;Kl@|(;)%!K>Ji Jb;g($;CBdĭĉD\>DzO*XwOff 5!j"Uk, PsGYY1$1a#9pޕ):JßDX-"9E]@"-ѝ,8oiJ9ER;vlde~ҍ8]YC}S E1c1c1j5&\Hu`( !A*+*F,%^cTP5# Fg=$$H eUB #(  JN[VTM7Lˮ_5|隰#ANyA .%5V2n}"Z])m@ZhdA1 )ayY@FP '(t #($E3, teE<^n-g pᄎhxA1M$+V딭  eYuYTBD zAF Kk9P|kEV|M -S 񸱳+ ۅpRt,yGO=tzs 3Ec[dٮ&{K5~x[U4Hl,@Hj4gbfaecq 1 kU-o"b-3~ش&'Se+-eetkPue* R -kCg-"u^G)fbbXTAf׭HTy_|ИQU};MKO1|V u:\;a⒑/rq4]Iza6f0Z|7R. _;xY ȱs1z)F0B0b8AR4r0;qeE<^nϾZ"XA%f=7P;ߣ҂<8hZ޿aiRlT&3TRW5*9]owϾX(z6i¿X_]HI@h4 = *z񂨓dE&fw85W=l̝{%CAR4#FIAtôl懳귽k;0㹣cAFL(owUaU`r>j +HiwNB$H?4X!N ƸxF\%QA ճL[' 4N0WfFIiZV\5?O[3$eHL憌L=ɒ5wbRU2m۔%:O!ä)ꩋ+* lm = Z<}#|s]$9N Oa;o4m`*[!J4Պ)4⫽,!;V^ S2WZ^G h1f=ߌqhA#x3!e){d+ .0:5# ಈo07bh{-nr3Pt-()E7XF mo{ԅKh<7k  SΥ͞khg!k886<[[ru]8qe*nD he!N$h&qk0ш"VAKQjኵ\X{-:o^2X3xvˎ4iD.8?q3uO'?^=_,ʏ=:4ڔ}XֈȊ"bDINQ9u2y%U/K 0̨7615 ˬYc-]"Xګf(8|u)WPW醠 ;0ט88zo$ޭD)Mv!3,17p̍-* Ɏqx3uwbݱXww,OSMs< ӘfBj﵂t'9*qr}O!A1L &H,)5)+*F[l =( '($E3, $+jMp%YQ50&qq4_f}놈QM,w|oHGhBˀ]d,w(t fd* sݯ ;YUv~x[^֨ɟhkVIM_BX"!ʼMhXmph͵\%YQ5pz aBXl =@FP 'HfXDIVԚ(Ɋ ,0ێek;a\@3ht'KKɞM;'m/J@FP 'S4:x&4[6F1 )a,cD~[tҎ9/eͥKN)oGAR&@כ,?6ѯ7 8xFcʥ>&,$5>?)kPˑԏi oђY%H^fl%a8ax1$,jz381)(nxl'+qJ Onkl,KCy,s\.s8--˲,k$.D42_5aqq)R2rf4Ӗp:qJM>y(7x?z5{J֚X@f*8_ޔÔ;ff X9 ?dX?Îmȇy.lPnQ@zFGTfB,m=8̽lB<#'_~H%Tk]:xÑקE; !MF՗wܪʀ#`Ͷ^c\YuF OFә\ ; |]갗PQ븙|Ae!t딹zRRL*EÊ}ܜ>(Dx, y9rٜ9*6gDz%{Fo#~A?㘟 G.//=$G_ +˴?0ьx2ھg;sy4wQo,fՒ}| ]ٵ,۬݇uxx7^RÀm\SwP8թ8CtLN5񰖨Q d,vShe ,{$4GῊ2'0!>[(gvɄ: !r]%a5K&'E>RB9P5R1Ĵ&duDƩ.[;*WդWɣU+iQË!Q}:_iR\cLGdYr /|eKQ\0$F]mom![e.?8B\tq1&$?%ea"]t2$9 9R4>6fS_=hXv_CZRz& wpjcvTNǷyrUX.k-)|>G}W/iQ|J"U{je'(e >NM ]h&Eg^ɵY1vf:.s L *J(X\קc l;xO&ȧF3Ð˕ʏlt`k]IGݟ{n$蠑xh`(, 3DmkNz%%K 6$HUB"H! t ڛJc'-pk RJhJ>*rKc/ޏ#ߍB+)+9DE_p1_ oKN*pF=ba.faͶeکwY/ULYXt^,s2 T71<\gn=6ar.d.4S 2 v: I6^j0YGMYmqa8ꭷ*4sH Sig0Y|sŰÝYnB:hz!3,y1h@`25C/ e9ձUv&z (T E-3:es^ϟP5[{~dgG1{8(yY̹i!R}Y?SyZLԐ@醶Lm!R hG3|p7<5"DDLK}+W4m5N7֪+X9̤bKːys9=#bgTL}4 $3D"(01 8b52$)E*Eʤ2oa#*#sL>E}ơztOgtY^?ekB V}e&yidjɒYJ_rD` 0عZf2ϗ[5lRud\}K6ĕ#Zhm[Sms{h҉‹}c،p'ea0 XP05,c/Ш>&M (XXދ`0XPQ,#>Q\M~aˀLhe1?I4jDrjc":bFe8JJ{u~~QTCaԯ.e1 > ";H; @sY!F6bYvbUDf```xl(QOC P,׉SpЮ58PsMkwzC/m8!c EAn*t)]q]W_G11@Ͳf9: WY!;;8h0cCgd("δ*0"Hglp8"h/ILLLE{솯i,wq>.~ +202 Q?D*Kg]Dy4:\GR,9A h` КVJg_GĚ\LB-AvViaϭ//ӯM22}.iafs|Bk_U,̻SHI3iNqcu1cƌ %gW%acx6 //9tjRll$7ŹwNG:g+qG9Km*!Iȍg@jۜNR峖cloϫ#w(]nT4| z?CYTbHԀ~zNa p1Bޞ:EbnIȨxPy9R!6Cf(e1$j@^=WZQ\a]/x)=$t_C$ aN|pDńYhD3F`O'ݛGbm|O=UJbeR,&] ~5{a~\v0 UgCt>bУˠrй& Dxבv >[ܣW!Y79}IcO/蘒jB+tXPxN*wՒlVPzBYskAtɜjיxA ބIVO,S@* GE@GVC+KFl)GR~]ܱ<^cW]b6Dg&-FAC|<`7 r+Lp:SU6mϴm'~׾AטTRW%ϗ"+7f~[ž~_3Q' jBڑ K4l8H9buj`uF dW z7mPOߡB7%ߑp; KWBύ4 wjSzi.Ǿ& CTN8.fXDIVTM7q.}s,s $%:l9"07x hxAdŧU1 YQ5@ ' wU40,Wa ) \ х˺tq|PD%R\T5Z`>44[6.@q2 Z cʸJ_$Yrʓ;f_@ 7aҔzi uB5`pQrܲvc:bnLJނd"B*B-Gx9$I$ TUoRg; QrܲjO7LVw|ٗ3_r Ce'y԰jՈĒaʳˈ3426ސ>gͦک䩧LVWw]a:۩<-g \<+8{KMȊҥJ $_)]*5 q +S34YtTO+%}ln~YTO$U=n{w@r#}`'w5ȸ~s|s\!$^s+?mB§S`ǠBյMuKyS +(!8xA*4 '4q_BYChZ# D*RW (=⸔a`*껀gf !7ɌIb-?>v:u 63p~8(Lp{M#'MZCmڑt$ 塋i&!1It?!3xQ AUu4TC_ (" !A1L & thXmNͰ/n8]n>7{lǶڞD K u4pnQ_k۞ZثK[&vN]-n8]nDPƅTXųd%($oQO e 2[:L͹Ka;g>נii{ol{ت7Q{qoGSlIL^I}n Kr%cqǝVLN,,9C%0'ܚrJ3XBL)ر9,|߷GM R*"lF$YQvpr'x%O&e>,yG ~.NQQ QDH2Ի챵jObmgĕYe?KnM*G;hXm($5ð/nH"_XQU32|T uHǚ Qs^AQ)1fV,l#TGH_r<"Peʕ'_BEC:sBQ/fӄ W5Z)#`f A /< ݘ`phxa}:qeE<^n Qx҄@0! ˙JuKmvR#(B6Y/J1R`j}Y!%l(#######MI$D i0P(dάnL4F:dooR0#####㨔"70va|P0y݇Ð(g`dbfar3^-MG,aB/TQa3'| q 2fheUU """""rgtxs-p ) W_ TU" Cۜ 70[o!հ? g2< #(Ͱ/U Ӳr[w[6;`X"LxAdYq|6֯*G~12``V$r9${-W2ܻ@wdd@SAix(1$+ח,w.n"""""ύpUd\?2e6c]*%[]u68SBd:/f+$dTKF3!2X&l:k $#+gɍ&d8 >S7EdFXݩa"$Fr"?^ ;㴝G&*i?mK;;3rdhΜ2y_en[_p ̮͈ZP5lU>}b)HpA?^2!'Rm&Z qC i%kF7i'45芆 b7s2O6,z5Gdri13NUɄ5ɬϊ [w8(s(p(%G?p;>nB\+w u#p(~ 4qb)O3’X`YQq_~#'NGkx/$6l1O)~'έepv~FtoI5)/lI(!.'~EF:)4kօt35%hz{xt S g e](:|[{l?OY3цuۀ67Zfe;(i?g?%Rq/GD]1()TgDNݻ|3uvjt"g\j5{>TM6bm۱*`./ĒJ JN/Me{X=xpٱ8'#oC#($E3, $+j-(Ɋ ,0ێ:\upD~Dą_b^sq$Fx2B !8^R?ngQ$9aYC8! t J0:.I :<6&դ@`s Rmy6f֜-o>XxFbˑoJs8Iqm56brQw3>ƱJeļ pn4oB]hGU< <^H@.1 FUi\ 6upY>B?-o3g٘(wYS#ȴ\XjJN+0̢ J+jpGYcҮG~dj%ԅ<Qѭ/7f# fB]mkJPEEՍ/ٷH>U4IͬúWJ;}}˷.wP{\,iҜ%<(*>fX2V7`BbUN$RjA'Dl7w, vBSF dR>Ic n_ύ gTӸ`0e@2+p(v1#QV@&#P>yd1O=H$"NK!-`Ok9`1FTMZY.u %YQ5α5c?gm/k9VŘ:DZJޖJ yg$0-[.JUձ I $} 'PeG#8|##hV`R5fEӳ̭5m>TsmVZU:\U>씰3w `8=B}V:0tYj3_ RUiH՛m`;O> J!V0b8ARPO[_ %RR()m@j`xb}6&. Jjt= „2.$2vX"Kmx(gʂT1; NͰ/5zAdEtDPm7hhE;OSG]Z:Ľ%PYeOa[(;dZZ-Z"){`!it-(YR(wW_{d^rv߽k{$qJldM|$r=1s=xctG7ÕwVRl/+.T wrTbV!I.F:E:)y=s uʓjRNC)k5UzT}1R5ld*QS!jCI=J$|26@iR%`>A$~\ཥ +SPJsr/QݙXx@?ࣥXk̦ϱ&?Au{!)7ɟNېQgYҦ2B͉k+](ީ2zx!zjOB Ϭ;]~Hp|¤QOaOT]䉩 ӠuLj1&(GUcm./v2g񰧗qowony"pz㓑tn9l}qdg.tr L{@.PӍd1)((vKi3 "hxAdEtô:VNΖ$ ܢ@$+& „2n;er,Xk{u%{`r:.ݐ9Er4:j>s7[ܪ!hy:h7}Q=zyAxWжEo)@3KO32+bj"HF&fV6"iAFP 'S4:bs<@(Kli'DI (Ɋic7w@}O(}c1DAkgyO.cRTs_k݅Ou5pܗ (#sMT+v}̽w;Up? 1"v"+t9ÌzcS̱56ٲu BZFa <רAش9 $oO^E |~?~R\"eZ.sg+ ޕ-Uyu{?_ir[X 1c9ے׋q;oc+_w/ bt+6o=_͇ Ttꊍ'ow1ǿ3h6 gUrL-@CzwIv33Û>gjLdئ 6Z!yxR#A>n7@C7S#<>d ~_JHZ9ɮLQk,SNC2.`Py9~0p]6E_gS P|#f86WN]୶8p\o6`#=>LG}}z;,˓˓G-2LI߾mt#F|JoS=CNWDѤ4Z_Q cAfXAz) ft)t|6H"]ExYJ[K/M FA?[ߜ6gi}^I[,ĸ[J9! b[ eDȄyi?vVr3ԣYII|J %'qsa?<=3O'(y'U,2&KY9`98G5 ؈ %>CXS6٠!قzn"A aHwSa{[^~γ Z^ֱO"41U;&OBk܇̑_r:M w?c97~'P9o/LQfgVJ'YK#/oi 2ksUB 8tUSz/xȬt9īU!fd'i:E- Y5Xf d p(d6ƆLSD%""EBaB!BE=e؀q5M~N3gzd:grkRj_n jv/?UcvT33͔峀–ԱjFCrxl{27'NȖSI?mi{GCpxRь3g/l2 u"72(L1ŮW|u'`YʈGkݩ&2.Tdp 'U$'ʯy4G~m6HHOkxqriC}V2/r5q6as!*ö {l&`ۆd2Qy'H_?Dri!pl/{#ZQm=sSf/AQZ;0+S,2e7Rfm,͖6Qպ.@:n._ UL&fOFt^<5zwdj~1 y#ǃ\DKKwg|3}Ls#PwAJlTGV'_?D"˪2˭ 2)RO3AEQyN]x§q&xN/VA6 HNQ#?q3w3]kÐs C" >_KĻ^۲Uu<`S/7!\㾌8%XΙs\Ɲir$͖lS ⇙ٙ]!mx CN\0h3 ¿eʫl[e`3%󸔻2 wc/h iwOpΎG.,#S{2^#Gar&{_ÜI6oo.ޠ"l {#VnG}QAY;]<ﭻ6Yflӷ;%p!E43,OHw0kI3b;K%j-zcM/sT'";K_U#=͡z$>l 2uLE1E}˟]8b8!.0W8n2Pd!٠(Tn#<>yKI;(IT~ouڨ%Ef݁b8AR4r Jj1QP~w RȒ*Ofzrm2W* o.@g/b XaBÅPO;t>d:sλ0{$Du%o\o/OUob- ((I1gʍ0aGI$IS^PegK²,"R["-HI f5l$~SB{H7?{2 La+QESdwOж,i=!4>//xAwì x_d# Z7ԯԬcV=B &QGj/Ԫ+ܲ/ܙbHK09:ぶ՞ܾ`aө0}1"0~Fn&U7G2Y#_'9f2r=;L-;qkzu; nU=BXݡ3沘-OiRҶvy7wcJ:7+nU]~>=SսBq?^ g4%x9#dWn!ݚ88jh];h=EwVK-hk\rp &g* 4,z;R,2k>$92=ޛ>mRjW<,y+&`ʾ0Vqǚz<{; Hƃ "GFWM.3s k c{d^p$`Ś+ J3b‚"hXmXHQ,q()T3*r<\/|.B$YQ+dw齃cA#"lul 97!*z_؄/]7}' chEyD*Wy@j`@1 )a9^%YQ5X>y5)zsbVOjvՇCDIVTM7j֬%[%̂N6(-/ѫ,fbLbKs0Bx-X@ 9UE?iv Ga$2J3nVM߶qwH\Tv"?## #(Ͱ/mȊi! DW1wQ'Ɋ7Ϗ|=j „DIV5Z`LMN}PRFP 'HfXpǢ$+=4aBRic+c`p3OZ%YQkF: QrܲjO7L˖RUi A1БͰ/@7_%YQO6b3Gl(11Yј0k6 DJ1y4 }>YB1# ko2sՑ*j1 BP.TáA$R&p8/޸=v"TQ ]T<μu;Ri` ݂s}-B'Lj C.ۑ{w5@4.~V,/hxAdEtü ZFg-Iy&V` #(Ͱ/U Ӳ_H" 'Er $YQlN@:ꇑByl4"#&|S6|ϞG$IZ*I˟12\?; i=5CIpJ})`d0/nj--?#) [\)'Ր3q03ҁ̈́=H`# Jԛ?8Pg@[$lp$)疹egl~oz9 J7 AfI )$fۿ%Xԯ 8ifnkhܲ&? 6N, gL~֍,,eO#`Ds6b35704(4fxAm^/~tx!XU.^X\ga9qVd T\`{f}F(`hR-"x:zA+ L Պ<1`S(N:zO^x`Spf(gg,;X/m >UEMuZFpjD`)"l[0Ow3+&vďymZu nؽ\2.eѴ !E3qu`ݩ.BHNdSu7(ke21huїf[̜ģ'j7ۼkx87ߟ j5zg0[t`%J f|#V:Ⱥ%'9a/<#@G$*s=(UO{o6230U`W•܈jcWP{~4TJYn/^l*Oz-NiE\ )cCX$Ei ҏ!#ʆcwHxN1KSDw:TAz%R5i.2lF.%k E:\)F't1k C #/GZQh aQJ]_5r:S:A9O `J6txH4JS@ cKM8pK葭 ѣm r}nL!.O:ߨb,2UdQe>΂F[2eZF|B~LrV:Gj`QmpxMI3ZAm;tW#YP_]PWC9KE1as pC+2 'i1BdH+"ņHK@"h|H|9",Wu'N>^y:" HnC:dZW"ǵJ3inp״bw=v1׋ y|: w?le=>Eg4}RHrC4y(O%#cHYfH l $2SOӢ~ 4Olu9f?4`iug- w OR7I<ʍĝM_M۳>{sth ~?_^e־?> dnϙ e3̀[Y !z4, DHh]{lKLc J)ƾpH{eI:I1+t|ZD? }[:!ҧ}RurUR2it!8Ib1{CEn+0X؊Z_(cCXHSAG|obW7"m)ZXیyy,EJk V99e L3sP4u̍GVV ""gʖ=hT'Ò]wcaGwRyC]̸UxPPJ"jˮe-໢'W ~HaґSeTjsA3>Q,Z6Ji z+z/8.xU褋ߖF'5>) +#X,_$a~C]wrAGz/l|ޔ$N!ZVr(,"#jO1i'h%H<EM%4En|$l[B._{: )cOh$Gz9puMwZZw:Ҷ ;Kx+]T Mmqb9^T=_=!_?XMKuA ^k_]~z{,#fwnMl%XHJ(AҤT3)C f&hِye=h0` -kpROZ`?~3[v%i75){ )tCqdE3BMhcD'8G??ta[$$e+R`a⒝b?ܝQ8+ThR "#K^irSeEtݸgyw+mb33 |+zNx 6+n6tn3 :pejYZ^۱ VNNdafx[G#5wTu>i!ѼwiC!ws>٭?g|ljF!+#ڠ|ԚCW20D%џsϊci~D_ 6s i:iWWa0ft]d Jp$JS 8X7glBl7 3FAHD~MHdy{ rQ.8˽R'f%"ojc4Ж{nA "o6Zdžąa*#Vphk\ u!#V:hDf+5сXp'Q\Z/3Ͷ]p%` c`t /| # K moP2b{H E:-RLw(j%LpcSdD"8DW329Z帤+:8Hܐv{(lT0+}ݲ~FGԆnqUwmz(j Am\cp8WAWEE#!AlT,y# #PV`AJ_kۀ۷ )AAzF? 5)"DOAI E2pӸ·t`( 6KTT6 ,X jQph-p^CBl%5 /HCF0>ybb-&'!d>8D^P {E7KpLavp^_5c teKmiG_{tÎIu;h iWc֌'n­v:ugn*`@"Q^܊8,+'Hnmڕ,.u懱crɡؗQc=xz -uEl*WAMPࡰȲZ1nVS5BP8g̊/}u>sֱ őܛgWn( .(=íN?+޲翩RkK[δ{)|]kjVnLFl DDSD-Dp@?`U?-42o7%c҆B57!>ϕ$eTSySZ!۶Ԓ4 7x! fiAyVMR2?\TʉO.sd0~}4!sE. 1gw3v%oQO+^gp&W#L3@"(TiC ϱpx8t`4k1P ?27 >nx K[# j5+V*pzAҪvlz(& 6Z_?o*Lc0NdtCt&Ĥ=d(Y(iCJi\N-4 w4H!)}%^ @va߲fnYh`01!,674™NړH$6$m,bL€H$(Q#ͻޙgca# QT@`nڦV% _@B r'.#mHs [턹`;vbੌE>Q:!g;ZbҶft<1,S#Xȉ~ ' 蘆@jS i 6 Cj!a(8DJQ^(5{z*Qv\5rPodДJ`Q$[(}.IB$95 8fn۴KWV˯_?awǗ~/!!$iCs[-ges;pr@;J }MOON>e4alKI|wn #J>OTdM<TA7XkҖˋ⦳|c~^9Cg4þ_Kgs(H &l2)E@ZBPx%=P Y/t~j*Umq֛x'M&BcCȘמ c?܃WAЅ(ǰyj 3V'? (Z\s> }Ţt#WW욘#l!2 $)zP{X2CUP$yHTIhf%@Oa0*Et(*AB||[1>9#@`HdeRǔ!-#ҔЯm݅ڋZ=;^PpH㺞5%ydElBZ 6bԘq65g%{rGl$#37(XL\BRJZFVN^Ut1Wвd޺IM|4BgFX (iF"IG a DlA 2pP* xVbt i Ӏ*@`~`  HX0,23{wN>O_n9:P3v?RT3uF1O @Q&=#5;qvv/ |>ťrDRHj(@ ^ R-BgP" mDcN)"W@^[mmH\\\.)MpNұ`@Ux5LƐũGL<4*ӡهk}{NQ" Zwѵ]&0 ޕ4Kgߓ]:1' (UHVW"~Tt%X伶 +~ЏTn9sۅ8GKe7P}_zKeaqO@ky(JtOn?L?A{4YANXidMW*YiIvS{Tԫpž'j۞'ҫrܯ~wO0_FTDTLjl-˗$,D(p]\׌ vz`1Ma,N͞%I.JSVb@1!CkĻ{1z 4OՎ%Y}뾺nEKY-ejwY]mr34YUkkw*\hMrSϵ_m/T_UrEW`ֺK$7rNz0Nw]3 a_"h"Z_0&"1FbeM^?o7~Nk#>]3V5״w]X-x:l]QW>aM~TKہSX".JZcI K+kmljY6U4ų+3;ܽ.^NMH(CqYT5NͰ/34V2@2G36tO,jjރr_;Xe?ڍtZo(i~ﻸ|" 0Ex`p  (308d:j=i^6~yYwDolnEQ 1H@ 2҅TRk1 )a9^`k_PD.krd*'7 M `NK#py|FP Ix&/2Qq )iY9 0 #$ G Qh '0cvq2`a^H-8 $+%BQ5ݰ-I^FP Ix& DP GX> #Rc8AR4rH,jMSUP,ԖTڲz JjaZ,U sIT"+N/Ɋ 0-[H[i㸞/:߼Xgjnaemkg_$HerT J!6y.nHEåySҴ]QY^U$dh5kծSO Ӳ6b\=j,S&0aD+kd*lm`ѹ˚^mrU $򢬢8$i咮ظ(N,EY!)S.G2,G3Xl.?ڍtZo(i~ V/܌V\~0Nnq^8I|W<)k8;^!P QlftCr%;m`je˾{5y ؛>% ^gH:\ƀ 5x/i  (44;!֍fł'Rr,I͒ˑVb?)ɬyRy.)lF$V-\3ދXEll/(Y njzh Sc`w Z?2~ |k@UrDE} K,E ?fOÃԤ<4i0ډSTùέ¶~)X4/@}힅^ &6!)4䜣k +HȣXY:tf_%Z}IX PQ t8u/!FW† Z(Lf@A^j0^ߩBwYq&6Xq$ -;jj7fC]& sY.n?HhՎy.~X^b!I, NUS!؄3lJW`H?Hi4q4І@B[e'N:=.MuhG\nUMas8EͽA&:jjjb\uUf*}b{$9cRr=}\\(kSuvi|r1wrvIF봜#Tp6uYϙ7V|Ӆ!Vlwgpe/]ֱP$e:ktL]лa #mG5쾮ϲA R=~v/w G#p"Dp[rufx#4]"#B.4ujoΆgWjʌIÚ&:Hb\#,-M?u>ZA3]q"uRۥư >WZ1t?N!uc wօ.I.5'6—yLSkοNߖuؼ|Wa{vH4hiϪE0ȡ҉Cdd?Y6Ml;곬[s߶Ehk;pSVD;7w7Stտ3q xI7<_^I>3YH*BDDG8 ER^*N F^[mo~æNRlfoH9b@ՠ;Nُz\g ozWLSNL:AƁs1} ZOk9vCU?S=>탹:;2_lrØwtǷsknw u,ᄍSp:x57y &hMP Cd:v}~M?>չ%4/PWJxIT0|ioj~,:vޗ}F8lg<!/B3/Q9Qpo6n(_->V5gꢄo-|5T"8)3Z=h6*"(jp5x+0; Fp~н--{,GEsrј!ǃdBPR-!?%8L&iAjii؎Dz9r{鴛Z$2t\>^dEnǁr(s2S iLSwpn6G}#lde'Q/`\ 9L U.+^ u!U2a`ZylYVnV .yc$;N-1&&prg* u:HF|U.p1gL=OAp'|lJ=DJf/9Lg%G]_T^q |t"2w|6߮_N%{2\K^7Q,BTהJEmǕ``T/#1*]q3Q´̄j]@^r@R*[z.V5DVV`Cfɟ& s[teeaZ~Ak-̣ +㛖F])6]YG2I&#)OFdf.a̫΍I^KDuC^b\,q^N^F6GBՎz7MAΩ/)\#F NĦjw'NJE"'>@-yՒ盂y$6S e|v)_|sr>A+lqr9ڣ-D+zӶn|n 출GhvX R$5g"̾C2eKҀ54 4NXc"̄lRu4j١p(+ڳ.EeWuQC2H> mkaw1 Q)蛩!  4=PQPm22X[ϖ{'#M69Ї=;5RuEh !Yk-l) {'~Qc fDYXP#6^xU߆^,Hj zXV60?Ѫdl ;sVfQm}^j';u./v< :kMsI{ni}hy0ye) CΖVt9`mfK3_9%LG-ג֜C>-qsY :>YxYc8K+a'^w>CgHw#Zg`X!@/o`VNZ)~0F6 mOaP-~86a)~t3bQP%2tq x=zzƒa><'gzS%-10܉[ [ OgV~M=Ykuߒj cbg۟(Wt}fwuD= uywE`(όu/sZT6bZ A$.u8=p!~99ZiP,0FEaE!ʆDl6wZHd_ݒXL.FmHL zӠf̅fP~>VliBfL힛2[|{,4?Ֆ#^<_Sm"rMbua~7KgZW'#+$ ~06b Y!\!Lg?o,$O]"0%ZR%?K-ipʣtXc$)%_*~_¨۝ز/U 3$EcN=]ZVQ| 9ʰn!dFmr͗@38@xHȸp!*!0bM DL(N" !2QK#v`2\<&YXBdYT5oMwM}~f/5;Ln(z:Ė5tf>4߻mOc2rY*z*1'qܕЖ8YѓA]bE%&(I'8ދ'zqZ|;&g&?iXe&['Q|JUY {E\%f{R>ueu{W&='^T{r#}$鬞m4̳͚6[7DŽhA* Ui1j3p HYB<5̀ɀ|>K_ 7}wAkOGm}h}/}?4vT$Her #Rc8AR4rڧWbaiemckg „2.huzqaшƩUS+ F+<9cx_λ]Z~t༮:﷒,~Bz*Z `?P5eZ9 6 5[WG_+o^Kq<`~ZP GʆaFz2l̉L˿+rE`~Nԁ%PsvUL!Ho@/ &>'_C`GoοbjI!k`:wߚBwL'c{ z~dg?rvߏ P񈮙N ~ jȽ^0ZXۣw65Ë' %-4nH}lnnh((6VR,yOg)D_HKf s{xn?\Le?&c~oAyUN535z[IFm dnm.h гP.{|?ݱ/tXncFo/lAU*ih /{G- FΗĶ2~er m#5lE`#?5-lfMce=ҥ&>Ht):PF'G0RdRP,NWb1/ +LS`̼s-ԅGcJC$'S0?m- `tLz=[Wq`/#q)n*V|0du9oݦF6nw# 816O2Ic%WE)Ր.u{6ps+q/WG7-UTWس+&lagN.` I7QFJ*[V/pAQ +_IP[1+| fm-\;/O{%X#D!]V8iӦϘ9{B-VD5%K.Sm~)ͅQ\*WVEuj70tSԨY)^~05 wxG+gdf%%c`fDXdJG5u;g<>+/ *G\ i{Q# ?\ơ9ŏ|aS}ˊOzv~W!S*9+)|zKGifڥ{}%Ojd20Vo lb`GkkeAY造W[|iUZV`A((Q!;6z-5kUĒBV' uyi:Y,:a:B֍A! SV9RˬTBL8`aXpeʻ6U4 bevw{CőH9QJ #D# 1'lnԉ,E* W Z y*"\Q-9 *z0HK%G7\kB-4]0ʇfecwhJ|Ol^ca{,_yp:[)A"}!Vs)EtYv{Y\1 ?ƾ1#P$#=@)AHJʠA?Dl;1P, XzEF\C""I1,uh/cTx=Bgʒ- <|ύp;]}cWo hs2|jsV^ _5,Uu k֡R6izY> X't_juJ) ul񸣨%|#U>F!ʂʋF{y=l!1yh]%̆IKG  .E EXzzm5H>Dd60$m)p/{5\uiw#S`++veTfũ*:[EuΙm'<)OEs͓czR4'+z`i=Έ!"m&)6JUժSRRst2b*:m&mcmfjiR[t(lt9A+5Yu0B2T_,bHG'ʘ@aj#UC0`z s=dm#Eg)_5$c,Ī|ࡸxqf8Qő_|΃I`c$ɫTx@'4deo7lőaL"|j^55K53p2!\%]u׊@'(,*.)-#߽ $^'=h=卪1cPѲHHbߐ-v-_eߒSR2srQO3A5&82ܣz> h__ v p6[m&"K:tT&W(Xj)RoݤlQPC$2dzm,$?ou5jdVI :exDJ(N>1GϏ]%Jt(i(nD17?-o{ǻ|x%M9t%Pc4-+=JxUGFŵ[CgRdO217*wW4.mQVm.kwU׎?.Rnl-oe4$2Fg0YlE>dُi^mVg_T ' V!E ? ?o)K_2.o0X;ȟOvqM wwwߨ.8@A`jV9 u0+ !kxj~8y@#-,%;麴هwmquM+ܶ 9m~N%\Ku~s`2X_=\k.+p>8=)Y\"C0}EgGGRk\&L)84Må!xyCD2`^b'XeKVw|dl;wi\uiwJ8ueJؑ@ݍ*)42kEtFҭwUh'{t$  wץ.tRnwߕZt*T/GGRIF :Ř0F cq0X] a 4Xt,HO%ka]gܹL&.`v ϪXp [ 't\` kInHTV za%T'oH ekz^ɊJh *&g 9$^}6{9uI!GiU;6!\s|sza^x$zID^9 h@ȣ(`TQHlN'(+-% = )!yNw;?S&);T<02D4$`* u~ykLFir[ܜr C_ԛ(IҤː)KP?\6Ӯ9{Ҽ:h`;ym~Tѭ%O1'jxAI+$FF&-u5`43͵"Eق]Z(-'ޑ3^׏[N!eC?'_^~b( \FӶF%kөG!fc>F W#<7?@x@8@(7 yX3\6I5hW GJ0 tj^c&IZ>,*@ hm[иE׈J0 Lb2u;5^zqEf1XB(fr¼V`\,[bvE^Z^/]'bOi xYdouiKj"<C2_J &-FtV@#hw~fu&w8ۗĢuurɨ~[RDկBB_U[g ~}~{&]qj]_r]y]ʃ-G u l/ڽ𡠑9IYH3x]zCOkvY ߕ>CsR(^Igjq- pr?8gKg{,"u.F0 @xl!-P 8`^%B9ݑBt_fL+aKad.Avȵ􅆕)NQy1.%W ΂XM\>|ĮMeקZ:9䎅Vx\P(>L_Qu%()g` {*,#956 2`$a֧ݔsńiXK׼4_s;"uRϪr:7pDk: g:4#hhh8x$r "E#hǨ&1q bRzr kgIT_kW1\k:!e(҆ɶlj0LKlT49W1:00*_!% <|Y)Dң٣YrA0 B:LrS}`Mx=ʿr:y4mJ֛1ܹC|?%KblIq^`Jw_\߳=Bǘ?r(k,b m;:g Bhn:mFjbqv=gB [,PRwbV{塞닝d'/7/Jyn5p]/%dZ._R mjoqS+ ʔC|nqTA;FE>A#s%, L,lvsˇhN(XL\BRJZFVNo3D7Ϗ':A /3ݽ#7t-wuGwT4Ovlz'nge:N&> Oɝq$%5w;툰">Fwzg43۸-3URBO*ڔ3PBMIJS!O}=U9g9:6:JD$#  {*N` \ȲEBqpvm!2E~|e"W:ThЕRkrnu:t1U[d;qy\t\~S;_q|?/߃}r}1YE,')I̪֒gies,Her]]L.I:}YE ,w#뇚ㅌ3qWq}{?e_&Ϭ\q?7_W=}|}&y]A8xo) \_ qODSEѐPHOO+W񐅼7?+Fzx#JЇg1Xtiê":K->Ӫ>ۓ.SwRùo/ h?'Sy>agYkJr22LkHp943LR,26YEi\ @%.enN=t?Շީ7l}XG d+1Vǭzc3ll(4".SmjuD0 `CA# "!c1qv IH)(ihYXsWg rTIЭ*zUӅn `!O@)Jd w^ʂS B(H;Ls<\s ެ5iI?i?sV,mcSZoHB"Z[;SPRQ3021֣WI pܱtϭ 0"{ybKü5o}y~,O^_1^gff7`n6 Lb+O|I|\Wq7Vn-o;xٶ};ȽÖ@W$&A@DS(rjFpE1(=(Y)Qifm8ve/y&5ڥ!NʪOvrװF4Jڄ&յmųp_z! vO x"NiC>PhhMld-FjlmnbW2ZO8=9^8K0zWen|M2׎浗_w_q^lGWտ8!dF}TE% 5mfG5Yatf%}nQJJȷFЁUbѕ/RT B(FaT L M-| W*;Plyx|ؒGrUuM5@ &ZlH G)%b8*R ȩ8beΔ>l_jRF|%,p?q,{; d':2Yv>)O{ӟg:7T6ɐk.ժڴ 5Zj]{*T}c#_7t<A͜;yCg3ulb`/+oǮ`MyֿuKݭѝ}42ֳH{+\'2yw<dž#\6_H/oScut ~iD`\KRp%gFD;BpZu1I'ف, TN]J) W)yBe)(DsĪe}U3p,ȝJ`?5ķNSR`"Cy(`tgz!| _7&0e8-U%F\:S5%ApBFx3 쩬$!-vGʣa]a.V^L);V'=N#5%HXR "GQ k:H[}ikG gC^ z͎#ň+FkbVӱ4_hr(hK7n^@VXMZh"bfVz{)(ݹUmڋ`nw2O.4^ )Ͼ.'{K2NW1b `]j)EUXm֮8(}eAT;0uؾu<Ҧ Ho\ *s!oBԫxgxuAK䮪jWX{B G쳔vkfnXD?aqBHNQ"R`&n\Yb#6~[聛[t`1绫vD[2{VgD#[PU+jafG> SNh~ۙw#;\ aΫLIjz^![YipN\qD-ͅ-_4dquQ S ~+GT;T0Iր%ÔQ{&@/}ݭ.Jsŀ ƷL @LoI|ca)NL0@bd%X2-B3qMMcqkcGn$Lf7{l)Caاig hqd<0k+U p5h0Ψ@J`\JAZ⺵[67aYϒplbQ1ͽetVe[ܦқRU$pz+6|kac,e0$wuw3oXs;mK}nb,yM fLwuMźU!kSYT.69 c{_u#f[SFo{7ϙ6m5o'AXވ7҈oskzb i44hS7 D]o/դEߘn a"pc5ʶ& a\zn-G647Nenxk WeAFy k! 31rKL@^{{  hKu4c PHg.Y}-ָE!%j5Mhݾlzo?|^pgn>Q}0ɜo򘬚[*–{- ,~Zb bۂ#LF:!1^I0y7+lu,mo9JJ,pct0m;m ;[@2p+Gl?[^L!q8aGͣpҸ6.>g ܚ#kmW||QOP.rVGbH9 vxw8t02Lf,4#=ѯ*ncܠ.Z:Ql,*lC~ GLq.F+ngH"dk\sdFuqꠦǑm._2Z* H}!!Ĝ妴~/jʐ-Kь='ju\څHmT [Gi)N2aV$g4!d:AP:+6Ifm:kPؑxmJ 9nEZ kHr\ h{7\V~F FS U24f`iHGu<(!.!Q,^]Ϲ;K jbT`ԌEwġ'J?p~P!BmCxGi t&nPbL3X=Vec םIeLL|ya`{ZaI+ (̳x.KܨMϧ(!n1~Nj'VoklR"lNANWQmJpA.ݡ[?c<>2ȱ;raϯԞ'ۚsU ǶgSAWja/>M"v;=SZI u`i`yVdǥzuJi8I\4|2Io d8vV\"$%*܆t^/O)㸉$A4"s$/^ǎ]7  a+RvCThn8B=.uҡhk]\q(z>uE𨂲lܔ M۪@h\sox!+*NrOC8К:S(m9J|ǰa3&hAK4~8I d{>϶9UԠ+QhG,bNذ>EEJ[pMVs)L3i{ nQ+0OBY1@z`'c ޔ+˚ ĦZF :u\ ϊ,ja;НSŮZU( ܙŐNgk TsY=AߘZ}ZnUS95sTeB4gp[}4v<_$Ěll>rCdRWp #\&Ł;*}_@;J8\uXwwwƮQd;Sa3Xr6ՁN7ws *\28OοD!!wtDf'~Y;&Ǭ-m8^\:cOddGK9U|>xɿ-J6X!k/ m,1nXdU4IS⑰Z5w(=n]?؊WJs;[TY+7Sƚ1,=UPdV*}HDTaδhbKF l5wna3\ؚqV幾8^$vrPOPE->G@_51I P {3f)XBjf2m[G}j0?T~+J{?m+oR7MtϼK"cNxm2< '1<%lwg3R/tw .'͍xGNlvҨ>d7/ dKB nP1J2xۋHrD X&ܤS N]/BJd<Ӫud!O` p;(p.4+ݔ.s.Y/: 9g!8uT9bRLٙbċN&/G&`D\(B>1bZ3Ф[v෨z;J&ncC-zb,"9V t9=)LPgP*`LɃ^6_¦ndhx0 ol>Y&wJ]zXT!>"Vhy#GKE4~.f"n[Gl٩zKqϰacg*A5> @]`bU%b)9d)OA;uw>{a7NGMQ0Ai|m<>yNC &?MphOynF9uBy6Y6-W CE]|=72l`:Z+n$VL8sJ$#y9`v5:̺C7T4bj2S[##8eU6sE~ o~RN[ʸ5L0bgu~J+̯yb̻wKK| n imwlB"b40_5 7r es `3WN}2\_f'kv'dQw㥢 ,B?q|XpɋL]TF٦&3耒Kd4&mh#'BڹI3&)ӗ!ioކs*:&[7S?eɞ5N4*t蹻0[,c}q;B,N s`$^ eUXP$ZO ٹO@Y>uu@+{ʫ#ޒ̗SCHqU~kºYWWX c m*!J''ws Mzr#u?gz79L) ? ?I/%a0V!)5}ǫ&ç XoG^`oeL/b]{k0Hovl; ]==;1T]LƅPeY% 2LaDh+v* t9-FdXZ vb(p@Sv'wqÔm>^Ђ.j3%UZ ȊS8#Zv64f9xa+&:Ed[8>E"M$2̌ؼw<-]kya)o2%%Ϝvp$1vA42.m9kUܫ|x{qt&hW*0SO g`瘥;nlХWRpsuNn[S~vEI f m &Oyb:БwB&\iy'E{`Q;]TM"Qi\ $8Sq!ln |SAY(HOfAW}Q݉{} )Rt@sJ+K+2gSS*S*.8Ty uwsK36m-"MY.zm|GϨ9سIJiIe1asō$RkUZ <䩁 /|"mۙN&CيM@#prH) l=q0o CKa~MdY^x !xP˄cp wLԦA+cn{@^CUGOXγCw!XLykGwHy E uMۑz<D[&]$IgyI]('-+vpiHQtXg 4x{d*ɢ1vRɶAF0?͋DxٚuX12c0 ALFΙx :rWYE4C$$y 6߄9(a>;) >ADtmx06P}3xz~N69pI3KLh&Ԭ @~~[K*Bb"BG۸wa.usiDiTr6ò#lvT Oe8jя<89WDLϵPu}҉,EWb~=Ն,,7 ڕ]t"@K:*#EHρY{66.ZZpyGJD<e>,$}cKSԔ-,nUM_m,ƖlNZdF$gw}=ȩ4oP}7b7Ff3Z)YJa+?8(weFnDܝqv^BRlDep1E,FǠ8zQF !qƘ$0a"l莴cz(t&Ni!T2LvcKu j_yA0McXa-rFyQnCp~i;E3 \,9 P8\/+Fpj>q*pbՄ@UۼGybtPa | 8c8y"9Ӥ 3cT㎜<n?ofDw&qU}gL !lPLh<{ 'Տ_~6=BBl՘˜_.)N$ʚfp\cZVU‹k3 q(1t1>b 0 Q,p]BLZpf5]bm s,V.עhw~B<'7Β 's 4,5qTQ \pN cqyr.0Ma>Ka2|Q8[[ Ѵ#ϖNt>gi=nyꃎksx1#_g8[%5? MdR#MMIpdć('w`"1 8 B5+(i4hS)&wc>heI%K*ʡl6@V3S h+@=gBPaV%ً&=_u O"U@tXrkAW >l%cHqLxڸ >@cX) G\C1ܤ(}pFƺ:7QźiSK.i^RHXRus?t HCOš}|v֏bP&eVZ2Bo+cԐWXKuZoKsXfBށ=UrKGwkdQP Ef0B1uk@kk7N&DY=19ߑ"g2I>W=ԕF.ޱ'2,WyeE<%Ums5?R[K{*OEB`U>V LvmgM=tOG"6@Fl]IVu;BL~]_4OOWHDjONAGܺFRT Jl'q fX5:}ڎ 4HmūN^5R]A /1+ kf +Ʋ&܈ zDb[/YoxW{ͧ(S vS$A(Est,\=Fւ :_ 9B F7WU;@Ex6 +89 _w.vv2qf#fJ*jvϕ>,vh :vt]X{73k-f#9+HVk,#{";؁3m6﷏ L!eZ;.*A&Jjodk\\N6dl^TV]Aj:nO_JT ME=*YH @Meknnrn 9 ɇ0~hWNt=@o֒m_ Fwc.VH\„Gh/Iml?f&@󙃋6IjEܞ>9'ߔ㣛PSu^(WO{^܅ˬ(b_t*ΰhM7Ԧ[l*Z%m/ 7 Ec3^!0ģ-[2Vd{hhrյ`mq*W^} X)' My}Rq':)_Fc H'r8[#3h({%ӐA}'6P@h PHu5#3)mXa+6,P8B+YSXdh,|m vȈ.#/NR]ɔ"X2$FrXiƇ4hwe$r!S͔G3M)E1nP쯾)غ~#wÒFtAH5Ra2D֪̎ZpEFߐ9͂Ő*rEP-%n $7*Xi$%tz-}B`GMTfb&LM6%gE˕O~}>TQ'U{5=RvS[B ++A\,£X^Q)brе-߬}7-Ʈ̹khX&p]z@S"'6ympzҹnrn򹦋6]w9de-QcHMv1'w~%-́wχNgPZ]6=SAٙ+ZS"p-/ ƂUm/)}:IPyMuJ.t>!( r|ۉ!\|O'EE"{f1AQM`MvJA'N98$Fh1_CH;eoL}waQ聯m@ ~r?'y0 켗cW穹GTEQ뀜ZOֶPTM0O6%Tke]ˆ`nQWI*A3ld.etW;J_9.\AHoe8Ua5[P@3?M~7ڞǹ$q(Uز~A{f e[4SͶ0j).FU7ꢮ)8Vؒ2>*vݑ]8?brhig:inmF`<(&ƼͦLWB f7Pey)?Wm1FSB2P^oX64 CNث+%ܽelZR~$be X0-VHQ-4arzaم4;y#s`Md*[ӏ!GLzvj:2,̆ՙ3䘔l,1?u JR !"kuÜ2ـ!&D-$zT-E:yA|xS&O͐s戕UQʸDṽl_ͺ v "b=b;7S<ޛ*[i7jxg24h9PgɌ'IN ƂlNIqHo]@R&+AJZ f`SAmHkeGoȹݶҁn^  `L0^[ˢqjé^}vp S1vӯ~zM$xu| FAç XtBh4͐1x wZ$p=5#Igq3@ʖ6ƂP<8r g7!0PդW<vOaHf|教Yi Ikܥ?Htߦ4dS VƼoًƖ{%T ګO9ICK"{YiA H<ƽu p(t6 ͉lj5DmԽtP5ɔyږ"yfLWB~~xxq찎1 _kBXnoV74H/,x57 u2X@Ot\q_$r]Ki!w̥/8|F5TqZޭ0/ rNL Aӭir:PU:eQT&®u]"Kmj'6&H߿O/4R?+>7,hjݷ< JE61{j pOP~5!=hs7Mx;9V-Я|sM2܄E 29BIAws@KJZ :"p.N.gXs}`Bn#+;BMIi,ڝt<b3\Sy3h7}Ĥ0}Q-RV=RۂR}{@-1 d REŨ2;e؃"$~t Z]E4€otVaò!QPz|՟j,`]GB ﮭ;+^I^*VSWn3R\`+Q| k0k !Dkùkm*+MtDənrrPc+UDsPD-H9@WHx()g޵^ޜFpMqpg|S<6LļjqƲOQk_*l?KxRl}JnUkT.kL}2X5 ČAhlܸBA܏s(pw`XsiY.3l7\ۄ9uzxԝm'jwŬB4=5IZs\ptԝ5{I9PY.gF`|* P-$:\.7Z^dl9Q ^gr=Iϱnn})|0#*?*x!! M\c6r8THv d 33_z[%v]*r#npڂxW„9cWPY{3pb7ncМm*m鉝>Oc%2RURwx`Q6A{LOP&9&uxcoA71%.{Hʳ+[c4n[,2n/+2:DkL YdN;|㊑.h%QoNbzKѾ5;kI[hvt~&Ӈ9U3>X9ܼfwJ-qom0 az$:Gdj9{AmЦb9eiM#A[Hq`! IĠFQAfl to),jzRkvr[]y5D<;/X֢vPeu3 N]ݤrGocIDkxj6BJO+y1TmMـ-V({*X :*¡xe!"ׅ'GjÚa\&T4Hk3G<9̷&aLY"1Guס͹rz!){ht;;|{u8χv3B+3(k)꿗O\ ?`Gfӈi`rS/u<,wu9N*{튘[ZdxN:`H~,.Pmt/}Q].iI መGZSp{JuAqm &p>TI+4ĶTjaSP6?qR!_WH$Ӑaߴ[Ҷ)8!$o\vW`x+066ax~U1>ט RM7~8 `{ k[ ӥ]0Ao$$}%I-w*>` )M)B5G~ /GEXE\}UT\%HE$anD߶D9W(o"!_7U b e}?d>2I٩'I| ;ô{pkXA HdhZ˄&[ {3nK)(%6޸yB PZ_]c850(@*ﮰoHP.SK *h T@'kb  * f(Ivx%@)?tyCjF_꽟|vGT˯M>3wlڤaΞ+9gf2Z;̍X>:RW%lC4"WqtXԽj?u+ۅ^"<)ᑧRZd0 35nIj hń R"$pWPML  7hf[h"JzG '?)M 0];+=Ѿ.xB1<pvPU +EǾNtWS>{VC(5؁2X,H6_« eWH+Ew/¸+\P%Yl#^! uܢ$b* >^O@DLS1Wя]m]R~!Yyq[jE`Ů E\`˟f ([6bh0^6Б̢ɓTN$ 0JKQg.gwR+S?SZ>3>%][B:BnZ ڔLdoj'ieX/"K1áuaˋW|'z+(`p:YLcq ~QZjN{5600ɬ7bi_>ҝ-;&6L @B f b9Jk,IO"B 4ԋ`3(01K_-H=Ƞ>'b5@=5rh_NG^TP=y\oDM\^Pjhɇ3rʉРFZ4 ڎ-/9$`BJ1Nƌہ-)~iv%CCzK./bkI.ջ_f}]Ȋ"buƶA28C*LѥAI"ؤ(\2%$/\*ȎײFH2t5Z.IGy[pKtJGkW,gxŌ8Gn!׬kR_Oxt? j77Pl[oy/#Wwc.Lx]Ff~zld]~ߴ~&-QC9uKX;v~ ͮ/>[1n, ;fr\|b@aTb0+ל۞"_ðjV0{/짊:ej= nI`02,Xf*3}$=3P +a3z>S#5JOr̚ԧ ߤ8H*#|:h#˸ 5Y+-O?iyc Pf!r0sbN%Fmc͛[$~k<`QcZyФ+ XBcٛjj7a081}Յ} ]pMwٟw3~gBm׌|*QOJ|(UotW2kF|'-ըwex}2D84Laex?>suPt޾8ǭ:t 3WS&ܩ/2CI*RϭEk4D85g6Ae'[c0!\7ը nvZ2։(+^0v#5|4X{%W8TF\c16\U8'Rcy=}} eY1"bNQ4mU  &qPK4i̳xZuG<=" F*RbF| 'm>$kj;YE *f+D:@y,xix0K尺̭](17S6M -l";f`D'ʁܣ.R+xRNhps!/{y6N]m{V5I7/摅8pG凤Ey\jvgSeDxL&OdOdKYUxB~Ct >WATnxb:ͤ-t3V~iB̢3c% 7I%e6c^؍Sv;gE*ֶOirKc` S#A*l1vŰ:!$YfpoȈ#: 2yx^daEJzXo\ϔ=fjRDн \"vo1=8oCWOG5Du.oIz`Dg N29G&9-`] ;+KTُS8ͤ<#Nge4-;(;O)v^zf)|QC yU8ixCݼdq Ӹ1(mG|s/fQDŽ?`*_{˪Q_%<_tq#g)68Օb]^nig/҈(ZL*VPeG_Oc` U$-c1YkfC_ŀpWd (7);m-`3aܵ"Ӌb~䏿SS7 ([~jgLI`~ _BND ~CA4mRm9?/ՀCRO'"+$~;o ]a:"L ^l1ae9@!ܯ!Q?AKv9Tv|`7HgB 5{QUyr^Z 7NĢ 7]WQGxmhtQCH{X(X*hۅ=T )6-Tr=ʰYUL?@uѺ'"2|:M7$ S'T8Pw܉hPJ՗)op:bcH}}i t)ۇ?r (c]/sT:y. K=|ROFʝz_(ϋVsN f8=)f 7b *%htDg?X';FY%+V @HЅan7Sylǁ{][rBI 6+ ^ (`n2OcMW4o{{0$ - .;I"c 7aw=@O! }P䬋pZ,@k`!+ݧ_FnIf52D pwl[=$bmYl?w1Y1\K78`6]bEHV#!hhOqr= &u7OhNƗI"JGd N]cG=4XxF]kQ}t&cOHb5G` ;ϴ=[Y:`8)'s:i&*Ѝ!lxuqWiV|w^,PנmCMCDWEO>xP9ԣPU<}:Q\`X29/'//dK$DGJ棳Tm^˭~&Iy8(CG4VQ^BXvϯ'V}M=KH'ۼ $5y&Vk{rG ;E\ُg{Z7-BUosY`@k>ci@^98f"Aanrs )-vb8g:TM[ޫ^ң^,w)f$Hw\ADG5S ye$2Ҕȧy#ţa EyJ󳐡0OVȭ]+؍!` pKm{iH[ru0q]~؁1J6^"X4<|z7YF F3WܥhvÞ\IrOqOhN dDW+]T\^,n`L[ P8Ph-VHa 7BIp$zyQ^.mea<*M"S-&ҢШPn|.("F *oU1!N%{R"H!}"@ Zovޗ`*dLa3))2įK&fخ:k$#e4e-c!#Iku@,"p3BRBIi=螥PHJ-KlG`Mc]\A Kr ?v(M^?h%]Kr%#P:єA3jBLmw0Q]b1ہ|&Ki*ÞCI$D[ YBy3bc'BŚ>_W?zLjb5`X+ac7G/GP7ea~BD dp?U4R.(OM\(1Gȹ Zw&zX%4n$y1i^lӫf؛?לEq;AgW,8,r**57\'sx3+صNiƦ\n<\adž0s9R #xe/G< ef{]T2sqLOgn>/.lPsh7tyQ4~4*%b\PZoR?/^h@4le%&9ߛOmMnw@so/򋶍JXF`H,-I{}M6&e۵B ~FGO\N)(աiykI@5h[YGз=uOĀ/Dvv:} jgkz]fF?03|BQڰ֔s¿a xDZ}3ys\ ;_Fx:F.)o9.'vnUry;=5?P* s7ՐpCͼ[% }QF'rS5ϳn :W';!v8ՌUm86K%s j83HP'} 4Q$ 4@?q-) vܡmw_Wj>+Ln gF5۱OIژ^U~g)\73mH >w/WZ]V;Vi<tu4&貭'3Zs̻Bs ,Fv'ʀ&.UWK+_U1$tqTOLv3,ض2)G]ru!5 9 >?}VګZs/.xR *cǷ 8᫚QU8OvK;׾lX\ x`Uho/~ĺ1Xo}tA8~ ='*\jWP6FAh.欸miVTJ2ꜼeqB˛n5dذ4OD&c3"hBsȤ?,eX,IiA2soJx|H|1K?_y̒ |=%#NpJt^5S䒄[ v 3o.g=rgš7  R4T ')ر -8+L2vb4vvtw;wBN\oЀF~'.' Ť+E!cߐ-ajsjF{aK?߿9Rp.w_yXG,0&W5oyґn>~o8uJ*?ĻDm/Dbg2[|K- 3DELWM<'ia ,8ͺ fk=B{&_)Vcp-,/FiV{!,"g-Z4,Ge%aY/ [@ܷK:s|vg%a1) vAz'tS)3ϖGNXŴj"32zE~`h/nnvMagNYlɗXO9"i+yu _Uf@#ihҿ`.p"=4BVAX<0ITJCtt󶓹2W5vdqo%ſg瀂ZAmG_`7ܴ$d%;o8=1(MTs;j1Xj.J,Xlw1Jh\ˤn2EX"-uS euGqR4̓\ZVsD 'li_k [n⬎wT LP?gu7 c[նE.P9>ѻvnl;\xS/pkktJ >*(yݎ=ˆ-}(bGc{WY؄#[ [/$xEjkTpԶàQl կrIMxj;z<뫴/~ xQ;Ƭ+eE!<.,^"F;ՁŌ%I벒|Lx(1Ä@L0?8%ۭ)E#_V pRM0re`tR cdy/`cQH}qe`jjRi%Pic(0 fsݵNJ298)@@s4=F&K7պDDg&n6'*a)j[?5u1d"[tٷ:ɗVEQJC%1j.dWSd~E",)j) OTJT+rT 2,z丒^f>I*%+9CGPiK8P}V;r;̃gE귭wyNu;Wp}+XGªz g Mw EThFώ&7n[G:eA'/,hZ,J5eܵu#ZVz6f3-cRd-ōTpuf0k+ eql}O|A&|R$?~|wPuOIW9b(A/j;+ f)O1S 9Ȯ=މ]Gha]}agFPs~>s"_>j,ːGV4jٜou;'b:ep3] &ֵƝ z/\ʈu@'Z[0&]ϤdrSV of]f…^TwzOhp$da/{ZDzzOŚUuD;vkMTy_)BvubSI^6ԇ32ʧz|ŒX!:?y MY3ezNŠ}.}/L X9u;HB̓"JfcZynC nDV~hʎo}oDIhY(k;z>fS@Bdv: OgE7bCj(m cbhL!Zz]oiCNۓ$HqRQ'W^E&1͞w$)-n%odGf0J]c\xSC wtE 7XqF;-W_c$ʖZ:4}Y jNS\!v|o+ȤVS}Ϛd!TyILCVm?cgTmEnβJzǟ;rO(b,}vTH~Ȯi-mȡ0U;q~QNul;>_fAG+-䛢Nny3mҦ5_tkw1>_i3jPǎulی(K_l$/Lذ7{6 ^jxܜܼY\wKMT|߀v׮>݁7xqvk{`_s+4AڬMgmЅc&O_ m H.(ۙY'UL]Xue3ydbo3f\g=!{M1* HMH] U铣"1}9R@嗡*:€g,4 )QSJ&:g\\U_S|`Vx|zB;eоcV ǒH"LIi2i Zԡ!Dn.]Ev>D^Iq;FYNR~?fdZr@kƨXQde[gvhp4Euqvbs Bm&7.ׁ, qiO}hxW;j$~'ķ7wVj;/ǃ2v9mrEF-trqa\2AL嚰;:[%Ȍ=6/Y[]263p\'B|?vV(;_)"( *f(Lǝp9P_%N'W܁:U[5Wa)0#z~PDuQ)ʅJ|nj^SȾHDžP{AA@B ,uNqwYZU6$}?xc/ Gݢ́Lal;"N uIy\D'؝ts2jeEa䰕 @kA+pPvDǥY ),8RrD;3ſ`2;UL-g PX~m]_IaÛ?i׎*O@U%[>'&TGor~%|ֿWvyzr)`_M< aS]0<H <=}UUٹ!U+%zt#^1׆9 ;/YQ΄BQ<6wMMΧa@S!_ ^@k+F4C+'X5kWk]qutp4!}W Lvo铃~ ۶;yovͻjCNz5A4҈^7!zY'Kg) \SZ_aᰩbm@CRaA$hE|S:48Y,j CNB 8# CiDŲ.%.rQW$패fL2'S #n]gv4󫋀UX;a I!.?g] (Ւt|yBgr9)u,iZnեy,z"t軧-5xU {'pY۴ ;HPauIkX#pkN \#!o@pQR%!1]k VZ#(&m^oA 7 P`,^ȷWS'E*:i⬼{Rv%[.Uy^[bZZ OukNELnDGye^[a}Ng$4AQ(wc aBM ː=ZQ2WEx6NQ_fRG3O8^knkv>,Op!/46d˵Q-u7_X>"XݡBOB9mFrޡ77Q-]ܴ&>\x'˅(q9Ѯ Ȓr?V,C9v;/Q ')MObTGBdO#6m}q=wj4]#ſYK.O#枻bϋ~rO2<qҕxI Ԡɢ؞Q~pBNo Lj̈ oʡ()th[:P.Y0ҷ_is pqZ[iBF xݼLTi|lB_DX.x';oCy4 zY\ÄϭY!<"UYI$up{Yy켞;D>]S$m C碂aփ*;7 }7ѐxb5ēKix8N; m:5?ʲͷ3SiEToioVK9uLvExtZ+ΔY)ud?ܧL)dKpP?MH'|FZX^Z+:ldl'2aU]TְXH- s\xSiC-klȣȊBam?&rt/5MIބpK !Aə})5"SB`H:j/7LϳMP|m`yZ@#-I]y ͦ~ZU7)\Ғzsx|HfGLgl\ױLedvufY}x 'RSzu7Te@U_ǃ)@ ~┠$p.uD_GvпvEPcG~rq/o=3{ϗhWKb+ Ԭ&ǘ6CN(5 8 R9lHW]=Kս*cduevؼ X_3cd!3f(,̽Bٮj+#V#ݳĤIώᙥ9 {zgO˧Wc546E6Tz>\4[Ȣ2Y\'%M6 ͬH'CD3w[늩!j'4HO3@>DNN݌}s&~YgEM Ɏ:>,u P\=vQp1(Lw+"c uR;.eHSaY5K) #:2NY+hAblJưi?0:Z^:ZB&{ J'idLo#.NM*ۚqUx .ܽh` Qc]4p'L?|ƛXe"Ѝ{,;Onj<,kNrбefiЅ$ʏ^-Pu!QcmΫ :!v2_St?Z5-7t"Y_2b&4|I_7忟 #Rg>xT2ȲvN1eGXԐɯy'& _v>šf152#?bUd{>;|I=W0Ahy}"@xݲAm<,W߈Fn 3EF7lMmZjV#yU z?~8 dDGm%+x΍HV~F+Ix`ovoH~Vyiv/L\aW7"A/[Sp?Hf\0_hT4RR̍8P]t]R.H\騘Jۺ;O$ńyQMӷ5kMN/OxdoN*fw uFv)MAA5D{Gn%iMžQEҳg=( ]fN&e^&Bw ϸ&N^>y,I2i!-bՋR !j,cX`)}ִ3n)c*ZIt엚X{f10/~~hRqla$0Y7@r^$R-)-)E|Ud5!I50<&,7a,k+Nlͬ o0k tA\ sјou=0s)F _`kd_kki2 "̦B$0y5iW,Te ƟA/^ⳗ˻AWH&,2dzOI鏎 sشe\sw4˗e;hF/͝OWy\O߷Z֌|횷#gOё/{^؎ȎXRlu #x: $|)O;+}ٸf6ucy FlPh@12 (ORȣ]jHޒuFrϋWoK&fF4WJ) tqUw Z- T:|(kמ&Y!2:ĶmbB[+6؄BkVPizzEv)o$`-\YY: u-x/ձᙖ桙f8c\bwR]jCa O2 P]⿦f@ s–׻bLl?OK)猰% ;``^Fp}}6bujJVݲ=A@gE-{]zG, гu!2'%E2d8Jzи-dU\z:GQpCc\^6tyIC-%$ÓM Cv=s}vauAâ >0ID5}cfVAA0"R6ފ޸#5I\=L{CS.<|whQԝ"&2*y GL(L $˕PGFqʿ3S||U%W+(~[3<\ȟz`)6|BoEBt釉~PFܳ+G8%Ggzt6/p^f፸.ߌ}5b[_0# ,[bX?nR*"Uӭ@VđZށpzsOH| ) +HqJfɶ3 +d 'E0DQVvc_,+OĔ8>n!$=Zί^X6"[kɛ%%ϼ?ƭ;{d y FFT܉m rM4BTeŌ.c8gZ`,4,вԆ=RY71*ۙ2) CI،Y #}w\K zKr41ᙴ(k#owR"prx4kGEҴHekqKBfK*VRJ;3a>@^7 TٴhY (%K{aGHIR૥$WA!g U*Z^ c1_}-q4@ UN{@a=[J(dyҹZqQ'Wqߐ{!U9ee~QPi_{3EQJ %Aa82xj ՇSrz!i |`OG<^e"TGع!2;h%vDۃݷu?<_? EGTQ|Y@07^ڇ@J>(ؕuA^ }Jsg-yAӆ:S+XOφ]NX~1YTa#ƑVrKsk#F$as9Fê^,WiE]QO&FKаJ v4DH HNAvZ:̜lDv71 }gM YF}g>?_bq]_@s}&MƳJ8yV>=XABɲ ~dqj4([s!d8c Zw7,U#́gI{.}_S f==xwߛ5P/vﯭk{`GP*KFyAiDct熲jf27}/tYTnsP+&Ɏkz݂sKG5LV] I70}3R؇E28ÇǾfö^636%<%D:;ftXK)UiUOlMPI1d ť`Yޓi8x¨bbP < N{5|^i@W}r](ɛD{NGZq5K@aò_}xHn%> {9R'$O/7S֊M4x^'BW+*V(ŒA-k!/gm."vʐ! Ez"C9c[^P9J u! 8WqİnHquPA2QAĵ>nKfN|/B ytPZ~ܐCBw{X2ph>|(~UEJv.+ݻrl bZD&ԃqTAkwfWTHT1Iiθ,Wl`4jv'Yu4!G31ਂoC[ QQ?up1GP'=VdIa;.6)q\%]tCNOU*R4ӁrՐF'DpL[;1< s)At,zl@n7&?Vw,z3OY zImu"Z=Խz/?%դE/r414bRY  *As2!d3ssmwwR<ml2r;_c.y70}W}k))Om<|=Os7l^ۘ7#yN_ m#} 'fF k8+їGZ˅G1N'%N2Ol˼:0zӸ ? ( 3sO}yHUS!g02I{?[[a-vGq鼍sޕwxX&z")$ {|=۵#Ozi\, Ӫ(q-/?^w폘1?ayW\Kh] e/q Lzp*ffY?wV>l2G)UԂA-Y;~R9qfm,IWMLnEh(}B9@?SK8g݁k BA}!)8m1ch-XУA;<~g Ke:ɂV4' '9=LakHhg+]csfȐr1z%JB^ bE!}h`9LRlI )@oxCa EPX<98C \c w}=BGv:\@9AuQ؟m 81ŗbƧj ~k_J>zJ2ͽ4Єtl@kO}*&@(''dfك(*@ۗ<^K?ͨڐeW=\RPP( |ɾT[9PUYi 5lzIk/bTm2gI|EQ`$8)ʫks Q,Z3UC=C2hV0CY󘕙 f4f}+y ߏSN~4foLvZ{ MQiVg@Ob&!5j~ L>BaJG1c+;3Nmk$_>vűq0Mf%hN䵷v]]i|#(C:&F>qXΩ]D[zk%TlJ*_lVyʶR2=+LDK`w6;9C-vbE/&Zd(l̰m~Ϩ)I N*V15A'%$C~?ׇi١֥)O4g >tA]t(-) |:Qd9M \BD.6 "SOI&׸7T<#n͔)hw(>Bp}\Bo{ j6E7P}Җ$%r[;N`nuJJ_9lA۬%UGW.fY6Ly)RV.Xot7BTV06Dk{uΖ1w7XbDCҞZ96]>^eSp/ n'v'oRΩ.r=IW!ha'ŧZ;0[la-ZkΠRq6gXLY2og55۸.o.#'+O*TdQ_eL2{Hb&IݼVb'K&ItԳ~78zG "Y^Ҥ,I@ vb6o{ N Dr#a<1Y>ϙ hw!RAF$H" 5!;yZFGd=MSBaFHƞ)f.,^$d(G\Y~kn:fG܄,+Sv |{W~}* "?W[*M%YjtUf\6hQ"-LښW9.S*K ubf˷: q5I۝ j*0PVNS-P1""2ȪYʅɶv~F j_%N˰I/5&I_۟|4 ݜ* m-&\Hq5RM;]gxBv`TYá\w5Z`n%z8TI= k;jqm Cg$]6wqݥ28wX} @oNbd_I4jFŎ(&ѯޚ\*F⨦ άg||==̨3gXޓvfbwɢ' b=Hb4_ oV|tnT  Dmpqc#A_ガcֿ1NFf32YڝoJ*/:89?s-ɝ<'!nM[ɉ?/_\>]cv+]yY+,15O4tv0]w6?Oؓ ??F H3`G5Wוu)]5 X 4$ekJc|`Oeu +s4#5],N'10K(.)5@-0}`k@+&zJˍ"0Dy~KKLq$"Au rr#6Xt&MJJD:*#sOR'O~qSF V AJWeNcL\OT¸ӻV;&UqK*UM/zh99' K@HM-4fSaG@>aF5?Uڮ8g`cm)%-<*}a!n*#2xuq ri!MKi mAGJܕex捠4PAK͠& *⿺$r22ns[͚Y-pƳRjv+(,aؘFBlaڒė}jfڗڕֿauFwmO:oA1x!yEۦM-BB­v,fK$֯2lǚ A\olZX 645Vb6"d1愓I #qK=[,ERlrHqiwo\/v{r rFrᇃ**}OA'x|$ݘW "Sftic ,hL{'ekEo ~4A]L;PiUP&+8!bXMƿݕ_;J~Tu,H#<ʫDhfܡ~@:cCrgOS#=W?v\S %,Rm5Ak'd  Sy,ɗWa]$FpYT(lJ2(,ߋ#>IlmYLOhց+Kˋ[m<Ζf,f}F(Ă[m$ĬA*5|H8iOg}SMOń?@!%͚S`bE^7*=d95/gmޝKVSH"}eJ{ʊQCA;9?U`v!Mݫ\S~О8kUc܋m{JLއe<*(alX}7m Q~ `mȪm]@G0YoB}c!񾟒qerEU~Ѵ4TqʀX.{ @yϭmZ89bͳ} oݷ[,vr{c+J_`V'՜ڄ9AUb;{dفLj% :t|vz-POaQLa`NuTEXpR=&LOM (0TMY e::ɉJ붶I.H6ӗ[z]r1YmRQ)]@k̎>VO\DUL岶L:hR$|l>g=Kj%I&54@!sZ4W-(Ugps>s.N|̏z\Ў=)Fyo8gF!._0~(PgroyxpWi|c{/DO!EdYc;,rŜZ,g:iT|rKl#4@/㲦jWru̺ӫv@#+3MJ<<{8>h{m.g#z#w@'cjhC%)#VK;Q.С1jpo:jʲ4VTGSc(ҁF*b`&9vLqNխ$x;T Nbod1mp2f> 5@4H Mf ;v6 _N1t}WcY 73P&u%"n[Ӂjvjۼt4l*oEsZ-p3 ߋ[KSo6a0ja܋DQS̨l+㖁YAQ+sSWCΤxzĞ9, 3`0\8%|| pOQ(&HAmgp˲D0XPkO-Ь^dD_lIBBsTMt$qX۱1TcR6`JkCT->EUov̖hgb$.y J Ux|,eTּ2Ɂ螀6I$JQyl{6\Eiw 9th6+)1G8{чlQǟzcc;S 2b" /*PyZI\Dm\=pS5ݹp[0zR ,RxqSfg7]+l*5=P=b wQN#ʗZ0rZJe2Ũ2ʡB.|R񳞷AbceN08^a0 *Wҵ;i#Kz&c2Dx_S} &C,w'XbiԽ}&ĠoWW.Ͽjhz/Sv g`<x$0*GX4 8&[ZT3V+[B]LM,kޯ:)".IRgf#pDUJ@|Y0OE:Zu[2qz݀Mڵx `IU˿70~ v*%qfunq< w!C)mɤ|ϟN<-߀dTOvɴ9Ï9ukբ#8ٳ7Ɵ 0AFikS$ J1ǕIC 9iJmz)XS.%"#,no"$F,nج9A3dS{![?[l*ǹVFK'B [?(os"%&xVrIV~qK_>m'o",=(x ,d(Qr?aWɥLR()K͗ejQ0@I6JG= LhOP,9)V Kq>R}P':;7L&H@j0GI5 [әÁ@NVM7yc{}JC;-|8k"mX9Jn|) +ϫAGu`62`7/ ^$m75xZ VC dYd>5VBj ﭶNmKhHm◥% ?*(9D5+OmPN&l9}'ߓa_`YvVfٓ|6|dL@eg,IZa 3(!Χ$P};Ckx.ը+'>`YT`2~xilTpKG[I] 4+tC} d0 Ft2YNvOVM %J!BnM9͖E^Eتnȏ蠢*ʞp&Xz'fpMm>6ݾDg#c3xq~KhʨSlJƀ4?FẎ*CJ^Ǐ72No_yܾMrA1ޤM=^KaIHZ}{N.> $'ItG^i&7Kp[lBq5wۡ5|NR3/o@v;bny}u߻@%-͚X` {|={?QNrqd_cp) J [S.Qv>'4Ч lӛ;bhYjpJ<@,gNƬ9w/Ec[?rm)Z[;ge6ndU)>֞ V֛׮V Pş+mʁ~e[gB/++mhγ- _ p."7D]n,5IFN< [|l~Ip:YagSuT@m\VPaC7@Ҙw&"hF _{y2Yr1iH;fjӳ7Q`+#_3?A@K {c prkdJO);e32%x'WK]*YL@Ҁ,}rW'Wcϗ1sZZ'8]E}V:K"fZ pV/q-:1fZWFs_M:Iz9}ZJ򜘛!:#zݥX`F%c;/4`qL\%f+ O:WФ 5`lWwsb6;Q2kk۸=v"L3]նT;^: 4iP٢zWt"Qc "E Xf,9l/E _Spef^9Ȳ>d)p6a +/sMI҄a2 +&r -$૕{@ &+h{ro,=r@8fmHKr&t:Jj<'lC_Qv_cEh6mBW%Hq o?>#ە~g8~d5^YR-~GkVͪ![տNF-%q&t RyE=ǺPa .k"ΒLlz&6C–yhu˯"lRH tѿXv^5L <56-+. 9\)L)!njY(z'D}57_+۵ðЗq #mXG~'g扞[VW%~yD]=6 #V_$54*Nk ) vɚltU"(I{o!~|VYzkXFP9s/Q/W;yae4/tJB'Hf 28 PN;o4zղYdQ,Cf2bc̳1PUEQ[#}s@$"/}GYa E#[l3NM8]3u% #r#t.BmW? L:(\CUL{H)`/oo},/YZ2I{`8x)M  L+\ي=b7bR*_7y{CZ`7gO{_:ū\5)h!TzUƄ` EG W*jiAr[}q_3.D|ϐ'V6??-ߜjU*|՝"Cvd.mݭ74h<*AO@AOY"&10g;^5BT0PHCa kDe̝o-> |*ԚS"&@Za ,ă8p& pJ:-xym|qsb^T9bUl%Ns/ rM_dgp5SdɄ89vPP$>qm1ΦZxSC#:vR#qn[Igk#7Y-iQjsp9Nӆ'}KO]{xSq ̐& a֟/] +F ʕ#rX*=l4VM ʦ>B۷$*eXCc.(e_8HS~CxA*(Ze^m-/ʼnpuؾ_"4g@\V8ux9Jtqs([y¶|#vGlchh/䚦a|N2"7cū dd'Ŷ5$g')]ψȔ: 9$(vd\=PD_zКx!g~,nX͍ґ'fbTFǒG7rkȏ̟rDy:}82TemVLώu|ݢɲ&lD)<{mjR*M{Ȱ 2B[nӂ*p0vq īc(W1ZYC'ELﲦ?jUZd_1u9CbsiS(RKDh A4F)&i6pF)OaShVx'<%v|70`P]^ $Iw8'ZԥIbSehx-œ2 tuXas4,T~i,"J'e_O #OG3E Ruix%r޵uGR*LI M{7"ѻ=JF`zKKpjPU- KNE | Goo(+9bvY#V2Tx='jX鑑pMH%c$9ǀM([#v4)Н씭\ +WS[;ٖ$_! dP1%)߬^'U𶌆d]vSx}~fPߩlVPqiZ:,Y_3C}P 3wHf |=.͐=ofi+%sO/" :O{Ƀiۑ-a(ikZo3HS>C,*; j3LWK2pʢP_ E7?*!])1g;G h9v%1 -oA!XFݚt~׮?UL~" D>7d ,ss0mZ}"RL]skbq4BeY J`y<ˡK1y*@ƃtz YRm*F<ؒ9D=ʀ*R^h.B€0F  0m;Mo S{\59<t )!D*nkuQ5Cn(vp19-{mv;e{L"q<#O&_˯e{CKTsl*+3޹4(*UYw>Ûյ[@i,l$Ul utl J38m @HKꃓ(3BFUɂ>AV#D2a#4SC.#+V.X" OXqtdB;{o׌əeɬy=RuߧdgJ$-PbǪY٬UI.O}'mUMM+1++WtƆLkF&[ =av(zvKLߓ6VFRnM&m>YNV.bbRn})?x_(DnhUV(A1FמR[Cm ۹Q464~}dv釳u,ekwYBC.z@~?~eښFF1)[7%(<" kVxx;)%j;naլ~ Wja+*-0Mb%&8GF׳7geH}@h4r*%d^ii ~<^0 GiQ .&eW`6l<Ŗ+=YK3Sh4)R]{8bٙ} /*sh9oUEyd24Vm;y>Dw@WvY`OĿӱWu)+ӫ,V([po~W)X0D%R]P"Yb#I#ֳlWC-LT%}EHi pkF8 |;v}{.%4,jUW*B%~0?*l T*0j. `N!O'ſK$4~ᆰ:!~eBk\߼0huV0)̃ w\K8݅4uYx _͌V8pҶLdgJnF:hn\p{ @*jM,s8-DZyjLƩ梙Zf7ޛI[qͷs>.0vȁP}sΕX꺒 M ,ۦ4|גrmN\,9<>xLC4R"4f9F4UGc qd}7R]5u*x;`LFT0{дlgY9tuhpmZAJA )*i} nj+x+7 %Vp`؀5[jO% TX}^6SߪgŐr}__Y-&Y`W2f~DJ_Xrp]~rQQcPF..p#Vv}.)n|Too,u9,a>2]`x )U1Mr<.AxNP-|Ɯ)UE"VM>U^7T?X5cldcmJ\ cxR'J$ fǍ_a!yRL[H[[k3y4$)&j #ҳ鰓=:iUҞ&͒熈KK?ٽYЌk>FW$ri6NXm]0 hRH !OF%FALivKАC&a149J53XI7Q}}O!x  jDI yV[ڀPk%k4"B>pHMA. #4 K2`!Q~wQm2漡s흒ߜ3륞AK?SolrcՔxvq0H=ft}kf_c̊ =DOnDWpg`A: 1|;l9h9, c_| 43ѹ>G#).`9/Z?c=^k={ z"V^b[mDPZS?gLMeb{~u{r&,zj<N;{A<@MfN *if,\iꆉQ㬫Y%'ְWQ[cWGʹyM7\&2aU;XEǗ+lxz>kvk:.:v5 (ܕOy*rSXbEp/z~-z ~du#˘[ i$Q)ۃ9GM vwUO46llʌd=7e CGU)Bt!,HBYd[˂ń?GGo)e 5E!J/X?}}ʩń—%>Hǿ1m]i} {R4Lb#9flvzkj{L5[G}br+eRx6M/9OCp%LEeRWp˿a7X/,L{܂Xs'pț*ܳ/p}sG@#%i@ 8w_F>0<~z8'ÉdɎ;hֻ_σ pLASn?$$ċ *ړ]^@j@/ \ 8V"7 )Hף+ X1|E/_Գ:j>ןWJ;?}3wL[ȕB'BE{ߣњzTg8{{/TΰEݛ+V?87lF2qS{5Xr3 j4^Y X*|v%ӣ\<]en?_;Mve+FY2Y1SΟR5 pz6f|-{XS3Vlvoq~:n|>M ]gP̋hӳ(YxBoV +$Z~ʭ. m=QЋN_gN}:y(LAR7NG(ghǤ~T\?nΝ((律LlI h,񴜃9+ t3h#'}3iivc0JO2נ'1 ]X:{6N蔕qfϡ8gIQ1ᷣ->;b/Xyz8{ 9UQS 7n3$gVf&LwZ^v;>jԘ&:L.o2KH _=1PX$e"Q(nj1/Y1 v7/ k&0'F>*5V4\=$ _;Eq7XҚ+51Ac3 >~6w 챡WF@է gD }ۆ%<ԀiLqK, i{|qqdo55+]8'Qڟ1xho/ :,ij]Dom@ ;ܯ1Orʳ{K"cOBZZo ߵ{*[3hd9 y8L7>.^JD-WYtĜ1H}wDBa۸3S/"E&텓jwL/6B̀d7NR9U.)5rb iYlӜ(7 "))?*JIt+K68~of[B\n_#`@d̚nbr7:P]}{EwX06^\sxi-U_KA 8i;XM =w3i1|iO -1/0%AR ) yWxX3SX)%UCAM ReK`.GQodʂ3a0-eO(%{ޤHRM2RF0{9Qo"gx*<,AjBJ5WMHnԇ6Aʆpϒ`-K^蚥%Zsg*=҇x2#®`/Z =oeNe-!/87)i{~XWq%NL$s+nFYVg8?0k?v |KC %mw[@aG</-651)}_|s,TLd9'N\! 4Msr]Bsg4Y>ysR'%C6#KPZ;M_ƿnK`OCˠgUMQEoCk1MG4AXxeac]FU %U[6 %'wg}2pm5rZX^2ŴZ!- >vYH (g%=FW`ςPt p\"RJnzw਒N{hڲjc- 3\7{[pAvE6WJO |ЀJ.ܴ>`̑ws/uS{cdH\.CI0XI—K)AJR&"^㻃&[94fAtXo1Rv/eze#?vJɒszQ5䭂zS#0_yΙjYJJOrp{);*3iSfSy[sV9#!ŝM~~U{ہ3% q4Z !LvASؘWXd/LIoENxa`͸P>F /vXC^u&O-SA' XMԶY=;K hx:4ftIk焼ƠƯ6~[Ӷ1~h2;2\R /Z]?A c»s*/mpl)NцI6&8޵q[&l3'S[ 8##в7ղHzb jDzՋůt,},\ pS@t^Vby$TnJ 14VwJ%.i;h?Mj7!aژڒabze15]}8qsl Ai43rQye/A{d%A|MZa[|fqmvR ٹ'JͶެ0ݞD6iZ$_:45kF;w Gڿl"pUW9:v][cAo9!NoAz.*!,D~2]90T~hmRtwEUC%J)ůy_%g~ھ.i·Kƥ{Ī҉Bvq*%WtaXMGOm[A$QV/uW>)o>ґ1C}WY:nRd64ba o{6LJ0l>~;Y$M2u3zzF,iЉGiNT—l޼fCAQf嵾1ZH4C] QTT ):XLV <@f`=.^Թ=`=>S_i"QzBczq:h?p485ۑ0Q<_"Ʊh=6Y m)eʡo6\[( "(V!ԗ>g EHn ܆I=xԊxlryc;.U<&-+(o?a(kk023 H)CP\PؙLawe%9*RB hwhcox7)LqbHԂ+/V Q7K琳 rEWx+-O댾 [ ms=荈\AXA[SE hVv7&^FݗE% k #GJ~+9E/9F%MR1 `UpvbYv"מڹ `Stytc,a)$:Wk]BQ/Uc"bW \yE1Ϧ3d},{`OjW^0-JWl#%GdrD0^O/r{WmY]X6s 㼜 3x(;x_z_Y޵bqua=_"A<&F9RAQΉ߼TԬ4=a&2B@>|d[u^3% ɪe[NZ!3>N7ǫŒ7gq}LcGL-Q_*C#G'y $÷ց9҆R3CVP+$>ą:;'H4U/9 3lJp[;-ĸrsAk:zT8"NIbF4ڢz]廬YGs "lT~p||@$8-NR{zK۰ͧy^0*|DJieqZ4%ye:4WG{kK-"~vtL;}o &:5?DZ=ilx\0z> |Hy '/NVۄ9W(-INO7zhx@2_@k#4A,@.M 4S}T>>M' #z1ݔcWrxׯ) 0[UENuq'00;wj|bVr]($Z`Mf^% ʅ$%WGܦN%CYw3)Na9>WgGjaz'" 2qQ=ܘeQt-*^ǫ"$p&5F.@S1IZ >N*L > BS<-)ַ( S羖mF&h^&H}RBgx}#)`eE,[N#Ai΢5֜LH1F0EvvtB[Ba<\W'!{gtk7kUJG){a\d\LyOXFr FYY=j5N{kB$&m/,raq!;7Dلf;7*[\29G,QG5."vòB>!ڃw_wNp,vbigc usQԕ2]zvÆ.T]5͋=z6EAza9R1>`)O8uDWw(ܠ(Y{?ݪ.%3yt_χYؒi /5=RcNTǻ4YU>y}{/;w o{ЪhTP^ͳڹuƺ WFQW!Sd=xx ؎?FYt`iآ)I;͛#Mi< $ԃre UcqNzWYrO<;+-!w X0?, ȁD2fZiK9 ԏr瞅mktPKG_V寇Fge" YkO&qnzT:P~RP i3AX+!r-뇃Y+V1;Bl胂 L1VW>_OOGm kg1R*Ag`c47*΀\\^hś:cf`G+2/N[, 5ԝ N%NEFCYեUI_?NAJZD\qk󬢒fR^z+aP8sr7 994CCXLQ,,,UO'@Zu \+ꢴV*/LU+rVu4򯽂$q:׊bDI+` :,V~h(PÜ?5޶}ṫqoLpPL| 2@X^$~<Zp 9,\ZXr#9֗txh?WGS.>!lgW#]W7[cPΤoYlEƫ.}y&^_Ԇ$KӰ۪q<"Da._C1RH6 W)֠!K>2:FcnkTӁ mܾ> hW|ԑSOG vכ˝,@iW4+'='6͐ax lxҿ !f=/'6fyKmaf v5v=Qu>`ta;Z`6;YN?k6c!zjU)*9'uf<]MWYNčbCfM>L[ܐp@l\`@Ͱf|NVVǠ+ڎ0;k;b'uR)Uͺ/gwF;_CrI K ΅ s ߌZFD zV(ɳRi68\yeGٞwz/#_YT 1_LqJ7rx sbDza_0@آ. IkYh[ۂŒxT9lS{ܘM/oRRЌLQ3*8#YvuX\8tkruP_5O#gjA6CD0e Z9YU:i`.!o+*]]Q%{\pj̇ݫRUotM/>==%va/W_Q8 :\ƚGpXpY;ll(|<̛E`Lo(2YiTv6mik5܎\0N԰[Ŝ%!,akh[x%N c2(>iQ*$/PbWE[תQjLqrm qKYCU6|̤u}ZARi|IY^Y.SG$JKVAS["UWή8zx*H*=5MƲ)`n4ݐ/9P~*S'_EռC[#&IA_K LAi#WY8n~ `dz)HZVP2K/7qʶH` )+M:\֯=W_N%W[F2۵z{ITo e>LVU]-2H=/g*ٞ7$i6,y9e>4H,%E ެ LʄÆq>ͬ<}70cF[tgfdte+lW٫%`~@] >䋩7dͱ<'3dBI)'m1;E|5}OّׯC=?O,JoqaqX6|sN:6u.lMvsGY7O\e?7Lnմvn;ًW=4W,1?ɨ[рϜ)pV/jb(#YyØën8:3cEvkG enO?,a]*NHMN˾:"8gɊ<+}gC'Fi*U=Aһַ#~}hzxٚa!;kU,k`pPMԐ(Ѐj( s_n;pdÏĦ 2,7>JvjK ,T,STF2_,s1ӑ!i1g᫼fNn'|ҭ 2* B0(f"_!ḵ SqF@p]hrFv }5/cGÐHMl˭'ʥz-RP4yMLfgI0ZFZqt¤.C KY;G1@p ַn /O zi6I%X5r"E-_/ BeEWJƒ8DgSBqo8?';V O ! Q @AZ qxTJp=ML]QVIv%@Q.}(O-& 8RM63ȏoX|6'M4|ߩdXNDQFk '+Hgu >]`WP;yxa;͈Ud?Eܩ{Hff5K8S"װVg9I u BP3:mLa>0u>bj5{hiE=Q5teY/%~6Ӫx!p 5rSΒ1,8:pR&TdTIwvoߤd'~CԓF3J'E[[maEfQB}-2C|nxdJ=W@杔 ev ,jJ>|OOCFeL36ceᬶ|=GәO/ϼyΐOmYiu튪+ -fJ71|튃S#G*?y0שhtgf 9ci:`6ԩ5Mf![[Df{*nbJ7G 85Pn%ԁFQC{ew%\7R9çK{ Ep}^O~JRe330rtUA "p F3!cnh^hiA2r~iۅ$0y$Xo暲4}*w"{KۿGlD^ ԐuZv>C=|:t4FKoW@qy !] i /lђNn13o/G)zsd+J=Y5!liM\^FR5AvH7Nr05a$(ѐAE2{(l:ZmZZf?ϲl>|=ݞƛM^slKZPuSo/6ORfڅY{ZOtf>OӈI*!/l͟n{SLm5Z˖ͻɊۃf,K\o0Ϯm] wi'<}-7Ur&:NL^$ 2[Jy0#kz#L#:ԏ:0*⓾>T +Jj6p-.6®PFc ,)V3TzuA*dk@q1ִsd"OՍق.?&-S8|=#{˅󣺏e*l!*»qXНƀ*O|R,,pnՠPgr$<U

    ZO.s bqlp|xB@ڻS^>AwueƢcbMh׈|E{CzTLiFxa o}݇. Dm鞸hzuEcx7sG0%lq!s$H[u\$O?̑^컉bmK;W0,܌V(X=Ayxy8ȫCTq{?wOzZ*d\ i"m=_GAEj̯pMTFR*7֊ (nWlvwsFuL&վ9(w!.XaN5Vobrɇ/6U*eol$zZ8'EA!-֣ ^֑x`sݥڇǗ^맠E_`J }t0.[+2Ɉ5sx:/"Z$ R}c #fU8bƐ=1E[r ׸[P# ul&%_ޙ'U@%{NlD`tSXer$e}5Vo~TgK[N7x=kC}]9ێOʦKMuYurSJyeAAj7bڥ #ЍRw yK5} GlLWFsCtCgnSI0WQ1OܵQCM:i?q z*F]>a2fRD3цQϗ Ò#wlT`&O[] {CM'C^ێfB|XtS1YTa-ämwS,;6NT,pm_TK wSb%˵"v|e$%5Yk,"hLOYWvsބ '1<nbq;F=dq,v#caJ0i }c)cWu4f4n r:.&/7E YB.9Ť(ҧO$9P<i"Umb\$.|nN& Z'=-deKaĸ]A #+t~^6NFlE6 FcX(6Fam޲ߎT*bxY1s0 Y 6l* 񉖻W&,b{ķ"_U$x2-p4k Ywc$QycmncK ^uq1fBI LgVO Y1;q^tg'F)JkٿM&AE P ?}-^0WÍ*%Q% TK鉼nliMdf۲D(HKH„,NTe妊^ȋ *ǥ kT$Ng;ܒn ' #^hkD[f?*K`DAMdE粣|FA. ILad'oTlZ1{I9[ܳ7XqUov~/)A/@}JjHn#!1&+"ݺ'\.5[y_ZES]EuV+x"oɌuvxWPṾv EϝY׳]Ix}DYFOb EXq=A1dt__me x@F'Sbm!lTξV`G{e"SF&r>9qWEW`_Kyxޚ%dkf oC/qâHeʲxfjtC# Adj[&):Y!~n1\Md<6\0J.pNɟֈ5C|S}?0wS.׋Laq@SJ.MxQ{d85B }6Ƶ&n`o6sK}?^4Նmn'7\aޙ;i(Vu ^ $o[ +y f+.TCH@L6 ,zWN ⑂zK6>[!Lֆbs3 9njOAŽU: ./7e 9T9$PV`O ۦNr|x~=5-C.=udO22-(Q]cc!${5g(@9![0Q4~#m/ )\,@7yEGFd] ;6׼>:|?D6{l_Ӻ7f!g|zeg6|OeވUDbĐxodk5ۅIU 铋pdd;5)8cMˤ3k5QKG9)K=aS)9>bי' elԞcE- 7nY)u6W |3k 8VaٷzL`b3ʲWnrF(bqϋ*꥽u]>M;Q(LAyRDY߮OQ4H[)#ANS-rZ#[6pb@i[&==?}Uߧ(#I=Q8"$ެaxq.+ *!PSǓmj6Y@D_6}W,ޢ47W8[ys &pC)xrr<<{BE88QH[;I,e 'gm[\*M!MͮC?ߔyN;ۙ#cҳ!#~s5یCR%_V}qΏ*@Rs7EpFdY`o;0 1/M6l⭩ej00XiC ^M KkWT8øXDtߤ JQY7b+djoJ&'O?yVJ[&f#]2se@<:<@nUἁI[ Nx: XQ9~ݯafVSr7Ř @I2a7Iץcΰ}ON҄& ϭ#C~5FiN.:M ޺Z%nN>O@Owֱ9[|փ939:s!a*Ф*CZɩ˩n3/l{]z쎖J V_B4d8e~_DL;gl?7B?>J+rPw?*@*4-AGU.3r疶?-ij Sʮq3s'sizn(}@ojƷ鎖 Ǝ)лi>wx)Nv k#?:Rn<M-}|ĘMaJ)kXuP|`t]f,"=Vz"LA`zH'.6cG=mp !Qarxs7Wh_m(fǂ;]w0wu&.ȷrd+3iyYD$gߝ߰M>&|qL˟?$K^4 28ާC\_̪aiI34!Ks&]Fط1wdsiW <ŮmF-YrE2n󢫜J9;8'1{XCq`ffK [ وyQ)  8ChaaHFX7g`A8MzN91[h>)gH^v =W!(] ((n>A7n6$E3PEO?g,0l.,43 bJۼQy7LLץȠh@"~yٰaJ7hU|i.ēXa>y=6dxeeLĬ4YQXVvggqՉu)U7̯s`#z@\V4CO;dqlZC.O,`Sx@- ?'R5 ǁ`v'ş)7rڼJ2W^ӳlN8&j x'=* U+O*]6ǁGYI0tװFɖHHY6r f4pO;F5m^ݒʛQgU_j VsҰo[=z| i+[VB*duCmLՌqGQ9*k` Zɺffpd6,qqNÞGOݧgE4ǑmO$w'ߥGnĤ+DŪaF/:uG:*608!JiQDq# (Ea9;e͠ wᅴ($dy_|ogV'Ј?roT+V%sʧ& Xhu% նy.kYYM\rA6NB`\$ҫ8ez0pW)HM aF3"P` I<[m;ng@⇥h/LJj:jGθZ-e-MϛB @r@Nl8{ɕFb~@3!SOuK d5x/\c*7i̛c߳:.8W˹tʹd( N\|RH-I3{y< ؤ!I:$M2ǸAwfv]-? _"VC##I]vuL^vM➾6fʧN%FjS eM1j޽%õiZ X5S29Lgýuc穝S'iTsh>[w D xps @&[6@:HcRqn#ݽ;b*ⷌ-T&2wM,hs9 ,`{ nRv_XLPq[=bcrnl5ào?L M_s< n$mpv>°nh 6 rf+&\7 }n?B#βQ 'HED%$iFܑkf_Qh}˭/ J!ͮmHlyv$~i|*xJIf?撖6]RtWݎ]bOAW/ܢ-L\#EN)U=N)ҌM͗{9ӒlWX%3gc vgsÛŘ c5i$q{ ;3uZq,ijU\Re˸c&7 RA"ڒQB}1*E/So(i]w7u?%=Rlc8Caޞ5P". |h%v64+\'}En~ذэ/݉òi u>4P7{HH7碦xFGrJ5Cľ҈[%do$KKr}Dh*tѿ<1sNw֞,(?$[ ?؝J.Qd׿1^rfZDfEejN0ZnS#cmPB~ %QF0HSڍ6{{]ܶj/ٷ݁P7ql#F/CV@oyK@\L-ob]ӗmJYT6V1ᯕiUYv];'`SN@=F41x\ݼ#$V%rE%:衞!-$uhiu$9ŧ#L);\SeJ*`0''ѯ ~hFPv̱Ev39$tsp5)/I >== E6G /]17]r.0Ik͛)q(͐9:Q`U8f7:0SdBsjiOS3vd7d\a6-Ks2@<-}xV)}@0x˭M[[#ۨ_JyC۳3Oaf.=:^a 192͂Kw$8Ȼ8cOjW܏nrg}:ֹi 8F6KF6vO+R艬6BZ9p-Nr ìn8AQxFqb? FCp w:Dy𭀹~L,l4$ AJR-^hl/s^H13@ͭ)Ο$txY2u}R/&lrYK?X}D)O *?YCQ;>]z.ڤe7焔]IF<sn \Nݘ\N>cd7|$* :9G6|gøwsPWh_B?`*mLO+ '0yg86-zZL jYxx|d.t`|+q_†*v /';ROqp@<:n ` ߽4[c`#p[@G_jt×}nM |#/3?`8Tao*tf|[3߮Į?,k/M]#M? c>nA~^9ߝx/J3ƥy.PokK8%c"Oj W@MZK%320\+X3ߚk5 Lz>IjQF4/KdzlqvG@h{ {шӯƻTCs'T>Gո:]y }JKͥCMEe@>\yx+Y*>''9]: [ W^r0BNdIJ A30K9ݎ@iREDtm1 z 3DjuKgmQ}_`׬S' Tmq%ִNǧ푣ueICsGXŪ1.Ĺ'Bl[So-Ͳj@I)oVLIb)3Rj`c=L|rKm)bCNEb#xAЖu^m[tVi~$ CĶvl?[4[p^^qfG%mnm2ox oX1{G\9N½;/Ty=uwxA`T 3徐klm࿐+o٩.ҟ‰[C$se.2eŞNqr?#\'Ґ8%m_/{Gf=S;> ѮoGv]ܓNotFَ9*Η&#r}xI~Rȑw%OX `9X9Nİ} (Ƥx>TQ.P)bPDP$#X -gQF}ȩW&f m.: mA/ysqb5h܂Vs\ys\@Rr&4]ʱ;~Ak,x]xR|\jrNga̧sLZ*\) \4Sa*f]5lL2PPcGMtֽ[?aQ԰фٖNRbj8 PzURqR)|x6Dk3p8sOr:u-gaĴ(oն6JJ=5~6'r/b`I}ӌDO t_Ӟ+/EV#^1ߤv-Hj0/q7t7&_Hi)rכA'v*I;vOFNϧ*jԥHe 9}qt=a S<(m$7s9Մ"2S6;cgƺV]|C(}!N,"Gm%v p<8ljXh2zv(J 3܉} , ubvgFsG{]r֬9r.dU&W85Zf: M˭0bր^V"0G58G3?7P/ Pkh1^Mar)]G ejV'fy:c G ޭ1)ƊXJRhiuF(5Dp ¾ܩaJ{mҳX &S(أh7L;K&q°@<$s㳣4kMG^Y}y pB]o=' 2 H_: :JmooIT SI}>r>rJ j%nsd,eX!r̈W I~0Tr셯at+Eid !d:#DZ)aA*Q8XpaSCs t A<:g4 )jXչ;uDNi= [eL3uL7ӼtCԷjI kWG>!6,kB'yUz *|:t|X'dQp#!pt*¯B7N+p=I53Hrz-N@*v_ ͞mO" { I ÜYbpT38{0D*6rs6F[xmP`jkRخfQĿ6<7x\{ hA0Pz(>IP&+@F'הvtWi(!6oSm Ӂ(C PBF)1Y _!ʏ+{[r/T@I0ľi9 NJĨWFC CR ie/+mc(7k!)I)c.X +zWS=ʐmNXGKfrF;(avu+ k4rL˅XF$"-c0vC)3=`PPU `O=`PQP!EK e0+(\R۫eUyJ ) iu[Z5x!I"vǰDvԣ8d6=zZ.u?#kk}[1m7qa,L5c9SF;@>61, hAΣѻP7TM-3$сrΊUj 6$~eX_eUur9jnt&l9?Թ =;^xNn0?ZOg=J;RЌA֐kIw=/WFgsd<#SO2 SaRȢHF+˰ B^ #Qq%ծӅYEԄ2*>#NN+sv^d8.|r# G@ 2UDU!Z7 **H|tiQhw:3(֏]JS0Mg0?L!8i*X[d< T-,sH2½"`S*;hǺX(R' @O{K:(Aް6x_ ɪ@jy|TAJ!nz 3Gtj(n: |hZZBZr "VQYa;H`Ǹ#&R;[%6MP0ub HlZ4%ƮIi?WFX$yx^ڵom5Y}2i6Zkv:Uφwnӷy e3:[B>[Kpw08c9\Jh tJlMh!3('vx`u=SQ[r &n7s(g~A(lR"Z5z_R:0ެ' 7o)Cl"{h2%m|21$,QU֚6 M>0ϋShLL葕~vYV3zḯ΁w`)p6rDpa4x aQ6CA1xP-12SYy (H*d\u[[+q+AӐ;rJ,pq2q ~ oQQZ! ^B4K!_ f%唂gC UF^ UZ:ZY8G6T^Fh52-1He Pk(-2 _ϠU}ў M4ͥTDR6xU~ Pb9 s5ke$bMHCi^V%JQmDCYHB*rnMÁ!((OEIԞ(ah MrWwWe2lH@P?_D>ayQ]g՛MƎȑT _&;pwg NBѪc}*'zkKyJ&wJRT5s\~K({:eg?s:-Wn،rQ$?"Ԑ4v9Mb mvw$NG˖],Ap0}!UiskRq )xGuRy[uPAl>}sbՖ+vnٻKa6pf[fI>1e~HG -IJJtrԩI d[똬=,5{{&n z8'p^8ju6 y;uJ|вk]%%wm9}s `8Y;j 菁qE *R% }^u Oҩp~ިꐲ2k)`KDm)3s Қ O-2V}ns.ٌ d<5DDi۬'5bĵWSh/KBDIտQ${o01@yN|W Y#v~a1ҎAuG+?簀9FBWo̭5?bp ӠnA۞XNܲNGx#k?R|H}4֟vQ ”4_N5~Jsnv{ u'oȹ۔ۮ)ErgV1)`FZ1ZG׀3JS{w>;6Ƹd{onC /c}%Wm%:+ ,*o«y+!ɤ垵 ΪH|[]kS-(& U-|&'0Xā4Wp կ_U-<'v!j l!^eNw EZv~H;xHٸ'#y=`Gyd6Cu*m$8J0soo"ⁱi%嫴eb2Fk= p=?$lifZ |O ]à87˦rrbnw aT̞D? dZf6A]GzR_+qk)E>7}H8O\ ZaH~Vָvpm.ŧr [{Q{ycĪm+( >EUS?7NUÖ` 뭈@q-xe zy>EV`yZUɐ2g]voJ 2rͷc[NQc%5dM%MA(,r{ٗGshrv 5j@ 1YǍaaB[e\z 3 mY>mnkКt 3PCU՜K w?~F^rr^$\iXz(~} 6 ~1+uT`gEuz[sѣ1)kJ0rogg~Gr|NXo#ɄY|aqt@ 9**oFgQGKeȼiyx'Q1zuto1ɟ)\^}Ex ~6YQ njiXR~icm?|J23c(E?c:懇'9#`~Gʗޗr;<ۤge Е*vRx˸T j1ئP8t N&Y{LB 0׃R)!Fbm2ia쥳Z`-~0kyepU_R0wHoЇψ;'=h;3'3Tlfy.Q:Qe{<3Gm&:&1^"iwdrL 4p .d$ki.?V d""$sO sc;dЊνdji4 lX07~ 5BQ*ɰ)Yz̧=EEWvl6QoijP3M" LLY"2N<>26H d7#k' w A=+*3 x)ܦ$s}^ЊL*@yFz1uQ@j`ρأɪḳY& !@UWl"n)Hj1I;daZ+= TPzPTU_F (w5--rn&}={uՓ~ h4P <טpmk?!oj?X Q(g&@ C4 /x(+ Q~ܧ91P dbط~G{s\iu''=>c>+;wvH߶QѴ>ziR͝'*;)IЂϟ5>~Y,6ԃgWZ|Ϋ^wٓ\Nun7{-LӺB;QM:F&Q]m`EȔ8v[Q92cN]"-].GQDf(m8"u q{ǫfޮi/ZbKwTe*眹<ZM>5NlDaq-*l%[8?*:=D =2pJϙ)iQD?h;'w&fdz"w%sV Ni(C08BcxePkQ7( q !!Ļ@aQv[O=[3p7HsS4~}:y`aY18tA 7R_Casd Fg0Yl!C R_ҟU/ѕ)TF&fV6vNѸJ?j:zΛjލ#NͰ.ψº-jW4x`sM̪r{z0m-6< {ܹJKaBgͶfǺj$fsιGm~ffffffffff$I$I$a?pcMyVA dl0%V^:k=-6z;]I$I$ J\"Lfaafߒ|;;̶$I$I$zZ%k Dl6'l;3`\GUUUUCW$I$I4a25qKTH0]c9aK8 ܷmB!!B2T۶@XViizk@@BԔ2eS0v`)q%[Yq-<Y8kg 7Xs& }_n03B!e/34 \vCRT B]r# !*)p5y2j#j4ʌdQv^.>!1ɤ5cs,HTT$il9@D1X@$)Td=y/ˌB!) yE_Bv_A$2J3BZB0b8<-ySyl,Z/Uă@ ZWgEPLbQ)3 fآp۽5DJWM}O owP!f`7 !Ld'BkX9<90ҽɜr | rT+G٫z7+/=5ݶx1}h[D]\KwRI-8o} _L3?}xUoZہs_]_3‹<9 ރ$EEOy\D&\sN>wߡ"iw9dމ!q X7@wdx4gh|P d=K/"zhv@)ג&(jWX*7 ?ë{ No`ٯ~>E4M4MӿtDXa+3o-`%I$]L] q<]琪05utfkKcH(#Uo xdsL.T%لdM-Ŵhcxނj-6t'JRU%IDQm"oHi߭@FX%I$I$!  c::::::::q^2zTD̹B؃1Dжv–Jq᛽R*"L쇖\ ;H%V^6NRi3 0~Z Hrn0lNRi3N#|u]u] 0 0 @//rTfP(*1VM] jiYBlocvUg($:s@(K29Pd9\_ %ZoBRkG'7`4-VtȁFP 'HfXDIVԣ9I (9]XSerp)t:3蔰Iu)3_vUŚkhvl|#RHRT*JODDROu_9ƮLʶJrTw+=5ݶx1}h[yRO8dT)5ŧ4})'=e""雂֘;ezH>b33ys|`9, \rg8>0tYd%_d bП p_lHk5fAkmOꀝzʛHͭ]Nϣ/pCOc+L[hᅰ[ťs2bJ)s(B3soj2{Uߛu4gmn/^> l-E/N/ #^ymݙs>雂kbG}fOgn7(ZT]x9B%do`˛sqk %`xjj}ʼUl<%x\X[™OiuIR۠1i9עZf{\y'*MJo6tտꔲMZY a"-uBșLwgL3_*e*zەnoxn>6zHn7JQdTڀ%Y"e t%TFn7f$SAB-1,ۡ7pWqۏ~a033S[.z XOZ.uG-t/l(&Y_i7襏=k}˩܏GE2)fpMR4c #^y eb;\"f Eg-.W „ͶTڌola2t=,,* ~d1#OJaBf [*m2$D/z1)VI"Lhl;aKMܭ\H@ɜ_߲fW)Ňr&ϿX7Q ]Vu -YBN(3% 66vUUUUUUUUUUUUUըh42"rKtcp"HL D"dUpz>ajBOҾ$S9֪7akX"8v#.   `2P}ZƊpj3Mh`z:~* 51Z\iڧE\A,( ;^MQ L|fIރ&LBrC 8S45-\o81T( @.}8ւDŌ#%!R +{#\<|B"bIieIIC;__?R( Jja "L(޽ڞ<4^jd0ab&G&DZZ @6:(  =5b`}CYG>f~ZCx꯯2ύJvfy&cU RD̒ikV`zAwr- ha_x} >jWo „f9aK83t^t=K&4 [*m" """"""""""`}Xܳ$̎–Jq >H (:.B!B!B" H=a2t}JT &tl{[*m{H@ I2Pܐ$IJ(jn$Il57m(jnH 57$I$I$#"" 57DDDD́憙YDD$P܈UUUU33@Qscfff@);OAUUUUUUUUUU Ș eA0cr5)ɜɜɜ5I]k/<0 `0 ;W3333$Iw{}uz7&mfrvv@J "DDDDQJ!""" 3ffffɈHJ[Zn _""""3333I^4mI3m۶m۶m6$I$I$I3333333333$I$I$;H$I$Il۶m۶m@g G^ tu 5M4Mf[z>~]@QsD 57!@QsCDDDf57̒@Qs#"""U 57E͍{9FE͍$I(jn,k,Pܘy6x}R:qaK1aB'.l3c6f"Lą-6ce @ f0T d &t80Tڌq7&t–J2^ „N\Ri3 „N\Ri3ADADDD  „g9&t%#"0#"""U @ UUUU]Z% "Lh6TڌhMTUkcXeYS@ fs–Jqz L?dH$I$I I$I$IJ$I$I+wmY)RJiZkc1cZk!7>Ʋ@Q뎦@'P@QAEmP 0,P@Q Emt:] I6E4(j0L ˲6<(j#B(6@QIEmz}!Eֲ$I[J$Im۶$IҶmm۶-"P쯀RUUUE*K.8 TUy~ut}nx Q~+jFB)paLBk,Yz-zF~mzgR/Cp];\ ),w۽_KJV1x8(\fU okb{譇Wγ ЇeT~'>|U3e &Co( ߒ& dٖPÆփOD9KA'Px-poG\oJ&B>z{jo/s}gx<]erO%ty8@PI+VBчp}Wיղ6u=zw6^ Ɇ+& ;+)Vv?/~ {)`IX\fƆҷ/۟GG?Ɵozs=eA9"4ɞ 8wӬjDO_PNy]m{U?)'ߣ_it#VRC ,Ű,[4w*CCF>`R^g%Y)SAgAФNP _O& h;xf‹H49I' A:a ꤅6K+(M.%E|\,0x&V@dhʳDaq; k8,a*JPtbđԅH)A~cScNR@?n<4 [GJY ޙ:+G{p&n>BH 9jazJ#$1J"|xOPU*k[IJYND $?i[GCȍ/Kֻ\PɫU9q -噛s}xVЋ[8J.MrSAԤv˙@y.]-@l[RBVҋ:t6*goC^Vsyhz{mҮ~m~D&Ԋ$u)DNk~tͬ(E+ҁctɔOĽ{S8L91 h ~%餃Ltzr[Ɨ] G_&&o~y-{pm'ݪw=8NZZvY,rCu|!q<_ݤ#ɆU}64ڊdRXrEwvld ' zH{ a^EX F5+}Ͻ84\E0BAg K,}WEc@|B3`KLMIE]Kiy'ئT"YKݕ˲K9NJUdJz3M{d3 5MIaG@jF1ܒs! 5Ķ">f.ƯE;A$ڭ(V oztL)Ҋ od4װ^i!t+Z+cj(wx&E ~$.󱨺 -VWhL5<;vB*ݒ,.ޑփ8뚋DUR",/ոLc6e$$eTj?tN\=_ Ȥ"،q)HwZ]N_)2hK V3.U^E5>#QY3uDQ?ʹE,Õ\&-&M Jx|qm WiQ*H/v)tHkY:vRG 颉Y`A!mTzR\xU})W+ȷ&+'1<@qtK],àE|7<=scVRi=?ʚxPM/Zo(z|;m,W[lOɖc6.>p!Oc_A:L#7@+n׿ Aeηk@ NjGXAֲqk&;{~^0A 8I`\HǓ)e42B$B#/#'r_LK/[؊)*+*FvƏN  B(4$2WLbs<@(K^d╳T$ TCEÓ$0DmLg2h9L`xtg v~qyu8͒a__) #X\d_ֳZ7v1BNwSfɗquD&g[Iu>D~rt6_,W6`Cb!\ Lv\%ϯfB!z+"LhIB*=L+J/yhƭöҫK0<:NNN/.ohCU>z>C\g>zO?-$UAΗ39N"'{BOyb^kǘ5]ROt_'۬t/_.,/Zt4 i\,=(\~T@H@& พ4nڮfa^t{-,U55Lgr6fyQVuvBs !A1 )a9^%YQ50-q=1Ur޺~yY7L(YHm"R?и#,<=;d#&a:/fw{0!S./OuW"ūk5:s!q=?#'ieU7mzüO6t40/Wv?ON QU Ӳp?OI (ɊiَAIEYM{\o]?Ӽ&VtRicFG'g?bZoyvΘ6qr,ing9] 9pr!   _:4jҬE6@;2:&6.>4vSPRQ30218oYLoznv 2<>5hԤYVmuԥ[^} Em~Ҕ-fyLɜy-X$z9yNGglQPl&98|Q=^>cw@ap`qxQQD(義_ݾ>}|א??xzt/ &^BXK 139Ы!;9(\ժS_W(XL\BRJZol< #(43g߫?X"LxAdEOoI-è;-@'H`v:72BRk:hmckgor0[x9bT_(4:d`,C6 Ffo3$ lEbIF J惂Fs%cg( @,O *`H, J:ɬ L,lvN W7<| ~A!aQĔ_jK•Jpg- L,}f9-qZ]7#CP7hM1_,W"כn8ΗBӍ0tdR|)8mN08Bc ,O *`./ !A1 )a9^%YQ5A z)Sn֧r˭quõhxAF`<~hDczz}~KFWvcp;138#_~[,90 _g_*B?\ k"J)D&. )BN0-[SǸtQ1p&fjh`잕@ҋ)r!U+klo$bx3IgG}-6&4|"2#YeYe#T-]fYs!U;ʌ1c| MRBҋ.!8s΅B!rpRqItMu BYvJ0PH+{* T e&F 뤅{pi >T+Rr^,-QfOs亦NUڂBI/-+pV(=nS3*VjJf~cZחlJ:#P& J.Jg gf Jɲa\H˞2v٩0-IM/"J)Z*_:T8ed?..҆i;'52@.҆iRJ)9Imc1VV14:DbZ)ٮrmX,ք(bv (vR0LIj/)27wKH,Q,G&G#Ϯ&-J,iKbh"2iA > #nٱ.5>-X#.}wчS}W/߯IߨMB iݝ7J+yW[ *6=&*{4)NOC ĥ6NRy! k b eXѥCkb44ʸ[qDciaSTR^}SrԦVE]Mb5K>Sz:Skv2( 2ScP2^K=D߂~O֢V”<%ybLΑZ@ ReBldI&IQ0m 3ZĴeWS5С!a$DJ ΚrK;oRJRJ)Zk{_k*;~O}?8S Шw)_\N.uJ#Rp)X*-7°{{jWRpvl~4q*wQ9܂$T?z-”7Sܢ>,j U&` N}2ĈLP|2Y<1M.6ܾo?hcMņIrlf0YlLuElT&$P\?4ڐS"P,7OX"""""""{J7<7DlQ!E?}C2H1(9ۋj% B3!ynlg&I@bgh\^Y6<q21ůt]kЉy c{B"}h83`;" ܵvwsv4E=ӡƳޫ5a톬m-su1kMb7[,z;xSqZ-k6yb=J49o\#ߗ {XDY3y}8 ˰9ӥ.x. @A H"Ď%hPn'`輻]Z-)ByL{Z6\+iu?Fņ}׃v17z&A֯Wk?M_ppRGNF}z3[CE%s/QlY"i!g9#dbRn̻ QNMճޙNJݒC'* z\d(ȢڋGR8$ْ s3o |Sz_/4G&AwUoB`2mƭ$l2͌mҭ"B,+=Zkr]yw^ eit!Ղw (3\K ܾYEd z>gL/.Xcg=i'rǬ|~U{T#ˮeGYRdi9 *I(;[i >ǐy=T\|T{KKk<ýMOAۗ\̚S2ވ]Xi5'FkZt5.j\yQM-kήHbW3k9Ξby W썛ekSK(.U-FwY\=){mS/qe}>Y6DAfg>Rd teu=]h5~9{Iȿ*Ne\HMO)RJ) O8x6 ^c@@lpqPeGtg0;QQ2Hw}JjAm- sҜ=qk֨VJ(.PZ) nuz u br.WЫL|t%[PZDG·vLن[;Qm"RQVu9)Jn̷72h#Ad0RWQ?\1A.Uf JbPP`݌?\GMŸ́ F8¥/7Z1:2֛+~+^|ϢUQu g}0Hp;'wl]_sǛP\P%`ړKd@KTY%@@qЮHL\ǵt) ̜rNesLj+t|X'm?ݨ&to&ݤЙ8 ᕮRm5ẑ-^LTN<"W hE{kx3`ZP)Snfj@0dEƎ+2R5[+zlxIȸK!z/`хg1Y\sd<-g>G{Wjٮ4e 'J ŬVfd">oDEwwfyitW!^MT\vݓCŠK"f13w )w]>{8D!fךH{t/ :9yn!8`6#P"jPφbĠQ?niX'9^bHhLr Y)hL£5J*,kQaW *XmNe\HR BlV-X烶[~RPz;KKQ?%V 5jCe6oɣhM!sj3:s0KUxr)L$&G߯7C'gP hsnqᒰ)Jzi^#'>Z}D2?$ ӿ ND]ޕaK'tb>vhOYooa񒴀Yyۜy;<mkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.eot0000664000175000017500000050355614664334534026370 0ustar carstencarstennLPYxϐFontAwesomeRegular$Version 4.7.0 2016FontAwesome PFFTMkGGDEFp OS/22z@X`cmap : gasphglyfMLhead-6hhea $hmtxEy loca\ maxp,8 name㗋ghpostkuːxY_< 3232  '@i33spyrs@  pU]yn2@ zZ@55 zZZ@,_@s@ @(@@@- MM- MM@@@ -`b $ 648""""""@ D@ ,,@  m)@@   ' D9>dY* '    T     @ f %RE    $!k(D'  % %  0%/&p@0 !"""`>N^n~.>N^n~>N^n~ !"""`!@P`p 0@P`p!@P`p\XSB1ݬ        ,,,,,,,,,,,,,tLT$l x T ( dl,4dpH$d,t( !"0# $,$&D'()T**,,-.@./`/00123d4445 556 6\67H78 8`89L9:h:;<>?h?@H@A0ABXBCdCDLDEFG0GHIJ8KLMdN,NNOP`PQ4QR RlS,ST`U0WXZ[@[\<\]^(^_`pb,bddePefg`giLijDk klm@n,oLpqrsxttuD{`||}}~Hl@lH T H`@$\XDTXDP,8d\Hx tXpdxt@ Œ\ ļŸƔ0dʨˀ͔xϰЌ,ш҈ ӌ8,՜`lHش`Tڸ۔@lބ߬lp 4X$l( ` d      ,,8(Xx|T@| !"x##l$$'h(*L,T.L1t1230345t6T7$8 9H::;<<?X@ABCDEHFHGpHHIxJ JKLMN@P@QRSDT ULV`VWXX4XZZ[d[\|]^`aHabcXdetfhghi\jxnp@svwxyz{h|}}\lt4t88LT|| 4xLX(  @lt$xLL HĠT(  ʈˠϔldPՄxpڬTT ވL <H$l4 Pl ,xp,xt d 44,hP 4   4<,,408$8T |!h"$L%0&H'()*0*+,.$.012@234t5$69 ::; ;<(<=4?@ACDFH`HILLLLLLLLLLLLLLLLp7!!!@pp p]!2#!"&463!&54>3!2+@&&&&@+$(($F#+&4&&4&x+#+".4>32".4>32467632DhgZghDDhg-iWDhgZghDDhg-iW&@ (8 2N++NdN+';2N++NdN+'3 8!  #"'#"$&6$ rL46$܏ooo|W%r4L&V|oooܳ%=M%+".'&%&'3!26<.#!";2>767>7#!"&5463!2 %3@m00m@3%    @ :"7..7":6]^B@B^^BB^ $΄+0110+$ (   t1%%1+`B^^B@B^^"'.54632>324 #LoP$$Po>Z$_dC+I@$$@I+"#"'%#"&547&547%62V??V8<8y   b% I))9I  + % %#"'%#"&547&547%62q2ZZ2IzyV)??V8<8)>~>[   2 b% I))9I %#!"&54>3 72 &6 }XX}.GuLlLuG.>mmUmEEm> /?O_o54&+";2654&+";2654&+";264&#!"3!2654&+";2654&+";264&#!"3!2654&+";2654&+";2654&+";267#!"&5463!2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&^BB^^B@B^@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&B^^B@B^^/?#!"&5463!2#!"&5463!2#!"&5463!2#!"&5463!2L44LL44LL44LL44LL44LL44LL44LL44L4LL44LL4LL44LL4LL44LL4LL44LL /?O_o#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(8 (88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88/?O_#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88(@(88((88((88(@(88(@(88((88(@(88((8 (88((88(88((88(88((88(88((88(88((88(88((88y"/&4?62 62,PP&PP,jPn#$"' "/&47 &4?62 62 PP&P&&P&P&P&&P&P#+D++"&=#"&=46;546;232  #"'#"$&6$   @    @  rK56$܏ooo|W@    @   rjK&V|oooܳ0#!"&=463!2  #"'#"$&6$   @ rK56$܏ooo|W@  @ rjK&V|oooܳ)5 $&54762>54&'.7>"&5462zz+i *bkQнQkb* j*LhLLhLzzBm +*i JyhQQhyJ i*+ mJ4LL44LL/?O%+"&=46;2%+"&546;2%+"&546;2+"&546;2+"&546;2`r@@r@@n4&"2#"/+"&/&'#"'&'&547>7&/.=46?67&'&547>3267676;27632Ԗ #H  ,/ 1)  ~'H  (C  ,/ 1)  $H ԖԖm 6%2X  % l2 k r6 [21 ..9Q $ k2 k w3 [20/;Cg+"&546;2+"&546;2+"&546;2!3!2>!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@@`0 o`^BB^`5FN(@(NF5 @@@L%%Ju  @LSyuS@%44%f5#!!!"&5465 7#"' '&/&6762546;2&&??>  LL >  X   &&&AJ A J Wh##!"&5463!2!&'&!"&5!(8((88((`x c`(8`((88(@(8(D 9 8( ,#!"&=46;46;2.  6 $$ @(r^aa@@`(_^aa2NC5.+";26#!26'.#!"3!"547>3!";26/.#!2W  .@   @.$S   S$@   9I   I6>  >%=$4&"2$4&"2#!"&5463!2?!2"'&763!463!2!2&4&&4&&4&&48(@(88(ч::(8@6@*&&*4&&4&&4&&4& (88(@(8888)@)'&&@$0"'&76;46;232  >& $$ `  (r^aa` @`2(^aa$0++"&5#"&54762  >& $$ ^ ?  @(r^aa` ? (^aa #!.'!!!%#!"&547>3!2<<<_@`&& 5@5 @  &&>=(""='#"'&5476.  6 $$   ! (r^aaJ %%(_^aa3#!"'&?&#"3267672#"$&6$3276&@*hQQhwI mʬzzk)'@&('QнQh_   z8zoe$G!"$'"&5463!23267676;2#!"&4?&#"+"&=!2762@hk4&&&GaF * &@&ɆF * Ak4&nf&&&4BHrd@&&4rd  Moe&/?O_o+"&=46;25+"&=46;25+"&=46;2#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!26#!"&5463!2 @  @  @  @  @  @  @    @    @    @   ^B@B^^BB^`@  @ @  @ @  @ @  @ @  @ @  @ 3@  MB^^B@B^^!54&"#!"&546;54 32@Ԗ@8(@(88( p (8jj(88(@(88@7+"&5&5462#".#"#"&5476763232>32@@ @ @KjKך=}\I&:k~&26]S &H&  &H5KKut,4, & x:;*4*&K#+"&546;227654$ >3546;2+"&="&/&546$ <X@@Gv"DװD"vG@@X<4L41!Sk @ G< _bb_ 4.54632&4&&M4&UF &""""& F&M&&M&%/B/%G-Ik"'!"&5463!62#"&54>4.54632#"&54767>4&'&'&54632#"&547>7676'&'.'&54632&4&&M4&UF &""""& FU &'8JSSJ8'&  &'.${{$.'& &M&&M&%/B/%7;&'66'&;4[&$ [2[ $&[  #/37#5#5!#5!!!!!!!#5!#5!5##!35!!! #'+/37;?3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3???? ^>>~??????~??~??^??^^? ^??4&"2#"'.5463!2KjKKjv%'45%5&5L45&% jKKjK@5%%%%54L5&6'k54&"2#"'.5463!2#"&'654'.#32KjKKjv%'45%5&5L45&%%'4$.%%5&55&% jKKjK@5%%%%54L5&6'45%%%54'&55&6' yTdt#!"&'&74676&7>7>76&7>7>76&7>7>76&7>7>63!2#!"3!2676'3!26?6&#!"3!26?6&#!"g(sAeM ,*$/ !'& JP$G] x6,& `   h `   "9Hv@WkNC<.  &k& ( "$p" . #u&#  %!' pJvwEF#  @   @  2#"' #"'.546763!''!0#GG$/!''! 8""8  X! 8" "8  <)!!#"&=!4&"27+#!"&=#"&546;463!232(8&4&&4 8(@(8 qO@8((`(@Oq8(&4&&4&@` (88( Oq (8(`(q!)2"&42#!"&546;7>3!2  Ijjjj3e55e3gr`Ijjjj1GG1rP2327&7>7;"&#"4?2>54.'%3"&#"#ժ!9&WB03& K5!)V?@L' >R>e;&L::%P>vO 'h N_":- &+# : ' +a%3 4'.#"32>54.#"7>7><5'./6$3232#"&#"+JBx)EB_I:I*CRzb3:dtB2P$ $5.3bZF|\8!-T>5Fu\,,jn OrB,7676'5.'732>7"#"&#&#"OA zj=N!}:0e%  y + tD3~U#B4 # g  '2 %/!: T bRU,7}%2"/&6;#"&?62+326323!2>?23&'.'.#"&"$#"#&=>764=464.'&#"&'!~:~!PP!~:~!P6 ,,$$% *'  c2N  ($"LA23Yl !x!*%%%% pP,T NE Q7^oH!+( 3  *Ueeu  wga32632$?23&'.5&'&#"&"5$#"#&=>7>4&54&54>.'&#"&'2#".465!#".'&47>32!4&4>Q6 ,,Faw!*' =~Pl*  ($"LA23Yl  )!* <7@@7<  <7@@7<  pP,T MF Q747ƢHoH!+( 3  tJHQ6  wh',686,'$##$',686,'$##$/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?O_o%+"&=46;2+"&=46;2+"&=46;2#!"&=463!2+"&=46;2#!"&=463!2#!"&=463!2#!"&=463!2        @     @   @   @   s  s    s    s  s  /?O#"'&47632#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2     @     @   @  @          s  s  s  /?O#"&54632 #!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2`      @     @   @  @     @   s  s  s  #"'#!"&5463!2632' mw@www '*wwww."&462!5 !"3!2654&#!"&5463!2pppp@  @ ^BB^^B@B^ppp@@  @    @B^^BB^^k%!7'34#"3276' !7632k[[v  6`%`$65&%[[k `5%&&'4&"2"&'&54 Ԗ!?H?!,,ԖԖmF!&&!Fm,%" $$ ^aa`@^aa-4'.'&"26% 547>7>2"KjKXQqYn 243nYqQ$!+!77!+!$5KK,ԑ ]""]ً 9>H7'3&7#!"&5463!2'&#!"3!26=4?6 !762xtt`  ^Qwww@?6 1B^^B@B^ @(` `\\\P`tt8`  ^Ͼww@w 1^BB^^B~ @` \ \P+Z#!"&5463!12+"3!26=47676#"'&=# #"'.54>;547632www M8 pB^^B@B^ 'sw- 9*##;Noj' #ww@w "^BB^^B  *  "g`81T`PSA:'*4/D#!"&5463!2#"'&#!"3!26=4?632"'&4?62 62www@?6 1 B^^B@B^ @ BRnBBn^ww@w 1 ^BB^^B @ BnnBC"&=!32"'&46;!"'&4762!#"&4762+!54624&&4&&44&&4&&44&&44&&4&&44&&6'&'+"&546;267: &&&& s @  Z&&&&Z +6'&''&'+"&546;267667: : &&&&  s @  :  Z&&&&Z  : z6'&''&47667S: : s @  : 4 : | &546h!!0a   $#!"&5463!2#!"&5463!2&&&&&&&&@&&&&&&&&#!"&5463!2&&&&@&&&&&54646&5- : s  :  :4:  +&5464646;2+"&5&5-  &&&& : s  :  : &&&& :  &54646;2+"&5- &&&& s  : &&&&  62#!"&!"&5463!24 @ &&&&-:&&&& "'&476244444Zf "/&47 &4?62S44444#/54&#!4&+"!"3!;265!26 $$ &&&&&&&&@^aa@&&&&&&&&+^aa54&#!"3!26 $$ &&&&@^aa@&&&&+^aa+74/7654/&#"'&#"32?32?6 $$ }ZZZZ^aaZZZZ^aa#4/&"'&"327> $$ [4h4[j^aa"ZiZJ^aa:F%54&+";264.#"32767632;265467>$ $$ oW  5!"40K(0?i+! ":^aaXRd D4!&.uC$=1/J=^aa.:%54&+4&#!";#"3!2654&+";26 $$ ```^aa^aa/_#"&=46;.'+"&=32+546;2>++"&=.'#"&=46;>7546;232m&&m l&&l m&&m l&&ls&%&&%&&%&&%&&&l m&&m l&&l m&&m ,&%&&%&&%&&%&#/;"/"/&4?'&4?627626.  6 $$ I     ͒(r^aaɒ    (_^aa , "'&4?6262.  6 $$ Z4f44fz(r^aaZ&4ff4(_^aa "4'32>&#" $&6$  WoɒV󇥔 zzz8YW˼[?zz:zz@5K #!#"'&547632!2A4@%&&K%54'u%%&54&K&&4A5K$l$L%%%54'&&J&j&K5K #"/&47!"&=463!&4?632%u'43'K&&%@4AA4&&K&45&%@6%u%%K&j&%K55K&$l$K&&u#5K@!#"'+"&5"/&547632K%K&56$K55K$l$K&&#76%%53'K&&%@4AA4&&K&45&%%u'5K"#"'&54?63246;2632K%u'45%u&&J'45%&L44L&%54'K%5%t%%$65&K%%4LL4@&%%K',"&5#"#"'.'547!34624&bqb>#  5&44& 6Uue7D#  "dž&/#!"&546262"/"/&47'&463!2 &@&&4L  r&4  r L&& 4&&&L rI@& r  L4&& s/"/"/&47'&463!2#!"&546262&4  r L&& &@&&4L  r@@& r  L4&& 4&&&L r##!+"&5!"&=463!46;2!28(`8((8`(88(8((8(8 (8`(88(8((8(88(`8#!"&=463!28(@(88((8 (88((88z5'%+"&5&/&67-.?>46;2%6.@g.L44L.g@. .@g. L44L .g@.g.n.4LL43.n.gg.n.34LL4͙.n.g -  $54&+";264'&+";26/a^    ^aa fm  @ J%55!;263'&#"$4&#"32+#!"&5#"&5463!"&46327632#!2$$8~+(888(+}(`8((8`]]k==k]]8,8e8P88P8`(88(@MMN4&#"327>76$32#"'.#"#"&'.54>54&'&54>7>7>32&z&^&./+>+)>J> Wm7' '"''? &4&c&^|h_bml/J@L@#* #M6:D 35sҟw$ '% ' \t3#!"&=463!2'.54>54''  @ 1O``O1CZZ71O``O1BZZ7@  @ N]SHH[3`)TtbN]SHH[3^)Tt!1&' 547 $4&#"2654632 '&476 ==嘅}(zVl''ٌ@uhyyhu9(}VzD##D# =CU%7.5474&#"2654632%#"'&547.'&476!27632#76$7&'7+NWb=嘧}(zVj\i1  z,X Y[6 $!%'FuJiys?_9ɍ?kyhun(}Vz YF  KA؉La  02-F"@Qsp@_!3%54&+";264'&+";26#!"&'&7>2    #%;"";%#`,@L 5 `   `  L`4LH` `   a 5 L@ #37;?Os!!!!%!!!!%!!!!!!!!%!!4&+";26!!%!!!!74&+";26%#!"&546;546;2!546;232 `@ `@ @@ @ @  @  @  @  @ L44LL4^B@B^^B@B^4L  @@@@    @@   @@    M4LL44L`B^^B``B^^B`L7q.+"&=46;2#"&=".'673!54632#"&=!"+"&=46;2>767>3!546327>7&54>$32dFK1A  0) L.٫C58.H(Ye#3C $=463!22>=463!2#!"&5463!2#!"&5463!2H&&/7#"&463!2!2LhLLhLhLLh! &&&&& &4hLLhLLhLLhL%z< 0&4&& )17&4& &&#!"&5463!2!2\@\\@\\@\\\\ W*#!"&547>3!2!"4&5463!2!2W+B"5P+B@"5^=\@\ \H#t3G#3G:_Ht\\ @+32"'&46;#"&4762&&4&&44&&44&&4@"&=!"'&4762!54624&&44&&44&&4&& !!!3!!0@67&#".'&'#"'#"'32>54'6#!"&5463!28ADAE=\W{O[/5dI kDtpČe1?*w@www (M& B{Wta28r=Ku?RZ^GwT -@www$2+37#546375&#"#3!"&5463ww/Dz?swww@wS88 ww#'.>4&#"26546326"&462!5!&  !5!!=!!%#!"&5463!2B^8(Ԗ>@|K55KK55K^B(8ԖԖ€>v5KK55KKHG4&"&#"2654'32#".'#"'#"&54$327.54632@pp)*Pppp)*Pb '"+`N*(a;2̓c`." b PTY9ppP*)pppP*)b ".`(*Nͣ2ͣ`+"' b MRZB4&"24&"264&"26#"/+"&/&'#"'&547>7&/.=46?67&'&547>3267676;27632#"&'"'#"'&547&'&=4767&547>32626?2#"&'"'#"'&547&'&=4767&547>32626?2ԖLhLKjKLhLKjK "8w s%(  ")v  >  "8x s"+  ")v  <  3zLLz3 3>8L3)x3 3zLLz3 3>8L3)x3 ԖԖ4LL45KK54LL45KK #)0C wZ l/ Y N,& #)0C vZl. Y L0"qG^^Gqq$ ]G)FqqG^^Gqq$ ]G)Fq%O#"'#"&'&4>7>7.546$ '&'&'# '32$7>54'VZ|$2 $ |E~E<| $ 2$|ZV:(t}X(  &%(Hw쉉xH(%& (XZT\MKG<m$4&"24&#!4654&#+32;254'>4'654&'>7+"&'&#!"&5463!6767>763232&4&&4N2`@`%)7&,$)' %/0Ӄy#5 +1 &<$]`{t5KK5$e:1&+'3TF0h4&&4&3M:;b^v+D2 5#$IIJ 2E=\$YJ!$MCeM-+(K55KK5y*%Au]c>q4&"24&'>54'654&'654&+"+322654&5!267+#"'.'&'&'!"&5463!27>;2&4&&4+ 5#bW0/% ')$,&7)%`@``2Nh0##T3'"( 0;e$5KK5 tip<& 1&4&&4&#\=E2&%IURI$#5 2D+v^b;:M2gc]vDEA%!bSV2MK55K(,,MeCM$!I@#"&547&547%6@?V8 b% I)94.""'." 67"'.54632>32+C`\hxeH>Hexh\`C+ED4 #LoP$$Po>Q|I.3MCCM3.I|Q/Z$_dC+I@$$@I+ (@%#!"&5463!2#!"3!:"&5!"&5463!462 ww@  B^^B  4&@&&&4 `  ww   ^B@B^ 24& && &%573#7.";2634&#"35#347>32#!"&5463!2FtIG9;HIxI<,tԩw@wwwz4DD43EEueB&#1s@www .4&"26#!+"'!"&5463"&463!2#2&S3 Ll&c4LL44LL4c@& &{LhLLhL'?#!"&5463!2#!"3!26546;2"/"/&47'&463!2www@B^^B@B^@&4t  r &&`ww@w@^BB^^B@R&t r  4&&@"&5!"&5463!462 #!"&54&>3!2654&#!*.54&>3!24&@&&&4 sw  @B^^B  @w4& && &3@w   ^BB^    I&5!%5!>732#!"&=4632654&'&'.=463!5463!2!2JJSq*5&=CKuuKC=&5*q͍S8( ^B@B^ (8`N`Ѣ΀GtO6)"M36J[E@@E[J63M")6OtG(8`B^^B`8 ',26'&'&76'6'&6&'&6'&4#"7&64 654'.'&'.63226767.547&7662>76#!"&5463!2  /[  . =XĚ4,+"  * +, 1JH'5G:: #L5+@=&#w@wwwP.1GE,ԧ4 4+ ; /5cFO:>JJ>:O9W5$@(b 4 @www'?$4&"2$4&"2#!"&5463!3!267!2#!#!"&5!"'&762&4&&4&&4&&48(@(88(c==c(8*&&*6&4&&4&&4&&4& (88(@(88HH88`(@&&('@1c4&'.54654'&#"#"&#"32632327>7#"&#"#"&54654&54>76763232632   N<;+gC8A`1a99gw|98aIe$IVNz<:LQJ  ,-[% 061I()W,$-7,oIX()oζA;=N0 eTZ  (O#".'&'&'&'.54767>3232>32 e^\4?P bMO0# 382W# & 9C9 Lĉ" 82<*9FF(W283 #0OMb P?4\^e FF9*<28 "L 9C9 & #!"3!2654&#!"&5463!2`B^^B@B^^ީwww@w^BB^^B@B^ww@w#!72#"' #"'.546763YY !''!0#GG$/!''!&UUjZ 8""8  X! 8" "8 GW4.'.#"#".'.'.54>54.'.#"32676#!"&5463!2 1.- +$)  c8 )1)  05.D <90)$9w@wwwW  )1) 7c  )$+ -.1 9$)0< D.59@www,T1# '327.'327.=.547&54632676TC_LҬ#+i!+*pDNBN,y[`m`%i]hbEm}a u&,SXK &$f9s? _#"!#!#!54632V<%'ЭHH (ںT\dksz &54654'>54'6'&&"."&'./"?'&546'&6'&6'&6'&6'&74"727&6/a49[aA)O%-j'&]]5r-%O)@a[9' 0BA; + >HCU  #  $  2  AC: oM=a-6OUwW[q ( - q[WwUP6$C +) (  8&/ &eMa  & $      %+"&54&"32#!"&5463!54 &@&Ԗ`(88(@(88(r&&jj8((88(@(8#'+2#!"&5463"!54&#265!375!35!B^^BB^^B   `^B@B^^BB^  ` !="&462+"&'&'.=476;+"&'&$'.=476; pppp$!$qr % }#ߺppp!E$ rqܢ# % ֻ!)?"&462"&4624&#!"3!26!.#!"#!"&547>3!2/B//B//B//B @   2^B@B^\77\aB//B//B//B/@    ~B^^B@2^5BB52.42##%&'.67#"&=463! 25KK5L4_u:B&1/&.- zB^^B4LvyKjK4L[!^k'!A3;):2*547&5462;U gIv0ZZ0L4@Ԗ@4L2RX='8P8'=XR U;Ig0,3lb??bl34LjjL4*\(88(\}I/#"/'&/'&?'&'&?'&76?'&7676767676` (5 )0 ) *) 0) 5(  (5 )0 )))) 0) 5( *) 0) 5(  )5 )0 )**) 0) 5)  )5 )0 )*5h$4&"24&#!4>54&#"+323254'>4'654&'!267+#"'&#!"&5463!2>767>32!2&4&&4N2$YGB (HGEG HQ#5K4Li!<;5KK5 A# ("/?&}vh4&&4&3M95S+C=,@QQ9@@IJ 2E=L5i>9eME;K55K J7R>@#zD<5=q%3#".'&'&'&'.#"!"3!32>$4&"2#!"#"&?&547&'#"&5463!&546323!2` #A<(H(GY$2NL4K5#aWTƾh&4&&4K5;=!ihv}&?/"( #A  5K2*! Q@.'!&=C+S59M34L=E2 JI UR@@&4&&4&5K;ELf9>igR7J K5h4&"24#"."&#"4&#"".#"!54>7#!"&54.'&'.5463246326326&4&&4IJ 2E=L43M95S+C=,@QQ9@@E;K55K J7R>@#zD9eMZ4&&4&<#5K4LN2$YGB (HGEG HV;5KK5 A# ("/?&}vhi!<4<p4.=!32>332653272673264&"2/#"'#"&5#"&54>767>5463!2@@2*! Q@.'!&=C+S59M34L.9E2 JI UR&4&&4&Lf6Aig6Jy#@>R7J K55K;E@TƾH #A<(H(GY$2NL4K#5#a=4&&4&D=ihv}&?/"( #A  5KK5;+54&#!764/&"2?64/!26 $$ & [6[[j6[&^aa@&4[[6[[6&+^aa+4/&"!"3!277$ $$ [6[ &&[6j[ ^aae6[j[6&&4[j[^aa+4''&"2?;2652?$ $$ [6[[6&&4[^aaf6j[[6[ &&[^aa+4/&"4&+"'&"2? $$ [6&&4[j[6[j^aad6[&& [6[[j^aa   $2>767676&67>?&'4&'.'.'."#&6'&6&'3.'.&'&'&&'&6'&>567>#7>7636''&'&&'.'"6&'6'..'/"&'&76.'7>767&.'"76.7"7"#76'&'.'2#22676767765'4.6326&'.'&'"'>7>&&'.54>'>7>67&'&#674&7767>&/45'.67>76'27".#6'>776'>7647>?6#76'6&'676'&67.'&'6.'.#&'.&6'&.5/a^D&"      4   $!   #          .0"Y +  !       $     "  +       Α      ^aa                        P   ' -( # * $  "  !     * !   (         $      2 ~/$4&"2 #"/&547#"32>32&4&&4V%54'j&&'/덹:,{ &4&&4&V%%l$65&b'Cr! " k[G +;%!5!!5!!5!#!"&5463!2#!"&5463!2#!"&5463!2&&&&&&&&&&&&@&&&&&&&&&&&&{#"'&5&763!2{' **)*)'/!5!#!"&5!3!26=#!5!463!5463!2!2^B@B^&@&`^B`8(@(8`B^ B^^B&&B^(88(^G 76#!"'&? #!"&5476 #"'&5463!2 '&763!2#"'c)'&@**@&('c (&*cc*&' *@&('c'(&*cc*&('c'(&@*19AS[#"&532327#!"&54>322>32"&462 &6 +&'654'32>32"&462QgRp|Kx;CByy 6Fe= BPPB =eF6 ԖV>!pRgQBC;xK|Ԗ{QNa*+%xx5eud_C(+5++5+(C_due2ԖԖ>NQ{u%+*jԖԖp!Ci4/&#"#".'32?64/&#"327.546326#"/&547'#"/&4?632632(* 8( !)(A(')* 8( !USxySSXXVzxTTUSxySSXXVzxT@(  (8 *(('( (8 SSUSx{VXXTTSSUSx{VXXT#!"5467&5432632t,Ԟ;F`j)6,>jK?s !%#!"&7#"&463!2+!'5#8EjjE8@&&&&@XYY&4&&4&qDS%q%N\jx2"&4#"'#"'&7>76326?'&'#"'.'&676326326&'&#"32>'&#"3254?''74&&4&l NnbSVZ bRSD zz DSRb)+USbn \.2Q\dJ'.2Q\dJ.Q2.'Jd\Q2.'Jd`!O` ` &4&&4r$#@B10M5TNT{L5T II T5L;l'OT4M01B@#$*3;$*3;;3*$;3*$: $/ @@Qq`@"%3<2#!"&5!"&5467>3!263! !!#!!46!#!(88(@(8(8(`((8D<++<8(`(8(`8(@(88( 8((`(8((<`(8(``(8||?%#"'&54632#"'&#"32654'&#"#"'&54632|udqܟs] = OfjL?R@T?"& > f?rRX=Edudsq = _MjiL?T@R?E& f > =XRr?b!1E)!34&'.##!"&5#3463!24&+";26#!"&5463!2 08((88(@(8  8((88((`(1  `(88((88(@  `(88(@(8(`#!"&5463!2w@www`@www/%#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&&&&&@'7G$"&462"&462#!"&=463!2"&462#!"&=463!2#!"&=463!2ppppppp @   ppp @    @   Рpppppp  ppp    <L\l|#"'732654'>75"##5!!&54>54&#"'>3235#!"&=463!2!5346=#'73#!"&=463!2#!"&=463!2}mQjB919+i1$AjM_3</BB/.#U_:IdDRE @  k*Gj @   @   TP\BX-@8 C)5Xs J@$3T4+,:;39SG2S.7<  vcc)) %Ll}    5e2#!"&=463%&'&5476!2/&'&#"!#"/&'&=4'&?5732767654'&@02uBo  T25XzrDCBBEh:%)0%HPIP{rQ9f#-+>;I@KM-/Q"@@@#-bZ $&P{<8[;:XICC>.'5oe80#.0(  l0&%,"J&9%$<=DTIcs&/6323276727#"327676767654./&'&'737#"'&'&'&54'&54&#!"3!260% <4"VRt8<@< -#=XYhW8+0$"+dTLx-'I&JKkmuw<=V@!X@ v '|N;!/!$8:IObV;C#V  &   ( mL.A:9 !./KLwPM$@@ /?O_o%54&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!26#!"&5463!2@@@@@@@@@^BB^^B@B^NB^^B@B^^#+3 '$"/&4762%/?/?/?/?%k*66bbbb|<<<bbbbbbbb%k66Ƒbbb<<<<^bbbbbb@M$4&"2!#"4&"2&#"&5!"&5#".54634&>?>;5463!2LhLLh LhLLhL! 'ԖԖ@' !&  ?&&LhLLhL hLLhL jjjj &@6/" &&J#"'676732>54.#"7>76'&54632#"&7>54&#"&54$ ok; -j=yhwi[+PM 3ѩk=J%62>VcaaQ^ ]G"'9r~:`}Ch 0=Z٤W=#uY2BrUI1^Fk[|aL2#!67673254.#"67676'&54632#"&7>54&#"#"&5463ww+U ,iXբW<"uW1AqSH1bdww'74'!3#"&46327&#"326%35#5##33#!"&5463!20U6cc\=hlࠥYmmnnnnw@wwww&46#Ȏ;edwnnnnn@www ]#/#"$&6$3 &#"32>7!5!%##5#5353Еttu{zz{SZC` cot*tq||.EXN#?? ,<!5##673#$".4>2"&5!#2!46#!"&5463!2rM* *M~~M**M~~M*jjj&&&&`P%挐|NN||NN|*jjjj@&&&&@ "'&463!2@4@&Z4@4&@ #!"&4762&&4Z4&&4@@ "'&4762&4@4&@&4&@ "&5462@@4&&44@&&@ 3!!%!!26#!"&5463!2`m` ^BB^^B@B^  `@B^^BB^^@ "'&463!2#!"&4762@4@&&&&44@4&Z4&&4@ "'&463!2@4@&4@4&@ #!"&4762&&4Z4&&4@:#!"&5;2>76%6+".'&$'.5463!2^B@B^,9j9Gv33vG9H9+bI\ A+=66=+A [">nSMA_:B^^B1&c*/11/*{'VO3@/$$/@*?Nh^l+!+"&5462!4&#"!/!#>32]_gTRdgdQV?U I*Gg?!2IbbIJaaiwE3300 084#"$'&6?6332>4.#"#!"&54766$32z䜬m IwhQQhbF*@&('kz   _hQнQGB'(&*eoz(q!#"'&547"'#"'&54>7632&4762.547>32#".'632%k'45%&+~(  (h  &  \(  (  &  ~+54'k%5%l%%l$65+~  &  (  (\  &  h(  (~+%'!)19K4&"24&"26.676&$4&"24&"24&"2#!"'&46$ KjKKj KjKKje2.e<^P,bKjKKjKjKKj KjKKj##LlLKjKKjK jKKjK~-M7>7&54$ LhяW.{+9E=cQdFK1A  0) pJ2`[Q?l&٫C58.H(Y':d 6?32$64&$ #"'#"&'&4>7>7.546'&'&'# '32$7>54'Yj`a#",5NK ~EVZ|$2 $ |: $ 2$|ZV:(t}hfR88T h̲X(  &%(Hw(%& (XZT\MKG{x|!#"'.7#"'&7>3!2%632u  j H{(e 9 1bU#!"&546;5!32#!"&546;5!32#!"&546;5463!5#"&5463!2+!2328((88(``(88((88(``(88((88(`L4`(88(@(88(`4L`(8 (88(@(88((88(@(88((88(@(84L8(@(88((8L48OY"&546226562#"'.#"#"'.'."#"'.'.#"#"&5476$32&"5462И&4&NdN!>! 1X:Dx+  +ww+  +xD:X1 -U !*,*&4&hh&&2NN2D &  ..J< $$ 767#"&'"&547&547&547.'&54>2l4  2cKEooED ) ) Dg-;</- ?.P^P.? -/<;-gYY  .2 L4H|O--O|HeO , , Oeq1Ls26%%4.2,44,2.4%%62sL1qcqAAq4#!#"'&547632!2#"&=!"&=463!54632  @  `     ` ?`   @  @  !    54&+4&+"#"276#!"5467&5432632   `  _ v,Ԝ;G_j)``    _ ԟ7 ,>jL>54'&";;265326#!"5467&5432632    v,Ԝ;G_j) `   `7 ,>jL>X`$"&462#!"&54>72654&'547 7"2654'54622654'54&'46.' &6 &4&&4&yy %:hD:FppG9Fj 8P8 LhL 8P8 E; Dh:% >4&&4&}yyD~s[4Dd=PppP=d>hh>@jY*(88(*Y4LL4Y*(88(*YDw" A4*[s~>M4&"27 $=.54632>32#"' 65#"&4632632 65.5462&4&&4G9& <#5KK5!!5KK5#< &ܤ9Gpp&4&&4&@>buោؐ&$KjKnjjKjK$&jjb>Ppp %!5!#"&5463!!35463!2+32@\\8(@(8\@@\\@\(88(\@ 34#"&54"3#!"&5!"&5>547&5462;U gI@L4@Ԗ@4L2RX='8P8'=XR U;Ig04LjjL4*\(88(\@"4&+32!#!"&+#!"&5463!2pP@@Pjj@@\@\&0pj \\&-B+"&5.5462265462265462+"&5#"&5463!2G9L44L9G&4&&4&&4&&4&&4&L44L &=d4LL4 d=&&`&&&&`&&&&4LL4  &#3CS#!"&5463!2!&'&!"&5!463!2#!"&52#!"&=4632#!"&=463(8((88((`x c`(8@@@`((88(@(8(D 9 8(`@@@@@/?O_o-=%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!!5463!2#!"&5463!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ &&&&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @   `&&&& /?O_o%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!#!"&=!!5463!24&+"#54&+";26=3;26%#!"&5463!463!2!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ 8(@(8 @  @  @  @  @ &&&@8((8@&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @  (88(  @  ``   `` -&&& (88(&@<c$4&"2!#4&"254&+54&+"#";;26=326+"&5!"&5#"&46346?>;463!2KjKKjKjKKj&ԖԖ&&@&&KjKKjK jKKjK .&jjjj&4&@@&&#'1?I54&+54&+"#";;26=326!5!#"&5463!!35463!2+32 \\8(@(8\ \\@\(88(\: #32+53##'53535'575#5#5733#5;2+3@E&&`@@` `@@`&&E%@`@ @ @      @ 0 @!3!57#"&5'7!7!K5@   @5K@@@ #3%4&+"!4&+";265!;26#!"&5463!2&&&&&&&&w@www&&@&&&&@&&@www#354&#!4&+"!"3!;265!26#!"&5463!2&&&&&@&&@&w@www@&@&&&&&&@&:@www-M3)$"'&4762 "'&4762 s 2  .   2 w 2  .   2 w 2    2  ww  2    2  ww M3)"/&47 &4?62"/&47 &4?62S .  2 w 2   .  2 w 2  M . 2    2 .  . 2    2 .M3S)$"' "/&4762"' "/&47623 2  ww  2    2  ww  2    2 w 2   .v 2 w 2   .M3s)"'&4?62 62"'&4?62 623 .  . 2    2 .  . 2    2 .   2 w 2v .   2 w 2-Ms3 "'&4762s w 2  .   2 ww  2    2 MS3"/&47 &4?62S .  2 w 2  M . 2    2 .M 3S"' "/&47623 2  ww  2   m 2 w 2   .M-3s"'&4?62 623 .  . 2    2- .   2 w 2/4&#!"3!26#!#!"&54>5!"&5463!2  @ ^B && B^^B@B^ @  MB^%Q= &&& $$ (r^aa(^aa!C#!"&54>;2+";2#!"&54>;2+";2pPPpQh@&&@j8(PppPPpQh@&&@j8(Pp@PppPhQ&&j (8pPPppPhQ&&j (8p!C+"&=46;26=4&+"&5463!2+"&=46;26=4&+"&5463!2Qh@&&@j8(PppPPpQh@&&@j8(PppPPp@hQ&&j (8pPPppP@hQ&&j (8pPPpp@@ #+3;G$#"&5462"&462"&462#"&462"&462"&462"&462#"&54632K54LKj=KjKKjKjKKjL45KKjK<^^^KjKKjppp\]]\jKL45KjKKjKujKKjK4LKjKK^^^jKKjKpppr]]\  $$ ^aaQ^aa,#"&5465654.+"'&47623   #>bqb&44&ɢ5"  #D7euU6 &4&m 1X".4>2".4>24&#""'&#";2>#".'&547&5472632>3=T==T==T==T=v)GG+v@bRRb@=&\Nj!>3lkik3hPTDDTPTDDTPTDDTPTDD|x xXK--K|Mp<# )>dA{RXtfOT# RNftWQ,%4&#!"&=4&#!"3!26#!"&5463!2!28(@(88((88((8\@\\@\\(88(@(88(@(88@\\\\ u'E4#!"3!2676%!54&#!"&=4&#!">#!"&5463!2!2325([5@(\&8((88((8,9.+C\\@\ \6Z]#+#,k(88(@(88(;5E>:5E\\\ \1. $4@"&'&676267>"&462"&462.  > $$ n%%/02 KjKKjKKjKKjKfff^aayy/PccP/jKKjKKjKKjKffff@^aa$4@&'."'.7>2"&462"&462.  > $$ n20/%7KjKKjKKjKKjKfff^aa3/PccP/y jKKjKKjKKjKffff@^aa +7#!"&463!2"&462"&462.  > $$ &&&&KjKKjKKjKKjKfff^aa4&&4&jKKjKKjKKjKffff@^aa#+3C54&+54&+"#";;26=3264&"24&"2$#"'##"3!2@@KjKKjKKjKKjKܒ,gjKKjKKjKKjKXԀ,, #/;GS_kw+"=4;27+"=4;2'+"=4;2#!"=43!2%+"=4;2'+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;54;2!#!"&5463!2`````````````````````p`K55KK55Kp`````````````````````````5KK55KK@*V#"'.#"63232+"&5.5462#"/.#"#"'&547>32327676R?d^7ac77,9xm#@#KjK# ڗXF@Fp:f_ #WIpp&3z h[ 17q%q#::#5KKu't#!X: %#+=&>7p @ *2Fr56565'5&'. #"32325#"'+"&5.5462#"/.#"#"'&547>32327676@ͳ8 2.,#,fk*1x-!#@#KjK# ڗXF@Fp:f_ #WIpp&3z e`vo8t-  :5 [*#::#5KKu't#!X: %#+=&>7p  3$ "/&47 &4?62#!"&=463!2I.  2 w 2   -@). 2    2 . -@@-S$9%"'&4762  /.7> "/&47 &4?62i2  .   2 w E > u > .  2 w 2   2    2  ww !   h. 2    2 . ;#"'&476#"'&7'.'#"'&476' )'s "+5+@ա' )'F*4*Er4M:}}8 GO *4*~ (-/' #"'%#"&7&67%632B;>< V??V --C4 <B=cB5 !% %!b 7I))9I7 #"'.5!".67632y( #  ##@,( )8! !++"&=!"&5#"&=46;546;2!76232-SSS  SS``  K$4&"24&"24&"27"&5467.546267>5.5462 8P88P88P88P8P88P4,CS,4pp4,,4pp4,6d7AL*',4ppP88P8P88P8HP88P8`4Y&+(>EY4PppP4Y4Y4PppP4Y%*54&#"#"/.7!2<'G,')7N;2]=A+#H  0PRH6^;<T%-S#:/*@Z}   >h.%#!"&=46;#"&=463!232#!"&=463!2&&&@@&&&@&&&&&&&&&&&&f&&&&b#!"&=463!2#!"&'&63!2&&&&''%@% &&&&&&&&k%J%#/&'#!53#5!36?!#!'&54>54&#"'6763235 Ź}4NZN4;)3.i%Sin1KXL7觧*  #& *@jC?.>!&1' \%Awc8^;:+54&#"'6763235 Ź}4NZN4;)3.i%PlnEcdJ觧*  #& *-@jC?.>!&1' \%AwcBiC:D'P%! #!"&'&6763!2P &:&? &:&?5"K,)""K,)h#".#""#"&54>54&#"#"'./"'"5327654.54632326732>32YO)I-D%n  "h.=T#)#lQTv%.%P_ % %_P%.%vUPl#)#T=@/#,-91P+R[Ql#)#|'' 59%D-I)OY[R+P19-,##,-91P+R[YO)I-D%95%_P%.%v'3!2#!"&463!5&=462 =462 &546 &&&&&4&r&4&@&4&&4&G݀&&&&f s CK&=462 #"'32=462!2#!"&463!5&'"/&4762%4632e*&4&i76`al&4&&&&&}n  R   R zfOego&&5`3&&&4&&4& D R   R zv"!676"'.5463!2@@w^Cct~5  5~tcC&&@?JV|RIIR|V&&#G!!%4&+";26%4&+";26%#!"&546;546;2!546;232@@@@L44LL4^B@B^^B@B^4L  N4LL44L`B^^B``B^^B`LL4&"2%#"'%.5!#!"&54675#"#"'.7>7&5462!467%632&4&&4  @ o&&}c ;pG=(  8Ai8^^.   &4&&4&` ` fs&& jo/;J!# 2 KAE*,B^^B! ` $ -4&"2#"/&7#"/&767%676$!28P88PQr @ U @ {`PTP88P8P`  @U @rQ!6'&+!!!!2Ѥ 8̙e;<*@8 !GGGQII %764' 64/&"2 $$ f3f4:4^aaf4334f:4:^aa %64'&" 2 $$ :4f3f4F^aa4f44f^aa 764'&"27 2 $$ f:4:f4334^aaf4:4f3^aa %64/&" &"2 $$ -f44f4^aa4f3f4:w^aa@7!!/#35%!'!%j/d jg2|855dc b @! !%!!7!FG)DH:&H dS)U4&"2#"/ $'#"'&5463!2#"&=46;5.546232+>7'&763!2&4&&4f ]wq4qw] `dC&&:FԖF:&&Cd`4&&4& ]] `d[}&&"uFjjFu"&&y}[d#2#!"&546;4 +"&54&" (88(@(88( r&@&Ԗ8((88(@(8@&&jj'3"&462&    .  > $$ Ԗ>aX,fff^aaԖԖa>TX,,~ffff@^aa/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88((88((88((88((88/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88(88((88(88((885E$4&"2%&'&;26%&.$'&;276#!"&5463!2KjKKj   f  \ w@wwwjKKjK"G   ܚ  f   @www   $64'&327/a^ ! ^aaJ@%% 65/ 64'&"2 "/64&"'&476227<ij6j6u%k%~8p8}%%%k%}8p8~%<@% %% !232"'&76;!"/&76  ($>( J &% $%64/&"'&"2#!"&5463!2ff4-4ff4fw@wwwf4f-f4@www/#5#5'&76 764/&"%#!"&5463!248` # \P\w@www4`8  #@  `\P\`@www)4&#!"273276#!"&5463!2& *f4 'w@www`&')4f*@www%5 64'&"3276'7>332#!"&5463!2`'(wƒa8! ,j.( &w@www`4`*'?_`ze<  bw4/*@www-.  6 $$  (r^aaO(_^aa -"'&763!24&#!"3!26#!"&5463!2yB(( @   w@www]#@##   @ @www -#!"'&7624&#!"3!26#!"&5463!2y((@B@u @   w@www###@  @ @www -'&54764&#!"3!26#!"&5463!2@@####@w@wwwB((@@www`%#"'#"&=46;&7#"&=46;632/.#"!2#!!2#!32>?6#  !"'?_  BCbCaf\ + ~2   }0$  q 90r p r%D p u?#!"&=46;#"&=46;54632'.#"!2#!!546;2D a__ g *`-Uh1    ߫}   $^L  4b+"&=.'&?676032654.'.5467546;2'.#"ǟ B{PDg q%%Q{%P46'-N/B).ĝ 9kC< Q 7>W*_x*%K./58`7E%_ ,-3  cVO2")#,)9;J) "!* #VD,'#/&>AX>++"''&=46;267!"&=463!&+"&=463!2+32Ԫ$   pU9ӑ @/*f o  VRfq f=SE!#"&5!"&=463!5!"&=46;&76;2>76;232#!!2#![       % )   "  Jg Uh BW&WX hU g 84&#!!2#!!2#!+"&=#"&=46;5#"&=46;463!2j@jo g|@~vv u n#467!!3'##467!++"'#+"&'#"&=46;'#"&=46;&76;2!6;2!6;232+32QKt# #FNQo!"դѧ !mY Zga~bm] [o"U+, @h h@@X hh @83H\#5"'#"&+73273&#&+5275363534."#22>4.#2>ut 3NtRP*Ho2 Lo@!R(Ozh=,GID2F 8PuE>.'%&TeQ,jm{+>R{?jJrL6V @`7>wmR1q uWei/rr :Vr" $7V4&#"326#"'&76;46;232!5346=#'73#"'&'73267##"&54632BX;4>ID2F +>R{8PuE>.'%&TeQ,jm{?jJrL6 @`rr :Vr3>wmR1q uWei@ \%4&#"326#!"&5463!2+".'&'.5467>767>7>7632!2&%%&&&& &7.' :@$LBWM{#&$h1D!  .I/! Nr&&%%&&&&V?, L=8=9%pEL+%%r@W!<%*',<2(<&L,"r@ \#"&546324&#!"3!26%#!#"'.'.'&'.'.546767>;&%%&&&& &i7qN !/I.  !D1h$&#{MWBL$@: '.&&%%&&&&=XNr%(M&<(2<,'*%<!W@r%%+LEp%9=8=L  +=\d%54#"327354"%###5#5#"'&53327#"'#3632#"'&=4762#3274645"=424'.'&!  7>76#'#3%54'&#"32763##"'&5#327#!"&5463!2BBPJNC'%! B? )#!CC $)  54f"@@ B+,A  A+&+A  ZK35N # J!1331CCC $)w@www2"33FYF~(-%"o4*)$(* (&;;&&9LA3  8334S,;;,WT+<<+T;(\g7x:&&::&&<r%-@www  +=[c}#"'632#542%35!33!3##"'&5#327%54'&#"5#353276%5##"=354'&#"32767654"2 '.'&547>76 3#&'&'3#"'&=47632%#5#"'&53327''RZZ:kid YYY .06 62+YY-06 R[!.'CD''EH$VVX::Y X;:Y fyd/%jG&DC&&CD&O[52. [$C-D..D^^* ly1%=^I86i077S 3 $EWgO%33%OO%35 EEFWt;PP;pt;PP;pqJgTFQ%33&PP%33%R 7>%3!+}{'+"&72'&76;2+"'66;2U &  ( P *'eJ."-dZ-n -'74'&+";27&+";276'56#!"&5463!2~} 7e  ۩w@www"  $Q #'!# @www I-22#!&$/.'.'.'=&7>?>369II ! ' $ !01$$%A' $ ! g  \7@)(7Y   \7@)(7Y @ '5557 ,VWQV.RW=?l%l`~0  !#!#%777 5! R!!XCCfff݀# `,{{{`Og4&"2 &6 $"&462$"&62>7>7>&46.'.'. '.'&7>76 Ԗ HR6L66LGHyU2L  L2UyHHyU2L  L2UyHn X6X  XX ԖԖH6L66L6 L2UyHHyU2L  L2UyHHyU2L n6X  XX  2#!"&54634&"2$4&"2ww@ww||||||w@www||||||| !3 37! $$ n6^55^h ^aaM1^aaP *Cg'.676.7>.'$7>&'.'&'? 7%&'.'.'>767$/u5'&$I7ob?K\[zH,1+.@\7':Yi4&67&'&676'.'>7646&' '7>6'&'&7>7#!"&5463!2PR$++'TJXj7-FC',,&C ."!$28 h /" +p^&+3$ i0(w@www+.i6=Bn \C1XR:#"'jj 8Q.cAj57!? "0D$4" P[ & 2@wwwD"%.5#5>7>;!!76PYhpN!HrD0M C0N#>8\xx: W]oW-X45/%'#.5!5!#"37>#!"&5463!2p>,;$4 5eD+WcEw@wwwK()F ,VhV^9tjA0/@www@#"'&76;46;23   &  ++"&5#"&7632  ^  c  & @#!'&5476!2 &  ^  b '&=!"&=463!546  &    q&8#"'&#"#"5476323276326767q'T1[VA=QQ3qqHih"-bfGw^44O#A?66%CKJA}} !"䒐""A$@C3^q|z=KK?6 lk)  %!%!VVuuu^-m5w}n~7M[264&"264&"2"&546+"&=##"&5'#"&5!467'&766276#"&54632    *<;V<<O@-K<&4'>&4.'.'.'.'.'&6&'.'.6767645.'#.'6&'&7676"&'&627>76'&7>'&'&'&'&766'.7>7676>76&6763>6&'&232.'.6'4."7674.'&#>7626'.'&#"'.'.'&676.67>7>5'&7>.'&'&'&7>7>767&'&67636'.'&67>7>.'.67 \  U7  J#!W! '  " ';%  k )"    '   /7*   I ,6 *&"!   O6* O $.( *.'  .x,  $CN      * 6   7%&&_f& ",VL,G$3@@$+ "  V5 3"  ""#dA++ y0D- %&n 4P'A5j$9E#"c7Y 6" & 8Z(;=I50 ' !!e  R   "+0n?t(-z.'< >R$A"24B@( ~ 9B9, *$        < > ?0D9f?Ae  .(;1.D 4H&.Ct iY% *  7      J  <    W 0%$  ""I! *  D  ,4A'4J" .0f6D4pZ{+*D_wqi;W1G("% %T7F}AG!1#%  JG 3  '.2>Vb%&#'32&'!>?>'&' &>"6&#">&'>26 $$ *b6~#= XP2{&%gx| .W)oOLOsEzG< CK}E $MFD<5+ z^aa$MWM 1>]|YY^D եA<KmE6<" @9I5*^aa>^4./.543232654.#"#".#"32>#"'#"$&547&54632632':XM1h*+D($,/9p`DoC&JV;267676&#!"&=463!267 #!"'&5463!26%8#! &&Z"M>2! ^I 7LRx_@>MN""`=&&*%I},  L7_jj9/%4&#!"3!264&#!"3!26#!"&5463!2  &&&&&&&&19#"'#++"&5#"&5475##"&54763!2"&4628(3- &B..B& -3(8IggI`(8+Ue&.BB.&+8(kk`%-"&5#"&5#"&5#"&5463!2"&4628P8@B\B@B\B@8P8pPPp@`(88(`p.BB.0.BB.(88(Pppͺ!%>&'&#"'.$ $$ ^/(V=$<;$=V).X^aaJ`"(("`J^aa,I4."2>%'%"/'&5%&'&?'&767%476762%6[՛[[՛o ܴ   $ $ " $ $  ՛[[՛[[5` ^ ^ 2` `2 ^ ^ ` 1%#"$54732$%#"$&546$76327668ʴhf킐&^zs,!V[vn) 6<ׂf{z}))Ns3(@ +4&#!"3!2#!"&5463!2#!"&5463!2@&&&f&&&&@&&&&4&&4&@&&&&&&&& `BH+"/##"./#"'.?&5#"&46;'&462!76232!46 `&C6@Bb03eI;:&&&4L4&F Z4&w4) '' 5r&4&&4&&4}G#&/.#./.'&4?63%27>'./&'&7676>767>?>%6})(."2*&@P9A #sGq] #lh<* 46+(  < 5R5"*>%"/ +[>hy  K !/Ui%6&'&676&'&6'.7>%.$76$% $.5476$6?62'.76&&'&676%.76&'..676#"NDQt -okQ//jo_  %&JՂYJA-.-- 9\DtT+X?*<UW3' 26$>>W0 {"F!"E    ^f`$"_]\<`F`FDh>CwlsJ@ ;=?s  :i_^{8+?` ) O`s2RDE58/Kr #"'>7&4$&5mī"#̵$5$"^^W=acE*czk./"&4636$7.'>67.'>65.67>&/>z X^hc^O<q+f$H^XbVS!rȇr?5GD_RV@-FbV=3! G84&3Im<$/6X_D'=NUTL;2KPwtPt=  &ռ ,J~S/#NL,8JsF);??1zIEJpqDIPZXSF6\?5:NR=;.&1 +!"&=!!%!5463!2sQ9Qs***sQNQsBUw wUBFHCCTww%1#"&=!"&=463!54632.  6 $$     ` ?(r^aa    (_^aa%1#!#"'&47632!2.  6 $$   @  ` (r^aa  ?  @  (_^aa/#"'&476324&#!"3!26#!"&5463!2&@& @   w@www& @B@ &  @ @www"&462  >& $$ Ԗ*(r^aaԖԖ (^aa]6#"$54732>%#"'!"&'&7>32'!!!2f:лѪz~u: ((%`V6B^hD%i(]̳ޛ *>6߅r#! 3?^BEa߀#9#36'&632#"'&'&63232#!"&5463!2 Q,&U #+' ;il4L 92<D`w@www`9ܩ6ɽ ]`C477&@wwwD+"&5#"'&=4?5#"'&=4?546;2%6%66546;2  wwwwcB G]B Gty]ty #3C#!+"&5!"&=463!46;2!24&#!"3!26#!"&5463!2@`@`^BB^^B@B^www@w@`@`2@B^^BB^^ww@w'/?P+5#"&547.467&546;532!764'!"+32#323!&ln@ :MM: @nY*Yz--zY*55QDDU9pY-`]]`.X /2I$ t@@/!!/@@3,$,3$p$00&*0&& !P@RV2#"&/#"&/#"&546?#"&546?'&54632%'&54632763276%>S]8T;/M77T7%>ww@ww!"5bBBb// * 8(@(87)(8=%/' #?w@www#~$EE y &L(88e):8(%O r    O?GQaq47&67>&&'&67>&"$32#"#"'654  $&6 $6&$ CoL.*K  Px.* iSƓ i 7J ?~pi{_Я;lLUZ=刈刈_t'<Z :!   @! j`Q7  $ky, Rfk*4LlL=Z=刈&$&546$7%7&'5>]5%w&P?zrSF!| &0 ##!"&5#5!3!3!3!32!546;2!5463) );));;))&&&@@&&&  6 $&727"'%+"'&7&54767%&4762֬>4P t+8?::  ::A W` `EvEEvE<."e$IE&O &EI&{h.`m"&#"&'327>73271[ >+)@ (]:2,C?*%Zx/658:@#N C= E(oE=W'c:#!#"$&6$3 &#"32>7! ڝyy,{ۀہW^F!LC=y:yw߂0H\R%"N^ '&76232762$"&5462"&46274&"&'264&#"'&&#"32$54'>$ $&6$ G>>0yx14J55J5J44J5Fd$?4J55%6E#42F%$fLlLq>>11J44%&4Z%44J54R1F$Z-%45J521Z%F1#:ʎ 9LlL#Qa"'&7622762%"&5462"&546274&#"&'73264&#"'&&#"32654'>#!"&5463!2 55 **.>.-@-R.>.-@-<+*q6- -- 0OpoOxzRrqP6z~{{Prr^aa]054&"#"&5!2654632!#"&57265&'&#".'&'#"&5467%&4>7>3263232654.547'654'63277.'.*#">7?67>?>32#"'7'>3'>3235?KcgA+![,7*  2(-#=  /~[(D?G  |,)"# +)O8,+'6 y{=@0mI#938OAE` -  )y_/FwaH8j7=7?%a % %!?)L J 9=5]~pj  %(1$",I  $@((  +!.S -L__$'-9L 5V+ 6 T+6.8- $ 0 + t |S 16]&#"'&#"67>76'&'&#"67>32764.#"#.32>67>7 $&54>7>7>7rJ@ "kb2)W+ ,5/1   #   Z -!$IOXp7sLCF9vz NAG#/ 5|Հ';RKR/J#=$,9,+$UCS7'2"1  ! / ,   /--ST(::(ep4AM@=I>".)xΤlsY|qK@ %(YQ&N EHv~<Zx'#"&5467&6?2?'&"/.7.546326#"&'&/7264/7'764&"'?>>32.AUpIUxYE.A %%%h% %hJ%D,FZxULs TgxUJrVD %hJ%@/LefL.C %Jh%CV sNUxϠ@.FZyUHpVA %h&%% %Ji%CWpIUybJ/Uy^G,D %Jh%@U sMt UC %hJ%C-KfyEX[_gj&/&'.''67>7>7&'&'&'>76763>7>#&'&'767672'%'7'+"&'&546323267>7%#"'4'6767672,32,+DCCQLDf' % :/d B 4@ }  &!0$?Jfdf-.=6(:!TO? !IG_U% . k*.=; 5gN_X "  ##  292Q41   *6nA;| BS N.  %1$ 6 $nk^ '7GWgw2+"&5463#!"&5463!254&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26#"&=! B^^BB^^B:FjB^8((`( `(8^BB^^B@B^"vEj^B(8(`(8(/?O_o/?2#!"&5463;26=4&+";26=4&+";26=4&+";26=4&+"54&+";2654&+";2654&+";2654&+";2654&+";2654&#!"3!2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`' "&5#"&5&4762!762$"&462B\B@B\BOpP.BB..BB.8$PO広3CQ#".54>32#".546322#"&#"#"54>%".54>32%2#"&54> &X=L|<&X=M{2r_-$$-_rUU%&&5%ő'- "'.546762@FF$@B@$.&,&.]]|q#<<#(BB B%'-%'-'%'-"'%&'"'%.5467%467%62@ll@ll,@GG&!@@@@@@!&+#+#6#+$*`:p:px p=`$>>$&@&@ @&p@ &.A!!"!&2673!"5432!%!254#!5!2654#!%!2#!8Zp?vdΊens6(N[RWu?rt1SrF|iZ@7މoy2IMC~[R yK{T:%,AGK2#!"&5463!!2654'654.#532#532"&5!654&#"327#2#>!!ww@ww~uk'JTMwa| DH> I1q Fj?w@wwwsq*4p9O*¸Z^qh LE "(nz8B M'?"&4624&#"'.'324&#"3267##"&/632632.ʏhhMALR vGhг~~K „yO^   ʏʏВ*LM@!שwwȍde)qrOPqȦs:03=7'.?67'67%'>&%'7%7./6D\$>  "N,?a0#O 1G9'/P(1#00  ($=!F "9|]"RE<6 'o9%8J$\ :\HiTe<?}V#oj? d,6%N#" HlSVY]C =@C4&"2!.#!"4&"2+"&=!"&=#"&546;>3!232^^^Y ^^^`pppp`]ibbi]~^^^e^^^PppPPppP]^^]3;EM2+"&=!"&=#"&546;>;5463!232264&"!.#!"264&" ]`pppp`]ibbi^^^dY !^^^]@PppP@@PppP@]^^] ^^^e^^^ 3$#!#!"&5467!"&47#"&47#"&4762++&2 $$ 2&&&4&&Z4&&##&&4&4&44&m4&m+DP4'&#"32763232674'&!"32763 3264'&$#"32763232> $$ g* o`#ə0#z#l(~̠) -g+^aaF s" +g (* 3#!| #/IK/%*%D= )[^aa !!!'!!77!,/,-a/G t%/;<HTbcq%7.#"32%74'&"32765"/7627#"5'7432#"/7632#"5'7432#"&5'74632 #"/6327#"/6327#"/46329"&/462"&/>21"&/567632#!.547632632  *     X    ^  `    ^  b  c   fu U`59u  4J   l~ ~ F 2    m | O,           ru| u  " )9 $7 $&= $7 $&= $7 $&=  $&=46w`ww`ww`wb`VTEvEEvETVTEvEEvET*VTEvEEvET*EvEEvEEvEEv#^ct#!"&5463!2!&'&!"&5!632#"&'#"/&'&7>766767.76;267674767&5&5&'67.'&'&#3274(8((88((`x c`(8!3;:A0?ݫY   ^U 47D$    74U3I  |L38wtL0`((88(@(8(D 9 8(Q1&(!;  (g- Up~R2(/{E(Xz*Z%(i6CmVo8 #T#!"&5463!2!&'&!"&5!3367653335!3#4.5.'##'&'35(8((88((`x c`(8iFFZcrcZ`((88(@(8(D 9 8(kk" kkJ  ! k#S#!"&5463!2!&'&!"&5!%!5#7>;#!5#35!3#&'&/35!3(8((88((`x c`(8-Kg kL#DCJg  jLD`((88(@(8(D 9 8(jj jjkk kk#8C#!"&5463!2!&'&!"&5!%!5#5327>54&'&#!3#32(8((88((`x c`(8 G]L*COJ?0R\wx48>`((88(@(8(D 9 8(jjRQxk !RY#*2#!"&5463!2!&'&!"&5!!57"&462(8((88((`x c`(8Pppp`((88(@(8(D 9 8(ppp  #*7JR5#5#5#5##!"&5463!2!&'&!"&5##5!"&54765332264&"<(8((88((`x c`(8kޑcO"jKKjK`((88(@(8(D 9 8(SmmS?M&4&&4#9L^#!"&5463!2!&'&!"&5!#"/#"&=46;76276'.'2764'.(8((88((`x c`(8 6ddWW6&44`((88(@(8(D 9 8(. G5{{5]]$5995#3C#!"&5463!2!&'&!"&5!2#!"&5463#"'5632(8((88((`x c`(84LL44LL4l  `((88(@(8(D 9 8(L44LL44L  Z #7K[#!"&5463!2!&'&!"&5!>&'&7!/.?'&6?6.7>'(8((88((`x c`(8` 3  3  3  3 v  ?  `((88(@(8(D 9 8( & & - & &  ?   '6#'. '!67&54632".'654&#"32eaAɢ/PRAids`WXyzOvд:C;A:25@Ң>-05rn`H( ' gQWZc[ -%7' %'-'% %"'&54762[3[MN 3",""3,3"ong$߆]gn$+) ")")" x#W#"&#!+.5467&546326$32327.'#"&5463232654&#"632#".#"oGn\ u_MK'̨|g? CM7MM5,QAAIQqAy{b]BL4PJ9+OABIRo?z.z n6'+s:zcIAC65D*DRRD*wyal@B39E*DRRD*'/7  $&6$ 6277&47' 7'"' 6& 6'lLRRZB|RR>dZZLlLZRR«Z&>«|R ! $&54$7 >54'5PffP牉@s-ff`-c6721>?>././76&/7>?>?>./&31#"$&(@8!IH2hM>'  )-* h'N'!'Og,R"/!YQG54'63&547#5#"=3235#47##6323#324&"26%#!"&5463!2F]kbf$JMM$&N92Z2&`9UW=N9:PO;:dhe\=R +)&')-S99kJ<)UmQ/-Ya^"![Y'(<`X;_L6#)|tWW:;X  #'#3#!"&5463!2) p*xeשw@www0,\8@www9I#"'#"&'&>767&5462#"'.7>32>4."&'&54>32JrO<3>5-&FD(=Gq@C$39aLL²L4 &) @]v q#CO!~󿵂72765'./"#"&'&5 }1R<2" 7MW'$  ;IS7@5sQ@@)R#DvTA ; 0x I)!:> +)C 6.> !-I[4&#"324&#"3264&#"324&#"326&#"#".'7$4$32'#"$&6$32D2)+BB+)3(--(31)+BB+)4'--'4'#!0>R HMŰ9ou7ǖD䣣 R23('3_,--,R23('3_,--,NJ ?uWm%#"'%#"'.5 %&'&7632! ; `u%"(!]#c)(  #"'%#"'.5%&'&76 !  (%##fP_"(!)'+ʼn4I#"$'&6?6332>4.#"#!"&54766$32#!"&=46;46;2z䜬m IwhQQhbF*@&('k@z   _hQнQGB'(&*eozΘ@@`  >. $$ ffff^aafff^aa>"&#"#"&54>7654'&#!"#"&#"#"&54>765'46.'."&54632326323!27654'.5463232632,-,,",:! %]& %@2(/.+*)6! <.$..**"+8#  #Q3,,++#-:#"$$ /:yuxv)%$ /?CG%!5%2#!"&5463!5#5!52#!"&54632#!"&5463#5!5`&&&& &&&&&&&&@&&&&&&&&&&&&%2 &547%#"&632%&546 #"'6\~~\h ~\h\ V V VV%5$4&#"'64'73264&"&#"3272#!"&5463!2}XT==TX}}~>SX}}XS>~}w@www~:xx:~}}Xx9}}9xX}@www/>LXds.327>76 $&6$32762#"/&4762"/&47626+"&46;2'"&=462#"'&4?62E0l,  *"T.D@Yooo@5D [  Z  Z  [ ``[ Z  2 ,l0 (T" .D5@oooY@D, Z  [  [  Z ``EZ  [ 5%!  $&66='&'%77'727'%amlLmf?55>fFtuutFLlLHYC L||L Y˄(E''E*( /?IYiy%+"&=46;2+"&=46;2+"&=46;2+"&=46;2%"&=!#+"&=46;2+"&=46;2+"&=46;2+"&=46;2!54!54>$ +"&=46;2#!"&=@&&@3P > P3&&rrr&&rrr he 4LKM:%%:MKL4WT&&%/9##!"&563!!#!"&5"&5!2!5463!2!5463!2&&&&&&  &&&i@&&@&7'#5&?6262%%o;j|/&jJ%p&j;&i&p/|jţ%Jk%o%  :g"&5462#"&546324&#!"263662>7'&75.''&'&&'&6463!276i~ZYYZ~@OS;+[G[3YUD#o?D&G3I=JyTkBuhNV!WOhuAiSy*'^CC^'*SwwSTvvTSwwSTvvWID\_"[ gq# /3qFr2/ $rg%4 HffHJ4d#!#7!!7!#5!VFNrmNNN N!Y+?Ne%&'&'&7>727>'#&'&'&>2'&'&676'&76$7&'&767>76 '6# <;11x# *# G,T93%/#0vNZ;:8)M:( &C.J}2 %0  ^*  JF &7'X"2LDM" +6 M2+'BQfXV#+] #' L/(eB9  #,8!!!5!!5!5!5!5#26%!!26#!"&5!5&4& &pPPp@@&&@!&@PppP@*  9Q$"&54627"."#"&547>2"'.#"#"&5476$ "'&$ #"&5476$ (}R}hLK NN Ud: xx 8    ,, |2222 MXXM ic,>>,   ̺  '/7?KSck{4&"2$4&"24&"24&"24&"24&"24&"24&"24&"264&"24&#!"3!264&"2#!"&5463!2KjKKjKjKKjKjKKjKKjKKjKjKKjKjKKjKKjKKjKjKKjKLhLLhLKjKKj&&&&KjKKjL44LL44L5jKKjKKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjK4LL44LLjKKjK&&&&jKKjK4LL44LL 'E!#"+"&7>76;7676767>'#'"#!"&7>3!2W",&7' #$ &gpf5 O.PqZZdS -V"0kqzTxD!!8p8%'i_F?;kR(` !&)' (2!&6367! &63!2! `B 1LO(+#=)heCQg#s`f4#6q'X|0 -g >IY#6?>7&#!%'.'33#&#"#"/3674'.54636%#"3733#!"&5463!24  : @7vH%hEP{0&<'VFJo1,1.F6A#L44LL44L"% 7x'6 O\JYFw~v^fH$ ! "xdjD"!6`J4LL44LL +3@GXcgqz -<JX{&#"327&76'32>54.#"35#3;5#'#3537+5;3'23764/"+353$4632#"$2#462#"6462""'"&5&5474761256321##%354&'"&#"5#35432354323=#&#"32?4/&54327&#"#"'326'#"=35#5##3327"327'#"'354&3"5#354327&327''"&46327&#"3=#&#"32?"5#354327&3=#&"32?"#3274?67654'&'4/"&#!"&5463!2_gQQh^_~\[[\]_^hQQge<F$$$ !!&&/ !/  !! 00/e&'!"e$   '!!''   8''NgL44LL44LUQghQUk=("  ! =))=2( '! 'L#(>( & DC(>(zL#DzG)<)4LL44LL  BWbjq}+532%+5324&+32763#4&'.546327&#"#"'3265#"&546325&#"32 !264&"2%#'#735#535#535#3'654&+353#!"&5463!29$<=$@?SdO__J-<AA@)7")9,<$.%0*,G3@%)1??.+&((JgfJ*A!&jjjGZYGиwsswPiL>8aA !M77MM77M3! 4erJ]&3YM(, ,%7(#)  ,(@=)M%A20C&Mee(X0&ĖjjjV 8Z8J9N/4$ 8NN88NN  #&:O[ $?b3'7'#3#%54+32%4+324+323'%#5#'#'##337"&##'!!732%#3#3##!"&53733537!572!56373353#'#'#"5#&#!'#'#463!2#"5#"5!&+&+'!!7353273532!2732%#54&+#32#46.+#2#3#3##+53254&".546;#"67+53254&.546;#"#'#'##"54;"&;7335wY-AJF=c(TS)!*RQ+*RQ+Y,B^9^Ft`njUM ') ~PSPRm٘M77Mo7q @)U 8"E(1++NM77Mx378D62W74;9<-A"EA0:A F@1:ؗBf~~""12"4(w$#11#@}}!%+%5(v$:O\zK?* $\amcrVlOO176Nn23266&+"&#"3267;24&+"'&+";27%4&+";2?>23266&+"&#"3267;254+";27#76;2#!"&5463!23%#2%%,,  _3$$2%%M>AL Vb5)LDHeE:< EM j,K'-R M ~M>AR  Vb5)LEHeE:< E J ABI*'! ($rL44LL44Lv%1 %3!x*k $2 %3!;5h n a !(lI;F   rp p8;5h t a !(lI;F ` #k 4LL44LL  2HW[lt#"'5632#6324&'.54327&#"#"&'32767#533275#"=5&#"'#36323#4'&#"'#7532764&"24'&#"327'#"'&'36#!"&5463!2=!9n23BD$ &:BCRM.0AC'0RH`Q03'`.>,&I / * / 8/n-(G@5$ S3=,.B..B02^`o?7je;9G+L44LL44LyE%# Vb;A !p &'F:Aq)%)#orgT$ v2 8)2z948/{ 8AB..B/q?@r<7(g/4LL44LL ?#!"&'24#"&54"&/&6?&5>547&54626=L4@ԕ;U g3 T 2RX='8P8|5 4Ljj U;Ig@   `  "*\(88(]k  &N4#"&54"3 .#"#!"&'7!&7&/&6?&5>547&54626;U gIm*]Z0L4@ԕ=o=CT T 2RX='8P8|5  U;IgXu?bl3@4Ljja`   `  "*\(88(]k/7[%4&+";26%4&+";26%4&+";26!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@0 o`^BB^`5FN(@(NF5@@@u  @LSyuS@%44%,<H#"5432+"=4&#"326=46;2  >. $$ ~Isy9"SgR8vHD w ffff^aam2N+ )H-mF+10*F +fff^aab4&#"32>"#"'&'#"&54632?>;23>5!"3276#"$&6$3 k^?zb=ka`U4J{K_/4^W&  vx :XB0܂ff ) fzzXlz=lapzob35!2BX G@8  ' '=vN$\ff  1 SZz8zX#("/+'547'&4?6276 'D^h  i%5@%[i  h]@]h  i%@5%[i  h^@@)2#"&5476#".5327>OFi-ay~\~;'S{s:D8>)AJfh]F?X{[TC6LlG]v2'"%B];$-o%!2>7>3232>7>322>7>32".'.#"#"&'.#"#"&'.#"#546;!!!!!32#"&54>52#"&54>52#"&54>52-P&+#($P.-P$'#+&PZP&+#"+&P-($P-.P$(#+$P.-P$'#+&P-.P$+#pP@@PpH85K"&ZH85K"&ZH85K"&Z@Pp@@@pMSK5, :&LMSK5, :&LMSK5, :& !!3 ! @@@  #"$$3!!2"jaѻxlalxaaj!!3/"/'62'&63!2'y  `I  yMy `I y'W`#".'.#"32767!"&54>3232654.'&546#&'5&#" 4$%Eӕ;iNL291 ;XxR`f՝Q8TWiWgW:;*:`Qs&?RWXJ8 oNU0 J1F@#) [%6_POQiX(o`_?5"$iʗ\&>bds6aP*< -;iFn* -c1BWg4'.'4.54632#7&'.#"#"'.#"32767'#"&54632326#!"&5463!2#$( 1$6]' !E3P|ad(2S;aF9'EOSej]m] <*rYshpt.#)$78L*khw@wwwB % $/$G6 sP`X):F/fwH1pdlqnmPHuikw_:[9D'@www34."2>$4.#!!2>#!".>3!2QнQQнQQh~wwhfffнQQнQQнQZZQffff#>3!2#!".2>4."fffнQQнQQffffQнQQн ,\!"&?&#"326'3&'!&#"#"'  5467'+#"327#"&463!!'#"&463!2632(#AHs9q ci<= #]$ KjKKjKKjKKjH#j#H&&&KjKKjKg V i jKKjKKjKKjK ..n(([5KK55KK5[poNv<+#"'#"&546;&546$32322$B$22$$*$22$Xڭӯ$22$tX'hs2$ϧkc$22$1c$2F33F3VVT2#$2ԱVT2#$2g#2UU݃ 2$#2UU1݃2 ,u54#"67.632&#"32654'.#"32764.'&$#"7232&'##"&54732654&#"467&5463254632>32#"'&ru&9%" *#͟ O%GR=O&^opC8pP*bY _#$N Pb@6)?+0L15 "4$.Es  5IQ"!@ h "Y7e|J>ziPeneHbIlF>^]@n*9 6[_3#"&54632#.#"32%3#"&54632#.#"326%4&'.'&! ! 7>7>! =39? 6'_ >29? 5'17m-VU--,bW.뮠@Fyu0HC$뮠@Fyu0HC$L= ?? <=! A <`;+"&54&#!+"&5463!2#!"&546;2!26546;2pЇ0pp@Ipp>Sc+"&=46;254&+"&+";2=46;2;2=46;2;2%54&#!";2=;26#!"&5463!2A5DD5A7^6a7MB55B7?5B~```0`rr5A44A5v5AA5f*A``0` !!!! #!"&5463!2ړ7H7jv@vvv':@vvvMUahmrx#"'!"'!#"&547.547.54674&547&54632!62!632!#!627'!%!"67'#77!63!!7357/7'%# %'3/&=&' 5#?&547 6!p4q"""6" 'h*[ |*,@?wAUMpV@˝)Ϳw7({*U%K6=0(M "! O dX$k !! ! b [TDOi @6bxBAݽ5  ɝ:J +3,p x1Fi (R 463!#!"&5%'4&#!"3`а@..@A-XfB$.BB..C} )&54$32&'%&&'67"w`Rd]G{o]>p6sc(@wgmJPAjyYWa͊AZq{HZ:<dv\gx>2ATKn+;"'&#"&#"+6!263 2&#"&#">3267&#">326e~└Ȁ|隚Ν|ū|iyZʬ7Ӕްr|uѥx9[[9jj9ANN+,#ll"BS32fk[/?\%4&+";26%4&+";26%4&+";26%4&+";26%#!"&5467&546326$32]]eeeeee$~i qfN-*#Sjt2"'qCB8!'> !%)-159=AEIMQUY]agkosw{! %! 5!#5#5#5#5#57777????#5!#5!#5!#5!#5!#5!#5!#5#537#5!#5!#5!#5!#5!#55#535353535353%"&546326#"'#32>54.&54>3237.#"Q%%%%%%%%%?iiihOiixiiyiixiiArssrrssr%sssrrssNs%%%%%%%%%%'32#".543232654&#"#"&54654&#"#"&547>326ڞUzrhgrxSПdU 7#"&463!2!2&&4&&&&4&KjKKjKjKKj &&&%&& &&4&&&&4&&&5jKKjKKjKKjK%z 0&4&&3D7&4& %&'S4&"4&"'&"27"&462"&462!2#!"&54>7#"&463!2!2&4&4&4&4KjKKjKjKKj &&&%&& &&4&%&&ے&4"jKKjKKjKKjK%z 0&4&&3D7&4& %& & !'! !%!!!!%"'.763!2o]FooZY@:@!!gf//I62'"/"/"/"/"/"/"/7762762762762762762%"/77627&6?35!5!!3762762'"/"/"/"/"/"/%5#5!4ZSS6SS4SS4SS4SS4SS4SS4ZSS4SS4SS4SS4SS4SS4S-4ZSS4S@4SS4ZSS6SS4SS4SS4SS4SS4S@ZSSSSSSSSSSSSSSZSSSSSSSSSSSSSyZRRR@%:= :+: =RRZSSSSSSSSSSSSSCv!/&'&#""'&#" 32>;232>7>76#!"&54>7'3&547&547>763226323@``` VFaaFV      $. .$     yy .Q5ZE$ ,l*%>>%*>*98(QO!L\p'.'&67'#!##"327&+"&46;2!3'#"&7>;276;2+6267!"'&7&#"(6&#"#"' Dg OOG`n%ELL{@&&Nc,sU&&!Fre&&ss#/,<= #]gL oGkP'r-n&4&2-ir&&?o  4 _5OW! .54>762>7.'.7>+#!"&5#"&5463!2"&462{{BtxG,:`9(0bԿb0(9`:,GxtB&@&&@&K55K`?e==e?1O6# ,  #$  , #6OO&&&&5KK?!"'&'!2673267!'. ."!&54632>321 4q#F""8'go#- #,"tYg>oP$$Po> Zep#)R0+I@$$@I++332++"&=#"&=46;.7>76$  @ ᅪ*r@@r'/2+"&5".4>32!"&=463  &@~[՛[[u˜~gr&`u՛[[՛[~~@r=E32++"&=#"&=46;5&547&'&6;22676;2  >``@``ٱ?E,,=?rH@``@GݧH`jjrBJ463!2+"&=32++"&=#"&=46;5.7676%#"&5   &@~``@``  vXr&@``@+BF`rks463!2+"&=32++"&=#"&=46;5&547'/.?'+"&5463!2+7>6 %#"&5   &@~``@``~4e  0  io@& jV  0  Z9r&@``@Gɞ5o , sp &@k^ , c8~~`r8>KR_32++"&=!+"&=#"&=46;.767666'27&547&#"&'2#" @@ 'Ϋ'sggsww@sgg@@-ssʃl99OOr99FP^l463!2+"&=$'.7>76%#"&=463!2+"&=%#"&54'>%&547.#"254&' &@L?CuГP vY &@;"ޥ5݇ޥ5`&_ڿgwBF@&J_ s&&?%x%xJP\h463!2+"&='32++"&=#"&=46;5.7676632%#"&56'327&7&#"2#" &@L? ߺu``@``} ຒɞueeu9uee&_"|N@``@""|a~lo99r9@9;C2+"&5"/".4>327'&4?627!"&=463  &@Ռ .  N~[՛[[u˜N .  gr&`֌  . Ou՛[[՛[~N  . @r9A'.'&675#"&=46;5"/&4?62"/32+  '֪ \  . 4 .  \r|ݧ憛@\ .    . \@r~9A"/&4?!+"&=##"$7>763546;2!'&4?62  m  - @ݧ憛@& -  @rm4 -  ٮ*   - r+"&5&54>2  @[՛[rdGu՛[[r  ".4>2r[՛[[՛r5՛[[՛[[$2#!37#546375&#"#3!"&5463#22#y/Dz?s!#22#2##2S88 2#V#2L4>32#"&''&5467&5463232>54&#"#"'.Kg&RvgD $ *2% +Z hP=DXZ@7^?1 ۰3O+lh4`M@8'+c+RI2 \ZAhSQ>B>?S2Vhui/,R0+ ZRkmz+>Q2#"'.'&756763232322>4."7 #"'&546n/9bLHG2E"D8_ pdddxO"2xxê_lx2X  !+'5>-pkW[C I I@50Oddd˥Mhfxx^ә #'+/7!5!!5!4&"2!5!4&"24&"2!!! 8P88P 8P88P88P88PP88P8 P88P88P88P8 +N &6 !2#!+"&5!"&=463!46;23!#!"&54>32267632#"_>@`     `  L4Dgy 6Fe=OOU4L>   ` `  4L2y5eud_C(====`L43V &6 #"/#"/&54?'&54?6327632#!"&54>32 7632_>     %%Sy 6Fe=J%>     %65%Sy5eud_C(zz.!6%$!2!!!46;24&"2!54&#!"&&&@ԖV@&&@&&ԖԖ@&3!!! !5!'!53!! #7IeeI7CzCl@@@#2#!"&?.54$3264&"!@մppp((ppp#+/2#!"&?.54$3264&"!264&"!@մ^^^@^^^@((^^^^^^v(#"'%.54632 "'% 632U/@k0G,zD# [k# /tg F Gz  #'#3!) p*xe0,\8T #/DM%2<GQ^lw &'&676676&'&7654&'&&546763"#"'3264&7.>&'%'.767&7667&766747665"'.'&767>3>7&'&'47.'.7676767&76767.'$73>?>67673>#6766666&'&6767.'"'276&67&54&&671&'6757>7&"2654&57>&>&'5#%67>76$7&74>=.''&'&'#'#''&'&'&'65.'&6767.'#%&''&'#2%676765&'&'&7&5&'6.7>&5R4&5S9 W"-J0(/r V"-J0(.)#"6&4pOPppc|o}vQ[60XQW1V  # 5X N"& . ) D>q J:102(z/=f*4!> S5b!%  (!$p8~5..:5I  ~T 4~9p# ! ) & ?()5F 1   d%{v*: @e s|D1d {:*dAA|oYk'&<tuut&v HCXXTR;w 71™ Z*&' 1  9? . $Gv 5k65P.$.`aasa``Z9k'9؋ӗa-*Gl|Me_]`F& OܽsDD!/+``aa``a154&'"&#!!26#!"&5463!2    iLCly5)*Hcelzzlec0hb,,beIVB9@RB9J_L44LL44L44%2"4:I;p!q4bb3p (P`t`P(6EC.7BI64LL44LL  .>$4&'6#".54$ 4.#!"3!2>#!"&5463!2Zjbjj[wٝ]>oӰٯ*-oXL44LL44L')꽽)J)]wL`ֺ۪e4LL44LL;4&#!"3!26#!"&5463!2#54&#!";#"&5463!2  @ ^BB^^B@B^  B^^B@B^`@  MB^^B@B^^>  ^B@B^^5=Um ! !!2#!"&=463!.'!"&=463!>2!2#264&"".54>762".54>762?(``(?b|b?B//B/]]FrdhLhdrF]]FrdhLhdrF@@@(?@@ ?(@9GG9@/B//BaItB!!BtI Ѷ!!ь ItB!!BtI Ѷ!!ь-M32#!"&=46;7&#"&=463!2#>5!!4.'.46ՠ`@`ՠ`MsFFsMMsFFsMojjo@@jj@@<!(!!(!-3?32#!"&=46;7&#"&=463!2+!!64.'#ՠ`@`ՠ`  DqLLqDojjo@@jj@@B>=C-3;32#!"&=46;7&#"&=463!2+!!6.'#ՠ`@`ՠ`UVU96gg6ojjo@@jj@@β**ɍ-G32#!"&=46;7&#"&=463!2#>5!!&'.46ՠ`@`ՠ`MsFFsMkkojjo@@jj@@<!(!33!(!9I2#!"&=4637>7.'!2#!"&=463@b":1P4Y,++,Y4P1:"":1P4Y,++,Y4P1:"b@@@7hVX@K-AA-K@XVh77hVX@K-AA-K@XVh7Aj"#54&#"'54&#"3!26=476=4&#"#54&'&#"#54&'&'2632632#!"&5&=4632>3265K @0.B @0.B#6'&& l @0.B 2' .B A2TA9B;h" d mpPTlLc _4.HK5]0CB.S0CB./#'?&&)$$)0CB. }(AB.z3M2"61d39L/PpuT(Ifc_E`1X"#4&"'&#"3!267654&"#4&"#4&26326#!"&'&5463246326\B B\B&@5K&@"6LB\B B\B sciL}QP%&#"!"3!754?27%>54&#!26=31?>Ijjq,J[j.-tjlV\$B.R1?@B.+?2`$v5K-%5KK5.olRIS+6K5̈$B\B 94E.&ʀ15uE& ԖPjjdXUGJ7!.B P2.B %2@ 7K5(B@KjKj?+fU E,5K~!1.>F.F,Q5*H$b2#!"&=%!"&=463!7!"&'&=4634'&#!">3!!"3!32#!"3!23!26=n$32>32>32#"#.#"#.#"3!27654&#"547654&#"#654&Mye t|]WSSgSY\x{ 70"1i92DU1&=  =&0@c >&/Btd4!*"8K4+"@H@/'= t?_K93-] UlgQQgsW ]#+ i>p&30&VZ&0B/ %3B. "to ){+C4I (  /D0&p0D3[_cg"'&#"3!2676=4&"#54&#"#54&#"#4&'2632632632#!"&'&5463246#!#!#5K)B4J&@#\8P8 @0.B J65K J6k cJ/4qG^\hB2.1!~K5y?^\Vljt-.j[J,qjjI7$?1R.B+.B$`2?gvEo.5KK5%-K6+SIR[&.E49 B\B$5KG#!+"&5!"&=463!2+"&' +"' +"'&5>;2>76;2Y    M .x - N     u  , u ?  LW   #  *:J4'&+326+"'#+"&5463!2  $6& $&6$ UbUI-uu,uuڎLlLAX!Jmf\$ 6uuu,KLlL-[k{276/&'&#"&5463276?6'.#"!276/&'&#"&5463276?6'.#"  $6&  $&6]h - %Lb`J%E 5 ,5R- h - %Lb`J%E 5 ,5R-'uu,uulL/hR    dMLc  NhR   dMLc  N1uuu,LlL@  ' 7 '7 ``H ``H !``H ```H` '%  7' 7'7 ' $&6$ X`(W:,:X`(WLLlLX`(W:BX`(XLlL $ %/9ES[#"&54632$"&4624&"26$4&#"2%#"&462$#"&4632#"32&! 24>  !#"&'.'#"$547.'!6$327&'77'&77N77N'qqqqqPOrqEsttsst}||}uԙ[WQ~,> nP/R U P酛n >,m'77'&77N77N6^Orqqqqqqt棣棣(~|| on[usј^~33pc8{y%cq33dqpf L 54 "2654"'&'"/&477&'.67>326?>< x ,  (-'sI  VCV  Hr'-(  $0@!BHp9[%&!@0$u  ]\\]-$)!IHV D V HI!)$-#36>N"&462."&/.2?2?64/67>&  #!"&5463!2]]]3 $; &|v;$ (CS31 =rM= 4TC(G zw@www]]]($-;,540= sL =45,; @www(2#"$&546327654&#" &#"AZ\@/#%E1/##.1E$![A懇@@\!#21E!6!E13"|! gL&5&'.#4&5!67&'&'5676&'6452>3.'5A5RV[t,G'Q4}-&r! G;>!g12sV&2:#;d=*'5E2/..FD֕71$1>2F!&12,@K r#"&5462>%.#"'&#"#"'>54#".'7654&&5473254&/>7326/632327?&$  $6 $&6$ !&"2&^ u_x^h ;J݃HJǭ qE Dm! M G?̯' %o8 9U(F(ߎLlL&!&!SEm|[n{[<ɪ "p C Di% (K HCέ  pC B m8 @Kނ  HF(LlL "*6%&6$ 7&$5%%6'$2"&4}x3nQH:dΏX e8z' li=! 7So?vM '&7>>7'7>''>76.'6'El:Fg r *t6K3U Z83P)3^I%=9 )<}Jk+C-Wd &U-TE+]Qr-< Q#0 C+M8 3':$ _Q =+If5[ˮ&&SGZoMkܬc#7&#"327#"'&$&546$;#"'654'632ե›fKYYKf¥yͩ䆎L1hvvƚwwkn]*]nlxDLw~?T8bb9SA}+5?F!3267!#"'#"4767%!2$324&#"6327.'!.#"۔c28Ψ-\?@hU0KeFjTlyE3aVsz.b؏W80]TSts<hO_u7bBtSbF/o|V]SHކJ34&#!"3!26#!!2#!"&=463!5!"&5463!2  @ ^B `` B^^B@B^   @ @B^@@^BB^^>3!"&546)2+6'.'.67>76%&F8$.39_0DD40DD0+*M7{L *="# U<-M93#D@U8vk_Y [hD00DD00Dce-JF1 BDN&)@ /1 dy%F#"'&'&'&'&763276?6#"/#"/&54?'&763276"&'&'&5#&763567632#"'&7632654'&#"32>54'&#"'.5463!2#!3>7632#"'&'&#"'&767632yqoq>* 432fba  $B? >B BB AA.-QPPR+ 42 %<ciђ:6& hHGhkG@n`IȌ5 !m(|.mzyPQ-.  je  q>@@?ppgVZE|fb6887a %RB? =B ABBAJvniQP\\PRh!cDS`gΒ 23geFGPHXcCI_ƍ5" n*T.\PQip [*81 / 9@:>t%6#".'.>%6%&7>'.#*.'&676./&'.54>754'&#"%4>327676= >vwd" l "3 /!,+ j2.|%& (N &wh>8X}xc2"W<4<,Z~fdaA`FBIT;hmA<7QC1>[u])  u1V(k1S) - 0 B2* %M ;W(0S[T]I) A 5%R7&&T,Xq&&1X,LΒw%%;#!"&5463!546;2!2!+"&52#!"/&4?63!5! (&&@&&(&&@&&( (  &&@&&@&&&&  #''%#"'&54676%6%% hh @` !   !    #52#"&5476!2#"&5476!2#"'&546        @  @  @    84&"2$4&"2$4&"2#"'&'&7>7.54$ KjKKjKjKKjKjKKjdne4" %!KjKKjKKjKKjKKjKKjK.٫8  !%00C'Z'.W"&462"&462"&462 6?32$6&#"'#"&'5&6&>7>7&54>$ KjKKjKjKKjKjKKjhяW.{+9E=cQdFK1A  0) LlLjKKjKKjKKjKKjKKjKpJ2`[Q?l&٫C58.H(Yee    Y'w(O'R@$#"&#"'>7676327676#" b,XHUmM.U_t,7A3ge z9@xSaQBLb( VU  !!!==w)AU!!77'7'#'#274.#"#32!5'.>537#"76=4>5'.465! KkkK _5 5 #BH1`L I& v6S F!Sr99rS!`` /7K%s}H XV P V  e  Vd/9Q[ $547.546326%>>32"&5%632264&#"64'&""&'&"2>&2654&#";2 P 3>tSU<)tqH+>XX|Wh,:UStW|XX>=X*  ))  +^X^|WX=>X:_.2//a:Ru?  Q%-W|XW>J( =u>XX|WX`  *((*  +2 2X>=XW|E03>$32!>7 '&'&7!6./EUnohiI\0<{ >ORDƚ~˕VƻoR C37J6I`Tb<^M~M8O  5!#!"&!5!!52!5463 ^B@B^`B^^B `B^^"^BB^0;%'#".54>327&$#"32$ !"$&6$3 ##320JUnLnʡ~~&q@tKL}'` - -oxnǑUyl}~~FڎLlLt`(88(   7!' !\W\ d;tZ`_O; }54+";2%54+";2!4&"!4;234;2354;2354>3&546263232632#"&#"26354;2354;2354;2````pp```  !,! -&M<FI(2 ```@PppPpppppp# #   ppppp j#"'&=!;5463!2#!"&=#".'.#!#"&463232>7>;>32#"&'#"!546 %. `@` :,.',-XjjXh-,'.,: kb>PppP>bk .%Z & :k%$> $``6&L')59I"TlԖlT"I95)'L&69GppG9$ >$%k: !+32&#!332 $&6$ ~O88OLlL>pN  iLlL '':Ma4&'#"'.7654.#""'&#"3!267#!"&54676$32#"'.76'&>$#"'.7654'&676mD5)  z{6lP,@KijjOoɎȕ>>[ta) GG 4?a) ll >;_-/ 9GH{zyN@,KԕoN繁y! ?hh>$ D" >â? $ n"&5462'#".54>22654.'&'.54>32#"#*.5./"~~s!m{b6# -SjR,l'(s-6^]Itg))[zxȁZ&+6,4$.X%%Dc* &D~WL}]I0"  YYZvJ@N*CVTR3/A3$#/;'"/fR-,&2-" 7Zr^Na94Rji3.I+ &6W6>N%&60;96@7F6I3+4&#!"3!26%4&#!"3!26 $$ ^aa`@@^aa '7  $ >. %"&546;2#!"&546;2#/a^(^aa(N@@4&#!"3!26 $$ @@^aa`@^aa '  $ >. 7"&5463!2#/a^(n@^aa(N@ %=%#!"'&7!>3!26=!26=!2%"&54&""&546 ##]VTV$KjKKjK$&4&Ԗ&4&>9G!5KK55KK5!&&jj&&#/;Im2+#!"&'#"&463>'.3%4&"26%4&"26%6.326#>;463!232#.+#!"&5#"5KK5sH..Hs5KK5e# )4# %&4&&4&&4&&4&` #4) #%~]eZ&&Ze] E-&&-EKjKj.<<.KjK)#)`"@&&`&&&&`&&)#`)"dXo&&oXG,8&&8!O##!!2#!+"'&7#+"'&7!"'&?63!!"'&?63!6;236;2!2@@8@7 8Q NQ N 8G@ 8GQ NQ N7   8 8  H H  k%  ".>2I20]@]@oo@@oo㔕a22]]p^|11|99|11|(%7'7' ' 7T dltl)qnluul)1$4&"24&"2 &6 +"&5476;2 &6 LhLLhLLhLLhL>  &   &`>hLLhLLhLLhL>&&>G  .7)1!62 1!62he220e22> v +4 [d+ d 135#5&'72!5!#"&'"'#"$547&54$ Eh`X(cYz:L:zYc\$_K`Pa}fiXXiޝfa  (+.>#5#5!5!5!54&+'#"3!267!7!#!"&5463!2U``'    jjV>(>VV>>Vq  ( ^(>VV>>VV=&'&'&'&76'&'&.' #.h8"$Y ''>eX5, ,PtsK25MRLqS;:.K'5R ChhRt(+e^TTu B"$:2~<2HpwTT V/7GWg. %&32?673327>/.'676$4&"2 $&6$   $6& $&6$ d -- m  ,6*6,  mKjKKjoooKzz8zzȎLlLU4>>4-. YG0 )xx) 0GYޞ .jKKjKqoooolzzz80LlLD/7H#"'.7'654&#"'67'.6?>%"&46227#".547|D,=),9#7[͑fx!X: D$ +s)hhijZt<F/*8C,q؜e\r,WBX/C2hhh=tXm>NZ+"&=46;2+"&=4>7>54&#"#"/.7632  >. $$ p=+& 35,W48'3  l zffff^aaP2P: D#;$# $*;? R Cfff^aa'Y >O`"&5462&'.'.76.5632.'#&'.'&6?65\\[( | r [A@[[@A#2#  7* <Y$  +}"(  q87] F  _1 )    #1Ke34&+326+"&=!#!"&763!2#!"&5463!2#>?4.'3#>?4.'3#>?4.'3Xe`64[l7  , L; =+3&98&+)>>+3&98&+)>=+3&88&+)> Wj|r >Q$~d $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgYJ\m4.'.'&#"#"'.'&47>7632327>7>54&'&#"327>"&47654'&462"'&476'&462"'&47>&'&462i$ $^"  %%  "^$ $W "@9O?1&&18?t@" W&%%&4KK6pp&46ZaaZ&4mttm ^x -  - x^ = /U7C kkz'[$ =&5%54'4&KK4r7>54 "&54>2"&462%"&54&#""&546 %#"&'&'.7>#"'&'.7>&4&&4&4&&4SZ&4&&44$#&&&j3$"('$&4&[՛[&4&&4F&4&]\&4&$  !D4%  ,\44&&4&4&&4&-Z4&&4&;cX/)#&>B)&4&j9aU0'.4a7&&u՛[[4&&4&@&&]]&&Ώ0 u40 )4#g&'.#"32676%4/&#"326'&#"2632#2+&'%#"'&6?676676632%#"'&6767#"&'&6767#"'.7>327"#"&'&6763"'.7>;7632;>%5K$ "0%>s$ "0%>;;>%5KVL#>H30 \($$(\( єyO2F/{(?0(TK.5sg$ єy#-F/{$70(TK.5sg$L#>H30 \($$(\#(@5"'K58!'"58!'"55"'K#dS$K K$Sdx#@1 w d>N;ET0((? - 2K|1 wd#N;ET0$(? - 2K$#dS$K K$SdxDN\2654& 265462"2654 #"32654>7>54."/&47&'?62 &4&&4&h՛[&4&r$'("$3j&&&#$4[ " @ GB[ "&&Β&&][u&&7a4.'0Ua9j&4&)B>&#)/Xc;u՛ "  " Gi[ Xh#"&54676324&'&#"'>54#"32#"54>54'.#"32>7>767632326#!"&5463!2b )   :4FDN  [1,^JK-*E#9gWRY vm0O w@wwwC22 c@X&!9{MA_"S4b// DR"XljPY < @www%e4.#"32>7676#'.#"#"&54>3232>754&*#"&54>763 >32 ''il$E/  @P@ ^`'W6&!.. ! -P5+ E{n46vLeVz:,SN/ M5M[  ]$[^5iC'2H&!(?]v`* l b$9> =R2 #"&5467%!"&7>3-.7>;%.7>322326/.76/.'&6766/&/&#"&676 &676&6766/&672? =1( H/ '96&@)9<')29% &06##$ J 0 7j)5@"*3%"!M %#K"%Ne 8)'8_(9./=*%8!Q #P"\Q#N&a)<9bR]mp%"'.'&54>76%&54763263 #"/7#"'#"&/%$%322654&#"%'OV9  nt  |\d ϓ[nt  |@D:) ;98'+| j," 41CH^nVz(~R 9\'  r  @L@  @w46HI(+C ,55, f[op@\j;(zV~i/5O#"'&54>32&#" 654'67'"'>54''&'"'6767&546767>7蒓`V BMR B9)̟!SH-77IXmSMH*k#".o;^J qןד>@YM $bKd ү[E";Kx%^6;%T,U:im=Mk).DT4'"&5463267&#" 6;64'.'4'>732676%#!"&5463!2),蛜s5-54&#"#"'654'.#"#"&#"3263232>3232>76 $$ Cf'/'% ( $UL ( #'/'@ 3#@,G)+H+@#3 ^aaX@ _O#NW#O_ .* ##(^aaq[632632#"&#"#".'&#"#".'&54767>7654.54632327&547>P9 B6?K? %O4T% >6>Z64Y=6>%S4N$ ?L?4B @{:y/$ ,'R! F! 8% #)(()#%: !F Q'+%0z:zO_4'.'&54>54&#"#"'654'.#"#"&#"3263232>3232>76#!"&5463!2Cf'.'% ( $VM  ) #'.'@ 3 #A,G)+H+A# 4 w@wwwXA  ?4N$NW&M&L  /* ## + @www O$>?>762'&#"./454327327>7> EpB5 3FAP/h\/NGSL  RP* m95F84f&3Ga4B|wB.\FI*/.?&,5~K % & Y."7n< "-I.M`{ARwJ!FX^dj''''"'7&'7&'7&'7&547'67'67'67'63277774$#"32$   *'ֱ,?g=OO&L&NJBg;1''ֱ.=gCIM $'&&NJBg=.%w؝\\w Ioo<<-NIDg=/%(ײ+AhEHO*"#*OICh=/'(ֲ/=h>ON.]xwڝ]7e[@)6!!"3#"&546%3567654'3!67!4&'7Sgny]K-#75LSl>9V%cPe}&Hn_HȌ=UoLQ1!45647UC" !-9[nx"&46254&"326754&"326754&"26754&"26#".547632632626326'4#"#"54732764&"264.#"327632>#"'"'#"'#"&5#"'67&'327&'&54>3267>7>7>32632632T"8""8)<())(<))))<))<))<))<) Tد{ՐRhx=8 78 n 81 pH_6Soc F@b@?d?uKbM70[f5Y$35KUC<:[;+8 n 87 8/8Zlv]64qE 'YK0-AlB; W#;WS9 &(#-7Z://:/Tr++r,,r++r,,r++r,,r++r,,ʠgxXVעe9222222^KVvF02OO23OO`lF;mhj84DroB@r+@222222C0DP`.r8h9~T4.&o@9 1P%14'!3#"&46327&#"326%35#5##33 $$  }Pcc]321IUΠ?LL?cc4MX &04;0XpD[[DpD,)&&Q 9V\26&".'&'&6?.#"#26327677>'32>&3#'&+"?626&"#!'.'!"&5463!>;26;2!2P P  92#.}SP9::%L \B )spN/9oJ5  !+D`]BgY9+,9% Pk 4P P &NnF!_7*}B<{o0&&B;*<@$ucRRc#@16#37c&@@@ J"@*4^`ED B o/8927 *@OLC!T!323X$BJ@@@&AS 0C 59" 'D/&&D4 88 $5A&%O#!"&547>7>2$7>/.".'&'&2>^B@B^ >FFzn_0P:P2\nzFF> R & p^1P:P1^ & R P2NMJMQ0Rr.B^^B 7:5]yPH!%%"FPy]5:7 = 4 QH!%%!Ht 4 =<"-/ ?1Pp+".'.'.?>;2>7$76&'&%.+"3!26#!"&54767>;2' +~'*OJ%%JN,&x' % ^M,EE,M7 ZE[P*FF*P:5  ^B@B^){$.MK%%KM.$+X)o3 "a 22!] 4  I>"">,&S8JB##B12 ` `B^^B8&ra#11#$R&  "&.2v%/%''%/%7%7'%7'/#&5'&&?&'&?&'&7%27674?6J" 0<=_gNU?DfuYGb7=^H^` =v~yT3GDPO 4Fѭqi_w\ހ!1uS%V_-d 1=U{J8n~r'U4.#".'"3!264&"26+#!"&5463!232+32+32 0P373/./373P0 T=@=T֙֙|`^B@B^^BB^`````*9deG-! !-Ged9IaallkOB^^BB^^B +Yi"&54622#!"&54>;2>+32+32+#!"&5463!2324&#!"3!26֙֙0.I/ OBBO -Q52-)&)-2 ``  ``  `^B@B^^BB^`  @   |kkl"=IYL)CggC0[jM4      B^^BB^^B @  @ !1AQu4.#".'"3!24&"254&#!"3!2654&#!"3!2654&#!"3!26#!54&+"!54&+"!"&5463!2)P90,***,09P)J66S"@8@^B@@B^^BB^Ukc9 9ckU?@@88 @@N@B^````^BB^^!1AQu#!"&4>32>72"&462#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!546;2!546;2!26#!"&5463!2J66J)P90,***,09P)"@8@ @  `@@` ^B@B^^BB^ՀUUkc9 9c`@@88@@2  @ ````@B^^BB^^(%.'"&' $&  #"$&6$ wCιCwjJ~J>LlLśJSSJ͛>6LlL$,  $&6654&$ 3 72&&  lLmzzBl>KlLGzzG>'7#!"&54>7&54>2  62654' '3/U]B,ȍ,B]U/OQнQ>+X}}X0bӃۚӅb0}hQQh>ff#=#!"&4>3272"&462!3!26#!"&5463!;26=!2J66J)Q8PP8Q)  ^B@B^^B``B^VVVld9KK9d` @B^^BB^``^+;K[eu4.#"'"3!264&"254&#!"3!2654&#!"3!26%54&+";2654&#!"3!26!54&#!"!#!"&5463!2"D/@@/D"?,,?pppp@@@@^B@B^^BB^D6]W2@@2W]67MMppp@@@@@@@@n`@B^^BB^^+;K[eu#!"&54>3272"&462#!"&=463!2%#!"&=463!2+"&=46;25#!"&=463!2!3!26#!"&5463!2?,V,?"D/@@/D"pppp@@@  ^B@B^^BB^D7MM76]W2@@2W]֠ppp@@@@@@@@` @B^^BB^^A#"327.#"'63263#".'#"$&546$32326J9"65I).!1iCCu +I\Gw\B!al݇yǙV/]:=B>9+32%#!"&5463!2#"&54>54'&#"#"54654'.#"#"'.54>54'&'&543232654&432#"&54>764&'&'.54632  ?c'p& ?b1w{2V ?#&#9&CY' &.&#+B : &65&*2w1GF1)2<)<'  ( BH=ӊ:NT :O )4:i   F~b` e!}U3i?fRUX|'&'&Ic&Q  *2U.L6* / L:90%>..>%b>+ +z7ymlw45)0 33J@0!! TFL P]=GS -kwm  !*(%6&692? $&6$  '   al@lLlL,& EC h$LlL /37;%"&546734&'4&" 67 54746 #5#5#5ppF::FDFNV^fnv~"/&4?.7&#"!4>3267622"&4"&46262"&42"&4462"$2"&42"&4"&46262"&4"&46262"&42"&4$2"&42"&42"&4  R ,H8JfjQhjG^R,  !4&&4&Z4&&4&4&&4&4&&4&&4&&44&&4&4&&4&Z4&&4&4&&4&4&&4&4&&4&4&&4&&4&&4&Z4&&4&Z4&&4&  R  ,[cGjhQRJ'A, &4&&4Z&4&&4Z&4&&4Z&4&&444&&4&&4&&4Z&4&&4Z&4&&4Z&4&&4&4&&4Z&4&&4Z&4&&4&&4&&4Z&4&&4Z&4&&4%-5=EM}+"&=#!"'+"&=&="&4626"&462&"&462"&462&"&462&"&462#!"&=46;4632676/&?.7&#"!2"&462&"&462&"&462"&462&"&462&"&462"&462&"&462"&462@?AA? @ @R...R@`jlL.h) * * $ %35K.....uvnu....@@jN  * * .t2#K5..R..R. @Hq '&'&54 &7676767654$'.766$76"&462&'&'&7>54.'.7>76ȵ|_ğyv/ۃ⃺k] :Buq CA _kނXVobZZbnW|V 0  Q2- l}O  / :1z q%zG 4( 6Roa ą\< )4 J}%!!#!"&5463!2^B@B^^BB^`@B^^BB^^%#!"&=463!2^B@B^^BB^B^^BB^^ &))!32#!#!"&5463!463!2`B^^B^B@B^^B`^BB^^B@B^B^^BB^`B^^#3%764/764/&"'&"2?2#!"&5463!2    s^B@B^^BB^ג     @B^^BB^^#'7"/"/&4?'&4?62762!!%#!"&5463!2     ^B@B^^BB^    `@B^^BB^^ ! $&6$ .2r`LlLf4LlL#.C&>"'&4762"/&4?62'"'&4762%'.>6.'.>6'>/>76&'&.'&7&'">?4'.677>7.>37654'&'67>776 $&6$  ( 4Z# # & # # & y"6&.JM@& "(XE* $+8 jT?3#'.'&!3!2>?3.'#!57>7'./5!27#'.#!"g%%D-!gg<6WWZe#1=/2*]Y3-,C1 /Dx] VFIq-HD2NK '>*%R= f 07=. f D]\|yu,0>Seu#2#"'&5<>323#3#&'#334'."#"+236'&54.#"5#37326#!"&5463!2 <  zzj k-L+ )[$8=".un/2 ^B@B^^BB^5cy    (ݔI(8?C (3> #"($=@B^^BB^^0K S&'.'&'./674&$#">&>?>'76'# "&#./.'7676767>76$w .~kuBR] T%z+",|ޟj<)(!( ~ˣzF8"{%%#5)}''xJF0"H[$%EJ#% .Gk29(B13"?@ S)5" #9dmW";L65RA0@T.$}i`:f3A%% BM<$q:)BD aa%`]A &c| Ms!  Z 2}i[ F&** < ʣsc"J<&NsF% 0@Wm6&'.6$.7>7 $76".4>2., &>6'"'&7>=GV:e #:$?+% q4g &3hT`ZtQмQQмpAP1LK!:< }҈`dlb,9'  %%($! a3)W)x  оQQоQQcQǡ-җe)Us2XD\ϼYd /?O_o#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543%#!"&5463!2++532325++532325++532325++532325++53232p00pp00pp00pp00pp008((88(@(80pp00pp00pp00pp00pp0     @(88((88     /Q/&'%&/"&=.6?&?&'&6?'.>-#".6?'.>'&6'.>54627>%>76#"'% %6 27 2G f!)p&4&p)!f G2 72  *6 " 47 2G f!)p&4&p)!f G2 72 " 6* !k 3 j&3 %,*&&ր*9% 3&j 3 k!./!>>$,*!k 3.j&3 %Ԝ9*&&ր*ǜ,% 3&j 3 k!*,$>>!/.&6.'&$ &76$76$PutۥiPuGxy Զ[xy -_v١eNuv١e =uʦ[t78X &6# #'7-'%'&$  $6 $&6$ 31NE0gR=|||">"LlL^v!1f2iЂwgfZQQ^>"||||wLlL &ZXblw.'&>'&'&".'.'&&'&'&7>767>67>7626&'&>&'&>'.7>.676'&'&'&'.67.>7>6&'&676&'&676.676&'&>&'&676'.>6/4-LJg-   $  6)j2%+QF)b3FSP 21DK2AW ") ")$? ? 8A& AE5lZm= gG2Sw*&>$5jD GHyX/4F r 1  1""!l=6> 6 ,5./'e    .*|Ed! u & &%& &5d ))66 @ C& 8B @qL?P^7 G-hI[q:"T6 ,6 &/`  L wQ'   A ^   "  $& _  y  * <Copyright Dave Gandy 2016. All rights reserved.Copyright Dave Gandy 2016. All rights reserved.FontAwesomeFontAwesomeRegularRegularFONTLAB:OTFEXPORTFONTLAB:OTFEXPORTFontAwesomeFontAwesomeVersion 4.7.0 2016Version 4.7.0 2016FontAwesomeFontAwesomePlease refer to the Copyright section for the font trademark attribution notices.Please refer to the Copyright section for the font trademark attribution notices.Fort AwesomeFort AwesomeDave GandyDave Gandyhttp://fontawesome.iohttp://fontawesome.iohttp://fontawesome.io/license/http://fontawesome.io/license/      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab cdefghijklmnopqrstuvwxyz{|}~"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~glassmusicsearchenvelopeheartstar star_emptyuserfilmth_largethth_listokremovezoom_inzoom_outoffsignalcogtrashhomefile_alttimeroad download_altdownloaduploadinbox play_circlerepeatrefreshlist_altlockflag headphones volume_off volume_down volume_upqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalic text_height text_width align_left align_center align_right align_justifylist indent_left indent_rightfacetime_videopicturepencil map_markeradjusttinteditsharecheckmove step_backward fast_backwardbackwardplaypausestopforward fast_forward step_forwardeject chevron_left chevron_right plus_sign minus_sign remove_signok_sign question_sign info_sign screenshot remove_circle ok_circle ban_circle arrow_left arrow_rightarrow_up arrow_down share_alt resize_full resize_smallexclamation_signgiftleaffireeye_open eye_close warning_signplanecalendarrandomcommentmagnet chevron_up chevron_downretweet shopping_cart folder_close folder_openresize_verticalresize_horizontal bar_chart twitter_sign facebook_sign camera_retrokeycogscomments thumbs_up_altthumbs_down_alt star_half heart_emptysignout linkedin_signpushpin external_linksignintrophy github_sign upload_altlemonphone check_emptybookmark_empty phone_signtwitterfacebookgithubunlock credit_cardrsshddbullhornbell certificate hand_right hand_lefthand_up hand_downcircle_arrow_leftcircle_arrow_rightcircle_arrow_upcircle_arrow_downglobewrenchtasksfilter briefcase fullscreengrouplinkcloudbeakercutcopy paper_clipsave sign_blankreorderulol strikethrough underlinetablemagictruck pinterestpinterest_signgoogle_plus_sign google_plusmoney caret_downcaret_up caret_left caret_rightcolumnssort sort_downsort_up envelope_altlinkedinundolegal dashboard comment_alt comments_altboltsitemapumbrellapaste light_bulbexchangecloud_download cloud_uploaduser_md stethoscopesuitcasebell_altcoffeefood file_text_altbuildinghospital ambulancemedkit fighter_jetbeerh_signf0fedouble_angle_leftdouble_angle_rightdouble_angle_updouble_angle_down angle_left angle_rightangle_up angle_downdesktoplaptoptablet mobile_phone circle_blank quote_left quote_rightspinnercirclereply github_altfolder_close_altfolder_open_alt expand_alt collapse_altsmilefrownmehgamepadkeyboardflag_altflag_checkeredterminalcode reply_allstar_half_emptylocation_arrowcrop code_forkunlink_279 exclamation superscript subscript_283 puzzle_piece microphonemicrophone_offshieldcalendar_emptyfire_extinguisherrocketmaxcdnchevron_sign_leftchevron_sign_rightchevron_sign_upchevron_sign_downhtml5css3anchor unlock_altbullseyeellipsis_horizontalellipsis_vertical_303 play_signticketminus_sign_alt check_minuslevel_up level_down check_sign edit_sign_312 share_signcompasscollapse collapse_top_317eurgbpusdinrjpyrubkrwbtcfile file_textsort_by_alphabet_329sort_by_attributessort_by_attributes_alt sort_by_ordersort_by_order_alt_334_335 youtube_signyoutubexing xing_sign youtube_playdropbox stackexchange instagramflickradnf171bitbucket_signtumblr tumblr_signlong_arrow_down long_arrow_uplong_arrow_leftlong_arrow_rightwindowsandroidlinuxdribbleskype foursquaretrellofemalemalegittipsun_366archivebugvkweiborenren_372stack_exchange_374arrow_circle_alt_left_376dot_circle_alt_378 vimeo_square_380 plus_square_o_382_383_384_385_386_387_388_389uniF1A0f1a1_392_393f1a4_395_396_397_398_399_400f1ab_402_403_404uniF1B1_406_407_408_409_410_411_412_413_414_415_416_417_418_419uniF1C0uniF1C1_422_423_424_425_426_427_428_429_430_431_432_433_434uniF1D0uniF1D1uniF1D2_438_439uniF1D5uniF1D6uniF1D7_443_444_445_446_447_448_449uniF1E0_451_452_453_454_455_456_457_458_459_460_461_462_463_464uniF1F0_466_467f1f3_469_470_471_472_473_474_475_476f1fc_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494f210_496f212_498_499_500_501_502_503_504_505_506_507_508_509venus_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569f260f261_572f263_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598f27euniF280uniF281_602_603_604uniF285uniF286_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629uniF2A0uniF2A1uniF2A2uniF2A3uniF2A4uniF2A5uniF2A6uniF2A7uniF2A8uniF2A9uniF2AAuniF2ABuniF2ACuniF2ADuniF2AEuniF2B0uniF2B1uniF2B2uniF2B3uniF2B4uniF2B5uniF2B6uniF2B7uniF2B8uniF2B9uniF2BAuniF2BBuniF2BCuniF2BDuniF2BEuniF2C0uniF2C1uniF2C2uniF2C3uniF2C4uniF2C5uniF2C6uniF2C7uniF2C8uniF2C9uniF2CAuniF2CBuniF2CCuniF2CDuniF2CEuniF2D0uniF2D1uniF2D2uniF2D3uniF2D4uniF2D5uniF2D6uniF2D7uniF2D8uniF2D9uniF2DAuniF2DBuniF2DCuniF2DDuniF2DEuniF2E0uniF2E1uniF2E2uniF2E3uniF2E4uniF2E5uniF2E6uniF2E7_698uniF2E9uniF2EAuniF2EBuniF2ECuniF2EDuniF2EE=O<01hmkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Bold.woff0000664000175000017500000025311014664334534025536 0ustar carstencarstenwOFFVHxGDEF:@ > ?GPOS/2ZYGSUB0t9A"=OS/22R`*cmap3,j|cvt 9 /8*fpgm9< zAgasp> glyf>( /head356mhhea4$ $ hmtx4Dn7Rloca< :i~maxpE  nameE ;&!postG $F[2prepUxc`d``a&@Ȩ$#Sd%c%c@r*t y #ƻxڔQny3{ 9d8a`A@$9,2bp$ Y5dN7ξo !bt=?GϞwBզkř]4|n2ڥL+}{JƝh*Oli3:+RKTȗf#_15nasjƭMƹ2y*d#Oy.Fףh?zD'Q}}+VƧnoo$>5IK5J*jf2n&r\PoU>NK}C{~~?p-Mvl6ZSf朱 6m6{ `K:4K0EjiIᷯǶL+|}s֭Cſ6lQS̅y9%̂Z ˖ُ[ 0ضm۶m۶m۶mm;]a4BA"jPH40!;" : 2! jSN0%>RaL0 b a2cW0@00rX07N4R& v,>!"%M&>3j.~714C 12&c2=Z233 2+ڲ ˠ۰-ڳ=;#pp%W+p qס;7s zp;ww %_b0?`?)&+a+*b+;(rbr+7)b*㔪*Ϊj&Ϋj..ZZzzk8jFFk4kk见c:&:2;>;1:#:3039 8s3: 3KS0˹ӹ+3631s2[󺍻2{'KzyGx+zgkqO*I[;)~ᷜO/¹?!!\"T0\"B\"RHh9FIQ8rN^۶zm۶m[cOՙmsب{s*;5d7"očW˽"" ~x6p?jYP1!:t% rP 0aݥ;VޒNmT͓tu:SiiegH*fV{T VˮTna2HSޔj nւubUL 604x;P%erBzsr3FZba=_ơךXpX""9 x:d3AY] @ai#sA6dAX @P @F|ՆPT|DZ'fϩz?}Bt.v|y0>"?T ^|r2'gX'OL;B O!fuAiֺrKҁExN/;}lJ;;mf,#5osY\XKN.m!ė]Z&t- Э8jhQK2~Gb`]-AԲn%Γ1Um 3mY COl~ފW< aUA+ĝp0+YYp2\8:^[A]0k7؈!E tpV;YmgN|%پ.ŗKN#I[Ym5znGi Nr4mmcWx'? sI ~_m)"a?~&>'rΤr$pö-Zߘ#q=&StnYu|< *PN Dw&ƫ[ Z(`[ l%J@N-5'h:x:x|6H-F=b硧zѯ{9̇3j~!,8`t7C_!CK}rґTkw|88&Y(6XվJ% L?=ت \*| 5?DLj_h1܊ ({ M֣#(JoTĹK0kNUчH6Wȉ'u.)fqO=Srå.epI6Dz+ƪ[>Y(?~6h钇=Եhq9Źp.FP@Ih  5h %ZDJ<܃@ApsǍ"-ƢEloFY fwYWEZx@r " T`Q )[Kdl)O9xCl$ v?f&suXå՚?SOY(O,woϦVOϖsC$Mm͡N'P/~*֏B!M8-e+:-Wq5תu>F*ӌϔlۗx/eƖCU:ZۋH*~ܐ#wh7 -CT;{> 26XR?sQQqU89dǯ9JmNui@Cq&gq6p.Ž iO77/>%l鸗z]+Zme;^v3]J7ۻ%{>!H}S%cqg9Nb SL"Wg I yZ,NǽIC8~D;W[$M~hmE_'l@':{MMcϵjcogvQ~wʻ=~Fa9F#rMb x\}\>!r\(OEiGX>'/T$_vWy7X[{4JɏT~& ZN~.zA~!3r$7-r9Nvb5Cpf8'>R|(U#QQqCh%Tć fw2Ǚd,yY긹m&;BX:ůB~`=-eMV*=Fc_צ­Wû'xPAV*MN:ڥZNLSjt&[?ջa^cOr3>&4k2=wgY~nso>w8šgk07Sx%^|YVÚPօCQm.;î;|}$xXD*Rt*71[A/fXƇ@criOo0Q=Ӏ4RZӖt3]JwzқNPnep3Ye^u`oﱞ/Vŧvݝj1e|J 4&t=Ӏ4RZӖt3]Jwz|}i]ʭ ~2yy;z`#[}*hgrgs2; iB X|gs6ۼٜùNے4c>396bؐǦQ͟ vvf^Ԡ&7(cLcϗ|g,rpCXΰ>y~3s3N7cN<43G8'@ngB19ymJKZ1d)k͠ uh@#N DT$NҒVA/0;EDA Zq-q;8VXç"6a[~BSZҊLe&KYwP4tЎAT]*ɜBUZҊ6=EFrww%5hA+6ng4cJVkBQ2lbzqG^K_"Gv/NrrO_$s RO-s⨤lF`<9\<=9ڏ3<"Y t3.5miOG:Ӆ˸t'1)Le:3t8n@X K;cl&?ޛ ` CbV9|{}X&f̫-=W ߱fs?bg3V8cTT:+_G~կuTTKUTKU@ TTJUTJUTJU@JU@JUT T@ T Q:S*P PD>QOTD>QOTD wVW}ζ!.ki~oqg[>P߼ ;/Ƴ8s8mQNfN^y/Md;l&џ d[/wwڿ{{ Mb Y|gs~{GY,9\7a(q 0Od&"C^q(Y%d2W W CtS1'\糰Ht|~9ILa~~9UքE~kMq\jYCr m/"cVY{l(Ձ(^Od9E>Kfg}zm}r,d9q`\~*6Sx*~/*v%yBŲP$3٢UE {)  /P'W2gY*`dl Ua3l̍/$lr|;זuc3י1^#+}?6K0AnxAgpyk!^cqg2 ˒G Ql%"2I69̙x!3ؙhL,p&p&v&;Õ ĺoBFkzbR!81Nx^™XjA^!{Fbga{z gc83>s>YX,lw9 6wD'ٕ' c7rs"ɳmUM!d}pxp=8+۝+&k$s]wս\CXG{?%CqcߥҸQwS;+d]:1L;`L|7=1fX&;YO+ݴ1HFnj?ILa~Qo$g"ϧ5nɨNFu2gdTe>X%*>KU)JUʨRF2Q*eT)J)UڥJUڥJUXU*BʨPF2*Kv.kqZm-XU-c-.kqeT.c-\F2nU˨Z{mJ5_*fT1cX%_Jf5_mVьfTt+W+UJgT:cc9zMiI+3FOe&KT$ m_NH{-r 9*ª:ӄJ >"((8TI)Tgts.VA/0;183e U/x6vvmoEm`c߬<㣌h17I2~1>9<<$xgYRVzU|>u ^G M7S< 9Yⳅ~AXB+|,MuY8qg\u8bmyg7<9\}"_y}%{1T^X߅BwzЋp6=) a2L9Kζ}2PdƏhǧSw:ԍ;}nJ5nDcNMn'a`wKvJ=\8SJ=8i@Cqfܙ>9s9/I\HӸ)݌Ri%[6l'ˎt q9]f{wCdoG#(ǽC)w =)Le:3c.۪~NךMMse [>uEvh*oӿaq??}ȱ#7)LO'l{Wy7X[{]%WˏrD~*?r\'?Ero_Ȍ(7Ͷo[;W{O'g8s8SQ^{'wՕO& ;. 5}b}GiuV1k>ެivxr^~Nz=ڳXr@ܨQlW? 5S g#CtJp*9:ԥ^|?]4b-ԾiK{:ҙ.\t;=M_~??~v+K|y;_L0kk[`9|;=q?{g̵ۘg!O4?/x^u`ozۿ`# hH#.5miOG:Ӆ˸t'KhG'0[=eky嫼-=Jz*\!,ܧMinLgя[gTZ,s ק+/X̧RH/` ԶmQmqꨊkAm۶mחd'yfvsmROO8/gu))EE$ jb^`ŽMxA$.9h#<jbf{+*a,^&]cI,17-~13N13QRH`5uӐ{%@/IlV VG[L ʃMQ\Dw+gE7,8 70y~ O7l3/T'a8z<,DnY3ĻM㈼ %FlHJpEGz+EC<8{U+1'Yn=AH# 88hyRV DkkϢ^Z8t \wkr(FL<;j>y+ks|Vn[YY|J^MVCE%vI^W#>3bT!xIS$Iyy\u fNJhyԬ;kQ̌ت^sm۶mfoi0ٶ1aȳw:sZ܉mĈ\{f‘Y D4!](AP+O?ZY0:Љta؍(aq8q% D\eɸRp w,Yl}k ڷulv!ZEFvgH&ψ&AF,X a0bSciԇ4ٌ [؁,;ك{ه8>8:Q"1N31OpLN61p|G<".pi.rѼ%2+\1rռ5:0r>G08 (( ( ( ( (#A|)Og<7_%/׼6|[-|L>X&,2qX)kFNZ1[VG~4;{N`1WsXPm[@'r_4,gvJw> #@>T)$!R5*R1*U\*T2UT*U15UZTof79ٛV"RYd{vRխnG=UPπٰàF4ٳ6=M@gJSӴ֬f=9!yͣ^ Z<,j Z4-kԦoi ղ]kx)v{ [AM&Nzީkۈj?6&1"r ,nUX =ݜ*o̱ɦg}pzgSrsռRp-j y'|^y'7~yaž'H$N^ DIV5٠![dѓrHN)Sk(wCwx긻1[ߗ&<3dtΑy@A)%]+TtQuAC7i]vݟ}m[iݥ{t0CzH =eg>Sogas+kw}˭Nsx !n)>  !D#a#j xYYr`77m۶*c1kfm[Qmǵ:̍9O~f?})!gGH.OPlXR@-+A K}249BZm,E[˧޲`Etr:Y݅@/K۠o0? ;zY8,bK0`0&LLV),[,dE`%BV[V:6MJN`E6c{J ǀ )+4g9 9oEWV5n7Mܲnsk<2xlybgynżk7⼳OgwIŊ)F\Y @BBe+TE!K.W@ %TR;42xWQPUUjD wjVjM\mN^AWGR/~ ג " 0p GQM1C$5S3A.-ҢB.-ol3M5\G[ݞf[Z 333ۡ!233y<-23c2=;KVfro+[]-muDW*1@C]*+űޥ^O'z&a ra0q:5kXcƊ5kXcƊ5kyqr/ ƅ"qD}i\,n,ѸEB^h {eۋWh{eۋ1_B,RײX&-B2VW*X^kkcz]SjĦrzKlVYo-뭲Z[ezkYoֲ*7m%0o8/JKߤ:Xu٪k&f?U=+k[rK\CBnVk֨8a#gp`%rT=1T9 oϣ<>C< UݶUݶUݶo-jҋ=?G]_0Wo;]"MR*67RoUKԯHIIx; HiGh/QxڝlP{qζm۶`f8ۮճmln) ⨆`N=( (0P ȌǢƌY guꢕz蠽>io>(a;{Pp*ǖ&;f73xBWѝC_џ d_1P1dO~r7s74/65? bfae'줝v&]_rA.e"W\rSnm+jc0By#k!=5@kl]غ`a6{l-U8ik Nx_=eZ駡0Jrܦ(]r)9S4'kJ<ʠh2BETECGG UBLb2DTSxc`fŴu1TS7Nh&䉘"(6b(HRar"Gər\+7˽<&O*ʫZCr3"dd7'ƫ8EuHYt ZgYtFws|(e3,aZa% X5q=F<N[=Rj連qU!݆\տxj[ȸEHƣ4Lj [ dRB{ d~|N+Y3>)^A?zӶ0SQ\LMEhʄT q8 Lxc\6>.I@ ]IV3ˠټp' Tۇ))Eݟ3i0O/= 3~ Q-JjߴEY-*j砪y[]ŨE[}jXc}׸mVz}վj zzeVdi75)EeR nK wuJGΖv΂o3G}[ K{h|kܯҕk~2jmrpʂu`@\\D'xB3yQ| ,7g~]YK7h=GWא E9ދ,QK$ԓ=Qνl`#Li*E)K9Nwc,2~iԹu:@ӫҠk-"j-q\jݍ=bCT>O5 b]b?Ӹ"+ 1qsQ|5>Z&h*=tC_X43~y޽^9+VYtc?Gc_@ԑv9rbAu&EAY]gk7KH6妲x@o0z8fbq@&c J?&RmP:9P ڶΕDp˜u8?zk, 8, w'r5HVoMJXeՓT0*a:h`2M m $!b)J 1C1bcDy0IVJj͝ael&[zO)=MO 'JRzğ^Jo;ؽ'ahxڌZ\TW>7 exS0 baG( "`$DT[%buLz٬&Z{ښ {3l-`sOwbV !;XI1u3{Zz7q8hC</rLhePrRCMK,#x ZIXޝJu:ҔV^{/@5,1! C_C^؁ lŇD*No s!ډڽ +"Cμl aY#0No@jSG(sY9 Yy`qIi0LMX7zΩo3Y &\+:W~1䳗LSqeyM ?μCa| I zCy/ 퉚rM251K P U(MU̟8W$P9y=4W9GWwwݽyWOP޽ᏛIЖ]{ݧp!װ{e벑K祽F5WeeCKue޺g~#{VVy8q8PO@g CPܗSYHֆH(T!ckRQȷbKe`II0 /\_E%hԮRyc]Z^vM֢#7dD:rsW? N+k 6{k{G=udGXyuiG<3'%uZ}]ZPS#wD`J516-TI *gLYHUt?O|}2r6tH&rވ0 u,O7S4҈L,<Ы-g(oz1B5C<%FN][Irv[_icN8:60,^Mi t2G٥,}%.CzG*GS֌%6rHÐ YĄvq$Pr>[(hVOh{Ձ{~z>ֈMs?]9 a=s |@H@ `5pN*p2ЬW*=N.jqL܍I;z|W wă5(1_&de@=uN>Z1I'MLQ 9p$ Bzn<+#ob,Pe-dZxG)"u99t@LD./v'j]^ze!XXEq#9̮ۛM(g,Gpĩ) W_U@J.a]5CaoFCΓxyf(|ko/%H+Yk[ ƪϓ>bSЇⱆqSj^#>$><"Bp^ˬNu^/s#N3S,'_ '"A'Zu n,\k  ijV9YynזA ũz1+ƫbhh{<&ͽԅ)N0sn1z+'Lж>~ }c{g\_wt@`#\CPM'8c[F2XFQmv,8K?zУ-ybcɤ"kpFֺܻkҽ-/CPEVd2&1@:k(5א(V"0fD;8=щAVʧ^y|w2#T]FpFTJNw8T!Z<6[GW+՗,>H9;ҚpqvD|)wމIux/ʤ߼o.B7lpZׂ+:kXCc{M6׌̜:SlQ= M55__[sCN+Gհ36w+|ak'N6ngzݖggϮꦙL>d[>,4؍r, ]H  5yNw۞xi})*DF9Uq󗦦%7 ք?ZWx[3*^n垲Ep}݄림쳩cg@v *'wFhm\zB˔yr)'ih1vZֶ.0ޟ%{BY~CyPsO|!cQVITtf˷={ hj u IQZKxV| Fݚ#h3= , A;RU!EE 6,Ki(LЇ-mVNӑ-L0&lo@4 }B= {NCʁ6sV %r5exm[*KX`Dc8jM"=zqUj{jRㄱڎ7.^||h+D c譽W@Pe}{ihd@;FکHIJxd [YbI(z9 rԈ NyT PMe\ <k|EtqIn7mw_Tܘyӿ2sXN7KGNqTc`,|#SLQ$ފqch3ԣ&;]7Ig¨1c#EvO|IǕb_<  ŧq+Ai^<8t0XEnI!ĨN b @ QsunӜ X-zc# F25$CSE IǴ&+9d;pDQ{p`, edDn %]SmE!D@yg;.gRѦJ6B"1blG/G"6l\L9zqY/:Oݔokr3;4u^4.qs2GCPI{DnCF()iDc0v(1^}^dx*Lm*n$iӘ &9b.v`yCo2n}bjx_߂)tﮂ"iq`8p3ލb_wT3;=/ z BxD1 }?{jEY]8Y0IS)1EشNcNO"73UFyt_>@?v|/t^8$d$nXų]ѕw(QZN2L"BB ѪY6P9lGM;=jNa?iևB3z9q $!E)gQ)M9%851\n i)j8! ۊw_>v;GL(Ƞp%)xZO܎REI?e+?e''Y84Þbc =Ĉ)n΀]@AӢ{ +mRٸ7JI-o$|-o?SL)**\dĕCYr׸ [eq: 10![j'in#Ȑ#A5%q.  )5&tE/U Ge[8~?b7/ޒ,'umm q;Z~ǵY8vqͽIY+TNd!X(i7RX qfYGo4I՝1mׯl(>}ΈjS=pȉLojJ ٱZlPaxFF ̄VtO X#{EFƆ31EqMԖZrCiؕAz#;+=-1!(*BA򜲈~nN{a P 51oXeɀQHM&}XF~n25a :I:9Ia& р.H98$4-n8yN%#h4;k JKg\ 51 Kzq\p1^}_|W!CLG0cbEcô'q)_萡W6|39PPaRqit:hj彿/5/~E818oy?ʦzM!sNW_s@S ܔ'7+79[|gg>KGeľ);7}(~1wvFz27Hp{C(J[!=WR .R֡~ƌ7.!s=kgpW1Ͼ6oͳ>Ra݃W5f*\rY3uD$-gbHYFwj˙bg#Fymʡ9T3w훿E);S;w᜻DD/lFdz@Zî}ߎ_{%v?ۭ~ ]~sa, ^FM m]$uѼRt4P;0]l~c䱍324<, G/ԙi.,zh(KQ&[OQwT`Amo U4jUĭ[۸A:ꞩ F|Vn4œFغes~ F;Gݒ41OTwĘr :4SL9%4&R4S(ʚ=e Xjז Fͱ9$'5ԏ]{V`mҝ-7pr-Hݮ^ (dHQє3ܐ*cոEbod)7T>ts,R8O܎/yYMiE$&鑟">{Xh\>*8Ό}STC#@Ifl=Kc9M LŏA9xZ8dp#0 9$HyEp2Pz)9ȘKIئ2ĉSOe~ٜH)6NmIBיT^߼+,Y>چJB81$8P* 3-uB^-F|/{[>3>'u9]u={ГH8ÿ^ Kv(Z BRy=f׮MgDڵچǵ&. YPT \cb1^Z <Y r,@:^/;\iD[nk^yŴb>|0~%m/WVK>_,a"ӌyrYx+ p!a~,9  -5%UM8N )?+x+s}5Ә|hwc8">2`33ྫnpf>Þ'UsdDΎĦ= ߷2zQk8%rD$  i\$Y$Ct}1J v{!k{̅fbcqŪΖ 򱇏SחO̼b [qz[06E{EiQxQ߭)aCN9|6F(H kjTKWSRAP"=`{WL8߿b/ˏd_tO u\0ckWX\1XbOn|=( JC4$&;@<ʹGGtkbL1$8sW“Ju+i >perP]%1W!47{ ÿ>n5=w 3+eGJĄj 2êfbMs9>.Ko*(n:%7}C-ã7^b#qg\dĨw@a; @MNe @. PQ"R4PD)kVv&iR򓬹f@%ۥ348?6Ȯi]܃;:M:4 N0bC:9Yl(PQ\52T=$|1Rb@Ӊ!E9k99X فw;_y`͊B}6楊A*Og0eYYO!ok.Cnﲙ՚G {%2:dfY1I$P*$+0`fw^wĤh2NrL 9;WEZT=oME$[(U>Ík:G^0iQ&+|bѨ p@BBkbAOcUd7>->\x'w>wF ϥ =ŚlH # N!0b -9}9rܡ'eJkv,MNٻ)ێşѴqNw_3I2LOs:$ e쒠&@Akhjy}ıd7׉>O,_-s*[S]MM0g/|oiz^a0mKz+UQcdT5 īE]tz:d5&+M3'N9}i>"qFv%uۉ1n@:̓w?֯Fo78kxc#Aw! |ɹ֙9QԱmPoʠpiAgf,̪ܗ'%hL4DGtX}co:{5K5j33k˧Mh_d.VR$vb$*25䐝E"eIR#TQG1rnTm)&WNp[+1Nalғkd6tŐe~bIi}[W<׽xf>^s6SB$"K6TcCHkDZQ~nU=f=xd ?ҢoU|=F/o_~3{ڻkJGNC ߬ogL,hG }a`qa yhwS2rέü \JU<XPmC5"pYKM e=NB'07estr۶.Yu=yt&^&~:9ѯko[OfՑ!nGfItUC wܳ_xOﶞځxnnWý1:-=^W| nj؎M)$ )Xf-zWL'LWp~bо@e" Ύ6YAc vAy÷2vOr{5o{'ofQp|q7} ]e$ IY7,E! +(WE-'ׇA8`ref!) IXKrxqUtPƻuroדּt9DLCF E.SwWNuҾӕO4'| vfD(Qì>=0+Z MGV@``F1\dqbqH4T>ɟJ=_P*ַN<+\|wM,}N}&*$xс/kݔc[&#r?Fߏ4@`ETFMɳK/E_?/a;d(7Y@E^[6p[܊qlffVe,AEÙ͡N"/Nj< smrs稱A4gsInqc| K?#(ϙ}bD߾P9,o|rJӳeuyVWl+0k\y>em͓au1}=?CNaqdm5#kV?a3VS^ij1ފ( 8@ u/1NI54˭juXw /3Ce+UeAccl.GM4`tf$k| {oo UUNPU鋆1 c.XBx6Q#>ɴBy˻ >m7F]p٢k6?N t_% P(=/cCQ|  c C( "`Z$vegd˨Uv} QsǓY˜sK7U]p7\{-Q⊂9+w_1k:T'orx`lnvymb6]XdÒNK`J fdT{ l0a[ RB|x݉xa:%Y%{rXtSp?R^s/$+YZhF5NkBZM,aqK3n[0vصKaAbVN{D1VK96ispΛǟXtZ:靐%ZXr'~|^A CrMɘ:q/[%uJqM?V"6Y.za0a nULfCNY/w-vN/4?;\r˭ +*4, ϊ&^O(oPMD2#|ZQt+O6 ϰ3b==}9N~B1T'rq p[i71J;@TЅ}~qWm^5Bkا[{u֎ KG1^5|ّt+VrHpiu!**¶4RnV vRh Ʌ\+"=Z0y ڹsAT{}M۟V:뽀/o]&]yIKZPmߡMǢMz[tD h˜4V eU4/5TVH¬ I|m'buơ]u0wl F`c]" +LM1bjix1Hn]\H;Jtl, ^#p#N3̨GGGFڳ2%]lÀb'bfZ!|X_.Md+)dx]3g.\D% A) I9WbQlh9)яߧtKW1{ֹc~N7r+$܅:~#Mtm ibR$rg0&}03{Qܧoӷva쨑c++78pÒ|Q3fZR^[[np=d'=F\<lX VB0#ׅʨ~*)3AdX,Q(9hqjJ|%([g|$?/%s !#C4 4%'QrU9m4Vk'!bv/L'Dc||!6]}BP &9 )LSzGOpH3#>aR-y QWs {"اG:furjr!R-aA.0jR R(OvPǕ\1v(/`pۉƹF{䞒DZ!_%&H$Q4%4W,pfi'`lx"t ]jǫs(GJzdxשbdyC9:&( q{u3Rj7m ;jh. 7~IYGd(HC8 tPd +tK]P$M/$L۩BӁ+VPE18q>N7s& 3*mc ZuPF1A/zBub"! a?q5s n|WimV\.Nth3{=/=ӥ‡qo_۶T٧9ݮW /$s]I@p9 C 1w-=Sg7Neژb1F IYQC̴CgryR℄³'V?~DïYN Ƹ}SGof:םFȩ'L#8e;WГy_~8FwQnCFw 7dY;s^(,i'Cz-Us}> lV#Hқ,Kg݁ynf0J,4[QoUGSƔr0_e )HԵC{ ={ڻ}]Z{\i2%)AG 70';m  ZjnGy-!u~w-|ժq ^c]#疳̉4 F9ʆV=]Wn{Sb[rZ?asٵ/}tL%u|cuyU$Qz.?(BK v:xl.x6c‡7ƾ?ۅcv[&^.D|5ʎh>E||D\k$ 8;b(r[=pkCG4]'QCk߃i%j ANh$&@[mDD'C X(^YzV?P^_8?Ywղ&vy_֒($y!b(1GYwrF|S6z$}f=}Fӷ6%TIXt`@1%KK"cVRq 0gR2S[jXw& n~Cq}ϢCT-}1dQ箋p}& 5,:ȯ!Vm_,{ϛqүMG&@֘ q#J(0 4?@Gx:ոc~Qa~],KT"-%~p2N?#%buޤuG~o㒃}zX ,0V 3~X 0$BLX+63j[bǵiT 9̌fHӄeXj8\#WS[R// lL}{1ij[ bJ,D*Yeā*.lzGހ#ɊvtL>!)}`sg#1^k~2Ƣ)Q;ݜ秵Q<>} $ 'Gya7vDʆ_0aҧwE#J?w`gf-Yxɓ}< eAzCZ0fCG)ʻą8gFbBMbc T1P9%,黁n%&CU͸WPu=qR< [nF f_% |{qJkhfE5tU 7,'m5 ^}N2NsuʸA*︍c<3©Riq'> P2 E!5ԣ81a $?>91 ;ޭ#G0Q7|8 m59-ظzt%y<}duX2P+Jf 6&#ۇu7 ]C5 Fw-ߣOq/Z[3ïfaрR{u3N,J,&T*nM^.ؿT٫ݽ{Z2dg9O7 /#iZKR钕Uc/[bQ֝:Ė/\X^1gN<tە#‡c* ViD* qi%0S԰}5&OɋlOZ8m5E:T"vA`4Lv^+ l)S#IrHA,ϕV)+Ҫ·: jӫmkxϩRHUr*py3ݠILGhT@Ql'j{q pvl6=v 2lœ„ƍic0?O+_bkѽ#sa#ٳ*+1iw+]y]s(0{VȦ1R/4A#9F ȹ0y d-ruF Z0\~2Lǰ&8&c$ͬCzkO4'biNwƦjk/#F(x7ٍ"Hד=#9{C73 tз?R_+Uy( b.Xt@z>~4t :| >}9,$I:ooS'2i#(.DR = HI_F~ᇥzD@S??cJb;l4ߒ=ȷ#?]%x{IyQ Dfr e j9U'Rę:nF>4#DNf<;]Yj8OJ].UɑŔJԊYy_n^V>OwwʷأN%툒5b._&9b]F=b!Z%P{IwdGn|*IYCeX NYbQoꊳo 8'?jTϜ>Ӗ-^v=/٢X?|;fN>Қi'Yɽ$F%%FT4S)M22݄b}xJ)}YvPh [.P?DXYBRůaj䚹-]e!(' KCpabK=q"NҞ$]&? 8BCȖIlh|<=coB`o?w ygOMцރG{?n䕓]`U-x /I{s͸ě븻~ osmlɫsk*gqwD+PTĩP7= ^_Y,IGY g '\P࠽jfԎ0"<{B|1s`=( _M^Y9n8[<|PzǞUYjwP6 aY;-CʨeLY-՚)^$1hglbq9P%l{CvPc.5*{wQn/t?6!~ߎ 񁟕Sz_7 1NbG@v8A4P@11r {q}={ͥ['8>rD,mZV^VWRpyg%r?Mw+lNsiR|psv1U\[RcT;8:$G!;RJKǎ #cĎ9cGmӾUffZ[Yիv\ c}8q"# Z)UPXnu*PvQM7.=M~^VaV'N4۶tmG\/Úq&GiZ׮Ʉ;_ZCjϸm;oZG?SP'>K9t]  s(t.6Nx1&|py"ٴn¹s-޹;7ΟtV6mg.+1#z8aԅIY=m^QYm_xg_9a$SX+IA0T*7sOEFc~߉u!^uUȈN%> }Zc=gQK嚌& B$ uaMDlk Gxqh~㯌AϿ8/O9q<@ʸٓI汻[=q 4#-DrÄ gתxƁM$B) x Po rg$29AI+1>"oZzgNcOt})j߶S?;yH5k6\i?qq gyFvЌ#4mm w{;O:VB*Cgi3gN2kL6) ;־<)^!膫\B qLQM79.>.MV &/9K|9 2!fg8~K*^y]%:"S-5\HfC fq`s]C'!ae׻̖-1sTG[6.eܺ};WVlL1t-R5G^~HfBD-@vO9QrHNRy 31L|fN!75T3&Yr䬠c`̀xX~̼{=c#Ky!z( c^gϘ1zBMx7 p%TpKJ xCZ.p+I$UY}cܲ%vc SE{<,~TC0'{룾{hƓ'><" K"~}v?_b0W>^#V%-)@A1 e83Y-/{%%Rrqkx(96lt8|h_p-pB̛5kNѷ x8ovkW8vlU:?鱶,2ۏBӒWZ%G1-YLN3WDVVNE9b\6=܄A]n.ר*B&ý]Ol"MuK\mٺOymbsL1 3^ M޹|.]Z<<̨PtP Ф&t;:vEgt_a;ˢ_e|'Z!eZ)p 42.V3ܙJHjV藯MvlY8]T G/N*8gs}Ixr#)A8+R:̬R=>@nbE_]7GFKaRo4bӏv0]L'$•zU'Y쬡SB AFyGzZ%%F@kʺwYs aʰDD8flSLY_ݼѵ(ޭuh-3B ]`=4nT?h;T=/7.sـ;%~'}/۩*[b FSzZ!748h9)'N\..MU'&|h} pX=~J%%]X' YbP3Ɣ \!p>$Dn ci4Ǻw@(D}Tz[vfoݡMǝ?+3Bf$i'i.v7c7P[&iFe6+?29:7޼wiH 'K㎴a?Joz w3u[ka! ¬?O`qЯn+`فZ|r| SB qi.fRݵH<ϙ0㔌cqJD2J:YolS]Rc};_ǽz zZǖ9x? 12K '0x@C@{sJze5kDz; 6}W'Uuˬ_gnhw5]K z"ipfcMf ESi3ɤLawڭ8As-)O|ƴX l4I$JI"Fa4qEez SLJ!$)5)5&1&n3bm-Sj?dh777{/Dn*Qs W8Ux+.ovt"dz v5WJy">y@XaZֱw>M~ꍹi/ų91gtx.'ʓt{p{7E`(;T% 1ARkt@CGb7{q~ =4\>.'5 #k^jeT ۹Y:^ e$.k1һH=$W/%u4z&ԽR pO5rwJ1sG͍5f42KNOD9>PXPDg,mvWv\KvϾj|%W%^\:9Ḧˋ;?# !~g>hARI.29@Δ^Rjp? MˍYT"!7S؏W A!)n_9POq''?Sl.\&W'_S5rL7)>ezї߳{ce OKMPvSPdV9OƯ\{* j#7tݼd׎!K7UTo|W}ѥsn@H7B؏X҄k cX"*=`eأG1K:8i'swaVsMC|բ0!2B9*f[%MHNNf}vlڏӛSĉ}$R&?]SžnGݿ QH FnI.[o~o.\4gH1H7;jCżkEو]: k完v=a]z5K|;cP7Fx,Pu)vp} 5qI"ڵ]Hr:9&7X^x~~hrNe⮖Qq阠xnmx!3GxӢ$^{z1|O׳۹^$5|쁄p\sGGqf W[Cc  .O1 -^4};1[=5/M83ԛxQAGJkSjH~!YFf\,[Bt9Q1ƼKڙ-t8Tի[ E Н9dXc (~!{5&O.n8jXCOE<{z\gĞ$j:5dN7rQdUIrMuDQ8w(JY 2 hf5PNB=J;vk-ds35ͥk zyxf=[ܽM-գUcT[`޴/uk. 㹡{R$٤;̝$7BPD7\Ʉ]əV)i)uZG{vj%|h|N}4ǎ{[jDݐբ7C۬aJ-6_i@4f 4Z#CA^j)Ijݬ 0{ OVbu6߱Ĺ6I^PiPfmJQ}FΦ(^?q:ecbv_YT\1Mg`1ILev0n4q1 Է4?MM/dV9"$#~\[QZ80Tw'@;c9p91΃Z}n߼e:.nj8ȪŦ3mn|NFv.~9[jsu,8y+bT"F\(I6RGW&1л_ΐ'I@ʱƥscxo91H65*53{~1鎻^찞B/?`BA6rV\oxki;|]ZZuZQ)Rx@s𸾠6Q]?YǂHJ`#8'9q*v춺>r9[t˕쀌i`A0&Yst2; # b&BHp'D:"AdN_F t74s/F k~"@}CMx/43¨i8Wr!X,KAdf?}<.]H5!{ F_G 6OF۪WMkRKnSedZ)t*=)2dȱ>bP^[~~wK/d)t!4Tc OI ;%jT WprhԂ!}L g9%.@GpyRS\?RV[ɿT|A>YytkNM<`1MigW D'X(HP+r%3=\. "@ ߾m2o"/ X렼_bS˫AygĖ-~D}$ާOCBk;!7 `i_bmdwb2bPhJSԢXw0ħhj5ԊFt,a`8,ʒ.W;#F+vFB!tNYOL?N ^t$鲷@1Og)*.7%?J:{;I0A6 r%* *\ &_w 7] \Wp Z= CUjC4|TtC 4^6HD+U.mbBߚXie 1ǥVHiRY8"zST!ǯ(qcT|sK%6B,NC4N <3Bba:.‰\zdQ9P M !ڜ5U;C;Ω|a?./f'<S/׆h@9Rd?,̖$pVhL3rV=K 4%Wi* v67k>9O0|l`4:#8>.[^cJdf*{Q_Xja@-l'[@wBJX,F >bN!CsLk>Yn||Sߠo~,󰲲A4ҸY׍ZGIAۯC /&o8]\+Ue^!jO^F"GPf3XwN:TQDՈZnti_@r[nJrL‰<&[H.*fzsbfc .{X1ym{oY*'Gٮ4#B޼^bGV<|;Ƽ!Τ+уTIr8pEw¬54I,L%t.$wN}X*0+l>R]&ƿer驭qpH)⸆~5&$b%Ǻ+ch6r0[ ab;}tWst bw%mΰ9/2 -=ȭ-Üxge9[}hWy[]\?{gk+ z] E3p2{4 bh7!$ra:$ Ry9hЎ1ܟhТfhP E?Ι9g|`[6oݗ]Uty}=g+^+ڱ#g(IA=g6UG>+hmPY6o~y f7<R|zL\?w??}G 6yr\eII> .ߧ‘n<}ɥ̪;gQoH]g7X\V~;n=z.}J1nvsϷFϹU2UxR(|? |a?zWfJ5ZyekVmYLap;ΜX3J$j2T_1GQ\ᛰqHueqvԚGc`i P 126ƪw ؜#Gbjp[ˆѯy;5NԵ# H590˼E65f\K*X"όqF|->]A6v,,NK `]|AS'})֨Gu. S 46PDC:K ˂h]~t"}ៅx&lWy)Mۏxl^D[ ElCR!P.l_[wTw=ÓނsoFʻ׷Z>iGNׇk^ וb*$EEUGCd8XIDEEAЕ(J׾}={ עctbY2$"="h蔕U;Sӥ%yx=rK)~pξ{ga"jum-F.gM^:h|*+ǔ(oJ3 xj ߸~j9^~#4n\ =w2Q^pcTeKAO/0~hvM 1D~4o.՝ ]UmOׯun5]ʾED_-XgU4J-_ )>bj1;+=PPT4">'|!ߋb↼-ovUf$e+ְ0kDm]>6;x<`:, G<:"@֢˙(ǓD? 1!# .XzeK̯?wiSFL1q|uQCзOzv'KFmZ(&=FrdnJ)d7+J{/b`RBNk;vl_ReaM%Pб]xٯ1^%7ٓ7{_:|ƌj^IIVV+"[}G](>hzVE$!3WZR ̓*й$qmWHfUvA8jL 摻+Puĝ*)7b;$5W+hZ$ _)*VOW[45Bų}!;vCY/u$~GP[Ī7x8҄}[l7=L?ЯogTyQrv1,Nh)IϤx]D%ꬋ? DSOkQJf"2qd 4jbE4mc)'H7⸏BCp9/&J*Z;85) 9P7M VyehLbӘqpj<Mo%AkӌWI{~5F "xOѸ^7Q8TH3 SZ.@`4}/{f:}Q.Jjx`~C.,{e ?߬eH!,c "&!hG:Y'g _yьۅvFI Q2b|7fAO$% ӏKhHxiq9T!bT/9!z!5~提ITa>. Ux  3[ @<N\~MWa1!ze}WR`zf)| 2xp5=“ WXPJ6TׅK] !TSuR(^4x+-z }םbxG|vNZF_}OyF.x/ 3eysLq0ʧ86 n{HcWE*Q,llk!w5<󚾖O5TjCbEjSV&5-f\0$m"^g{ n{)LՙK^E:f9RymFR^˜)W⩧H.nkE/"9FqoQ^O/>{wn%]u8. =vO}I4|kW=, WA*q0r]t>4AhQjBe  вձx~xL/sW&󸘑!]Cp%[7<3ԀgW8SB,T(FqU';qri,BI~(jb'[T\+9Ouh5h\6g^jŢ%[7d\*oP\JH6S)?ƃσB0%Q5TAgA!ܢ`P &b7sMŋ\=ӝu<==YltqgT,<4tϊn"3)? Uhv!ǪqqAQ)ׇl]qcjN[6W*^Vgrm|}Y'UG~d-*R6(eᴷ/*D $696a~SRǙI0)\Hmfi :<ϣ+* _qJ&Ϻg^ef bfQ)m4?q LZB-ZA@ErWjhl)2̢\9"v&9a=çxH4}.y_E䄘J )Q\倚(g,Bf9mܨ)q6ZA7kЫxٞ4h\~\?O>yuigO8[U{q;'j8f_[gX qmɱvmlxtFMW&$"<(oC aT =**L7 &bWo*9Ҕ}z\%')' a?Oas'c9 \L|o˵:23'-fjNɲ3v:~o-'uϪ=]fE*:v>"K4V&acjtB|J@PSU+zFf9nl%N_M]3ޠOKUR2tqú&zӄҾNJߨ#o}^QV;ҳ{\Ydm|ၛ*Vy.6\< ŷ)/ %BҀju2^lx)d}yy ͛ס= ¡5Qx뾥ڷoJ9lϏW.ʼnwb* f#݆x1벓ei7xH,4]mUD_e28a(5E Tc[2Xx< Z\jSQK+lr^i6XpӡkDlpZ7Q{m=chQ0lG]:XW8jvհ]}3y몡ua9klą%Qx^3=*paxY+]e]*3pOh\b$T| |*`L#β琛?aq2:`4Gg'xFpp W; r<~㑋\=ǰ]y%D[lSm848`pL )QA2R?22M KSh )!Yli&0Bhz\Q@%gx"`B6o8]{ V1D/@ތtڒ ;;Ԡ6A`a0. 拌_>y^ğom׮,^o1ciRvrOC+xjځչ랂o3uH?D@o0@8F+Y*w3ns%fk7 Y3ҙY ?77+3'2/*z!HEߍ~{:h%_={0ؔ?Z3<,R#ؓ"#-,:>귳\q9OsRH6PªzTVtjM۷ߵқ!e8x"J_\7{ WL^Td({꡼L=Ց3WL~׻VӬ;x/VO_wTNx!2}nž!` ͌̈́ɸxc0>x%Ŷяݣ"9gHm!-TVqAB 2%pMoAP !U&w%v=PY0l|<KYsG<<(ex͟1Mi+G8d~?0S~^/pD[~ɧ}Wꟽ &$Ƃz &:e#uzyF 8;5#Ԇ=!ed+ p4R6N&aD!aJ5A!T- 73zztyDx`hKUf5?XC[-О/ﮫٳَ{uv^?:?ۭ۫k?nlikꜟC)uJc>кkYxKCuxD,>dhIYY &Nhb{S9# {vb.(8hXr/&u);T;8eg@!Q9p,{L 3d."8J 'XܝB΃0JHҳ5fUc_1fT١QQ8" f0yEw?=~.{VCKŻY)c[ǀ_U\r__e׋|KL 2Z{=S^fgNAmxoU+ѱiaAUHPcaarbIhC$ y~!w NZ@y5 RMʂ"N6uhwOGSٸ~Gp&vs#tĶSWJ{f՚ꥳgi/zڌ-vD6!܃ARjw$N‘oB@Ã#ŪR*-M1c~oZɉqF2&P#-‡ݶGWTt ?g땐tFNn1@Vvv.lՕWr}Μs3gΜ.4 +UhP`Ç˞v>ξv6Y⦳W{|BD0 e(Am=\YΓȂ:7O+A#URTyɈ[1ryБ`ȷ-[y˲[ >PZ}r m"DEx61y))w$*$e(S҇^i=Nw`<n.&yz #A_Y5bP⛰* O{fٷ7SbWWY]czzPuձU^ Əe>a=3]؃Ґ7whU?JCJCkoA -b~SUGQjWWժ5_ޫwwV[&\% .,AK[2r#Kv٭Dw3{7q$4 .H՗i|y7K5qPe0yha̗ᤅ02(Q=8kFP$r4oo-&q:%Xf&ݝճ2f*:>. L9/L ]܇4|>zE.:A^j d }4S.g(=#^Wje`^vg8*}OJ7HVa{˗{Srtx;W4cxK9D` MCH7}5Q#]$^C.oF-{bv/1ĭHWDx+29(\#krbB\-; MS_O~Y-jʐR]~xf# R+#VgOcՔq~Οy_r,:S:}9 $8 1T5]BU?qHPUL`>^T΢UdE7{ ~說4~Ơ9[T)pR; gހV+Pg+/f^$g-> ; !VrMJemU]MyUbŽ_'|sT٤MF[& ~Lja[6N,Z;gn < ~ mwΘ_~:gtoUVn{ݹۓyi-NBG_ƑjJׄ`mp vfbhu$;{/NɞߞWp . dqK;~S~,6-lYgC>~ =bˣb{d'DY~?져TprwI q}oҺg͌.]w xOډ:DF>m=X;eh)<wFe֟|1萮Lkv/WAuHL! QL藠jprs 4|yBքGi91!1eE9jx`CB/Du,}Vj~p1NF)Ge nthFNhg}`Ps>sxcuuhm>D) onra -~8պwSyuOAU+ڴt.-GֶYeתr=V9A;#cqY,0b,tw;dŢ#۵+aw :?(tfֲ*yC!i;s7E5!|R#TG&x1R3,3ńW`039| ftsgϜ>uQÇ .-),?of2DŽurw3CքY7xdƙyX8 YorAR r gQ"kɈ-f%B]+ܨ?[l#[٬&O׬`O$F$&FE%GC<3PGYOeA'\xSV@*X* ,??!PMUrǏ%&Dx$%n?$.--'طJqҠCO:Fl6?xu&޵zxz.kxhBFHuMgne~^Í? 9z,O҂aEs18<>"߅G?Yiq:˺ GvCYϔp5]/ 2PO^Ά(BUy-]aRN+kPèQ@aaa;[@tX$c j>](=5$iyަ^h^/LD\Q,t.șQb!2|b`z|\|~ݤ]6n$HMv2q6᥽"Fx5~Ϝ&,W>x`1|Eg9'o'e?F`(?ɴeଝﳱ t d~2.Go}GG[`69Ͽr/hn}{+3+ أr &Ϛuq95F!g}ʯ)d$D?Cd…RVCB#M%W*2'u3a8^Ou{B5],jkM9ZM:!X{RWPg!8~x@؃g1{={˨mUb/"֪EUlD]D=Jw4ŽB&DR7O~9o^̓SCW`A1ss50nпzUC Z׬׿uKDǣ#.j#H9N_i =0{1WktV,Z[II#q41Hr70L%!8a?ubJe_b"4Ҩ=~Mo^#|838wTx0[u[Sz|JF2u:4Gtl^$jgT)iߊE_ ddX![@[w?~>v9qC' }3R֎{ؔngx'C"?? .0-WpEj dYM @q|*?1G:efIӫ\|\S]£cڅFC&) x h% 2 ᛏeJ]JeJ39< C-/loDXKehXT4cnZel3WՂkki֩OX`PLCWC$Rahsz'_^E=8q$Kf}>/~F*9*)+Neŧ]0{ߑ$pظ@pԵCC&LhաxpݾBn^~m_Xˡ&xrExk םY4L+#74}pd”NNK& 7ʔff͌9!s`p?@ޟZ2pb?Y]w%%6&%9.6_Ew/^v3-eXhZ+ZZ-oe#aZӖq"boiˊ O:a8~#c#*<<a'QjIIjׂ4BuWN8Z(X[s@7*( ?L%͂p+}^<2\ziSuL/Y!Dq}d(GO0xTfI~~qIA^1 w5 thp_|u޽v-YvtKZ-F&6 .H4n{}p tèFE4:/=/F,ڂU} F9{PfώOsR Bd;j%QH.bycKM[<1YF6cP^%Žۿw_N/'qF~L8B'!:4ˆ򏜺5L@-W}yf.q $d b>yqֶc`n W}{Uһnma4`씘$vW`U9u™׎>&3*u~}D[e90I۵m/sуĻz{wF|SUcCU i rO@X [8#Ov} 4wۮg_J2IbGssg{Qi <ʄOܯliOeOpX1m@kg)Gh%%3w^ZD>wdXMVH)nźK^VyiV1M"Ðz;<]66[[9-d: Ty)kj@6jA@Ƹ[e܀wytekq;]]ɣ 2x>|~E#st^Ǵ̫_[ڍHmƍ^U/x|h渑go}%^Mc&@yFo}4')sbo;k-aej]?y[op-@}ْM.ۊ? M hv]KC+d-&#r-Zs~Q:[ p_3c!._ud)]-,eZ'וxJ3MiiK)fl(Z_0ffu1;-^X`.ڽl&=>7 9ݻhb\:y]|; UfǚQw:9 o.WlY7*_U[s龘3ܧo#ҁYW{5w6¿+ܥDA氶|WE м+zF<& ^}ͥK-N" @$翵vGhUs΅;3w,YFmYcYȲLXzQ_q,Fd8heȲ,㐃N=gfdܢ.qOfj}hߍ{8T06ZLh L8x 80fqֱħp'bc)ܿlIyh> :u$2A1,$  eM'A?[FAdO[ѸɵONgԽ< b_#,3x#iv삾 LgP!n;ꑽ>+i \ɋpx#x?}\ I_ReRkq1n.Ayڎʦ~4S9640X~tl]u-xѽ s~v U=֏.wBҷ̄=y;.W=0D:wLZ,\8ȼC{⣯oUߪRM4_MLj*9&9F\6H*SPs׹b z-|&_ w'o8%};ۚO:a]X B$YHp,3p;H-5GKK58ݹ71 w¬0V|Lw`ιr6`#{#XXj4g!Xs_`6Xt{^FʍDF]ail E-3sp?,G;jiX?Z3骩xV3 Y*9\#YNuPV@NvF8hz jmVlO^Ww5AxWw:f!`}y 4tTÏt@. q,ZWY=p4W7q䇳A64L՗y 7 .TrF*Koop c d!B’#>5a}Ϝ#kc&O`seC[+ 8h jwh*c'Yvsq|f'wڥ02 $Ä.Ѹ]l H]jOfNCoO @VkEGQ@:5t2'$ip]ox^0].sH/@9*exc@Fe}mC֮^͕+qPq`p8OJH1 ԱۦAwhB p~\_;Q9+ׯ >]>3O"БKAc׬()$/t+Y9 fn 5rr { 5 \Z>|z0fQVѿYT%VGRz4laĢ4=<?J-DX2am\rq-? v嚖\]ϟ|A`9'GaΧ6-4B!X8$. " 'BީuW1W?Q8e?p!p´ |$L1`ԁ6ǥ\{ޡ0UeHCW,fzEw5֓o1_8>&tX14DԞrCS(lElkeu۠oOa k5jm=Ԕ `^ +S#}t#ΤB+q&FK'6\ p@;\W;SI^@0gVTk>Wo I8}OּKc˳hPY[d?_$8$p=݆:̈́3+9S Yba<&d85弖rcϊ$)A>A:h5OИ1s_B%I{Uc((Pq~xa1GLAU}T ypѰ*2e((Z7Rլ6»'S̜s BGm40 bX_`5W. r Hs \b=f,%Dށry lSBXxf:`EeBƭY>B~F}p Ե蹔چ1I4 h\(KH~т{ oLR???{@QVOZΤDP j2)oh cH NvPdצ\!ζ I؆(^Ov= Q7[=!%2ɯIAƂm#6 J7 h^'ôR I|S>fQ'C/%qV#V<cbqk>J$|iXw=\ S\?rO1c 7 [s<d4 W5'${5bV:;L̛ն#j*QDz/sZpۛ[v1ZaOȎf)@b&fIiNzk-\̰,h΅#H6 64#,i|};<ЫE|q3c1Lg«W5l. qc5zXƾBk8п^m5 i LB*1g\%0O*kf7tZ?%#LTL3aM6^V/OejwgHΎƒϖW‡op愢lu"͸(7CS/I h9M|dIH$H³qo~2>[>z?w98?kS'NrsW kfw/lssP35 . >lx>q Q0\1y;QJ,qaqŲA[9g?4τkxb&pa]I|t*5w]=ۜ.ay9I k ]x]WvG $c, 0=H T/ LvMtg%Yx7^znzzakkKͣ$J LJV; n% }_er屠8 Mw?G/^nn l~P]69H׮Z(M!&d+rQB#s䤋Oy MJ!EJοF=@Zw we4>\e;6.H$"灁5ka8:]Y8z׭`9R&/˷.ߺeSp(| V[2x;aWZImJbT2i~ţ5.LdVP_h5.5"Zy8x_-okh0l%#ܵs&彵8fZ\j;{1{I2A{vyH"tuW:ܩIB##i6GF=Ac c?SG6f. F2\3(ad@x2SCƞ(ucqjno" sX*߂O"3NۚN2/(,7d^o˖-xޙ8G 㷄08N6{``r K˝ ˟ZۅOnL)( pPF1֏>swbBp杧, N=ܠw4לmng?wP!N򾚦&5Fnr78(Z9B'qgB32lA9DhX"c,[ya tov c+Y#GJo(5"}؈p!$dB/V}1O+|q/8 `<Ъ xO8WKPz/5nP]W7Ǽ\߅0R !+h_P&ϫΣӌ[uP ) ž>TR]N#;Pg ~rQ*mr\]ҙhF 2<B7c9:Nj3ewSvnh$o9#sJN"3Jj]}ofc&g4ysL=a-̿T)Yr;׾#J7w-%DmaMxU:IwW'+~DXt':pNb}p?oYt3 GFdӽ{%Y<ž6Gpz8,zYt,}Hu,sh f4msb۰ 4HiF!IN_Xm9ŹVQ^dn)zYߥz>I^~Ϣ4rI}[Jq$p|&y]]]˺딠{}sfy9wPg :I> Eil49Œ,$Ǵz+azε3 `Q.<#f5]WVv2 ׃&߭i„NWXl"m- 8)8rl1[* a }F2!L8tY*5iq8[ ߪ޽/W#5ܨZn6ōx96~eX҂JG{p umFDZYW*Q+9#>) u%%J$]-؊Hz5|Iud+u/.`q쑛d7݅$bDQFovy4q|qܼΧŗb׆88YGaiY $lx9g2zk]b‘n- f}c5|I8^ll*\)fl\[BHt]I]x\T ./ @m4xgoNLLlآ \_ظ_?Dv ]#TL |xO1XrT9 s2\cfnkPW/7/ -(߃t$="ha'LJb#ӥbI%f_ުm7l>kGaaxcCpq`Q,(joHG`ըA[kNGzJ b]`EqZ6 8t MY5HRH<,2i2דL8QXnۅA!5VQ(4LGN=^cG;W-ZJ#^g l84YM[4tBMg$ \qp2#񺴥 |p?Ao"vj2)V*  ow[=ߑd)4JkkW/ZHDx0YfNHМ[ji$/q4;YJt8833ɍ(7] @?e5(z%OwRCcVp(wSHTUo T@sUywE+9t9jTԙ*$Sn ?ɍbH\p;Aÿ́ĭQ|,>f]f,V hnI5n }FzgA4钱w8bkd~6bcC}Xj |Ϙ kɗ,j\*W6.LoIRgZ84:4Ѧ-R1J\V6Ng\F4EgU[`ȅq&eI`{i2HC_)X_NU|JY_Xs. wBz!MM VfN sdp`Jf6-fP?LJ~x;tRBgqkmoWӷn=HJ.2 gFow黷uV٪M9f헬oбYK6VZߞwAv{>V :i:zG[K@p>{E@WKukǏs_+ .ME3>󑹹`f|26󟌌wwoeH0Yb/Yۡ#Ǭ^YMRݿ#Y]hKivH߽Ԯ'QW_p3'xocc쫆>|w!7UCL=5@64L'-^Z:У.g3x}ǡ+ޮ֒Sַи߷=ZyzSJh߮F6s""g3G|;c/B~ ײdecxtf|3ZV^G;]ywfNoZxs[*}/«k-n}{>9ڗxI:GRߚr%ZiSٻw;b0Y=dj“wTLs+#xf]NDgٕ͚s'{O=~tkhKHpCpO wՃ4$ Πxҷ7@swf]J | owR^x&lwf=-z &ߝ9xkwCwf]}{ w&ws朂; :zgônw&v`d֭.w❇Y u-g{`Gs^$~3=! ݭf(.}E[|8ӫo$E|"{N(T]8kcIOz8wAst/Y1lwN,Ou4<[fwW}n'N6|Gz.%4[ex|=f9Bޯ6 {H_#؃z}h^q[5k%ҵˠIb"O'vǺ<#/OkOZ5N_Eaͻ݅le- GZjx1nd$6g}{> t 4$z0IcF$>QG€5G.=mQ(oˑtw;GC.0W%2rW&)#Sp}#ZQ`oږåqT{hJ+6RAGhz*u &*7ԁpmOѱXJOJ\ @]Z[úeߺ@;a!m'x,x)Eh&ʒ*5/[aҮWkjv]L"!-i@3$>AT @t0h+7Ґl`%qN@\Y'-$Xʊx҇Uq-PxGDerKt\Q;XO4"-o?ʓ~˺Ecޫo!ƞ};=CD":!8q R:{=Ψ/7ee؅]CC~ ~|L'<y~}Se7 YFPyD,IG:5/ F ' WR^ Ys+qMPq6Ÿ7O |j9j5;|Q[! ;LmM{5ò6o9zя)oFr3zyo!DO`56[;V~Nt5tv|S\^Z.a@;N38Zю@C-%>s7EǜF%3<}lCDGxv?˜-/ѮQ͋/Y7ƨlCn|=5G@]!MOz Q|+fBu7LRD$5k9jr5׏8OZ?s?&#lCGpuMD!Sgh ok' HdAԚ;c867m}a;'Nxz~_ kkX2MxH'E`u*Z/HCڬqi#-ьi3Wm# j:L׎\^T ңoۻ!1h[8}_dxgM:JNYi%nQ7IԯxtҤZ+[ӣML{E1!My h_x^h3x#6O!5cF\EOqsM[IۖdJdj>eIx'4f􍏛-,7GjJ Vʈ&@z*U2v誴k#+ß7w8[K0o'x;^*<$nHCGn*K'ܕ HID2l%z"]|_jxv$JQp@Ԇ?꧰2q?1]ܯ2k&aF{jxo<5h%]s\:; @w٩gu=5EۭEѴ>쁿|?􌦹˂'-V?$r!Blr8"Cf2`)7/|pYAssVݯUm I[#9n;kA| 7rPSyE]]e҂Ơȴ࿹?e\)~@}&&7öW.ܺa}wWH*#2J8DE5T 46XFJ6 級xm\XdMXTSw7-mW@?Cqؑ5~5c1?TOOq^ڢRD'cIqtm4<㻪r] :0 H"aHFZZEOb7 {^kl& +P(P=u8"6őm 6=5Ke`7`^j-0i3DqG P|n#i!z/06M%B.HQ8f䳍ģLn(FDy.x:/ tR(e]|F-c}nbc='%sUxkX@tQAJL! '%3ryuJ0bQXyϤ Мz0\o=mA>+q[zLV_|?% nȇ9ydXFD>|!7Q }i93 i9Oa(&̿7(d,Jc;`JD_u5ۥNJ̽_0((%԰2 E~X?$ UVY3 co^po8?z0/ۊȑI:="YuP Y[d}553(8</>nlL|l }X b婕>evmm6篵ra ΏQ-~ ? wʑɭd*ߴqbŲD# }>^(ui/Y4dc4./K.Q[VӨ9_/41탗J_?#8$#buW\S{Kj͙pVkҕŰҸ4^ʸ?bv}[ ʯE^Kq=YetȘtN8q6%qY:į"I{N$ۻ ( IQ ԑ'ox| xRa)֝4p?͎[:F"Y!?Ex%;/12C?;hc`I]?|aͣo­XN}ba.3rm8ڋgՉAΐεlζ:OԤj'*C)[`kCm[1˿? o?>pmMoTaF5]J\4;Әb>>`1#=!Ե8l)nG6o2=o uf&Rl M<`kÌÄc^ idEQ &s655ֵԷhaJMns^I&g`T :aghU^ԧB~Hl. QK-kNks"İ$e#Mp>ɋ1p$_J}wdzsvED ED%`e84mۧEMJtl'&YW6 f*7C%L؃WPtTb8Us^9NGR>91OGfsv!sf@h5v>;Ӽu*A0)楪JAHkɟ>סR:,gF[f[nz}w[%i]LHwM/Ӵ}Ȣ>i֝ݯ+_TWCon}3(A`}FLB8aM*z}:Ʊ5y,ZSOOwp18{A_yoO'i{%i]ԏ};Dy? N478a}z3Ÿn2ߧ6:28U<`t@|,<e.vj숉ޞR[:} uzhݔoiW@>NDt=#5=4O z:,O4Z-D۩ C( yaE{AN< )5{O< µb=O\u珋ll.6Hy-5Jq*-7ZE:Տ4_tC1iLޓX9𽜯wm; ^ѽ.ޞXy$Pwn'-9uw*B_k+  +i:9^*a۫)%@Vu6o&im޵yo.ؒD 2%XQvc>7?׊ҍ%'&Wc'=WΐByP@;b:YzXno_|%X,\~5Fj ,T-Lc89u.S$uWE^w%a|iAd;vY͈P{'OKދ$~ ;E|C=[֮r,IyRB@sRSE7$Eސn[b [~ߡs)7ٌ>䔟 _zo1Ċ,=zY.\]\ނx7:gw]up/\a҂墄%<LWǧQaOH8lvZysn1֡LIU2_W(z\I?ժ&|=ʇ?6~h=##$0C>-3f쁣*w8 OE/& ONw{|ޮ|kXc]C{^@_sJ@+#U.u٥I[鈷jtے l|^!,W[ʯ;1 b{~jOZ_&=mhF jg,x/MWx9 X뤚܋J,:{u%mCo-yW“ gcOgo0bެ&gE߮skk7:߱aޱ3{6BǹwLf>~KMnSkգG`5o;͡>4n"Yp~,b^V1&<:6]v鍡!mgJ+ѓ%̣XqbY,9 4cEACLr;HFtZhW@?G}jeeNT㈱T:t+F(wo4 _.kͪ;NK;koa8T|~h0y0a Ï:RJC 1V&_%hOjKsERP8%\" D:>Jҗ(4s/q ɣ \UM;r`6>N2ݗMdS}J~?wދzX\~\~"E9 Z&h%Q_\LV饦1958ə%Ǔ}8ymzZtAn$M9y!* K:7ߛN`B~@.hi1-G]/qWt_SIKq#3eߗ={\$-/g6 ԑnScIŒ13m٤6GLnc܇ mЁ-L &Q$BЩےf(R-3Ϙ *45v\Қsvc{c)/v =7Oj3)];=9%8 ~+wp]Jxþ{~kJ)c0ڂ{^&/쩁x$W39FN8N8]\M-2_4+,:)>| tg'_QK?[pp5|i~+ܠ`K!pq5Sk-jybF"I]¼OhiWi<\RaphYDd)zg]|N[Y,HpGn})iƟg4<Uܕ(䓛ѫT\@Ȥb)@t&ie?:k~9 ޳kvFZg6ڐ}xYt۞;\b48l2iGUiG3LjKZ]uK ϛO,#':FoqQ|#%cq;ʩ:+T!Ih#(PDH JIȉAww2hHC'{آ{WAn3 I8 }6,> ~L芈vg26 C w&FFF6lKxc^-^sU7%\?N~k&P=4g=BDR49smٳӝ9{g9@WأgK [!dGykQ֡'m>)#>podF^?zl,OaDVrW MU}虨o d?Wҵ?:xK=wJa܊5].}mJw310EaBh,Ŝy+*>j!<7GV(拪 $q ~%p\Rّ4k׏=06o:aC!.Z] ΀smVCsb^Q7Ffk[g| +d vm?AKKp˰>ɉr\wZ|kՖ#m4-Wה)߂J!qxl~EYu?M?usӣij:*í8 xBsG]q`hLāqOV ml`/C,\N %2t>!U{*sW P7+mCR1lj\~`#Jkr6Q%͐ͭmV#'_UzMrmGny+q2ntg?k޲n5~`濽?1G-(Gx?oOs?{113lSPL!^Lj7}.Ytd.VTڡ UrDCo&\Q|wMTWyķue? yyQQ#J86lw|UaWp0 A:$.č姉0ncp~8G'Y} g/jBƏ U&\&k}ϗnpizhOH6P1De"8 @ƥ'E(> G==!,D:iDdN^=O?S?1=~AA},*%+Vu*YUcu!u5kzTuwY9 @9 s2k5k8 [A%3Eb)~yչKNɟh+^p쁟vg>{Wlvp@d56еLȝQҚ$VA+ ݖi%"m`$61_򫾘N'νn,U[}]luaAwkC5VtOHN3 rJSk6\1UY!b׈-e-H b_e{blmzsͷܻzgu=۽ouxoَjh{$="MAAE l@ 'e0rw5䟰j~܇_gf/բlu{g?>m6_PEMq3*h2ԻXQ/ \\;x|ß7!e[U=a'ziz/՛9uy(YBSQ=y׭^bAoQ]M2yAkj6n-s;ۚJܑΤvm 9ʥ=3qҲÉ߿yE|H׸ϟm+hW{1 P\IHZ[&PmN6&B?Oo@kYa#FD < %;$H2hVTYeq~iƣlȤxT`\= $>TECimEFIP3kPcHaǮ^hyAҵɹĢ(>*w_Tkff#/?տx>PKg6w5:cDcxpR\0DRpZGHBs9\HfiyK ݀~tc@k'h q -k78kW ~x$?1;-mӃw\sڗ=37e*Yvhsٳs|@3|&Ņ]%ER.#cuzZwh}x;5FȻ_S/=Ow<ǫ_V/V?#Dp=gᶳg Y]mUJ+gD }E[/BHy7Pvxc`d`|e`#@9rHd`S xc`d`H{Oqix4c/32f{j8cڶm۶m{Տ8|yЬ-;2Q2afyRWrm6MK֛~m)dFKΗ1_|rGK/#25_yߊMq0`y gEkC+{"RB9BBN~!cH] Tו Q3;]SUHU n졟oT_5{JsnUl2;hҩ6٠Ә斓jț̔/vDw7(1,1Mz7mRtӝZQi fNrS(ד&KneK%\'_Rg0AaPs4?VGP § +ɰ}_(s7 t 4G%ET̳6ep|") %˴gi{_M5k+$;atT^I%n[~d8'&gP>d1 r/KZ\e"l /$8O"B\r4NlLo-tm+Z7>j\-G? 2w$+1 #u-P裤EjÌ;W G%dDGSgtxP邏[B\2̗B]\Rd(qn8hG\MI"=a;TTn˴%ajtM&UgVX kUoN{#Ρ_\RR"Mi?#i/)InH雔$,)E.l@Gۥ% z+-ϓ&Q~O$/tbr&9>$.fFA~d2#ˈ5LSs]꽷-R.CHwKE4QM0-X6S sm8Ech49v|%U4e o"?H<20O,f+T73=p`Z3vHp\DfQUHVL1jl6O3L2%l דcr0b2ި|ܢwod_CEG~ rgd':<MX&CD_Fzڿ3R? E/^J=ׯEIMW;C7o"ksqX%=?ax+ߞeOX7FhՃ[n ZIj=y(]3J*ױL[zz.jbS5 eH|0{*yUFk8tiD޹9Wӣ3\grN[5peJwr'^0#~0,S€3PHHӵ9t6%lgpjEkl +(?M>Eľą$)FHzKvS(T;u5=桍W*FQVB)Y,b sfY}z%bfmfe ?{/''Yȩಸky!k~?Q2E>nBVW"\~cBƓ5!yKh~Sy) :A9\yPY:&k2ڀvNkۭ'`aQbih ߖ尕dmnl-}{Koq'YptVRn'x->o_\uP<":YEda&Y'XCF7b4@Jw%-]TO$-IҵtIZZ뺤uiI$I03{ol<03̬?-I}XO7k}7Hpl@9@ RkؠG<>҆C֡8?/sWADGG8#u$(L2B"2GFQX{{:6^6:nhZ rO|(&l1[,&3&+&&f (LN5N) )K%5HiɴcΔϴ΀3,IFe2T>[0}g 3EΕ5|SѪP+y|<W~RҕJ@+?J*YUjSTŲŖEբWMQnPK՞%RP4 MF -3%`5XvbPZ@ߵ<-C[ӶjZ֨ukImJrbZ(S\ `>,1 p HR.ҁ%bDpDu:Z[צ:L8ft@.TQ3YZ^Q+ u` קY= CPch1|5iliU\ӌcQmč5gM5}6M &5}WwIsff[2ڨސm,92 X\Ϳ6K79MfZ`e[5b˴1mv̆-kk˱flm#ۤ=β7څv=S`9r.kW}w;۝3װ\E.˷k_q8̃]q7yq<'<D1hMV3{ !wlCH|& DNXuK+9}O;lQŒ0Od'x!j%+ۖL5nuT3>Z.7f]I3T+Sf]eq)mۿ6T( pJm)48B98Q:=aQ(f!G#{ X8Z R\ +vVeF6^>Huau㴪u4S˰p^~wIcAu6~Vޑ1ep+x)r5ɒ59QL!E4_%7 +2+3;z`9?XjH3f$viw^cڡKҜF$LJSO8g޳'?WFZe*ĹTj(cŝA \y%ZI`54[p*=G!oZL8+~{]B[FqxlCby?ԶmǨmjwծkԶm dFhfN$W IRJ.C,rʓ@"J*SB*jԪSA.ꦻzꥷ>꧿d!fFe1g &d)ffe9gZd%ZfVZe5Zg 6䲝vyov;쀳nb$&9co${sniբ%Gso\=O##-v'2\Ȋȉ{/;Ͻ((((ʨꨉڨhF;`-m۶.MD%$ed#H<9,m۶=k?~WPTRVQUS70426153wptrvqus2Lb@.׶m۶m_ Qd)RI!Sl9rWPb%J)WRj5jթנQf-ZiסSn=z#? EqD(hQO DF4GuDAC5fD4iʴ5Ƿ؉x?#%eּ,[jͺ l۱kϾ;q̹ \ x<(zm۶]dn1CCs(18M0$M140,1<-"-2˭*:m&m6.>p+&q#0ɔL < 17|r3 +7/G302P ,lgVN.{2 ;|}5&fV6vN.n^>~B`dbfaec7h? )8mbX|%Ya R)V*3+RmU\ ]h)s5Dh|*}Y8YO24'67YFPɖvJ×4(4GOBoLeFь09>QX=o >VȊ(ܾqT2Wg}` c8NS Lm,ӹJ͒Z@\W5pZ^UF' B+uVlmj=CmID>X9o\l})kc4\%x,] aN4Jvj3ER?GI4AȟpYpE9nB3FF2}S1jLd_0oU  i6#b$Z^aYe'/Mu^" u%$<\GAu7Jv/3(ʢt6Qd Eci=94E%c DdS(ydPRX?ޤw|i *yz`qfwE3oa9b2A\ O}'O\,OjJ֠Qh"˴XƲ[9b}c<9bVEcV,؎#-bW\y *,,llU[`e&TEݯ!x݈NC*Vb- k&Gzycdc}J&!YrjűX0o'[o+@vݤʹ3>Bm0nMۤ tTLP?ĀygQI3wJnz_N/Ӏ64Үn x.7w<:6_4W%nҥLfw񺕘7%Uc Wkǚr;"SSK5҇Tth#U.pp[\boR8c|/dP"j3hb=˪P:"MY>$%E3QwL/IDo>E.;'q@@Mo_qH#&t.K$o.K\_NAI=qexp$?YԮK^{ZK/2J~rj9岼2B|pG6ѵ;F%(@7-V':(,ihߵk<x+021MݝeaMI 11wL|cc湎̇/ +?6vN.ṅ/ +?6vN.ṅ/ +?6vN.ṅ/ +?6vN.nȇ/ +?!w]i:3 u):y8߼ƶy_m\|YlףB^IIWmxp"(b##c_Nd . 6*(xo DzFdBBWh& I]6q3ima"@"rk&vl.U;#68tDyj 7v0oһX+mkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.woff20000664000175000017500000022655014664334534026620 0ustar carstencarstenwOF2-h -?FFTM `r (X6$p  u[R rGa* '=:&=r* ]tEn1F@|fm`$ؑ@d[BQ$([U<+(@P5`>P;(1lhԨ)YyJi|%ہ^G3nڕ ͐Dp\Yr LPt)6R^"S L~YRCXR 4Fy\[7n|s໌qM%K.ۺ, Lt'M,c+bׇOs^$z.mŠ h&gbv'6:smb1بm0"ǂ*Vc$,0ATPT1< ;`'H?sΩ:NDI$T[b4,μ」bl6 ILi}ی&4m,'#ץRwbu,K vm_-\HHH?m 9P)9J$ƽ8~;rn=$Nddn!';8'N!-Jʶ.X= ,"`: {K!'-FH #$~Z_N5VU8Fȯ%Pݫ Cp$Qrʽkk3ٷ:R%2{ީh%)8 ILK6v#,;Ц6N2hv OOt#xTBfq^#?{5bI%-WZbA ^1n5צNQY'S!t" `b3%35fv;lά9:jgf?grpx | $ eZ($w(ZrSv+ZqMݙm?&s[tSSj9?| >G,bDշ^^:l3NA`5 26LpS Aߧ/U ֘'9\Նt!l PMR9n `(@ Hy)MdM 5ԤH'ґmSuo9 1 tØuc@]KRbNv("y뽻{ cscz&p5,jn kN!.n^Uu@|?v>rUaHR ՑI DˋQ~p ܍;;nL$t : hFCYTOFNN~}1"`a(?H \u0LԵ'͔PbnmOJl?s0,8xBBF_RiZ~e#jwhOc*&F6 Yq{}?>u.4h%g`& )R5H}ˤkܩ'JOI_qOb'HǟBYEM6v5NJ ONF Nx(1:\߫Ckcb8Q d[L(el+2u-a֘d5;N$"HSFo2i"\h7IfN8qx#v 6um `NM-J\FrDZ0#'ꥈnGjLچXʌAgYs*Y^ٵ;"$hb=ϛ0vH-.D܎Yd +^{Cm,@N<.VMS+\D+R|6 'q\T9DX<$p"酦$ҷ ,psTbNkI_` FWV%w~DԐ*xiy[rZ[S%Gs`F<ㅣ V+!+؍9ykfb82s}l;[)e$Tk)v9{uut޳@E>|C<\4%Rv @׺C8\~)#k|.ao00Gq0%hp L"+>% ^MˊNsq=䦆K4r-*%h#%;pP馔hC= &)baKL@t!~2S]rYlZ63ўJoOV;h&gO5RT/}{AZ&St ͯPC0D,pbpзz) ]I>Q\Bl"^3R>r*C>xPUz}Y=̕}ж 6-`/"H o&DI0E2Xa-{5< ,}``6jiim'w5RF,ч%SYWh6L_i샣=i13YI7NCpIĔ(r0{jrKТo)l3naT1\IE(m߃Dle$ÅwXU(@Ma"n,*vG̨x>G Sg̉"Qvb0*zPEyɉ?7$ %GpdY&f!a6|);u7#34mJij oOpȁv8jx(K/ZdxŃm7V_\fL7 pXzH7-,(1KHbe,r-pL3=T2t2ټXk:Z5spSsT:.]D"@-Ȇ!A2ɶ-F}˒2BǃQ)tç|#4|\㨀`fc,#g1:-ty ]2Z~.)nj%RK(y`8C֍zK-N `^+n3ϴT3tQأ4<>:J0È%ݑZab`vͬaT/ZaޝГIi W1_>)H"p |7mF^Z~f0J^I3V!{<+OeB#BcjL\-Zh[I<qv~k]GTD?S/-%ݒ7 wi|CIqwcWx /7xHO/o]G]y߃#7b$tR$ ]a7FѮ,n!rI|28x6gSh R^^D.xMMS?漞'G#~+v4d!FyT9-fVa7hB4,2Ɖ&vTHMqp4?R\Xa<4@MiHD_ EgRyMlTؠJݮ yc"HJ, 6u/ڴyVnJn۟H\PRBd|4_$k.w™IpS$|}j9m|1ߘn9395qS|xW9BVZ!mK/Ln;iu$*t3Ͷ@}B{Yԑz2Ju@a\MR7odze7/$4]^2kh$=%1IB؃ H|N.[M\ Lb1Mg:NV._0,+,ht7l8s~IV^ N˼Mؑjك- oܮůQo[mj=rm>~z4$M}z sh""u7V{RûݦO-D9V٥gIʎKLg۶BTP'K̦ qW֒3ep&ےLhpNaS w &;e(,-7vx-w$WnXUt8Y?KMctY؃p*Շ-БfL|[nL }4{5頠3᧌ n$$,+DNԄ-HV>HOs\-;W6NM8Fi;7k26%֒a],:!ʲڽE,{U nawNg.I9r:jFbKΨf)*cG5-kb6UЩpZMO`$WDyA߻[4aJ?fD?=d(KD䴱:D/[#$A #KH.:x?%Vr@[B$}coS6`LPfM&ɔA<:vÚ Q~Pw[+`+j V+R*ul!|+'KY66_ud}_[yuۘjo$Y=yjRi)bԋLaD(XUwIڻZ$7ڻ9&4Z'DF[N]~dD?VQWͲ}vS>Nm+SqHaU!ΒWb_+UO]^l59 @1'A^mo:9ףs-N:tD-zkSja4rczFۻ ޿xv7[äC8#7p5+ ~*bJJYzֳw+-p/LL[cgnlcaPHF$}9`\ 83Ym1b>~ƽJ؂ϏyBs="f(zKM"H`wcEd:b86(9<clݘ/kg G^ESE)5G_^k߇ v̚}T3;6 WvTCP_k._eєNJL{T!6j>h0 #[㗚Kz,!32:6d>himE\=H Z+{6@Wʯ&lC',rX !8(\̭2-P8h@C4 <~Z7j%) eeFpZ'15 ^6B3nco#~²qR@!ա z^Ks]T@TNT ,S*@7CīɅLiQN, #:RѪj91-YPN¿\&yL8ӹ&0cvƉ\JA;Q;]IM8 sMf?԰Irr!K9я8p}Q콍g-*sm~XP0dM^?DdIm8eCN}cà٭$s7ۼ#յR{b4vMql)vOճjְr1f4cs_%v%lKZNi+V3'~NMG@HBb+vVFq@ݱuKZhp@E0uaSXdUK}ԯ8GXKiI% uR)EI-ږ8|1GΞf6Ȁ=!KF6Qf[X~_j\^͋^k`DsG]~㤛yo};+i%N}Q0ԥUu)M[Z`"7 ?/[C{l)$Mr|^ a:"֊a l>hya{2>CPL j?ntg]S{UӇ('b'fg0ӃLPAMtd)2úY!v&`o2P[ aޔ5 S|#+7J #ȸ_dU6#VDB"K|)otkl,lU)ݹe5OyUAt2_ n53e*1v(K_HvVʉ3},ACUƍ؂Cuti-]`7]R !zsNt&̉̄k)SL̹y7$ϥDJNd"9 31 IZ(^( lw6 /@YB^}OT~9cc]{)}D8${yc,ʤ{tAW3zHImD4ܤUT3dID) I۬.d~[ -K^2Zc 8u,Y^\_ԁ_+cJ$\2:ZW bBw=[1'NYVz4;(fzNUf(p֙!x#L=#ŋThnba˳",T\o!@@sN%| tXj j Qo5oeF)o 9˷:h*'cJ孏[{ȄNfnz]8F/|1v g@J:YնNu:dhHo tM`R̍Ri:|N_P"B@ m`a:M  c2Ũ<ؓUOS\%a\Ap ꄯe\A.̰{wǿ~6 ;s2ŋ`W`TyPgee0 00}/ǔ;h[tGD5^E#hȍ:f? u3z0ڎ$T^TAhz x I{5'rK zo l֢,b89-:G|W)bA5G<*ٕ:ğ!]gj~O&UN뢹8 g ]-WW(WNI3Ngr3|m m'=[n힬M,?$HDD-O?5uX]˓37>*wg?*!JyT@ UgzI_7&\tH.YZ(4Y'd T Fs-qya7 [67K&J/$c/x[ᶏ;Īz1Fv]G'ڏQBSOІ$y(TS-;hűzT%Dts"=gwUuD?b$Zr9G<&Ña^2_Be;b~փ)Ό2j r8]'7 bChTd )+ mD).51-|Yy*oڤL 4A她= T@|X$in.KI|R@P@P*ak@ ۟=I =l[ג"hX0QҜf˒펖c<#9`|cO}$o>eX<`,o_K3 p{YAn[9M T(!"?Z]iEm Ğ>'{Gt *~y`'A?٘#)o($ȉەLvYO1o_& .mv!*)$zmrt(:GGbeVwi$CO1 cZZ0G 7z@Jy~p)g,gYL.$, -<k{yc*02/q1gKM&R<7xCy[Mʛ #ͺDya3\wfwrFĸM] \NsWݍd<ӡW064tȴvȻ0>ԯ ; )f#* 2<h ~'Bw mH/wqMog C)̵67#BS>_-[L|RRlQ}\TH) 9Fa"^bA:ݳQ4' =sO '@.Y&8z ,i73y;U}p/I  xVxilFZfhXc.b B*|&|ge/kuv\_Hb dpG/A}㬬'xȜՋ;E !Wj{ZI$z{Op;x=׺q{5l23O =@jj# GYTn>&ެ#CBϩzLuylSaa0LTv3,2 sdTrU}El1z`Xa*h{qiuU\"Lд@TXRUFg]sE5V0X/ukzB'كJx Iz7YΕ1tyΚ_}|xm[xJ}zlDVrcsdsqv[&`oUl?<jC! OeqB=J\`Lr孈d1MhowѹKiģd*;^ҋ$xHUU`]GkCꆂOQSCwo g~yG8P{{H.$6!}d4,q>`llUMBRPe2A1RHqlBQ$W%bhBÚV@(?FAQ}dl+bNIMdT"+ƌo0`89\|5 ޣئ(y jqm(<\G 2dTP0$n@ Ē!X 㺕Nkճxikiݝͨћ"0?^2XF,{sr_e@Vyg N_iwq;XED\b1G(RsT<\ډQ2tT ; `[,AkKbDl#b8,]i\|kCxLq~r Ά>|žBab?aag30( j"FA*{ߣd]ř+XHzs ZSLu:˅)ҲnJEBnS>Ħ mh,RT~}9, /.H~!`ExOۖ mwIl꧴ёUzzk**|m* .?~ chp?eY]*H|̛1e?V; ا 2PQVlW6m5O3'^x,ҹa)TeUs10ft9T{!L@OLtǽ!^L!ti ^:CR K ?2TYx۩Fq#0 <hѭ)kesaTl x9d%+b8XZ ;gv8 n7ϻa&^ob{w OO7jϯزΞ,~WYػqÎzVoλg'5("ե AӃ[:P|Ӓ+>#2?$MndueSJ%e؞~Uq ޳҈zRnп,7˱>` /uFgOg)PJ\)Xk VF"\tr#wE]s:Y#n8 Lm"6D VġH`Q ௢үQkG ]<2N?U &|a_G܏}di!:`Ⱦ[\,Y]JϹߐì~OA%> ]2Pl5pOѐ[ʀ4O@¡,Ҭ-,4X7-#?3{M·C18aY)M"ka_=4JqM?nh6kɜP  2;3 g4ՍZЦөGZk(m pv riZF}i:/czPuVQ9E&'/ v<2ۊYQ)j.HN11sʗ؋{ '|klT%1ꪋCgQUJ['Uֶ̝ؔ{81 rnҹ} :,й6X7fe' NM2p|4p6Vn듁p&S=[- ߞ~NjIY/c`YAq6-Y30#V~hsEPT;ub6WD#N1o>)ΘCx4$/jl1 y./,Rr[YE*GЕKm/|7 SISƗqF㍹6:cVs @w+k1caíw0 :Y5Q" +g"%*2t`Gݴ f:hN33^~yө)o)l*H-;+|+[-ZGXf~Meb75[ Ho}pi8;`$7~Yw4RypJs}!*Yf~W]TKV0Fyl$"\AE?W ,[b0q.|xZ/ˁ]P*4$*(R7L&`goTܑ.$V̇hULHnei_"o߁e*mbD2u{ݹш ߶\ؿZDܚ vz1UlRl-wk2VxՑ;؀400=ԑx~޽ګ o2RmԔ=_rZ&ן/߸([C{%b[f.\l$}VچU*B3lRPf d'GLc[dN %C9X5h _ cҠW?+`ރχ#CBW'B~cb 5~}`AE((r{2me5 t>`vd, p*=ϕƼ' o$ݥ;f`̢tɟJ$HZKԊk+LmR21,qF p̹-J%b=gV^y~׼0~-Pת{ƛB2XZ?oG!xn.}%}Oo _?bJNv$bl;z`&Kx^]"d+g eI2 B#(ijNN>SwF W |b WoW^\q?1>BL/=iR,cykWZ)BUkjy4XK, 3 F9pKuշ q@OAvyG4.,m#D"^ѣ8lQZ1C\4oJܨ힊dD6h[|L]V~.:0z*HX,Ͽ7zUQNe.7$:.0֣Mj9g {2ڬCO墸N٘@.W1Dz[[M%V5r!4&Ur s7%yNJ(?nYm"TCMmr.ݴ{bSNT]*}v`1^HvNoUۆAS6WOىe [(B͝to1bϫZH{~N}Vˋٹo<>#oTFD"%73.(?f]`!1%UqL:蜧ϸ|@8'+VWu۠0 } +T/Qnl~c{pa=V:#vm~1t 0SPH]/jg/!{/c jh[=U@ʍqIg6Mmq%Y8dc`"Xt>"{riPO?0=/9FnV}OY[՜"I {GEz `)ӇrOoKY꺧S4;L'>cN@8 ʋ{삕zb8_xV(X"]ΔěM6w,fgf+͜)TJUt> -]z}o*mGŶ1S<۵&:QzHjljL F,aY"'LˬɴbJp{6իh]m E= ~fFvE`EWinux8!GVY??7K^+[2%_mwsZMZ?vl9fO {,'9/} T}6VzôvU[dT,_uVE+B:xaY.L4rP1"nj[)Xs54 4sS6 {(,kW :Dm3/ T*z'1o'3ow|Ћ=Y< aDm?F_Y3f^Lff'@&M7F0{GTB/fzqc].L.In^Wk(hc!Ȝ|%?%\6Qn*0''Whĩ=ŝLCgR񛙌9V玫؛AӚTQyč&i٣hQJ,#|d驺z|yYH{FI%ORD&k' (kͷ_uXT4JotǠ`X l/-ԩ TBIjԛ/ Jn0,ħXBUHhFe% 6% /:&zLldKT ^Gv͊SA4:DIʯ< !.1?nTzhԓ尵 ZBCnI~+sm8T=f!c(KHSH7!LS.D4$~]ٴaGsiK7"dϸ}|{ܰQ7r-ŷzRaV]v4t2-讨YDیS@%_B(FHke%&5='jF,GoW9;(ڤX3z`fM<~1bR6t0luFIj˯JoIqĴ(cǘU@Ѣ#e&Vy( {̧KuWKeZ ^>(wDI߹}x ƺ5gYG22& sσ!q\ CP%U fbS'HLbi,sF67߼D g̣oGa)jS-&>7yCCΖi]MR A0 KfF=z ggtf7Kx [ L^.[ԭ>Zc736c͗qw*CCV<])E9)ϛ0lSM.$bASHib%zqݓV޷ʀ7+8{ \HAZ#[80* r[-swnxP+HElY./k6wKb?88GI. ur޼l9Eiޜ`"ƃȇ˺&vIբu*J\[^enQ%j ?{nW+1 ZC $3!6/SG @4ΌE!Rd8hg?J~u? ZiD4K{j%)'xMaYvkEt,lc:wXk||2$.Ey=x*-LM_xC{t4.<Pr͙s1/N8uu.ӿS_rj]\av^sQ ZŜ-DuSg6{${r25>, hcbJ֊?${ouo>ͨvCl(N9ߖQ]}3( z^)(Үe}E1\pB(yf̷HY/HI;,q«=d&T<)3SfV1ړ'vhD n$4n'r}b0DxoV UJgIN}4/|ߥ\$My"j}jib!NӽSBvC9wp7}5q2ѪҴUÍ,鼁I};Y͜ȝDJm[Osޥ$FlX~=/_SLJ&^( qwv# ꒎.P:bBfV2qgnٙ l8VӅb0aG-OTlO=AfWO׭OJ{̑Ͳg k:I3*zA$̊kP `nFGx)GRPE%5\}3۵RuuW-2G%voMk xBuFN7ׂkV)12dB!4 . N8O,f2TiV udLzyug’;Ks'^y+7UUOBж+$%O9elե*c@Fc6ggMU_~1fvV5 -V 0 )_D{Գb1#Q|k9=?Pocs$&}BoWT"M =Dy$,IN,چ wIxE6xnCC-,ϕ̲Y :y~ʝ،=Yc,TxeqUk*OTq\E*/ؒ/NSUf:b?īHt$ٶUfudH"$2kQ /WiXNx r6_y{?2ڽC~{u8|܁Sf+{30`wbcCQ+zƪ\T-{]ξ6Ѯc?8Z~|&eD9qW2R,Y+y<`OwAbz6|]:qZOVgM̥ickJ0=,4,am"RC#,c fZ6RcGŢ:)e eIr6.Z;P+O)$\wIV(h`z{%fpxl }onr 7%ӧ{ xm1oВiq JO'V!"=$ ї4KS+&Zۙ'憥Y^e~},x'"so߮d߽}{.kTJY;ffjKVB+jqMWL"e/׶߻YfxwI:kIq.DzdLWim]ɗ] f)B{lֻ`j~ކ;ā;~7-zAX'tbWO.$GS0Ra#QPO|P[ %`C)c"ͽdD1xp_s*5ac]܎*t]8Ju׷uO աH>hLkq7gR2,ʪZ]|$CZm qX LrSKb홞%H/w>G9(|vvNnNvX N Ѐ`p+{(u\ sQp ݨ3q\͟$ﵧ;QSřz[jl 6n 8DT}㔨PE %BWحYw.!/^mdSZ~j=*Qgd⨎0t]q-.PJBp1 ثatl/ypq{~TOH6 uNwY| AVrwDh4Kk+ /@ @OJZB1[?l{JՊq9PvoY6CJ$H`7Ei)*eK؂Y8{V)b pNv/A%;uh(w̃l}*4y|uV:&*P;LQg*}OW;xT!F[ o l*KKUvܼƌ٫NY4$Gd+3$KVZF&FuRj.GNۖ5ƴrevvvȬ2MC[)|eGyb{)ڻ.I{l1CesZthɻRæGp7?(dW^=  &fV͞iϟ\G6$$uP=ou87[%>`<.$MtӗB)GjSQUd`S"3ɽ}MױT th?7]iEHzş|-tdۑ,:Dj7lD6٧-+}ZU4^xOݼfQH U;"I{)1Z.@2󄖩b+qzV s^>V[ŵ-5v]蚮c""f\߬<ۋcy#Qj6dr#ȑJ4lO(yN}$m [-|Ԉ*S\ќ臉@ @ ie'm'q$s'B੻Ad).* _y#z_Ы_{_a_=+䊒ӌϞ'Pܺw GJl.rqZvD(DCG&Cر!=ǣz4v($;{2 @iǘupcE  hh s> L^fڻw TWޟR /_IĦM'B.,P-Hj)%PDp2^^w`K֫KPa>ξ﫥jϨg)KSټdGFYG$X` 7%ҀcKQO"BաB'^.`";GleԒO^l:Q>45e=[7$z iF\*B'ǝA koMFc3|Ӭ%v>!]€'! }:xi/xcR^WICz_`~cVFvf]5OnC?ҷ79']/g}փiUIȃOt̒?k:[>TSiE<7E-N ؐw;mDu[z+9g_PO$UYN[#jI&3\e4n)Rvcx/VC?Kg{GX"b(6 ʛ| RrI&-Nձ*?2BpEYP [.r?gOh/%lROE f N=d&u_qb? X°f:J/ }?(u6P"L~iV-g1YBg  }HK24鵖r)ۡ#|ti@@JR[k xcE^I2߸dVoqPkZa2H/=(c[lW%icXchPq6cM? }iShRm]6;?'B}gMmǞCj,vԱ>G+zYl?Gܦ*{.m7AT^1D";RUr"bhlqw$/gyRmZp%0Bϝ#4b\q0n N]M J},QrQ*ͯA\')yz'KdخDWdi@gzu'1\}^qI<>e^h)Q*lzBl? gGZ0`~9/ie+UrWWs6 g*D}zyn+ህwUӋ։fG%!L[#"h2fmh|Fqb}*H#znV˴]xA 1mk ׂV|=@=OBzPd5Vrl$ZՄ88^Ϗqp(:A6J5PY2 èV'Gpe᝭\hjp1awʓSA$|HE#7ч|p* `D]ZB-\6iWẍGGG׮~YJT7Mq^#0õqb0KVot[ Ֆm^k k-dpݟ^ Jd3ݕFFTϺۗ9o\S8qk"σxL_:PLh0!iˌ{8:zE  Oy/Иl ,)GqQR`\ J>[ip&Հ@ $:Q8Bt:@`{>'aޝu99'LcиđHhd͞YGf/ N=Sf0T;WJ& I 231kÉr`}A̶d@ \q-9(B,vѣALXqH[!f-t|nPΤR^bGOf=+hWD;Kfx1^ U]3@jK8{V. "k5hG¾pC鹒*6iS+пu4495dj+ KkNqBM++?{2MNJVu90$#dV/,) Ak0Ƃ^Fߛn<%Jvq$d @ww?Rs D1F-_E1}zcƝZh[$&DWx&fe% ~) ~XLt˛҅JK//(F[ KY=;ؕb~$Vd]8|bJ):v 3RRQ}˺O kUP}SV xsQro3z2F'֯nN?{"]1B+յ ;* eO]-N~2̜u%l(Zb9Mh]Z3')9#>*%)V`leY.5*D~- d5JZ!QӦ^fP/fj TXX&(f!Ý^g/j< /륃S'J֓5V^ ߟ^m{2; 0i7$&⩵ӵXEOSx5DZيt"hv_CS~A$<@ f\;Sa)6C_Ί g0(4i-k< #5t\CCh> ;!` 3-6htD]SeN }}"#Qn`F:>79$lVe~̈Ja%q~ܣ˴^lC f+/ eBa<' \*FC;|c ڀNf!L2i~<[ p&ѕAknnr틧n&fvnjn-25(!rC~D"`\T'j P`0iO͚Fkrfuəکj\'3!BIElQ?m12pQe>RwتD.ۋ XN#'Njjо4!tK_fR!@棼CJ-jaH* Np@wV[; ➄sqHlڜA?y "j!<U?hk1oa޻e8S1Н䋄!9hI B 9Ko_([f0o! 31C;XIh$ɀ禹@@0Wl ]&)s64wY3c.Mg ^1Oqs#Ms3ZNLMi} 9U~x~{$6FɬQEi2WvYF AVl VDXer(ZeͰ3)\t5\^"rШs wP5f7NK$f^q{"L]z`@DQh6f~hG5uU7G~ .#3P TV!nژPf6Չ>l6 9@Җ5Ϛ62t@7 L2  t'ԯbHԼwWfɊ7=.=bx %d? a 9epHҩ K\ۏ$C%0 ntv:M`᳑Basp& )"-qc @Ibk3ePF8ZmUL((qP05n'CVijɿX?qg^:ӛ[[PV8 6=Iɉ(cG@Lb!ll8߬MvvVbq~/%Ii҂ϡ֣T=!BPS:muvPsϥ;Z|s,G:pHgVuZR>f@e⋮@F<6Ͳ.L /)X 3"LN>^m w'>\C]9b Jn)snt__xEKD B $gYAV>g$%L0L#{&ΝFtd\P=a4 8"<ܝsL^^NEcvH-_>֋;|+c! 8O/.规Jn8&,%st]6( kH6 Fq#(ۉ[y{0(^ ֿbףŬ &fzCqI<Μ$((h\EDCc_x/E.:i^+Ο1צ҂Ji4@`lxNL$搘6T.?4] X1h|}g8<1Ȥ< @K// 5pלotpa jtbE Ey&Ц4`د$L"Jvi ljZ%=')8e`8T*M8.w~\(Htv r"jDoGG ilHe%ia&9dd>-i lMܰTA$VHG| $ :1R s\Z $Pjۇ]ًg8`簆 zߒVXݕxrtX/Ap2^[1~R{뚬ɇ:kCU'5n%'CXP06Gۮl[<NscOFeQ-gi$RNo7Wz _t"?z6y/H}ё{qL$ -a[st nSn2ğ@ѷxHNp2& 3 fx) WP'h7f> s!;p&QcN>OgdHE1u {^گV}2@JHS>!~L^d r5/GyNW-`ɚLJ=(RV2ȏM;:-A0<Ȥ L1L~.ܤkgLinNdu'f]BsLA5ShKvvn-_e9eV"mB:GΫxcZX oyHKgT~cN¸OZK:bA%9C ]oʗw1)(t^?uƦ-A99NلL#A2Yu5/_=fqljއˡ?uArZ]AX _vM1V&P\6X2m7䥱[lҏ'AQ6R S Q}딭SeS\D-wLrTC]ӎorly݂XJ^fo - ˰(X3R>\# 9VP饘QՐۑ,aeX#*gVTnqGL(Z)oMi!#ZH.$ɀW\p*ȶ /.gy 9L2p(#Z-)ijjԭ=0b`n0a]k2I)XE8fnDη%8CS.oěNg'dp-J=aYɹبNkY Ե=fNH^f<(|E(SL\>u4vdN~HN[nDeh/ڈ(21he_ʔQnV=CHEgi~%B15czŕ v >aY%e&c!pIB 8г]~A-l641/[\\Z I T4Waa8'lxRYNej3:-:G6vad$$`M,ܔCz3!q1]Ӌn#xBl]K^t_@YugSk]OƤ&v:NaLewɋ-hY}:xi O x|+^ñCq%]{[[q" x@LupՔj -[=ئ\ ejq[%^W'Hjyc%J8Imx=C/].&w4D,Ƙ3"z`U |M:3Qc!_ǣW(WjqS#f(G4GޗI>nڄE٩^˗nHG[M'C&Ǹ'orUmNݾwJ?6\AbGNzŽ2qXDIa'HVT으Et|G3( oOtrJls<;3)YQ`gw8"o&7>cѭ^@& tT}g$}0hh)GTsy4r o MH; Φw~| !( ad" -sQg#,1M|/uhR-.k$GK,݅1a=aYPA,q%! ONzvN6^>ƬAvJFӽ) /ުl̒B3GM'[,n\\kѣ m1hmo>!jM0C <埵ߎ\`K|_xN`ǀpWJ jHLM<_=CM@Wޅ%ꉷdžf%Mnp Z3@>'Md Y,BTuJ:o>b^չȑދGx_W`H "=ϟz&=@%ӌHqixDHXxjꄯK |@QTP+:uc}ОT B5ڨ81hȩaFuXLc[nNרxtNDX*N8s7|2 R{>}78.GyՂOg#Qq'g fKY`9h2„6$} (T?}A`78LHFRG EFJXw!SKr@EKa2'ʌ%v[؟[7SFjj[5hMt,^i#Coq§ZeteWip_t^*>VlhZQjXB㨪9q7@'[=eH+^їa/G6z<6)yжDHwFv2nF)%d.)ەP6^÷r {hj)ϰy"T㝼jMUd΂Mݱ[Dg4{+ݝ:<9qAw L}A=£6۠evAu+U_Q3f?R\0R R^ ,VwW2`A vG<9 4nX;? ?*uV0{[4"΂,qӼ? p}_gKB_ %_g=Ih|.ݥąV^1䓺0 "{7ms9ꛦBNIpi{ ]J :My%uGVց kkpyjp:G]Z$0 _N+M7Y2l @x6q 459OТ}Trf52k t߲}pU\ursVlתa޲ }Vm~3gm,\7m}-*,EHq$Yx=E_V'CRiND9/ Cbx@8`2I̪,!f݄nE8b+Q2쪘CZ^?GVf砱(BIe+9: A  v4RBH zѳy|x֣W?EtFOܔc=1E$V(T} rY!HhQ!.F/ dիG0;j86t 8y QG/Za3= O_ؤJPגIRsZ=|ڼA##su曻;..tש:KIT'6m7":sbqyL@Z,Y bg,n{O;]ɪ!_"=cӺdij2GBX$|i!*nT%;*^3/cEs4CwLj})<(YpHwW^HL- vpđ@wПp̹UK>1뷀L˾f0pΎ=_! 9q[ƭt-c\ @q]CAJpPao|ylN{F*3FxLTv0ԛV,jHA(\xxtP R^Sh"HJn#_p.$s2iB{TuZK t\LI%* P={b"UQ"VR} >Z ŊNVݮ-Jh σ ^ ;FQ,*+""00):;:VP8*e(7Jl0oHe^Ɗy%`4Y[eX}6KJ˩^#<ɝI_/23-@l4`P=K&=.)՜XvLfo BG]ޮ+؂PyInV`k-~SddcU.gƗ' 1N0P!ίH]Hf[Zx\. +\_4bOv#v!l,x<DxIN-Fe,/\mdPyIrǐ&$GKKև1qzG!A38̍97U;ȴVeg ݌LΐotpR# AD䶅)m"ǛX!-ΜaR_});;6П(o:֔qC^Ǖ۵A=zOb d~hzn/J~ǪŤzS,JJ#2ŭi Z~_{c]obR:v:?e? tZ]ָՠgժMk&zzq%UCW\Yڻes7ivZdTVQC$mČki wƿ#;̋ %yG8@5:yq)|⌬N=Bց^\S8]]?{rW[-+Wq)^2-KK0g4LҼ&OSPdŞ-m>nxQyY崎byCQA)BD`<`7%f"Y>ШG]T}_T,a^&xԠ,v4EpW¶SANⅭgj)&d 5 4($sDBݦxOhXQLw`qnPsTs'@Tz,2J*njވ4_}3יjҫ-%i POF?kjS#G'p1Jmba[2?kKq!@-^Y97*o0iMl=ߺ(7g_ǙWأ.. pk #c]@qos]vKi]C+K6 -/'S{VF#pƦuO&gzutxeL.vsMfџ@/)uA)0!۽)/Y_$mU?S^ GqVċj.vUH0mǕ*3bt3($F#PhzZo\d沠pmL~L jbmmK qsN"Q_Qh9 -㳟CUџO=ކy5 YkN.eui#uڒࠠp *!C_߻3Qpazmg- -k 8Z莧YPdM`TGhѤ]:dVNvcW:w|kҁ.:ӫOڑsw pT %z΁ه*0) A&3PPQ_i.-Z!%Ttf3k״+f6 6mPяH4ׇ2 umMCͥpm*Y˭9_J[.9&,rHi߃8Ʌa[Nnx J#u:nY}lzӮ^Y;zӉ1`7zv/_眓{='T `Jټ]ȇU)K{v[՝y`-0-?^[mSƐ=O#_DqqmR0) ibJ}I克WTm Aj/bYFNGuc\:i%fU,pIp ^yBcx2 Vb6Nd ٍәTlW{tĈT{S/QYK7#pQcGogQG?e<tJ83YިF^:̊|ʚ8`r}QhF4뢺j":k2;k.,&zTIFTy=K;pr$Ѳ8f_TIV[[ź`.N0U8IY D57o- !mv9\/KR!6 b\+'Ie/aFzͷ{P|w4ej-t۠^\SK+'JRSf4Ԗ+e"Ӄj\ʌE.>p!\B}vچN!"fR0rG߻* /J6Mn~}}<olϸpf%n~WXUlA!ˍ!ӫ8iD*z3@EYoJNC8f,R ƏmwE(iwLe7xЬ2Lz B,'\n@Oޤl os4PcXY }tp- yC&z Z`7)T)0jJׯ$7 ۷oUckwY;8>+g6w&$>ނu> VZJg˿=>Oi]@QYOƽ AIN%F(Y99JC4Q@J9u3p=0A1 ,^>(HRBxLԇj-ap37ubNV4|u砋ale zJ@5yCQ@RRqO¼p1Bj*O|O ,0߰ʹн,u Hs5IJR(+FL?Fh#~J1 p)O"-Jq Ƀ7u6(ۄ!P@>Á1 &'s3هX,9Y|sACEvp|̺%37_*xC8 <"'"G!£V볩s&<6D-mttzq5"mJ}_(^m'Vs۴F>}*sVӇ"m9oq{o! <]w@a#aYY}i|#r\I _ߙW+"푎Nܞ0|98ֽ .yfnsˡb~p*5E#s vN9>cQG!Ú8Њy6& -2~Q[aṖо)5_[z_itb(߭O=C/ P4? 9T,1լ9"fP]SԜ(0v4sJsbnQ{} #@ɏU^R+/6' Kh-Fs5XޖXyXQ3 WKb"&â{[mpZֶ/ʲZ[Z-l$NeWHWM_ Vӧxs䀱X )oC&6lktIp].@?wShs-$9nP[pYӲG:Etb&< E_p0JtzX B.R .EĎu-0OSBþm Ǣ]vd`ÝXP[ VC4O0&zu4&Eʙ'tAB%+DˎG~AxCPKZnRgx+i|oʜ8oqJ`G~ ɕo P 8yuq뢵𐠵Ռ=ƶT·n2paA/F[ ]+p^F(?ɬ3ggQ)ĊDLm4G;?81[ѫT> =Q8)ʒ5ck+gdRA|vakBcz[C8^'դOS0* )5r|Ȥ^?z}[SWUT}?LU^}L 6h8 bǎEڰn/MA66Mkr0.'})X "9O ~.7@3_~I*`֣q^ Q(Tߠ1``w2uՓأ0F(zcgsSolP8C4>@e1bς zF]5Qƃ/Y vAfGWJ;=yw@Rq\kK0{2tv0="w 0Nr DnJ`37%/-*R.U+[lQ7H0x/{džq8>6F'0*G\Qa$;hfEBC-`0)y[hʑV H2pCxQP¥9>&zgိ*+kɼ'W_~IPg_CO{b̖aշN ~A'/I팟o" ܬ*0wKOLxi1M*ˀzܗ{ meJ!,O'Z2Nm:ܢ*G`x]sҶ#fD\FIHw]I ?7#ȂU.5w5ɮR?70:3np&9&VupAFsUc;I}!\Uv}bz:9y! Rξ N@)0ߗDd;(AXr[BNa+{?X/Jڽ՜vݶ6lҤgO%P (/V j>MTc74bɤ^~^()yIЄe7a'xU$u8/NΨ'nh贑51;^n48ߖSqF; Jx]]Y MG-WM_ KVgGg>W&i& əۣκ5XnF>gla⧲0x){8}>;|9 i 7?kNW APEjpYrҊJp7~V8o? 3#JF ;Sl6QAiCfT0YwI+~[kB41L[*;/jLAM0X}>.tغutjiZ6)udn? |n4oZ8H/h!}I>d _Y3rDwc6ZKجA;T GXKb4p:I9m{#?{X%CKM;E({vT6 LaY}jOѭTв`u Jۃ2f1D/MR1Cb @#^$yH"c%߀.MtBl7 ^]]]*eg^1: v"t2=M@f]M̟D_w`tјmuJw"BhO;ֽ.w3,eJVKmC2LCyӝOLU{/\"K h bxZLRiO(=|V})׾[[P[n26YK UL}W0$ڃR: O3Ij(ΒRօJ )HInS(gKp 2\oNya軚8'p%KEEgO[:*׸pⳇWFt!Woڧ"˲"CրooBJd;'K͒__hv+ dލ 'VmI.^˅ 8BsfG08ռ*ʮ ꩐Tҕc6s~JimxY~V)Iƛ+hΜ;]EBAАQl"U,C)'fC{KD]p#(^ys==UjonlVeuiJ+$dU#;O ?92 <;q>o Trx& ['-xp0j[;3Iw6N?;K9YR2vrD3' KgՂ?h?r_K& `t͡񟞉y7&.>tu4ߛG :^MpvwڴYz~ڇձM٪!RWd;# ^zʈQ t\Wy\OJ14:5\ SXT ݓgvV9UkX,miM\(n>EI aIi_,( ;.s)=5AI(wXg}4YDp4{jq(Q ̷ZJUZfK*xC~p"2r#$!JzZY.^|h}zXaIEXgt^4R{fLypᚚ1ި|O 25" tUAޗ@uRPNX1ZN/ܨxIQ×_y6EK / cuDo7դ |2VC f+H :`wiy~wkt@4OE],<ͦ?sb1- JAA2-=t칙Cõ̍: Ba;WCEΞr{`&,'t[8qu -(J]4 ʹ5ay hhY.4j&4a q'( 5sXGjWB~cm۶/.6a_A5+=d >Ĺ_.h8tBs0HJll[UH4v. >]( k9. UA:,A-wyʰ҉VjVU ^}|wTHӘ,Aq0;,ZD*#{lH7bRX0CduBѢ5d=V\T=Q37o qA̐AOlܿ!{_uD G_rkߘT^}Wo).8|gWPCeJx6N(~v_;ΞS?W#M˿^SmG θJQ50 i<&+;V=KrU e#,tFjëΓU|N'uLx&) 6wrroG4 LR gnZa#t+2>if!ϥ)Ǿ>0$&qqJY\IS(ˤ7^+'wٚze !e-ݙ{awτ K"Jd Ly"FջPn)ж w-YU6L8"!ѡ|Fj=cȠERz!z|%%N{9c׉S'I#ܳ&QFn๕ !JƄeeo},XM0cs9]e08ux޾B䦂@h~T$% ?-&=EsnϨf'$Є`9wvȒߖ$sNy7zԯ3.ɉA>c,vA?p-?#Gv˧hm,QvG=KԾ nk@p*;rQwZ*ړǤ 3νեwR-`Qz\ӧvch:pZ7ןg~#;xDtO|tҺ}&Y9ƮpbuU[]Tι#UFo~yեj`a~.;&\UBD<j5yуo)],+]*D89żmSTI9⺹"_KKgh&\^a= X(u`mgO,Ӊh}y$ے$ E[b \ڊxl~[l:鈼,g\jgY '&f)GL|ƭ*Qpr~;ZI] !q٘ >0S|_Aeg<28@+5 3gKp:ELBvKj:*&z0V >GXCJIOErWb$W+^jɒϖ6HX#18 ˌ5ԋ`֩wGU,03 ̵1 Q&g;!]vX~0a \MF4C&h VӾӗ|怙w9}9/HY1˚W(u2igo}9~!V7;:H xǗ~㲿vWزj w$kʪe1Z^W$S+ļњ,-3!cmh9% Q*;%_8FV(s߷f8dشgm5@@7V։!)^`#m܊Gk!yu訦(+q:­D݉5/bwb+bᎁ6}HЛm$te1-ě G]iܘ$Q:npysǩBq8Hr-;-cN*rJ]cGYucyUku DQ):4^K<|XEޚ.Hxr亞jΚơ-]eU6xbk_loⰯuvoLzA+$^ҕ\w%>[PG<2FnD!$Sx8;;(~ Wou\Ht*GĞv:[Lr-yGm k-6K=9D>GkaDl9*K2J8OsP"偙bN% pxcN&ay{Mlƪ3#LmN̕&>4wՙި|3}+e}_,,ALu[ϲQJ5'z@NԝZ̉ED@(PVdl\8N&,)I]dNY8+ʞ_wu⥊8#+1d8s6Ǭ}壯 Uyfc+!)Ȧ1[N}3ǮIGu]x~^ʔ4 qd[>,{1#^3ID=q$%ɥ:A*Cg R@ BH@!Tnwl˭a]ɬz5 {z1R&l\WџgEIّt)8RTp*YMڋFfR8VYbJir5Fč N4egH%<ټ njc*v<᧼ /Ujao.lGvAvPؠZj9IdAvƉ< jO3j5KhiMt|en*=-ABQ׍.|"?Ïs\Z%gt2^L#;K0>;!SSI!!H>S|BϵŵQN,$,J,ya>A"TSMK"I쫈+;;Ӽ[5*^1!;m--?wb^eCiO{*NC/.Ms'  f+vS'̘  TkOHLTpRs#2Y@2N6^T)u[>4(n#*w²Jb$ȤFTxM3,"& ܴyWm k!o , ˒e6GG\r]U2%8WH CQo娣)*[zb2nʹ.CL?gl2\#.WY`WG>r8e1jB Uq8`{l_d9)\$n +L[o"N>eYfC-\Qz%seg@% I^؄*ӬD/j1'$YF\(AЃ]xiZk$5U܈?ZN:5ZC'Zܤ}w~HEVN'O:R|J%ءC.^ڎ`g͐(3!a [0ɘ»#c]j)`rsJ!*jcf`o+ ;mxx 2= }JKo a XN-K;xL@@a,u]ϺU,Y;Ia˯%y\ #2"daE޵>P~?nŠv]wZY׬a)33t2T۷MN6=?Cݹސd}1y"9gV˚!Z1qz&Ww-fRC|K>'cwA?`6$,|Ckٝ0->\#˽5KLiTom\[کNJXu}ꕵۡx[@4u g@+"R.AST+8S3r P,qݕV^fbڝ]d|k xtQ ä=:qC/ѾK69@̦8ۃ)6mkϋz{vC Gv̠d lCȇ`hr.SFmإ>2푈n\y 3k43b?sNjT%a)2}7 I }A6m"o'iLII5y?|Ue-Ңhb=Ϫ۱_*'{h3ry":U@>q|J!׎72ZΝ ]p%},r Tāeu1't̖Xm٩X$:Dl>OKX[;4Eh!BAjZ<|:f^Oh5a Ku/bztw~8i$oot^3Q?rLˊfoInHiqUgg)Ӈi-aui4,a{ nY$HkJcJ8@t1Ay8RQ)( qr<'T2QUET ԫ *DWV-J(YWZ~]^oP6{ [=ʤƔڗ>!C/9kyyrL+>;ʒ[/ fn>O< 1#ryw70"aYM0Ib8H^-ri a ޴B7N9!gI 2iOB *{Ȫ!&FsSmt*Vch|ʢ&E=E+BJ&Q"/qd"8Yn$:W|8a% F~\\ =w帙"i4}BW3߬[o4Yf"31Doڔr]CpϼAylk7S Lj @>s%0)uA 9-^{#x/ަL[`0/(?¨Y)؛a wI{ddC1ڐGdj<R0*eYCNsI(~.D*; ڻ{VqS[BOl]yWMRZ$.%qj"̙.9*H*:HfcEpRoQ#"htL\V Of}=Q]LH|_~kϣ񏈔vrți&!*)rIb@쪖%M5Нs!N=3h%`U3yV| pk,6խ]+{EΗ\^yn۔.*QzMOտD'TS\0WU'5:#h΅A%EZʜ5bҜ6M.^qӶX(1]l(4AҢۋVXkv)^ۚn6eQ~q`a4ElZ{!eٹ Rfmwš|Nwda{%Q cygRA9zXBN|5ّO49_w9.fo(D\EPl~PˢA'Ǐm |)]ˍ1<|`){y?J;|Ɠ=J7MMA~weHb^;+4T1纲ѳ'ZNWRfZx R}Eڢu^} =ּ3CAlC\'EΩ).b.-GB؄HA|ZEy˭yH: $'Xv3&yVQJ/I^ '4ZY[}>ēnѭţvTow(kxǂ Կ^gWzۼr1k }Pc.fŝL@^-7pjorͤDⶴ ppKtrU}$gmJtAPv h*ٲ͛-Zv&dHj|4P9?]]zw wLz zЩ!.+',zb8*߮$jΆ,7bCo/]Eh+#PN: q͸E@G4+5|"E@8xy>XqI3%4&Ueѣxޜ+V[ W?$U7H2ܘm &{}3}`RU=}ii*"Q:, !86ܤP'TsrvwMDKOxinM'\W mFfPOV \`%~JJvCm8kv9EgfvG١w20$-\IMD7OۺrU :Qڃ1<; -:z^%qBZKQD{җxoe%*p 7|-t<^xأbT*n }ۙo˞(ﴲ\^(Zn3fZ,2:"n@{8,-^wQRE~ '>@^U>W5 %3#X5"߶縵mw #,,C8閅WO=ĻH7=ζ:+ ᓞ(NQxTa7$m};aÿmk.47Kt݋B{Z=+IwoN.R"kO5haCK0OP$/{qu[_f_".wy$8)"oX;34Z'G&o5gȬ [푂px$~VlYy?A:O0O.?Iv{~ lz]%xդ1G2 ͯ4` 1w^"B~<׎kh:&9Dɗ@ I4|ߖ^y~r׮ۙ|,y-nQߖBN"n%;TsB֭f =3EXX7W s i*(*+"AC.ڥ+:WR^mSQMz+ . sS!F]bZxL}NN $pgvE mA~DPh#.0k㲧on?֭l/Ox$] L`.\(P+:rj{x}cO#V ̥): f(ýQ ǀ*[յ~-`h1):ҙn@-݁'>c(>,U0.Q/sU*kޑR1&&;{=< QdÅR%R F@"zEG1M}<*:Q5 zW ՟DKj~_  [#Z/9XMFۇ{7șک+hsDf!!/y {ܸ=g0<)84TMʦzj^K"$L+܏!^\*d%\%Ns$Z:˼&,t 'U}~# \ɝ/!-mYVB-Ei8ɷ92jW][тQT~79E3SѧB0n+\q\Xh;edIx6> XCVrpNFK|99QPba-~ $GnX?:a.pf. !®Cf߄Z$ ݞ\؉jrvb1F4 %B B k"r,$$\7K5sn_ +v P$ϩ3/x>Jaw/TiXFN)@ԅAK$r>Gnc QR] ]e\C w^ʺ𑞯W6ު}LB|ұ61R pn=  b>@kDRƌB MQnh50qb9j C_~Poaʀ1>bשiv63u_;fj/1'y9D8a n+.Zfq>ZTΟάs6 wV @)w1`h |ZwUia{]"5 X MDXfl|6b3Z=cddž/bWOgL  Á^ ~Їo;Lx0e_Z,Cõݷ%"({>96?C`/}G(? Zi 6m v{L3Z[ax'96!12'pͥ[˔))L@ƙV~+r2ʑkk9Z 0NG25raQJ #+Z,OhO :X=`O0 ߋWݴcZBb4l’ٟsԳܻYj(J՜:qZo%9" ]c,:ZrPA<@p/" g][uoW(AǸ3aIL/)^j_s;_"KY mĄ"oj=1HfΤ;F U\V>{9Yc6J?x̀W0M-7ؙHrV2 I<( 5uywjBtA֏o\e3YL\ʺkl#ss˯Gb/kBZ0rDhDq9WzC8 @C4.7U{_\_}#!|z(12Od@C?x7 N.?yjvGCҌ"ʚYlC`2'%b[iܫ6hLF HO] M"U1P [9X |UB S~z|.4TP{.b9py-~^z \@JX`nbDWpk9_c,:2YaFμҦ׭b1DLcau"ҝTT 7+ovzӀƣ iO~}$f}e]Է99y26WLuS Mvq9t)iG׉06G -0I#u1}ŭ[cz6WŁ!-pi?K8'`PCrrp\B;ki~8߯I{'DʪJ"am@!BS҂ ?{łk}MqWW,/R+OC[Yw3|ck=} Qc;Y4ed6nگlc`,ɩߤ@7iM=Gs4g%rGpHC5p#S/ڝ* ϓ]6}NxErP?SrbO{Qph*LbY Sn /BZ; }m~9a4-h[ ͎ϭJ$1N&|'c䬥/ʺ&᧥,/94 g)^D/P"܈Edӽ &S#pKDD Ț M9B4Ge@f~޻;a~WOk CL T|;v)␳aH z=lyNS^xG0fx!eƸ.9\( (noAiO@ut:)SPU6&*Bvp F~[@]Ja0dTx͊ZС q0.W2v1hd-CZVA@Gñ|g;=E4'K<@|4^q |\V1p%[#S#F#-CI̥+\),Wyy:#sQP^,JzF "穼ƹ0-hq(B?Z{)6{oݔ2WCtˋg5T8,+Oe0HUܺvRrAD 6ř!D)n:nc a=2ݫws9OYV@^XI{+ #bWy+@% 0.{'~{dzr/ێlL*bd_Ecfa"sص- v$95]&,̋PLY$8>=[w<* C~$\YY7W$Y^qF%EAWQ7{EH2C)Cu͔.w9AYȓKcd Ị< wTPNwbԡ"~H66_0wnDKAANe9iFVg?#|ּ^2|Ś{A&X|[QhY^oG|#W*fe`-ޣ\6i˺.tu/^ykA/˙5nnמz]1Z[ϝomV95˅_6 e^^!MMHчVx]m$ՏKJM4F-oQC23q/T])<6.jxo/|CA^[cB2|A {o1K{2A`O F8;' 9ƀ@bR]ʷq,Vo<*l^ܫQcT_5?$U0_9׊ f)Cץ) יP["q,6 #acd$\ـݻgyZgvbԷaz8{ț}BhA{mD.'*KOik;D #/h;@± !+ګ-ckn.v$?:ܗb{azKޣdGkyVֶZͥ:'Zsg.O\/+i.5j>( =>v w=7\4߈y~)qNKss~9< k {doÞ;Z荄AR4vríḾѲʀ&_>p9UF(#eI|K!Вl036nLGe*6Ne /ˌԎŪjj՚we7r|т֔讞 AZSCr ֔BInt~-#ZVvLBr"9ŗ598Vxh_d^:|xmW(~ My+)#%ʂu~ޯщ*KX8[4XL{J.. 5|E^]sҝcC~L@!=Iuzmʐ^IU:d݌a?a2h/iy;nQo (& =X;-?vkC) fm9ҟEf^-MזJ=4o,q˒i^X\lX޳ۓ{-:V{??&*_i]Ţ@T~9{UpMXאjS雩W::@VVپ=-}_ey{Ď^gifhjrԮ 0(w90{T,OT<~ >ϷXVX8^tΪ/y F&$ZLȏ!DHn˃8mL:dJ'!c\?<ƶ}@}݁ "'||2_}W 3:}6)X.邈Iemś[:ޝrmL#hd c^o;6a!mLS >nN-j'9BPB"7%"J<Z) }B [Sgԓd%7 O MmfZdQ?8k 8VjW{z 5zՄff2!]J73Cƅ2P,Mwǹ*)5H% s9ҏtIT H'~icK"~X=~KH^!Oq& "^S9c*l`t122Qd @Z1N[ :H\t܆CeSSR|DXECydhp9@<(+$̙4;.9댋)5des׷z$Uf{<&v$b)K WTR8Yj'?K^GW{o%8dwJgMz 3.7S[^n?ԣlC9XdC?5{/{/{ 2D{D uwo̧ CjcT#Ț y+L@w1c@]?|K 9dXe,r755뼼ِ\\5A 7 [B~bs^wE)`sOrя)eަlCZ@Kgߝz/miM)|DRѿ=/|pzWPC !Uqu.fc^tX\ZZJ9V]бو+|fq,ҏA_/儘(# :ΓkQn~C <ϳMfɥ$<;eڤ1%iEUgq*;R1=XhW`VUr7.Y"qyW(M&qψb)cAnjIW4ytҝ1Q܃j 6W!hd77"N˴:CM\ti1r[?Ѓo{TEzr 6k?ZQ[7/V{.=ծ"+9= KLe,`S w9oW͡ɓl _G׆aR0e_ǁu5X2k>[:kї/7:YÒ+W.1Ade;f4Y.H:^θ`"7%1$E5:DkP2r@5ݕ+Zf}G 7R=4GObT˷ ώ#_w Taҳjt[H -ysGdhAu.Z54N^RӲG2Qё\I>]zP=>';r?8Dx[k5j4ITU W0*hڬFgLRgX,cA!*}% sY|{F+u]$_oIr+sźv8sR?,%_'N,8+ kħFgd/$[5'Zǡ)A{P {2dfܥC(QUg1r\;Hbb τe+lI""Ӝ .?>ikV2Yr.6ы<OF}Klc+$#˧{ɘ 6S9Ґud`*ٕX5=eou7~4-xf&|ۼc;¼,Z_ݥ&k㯩 \&cwFc렮7ؔWK]}QY:H A=r/KuWT7Voi;Ս+ݖO?em+9W*3Mu=-ZR)Qv!EQa(9P+Bv{@E5*q]?vS!W㐸7g!N£IrWOԇdmbWBM!*I>t39 3D˓ʬy*{+ IfD$5w[EGeLeurH1T~ΧtWyw$vsjf2(dFg]kSz!~']:4`lyi1Yʸ7yT)IJu ^ճķ'^DvIwN{+$>| ؿzFda ObDL{̬o<5|ʐ-DIߚkyBoW+o^'^N? =8\|7rp0~Iq X3 Xdyzl0E p)KdBĔ,DK Ξkm?^$ fRd9M"Q%ƨѣfHç]9_RUAq}<=^F-ڋV욽Vq*ĝ/sru!`D[Iw=) EkvkȿgouS,`*糣: g mb|{{qOuyeڬ(+7oʈz0'#2VQǗME} LK4~I:ֲnj5'Je9wse>{hPg,f!k土^Ɔl|wu|Ñ߬DQx3Ckp)eC>Ԟ$2f=:Hh5ڢhFL,@:E~7BV?Q#3QA.јڬxWujTa7`N"*kKbYJD: ,T3sq%̓!Lo oPMZ~8_BUh2|H@mEj]<m wFɇ|![$Q#zT֞N6 讎HNb!b'rV!Rn&>ww)rR`><\|a +Q۹o=b$Jhܒ"A丄uu?\hG!7˽&K>p50E*~#>ĤR>p8%q{}# pqͿfOG[pVarNv @`HrrUHkέ|zg,tQͭNb)Y0G}ws=?1]Ο.:X ӻ$Vލځsw/@@{W,}v✥"ԸzEIIKUŏIeP`fq4ꒀy]%] -"Փ9szRi ٪Ӎ럤1!Sj3 ^-S`Y9%̥ʒ>2.-}pѷ7^-R2U[KV^j]N牅a"}-| k2a^!b)-D*57hoѠJ?\ζn<oQ0^06%g>)fU*7U'M$+6_7 ԤY|jipUzǵA[ .`{ f"[ꨃH170u eeɲHk.a03eTuu+(l:*owQʑGwE8wU՛nK- ͎KMr9]ay+2p+ҹx?_Q{(Ƕ; -!1FR9nf !К?n cD$=Kn,PYgxqͩ'C }G%3CgQӜc$n%lcfUˌN^ޤM-'KVϚ9yezbQȵƏxTRQ5~ ^u9g3f {&#TuH8%2t):N#s??%?05љT*Rg)Sאy"҇SAܻ錪)qRK=WH=.(<>L},7汫ƎP s+fIX\h;sb).VĦ,|pUYY }0ӐTzqMeRp -NS\ .] HdvidK9}dqzK5nX e5bF6ʍmC@;?{R,l=pe(FM-c<: GНn喊&RaRVz*/ҴT#H6v#I(V!QҠG߄+xm2k3zU35հ2o~Gqrv * [ՒC[~:m&$4ijB84|؍pHr+ƺQ)؂I gHSba-ui-l/о0\M}K?FdD{={<ԍ^Ѡ;|x݋ ]94jFaf|l\Q!r53Lc6?aa5cG|-ls^8%6uO9Qǟ nXIx4paܽfζK~?+2yIb);(JΕFH+*1&"ɰɍPa%'of?cOOK 8VzMécg֧6Y_} om+zgT|VQ?'"xR;gO^L8;qaߘlLbL\Ww>k~[gwk:>2}ZB{W ,w&S ka@Ը?6>3n=)?{2H2, )qH` ޕ3jkTĞB?Qm$%)}bUq_cqY -_1Ӂ)j?E=7>-96l. sx"hc[y7?N - TK79|ѰxzjgmhInHog)v~ C;LJqu pmW<˗=l+(lCPm-[IHHK(|LQkgª?CEBx}QN";FNUcE\k5EG н^Jv<+Dk rKCN w¹*{Ϛ>jhÉW~{|kÿ$a=g1izf҆Mm  z`0X*+Gn ?J >[Std>)`zdM+9,Z', į>cu}nmĐN=z8$Rգ3c 1MEKY$ 5 ]Y^=xܠKHUNyxUqYd*ggmnL%r䰼!@Z"["(͘pfk"v$ρ9&LIQV:WIZk7TT!X52QIe(ZP b}LLϰ:.'T/ kS->lT5}Tr#e(SG:'WmP 8oVV7S*6⋫-7kI5P|-wSX-g `(TzI(jaZc^w.8g-fV]hl3.yOu2&8EAD|L|Z3ɡ2]ۑ5KqO[شܵ,Մ>k*jsέ *Ѯ|\A[ T O=5@'z=]Z(CGEfM8GWP+qNEmF068Z:b7-Ь%{Ch1^tm,R\H TZ#x㮽`Y'}?}iou8KP1㥙夆CZ"8@x µ-``Pj}6LlRU\6[ CZN"*Y=3CȾ3ڣx~,ceG ;,5R>Uw6ԼSAR7|aqu^ځ;V`ۼ:{~۔x9:7N+m1f75dGrzZFݬ(:%P 9GaxLIrl2}>Mn?KwE/:T@Y_a^OME^3 O\s _ ^9$-Q5y'msс cvV I߇!?I$7ܡ\ód[#mH܁F&8$*pw,意hiḩt-,6i0I^,`Ś7{~5QR ]5j^FiT\?8E|ӕ_eoH{UĠT&L-3QWnԤuM* ۥD+%j;bͮ' Y> (؟4 w]|/JW#ȤZca7B'8:{} N$8oQ|W mOnL)Q^!WCM8}:Nhۑc&4ٝqo_@xމɐ5 Q+t*\]w C!W^"ywne/R=`*5bJzMwZN h PQ7޴-␜EgC29*XYKUk&D\4]aw-5&_kD@;I1fͫ{C[ŏY}ExdS9ɇ@~$`KPK}=wvZR ?Ph{%Zdϙ'biys-KhOü. [4/%0y]|(珫DBˀ(D뺹"cfw8NgPmzdo *Ģj6hni[}iY LٱEf9eF8dǣOk@p#B\'Mo=) uĐEB>:6Qlo6]Z* ) ˸kֿ /d?6 Q7Dx'ey:KCaM۽T&ufTx_WD){5PJ7A 2wWqo-Cg*te j ^"~4{;fo-W?*wW1{|k.QZ" X-J/~ ۵dp;} WAD|Qķ~XC}6cT;k#7.{7c8T_4X;B*bm#"""*RJ)EDDDD̛?97t3Zkgсhzt&ޯw.YNˋվgH@E!6~brݴz]DDDDDDDfffffffVUUUUUUUi{z6Ndmkdocs-1.6.1/mkdocs/themes/readthedocs/css/fonts/lato-normal.woff0000664000175000017500000113371014664334534024766 0ustar carstencarstenwOFF EGPOSŴQ&QGSUB44(fS|-OS/2h``icmapAHcvt  o:(fpgm| gasp$glyf, ]z^head<667Uhheat!$ hmtx٘/<+kernpkӿlocaZ /@maxpx namex4]=Ipost6joXprep$o i:x xSU۶q'EdZ * ʬPQD(  "(L-- m(M4m)N|߃d'mku}$tBxT\a #n~Eۧf?6}@k"CDg!Gaq'^nq@L=LD7G qbb˵ǣGԍ׎!M\;>tq׎otvܸ۵㡢ksW DH=Ant! {#VEE̿1c"VETnRV*E kQÏ5#kܨqU_my7eFw7gVp[A-okjvmnn3Ѷ >Ϳmm+noɿnOi@Mm9ڡk;>c;>?Nٝtw.Owz㵏tܶmEׇ>sn>-[k٨ L鿻ݝާ-e>]:v3on{ou;C /|c;gٜ]3q<}nyΛ6Ҭ#/V-ؑ7 #Opw"eEl}fg.~z^w+;o^5tՃV|lxwW#B!rh,Oeh)Vh+K_b,[, %V4qZ(R8?]Cc!h/ & Y&C^w䛡.K'E;txN].=' 7{/0½0}0 CAH`40Gxx`"q2<.F>KȍB8I,G/ND~ L[#C)#o|~ky~:?#G^wuy ^w\?OF1,)0F^Ebx,Gȓrמw<-݆l-j̉LE}.D}WWbqעa^<>-[DrTdSē|_or4պ2O7V:ux<0E{R~sIBB!O!D"kg>Y\VDBk@~TViLc4h) Ѣn,oaY5f&b,b6X /Q8älo*nJ7oDUIKYM;YTF3QFu2KM>g9dq#Quㄢ"8 gU+Fےo7qzyh* Z4 t?122s<%$0|›pIVGYլEhu5CNL?3FjX!#ƈUJ9ͥdp@[W^^7^}'Jd1b]V;؝]t93 ]+td=@|}0A0!0paQ0j!x0dI,c0% )ixó^f,90{}</>ĵx,  Ka,rTSdސEbY$ HHD,#sBK| kp͐%"+ukyk7{|| !|[alvǰ?X߰~G,є4HsDenᥲ8G2/FD>COg9 `;쀝 >Du~WQB#h M&+h\A 4 A h 5p;.0[V+dJz%YRY/ ރMއ` |[alv*>s[~8]9Q~p Ni Ȅ`\3BC\K)P(+UP*K' PPP~jARABC :CUCh}o}4 M!4GlnVB{:Ωq@WwAOzAo@_a d9 `80FY?F8xG`*3Rw{]N ['TwQwaVq[iԮP)m_M]x /g3L7QMff5^ l<n6;iIѓN'FO:t=z5ddddddkIГ']C>t }5kw_zwܵ.V%T9ԦiTYQgX_zL"zrG(*j %i\ }"W zV?3Ѽ[E40h,?Ih-ZA[y,wnў*:B;d x %R2Hp a0A!C?C꿀/_KP /A% n`7Q(M& vDn- k.RST?OST?OST?TT?OST?OST?OST?OST?OST%zI^RT%zI^RTj"H&RTj"H&RTj"VoH&RTj"HUj"H&RT2JMRD*5JMRD*5JMRD*5JMRD*5JMRD*5JMRD*5JMRD*uJR)*uJR)*uJRyyG}yyG}yyG}yyG}yyG}yyާ,kPITUJ?Y1]yGw}]h]/]_?榅D7nZLԖc75\+p \W#3%h<%k:-:\] 5dlRUjJ W*5\Ԡ?00U-ߩ8xK{,  _R__Wut=们+81,z,zBѹ;rVW!Ws\%WmBy~t1bb>b:XmMv#6Y`bs0y9؜BlN!6݈ͱYgKGjC՚zT0Z3gjI?KC/,&V{wǴiMӁGNj*Bs#OY/z&ͨRoJߔ?b#q 5xIU?M&L&&H@} r0o0o$p't c/->p~q!b0C@axFHa h*!xa'@%&~D@6N ' 9flϕ3 b ^">Ę {b,  KaL$'rX!gr~tPQ>]n^jPY7~Sw9.Xlr8?wJ(CHH9rx\/ !7R |uB`t#CHnql[BvNn~0:iR#l65y8l9A?"0ir!ˀ|~Z 2#!|/FHHHHHHHHHHHHHHHHHHHHHHHHHHHH|FGNg9 `;쀝 >2_zh 4&pD@)ĘB)͠9kʭp@^PZCh C;{m>[# }翀/+w9W;Sp@ i9us\3߹e!+ PоR([~rRP5W 53 Nbp0!8QCx=(nnnnnnnnnnnn>V8C5x ?A"< tx",J*J*!1^*,ee_r¯d [6w`|O6Fx6fx>-!|[alvǀ> a/|>!8,B}%z3BC\r }\@1XP eTZƦMU9r4UhCL&7JdPNõ oxP#@@@@Q0X';^&;rdL-N.~!Xi\Dv|(\x?`\[2wH+"]adHqnh+N~"oi?ӴjTY`3w#D{}{I. l ~?ۂmģ^Ƈf?2|>8^DnMX={KJ\G Oo%Ɗ牏,b` 1p9&sjJjJVUX*XςuVmVJ8Y+ܹvu.Y]gqYuwRWSW;d%;XVb;wsrwsYq4w(X7swpXV{7;<,bowSA#wd سVui`z#0,f|Y \7W/㪍jC!rG4]&F_^ݻ\!X}7(JE}nevǘV̲٭gvØM{$3ͣ"YOEuM'vBacȪQD2i_.b}XE(m"k<=Ditwqg0Qc2H_7!ACVq+qoPuO%% ܇=Y(p,r}Y7pl1wȿLu~V#d c)3ۘY% g ̮ 3B3ˢx5E7yN7D~JOwnni]וCWL e0j\/nSE0eF-Gmh-sFdchvF378iF;֊s#GNFͨ' `3zQ/1Q9Z7 #d藺3j1qF,`ēʈXhՌVg~CBj2.c.e[gD #p3}#RfА-=hN>}$]D ^_])u5BQQPC}[@x %K:9b-} ? p/?}0asa b10C0<a< t1 0S0? XI\+D3h.VVM^JLuu],]7񊮗-p`7Z'&EI0E=)]ɐbF,xB6p[č!G⺐v >ׅ3›@(+ n ?"v(<x b{A0' p*@5 ^|k fB#h MK<)Ăo[6h(=5Uu)N]=n}#gAh7C.A>E, H[P(2p P*5DvFv:wED;QǸ&zS]{/0½0UCa xFHa q< xB,WX) *LJ.kHrq%:C-xlmvNK58p2J*}J*}J*}J*}JUWկP_VVVVVVVVVVV"WQWQWQWQWKL~-]!ڣv"b}W}ye^) 6w Q~[x0 = Bh"] Ɨ?\wWe'gxuS^90o:e먥E,. 38O 9z(8b,#↱a,.\FQŹbqXEH\'׉ubqX\'׉e2lFquw]GpqwGpq>FQTV@ t`OKX$|6} D{jtIɊD"H+D"H+D"H+D"E*bL~\4b%Wu;kČ1F̸38f<?3q̸3nq1 \1jk;=6QFJf2#%8р3Ùrfkμ3D|ΙXVa^?AƠTFq"?("EĠ"bPD A 1u("EĠ"bPD A1("^1GǸufacv<acv<acv<ac6@ (ܝ) |` (;Vc/b@XXXA)k;Vc;Vc;Vc;Vc;VPT=UEc' **x2z(^PQҾ +" +" +" +" +" +" +" h**139Ό#Hsi#MS8C ̉ن3Gr惜93sfwی3BUI6+`q%+9 |Oy y?zHV~>mZI6w4M4 DE JhAoӂަM4M zhzhMoMoMoMoMoMoMoMoMoMoMoMoMoMoM%oI\*桲yha胒$b?)y0/N@>D?Ԃ~PsC-臢釢釢釢釢Cvs'!o$Qy^A_Ԃ(://///$E( IgQ"(((Q G-ZEEEEEEEEEYIxVg%YIxV0#/K | ;{8=\<=\<=\;zvpõkG׎..=\'zNp:uD׉=\'zytU29qu9'SpݓZPm- y B»ûqYa-8 ڨڋڼe$W*J;uɑͨ)tJF wB{_)3ry^]•zc*kظa0r;QncL[ fyY^OgY~A?렟u:gY~A?렟u:gY~A?렟u:gY~A?렟u:gby/|x1:BX%H%2RX./~M?\ h?SZpn2 YCO,u:}z_Au:Bv'Av;z`=#t;`}>Av;`}>Av;^@(A8O~ބU߂a-C6Fx6fx>]Ͻw=ܻ{sz]Ͻw=g9|_W5o[~8A8ezY7C.A>E,njlj'ZMqh\;׎Ƶ mړpi#~\;׎Ƶqh\;׎ƵPCic?=Uz>j"-erzkrCr+~vKjxE Ca(r8A<a q<<x"L,_n8h/)8vxNnr3`fQڟyݵvC/e=/qw/`λԦ0j.<~P61\(08xG` O3^}ϗ c[WO8@!I˭"C:~?_@K";*hϡ4"OKNqEn"+6YBğ#Cz_!r-T?Q:& 1t+YJ4dW;` dMUYJiDZ!VHi"Hi"H+TFdD(/s\ xV|5!G9N0flsy'K 3 ]cwAw=n}0A0!R5 a0A#a=VJX+c%zD=VJX+c%zD=VJX+c%zD!zjLa̅aEXIbx>x2W"j* j* j* j* װ6Fx6fx>-!|[alvǰ>=)|e!i"%EODB*LT~.E,-Dp.rH gPfQni +%aS\ =+8'0fY_;N`f'0f<(/"Ӊt<(O'Ӊt<(O'Ӊt<($3L<($3L<($3L<($3L<($3L<($3L<($-D(B[r Qn!-D(6FۈrQn#mD(6FۈrQn#mD(6FۈrQn#mDyhNGyע\THWC3[J't*wrQ!|(CMM]RȦRȮS)dS)dS)dS)dS)dS)dS)dשT T Gȋ_9֭V|5#sJAAAAAA>P/  CA><#OP>#OP PPPPPPPPPPvv8G-'ea7F^_Fv@ދP})j<Ԝ/ m|rDNBN_KQ;^g /CΠ½(܍(܉(x:}tԫ(ՉR(ՉR(ՉR(ՉR(ՉR(э(э(э(э(э(э(э(э(э(э(э(э(э(ы(ы(ы(ы(_W~NzKe@.B.B.B.B.B.B.B.B.FnFnFnFnFnFnFnFnFnFnFnFn|'ԖC}) P'2eWKhBA~@ShU&/qf!.L3dJ;T蔃ܜUlDt{m #ձ6FdӜl=g;9ۇ* J`'rxd<5ˉ_#1Tfddw Y{)^Wཪ>;л;л;л;л;л;л;л;л;л;л;л;л;{z@W ^+{:-A%hKE[*RіT-mhKE[*RіT-mhKE[*RіT-m"UPev"G_rzb=;Y}g+'vtvBGE$2Ms콕ZCPk{=jmZCPk{=jmZCPk{=jm'Nh{ m+QF߫w4]+ZT⻞@DFFMa/"uF5|?=|Q Q)T{ WCagEftX8HeVSˬ֍Q\5ʟS=E %S( >OS( >OS( >O`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6` v` v` v` v`_װ5 _װ5 _װ5 _װ5 _װ5 _װ5 Cm21 p21MF<&ʗP"CFP 6Am LG&# yd<2A LG&# yd<2A LG&#ZDh5fLV3j&ZDh5fLV3j&ZDh5fLV3ѪW*ͨρ⊉PWg2?K5N^({\GJݒ^uh&n+ paً(R:m(چm(ق=:i|4.Eե\ivx O'_F6TmC6mC6mC6mC6mC6mC6mC6mEVmEVmEVmEVmEVmEVmEVmEVmEVmEVmEVmEVmEɗ첇]v.{ea=첇]v.{ea=첇]v.{ea=Gf %5-]/`܁il|!?/.=R)(!o*R){ϳFQ|Wߣ>= Ѐ h}}z]BoZjDe~aÝN0so%֐%0]Z | / T*g_eE~qоg5~VjY ?g5~VjY ?g5~VjY ?g5~VjY ?g5Ǔۓۓ{Ǔ ;#+MVBV$* ׾ya5cGOh򫞴ɽT9Sޤ]b\rZ.VjX-b\rZ.VjX-b\rZ.VjX-B;>C;>C;>C;>C;>Vt +ښgE[X12Vt+ڕ~utal`lGv;a| g䣱W:u'~_O\ J:ց0DU䊪{@?wU4i w䐅SsӇD=΢+~'jY߆k~G_2ɣANeA.óNI;NQ-jaW4F^1-&.`M찉6&va;lbM찉6&vaה<{dIA~V gYO{7y2\os샜}ۑO@(?2~FQRj;}ՓNmJ9UP |wG.9*7nF9& դQGj+ }'_W(~rp/(B+8 դq(& Ť4T~' `6́<̓i111110f, s`.</Hj! kVހ7a5 kX'Qq>*G8|TQq>*G8|TQq>*G8|T+D5yI_վ=zУGN(z<rP}:uF0RN}v*{]҃)uFg*VT2ZY铯ǧ0Ach"n n$S7A4qr3)B3kr4ny V(56c;yw:q'q777`PG;CZʱ P7+J^_stV5OWրc9 |^Jg0 0cictNa`8yap|P8RkG2n42)2GA T> |ǥOI, pQ[rx<Iue^a*D:}PYÊ fE*9լ;?o)_uWךqMf?ec7yEu9] Ŭ$RrsBCp\/1]dN8&rbMZ!Z抇 ōDѷ2g3ZFΈ*#k=s1w#3qF\Ӵ'e%=fcJ'F#jC\5HѦ,(a2F&_XbV A)3pqbVՊ)HEy3Y(#Fs?o!BPF :ʝ?͝{١Ōc32F$~u}/lvk P?s$kwY G⁉vAVYt1X*ne3̤Yx'\G_uLyy1 ;a/.1lfI P"`?1̤\t`/)$,>!)f25h txJeftCyGƺFXј59L^b&Wyvz@ne=cp\"}zǩr/H'}*Cy~- n%P e${YX.2L.Er\d 2T%Er,( UIz 9>|d*j@r d*zp*T袊L)4mBMd-Y2"sR\hfYf*YKd"4TbE; S! rN&{Bsd1YU\d1W)*b4WeRn5|_ #8ɏ2" Ш"h.2"ЮVJ2Om:ʫFq(Ύn5" D@sfbn%zݥ q:zr9Z]Ι~tG~tG>tZNԏNӏ>ӏ6TN+ѦmjЧ}4GF:j׬EMׇ=ƝqD>> @GrmS8i8Y|,H?M?BG~Z>ӏ>TY+gJG~tG~*G~4G9h4mѢѠikKKfGg^tEg^mЊщ}ч]Pݜ9Aus tRN*.4 B# eG}ч}ч}ч:5ey?ʎbv{q:;\Ugwv t~;[cwCܯv;v;vv1;]]̮Ujn~'7a'7*v/vw+g{{حٙ--u:nd[٥Qv(t]vw*3נ_ė)_t7-[myFe<_A LΨ}XT>n!n!=c%R+Nz=^|ӂg^//4j;.QQ!w]pW9h̄L2K53.`iʌ-ŒfjiݓYeY~,Әe<,^fgfkaV03 ;03.٥1;A&L/*zyS{_by/Y\MJZUΚT&Zm2YB֥Jm"_eD/nf6Bˢk0e*e>h;ݐh"wa v3v:3cѧjf ߋ7J3 xeUPpJ*U'1s|?d#7FR ӘփzUV{x{x fF43b5#^O2b9# #^f+ F̈}!Pquّ]1ojAp}"34Q/XWh߅WVREέ!JlDI5q :@SKsD+h-ϋ6V&;"N&rX!3J8kO"]>(r0F2!1ID~;[ܝ2l6'(q<.gzz?9gP#s=[[vYl Yl wCڂΝa2}oǾjs%q0Gx(lj<Lg9`6l5fEm|~;쀝 >ݰGE~~Co;}T1GE抶uvyN4򊈊,(T)Ch14Fp3O}*Si*mZB+h m- w+JXtsF9H~n4q< xy^D L OTx Sg`:< )Y0[́<̃`LPbx ax2x |~}Lr!.BFob P(2p P߂_[;+߀dEQeF@QdAeQAAEZFI2]ZҔR@ P Ns{99w眵\/n49 N2d;4vi Sf~",^CQ& :fq學>t;1jGssq pˑ{Vk9ZH#^9R(>ksdϭʞ[=*{nMܪu;ww`ޙ޹*{_ {}URufﻛ*{_ {}URuf{}dzֿ-[boײeK_˖-}-[ZlkײE_O[d-2` Ee-r/[^Țl{"Ee-r/[SlE>![dȇ"Ee3-f[LU)l1bLaS-f [>?ȥNs\4(js9"W"/WC*}2ɵN2IБsZ<>nm':]prG#uGβy0xXsV9+xaY Q  M4lh.D M$L),?fvr3yf3|٘0 hd ,eˑ+C2&۩x3<9Z؄C$xFYDp"__h2s?/܆uRy'ekY'n"?;lRklAnӽy}2t?9GMӸr9`p9o]!ϙB `v0;!Bcn( LRxze&x#et)Aeܩ,K:Fo|HD )؎\ Ủ9I&)2=vrn Η%s,0?Kp9˸ps}^D޳,K@i!dd)|Y,1yn#G̷YSN0Ry02L1u be)G Y儘8N&= Ӌ_C<:ؗb?֗>%6Kcgϱ Y6Xm"6Wc#m2`CG_S_#ML˼Ri$ޒ *lsU;U2P[1)9ZYD+Z.crY\F з}+@ з}+@ 0o[Vo[Vo[Vo[Vo[VPj#4+X65ѷL-Em!ӷ:Q$: sq\ |,B,2YnK֗+.{HqZ>zlFl·،-[$QOMf )؎; ~ObbtYALR"`~Qq92Q=|XP; qEp ΢[uw2M T|2SR5 !8MB' )wj&(0#"5 Th$n^D>9TNk|bP{X7{6R^9ZgtAWtGSUpLz1ت x0oa;m$QxGc&Ԧ`*>4L't,?,̕,a>`!cxL_aAj˱+ _KC[o b3;lE"mHv9.?g_{q4"1D8\Dq 6(,.2n&nICMXֺ1SGk=S_?!Ymypކ|myT&Z9ZYD+3 o}/-^B;GtD'肮W]d큞Wzlxa0`(0 [Fbh1c̥o?ދ(Ƞu֏Yyןʳ֙uxx:i<`޷2[a1K,WXx$`9V`%Vku-:l&|؂HB2!۱c'va7Ȁ˚4#SX1L qyGۜe!/~0Z(E7d&|f0?mpG-vKOq? Ȋդc ĥɃq2)|qbxn^n$k^բX ,꡻zO4쥂B<|N4^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:NS.:NS.:Nu_tI=-Ni+ލ2!#Dy\\W蒞_zq~͇"7brtmWו)tCt=䷦&7c4NH0E>*qKґYz.,{t3̣!r<̣+/)>s\,WUKt0/Kt0/K\t0}7mM3Yfɥl&st96OG_ŒBJCC?ПџѝѝѕёЁ8|\$Lߩa cLL9^9fcea>`!lu)2Gˌe2cz1̘^fL/3ˌe2cz1̘^fL/3ˌeq1ϸg\3.󌋣գ3.y;@7xw0ysbñ xmڡ=:#:qyEX1J1Z,#qX"&ݦL/(3u7ԋLS="KM<66_Kڏn?nv:Ы3;laws\ؤ+tLxM1VL}Cl_vmOOl3=9c KĒ זgL^+r5 Yjͨ53,]{M n֮;֏[?cuk7(jmh񁍝6Pkc&uSM8֦ݛ6雊7]2nˌ-K[cߒ%ckV['Ě-;%8!qf ;'f$N2#іh$$=(uR~o&H43iMRbI'IO$Jq W%۲491ywrZRדu֋H|mgu֙mmնmϾͿRjL2!e]ʑ\^c{}>})n?vv3wّviO4T}meaN`w0;|s9!EC4% -,ZZ9f/|"KIp'}Ip'}Ip'}Ip'}Ip'}Ip'}Ip'}Ip.4:8c511r'b&T4L'? sXt!I;,Op/@f/ZyqQLo#Qs.#WepG+]J8RzG*>yt?`ze L<em,B"Γ SV\%y8:N8:N8:%te'km(/(?2[~veW()e?;9(JPҸL,VB(⺎ŋJyrIyLJ<"bH9+(\5ܞRn7yq:)cyM<%T7BMYffA,sf K Vi7yy|ϲkuMn[laf/|O2] i1bca=e7頯:諎^|%Y[KcH[c2;̌}\kZgl%jmt['Iumt[GQ;̊u^Q/֐9~y:T^ pz9eX:ibzEbf#/WU*Ul;Թ,<,2#n,Q:l&|؂HbBOf )/*u'va7~ ?33"Ϫ{O, RqDfGLd!Ǒ#'#'y)6BF8(o8,"U Q9^Dwz'Iwz'Iwz'Iwz'IwZ,P*8wn܃{QMXFiukZ=xE>@+HԚzZSQMkβ YvFtE7tG*ߵ`c}_70qN71 FmTR6 b40|1h'dLǘ3)fa6`.<,b, /oR|e- *ײDc_4Ec6h/hI`_4Ec_4Ec_4EEc_}`_4EKC:aQd dv veN@G.N"8 `G,N,Cڵ3(f<7y\_m^R5p]5ECkSmmhgy xmڡ=:#:etFtE7z^k>~?u x0oa;Qx~8Q:[?d90a cLt|31 a,~yXEX%K! XXUX-Z>7X؀؄o["IH5۱c'va7HϚ4#C^f";̔V8<l(z,#T,\~"2z`BXƟ wxB[)ŭ㾎^*mqiHYqdO\,y]i81Xh~*AuZ#,k6=4hLih.Si4Te*2fJLY,h4Te*F,m4KF,m4KF,m4KF,m4KF,m4KF,m4KF,m4KF,m4KҠYFG4R]Kv.SiTڥNL],e2vE.si\e.2vK̥].sile62v/D*P5Z Ny>i6f!seK<,H73,ZqZg.33ROKͶ.v86fkhH+n* 7M*\{rsi|BZ"ηqfvh򤲞Nzm^Fzm^Fzm\Zo.7֛NՕd)7{JMf|3hiii Oͣf+>f1Zn6{v\o.;<6ۣr휷4lᱴY6\cwNgъ+NEⲿӺ/Gr-+{_y\T6tКsiͩ4Zs*9|֜KkΥ5+͹7͹7+ij+ :KΥAgӠ/UVyhihYLZt&--:k~h5XI3}Di9iQZyyV} {{,sZ7˽2NΧaҰSiY4Tv* ;OöuyƜUϧmivڶNi:m;vNi:[q4nƭӸSi:[qhihh:;֝N#h:[yy4L4TNcbeQLX8*i:-<O ϧpSiᩴTZA ώY'}4@lm駍gSiii6ڸ6ޅ6^6nh6ڸ6nGn6JOiji4Xw|x*m<6~6~6>6~6~6Mϣڸ6ji(Z1)9ZYDZK9ϣ ^h /3+@O^e5f1c ?CX7Yᬿrfg}-o1 $$cR;K,hiu-'Ńj)`iY񐥄?U[꽨p?<ꢡ kTFeQGTQsq<'QO3hFҭ6aٔe34gEKt~;z'zUޘ(S'a&f3|٘#sY~yXeGuX ؈Ma+$z,9F)؎; ~OY"3_Y߃'YALU"B6#G'#'9-biC(i38s8 dy쳪 +\J^ͅM}A\CQr[6_M" 2Ucy=D&M:¢5Z=Q_{\ў-X\jxZkYv^:guFtE7tGIUpz丩 x0oa;Im$Qxf`Xc&9HcFӦcLt|"s,?1i0s0Wi_XXcҖ+,C~2: ` Pa0o(xc y<7,'pI0STiO0b&f3̕/0Aߴ7Mb,X HrJjy5i-:l&|؂HB2!۱c'va7~׬")" 8" k͔5O7#'|O6cV;_rbyjp>Q֛(œ6_#ej 5nZԊ[#}q*g&?.5Йq霏\˓~,}"&,4| 4GXڨz8{DC47AS4hVh1<9-^gD;GtD'肮W@=*^CoA_C 701C&K!zѢxcd1 z *ˏ 1 >fb>瘍9/0@担X$b.KyV,e=<:|6yM,Q( i"#p)q+'oG>'#p]ƪP+|*ܬ{aa\ߪ;WVt3d~TCߗ4=z *ZGe˺TYOI|5tss|-ArfX̉\.Ifq,wԜŬRs.2h>igesLGf#3QLGftdf:23\5N :ʤ|M~r0oq¸zoO w7ߗ06$Qdf m mLU~DfoO cɢW5~DfL1pu2[K^}-Édfl=<{X=2<z>NEDK\- 1cKU$BaYTZU1^pJYPcT'9O}YZ%,3- M Ϣ%Z'>h"%C{t@Gt.nx=ߞ,=Y?u oO|oO|i(i| ,0!&a2dlC cvw,'D .[rEmIq&&Y X/Do9+YJX7dz,R+{Q~TxE!50jCeP?GQ!cxx 4AC0MX6e Yog]e ;z'zUޘ(Q'a&f3|٘#~V0 ׀䪴A6UڠA6UڠJTi*m7)*mP A6UڠJTi*mP ߤ䪴A6IUi*mP GdzDq9z:rq)6BF8(o8sdy쿪 (\3J^T !( D9-q/VE5 ThL-]^TIhjoRjTDMKZ,5&T<5gنAhם]MhY@Op^M78vj}яg91T701C&a8w#Y»>`,>80j̽s6AL`.Ӧk3X~c.fa6 yXET[r _a- *9`c6&b3;lE"mHv0_iWNn~/{pH|E2C3 I!`C(qVe3vm(}%;.˳\;il?J@~_iW~ZSԲxuPxi~?u x0oa;Qx'Xdz@{DLd|)1 fS,|0 K%+,C<+P:ֵ-6c V$" ؆l|؅ݨMJߚ47)L8g˓O:rqy)P v7b}%7QfC-e6}̏q+D⽸բvZ`yPőqid\:#Y&"bM\EKBk<'3h "0exf!_OĤ:21#W -pqFy^p粗GG>Q%▌a_i[ie4$}m>ڈk#{(255hٺ2Q)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)~%SJLZ |<gLS0mOa4a,f,f,f,f,f,f,f,f,f,f,f,f,VmHv؉]؍#~{p8"uL)Sgԙ2uL)Sg````ԙ030u&L Sgԙ0u&L Sgԙ0u&L Sgԙ0u&L]'. Sgԙ0u&L Sgԙ0u&L SWth&(0#BZBn^TieJϔX).L[kvL3Lr:$3Lr:$3Lr:$3LrFbh1ca<&c$3Lr:$3Lr:^9W2t sHR;!sHR;!sHR;!sHR;!sHR;!sHR;!sHR.!KHR.!KHR4}:[ZLsd)s4I4I4IKN*dn9͑+X$q=Αw1GQ#Un2%ϙ>LǦ22#赘o#^Sx-+-Ni 8pHϑ#MGx4i{s)HS&#MۊLJ!5U۫w`~={8{$}!>D҇HI"C{t!!=DH"C{t!=DH"C$wqD H!)D"HItIV;?iycN.SM} Sy4\0syNqD>-!WW9^J6^lRk㻧9p)0p$:ⓔ\:&I>QSJ+=\>#%}brKO+~~P*?$zb_g擕(9rLP9+|#+dE/;,⢟_e{^z^"`E/[xne<2G1\n_xDE"ιs.~Vy'2r!QE(<5繍6*wAau:F|wWg/4@a<#1J4Y.Y".BڎbxUfsoG!b[q+\U9Wu\G(Ty'GrR8&9&9&H2rltЗ}e}'1 4@ZZg#(fp3Kڣ:^FgtAWt+^x7/?u xä+wo>oĨm=1cY~} O$L돢`,|S̔,|1s0_`cB,/Y.ez.}gϘyg_cLGLe *5{)ܞ2G.P I ]|HD `;vpYOa_318L!`C.I2bwVyB^R_^'fd9UNjZV9UNjZV9UNjZV9UNjZV9UNjZV9UNjZV9UNjZUiUF Y$d}A>@bʘbʘbʘbʘbʘbҫ~,`p0 8fYA}}}G}}}G}t}]G}t}]G}t}]G}t}]G}t|_tݏ84yMM!llllllllllllllllΆy~?% !( D9-q/ߐҥ ߾._[U^_AGHw#}t>GHI/YF^n=D$zDnKI0&}$DWHt/"$Da=LHtD7HtD7HtD7HtD7HtD7Ht#=$z)naR R R ݤaRGI i$Mi4 h>)O擢h>)O擢~ROIQ?)'E~ROIQ?)'E~ROIQ?)'E~ROIQ?)'Eäh nRMIQ7)&E^RKIQ7)&EݤunRMIQ7)&EݤunRMIQ7)&EݤunRMAAAAAAAAA^!EWH+R )zRCzHQ)!E=h aR4LI0)&Eäh aR4LI0)&Eäh aR4LI0)&Eäh aR4LI0)&Eäh aR4LI0)&Eäh aR4LI0)&Eäh nRMIQ7)&EݤunRMIQ7)&EݤunRMIQ7)&EݤunRMI0)&Eäh aR4LI0)&Eä~ROIQ?)'E>RGHQ)#E}>RGHQ)#E}>RGHQ)#E}>RGHQ)#E}>RGHQ)#E}h !R4DH)"ECh !R4DH)"ECh !R4DH)$EY*0 2n aMIV7&Y$kd !5DF~Uh7=M.&e+{ z-l夭6HI[|2{KBk</-^C{t@Gt.nx= 5FE?x0C0obHږA6HIi mm A6@I i mm~OH i'mNem6i{M&moIۤm6i#m}ti7iiK{I SGT_Ici\ %EH")dAO2I$$m6'/~_ٵ$_$sd~d.#H2d.#H2d.#o̷IR9HVv )$H2R:@Jet)]FJ~ROJH)$o~knknknknknknknv1]:uLי3\g:O] L7n0ܠk."""""""""u9 +k5JӃaz0=x9O}hDdzYϡ}3gsCyQ/DB <'Q/zIK^D$%Q/zIK^D$%Q/O^z!ꅨ^z!P/z9ˡ^rCP/z9ˡ^rCP/z9ˡ^rCP/z9ˡ^rCP/z9ˡ^rCP/z9ˡ^rCP/?|9z9ˡ^rCP/BrF4Q/ziK^ҨFvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvˢ^E,eQ/zYˢ^E,eQ/zYˢ^E,eQY{Vܩg3w;̝zN=s'">)YKq ".A% D\K1:gE,"f1ab1"f1jOB"1)DL!b/""b/"1-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂U=qG<"=q~xחSBT'A "f1S[[[[[["S؁x N'FOVh :BRqsBkkέZWޝ[TEǷ܂-؂-؂-؂-؂-؊ P[P1-؂-؂-B*SA *fP1T̠b3A *fP1T̠b3A *fP1T̠b3A *fP1T̠bU` SB*P{Q{QSB*P1)TLb SB*P1)TLb SB*P1)TLb [P[P[P[P[P[P[P[P[PWjT\Qq5*Fը؋؋؋yṬbG<*Q1yṬbG<*Q1F/*P1)TLb SB*P1)TLb SB*P1)TLb SB*P1_|=6T̠b3A *fP1Z؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊*>؁؁؁؋8*>8*>8*>qtk)TLb Sz*V~TGjzgsCVg]=S>SOUW)U*T\Pe>q>%}s6dBU[O ^OlAnD!bKpm'Om'.G[1:D g؏؏؏؏؏؏؏؏؏؏؏؏؏؏؏>Ύ19D!b)"v#b7"v#b7"v#b7"v'ώW[gG[W!*D\q"BU"2D\q".Ce !2D\-؂-؂-R3``FX3{k.575~_--k & H\yJ[`b{Wb-dj>beDmV_G42VE#g4L^zu aС@pA3Jg$NM|7;D⢠` {Q%Fݭ-us; 8{܁(ZSi}et]Mߠoҵm W0nl+=8W&~grcشtet|$ݔtSnzGnz&-ݤt#;ݦtSnMQ)J7xtSnM(tJ7tJ7=Mt#݄MQIK7t AHMN)VɮCn:Cn:CnRMJyMv&GjII-E(H-i%ZRK(tH->-䤕$:$IeRT)_ۣVG=JZBII(RP:$ $$RPJJIB)I(% $$RPJJIB)I(% $$RPJJIB)I(% Tf!3-Ѩ(%#H(=J#%PJZBPz$ GBPz$ GBPz$ GBPz$ GBPz$ GBPz$ ;uk$5 eFBY#PJQB)J(E (%RPJQB)J(E (%RPJQB)J(E (%RPJQB)J(E (%RPJQB)J(E (J(J(J(J(J(J(J#H(=J#H(=J#H(=J#H(=J#H(=J#H(=J#H(J(J(J(J(J(PrJNBI(9 %'$P:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBII() %%$PRJJBII() %%$PRJJBII() %%$PPOmgm$4I&MId$4I&MId$4I #H =HOCܫˋT25JI `&jƟXj #ONKBEw'՜ #xVʹeeꨏϹOvW/PyTǡv މo5{!T!&!&!!!.!Xs.2n!"3×##M_U:MMtCԯv#{7齞ġtzg|gwl.F7!!~: FG~~ި깶5F8߁Х[|FV6u Ojlz+{jԐ=?#G`u&G^R lj=yc^lnvkm>v]pgƳnJ ?E!G#ȟſ'NN o=}WFi#HG?Z=>Y{\hcI?Eϣ,t<?YѬHOOOf3l\4]Z|V+g+i9[-w$$n9?9r~%w]r~en|/Xojj;8χV>%euy +E?R?,wiyQ+6˕Ӳ~gV/uyCO𽜜fy=-wiN?=^z4:Ct}#H:cXG tG_^J9Nd:өa:-?΢t}.z/ˣ+KeIWעNWE1s9f.嘹3cr\oAҭ4~L?Ff}LJlnR7c1fv>ݬi4cVfxU*lo4c1f}L>YӬi4c>&mIZyV'iIZyJ\Aږ©Npj-NũՒKbZJaU'V*UXՉUԉO)lĢycAߤYt }out}V7Fay&;Ӣ~oŰV%z Xd:fD#5tyӥQ RՉ[)ꬱ/5:aQV RQ(WsIn~Mo>̗%KԸ'ܸ'h6VVЬt=1q.WEcg4,eRr)xz GGGGGGGGGV9?;>w:#(:cCtO'ЉtLt:>LtIgGl(Cٝs]pKa}3>n/t]]Ό;CwF|s07`ns3 f07̝s17bs)8>B;,qaԜ(GNphq߆o3Õ3S7Mnǽ8wpwpwpwpwpgp8 \OD]XU9۵ewp^t^tp8R9#v[t .g~g;)>KvL=.M5?Ѓ g؞vDKizizizizio/] m> 2B+)>;r9n========L¤.L¤.L¤.L¤.L¤.L¤.L¤.L¤.L>\9#pYC:h`z-韝5<6 WnÕpYē]BT0FәeH4E4E4rc.㳎3\~Χ (> yˋbH~g9>ON_WkvV9yout=g6&,]W3Mg7s\28 ep.s\28 ep.s\28 ep.s\28 ep.s\28 e*gf\ssqn.Ź87V>9zQ3%jVzکC~xV:ezVRuWߋӋs8׋s8׋s8׋s8׋s8@|p{nUgSSSn.źX7orysǤZ=*]!tqܒ%YU^os=+FO'ٷĉ}+h#3uX뢴|-83.Oѧ3~9?pkM% `.py|I ~A_Š/'M|"q<(7qqp=5W6=lݗ MHOg flOG1z<荴#DMKp]i7L'Eoi_ڏAӻ=>j;ЁtMCat8AGQttpQ]0]|*`'Fe 7mԚ6,4$7 MCrШ4*ArШ4*ArШ4*ArШ4*ArШ4*ArШ4*ArШ4*ArШ4*Ao:)z1cY$ípkI:gyⰨ7h(q#\F|SsgG?ҝQ;.RT)棬1FeQcT1FeQcT1Feѭ);*KrĨ1*G0$/ C0$/ C0$/ CV!yaH^!yaH^!yaH^!yaH^!yaH^QQQQQQQQQ!eu[kmZfkm&֪nPK|^iNyƆ෕omݻ8gyh"ۏW~ 'kk#)................qF2\+e j׫z/ׁX?i}ۧE+^ؠ_ؠOؠ 귨~귨~귨~귨~귨~CQEvjvj(6ٻ {d] {A {o wA.ٻ {d] wA..ٻ {d] wA.ٻ {tQMtQMtQMtQMtQMtQMtQMtQMtQMzDGzD pA.Y d,\ pA.Y d,\ pA.Y d,\ pA)X[[[[[֖lm)[[֖lM)XS ֔5`M)XS ֔5`M)XS ++ߝP 2ZAF+hylC|>Y MWq Ty۩ /U%[?ks_NjGɨuGvyw%ޔ828.qw'ZKNOOﱥ5ޖ"D?/]{o^ܻǽ{*(k+T{4%_[I=yw{ɨ:rujcI:5j5*os7[ӽ:euwyV\͕5msd` C6Ȑ 2by19Ak9AkAkAkYRD9n9\;L潒vAnkAnkAnk䶆 5{qDGtzg۳3 {OѭjOoάUQ#VoF<7 +lʖlʖlʖl-e^ e0DT|b_Jї*嵑*Cy9.B9._s=zd<ğLB9,M<|$rX(rX(尼rX^ P P P P P orX(rX(rX(rX(rX(rXXE %jI<5,[U([U([U([U([UX9Ws!]Dӧ,}.ӿ+9W<7O#4O#4O#4O#4O#4";S(;S(;şW<'b3{;/[T|u:_etBgƺ-g ,%~dOXBޭՔ0Mp(}6M$vq9[[+^UX}i=}˽۲o*ewB^|#{sO/T T?W1yo[t喱>wg˖\)5ţ}cjsqn}r#–{UݲGil.2cRM̫uEknŏywv)C)s }w7v=%OV-kݦ9_zcxrS[fcQl}J16Ò[ֺ9Qo')_\ZdmDt]ݳ?-7-ޜ2_xvϰ3^UWdDzI-ϲ,/Tzq?TNV\͕{=^Ϲsڬ#g|FtOfM=馊gtqT-NǷm^7 ->h_jznsUW{=^ny|e->>wKEBgG 럠/ֿ6a2'[]Mo}ޗ;.5qOFA#2?Z4*)oD^:nT>r}ﻣ.#ed A*Yuk.l_r YӢ/wGݵE{\W7n46|9h4+|9h4+|9h7|9h7+J9h7+J9(SYѲkow{}@?ZD?E. }fF V6G里tH4:Ct}#H:cXG tbpLt:>LtIy"]Jt}L3J }F_j͊o7\KߦznM4Kߣf~Hҏ'چmt;i~IwН+{t/|Z 7[gZw[81,:PTwqtGqt3GY\=gq=g9})q,nfΞٳ8{Vݵ/뮋~ 9|ָh˸M3MFq^zYߢhI4+\9+gq,ŕrWY\9+gql͕r6W\9+gsl͕r6W\9+gsl͕r6W\9+gsl͕r>W\9+s|ϕΈ"th8>J\AOyI:. ">EgstIrB_ ~!/\rB_ ~!/\r}37s<~y\?q<~y\?q<~9\?ps~9\?ps~9\?psFVF Kꗸzm)}FZٔ^3b1166x16y[à:ȫ|;h zAsޜi}8*>\.EDjRz)M}~ k.s4@yZgTaGhTVז]6yKkRѸ(U huD?;>ם@')nOV֝R՝(SwIgEkt2~ DƍDER M;HGh^.h d'C~%}Yḧ́%UR^_1!Ch QGÏކbX7.Ǽƍ91rDO8>C..zʹz]Q":V덼Gz#덼덼>^oF^oo )Z'y<󍵥?Fo|c]qO],7}#g&g f8~ohfFsmw&YFȆߨ>zo71kF'ԟ߱1;q}l2zVDGybB섷N's0^o ?x$^4I\ύ|?ϟT~ύ's#?~retE'>M|psƬ#|Nloa*swqWjƸiƸi̊Y1nÊY1n㦵4Mct7qӘղIcâBpG<;Zۊk=M%.H+ ƸiƸi8i8N1Nj8Nz;h-墱 V1*^F36uAT%N1+g{8gk8fX:%([KgF6]jWڕ%]j7cV8`3?d2YنlCV!+ېm8c0c0cY/[JAMp`iA8#qFH8+I8;M|"q~P8>qE⪠!qC`R;oJ&2[D!س樚}kP_ 59Ԡ洚ӃԜYsfsjfd'j. Vsa5|Kk. 15W|-8檚jQkj \WsSpZ57gZ5?Ij༚'jKS5j߬iY̪I֬ nI䂟׬)w Ռ)Qg~$X^ڏ/Aw/jUյ6]P A탵 0H<; +fnNqC> &5&nvgaNޤ9nhIwm'ohwh߼כOzW\|sq׽vԮswoOvnu{_!I4y/yEfWߩ{|fwt;8u>ۧ);c[æ|]ǚߴˏ.So}9}GN?cE?73_5[o?>oO:{۳ g>9;x3 Ͽ碳.z/o]C>C>Z@}t#-@>C -@>IfiUJRF5O-Y%4}HӇ4}HӇ4}HӇ4}Hs#!M!i~4?BjiaaF>Y. Х]eOOO M!M,@H@&yA&yA&Y(,aY ?!?!?!?!ǹ$'o$ZH i"-@F&41Q*-@ԇJ}fTnE[QVTxpjA&>L\e'i "-Uxo_fOcs|jOUC; Lgl^[_JH+lqEuG |j(QTGiGȾf [3 :+ŀQ^(_29A>h%8#=h.QGt#J:#J9Q%UܙX*:(t:ʇCiG|HwUpFfT퀪P*5R3*5*3r@UU9`T.QQ1Q}՗1jvQߨo7jg3FQKTWQu zՕ8wQ{sr F+FĤh{1n^̹smcν֑ǹZ9pνs;sUh&;/p5{Q|չM{G^n~Q)Zl3#x>Dh03`fbWw>v=0f LD LD3a&@Fʷ4lH;~˽1~˽}/q|R4=$NΔ?ŵˢb$I]h&DL4&3d&DH2f5v rDh_3y1=fh_ɋyq1/.F2Af 33E'vv.Pnx1/FӸ4.8 ]N<=gp-\1gXwG=;f Ld!?Er;D2Afr52=p^5>ȑvfF=QϦ|V+>{T]WYٮkU;riלwW=k-Yov/k'o 5gYε❋uszZVYVYsZVY$,8.~8 =Y/RT|fjIѓV'FOO;?`z{?NoGtn!m|*6!ߙJ?lT{pu*?3*?x;.Biw`ϩʏIϨLt. ߻]oUVUQUMGTjFfTj¾YUk*1܌ͨڌGTmFծS9UQ:S  a;r3*7rs9Syu3:UjVê1^1s1s1sQ1ir131& x/kyyJ3 u i)=<͘GTl:?`aN] *2iȳ,帜gYks%3xƑkۢյˣ#}+ꎍV-WvooMx!{x= C+b^9y)z]]ߍUW[:\=\uuGՇǢ 3( ־rG?**s9NUAn٭\>JI8??r0(EFn9~9~9~x+sVrC4?OsW69Q}o\0SQuO利1U7U_;}ɕ.⣊_#&$w 5[puk%A㝾kk0x 5fud6yE"^XT1]eVFy#KT^|`nSK?GNDKѩ 7<Q񫑕Go,شջRǧd߶ ~ҽ_=~?iXw x:NGZwVZ'U/>sOo-|ͬQ1x+ߌH?B[)y9'/圼J99''#)Yx,GR<Hj'q}Ϝ4g+JsҜl`/5Uv.5>Te[ &=pェbJT-ѭUä;17ٝɝŝ\ɥ\ɥ\ɥ\ɝTE[gU_ &lMZy?g}kX f,$gڌp`8EVj £7l:iאOq%p '\ Wr<p}>}7~?qcl(^̵(V\[kmuꈭƩh=lkö=lkiS?y!#o= 鞃{+<^'Y3ll_@oriVme4cq-nYՙEzyǯnL\l&.2oo3ح6f¹f\vq˸e2nwf`ծ͟KuEzY6rxE奶Աī1 E7FSYsl~W~UۈjQm#mD6FTۈj򎨶6FGqGqGqįڎIj=~Qg}o?{OZJ9ugYm]/* i1S1ů>8΂,8ݕx x x x x x x x ⟭A*D[.\oʏ{޴?MR蓌)ܰy+y}}5ΠoAUY%zgp<:dzs<:dz{]5VHx,vϰğy]o>3שqV̉~{ M7 %tO[Y%s&2?k'ovϟu?ZϵAG.9g'my ;]ыtn՝;}Uiڝ*>z4UwJgӤt]hӴ8.q^ݝ;ͽ;-X3rEM]Е[7ڣrz*~n^|noU(Z/ BhTGՑ++ӑ{Z[G&6wWyWy׍Ӎkx8hxhSwڣg3tJ}]A*;`8K0(mn׵]/EHDROlr<ի V'rWvdZZߦQ`_kq(=FQO|BOYmWGT^zϞe.B/_z}JrXwT_w }z@'.@ffyY^`T/_FP+QQl(GZh}oFnF@?'2 ƢX}f>3}_1hx2j Z5Sf,gV=nRM,U;WMI]ߥRMI]7uR7&uݤun.ES'gjlJ QqQ-Qs7bFU\;Ƽcw1;~5F=?[b\Wq-ŵQkKW嵀]s7+Zkx o]m}[k:ZIٿT|~vϵs\k?ϵ~vUuEJ(]}L3J*j}out=;$kHPqfgz:]nKo|{;]H;E$o`o]i7zLi\Ks4"3owD?02wﲂN. - = =$Ѵ`: >glp8AGQt4C҇8:N$:Nt*? |U}&LZvU웬"신[E *(XqCDEeQT X -$B! ]ҴMH@ ޏ̂')n_hxғ0َ=L1^%X a bU2g{fl&p|+k)FJpRA/}.}?@yI?äB?ylWS=fܺ[gGQxeiϖyY엞/𞯊*xnskgc֥s >/` u`~Y33EIqt!IipB)bgmyrKZBIghc٩ ݦ%b-@W=>~p0te!@ۛ) igYxf\^<|x^`,E:,7MX -a9 Xvu`|δH)dr QyԔpN.irJ{S)&\ӄk*2n> ~G2BFWZ|(*sUUAu5Ԇ*h*QV!4B3np;tμg*J=J? +0 w0#hk45{ƽF^2YI0TāxAy '`| W| W\+kqŵZeQyr8 w;gᎳpY,q+xއ3%[a%|c>9|k`-%|kl,Q ?6Hkgۭ쁽@ܫ8G 1 IȂl8! PP.*(7A9T΃G^\_7gaǼdп?㘨v݌cy]`Cna0FV8 `:̀< 0\"x^*K yH}2շa92S]JVǢ Oa5|:X_Wwx | ;{~` la$v;a!^H}~d8)p@*A:+LW3q Niȁ?Μw|Ny(ϙG,s3;e\P %P*n(rm>^'-f?\𫴐[*sÖDž1 "I;oE,+d(W쓟dJ,3u0DT7 uMws} mQ0X3Lp'\)OVr#ifpSG-ܿU3mN)vs_"9{/vŔ-~0ɦb)gDH1ٹ5ME]x]i%V(mXƈQMe<,)]} 򦨪,Fs}g DusC7/s67۹ޒ뭸Qߤ۬k0mGc8q49"aP׏FUNZ??JD;rR~01YyCbeK5"9v)2cYֲ͚uam9&8 g34D\ù>Fr}10x'D q}L|m[\@dKʖZRn ȇІ2LԧasmTl'NP*fzHHo9[-Cz!吲HYY()Fl()Fl(^*^&i T~v²ԇh8GhJi2ԑVPQ:uU? HkNfeRHt*y,95-Rem"dZH=y(mi}M<2A B, 9Vพjtj< >i 5|&+uJd5=OS:X_WMtHD kJ1L'E$Jm`6RX Vjr H`NR'X V+u:J`NR'X V+u:J`NR'XВКe1Ж=tb6oVstsV|ΊY9+>g @wY" `.zbX!_, =BF<14nq+,+HуREQJON( =ʢ˗n|)=B/0 =~8=nJ/,R=7Q,ܾ?0}atg=zFOL'iƟ鍿荇iF qq%]! X62FLw+ʔCOCOR B/K-RvZ'SϘh?SKh @[htN@W=>~p0 w0#`$088%(a JXTӥ4Cjp1-F h0b4ZFha4ZFh ֌NFcha4Ƙ2D<(=)bFQiaTZFQiaTU%0*-J ¨0*-J ¨0*-J ¨0*-J ¨0*-J ¨z๯ =tڞjjjDKKKKKTnr7UMU*wSTnr7UMU*wSTnr7UMU/J(/J%X V) Y.X k&,eRDCC@͍577Œ^op; Z)A KC,bTBZwݤu7iMZwliap\*uqusnnԭ:sm(['p<T4?^Q2kPJQllX+b~JM8šg`ziuGRP(Wʕre\(WuڃrF\Pt+岡\Q#(qJG2Ps(WʕrYQ>6璃QҠDN^GzEzl.F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍr\9g9>jr\\PV(WCeBZ<~p0`CnaQ0X^y/,^W`7eX&=Tb/;5nr;!su=]דe/出>?-&Δ'hBڧP7Sz[@VGZ^:X_W}-/;?alL THty9eJ eP p|Kp~eyI]JV | 35zAeo[& #[`+  gOCP=pp.r ChJ3ο zqA/.8^ќ5٢5rhKotNMY=c{B/ }/ .` 00  `40=0&½pLfSaLv3ZZ8\P %P ҁ:pTQ8Ü) I^R%uzIڼ4 p|2Kp~ TG7}G=gL$<.td }M'2ia]^9Rck휰ǣD-p8Vߊ[Eg]ѝI8dZqR+Njq<( sLO몓9km:,#w@vѵྖ,I#2en'&tC,uCa ɧifo*տx;,ֵxjxjSPJ{I~M`3 a,o$ /b1R~Vjxjxjxjxjxjxjxjxjxjԫ˩WSS^E:q"p8ͅp6\8 gsl.M6 wsn.ͥUp7\ wsn.ͅp7\ ws)?Oϰ `;$RGH(!Leplp2,ȆSpe,+h8VЊZq@RԒUT師:C2g2qL,[&eD}5Jjo{h&nR[XkXq +a5װV\êN)0tTg˙p?<C0<c s0\X"oPPөKahorxޕd1S2EhV͊YQ4k0Ԣ>jQZ4G-?jS U$3"Eqaay8TdPz\-N" )nx65b:f:ȓ0Hi(a0#`$Gh~9x'D q}L'Q2Q-* d K]c-1f14xGi KE5]QEQ:V;D ]Zדe/P`~$$qBM10S nOV qfcm ;GT m"nVvN%nVC 7A}.tnzAo}gﺷIT$|Ҕ_F\^si04O' I|`>I0$O' I$|`>I0$O' I$|`>I0$O'Mڈ= O 9(2OS ",Wa,#=He2c鱌XFz,#9HeZXK 6 | ;{[g ĸvK&D(Q2J%D(Q2J%D(Q2J%D(Q2J%DɤsssssssjuRk@Ms&YH >DAB3 ZB+hm=tnzAo},V0 w0#`$Ƃ:BX/+^a ! H$b鰀tX@:,  au|+#X')sZXK S*cJl=?Oϰ `;쀝ta$H0XBQ-0Nq8S)N'p8 ܡ!qD#H1qD#H1qDB8^e9S}Kp~E;4#I$H$HIҌ$iF^#IHRb$)1IJ$F*+E0tI:$F#IHa$0RO%֫ |8JmV|Mj$5F#IHRc$1Ij$5F#IHRchjDO1]o=۩b.*GXEC&:7H ){=<c+KjS\~W܆e[_,CjNQ :6jh.@5QTUN^PMDM5_tcw &/hE`'O&ޥw9WĻ.v9y-bѲ5ǧ>hOam78>ǃsKɡ>w~s1[@`ԵkG0Qo)PnzP>ͨn$?#1"-!!3ԙNL'u:I,,,tRg:IvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'M۩3_I~Ҵ4'MI~Ҵ4'MI~Ҵ4'MI~ҴIFu$k?j1OiiAviiAviiAvS$$zg[Ե]OX{ILz.zj.z:IwdžH(觰&#S$t?5'I~..&'$t?N:s;N:s;N:sugL =+=+IvҺvҺn'Iv)y[x1]';B}_h_4=8<k`-%|ū}[աԄZP" _+% @i14 n۠9`10=0jg>:ZDPG+ u1Sh:Z) uBPG+0K~Fe.*]T,vQY좲EE1b*9Ts(PQ̡CE1T'I~%Q:=HAHCpR? (+8,ȆSpr p;8vV"pI;ՅNuaS]ة.Tv ;ՅNuaS]ة.Tv ;Յ] %@@UOu᧺S].T~ ?ՅOu᧺S].T~ ?ՅOu᧺S].T~ ?ՅOu᧺S].T~ ?ՅOu᧺S].T~ ?ՅOu᧺S].T~ ?Յ¯Nu,pLp/L0  <#(<8̆90 *?JO%㧒SdT2~*?*AJqP8RT)U*AJqP8RT)U*AJqP8RT)U*AJqP8RT)U*AJqP8RT)U*IJqR8RT)N'U*IJqR8RT)N'U*IJqR8RT)RSJ9Er*U)ST)NNNNNNNNNNB䗳fh.C h" If휅Ny&U*I㤊~)[L\y4xƟ rFE?\bYkҙ,hvթέiСYF å0203-3T *A}_CߨzF zV(^E"JTWx>8Ew+aؾ*}!;!S]n|Pl^i`hd'GL3e6Wߒ3k8w=8sa^ԵySVG x&+gΕxL^&a]T&Q~M'E$Ri_` !ş oe'yKY{2{w($͟UZ s]y\C4hh14 n۠9-%ּgHpwhͭn2Qr['u%{;9;Wr;yGmPyd/HI0׾)MNq=%Wՙ^ s6Th;w5ߛkF>U1;]o߲Vćs3Z5TPb>4Okk' SƆYc3c1Q,22&WI5Ř.02)]LF 籖FQ¦i7y5Jܢ6hh$BfV4jTMUKeZVZ8rJ97ZpnF8.Fr}1x'D q}L.T̮̖E(v~R(JVd(Q(JV9Q2 %+CP2 %+CP2Umd9JVd(Y9JVd(Y9JVd(Y9JVd(Y9JVd(Y9JVd(Y9JVd%(Y JVd%(Y JVd>̇P2JC|(%d>̇P2JC|(%d>̇P2JC|(%dE(%+BɊP"%+BɊP"%g6(E%+B.dE(Y%y,.ͅP4B\( Esh.ͅP4B\( Esh.ͅPrE+GQrE+GQrE+GQrE+GQrE+GQrE+GfdκX$~&Q<v]} 5PPKS:yHwSfnGs]8u>DIm=.Z5 LטM)m<۹,o򨮥~}p> dQ.iI}2SCr3 evHBpB<bY %P*΄1ˡ{}^xB`!>s|ΐ_ iRsi0QfB%5 ]i+]er206#ea-UeDj(MEҭF z4 dHm޽2QnY:&,[Ý\x<_d&\j,PRi/Y=$ {d9)pl~HiN`#Ps1yla;;eYATZ_A='CW[i,t>&h!=S\^U3syf NBm("pp^Y?̀Hrb&$%.qJ!a#a00*h jpnḙ9nI9vU_E$:z-I"L$q Ig86}Qcñ9ϱϱM2`?D`<-"8Ve2XQ\8'sDy0^ "DDiWZZDotB}8>a aiӴ'*Z鴲VN~QR<%JoRKڊ[icB0OC5h"alk-PH/7іeTG[fі94v$LaZx̧= iӴe^ aCӴ]mB[u^FjѢn^y owD{3v{d>5Ϭ{Mx׽O}^ՁWWE:׽ ɫ]v}ۻ]FǠڮ9J{ƫIۥϼvi&}qUhQW{uU^ΫL^Agyy^+#<,㫀W6Ozq^ lG-皵-z؎vm&3" 烟& my d[IeJ3%,;8Y, df +46wfvp_CobES7 >Y*,VA +#\ RX!)ld f#+ Α yeWErI^ 7,tMr/K"x^h٫Z:UWZA;f+5/̈́Klpz_hYI6ppu@fIژ ~ntS!PZ3 ZCCg]t;^@_]@wLNi5A` 2a0B8xt.yrxރX!ӕa%|c>9|kUֱ\_Wo[&  ?6Hkg+{`/P*@*A:c`p NCb<оBWgk(P#.ԃӀe4Pj+;l Cv]`Cn a 2x&DTāxxXxf u>,^W`1 @!`| > Xka/+@[TEl=?Oϰ `;쀝KRwC"쁽`?pR THt8 Vq,N\'! 8KC:s"pA1@)~_|_# p|2@qTǩ}^X@͗'Q-TmMGan(¨ZRŖqqPn6X˝s 8z@Ld9O˕my{8'!`| > Xka/+_7-lmr<_\n$WD8ECj}:Ln,nHXJZ `}r_1y6$+کǖaiM=w8} AMWѦhc1tm6=FMWѦhU*tm6]EMѦhU1m̧=Ӟ~t m Z0-a'n2ϧ#i&ՠоhd]Q=wў^=؟vц{GMs&c1|1c1|$aaׯ9uo_->>{'O16цe6t'Nt7I'N]]'F\M{+}ڔk|t2pKHdŸ?Q]Ҏ>Q򇸹BxXV$'H?}gQc-`>3NHHHh67u)0%e3Y?v}`ߔͤlңOi*W4@V eP.?᱙C<_|“0):;勢|E f9&o?"?uStSZ tħ)))oѿппj@7>1/S ԅ Rv&DM،5j jԀRΤI 8p&5`'jsͩZPB ׄVjfk7Q5&a~@֘z1ZD~c P UlVHǶ2N0NoeuP5O=k<5O=jznd/wL.b X...NbV\j҃\\;vj\ ۄ6b_.mp4)w ҍ3qM8&iΔ3L;q.uqMq8c1rq8F.c1ۄcl16pM8&c ؄cl1|8>Çcp 1|8>Çcp 1|8>#H1p#H1p#H1p#H1p#H1p#H1p#H12p #12p #12p +a18ǰVÊcXq +a18ǰVÊcXq +a18ǰVÊcXqtj8F:a1j8F:a1n1ҩ8+7!cq 7؍c1vq8nc7؍c1vq8nc7؍c1q8vc;؎cl1q8vc;؎cl1q8vc;؎cl1iq.*Db#. H*.17xOP 3 _u/G?nAu~BqP܉{Pt4zQW@Y(J<ʒ$Q(De2@Zrtj۹rOFyѺ *y]?E&u[ѺкXT_N7}_uIlݾ꿅-c+ٺlN{?fSaX8 LBgSqT^ZX3LE#窪;tෟ i0C,cR%Ĩe7Zh?.1LB;%zAn ax av:؄nFS?GS_BSo#t*@: } | ^nB/W-nDnNښhcz =RBO! =R)S桭yhk܌F桑yhdC#<4r3܌FnF#<42܌F桑yhdm&vAmD7 Dڠqиm&8݉@wZ;;;;-ННvt+845ѝD4d Yq3iw幌$>˭eG6,TG:GGգC{dו1}qk? "t !LOkwDk{JwM題gq;'t} o+ =]Lty?rG <<&pha#akv]r o>P{^ 1_JܟrЪU]^-.x-O|Zj\svެF\J5áN͡?֬soJͯO"/2nI~KA_zVoQ@ Qͺ+_ʣc,ΎnXG!8yW/^QFk-ܨ'/&-eM5n״vvYlDGk?or-k}[yU'K~LrL^O*myڷЯ;>=in;+_:Wov=\j <'Y\s9s^K_.~u.W/]kv[nkΥLjeɟ.=~G35>mhU֥[ߡ}7{H326<H33l<|#w;>&$;$rC*4rx~#9<WDr& rx~HOO>& i4rxEv1Miw;CJ9xD)QJ!琿w;FN#i4w;l#/`#/676򲍼l'l me~a/leyنo yF^mxG^KK:9-$mִ5ztKfΰ}l_~p'uk6F,Rg9#V:-\Yu{|WQzefY2+s7~|U|OnMs>;uíT:WJ\_eloͱqGg:1.ԃq^,Ό[1F1Fz$j0SDWc*]?F4T7snGսb/2=gϪP=͞bس0_KK׌c7KYԏD֪\ek2<֒<%p~Wex^ <#ϋg gW[⋭.zMtB`gr_¿mŤ#/B?DO'Q'QugȎGq8Q(o7c(k5qFq\8Q(>a{W:;qGqܣ8Q({=qGqܣ8Q(u!mT4P= 4Jz:kλ-ѴE4mM[D-oѴE4mM[DѴE4mM[Df"-ih"-ih"z={Zeز>lYlB{DѴG4M{DѴG4M{DѴG4M{DѴGڣ1Qck~]z H z~sK%4Nt.?8m;,JZ|0͟+B #gp3~ݑ| ⵕז«v]~zXm"=yڥCtI#*>s۔F )HHo"k{{[ݵ..5 M^@J *s'1DP~~s'sgΜ{93h"Zpۻ e"k,"o`7F~#^aW`Uwc߃5Ryýw*#`?G>\B~DA~DA~iN#{{`=G#{{` -)^F`F`F`F`}Zr$d}@_3C`&fL&dxHa$FH7R+ER+ER+ER+ae dJJJJJ5aV`V`V`V`V`V`VݕL8r /itp8s$p K\w0S3`&f"03X +}K_))a'܄vq`ǁvq`t༐;Ӂvq`ǁvq`DZs9  yvrǷ[ڂve3.zQNoA`8 `0 eՆUVmXa5Vs`5Vs`5VmXaՆUVmXm`+a5 V{7K`-&ڰjê 6ڰjê =`{UVmXaՆUVmXaՆUVmX́XY Xuejxxjڰjê 6ڰjê 6ڰjê 6ڰjGDdva'va'vRaD` lK[7fot5DstఇBЖ=!=`%3{:\܃эhu QzKJϠISzBJϦlJPZ^9j,;[`wUSU5#So {h%3(5G* kf kf kk. AҩQOjlϯSjKFSF~ebk. k. Flq ,. ,. ,¢-,¢-,¢-,,¢-,}YYE[Xt]E`Xt]E`Xt]E`Xt]k0fl;mwӴhn-Nt䝁V{ 춂fv{`w=70<p;Nwv0ݱ` v8mA;]8N2wH!Ns𕟌 ?pVrn&-v4Jr(!^_6k?84$Q|3Z>UQB9V?y8&GkyvGkyԿ?OK>7Σhx c0<1 n}r0<1 ax c19s<{q8IU?x c0<1 ax c0N>N>N>N>N>N>aeJXZ\K-#Y-Ƴu&8–]ز-O/;ԗ5^VgBŤW)TFe?{/{F{=|B];F<l4q#FCq#q!886^=vل8GCq#q!8,3 ̒s{>sat>UgY}f #! n/FB0`=3mQK&]Ngˮ-xѢ))ǣ>xтG -xтG SтG -xtֿ+>=7;L}l `<8r-p՛\~<Y?f=[S{0Kϵ% \=o+w]0ywTTovo@` OsճTR;0_oT ^k"Z2_μ<>zZ|5$֫ՠRoPk^v!z%]Yoo)]{v:ROݨߑwg8W> \.%Rp\wNw@o?8 ` `F` cvg,ppS [60wp/{<O'SiO x</Ke xmS؟M+/մtZit;;\&2٭*j;9s{+y~sZژjE'z']5RJ\xKbxQFmzREilW*m<_Fg(,Ea) KQXR(,Ec8p(8 #S &p,8 N'k0vn7-Vp#[i4vzq c߃:'o}{Xa >5|Xka >.mW)?0|JvzU7Zl$@`'v~DoIx<ρ Ex^1o7xS{}|>O4XO;w `)Xz]*P ցP փ ku2~'VX} v̻}r>ArL[ݙaX~UUTUR}!F_FE&DTcje Q݌TGdձ~oXry#C)P|PM~ZШ^RS(q7g 9OE ޥVV3g+ ~_fVFɥs5ԉjqw}H~GC%xa<>iHysCB =z.Ѻϙ}9?Q s>1ﶘbO~J~Sp58"r1{1xs9TIJ_2m AuF7otGc Í5F}=Vsza{ &[uNbE-%JC;S +lSnqg8X,(t3ŸNi{6LiHS)siHQv { "M>{*\J^xFPo_iQ}+Hw밫 w nĚ7p7 $qWp܋䍁r•vj}~+5Xx{a9Jx>M_hr;9zR m= gc}ϳa}4͒{O飰y"o|{wf N?oaqZYZkx>*2Q!{= {a7`+J{=#MMMMn֟rv~1Є<-ܢW4j w>j1:LK{YnN}~@i~ OS,:_ Y%|19R\N4jB6W*6W+=duVOY]ԻV7]lT!O9?ͳnR>ni 2VwZ(˺NivZ"5mԃNwf ˻"Z`\x -#qp]u}_*#~?8 ` `F` c8//4/4///4/4/4/4/4/4/4///4/4///4<_8!Z_>׬WXGp$ǀcqOJ޺ \ YuzpܤZ7} &vW;{]|>gzs^G/3?xjoSNW*BxCq׷u~ፀ$sT|it{fHW)fآ'Ը,[>sϹouXZnTR-\?&k.t=e'z>/OQ` !`(`$FC0xp88LG(p48 ǃ$}:Y_Sչ

    ].2/w+*p e\˙:p=n7[60Ynؐ8.ۻfl]`  '#(}1V6Ek2JD_棾+Tߵz&owNC?gt,x<^/*x^G[P6Pu<8̑ƃ߁y`>X/ ѧkjׄvˬGpIp,O x<^p6 ^/W5:x$<}x#13L0S7[0|y`>XE{`X~U ցփ `#6-`+H: l;N ?=@[l ~A& 'p7i`j=xp88LQ2hp 8'S/4p:+p}&8 

    \ر} ndp;w{};#z(x <O,x<^//e xlxLo;]/0Gc LW~/ 0_٠| ߂20߁y`>Xb^z]b e`9XWլW*P ցP փ ` lzTv˜vCn4L?3*PTꀶ=@@MBMaj0;A zޠ :L^/$2xRL)^/S)˔*!#(0ƀ`8ƃ`8LG7Z: ǃ$ /SNO3,9|O28\q\.%~)e^TW+U{-:p=n7[60ow͝!ii^%WAE]Ee|W|S:r髬 BӽWL5B+7ysZo]^Er={ԏB=[8cT<_~qhטľ&9$LyJDI?Li=mM0Q&zDO( $p2-][N~){3&zi ځ`wfY>4yNqST(E8z,BEcQX=EEcQX =Cϣ[&ɢh,&bh,&bh,&bh,&bh,&bh,&bh,&bh,&bh%hr4Y MV&FUɪ_3>oI]V.jˢ(,*tYeqtY]GeU,.8,.8,.*e貵貍貕FCEfhq`8\\hѪ<GhhK|:m5:-NVӪiU:-Nb:-Nb:-NޛjWkU*Z CUgh-fbhXp)zmbJOU趨9Iיbx^WkhZg+dL<l-lj Zlj ڀ(mA;t7XoAmAmAmAmA׹ʊh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z VVBEjQZEEj1Z Cj1ZEEjQZEEjQZEEjQZEEjQZEEjQZEEjQZ Cj1Z Cj1Z Cj1Z Cj1Z C-A-A-A-A-A-A-AjhrZ9ZVVBUժjUh*ZZVVFUժjjhjZ5ZVVFUժjhjnZZ VVBUժjUh*ZZ VVBUժVբh(Z-Vբh(Z-Vբh(Z-Vբh(Z-Vբh(Z-Vբh(Z-Vբh迩h8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-V*jhJZ%ZVVDU*jhJZ%ZVVDU*jhJZ%ZVV[V[V[V[V[V[V[V[V[VۈVۈV[V[V[V[V[V[V[V[V[V[V[V[V[V[V[V[-ZZ9@ VEEoQ[EU*oJ[%-&z*=UjBj^lu֛4hetAg#Go'c>>8ESEkߥek7?|qvWAs:T{I ߯ M =FKs1g>Y> [*GuV?No ޤFbi55`ޢk&om"g1.|o R2dݝ{v*woUt~˫|o֋diz[#kgԭVo-k~gSޠ??Rj^SC:"_w}&ƒ2@/\G!s[sn}|*o~zr]~Ub>F/0-嘷3]Vܺ;Yc[}<ǾȚ;׳W$[c%5ְJon-$i֮G^涱݃^ﭳ^/u536[FQg=WR﷯{1ڰ6X6 p]_#}]C# z>ї5lJ.O6JLu-`;ae^![km[o6)s׎;7~VH ,O2=ѵ0Xk dΤ/Jڜԣy>kM {aVcF;no=}tV1Ճxh)ߩ6=Qt=LO&}Ṡ@uӗ\ʛL'mc҇GڬL'd?vF_37NыƙA5Pq~\? RӅv<>H}'TJ>Ǖ<=o^zrސJ?_Ϋ]{~zMC_A5QooIS2?K!={n/Z_S۲lˊ5اyr{Pi}>Vxh/} ulb? n/'(~ε7nO w9fK 3OuSAZZ1977T T|Q|c}Tgxxwo蛨zzNzNU;W TKKՠjp2Xڄڨa_pL|5ҼؼRf^mޢ24R'7Sgϛͷ+\u,WUf۬1kսscV Tzʳ:Vo5gW5gMPT:ƺBŭv#`=h=d߭G7ot9v(w|LOFUX>#,ՉOsZʖv2h*|_,LUA8Z.$-grG(7 K~ǫhlix:-i3U,Ysl;%|(\Z:[ZڔKK;~iiSZ:@K s/fzyWٴ5_b,y4_0_S!uk0LSjb66sr̝؇%ab0VbJb%adJFa+ͰÙŤŤa1bzuJ..RP&6tʲŒKRٮ%lגZvS_b3n˻T,-v-Sy&kk5YCX_B/nR=T_쭟ꏭ P3?PħH'N_ēwŒs$\u>(b>>YR>e|R*J]'K]'Uql|ԝ|ZVw=|"A''|ھB"fnKlȝ=ݙٰݘwdT=RT{=Q *>>LcML$ OS쇙>bOS%l{ELKT {jm(ˮ70boWSڗDU٢Vgwvǧ Ò_p#ud9G[Q%%}лzj.DENE Я[P?-r ߒ^hu>ʐUD)uΛ,l~6OK9;bTl5jcɓXaDXwʔe;}}]_Rw篒=@/f힎u5Z;%ޜ]Q1=VxC}P[># k헏ːMphe>N%2G/kF&m9KhZ:je1mv{&{ڳW=N'a6UCvJ EϢGzFܹR;!~n<:Vg.v?mٺwfilTdf7l٘}ֿ2=Nv%pQbWk9dD }|߆TZ ܶ۫$7~@ʘ%t;,h͝nϐW49H^|,~n(zZE*3IɱʱTYXon %#SkG6^wS,OA{:u ٪z*TߵhPA\UrD(dTdu(SE%: +uuKEw\&:rW#樫PWVtu#GGDA$ f**uܥnRu{x;cߍVݏ^/x5uOj VᙳO^(>{q'/B|Jɫa⓫'OP {\ol4szc# o|a?Qx%Ɵ]k^c{\k\^ ]ˌiinxXW,Qتv} Z}CP徏i:},`c'CMh{K.YzB">4%4)+PWbIͰ'nT7Q|[խ|Kt~t3Ego.hZZEbXd3梓âCb.SE!B:9D'7KRbX%jZbRb~4Q)xfbabث%{5^}0}0f@l7 ĂwPNk'fKfHԦ)je[bٖX%me[bٖX%mebٖX#ڴDmžâ6â6 Q)6SDmLʟRќh4ќi9Ds͙)3K4gh9]Uޔ7G2(Ľ~1o7KĒ89fDʭwaH,FQq2G"Q-Qq3CIT\(pүr%6JOh!1mkf f3žSž}bžM,c[I86 qlX؀ı-%͓6Ob|]%v J5]b\Wű$^Kǒ,%_֐Di}NW7vMkű$ 5dq&čcӤOJl!0SaFj Yol!є%!jb7/_Joϼ%cdI̕%=Ep]p$dI̔>+QhD9Hnɒ(/Q߼ļ%nFђ|%$KIĨ~'YO$dI>2*n-ld,4&3Id9$D~lC$dIH'MR$ʵ%m&QnHܐDiI[(QnDrɕO}Z٧}r+g\9ǐh@rvȕC Z˹DS7>oJ7gI/_"t0s%fI̒8eagg*?kUά{ [)v^zW~z?We~lO-:~Ǫzמk,"n`}VuDz^JB>js`b!If{yr<,K#zFiRb{mQWqw`}vͱ& f&o_B}+Q@k/n޷?Y{{eWc_I=^&qY廚K>HߋejU d}$Gg-O"R~Tˤw핑ڽhSMLFÿssXmJd.h#xn/k5}߱ZoKk_ ~7 b$ַ_y~^~!~s/7Yfܒ'ݜ>U+Œ~uG-q֋XC,Zs[d>T{j>"ʵ*ǧu|j"Uf(TmD3a# fF3Uhd93T7UQdFZ3"FDu0FGdt6ٌFwC??]/UsA`UCjתQj?ww?Rux#CCՑCee`mVLs9Ek.05Zu:NrrUg:8׫G)mCzB}tT:NęU:Ej,&¬O7av3nR[*Ru|l 6O|´B{(2 FP!#Jj&eKkZeEh2l#v͡ӤsshbhM[fK[fЖvEsEsEsEӢ+ Һ+ mƟ1 A{6󥴺Ma~.c~󱆐XCPV6MQXFiFekb%J2J2J2J2JJ䊕JJ,[+Jld2#rIX_,/bVA]e:rCl!`IT {ŞRSL4,lɰcUj5vSRkĪbIŒzb;;T'E즳MgTW2,C#H1R؄#Z(ieb޵6b6FG5r&h8}i'Jҍ.Ft3a1n>%,O1$Q)S%qiUɸ4ɭ%JE L0}.S?P)R_Tݰ¯X2+$X,տ@BRRYĦ]+lV3+lg~6Za&fҿſE`[Yשߡww2Zj n,a^Ng|VڮB$`L8Ga QсCTJ`L` cc֝xG`zd`"%8;⠕8h%#Ɉ qLFdH)WOzu*%-Mۃ̾f_cb*ʵrz1hMTXWYWnʷZ1,kJR!k5%Q+ʴʪRc;LskٜQ]b0t=%''}}2_`__c_ï772Qk*hoV͝n!ޛnNҟ{JLLuuzHO"=ّZzr Kώ3ߙ"g [ ?GT^*%iSåR:*R>H$9OGL"qg!1t=%׳l:{'2w&JJDug{ߍt]ޒӺ\M9Hg.XH\F~X_j_$ |a~Rgv\Zykw5?ҧ'R=C%r=E%%O`'s7R>ѽ ݴ}.QdCX۫ Տj_'G0K};^{ \NtM^1l}snDD O~e)q$3$ eϚ{zύd˽cAs3}l11Mf359:FZ,i>p9:ٛ_Q '6:J%D7?}gQ28Է(gԟ=M,(gW9=Jm/J-ww0%i}ih;cwV#VS~&~'3{--V^tǮz߹ԯo\HMo~klwr}祽~E.w(42 Y;٥m"yO7g۰~2'K s$5A+Yve[y@7./4H8|n,BFq%q-qcTOB׻Bh h`sDɽ-S.‹q~n|% Ht& { ^א\96ʱ%WmH=RG#ULku\Z-AYZWo&r>Wҷm|7&]kmrM\ 3䚼#S䚼#G5y\X2je\wdhJ"UF˵zKՏkeD0b^w+}b?H}ͧADŽ$sc|8!uDc%Α:["$K,SbEwK_?9O?gJ<^3%r/s_K<^"b3%r/s+KeR&Ԇ(a2bX$e`G8=dJ1,$ nH2I0*C!yɖAGG}ZHާzKzZJgzKzKXF͍\ $4$V-54^}n&d%)lRh2ʦ4cQ?oDz_ެWOjr<]%WjV֫ނ\&#]ͩQ]ѓFYHL?i_Aڼ {_=9 ZݫQ*dKmSWN]C>5c܆1+{|O].}jVI "+Zc}<Y+ܧO|Kwq㖩Fܨc:_I/Ue!a1qÈ'6bۉ ~XkGp'qy:QEmdq I)i3sT=}C#cSs9œa4g__ߙf̌KerGs\e6+Jst,VnVw7 {=|. -'qϔ#4%wq~2>rMpYܣV~m5{*2Br)%%-#-? #ezW(453SeHh3 oul0S]<'Y~ygY7w|1nsJ S7 ̀L}p3Tcdȕ^CψHd=6gKDbEb۵{l%{{l{l"絔|^ZH>Pyk#i$6@ri%vI.`ɥ \`ɥ\`ɥ \ZNɔZdr%>W˓)aɮJvd,ɮ]˖%ٵf]$fKv͒ZHF-96Krl9c$fI-Krl,ɱɱ%[Prl~ɱ0ɮ \Oriɥ%s"?;@),ZD)|%Qk#ɨEnbɫH^-_)Zɮ>Œc+W{~$ٯ"ٯ,ٯJWs~Jy1j.ٯ<~WddlL'ɁJ,Ur`]%!90Kr`,Ɂ$fI̖XHr`=$XHr`9$[r`I̒X,Ɂu-90Kr`Ɂْk&90K#$+gn˕HgɊY$+fIV̖-.rN"r6.w@˽OŒH,\bXw*Xl9̄J&ld†9 3X_L&ٯr>JWk~O*WPI,"J˽RrT+U,JK,"J˽RrT+U,JKZɽRrT+U,JK^-"g:?;ۙc("**"""*^"""*"""UQUQ?QQU""[QXA}?/yx{ĨnD 1* ͥī!^e||: l}3i! Z}u}Kc픿g^dVi40_ ۾ˬK|Q|>Zs;i>|WL1>M$?C}CSYqb)m*m^!cg, o}mX&iA$ԃ??cVV8SӳM]n+V%^dPKk[0?k/߲;~^h J\r]O1 >}_Ӭ^Ma|}5U;9"uYM5_/nmk1<:bww"c 56I?ǚf6bwq<27\QT4}|ٗ{?;n.J@%XӟU{6)iwBU]y+_n|-ӯþ\ܔ_hT <5-G(Bӟy2yqv|ގz(Wx/k3VpZJ [2`*"d>[T+.̓Xaf|2g1/f}mbVכzYV7l&f1 70giinzKrv>0Y@י%Nέi  / a1X0 "= {oagagwzqv#Xaaɛ`[X zBYMflEخDj)9U<~sv)k]-R3,R [T)ڴڴڴڴڴڴڴttҳ®FN_矅_ ϿA9<xnx^xixVx|"i.:|~|~=|~fE >>J"> > AԬHq/o_%|z-{Wཚ8< W{5!WB,:xYxax%saxax-E ߻732n/nnn$nfEJ^w ^w^w-n} nn=nZx. Y(֬Hv뮂ם]; ە";H^wRxׂf]uc21Y: IbϜϜ`663ö1lЬf _jBv.vve.fMKXŅh/hwb;[[V·l߲|R%-}-[t÷·«,W)tUUU«tA׈*Sx"S11 jֽT{4!gsEXJCy1eV2Zh=M2b֏y7}]`f2aT$xDd=#NF^FFcRaԁQgFdԇQF̣2h &1h#3-drF[h3mv2bVef O3:$(Ȉ8 #Y2Ȩ z1be#kX1h, &3bޞeZh)V3Zh#-3ňY5fa$#fE[sS%#!YhY%hX▌eeeeeeeeeeeeeeeeeeeee匥*YVc[C֨5aZ[[[;YZ{X{[YZXGXG[Y'ZX[gYZX[YWZX[7YZwXw[YZZgmĦYlNm1[Vokc`lficodjicodjamg[h[b[n[e[k`lfico;d;f;a;m;gvfw}=b3.^aQ i9Eu-]3F0;9#hhXXXXXX88hpr- K[( Rm :t.VгOAAC F)_0`j ,)X^`m v)_pXitڜntFqg99999999999߹ȹԹ¹ڹιѹŹݹ˹yyyyy\fq]!Wԕpe]]]\]]=\]\]C\#\]\]S\]\s] \]\+]k\]\[];\]\]G] Snֻ-n;wqwpwvwstqwrutqwOrOupvs/t/q/wruopovostqwrspv+B[W, 3- v,RؽWa *[8pr™s .*\Zpu[ *[xp“g =qx<'zggggggggggggggggggggg稧ss,E"oQ(\+J)PԹ[QϢ>E -Y4h|ѤE3f+ZXhyѪE6m+YhѡcE'NRk>oƽoKo[oGoowo/o_`0(Xd4L|"R j:Fv.^aqIocTl.v{šhq8[ܺ}q={+X#>s/Rz___g_7_O__ PHx$T l|rs/*_Z|u[ʷ*[~pgCRr+U Y1b|Ť3*fW̫XXbyŪ*6WlYbšc'*NW Ӱ1l þp0 ÙppppppppcTitTz*he2[ٺ}eʮ=*{WX9rDq+TNU9rAe++TTrG}+V6T<!}qF@$ERHHHHHHHȠȘx"43|Pw?"igx]U×闀﹨ȯjq q!fAx*w]g\>wT+y*bȓ.C1 A pn#k@qX4 D@z\W4r X܄G5 v̴C>2)87)>ދ4_Gׁ Qނg5"T2o܏k݉qK%]x )KKJӟQGwh-Փ"=.|tU}Ui5eګ)zG@^{h0C-"Rs&| l cٚ?BC:'Ƒ8ͨs{\D^3j9>Dk w)ڲ|PP\K5w :A|VE~y8#j9iZ4u f.EM (G<R |:H\CNTCI oq]+gj[zi+:`UrCn|&V8  V#\B_% {H&zvT./jsK(hZ5#pFB^E=󹉏wT_*=& # g i#B4_{] jrλ8*}IԴo>B3oB_i͠bMjFޘ'e#kE6jPlTyK.CUbϭ_>؅EW4BlUl@)VG \eJs(>?CTkxM܋T|+@3G9vӠVr籼44G@D3SpoҨXVfK}p܏P!O r[B@́f5^v"b).Ң⑽ I+g;;LI.`r_'?ڋ ã1T/#9x\vfPpU$.ܫ"%j$_(9(?hz 'Rl`-$!B[]aX_aڱ0# 5|sGje]yo9"5X' 6Nj1b,^xARQЃv"]1+EcCgy,Zz3?#X cc -=JEbW`3a$mѷ@N'dNҧd=1K~G%KK"/ӵ7;2ylvE -(}n@țz졧iMmMԉ:rX4Fr5ݢb| 09%FPS%~|$+"gprV_|,>$>DΉψ'ss.W++WQ\-U0ފ,Eh)HNT( KEWh#H%B[L tp5Ej/uJ]7ROo]:,b]pTW.U*{uwdzz;uutXwD{Ww\PwZ*0&)aަ  a}Dx(=apnaafël8gi[8v37.?3@b\eozEzʸ2u nlc|Klh32M,45/LXjrb)d YS[vB[⦴Tgj)36unh bw-nM;L}LLw27 Ɗ1'1=l(5=jzTgzii844K|44[lc)ML[LOd)>me-mq;Osߛ7'.4kzW\lzt\|`s"s9in-n01ۚ{{Cij<T}Ds13l1w "x,kk[[[[[;;;;;kj5O&TIdkZ״TӵGM~5kԌ]3fb͔5j,Y\fe͚5j]`њS5g$[θ7x*^o_____?????WKkZw6Xfj[ֶXۥ{mھjU;vBi3kί]TvEuknU@'k6&9HxD(M$DDDDDDDĐĈĸĔĬĂIJĚĦĎľDCTl$IKҙ&p2L%mݒ=}C#c㓓S3 K˓kے;{ǒ'R4eLR/LERT&261%=+75 585,5*565!595-535'5?(4":.1%=+7u u8u3\"M@ q-ȅbi3Z9(C97s(Ư  <gǁNùqDʷ 0G<|؂@p qz)O#\^#91w|呾)B+=<)qpN|r^#F>ý 7ړ#Βpԉ 8>#346(ԺRzE1Lk HQ$ ,$ijQwqճ^Z g#Y.W7$;hhp:Ҡ{m@pEjɅi5]$5Q H4]۸#*ҁ.2MXoTVf4%C#2~w!9R g=y"8u\y[OiJx UG+]%[\[u22Ӥ(<7qB;RF5-CyAӉ@5~]7 p<>~9[p-+Jy68Aӓ?~7i4?=U#@ WH,BwQ3Usx (?yOKB %~yH}rh-|kgU(tSlԆ֕:$IMP/E<> }K!=ܪ[^Ay</>鼠֏r.fzqnZDQQ} \&% .QN%La!sK#ɯϵAsk?W?4 )"P W38 +E+.ԌBM>`\NF}<4R?'5=ϧKpgbboEC kjMYO[H)3aSH*GCzkk:P~ls'zbc'4[nbxkbF (>֜&gZKÀsqI62@`WsDӣ标`֠rQX}<rآ,˃RӔyJ!x'k5%^2viRs/+Ԛ!{z0o v&џ;N>H0qlQQi) ;A@>S(^J5,Zx r>#<-ط=n5> 6^X:K ܢ94-8jqEط"(4)AkwR+~T%WR!g珹]L@+\WxG 5 WkU ~ &x^F170 X;*r.  !V><0Lm>s9w$֪HH?@3=fG>MHN6]"ghfn+2 TQu%o;M pozuT[,EQ+Fo!%D>XPo:Œ̃>IefGEX:$oa 079{\̼Ej}* 49GzOǑ|n/VV,xJdy!Ӛۗۥܲ9Qnq ne)|,TU̼/k\@X/ 8?Jy=={UP/<^:e 4u (RG:9p/7_(OQW7t$%+D{JßWR"G y)_v7Ie7g[5Zse>ؘە6as9yWT{8Hg~vE {! EI!^VpkM5Qw;D؄b#C4|rѤ)~~,k*kӌ"pdsr r<6^$? È6({ y4q՝䝫$#|qI K4jct>yxV+89/JJM\r\k4%G9#+Qbć{)UyNc+'AQ[s/Gn*hCB$[˹."^HYNZJ4>xhV.rSP#ɨ6`wiˑ\UP[ԣAdGdY}Oʯz;OkO3EŃ|l_N>4WuK.1u@h+QSBk%l U<9U xlѫ*Σ)K FER7- #c "BDL_.*͌SM߲RY}nO|9l*v:wO23DAxzH0)o|KH{{1/I<;/KATQyw?_syTȟu,'S,>!>IR'->#>K U4 4[AI'Ki-}Lj/AέVJe:B 7u/Vչ5tmn$m;ݻU,ݡknK驪!}7uPc|dI+M"hrBoruҟL1SLڙ[(n3$eFӫ7t7413[[~n~tnu<O?ҏ./?*B1y[Ty~=YKX{7\!QQQQQkFubԕQFc4F#f4DFSMg4\F -fJFkgVF;fAFG50:,aQQQ 0a0V L 39|aTX! -vaW8 &B4|yR~rH`m3giqU92rr&''gr2}aq1rSpdJg_v6oQӓyg琏Rb*}6w / ae~$$,b:N&vRwrWhqe#O>wfhHO\O.j$"~WQ8 >o-<4gt{j=D r/e-Jx'M[oSHG|J@ K@LJ<ս$wBw|P)jnG9i^f0>{Ϸ KwA]_ {(AV;zN ܢ7VwZ \;Zi?Cr3^'5*"rq4XRRSF~ =Z*=_ WKSWp ~廨 .jZ32P!ʎj vWy [PVƵ ߓ".C |@VJj45zittFAy>\o4W45PGr5^s\ir=*:";UQ+sG ֩cY锪?ݱ܁:wV ۳NyrzWk!껰DPڽ7p.s,w̧5쏇O]N=DK[DnEHMxT6 h$aS%jÀ?}rRר p=WγjEU0)޳8עN AX sVWԣ2"0 m| (>Gׁ\>;0%~u/|'FHoUߛQX>ooFy{3B r2illlvF>6/cFVtv/G+^"M[N̹!kpZT!R ɵ]"ymkD^%.vKU #Fk~FΰdJ)|'I<^ᮒ*v3ɣ$rJRy4y#hEHixv旿Sj7]_qfvxgC_T_(ğ xenfQyХwh,F>"lDrJ_NBz};}{[o߮奔CKM}o1qI?O?ҟo7A0Ph z`4 flGnRC!h(7 1TjCLN6F,[eݲGk夜rR^n+]"OSezyPV$mփzлȣ)ҏ>k hnXKZҥtp=]F mQ1"/ (.v^oo~'&6žfO_/l+^G#?#őN1a8V'!>#V;~ ֏aR@KR#*skIZґuXz:Nۺ0 skIZҧi"}Gդդsj}5ln_Mqj|_եw&6#au=X]:KұX] V>եsKL)#.bNwZv9T/Tw"TAnGݹ*R]E^76xݚ xUյ}>n$ILID@d& "20L0dgn:[|FT|X iK] il ;#Ú#Yg9ngo!U]w|Pa*k؂m؎}8C^W3j*KSo-@f:͠7(f,f4fc3gMv`7b?0]jNOS jIm-KH3%QΝn=})g$Wh4*k4&DDi g4F v@ivi{vQ;h]P]S7md[vVcC}BvamۚvȬ:J,D4^\NKoS6ݴHH5Jesz*uU{\A|neSĪԧ/֩/E7uI]V-Ŵi%մF]QV<`V=KExzj!AzNC֩j Sk﨤UEO z:jگ:Cڨ6\iO UEmUTνTn+ȶrR4/ǻ96fc_l8lqD1/ jZJ|^CjZ{RR7MܢE4Ƞ֪\㋗;gՒ<YC{ita:BG#[|S⧰n)0.+XYYTElM y)ݹr=¾w?K4-z E"Bbɶog/>;f]1,5r¬4j.iU0f6җtMͫB^E ˰+xU]+:^6`#6? U5FUQUSs=q?RTS?o<+ $Q(uaI$ex~- QUP8 zERxMP uwFr=対3WU31K|\Yy?#d_Yuk^*v;:IwT/+Jʍvjn [˭Nrpܙ,w?Onz[תަ}z>>zg?`\0>X:X&X6X\ߛ;34<`;2O$ntd_MC1XB4{j}q}}{ZF-[ jעԭƓnC!MBkw;ϲc9K V VG/crn/PGd3 h}zbkp@T/뗑jbS 6<6N?ӟ}C@/vm(EחUb`C$7 /HMP{]b:b6[+?R?<\)YQfcnCUbx$goeøԐ}k,mFHNp v&|ı (W_ ylJu[9?"K&@&5fԚ+ԗRb<Y\7di5)rf8D'$3ty@*ݰ,˵ YQV`Uߺh."@Wd b%:Z+]FO_v{Wh ڋƺ_ơh<:zt-ծeMܯE+_V6&ZD5c6Sц9mL39fsKx9wٗ<,EX<`ʌA f7fZ2ъY0КY2˺U fEk-9{YZLV3?cra6?`6O3ܸ.wǡO gP}jL9:PW"LaocV}i_wW;mvy;E=] n2^Ѳ> ъAJaDh5L-'hoo'k!oooox{6\[G[GGBf^uVPDWBm4f#Bɪ~oV֫~ɫѷߧ7Gw'̟+~4n5I63 7fk^3349bqNQSѩTu95ZNi4wZ:mvN{tv.NWy<|\Ӟ. ⺄.ct)t<\&z%9ko5ASD(mJiijZ6lk3ؤa&Ì4c83L6L9a~lN?IsSxxY&P tyPLJz  x՘gtU%g4tϱM{ `JNz !$ޫB woZ^[{FYKF#lB+d)Nd!Z]@Fd}DEe YBVST9MN3L_lY\A < 'R*R4"H'EFYD1"Vċl"!r\.ʖX$r|"(*JҢh#ډ'DOG1LGbXLdUX#p84>O3G_t:f#mA[6l6&"ʎ.:"˶X,VɵˆUnM.S\$13r QIV%œD-kZ,+KrmoHLvdEQQ4d]YNף07\8 n܃pPIO)%C-DDk:Elf],gP{(j aL%L)"F͋ڊI>6o/Tۨ!bϭئɲzO\>q$}]GOԔI0J%Wj̡4\s}Y>i'6§ZQ§m#M|6E/k&>Zn+v-؃{b8Dtߧ)D)IGzZY Emq ~lH-Ao x肿ĖD7sפEW:i[E&уRƶeMeTƾOUTNY@f'Q# EA=jcRFmvjgwCg{F4;ͰOi}"^'|u>_ (mi ]:ڽv?uXDK2-^Q{ 2e Nnn LUjKiuT*jFwq:S67(; T~D] fSu;9n0NWGgAW(LK](vqXMTD'5YM؋vSjinԻgUgjdǨjZ~RKRLjZV5SULZoڠ6_&Yj"=ËS[VMmW;NKV{^OY:::N:Ϊs꼺.DuI]VWUuM]W7MuKVw]ު|X=PoꑛfwD=UsBTx!zd #0FhNn3^:‡0om&q2Xxius\5vӼw)0ul#0LiO0fl\Kk[Yh7?xk7s˼2̏f,1K2/ [Wˏ+r;#.%.XU*pe6܏.\Ey2.Żl^Wͅzս|z/ ^*w-v]vWץz]VE]aWDEb+r*cJWUs5\-Ww ]c5s-\+ڻz>솹xhiy'=q u?a͙;w.L\,!| k2b8@ h8H!qscqT'IqJg9[\EhqM\ qSw]s?}B~,c9 `)|?.낺.Kº.K뢺 |h[J GGɼ48^eR e-/m9|c+[[Bhٺdm=b[nv=a{PQ;TvURe/ մSFtcgP];ع~JYͶi}ay6>tl,J_a17XŒX2EX~+O t?8.$)%J6#6&P&ۖ2vaS@Q]O.?{s~/En~/7+~̯wkCc=cr>.\b ĺXs ͵.:) s#nM7ܔ[J\q=u7pO˽?~܇9L x%WlOl/ۗrRM(8y"}̟g)sy>/81,\q}ǭC۟Tp\+cSlͱ6O-5'pn-nmw௸Nx?BrNι9KqIʥ jaClMLS3Lem3%._p#n2eLiSGpyxUS3y& N }Rw|9G~"OU<>W_r¬4jQ.)_'jfm7/B7xc` lnn֙ _d/u,?AxjXg2**@uꚀ0!j2+.|d5%(ۅ3MjxVisV$NBuyij?B0`B,.JPZ)v}~͕ig7~Z}M I;Ôa|ϻ:zw JgVvt٢0:2Q0:o6! "!S(M{Us; ہM%ʨ"IIqV5f>oNbA FIF#+ "vpe=b ^;tiLp?$3r($$ ~_G~%zODw'k" o ts'#Xv(h+L1+bƔ?$/94;9u}7f2%k' ?>ex[GɞP/'2,Gɘ 3eXMzI٢멉S^eeX/B;OMflUԍ(3]~@!Mii5s:%.xEf4Tk7HrzLCoVI ֟U1Gfl&gg?d.b;H8yldK6V_A&D$M߄RR0%呱7MSj^wi M9)o`9Ә1\%gl]@|١E,gTeJr,RIyT2mX (Q!C% :TC*˯{]-#K>YJr>,G+*|dVsEC}"O㣸*29h82J^c@+96*DKI\!ã9WgǍ`N4zcO7d5d."ˈ/;:tEUZ/*UX*h"wzlbuELi..~[f B^WBzڋǢA9 }s+xYa=ͬdχ.lyR{(]/Jzq3^lG^}'KX̲JXh .m`D.Gh[q#GTNෝnPM~eYCjnh50|}"綢jK]E=f9(K*zfK+:vkb>vKMb|9- 1 s8_˘ŏO5 ]EW!Z5y |ʆyDq;R SǞ dZК-aaǜ_0a0Asgs_37a1A`9 :aeEGi>m}-t?ᰉn?AԈ?iԟF_j4bCE7GG|5b1z: xrT8rMox \W8,IHȾ$$! %;(((nhmjj-}Q;efL;igmyq*y}~"OBr{ι{,`kQf2Y,YJc ͚ESf3lOo%F/YVP]wxfB>8ΨԘH:3˩I$3:1wMRZusάTouFբZ䊋IHqJrZbDR%ę=d< cY,a)X,'H 7B xJB?#(l2&fh m53A u4pIW Sf-l % SYMitϭW1 $3)$ϲd-J=H Bǐ>qxEӵc#C_7ebiJeOm/Ă2Xt/-o lN[? m墨$c@Y8^Z]( 7\*RX IkmTZ3 aKbAa=}Ϳ@D\-RNǤxa+^]ӳ"@: ǔ 716͘L(~?C];:gR<\u4=7XunhSoZ~T l>aYƠ0 F @(|fK}WB&#ṗGNz!ApbFcƎqA!6q`d_5O'N)4uȄ߱c<]#g!!bC`D> XlՉI4&3*×5'>l|oH֠b1Y|\<^ d#| _nXĪ#խ{ywiŁ?l꺫c {AegBubI c,CooϷW:b@R4@; O\vN"G[M_'΂Gb| >:>r '3ԥ3GW+3&C2BK+΁?'}"'%c`,ݗuGІo,a"n /cK:16)Ҍ伞"%E"% iLd"_Y @ʡU^GbkK 2<>#EW`ʴr.^-pD#5r^9LE<,M/sˢ@?ykw@)߆x<|Ӡ!t zdÁ>#T##RZwޫ諊 446h>PnsUe ;% \<pHU;#𮽦IR1&'LR?Y/c+qؖhwKdJ{pMϠ?lA;d!? j9T@+^\AOE.S@pyԏt[em|ކc6zJV*FSS-ŠwrDf H1qq5;܈(+ěӤ.zK|qy?MjQQ]A^+!ny]yĝz5 :@0MgVȬ}n<-3g\-=*wp 9&'gٞg=K#gS~pg\p;:~vvXec=}t<^Fe xnScهbkEP|Ҽ]Cؗ}guݿ6N 5%ԋ`ȣUwWz!['i!KPFѩk+OREZ6кk;j NRy{s"kLC9Mc0(U->.[Mb]ݖ,mu-YlYOX#z{*\P*S>,o;_v`~S$"艀@p8L!$-7e?7#xkR*h6y doؼ=#Ek[F<-bMf_M*56[EfQ(=#.뙹eNy ]4-Sz*&]ڤSF1;>ռ5ܱR;EP誻1ːg8< FHFb3H%OxOܖ8?' F^E3@1-ׯ>OF߽o[N?r-̤ ̣>i;uл蚻o{wjj Xˑřu O8a?RfEcbxZǜi0d1$sCx+!)Ʌ~@OCKLmKZCz6l%IG90[Xiu`KB&+)S;;sURMx0$c-Ytr:kDnI)y }fz댱F9 It>&iMcfB?|6 81[ĕ+dUTCFJ$Sd|Rr `3NJ`͆fX %m6qGzQMB;lËj:Kp]{蹰vO&*δvsaS3(\Q;*!wYHX]SS=i~GZniqua̘ /)Um.ZX뛝A$0`c}?|"+=`#qfC9Iy-ޜS t} ZW;ܜa9ұŘǐ0Ɠi(_Lg=]!~x]êEy|oFt\LUܶ2C/-?ߏm_<ׯ${b- EmXiJ4Ex~y:”dh:bL߁n\Ȳ@"a˟2(ĀqPiklZhs_Ҹ[~z~wlY-[/ ,&;KE8ajZ^9Y=4-ɴĸnۥpP@aDUT_Co=/=۹{}meCU{ _]}}HCp<&#ׄW1dجl`%lzUJ6XYeYe+m 9ÚڎY}{,G7)c8WݼB)?Qsϕl,=,&ےܸfLQᮧ̼m 64|>wg/rYL4zuh\ȥeICäG홛obg/X]ؖ.uWoTퟅ'-J(ñYeRORb{$TDC4:`QJGH61H9Wƨf^6MG_H%Y P< E)md+[:W",X0 P{K9^0€w}sB{2i4KM(o yIG-Nysim2rO7ȿ#o2t4M%SV<9}}gm/_ZlB4a[ý}u-ǖes8Bpjin$y, =^jdnq=C18LeGz Z"9f8'pM'f"17%?u~z@ڧwI >:B~}@c2-s<|]$"MaRZ7~Y3THCǖ9Ӓ>8i^\613 ghmi"?(:F&y{Rs2jFIkPz,î3q0Ul=Z 9]^PI~TRFIA߉EHuac_R]5ϟL"+4_Ox(!>87֩i*|b]%2<^C't13}5cz2zL#+& EpJj Ĝ27tS€#:Ah 1YӷBw}|Uqnd;äa MĆa*kjy#@ޖB#mÜ8&ɬ_r0Mgؓ9a$Ǧ4OnBuHhIJso5\/#V KQ")M/5&cL$V/yi>;O@sgrv%8Mq&߿^oJ>LeK /%FԲʼw3T:x0 ӾsƯ뉻)8)1Uu3UI,޸~7MHktB[F7lmoiG#ee7 L7<ؗuɺ fXw81ϒح{xX~n&<l=7ϓN@",ٺFyTBk'FDXSK ) [l↧ bD cɨ[i;Ϊ_I/N`lUXmWpE&ʫ.]73A"w-b"LT~NZ|\wYALL{fkHE,u/dN蒡E9iq4g6ng}da_,W%}9%J-ه{}wvYq2{ixf{u)H˲K<a)^6߷ʚnoyagwUeWY>y-0EB9). !Pۢ7l*XpdUx*1|'yаya}R>y4LF8 uST윓!cdžyfoŖT't@.&ɖ UaNh&h 4\n߃Q)IBx2&t߄"O!Ĉx"sl5a\WP0݋Q:췓id\O-)0Ρ Ɗw?"q>o@I#}+5٥ b/;T kԌ4a-@t]ޡyvׯu~a65c]?QEKʣ<(H=Ȁ&!ʵ&LDJFxeSac2Ѐ+7R@΍EfqAz?¯P 4ኃFR ~44%@kR{j !yFhEX::M}kW~T\hC]0i[d =Spꍍ =U>pG[Di\ouJl||i~އQwDKV rSMtvg`<>ptV-q)Q2M*gvt= -'Y,PqeCC˖ˏ>|r;AfK;KJvvŝ#k_{S:<=ve^1A*d jhaʪe}U1X[V|+ߖW%@j46?twh}f붖s /$J/^GtZͳ">((KêQ$l(4%MX n#d FԖˡ4)4jGłTbڐ^/:*'gQȫ۝!V7"Q1=r#)XڏE2׷fyP떤4L6:K \aVlׁڕ7< [R- l~=ZQWJy2N8'b̹wAa۠kx8Ҧmitٔ㲳;A[7L#: sY7> <.pͱ~~|S:+n^] Έ@{=r><ν2Tvcre$ʆnY%mWGzkR+J-GPQtɞܽ-\-zS.ԑܱuC>;W)ƤfTs::w'T**U`K1̢5Ʌ:&LvM5+7}Q3KHE87z}SWMl9^Bn25j,Fd/)~혇7/27-uuC۝TivwL犹r;GGo Fuz8YNOď|wD1yU<6PZK@cCLuH)ˉsWV:wVνT)%kR;SUujsN긡͏|K]yNW-őX4r}c\r,E.{z]*M1G'=15.<EYTtLQ- %"5W"hZڒ{L,:4"r\o.遽rQEOI* M.5hj Xȗ= bj? `~Bhyz>DQ@+;Yeb%P&`q~D1sb|oXvq'BroGl@ ]]$O;F]v<9N7N`S RV1 齽6i:cqp!.T~zVN{똺j2z9YA-׋n1GpC `GBLkuҟv0g#|=u4&şIKNg0fa oK\dc6udžM8gSgPcČ'zŠBg6F=O#I0ꩽ yI Br 6_%Ea#L#D*1_kb)1[Erȿ\`4Gcx#52BoyJ5w/O%tR+r%)Dg*!'* %P:-JHGs@zal=E3V׬Q_WWT[K^9&.x8AWWOOW /sv6H"@"63]#9ҐQErD2U%\БYQy!\Tأw-AL%F38ԧ7bn"%5]i-rg'O*AVV OTe袞(_S))˂kYw)!Mʈ-{Nӌp? SPb>ĤΪњ6,^E ]z'tHp8OdԂH)iɥMɦV_̴HU2oY1CMqD[9@)beˊ1D. HUJ97٠$iB~N,Q9GL=?~()pSg/NˍWmJU suf8z$"+? iHމS8(PbB P$r%ߝR'' ##+ddoIm &= dVAR/ 79!x)ӡ؆5 6K/(R%Ė <p~AL$F[QJ foW#V*!r8ؿz6nKpl۴,'֤KIII7[1vM|"MS]64sWbZEjz 񨄸pO!MAud usGP+-boKO~IߘEuffuY,EYEl]CCYz 5B >uR]ATͫGզѮ̈ -Ih4GUX=V]NuouuopPb"̞ډ3r5$GM# MY6Ak6122"0v``ٛzO0Eb^hO Lw%d-IQ\GS<6a Ye@Y ݠ'Er%a·IG&x!Bɍ)vkCcL"EMQqY&H6'-&MA(ݦa-(I k*w\)qTR{΢#P5Mc 5Uū㢼jgK)oj5k<+qHSH\)X=gO|N76A}IH!_HB[tA8q&5!6y'n+#80ev=#$\@ "Ca+GE"jDBa$*V^„"J`"21gV0>h7щp3̴N(!9DBg3}gC°'CaB v~bƘm&Wl/>!pa\e" &E, O.z |,Q?ku"A+ FJz)oH!0|=M+Ƞ(,E?b6W0J83H/%f#G}*dGF܆]@d>^}L'ӛh94V=mhRGfҠCꚍRdo&Zr%`vD"Wos7p bKJHٴ\ `cFdk)iSg:t2o^^Ƨ=W(#4 ֊)-..$]@+ 1iFoGI  ɇみ'vKYfsbIQԔnMUbL~²z"^(oqLlIjTTjIlL7˓zl/Hj NYHMEDUrj (`H)Y \fwzاly MB͖~N{c lz^ŢF#9VV4F q3n ?7]Rn%/YKγD&RO#|K}Wc"$DfF3J%ۀ8)aFf _U<]X+=Y-)t=ʦXou^< }yUc%T,jlC:.4{fN`!Ó(Gc~I4GߪH-CsDR"<.OS~'؁ ɓtߦY?1t1v.*+"_u _I h .+wFu4'EkD}NS91M͉O̸9 _>3-4d(.HS l6TWm(>jtbǵ7ko^3gNveB[!s60+0 @[f uS9}!T1* V{v$09KE=UXrt߯(OH$,G2RGcŊhj& ;Kqb, EGx`s̡YWlfd1epf7s̃^:4PP00eò_}Åm{ P5ؼǶWbrc] GڶK ضGӴ:}"?#j`铤x\_y/Wm29O.TdkԽ]M˦ ڏ,H'#d#9p&&$Dw-h NrFtN2ZZ;f]]IS㿪 9K9p`%9g[+OwE?= ;4W9K֜~}ő<xez- =FC Bg)%%g,qڋRg'qڜ4[IVBxTe םS! ^"Ҍs]Ď#z7*Qt'( >zk#[`4'&>3F iKFX:T\ܮȅM, 39YPgȎ[Rq5ˌIk/lΈ~VuU۳Nw5r _t/ϭXTߧ]8 0Ho(Xq,)l_?ՅTxS/1kUSi8 lc>,a];6rNk tMopRh =D{ؼ25ég;F/Ձ|ԷO= $SsX|M:DN>qtw!A7sng-DiKO7ܲD ot&fe5>cdZpe'v}z)P_8cDm;O}SsAu>2>g㪭RWi-,< юc P0㎡ڈX!5; *J优,z|Gh  wP "1ppϽ֪5b 㪋R`2;تK3V4Z?*T>Vͧ}ؖ|یfY>ȇ5:'ƣ:jH| NWd'|˖Y9d5vhY6l wKaoMwь*3Q'ʹy҅@Q/^JuTPR r ¿9X8ϠfY ^/J.&DLiځlS±xMSC{--6TmH;{|cFbŁ-Mƴ P/j3ag(klQmojm[JJ͵oNjSXz2m{kvڼ0#M ,QWAQM8şL1RP.iڋ:2W޿`(^3cQf_ 3"r`avWblp-^t*q'=g#*FA4F6L(Rg#q@;0("*Fmwe4<N#b[F%R¤j 0u$9*(b귷: 1!ŭF"L,_.l:-SLG!BJk!qN}wƖtgu e=`֑!-g0V(UvK. *-ƿSp,)zN:uCʸ|+R h0|}o'[;@>L&>ٝeϯ]o:YR}ʊ]{eHg,Pg<${Pȱ)gtlOթSs-śUŤF|dlHf -fD(ϙ0Fu1CR?c0S^e<,Refmw_qpZz\y\VfixMٍ$7+{eo_ww;7Lcܓkmk9r9lY95bt5(&WΎ]%{ܓ+sjymrnv⎞ߒmUOY>xOo\wP- 3+9kvk!]{n&qC.W=\]}ӵ@oׁ]e;_Z[JJoyivpQ &.Gc*tRd)T9b24/C=D!5M7Hkٌ y.ժMԳh>.EI8ACWq}&6j>U nTnz 3Pf;tf<荥HPyȚp;|cwQ?R3)D?nRҍ`j"O9*6H8\ZlDVȓPP)X0DzIs'h6TһyS⦔镾Ma*&uشhGArX(pDW;64+FY׾xKƙ݀*LWF7ƖdcvOi`oonR/CP؀eFgAs2:K&l'rosVg-axK@HcMHcke2Z$Rdh|Sn֊DZ|kCЈ jȯ e߲X=x4:A (ǖYՆhyW#*UPr+Ͼh~$?ޣ 񱃾L7vE-֔eն3 b~1k4_k"#i;Y#rBP$>);|:Rӵ/Ubd`r =3:42˕k(!fPx_iF!+-9V$zPL 5QE ˿ycan8ĕ6^磷"*! m  =Յ`Ş%n>O]e E%"9w\bm(LGA"}vgy% -ح;EDY%)Y"ǎe(^Z#g@p֒r&B&n/0s-DW_v.{lCޖ\3:OM"eKkG\җ\PSfEeT,#e垎Ջ8T]޶3;T'7-r>ޓTe5 šL-+xgU#XvaVla'395Q12՝PGe/0ݤ2.VJmRxvGNSUIA ltїod,aj8wGL_0ZtiHe&7TXyxɂB'z2Yԥs 6Iؼ<4TcD?NM_p+i%aϜk0W]vx cu5oV>NUc ʭ^dx[ n W5l-(̚Cˇssc;q'޹);g}salfhA:ggN8nsk ?21 _ܿzFItq4[Bk{ {s ]Ԅvxn'>_NY >;G*_v_[Y*.ʄ -.2:V7S_4箥>һ<5Sͧ>nr;EXS㱕zjl:W[~sn~oի޼=1-g :k;.a|'ϡO%tq=1c7I.ߤ7gw1;pߗMB x>7RHտ3ߞ6:UFs(ozn)Mvs! 7/IXb tx]F '7@rIg<c\CUGC#dž5U%KY·k͛=P"ď.Q?{/E+ D(Q$Pc6 u#z"G͹ZO|"uhs[ tG09c$_M<{g/|k|>K ÅühCo _#Pi=5?D܏7GUՍ3ܵ|x61>^IC`f{gׂq [|s# ,"6*".xE裁;1y}u}L3ZN T1/$FB1vtB dO8uz.ddބCor:%)]"Cy/̱n#s_3 /M~̬٣z&y%BY%=&✱KWFG:4cEUlف;򎕹N 7/?,}<<°Ňο9P3.7$ n'>'A v 0FGislB]PPsd/K,Yo*^SMm3]{a1sC1j4h6\_@șp`N*oh7aY7]_ki!“WNl.EjCg쇹1jB|@(VfxKu]/4m"o {w~ckMtF|΢.Hwz5)Xu.)F'1X)0vdP,$3ķtń1nS;[j}gZ/Tia`u21J¥0gP/ ljC*r0'-ölž<1$Ud/(qD:e opou,'ZT+Pa2-h%ms~+r9O紺Uս{{,{ qiRWUn3OT*x5J6JN{U^2oRp'gv ʭQj3{o&kRfjTHjlH8"~iFʺ)V Jׄ63˴)$~:aS'\RHhe.v*PC$E9U]#A?>)0;WLCa[iXG O! )e4 >v.Xp}^L3p]vI'O>5w={x}Qa}x< c =3;P!В4,W)Ms3i7;eŧ7ORhDz_ re|[dʹָBk%J˦6It^B{t HмSVͻZ[wݲ> No|uoYW7>8H=qOW'2k̙; 6ʕRIRjjg% n|Ոh~8f::v_{:R|@+ƿଁYˬar50k?;3VPE>JǞ$h?f8C0}ك>E>vۓYf؆6}&H۔nZy9cM5ٶ꧞LnKA3\Jl*E׿.8qhhjW`s'ic@>!ࡌ}p> n|H@p~}fʡuمkOYD8Zs{*l* |$>#c \|Kva垗z7\^TV!E7O ,'KsSfYM/Kz*SV&rGTYٓ[f,! IƤK-; |!tof=0~m{JX{:_\ϼS}+ш?krσ0g͹ET}]scZNǴVڲ+L|O{ϥU&s$)qFgT,ǶEFWM|X- '2cf|JO^{z{ox-Zmo-ڕvZޛ-˒,rp 0bZi!$$@x $@$@(^3Jl|޹Μ9sf9yL9ƱGCOoԯAؓ?à+jo<(/tG(3F#=o=ëa xH&wT.,*ZXˆĖ 3YRc{z}+7{BIh{ F e*O6sT}VC"Y18B, ^ǧt2"aS::y̠Į]'؍RGǤ__a8 ON~ 3kַ}rj}^ 23>j4-s涶8ָSM9Yʦ!mPbv7TfpחX"cάuf[c2a ոL2RKs\M++5gYT>Arl"i~t@:Wk٫|jT#8* \Z; #=3tU[) 4cw&%\U^a+sꓹr9 bQ&QnaM =;ފkIϥ%ITg/בDb(#ԗ` GT|.`Zl18O+(]:' Y&Pwv569 ތe 2Yj0}tzIbDk0}҂< f5Z4`{r 2 :.40_⏃ {΅YD?qUy~Xc_?^z뉛21:cxq„X A{k>+7}n V43Ȧ:mȻA{iZh1e]31إN Xx:q-0la=kx?ΌJ2r2㜐LOxJTׂm*MOTQW|Ac-uTYƬqdpS(KL֠,+cX@ =0/3t,N/ Q:y/dd KUb*Lk4>F 0/X۳ ws~a"p{w&>>kvyo2-2b핺X݌-XXl3ꟷbw2{׏b-l_٣qlfFL@>=Q9Rs{l3dr SԦftX,VÕ"xx ϲի>/1&}Ζ|4#K R`lw:gMpE*LGZ_C $q*lݑffl^!#RuNOp%rD+zDχO OW%r-//ۦGtq8ODׄud$tfp*M(*&S Q /jZDT\ 5~m,s%ck-Hx iVooPFkT^n/NG򽽽iMZ5iU^C+mysɼtBL9M/|4X>RׇpɥQxapg-M/u󝸟7kqYR 2kƞyj/' 5,zl 5n~bd۫*J3/iSȡV20[Ce%JXݐ jSpO-"O{eyE=tb,]\\5V<ֽSOޕֵO֝6Rl鶶;oZӭm,Ogέ*,(`A tի*-5{O?}eߵolwWp5.wEL{HpdFl$9Yز}KsRR˶ou`jvmi2Kw͚._%W d׺k|LȎkŰLV 'zJf@GH026G\e˅,$zwk}5#AJή[ݹ5SK N?1rJq4[K Aj"g22t&$Ǐ{(X [  8\<>L'hV j+CXW@ˬI6•F:yFOtD|#uxǑSЦW{=)ęFۑS=is x"EOp zcTtKbEASlyĒt}%Ó%Π \ΤKEuu.UjՑbv܎<\vqm[^\k[Q\ͻ^/OJ*룿PVuyaVj0!P nXfSf"b{(` T9*gɭwsr\ Vr,e038|l{4e(38?XQ?G׻ Kn%?Ƽx,e(||1EÁ̼:U9Zw2[[C)C}&8jݢ)f@ΪC򮛞XXˑ%ʃ%^M;B_}!;٨r+K;Ԯ|_xJRxRܡEk)V-XZ{w[byC &QnkgU xm#/;Z819kO :%u2%})2zq}^99YUƗ ꛶[zS(^h79LBaz}{Z!ZI)e65gl#6CdYG͈1 1K vDeEk)R+iiIlIx}*J c12$eI^h+Pܰ5 cμ,/%`߮;.bKiR?ұwu8NM,<#:'cd |ZIEDf!ob}m# cm/sQ2S.KL+tuE(k^mJ'y @v޽^4'% T.74~sGjz׶5.B竭dO}YT4?llٛiHzsјݜ>\+a@e2}vғ 8(pz S\8߫2'}pnwU-nw*j^ 2"'p@~߿gtwQoҒUh]URջaǤC›h|D1Ph[zY5.>^1(> ߂նGS@)bߖ]Z5O+oju&_L=~Y2%XVPZ J*tZ0_oFP6u+CɯcF"njitFᬾ Ezz6n\;:X]};:T]}zX/x>u2~ut>t2_OW' To}UU[G~BK]%7RϾߣﻖWa_Bg t*;-%4r Ȟ[b4 ) @1]!<퇥iq:DqGu9SQjɱ29)`n}VKin IMdZv`޹+sM:L_FSa6%Td0Kljb ni~Ɗs7Pєd-.ipYʚٜP/$oMLwo=ڶ{اQ-f=f:glAcy6ge?i+ fms7pg_ 6 jo?49Z(r{VΒSt >:}~g췎Vl 6VފڧE/ñGB\U (Dz2.L_bus!{N5yV pgoUrzC4K)t,rtcztIA T\_O~Xx sqxc}؜9^屹WVnC's*+da~ǣmm3cmmQ_? 0~p@1p4VeBA |r LC=O@A;?#dCTxSUsg>wcyC@ djb0~C] h22{`Ν)$˩K~NX? zΠ{́96~Og(KGq?QꉉM֯91x0Mmw4Ι̑cyy]cmQޣ;v]M =-} =/O4웅ukn{b,R^\{p}JaMV{<]` DOZƢ i[Nejkkʼ5&` udvd#5A//H+do o)j5ppXITYb va?kXs}˲j<37>bB޲ʕ-.{Z 9aT.6.4~jҋ[JI~}`3 paUTnNP8$$F0r8.Fl@+%x9EtQc%NdU: }w)ߏl ^>\P6VH -I+m J?4xNzɹvNpuH]3?P8Z\4).λV>?;6223NL*.0xL1?@.HZL+;"i%": D{}[v~&^NwVO7m+I0m|.o{ytɵ,x~EJź06oTZu7:aڛS`N$`;L~ua4J>f_08PEiGV*ƹN ỏa~ ‚}{Q'uد|!r!O"?/lnnS98%2~^MeRHc8}"(7hr-T?Ow0F)DQo3έXW' y}OTH.XWŹLbȯBXvƌ1m(NJAS!˸|{R\O)'YPڹX4F^n-x1J &HW贮4u2w'1rCO [Av7 Ԟhޅqda mzD.xI۸zM&c@ᡞ(|PoQ^ڞ;,Ju1fٮv7)`[>?x&j.cǪ,i`xc IW5◊b9͒s`ďPDwX,[xM#gʕh̶{-,"-ɓb2+Zԕ5/diMP-+xy% '>KQ)5oNn- /T@6ABj J?3Tb5g:˗a K"-`bѲ*(/"^]vn,6C5A=' 3~67g-Dy!sNהmN򙜺X a6*Vlfp߮t'iI3e#&fgqA2˒gՌBGyWlZATuQ೥~_11_~zĊ4 C$GqKrY҇R3|‘Zv&B;K5%0uTG43֟;-atfx^hrpI.b91?ш7:!c=xVlv+»?"F9>;'c/WP651El1jw:(/ö!,s(-iQ6F Fl'2 VR;dI=0 _L@'ZOv4wIۼ$7cnUNWP], t0)s8w}:ҋh:&Nm[[UcΪJJ2oK3Ry55isӔݼ^Qsx(XqO[ eVzf I.H Kћ[ X⓴Š_*wGu-{pK[sBHjy,ŦNdwyHx4ጙ> mTcpܨjIni*4Qٚc?錕T X|ЕqLPOB} j]ZGDeӁk8ýDPҒ7$炇HuQSbP)L!s|@G21VKs)1C)iz"ſ4=ޯG֫h:&~?yǖw$+:^ .BO~2Qc_u+>|)PH`\O-kg1.ˠ҅?_ dxΌK YE9ij88c"PaӇ"̑$ԇnw,TY֘ך LR,یeGn={'PH|&RN?U t28"~?2*䰌>#Y8}M)X GlzxRO&ci&t\ "p A& xtli&3+=v, R5C%(slPdئjZGBK&O"GGI($#" `9٤/rQƕex&&kI9]A*ۣ iITy4UѸkCTu !v" C3e0 ҶGѤ21`AMf`eDhĄ&+Xn™M!({)P}AnL7QI,"(e2=8;-ytJ!+=Jf^f:l7ie0& D]fz[w&+C>IarqR[/3SK [9v‹0/پ *MrZ2e/3\\:6G'qt6 jGtW(dv5Dq@t?xM(0b9`31Wſ/OeHxPfJjdFLZ?27(b92~*:(̢9Y.V@]f8x1`;ln ȟѸIћDTjLDl+>x֙Aڻs]7 v УiF{_^+0? 2 )"up9i}zkַ^~cگJ#l+$rU_Xɶo'N90'{9ov&X٘f@^L;>,GTZo]UN_/Dy4IZ9ӵKO-;6i^3-QJf 4uC`Đp԰z-FkAㆩD4>XtHc@aN/Jڃn%x%FmBwt( "aϥ;{M(;b㉋i?YzyӾꑭKC{B]9%WvY7voxln w5HI=GXϡ=Fy=[O&g\[_Ϥ4,8 xa6Ë[? MI^{q*|2`mk~2C\ Fo>$2 XNn܃//Ɣ-߼m5+c_|zlJ|IM6i7YQQוc@`:;5 Ο/Zӕe/ <=I1XXFxC9wNʿ㑸KOPggbGC|8~ Lkį%7v?™'Dm{% 99cci䦗ZrܭR6ѓuonE m6zHۃ,}W)8M4ړjRJ=gV2>?Ӳ)Z Y&AܵԮgZ9?~9T3{PNѲ)hSD[ a7L%_&_eLFϼYUHKYrkw +UծӺ1xZaLҹ'U̲Ԉb`,_ Qyl HK5u\ĿA<Ѹ b2:.":6h:t0aԟQ|%3=q:OZQq`a>Bw%Ԣ/w_-c CVs L[MJ9{;%cr@.YFl]21α_SLLN+hqL?S^zOIMR2ddx+*MIR~[0Wv9slb8aj5oK5-S qUuTg&8 !ށg SN9K(:c8|PpX]B)yξn]Byg㇄<L`ry2N`72 +CDLPZ".R%YMK} %_JLfS7 B>S 沩`E-aZv.˥pyX5{?~~8qe>{?:u1~;۸]EUq 롟EmL6El#b62c}jm^4cwW(txd="~ESLDm{혊 ,SWCxYSnA=GRU wz!auG׮2cr* -TqFu ou42Z;;XrV_d䬙Um(뉓i,GPj@^h&'ڂ!lrEtEz*hH"1lX&jMaD?OHƲyZ+3.62*HR8a#A*83~wt)Lu z xnYvŴ]˛P9`K"yv> <0>*fba&s΁7Qe3i0tf߃ =軙|׊"ZCoRƙgK:]geeU,16O4\Īz# T ͑|<|Zbk2,-G 4W%{@&2nk̑Xa4f':>8=~ꫤbo|8))JLHvD`qIAKԃmy[؄j[Vy~'a*^OR~§EqĢ VeCٚPHUMW(P$@SAswBYg+ٳWQYIQT& z?1] :iG mQTeu|s,]+.UUV֛*&)v'JD7ó;UX;HˡU@~}ϑ 615,2)l֙u`;%]dԺIdϱCYT#Ҍ&y{{7s 9g}?ËO' Kӧ>#{61oRwyX%qnD,'*Ȏ* qN< f7m42,qPv@ ]m].6{qi˚Z:֟^^f]C|8iJ @R3,O˝#5)0L>K (α_AHp|vFt?E돱T0|PY5$A3;y{E0#G|@]E\54ߘ+=:*įFĻT0Ϗ*aj1x<3\ !7eōqj!Solx\(zQD2UieBd,l0>Ǎ0.ϝɅZSWX+HÀԙ"]&5J̀#]A7}Tha̸Fo n2l_XٰѓB,e'T6OH&+>6`~NlJV;F:9 0Ym7 [^McӴEFSc nhr[GT@JJ&O2mL؄ɘ`q"Po_$ԛo)kw>R&%hiYD~dAR=0GiILݶJj2j;̹]#5~6N?Gc]tDZM\>|w]9y@ɗݩOIK7ϝ`Aq?OLEPq\n3 '{1٪LK\ۼ24q\6H~-{+WK~[C߳]}lH`( 6e6ʵ :G}ib c.pUh5fRȗKZU 4|;`U{59V+`G!-߰,6="*Qaesz\OXu k98wCE%á&FLpdz=šX?Ir s] dacG?}!(Z4ʏnJ뒓ud%% II3"SAe Zx2/bBȫØ5e;M9-~kɔ䘨mȏm=W$7>e V[QSY̳=Y-%QkoCZmiwze0bmv*&]FWm pb15E%Ub4dfxN|yK#lM`UXjx˖4<0Sԓ~v)!jÀ'љ!>}OaszgE2c2A$Y'Ԙ6mn*1)$%*eX.F1vf2h˹$ J%l63xY0 Sh0 2s3my\)'?',#Y+V(1˜ňrEQw.Jٍ _($dsZs!oP.%؍#aGԒ (یIH ʏ:mc9m ?M/Ɗy$84*;n9O2tNJxroJϥ7}7"8p;HRt ešJ-jTcȻR;UDwDWuVu5t]6 *0 _~)..R5sfUA^e qa|xow[/LGRX'ޤmv]*y|(he L8tMȍvȫ[j^Yk E6v;4y4WB9&33zH$;$z5'G%3N`d#Ljƌ{*lظ:ۨ_VZ۱۷>&T8PxE^Iڍ1$b"?t+8)UB\Ӻ4*wo{da럫I$"Zfhڑ79{κ[孡ЖK(m{: קa_sn=kJvW6y@qnSLWǙF%W5rm.EW~hAǯ:[{_>;%3NuO^fgdf䢛q+8U ŋ2[\q@"SeyXּcⶊ T$b.?|NL/ 20v` r~n/׬ #Tqu tSO[uAL >K}ww 5XiJf„Q`{J&ĕl*Z-@yB1`J?ؙ%ȃ畉Pw3\/;~ )+ ?5BhWہ,kHGmeWO߸dݡ?oomsB;^Pz J{o_>lwVSz\_/LQ?[|tV%on*QBJM)2מ; *ɣbaҭk?Q Tғ_SK kԎW[=-?Ҿ59sgKT!W ~lHGYYU9v 崖V*&ɚ7zCU&g r̆d ?b]QoLs\TԔˈ+Tֆ~'kyv)vJt#=.  $rW5zqwEK=-Ue*p?X-3Ã? -z؁u.H0p M2u/:ConXAE?32,1 5YƇpK Ps8_9<`Ѫ$>c:ʄwqwO+|Dax$$րj=ÿ&zmZdM?Bymk\rp~qyіQu/fe19>2馢.{Vۼ*svIVAx'+*,sj *uV/q(=_ot x_D lګc4BRhaf ґ}.fv,t/6'wB{o? d>Y1`u{Ѿ@$QD/`li]fkW B!]ڣ=~dk?:w>1i'HOfЄA)fਰM)gϾޗn]Η7zniXLbPºDg<4zpo@5˰ͲfƝ^+g3xy3zn^ۓudkx_.fƥzL]y=NX#eU o4'i -[;EE'絭iNu6s,DH!a) 5DBSKOG7^ϕ?P#[ ,=u9Ϭk$Mǖ4x笯Rnz${{NzOp2 N{]gR0HQ}׎|tvuqǾG : K̬h3c\}[eOOȲ_ݹB'| =̂Ϯ[}aWeG}x~_d54y<(UF_z{bewOoэ[xcMYny I3Nn2FoATd;}hH2&>~;,9zC>S: NINMDBKPPw*:]y+'àjc"7멸CTX+$oOE6_Yi&u3:t,t|5m~rK*vWH|D*h>h;x:V vr9/װ}'Bֶ [ 6Se+cCiehg2ER"z탫vW,yX[ny xǞnwޒ?\!HlI̯|uA}K*);E4$ ;\R!Ci 0p'W- @ c'=Aeh|iS~ާ]-q%~Qٜ-wMoBv~R;T2>P爄dC`¡2Lf]=aɥg9Gdju4QG#?=Z|pBչmh-Ɵg6W>Z#<{{jUR.L9lRH0\2О]}:r=gsxN)g\uہz gO\yy|(\97=RmB~Fڢhs 18y< 0ڷ3#OPgI+yKD'0k<\P>l/-X>қg.Y*4Pws Y_Vjv[OUE}ԯXֳMm9Z$Kֲ,Key[{v{I-{RP@[Zhou-D=G%z?_8N}RRyHD>YZM/l)Y ?~w73'w%M;?7>EuWok@y{0(dg-.ý(pi\M{t#-i$OvKn1iLNI4Z죝6@tuJ)D~-L+2%Im-_Bo~=mϑ=w}}* Z仑kwςeCI<~Rg ukCj6 JKi'u _ 才Hi֚KpHs֎f1[.^/0v\{t7x!^gt&5Eo"C-Z%#H zT7yٓ4o'?_a\X]w+72R_orX}y-B2P8QO1Դ`i{a3S=GKyWt~fP`5(kŒy55yv!]q Uv(ʑks7xf-,8R6H\4O bo+&IU֠ Z~C3g^&Ǽ -3i.?*صs-EWzc;;" FK@4$4Z`Y_[6]jZI%}VGEټssO MO*s֒\Kۡ>CW_- 3mm2(H(q=.?Re0TXͥesȘ5iO^,rg$X)!"EoB6gy; 0%lѵQ`sE1LF]?z|4Û\ݒCjGN Ignz>8GxK Ky~DS|C)\}~ɉIZbw|D$[ԗ%$W_l 9׉}v3EeP؄F:CzJHt[:%g5D&X97C#nwxv7?M|6%-3ּ(,:EJ.hgZGjg>r] t0G+s"1WQC|7Y4$3[vSX r hY.#Rz'ry%Ka*4Vg+FkC_Ԙ\[]l5'r]k++5V9#xžWB^9q*#2YHZ3C_`En-藩gK'mŔݵENW9"ވ l2sU E{'SI-ؿl AYxoq|z<4Wv>8yV/|Re%.d-] ##N'-AsňJ1 i|{<#:ig 6!ĄSRjL<;77r5 vv9E # w~pvR dMZ!h 0cUf̹g)UG)U.cm2KLq|zI$CcK9N ,,]`n$lBO/3fQ[Hߠ?ſqm!5{YBo1S5M%LtqoLStj}~Hk*Twn{vOi=bYG Z BYᯬ`ɱbrg_Ĕ?.tFz"А2a)?ڞ ~C Ӂ "XmŻ/=pӁM#=&rpnmd) ]2 4-mdQwo:in) YRg/\}4_Pm_Tu~"d|TVwF֝k^B2Y%-`GjkOVe* ÇnMb{\-E,JEylو |QP25G>2.UOV0N#*CӇjvuMQ}sm)r,\DzQy!G=w!jA6W+P)4u h = ^')~7#dDz`?GzZ]9(jtYfo-RmB&jz{KS{]OI,kmv!"VCplkuYh`cetDct$b0qO?uwe]JޭTb,nnWok\zYt |W~k:IOt3v<Bk5R9Pi9ҁgoȏW(5nX>r^j"h끎Ʀw$4H-$KOk'z/S=ԣEU%u3s,o+Eq_q8j_Qs٬#3i|VAγ~K[h Z,!SWdH|SA6jZRx ͇(([{+Ɛ' wtq^tSSn/l))jq+4%<&G_;wwFM|.ۭ/vk*'* 4kasOV_s!XN[;%074ֲ286p 4i"6ÃsUVK99hlVӟlnGG9oِ0::.qon yO,[{kkaE[h~]*_:bg]gg=`0H<-nmzm3ilX) үlFR]SEԵGG0LxOE@DFG_6vu/ArA2`- 9bRp;mqX3#i)/ n|S=M [Xk% oqV•Aݜ|[r? )"/̇ []M\5[2meULy6(J < ˍ+i>@#2 H>8n*FZ?I5пoǗ֪" }W_O XWȟB,Hh$<DZ]t-X Ő${&u:z @f^{jZ%E>Ɣy@xrGPs9:jhFOnR]8U-3uOKw p7aѓŇN0{C^7Ltin/'ۼ5ny n[>!۹䵺ԫ*m4}FG(ņ?@{O'dr1YH,>@,vA+f+-|;S:zt]Rm 9݀WiG3@R{ЧzȻ!?),e- 2q,O[[[Пܝ[&c;kjvv9l y2OUnj;:6}]7a.c@,)Ecx1-]o^g6=^k=DG(Ou-bU͵ӫW/Bv$LJY%ޢkT. z;uڂhy@+)EzyCƣ>5/[;트 &2 P]/H<҇~壹D#ze9DbÁ;xZiWK ӽxoS "Jc^N>O*[͵Za{/g:.dz`>R{D͛V"U90nbOLkC]}ms `xpsagSX[0++]T{ A> 5>v(9BH_: TH{F3KV]O(r: )C,trSnJY$XF }2q 9 E"$}ЖJCav "?Ľ5|B' ,ь,xT1CGe-8`xfMtd1L-MgcS=Gk.}J3.Ҟó蒇 :2-i+1?O9jEu:.Y +QDa&7ގ Od3ǯk 2`5fl>_t)a4 `eHd%e$hCoɑ66ҤPgނ0>s\cБKDÚLOR"27(_0*r6]b+6Wv"8h C6 *qlߑIYb_ >g_V篲1`7+P ZE ( 5W$2X_eL*Oe*>RWbSï*~/1N+E}NbE,e#r8oH KI ^SΓ^U<N%cEI7S2^֐vusױr9ߥq:/*ql3E#׃[o@ׄ}4mo3*Ye\u2Rxmr/Ǹdd8DcZ(Df,uI Gz 5S6Thp.2jj +ly&X7ةE`ss\'zR 6-b}lgJ{WbRV) *LB^#30-ui_o*dJ niqTzs&a ?DG`[Kj}>)?=he f[ b{U-^ٸM{M5D;7ꡠ ?`׀H"ċ%]H 3_,H-Dƒ$&Bl[0@؆Y8O.e"l:rѦXub^K~a-+*TbB(j݇Q$į25r%  C~)I d&F$I3ڈ"X&LbqY畉ŮjCFoj̨ԅE!N_-.k4 C]!׵.%qY\9![aG1q"\i\*uz%9?^LT4+{=3ȻKu  ވy 7_ELzIGr=@{R>~3gP/2$knIt=6(ejT0sWUMa,trj; 6jy,QYXPB|y<4RijmehW=P(Wh8*E"(K(| z4$a:dΫX2FrZq .H< .fYZa^-R)__>~Dq< i|hOuϔ߼:)J֫7\EY9j#i;-J΁pצ%}COeH r]H opC.<\f-VZDI1am|sp@{.mSzۜǮIw&g2՛ ! ~\W}rU +TTi8 @2 *¤G/OO:HL g62w$dAģ]~.VY.#K82h߹A/FʂvߌHǮוM]Ҋ 2Tň2؏t;ߺܭR(ry%@?|+]*[aiS)=qk𺊗o Gʵ}%̚g~OS'0Ԭ)QYYVU6ӹb݀v4Zyr~cf6MR4u&O Ѣ+b`$G_є2+1V14b&E:WEȈ?r,f'$.D<(rH_:ⱜ$ޝ*OgLح˰W(hY^Z*j2w(5 "gIuԟ{?ΟE]pi}n&^"g uLMؽRmTسkOa :W;:<"K$hb˨s9sw|XOG6F4WmՏd; wFٝ[$*#`2l:]%<|^ =c6Mm<1i_HQ'gr]- $$a`qѳb5,)d'M.l)hoe tNwh*1fN; K}n+\l4*rIZ fK*s' .!-NN>J@<`d8l]?Tʣߐrv˖8Ӵb)o`$.U*8 꾌|T=,)|\Bې9tRVjd+ObSdŢ\Y/ QG]2@zVO9  hhZ cyK&㒋?Y /e~<)enRaP5J:kI;S$M:cm2.Ќ';?aGEϫ߰" sXφXZRRH. 򸖤 #&WgT\͡0'Zm? ]nL2g:X4->-4vΰܣ%Gc*:Xwd*>\>XZ O+}jpo[G\c5n$F Oo9nDGwrc HtئP(2埝5xr$|wXyݶk+ȯbT*s[ѵķI^M2@A>"'~AhLjoOd5&4Y[AäLل߃= tqPX`' i"6moZŃ\O/Է &[?+#?GBZ6I?_Gzq2Q :tŃmyM "`, O,Ox7c}lJluSw<zPoÌb̼?嶟O}M 0M,|H.NMZY/`W kXڏ ;މʪo|ݮX1| 5Y\ ;muy'Hy<J5Fy@OxToia0J$z$;&"p ^y'DjmCӥ?=y%2ɴl\m"2*٩#GGt˙Tze-i ڗEtY>f^2;{}*פJ˪‰Y={R#YF:#ųv< Jܲ 'iS)P&zF"[j*PhAB=q D{$!DX[W螫t݌o #KmC&e"LMV7Ӿl ,"k[B%fB![\730ژ,̬jTҹ}h4*1roJmڳz%,<bЉcBqړɪ[|Lls׵^ @J'Cby~XyoA -:~59 1eDf7y$Gr KH`Zd-,F9 @}nm-iڃK~ƃ!2t$EoƨHY{c+5bٔ K ;Ֆ@ۚlub щ1@(K'6U(?O^%?=',N9BͿ h14< \0Z cNޢ,AG<*3,=WS~%WQ}FϢj1"y#|sZvCR[}8S27-xK+M#9$ b ~'~T/20 PNY00C%7VJXҜ"S3L0s=&0? a~g| ^״Fe6zEn3T;]A]ɪIi_up3-:ۚ$M;Ol 6a]?bsum/);w*:bzlamX5K3غrk7]~oruODw=Ѫ;kW47m-(U5-!*X,qpfSd79JK-IH6ŁK<8^獡5#gzl]C?+8م#JG.޹u/#æ@~ VE {J!^6p6JX7d~3*j>7HD1*Va-+*qȪ@gK-LB(<}z0K,ƛY`rdd,NKͪ=f rp krv=]NMî~cɡ„p$"0&+T"j;.t:ֿ863`.8.1?up8!1I(&0&8=3wIp);M/ZZiPgl?hN"Gmr4eˁ}eYg"Gu ."A2-D*og3!k`; /|77 ѩ;)W8b|ߑ;%'-J]%a ,U_lm[jP Ǣ٥5'= %Ћ=vjɟp/ Mb]f?˗ #s/6v oeub>irr0 'mK[ n"G1ZH䣛oFwHȇx!;XVX.P}cuuǾy7rOCtK{G k bm]%#ã#>w3)`1Ge:5X^1'vCKE9PdԵo*]+zʛR4–jDbswr}D̂k|KSݷǷ߉\%{I.I-;̡2Z+w*[?8*o}[+.#=e޲[<g5_(\`)Y`PH.I>N$`lH9f|؇EP}pS;GȢQ6HNۢߨW\X5Npnr:XJy¥pâ- Q ؓ˔l쫶X4sYt?Jé3' ׏jÝ4MlwٸՓmFw?{n̋Ry Bظ\ *0Yd@7c=_Džn-1Zb.{cnC6D`Cy`qo^ |b757 \VOOlryE",]ec; FOsiXZT;RZ9۔4[Y_HϛV3}.\ [s3 a/ɓDT-_1<|L𲾤j$$4[Z:{94ZeRO.D <Ƨ'͢>PX31is7:ho<35xmzڻxL pUV%&ݍrL%E6Mp} URqa#Bb_ڨCԧ n2XL'}\7g^m$ .U]`fJXg&3X{d,= 1. {wkO guZ!요حͭPa`R*UACHWhL*A$оNch9̟KPdȡӲh_] }&$K UB +4(n1;*{dO;lfO&PYA=Q3rY"cL ~bũ4MbK?ݘiJI,KqY=zYkx v/\`,Q+`57bv6rIz d4[4'3S>i™) ?@c\*<~n- D-䖠E3q#`Me P}r^XqPÙdI ~&` *y?Li ,]r.P50O=1=LOsM<Đv >=X[0'Cl)2,bV;6mcewn(0)AVH>1pW݀5'X= JÕd@z|VDKG .%/8+X<9K:')>~7h.]^wL`B,\=V(疩h[zq ]nOˇJ *]~'!i}׈=Wٹ%u>WU؆ڞ*~ ۈaЫ>hXE22wq8t 4_Jo24>ѧp?#D1vI%6F'\2%#6J_{AZP'ͨH02O_ЫMNʆ @10v6жLiP1_L!-wHf99]YY[.+Ƣ_&O"o:.[]sĐEA8An4)An7yl0`JbDZkbc~cu*?I?IxyCu ;gBM!̄7z Dvr7{ԅ~x88qX002H ${`gϖϲBF ,>/!?.̾>,3DeJۇ}GCμ, BDolYesi(s)0vhgrl!,.)789LҜtB+O#mBCHb(p4|I$vMa͖$=٦ U>5JEQ'K%NSoUiLQeT WS"pܩ7# L)]N(.[%T'[.AB-;co9z Naᯠ 7qgqJ߂^MI;voj !,j vaB(kR 1){FOh|/|o4 sM<:~7 A߬Y@_Gv,d/±9ȻpZ*kF2Ox/@-?w(%>3ndCo9L3T~smTו ^#Ӆ;|[;9 ln>5^T4~ 8cl0,3'ް I@mvz] O/֩CH#i!\E+\r,ŧY [qԎ\ 69ndAG.rkw=.֊V2ؔ|m_ğ6V[=^S2kOQHq#%_OԈo>b!L"wc>' ooKza2B5|c|_/4kEUs9@,PkjvtS_D9b%OT^9<;ڪّj?dWW. x7 Wi rFo.Ti[=2!¶^{U#3OvchiXURH̍h!ψ j;"I-f -YVЩ-c H8T'RwEZq0+|26CZ.bFqYJ<-4n lj ޠZTSYQ:u![68k&"YFr)J/b2(.h rH^9\&Wj "fndo*O*Rk2dwKI%mZ2^myc_P4Zao)u =N2`Oj|,m/\\X_-+EtMh׮m_*v|%Rz464JXeg&&p”Tm'LKլS$*\j׋P./hwt*WUKzfn  ݞB1~<[ofMZUL{r .-5oK 0:JM!؋B/pR+j ']TQa+[EJ6?Pͳd.2;zZ?ݦUbpZ*щZ r}j44phҖ -!ldB-P IER\%ef=n}p@uZV3>RB%)֫&5bCzߕh!B&eTҠ,qEz {*,PUm=ue>`VFY[X@ kP>%qHG>"aAOtt[$V& X> kdneT(Oc5UN1Y>pmבerbྐ :E;1X%/##[jߍ&w)#<ҤbIBƉ}&} &J|Owm^JvB|{Ⱦ]}-D̏ѣlž Kl>e J&NGѻyRg_|ֲ G̵<`QT `9`^eü$Xi!hh‘}%nn :9c)\R-ъl tg1Lǭ/%<&B-1xXd..F1P.s:!) }?\S4i. tʴnTi. Vkln 3mեC{Ce}dC`ݺx;Ѩj =NNg(|P\]o.k=yM=M``+Ƿ:-N^3x^)x-n7eVr1uڇo 9si:fsl776=AعIbUE㰨"Eo" C:V{)wEwv+89 ."R} }/IMWnd~^293GNRl;I0[io,:Pٴ>R)⡃4G|MIn'0hhMZ<_ɦ|۝RطՋ}[cb㽖 -K+K"Pl'9%=s9uVNCrD[C5ntLƘ:^c~.K@a&pB]j@ Ӂ3_jqPj3g~xo_k3+cb(鸰$댥uu&R4P׾1xK'r'`9| =vx '@7Dأ㎷Pe\6/om>>Ĩzb>g}nkD><_6#QG{"=#Z4 НVAE p<>wcdU>(};G|pMzF(.K>^px` j]" Xy-mpHZ\QVUUVPTVV;+j-.Rs%A8沇YTT_uؕ(=## X@d;6!&h0I6OȋV+52oqiz͗+ ,Sa'ZUjLhJOТ0 ef/k %Kxe;Z,Nֹ5"ÑGYc΢d_[`ir<&EQ\"9U sz_Mv, 팮L1lRVIE>h |1K0ݔ,ƪ,F+ڡySQ= 畀A]tgqd4CHo۹/}!ދs4|i8ؐE6σK1 Td\a Mv쉎R: 18 L \R$_beBrR-JfNDJI\٪(w {GB:BuW93'oFDIS^*9 X+1 zs$)_/9OBȋEt]_ 2 VQZf! X*2B❵kϙ{Zw6lxv4lPw<+8n?ŧ2}AiVRL#T݆ |B"G2a÷icz1 0\.b.QH * !]s <Lj"*'#.SeDN)8l|r\g i5QTĔ|KH T'VPAJNGRBUO\zvD ؋ߴ̮jE*9͡Xϱ41&+Ex!$zPI6ʓ-$CĖ?>/ndY4Vmfl8_,3"CsApc`ErU*c<;Yby1)/09q]E؟nO qL)eb[˙Z: u] weuwE~y5JK.wztԼ6b->K[›M(S{|.Ei~ˬKX,6e5gWy>Il'3\$ 9!Bss.hS)^E,'JqF)ܥuMQ޼,SG+b2=f6K+{ xΐKj2}N(e,| (m=(PC[G>/cs's J+92i0ebs"94Xxy*)+<=4Ī$+3%$&rrg @c,*<5Sq 9{- Z؆ ӔŊA(Oi/–btf*-%uOn,K>Y'G $3fso?s ?[M׬0:zIwOlb{c<*P^푟.wFtӽeIO O\3o<, 6/x8r?`V 2IB{肌G;W7p˷U{:޶{禜8xc`[GO?;EtmEH@!"~^/k`NHk4kˌ>UNJFU}q/sL)2X*S9gF#{BrD"(f6;$2eioJXwxB6N&A"hУg* 9Fj: zB 'TH+.}yq=3+3*]<50zi bZ{$bݨ%|ˆ"+.ggJJ +n.H5f(V-K`ǂsFA1V(D'?^P$Tf=Yg6IVEjmO2Ff+)fu ;el{]*,U~=b<1B=nUZ7jݻO KgzϮiT"7mWOgD+轹nuFl쌶N:3yV6OԶ0}֫+GWUr\:rSQu(x1LI" ٻtaT]f*w%+08 L^kRo։8 ul;e/^YTFyb@)J.sv yCKs 7tU;j3<uwdLn-uQ֓]p1{Ig7J;~Ci 㥡}ZK>J @y1JuY/NpiZy}]*)l @=&JI^_{iKDV)M?5U&--6 EGTfP@`vفPsSVZ~IT|[AοND^kԒS=_[j-ArNv|*X#F y<;&RWm0`ɷDf,"bsN>Ո8QZ-Uu54׺VۭJj(P~[d } SoN J}53jI|K7v_91mTe f ߭jgs ˓ VmBS~C]#.՚+?'HScVk. —2T]U6 K xގ u2sFbktm JQmZ׾9VץTɩyPOe =e14'RR-5~J=L>2CrwZY* @r9u͌ܓsgյk9jPFTFF_} hЕŃ)'o5! A5T#̗GHg!0%}Ҹp6['HX)*l tىtK>DQ]T(3'._2_OR4"cC?iJSe/~^SkczT%Miq*2 l>Yk%KtR!0z^,e 7· A-2˜te)}L~tr%H/yɖӰ:|ma'kVЬ`Lٓ'y;FA+}BUmGn ~w(#lXXy</Q`7-X*M#T:Q0 @Q[A{Zfkdbzvu?0<nSqpUMY(,"0 ^K`#&aqM}GTʍ  V_puϴ]/.횋0Ld&n QXU\ۃ8bC8=]oH5HEOX{vS ۈ#G!u3E ȂDþR,d$@, R/΍ϖuE.?(ґL=~oW zܻ/q@gH 4 E|JMy Ԉ T@it&1 ')kL|1Gb]BQf*#t6CiO^5qCn ?cn’yAyMEaɇ9oNZq gjM_3678--KGvX+a[ׯ#vQb~F?xUa`uې9n1ƿ' ~/WqesԯB!8֟AuTb3e bdeb@lk>A70!->YkE#.o @(E5ڑjnl9rݱ. D܂5Bw׳@hƬ1_9euMsk4 ;u;2k4&购ݙ)Z"DYl׀) 6_ DMTsӖ7Uu[Q[-Q|H?C#yn*HK)'߁d"S!`~}4=ӟ ?,Tc\#_i(< 5ob |`4Z  KU&<1ePHr CDEA92[#Nyy-xZw:\sRo!.HB oJHb8B捣7YyU<=vQD0YvÍa^bO{[f>Txُv&mm^63 b5'ݿ~)4ɡJgQ%Nvsgvp yeg2 2BxL9IE1?V-#C?,`l!9 ;aAEPҖi1OxΒnQWI\W"l$ivkg8?|/R6 MYr߬W h+?ߴ5, 0?@t/([(WwYBZ/6QbA%y\O;Wh G~L68>A4Jp| w.fL_ YH[,2'Fe갘1mFQ5q%j=ܒWƔ( Erl$R;I20|;/! whvv?mX>r,!%~ɏ)W%U$^%PxJ!X`V4(<].|uCOu{ڧ¤IR<ѸzFtlLa|{? =Yj6zn(, / ^\mYpV'7 SIylX, VH+|a~J%%xOމps7v?Ϟ]Gm?ӣD=CŖnj xgKaۡ#G8>=Hbi@5'sղ你>FEW)zpFl1REͼ| (AsP if8Oȶm?ۜW Zݵ =9K5~_ñTAd ;G$& fBal*Q0wV;?yzSkgZMp}jUkŊ>wO[TTW}J'^Z;3w鮞GWb[?^2Ϝw1ԹC>zE l>uΜ68O욱vMm~[ss*T'Kbnﻰ`~JG"bfnw7hOvY1.TaqK+][,8rq2{OÄ|C mg 'F؈(Gi7yrvd&N6Df_-!KNUGv~K}wBB>M5Oc]C74buc]յܞT*Y=q=9at]5'Ҫ+4{律@f] _Rڢ)"Ԩ٥w7D>"T(F)%OwA^HٽX-D-\PosL+*Y`悿c#1)iFh$c<2Y|zh>)w1`؀"sdfv:!._ޡ#b(Kc1`tgJom7wO6D^Aou}%кuCY_d1^|ׇm xa} S|XH$.,-)k:[0Th7zX,)95mظ[\P!Wd|nj&DC:4XG[F*pXiPOZgPVxZf*S 6cowjSf8__;Av'ok/m%i hd*x5Fd2΀Hht* 횉dml{wCJaWHÚa/b8ɋpZcGnTXc]'3/T!'i+pMm(;D Ѝ .ged%qESSWw=,g|3W "=}U.+_ otzҵfA_wkm|3贆p_f?swC˾~&ի9=3V^+1!d7 O>kPFA-m̔gR8[nC t\_c E@t|p (%1c݄cAσKO`m~x2.@1tдIC.Ϣg-"j8%d!n?O|ۍ2@M;sH*ΐ?tU"KCNJ> MIH=Iib~6>N>s'C󇇃zK1!1`f2z`>:=Q1%yYI? 94:;?!J-_Zj}wneI#+jѠ 9 W~6% 9}82C6-&//EI!d>;? ïilfsPJUNV8|l W 6uKJ :%JAe”Wi+i86_ceCp@X_Whψ࿧gSϵƒ:} >x.5F G,R!&mlL4d\;ښˣC:V@8stN %b:O tib`%_xxe`ZsS\-[mϽF~`Z7.| hA@ݏ!t7-3?$wl/_L1z D{x4"9_3<3Qf"\yg<+T$u 4OFp?5ώ1?+m?D-e,{/=~"OpD!{dBJT Nꋌ{(lDlǿ~'&Voxj&/q\Gp7\p˔, *X vҼUO܁='N[JqXi^o>(%ïmwykUG/iC ]>^ n~ϳ+ %9x== 1қKX(4EKU-ߩQe5*wO&J'k֍ưf] }bƂazP d_|g,21/xc<1q:7k 10F`"4Ck'ƻpկQґY $O<0pkZ9<xs^[Q{ڟK#צ756F5VXڄgxñMxh# kٚ6)wѢԆl21--V(R,j՞$/Lmp5Kʓ e41V0q&*M.|_5"3؜ ʶ߭}5c2UdSUzyB.Zt?39"΢d T@2 wl0UnK- Ĕ4Ǻ* Ԫ[޾E'{#ZW~eij6(|jS CbʣQiDwA;Zycw{Y;4{(^C)!P>)A~'2o~m#'zף^sm88,T:`{2p٠"פ% ؃|^z;3&c~A'{zUkDWNG \>6VvH-xfn{p^s *"+< M0_RU\hʨY啡זD`QHx W1MڙJhÙ&T0wW?I`e ՚ê(r/^4h ,?4؉y *X5WsT|CLOz8OxOl`x1y/}Ag!m,̜4\jv.zh.z83sYۖC10ֈ~DFAvz_ 琏dEm&YR B^f1SN̙7^ЃI&vpd> J5w 9×<3ʩJ1""%~ke6Q`z04衏ޢr,]ؾ 3jkYKC8/I8/ J Baڡ™ OPM@ QKF~tGɿI7J%n&k Kp6el>1ǢsT$61VQc”l5_\ܠvbK 2U&%sA=9Y-8xuo7cogΖE+6 /v'w$oSv>c"_PPl4ľBBȕ`CW^4~DKlʋ0z^v ol|rϘ}xE$s_V%d%.\ {B[r @`6]4h{ jg;NCP'g)uhj*AAc_z `'(K뭩(yA(5g+ =CoWWaEn3~p_cP*b.;Di _Ay25k[Si0Y教&zB>ǕqO;yP|9tQSʋ/&KWm^#\ZOi`/Ճ/lӶS۠W`Ȉr7*6Y<=K(?žb=yS͹9EEn^Xy dm#mu `d%Tm]:5 8Ss`ƕ5Hw5œ|tKlKn|eVfZ^ߖqȚV(sg(~Y{ jo["NORg&sX xZ:Ag Y @kV$A6rg_c"VLے3*ņE?"qU}U.,dƗekݺ/ʔCLz&BrBv4qġEs&DO^o?gnVx!"'c0,@K!%& -k;óng7ߎCO j-Xm@&gSN|LCkimɖ #M,ӣV?)+By(r>xaYǎ +3fod&-5ү>R d4 r~X"AJXaY`#wPC&e3XP([7c[bnec>CwRv, fR,Ccc,a1M5 ̭˘zϒW ?ՏݝKƃ@L:=*t-IDS$+);>{*npxG/^iv.\W]h4sQ~etg][A#߿}xNg\e'Q\n5um 4?]d)ɏ.¶I{35fCM a҉!A@ egXf;uhRD)H-LyۘcVrr.…+A<% W]V|h@1D1N0V>46=Vo-z(G{נ>>hӤ689`{y& jESs(dP({70~7#(isfXOwN㧽Nh<;Y/KچF Fo2ӈ_1$nQ_G3Lhe2`3J+EU[IksZOW\^X}Kޑͮc55뛓r_~ƅ\hKS׾clyWV%7;Y}k)%RK?._S#iaehÛoU3/riOwHSdu_3tTgZ"Ý"IU$ƈY _}ww_$gޞчE}φ_339A<|Ijc47R8б3_V60V C롡7T ^h%Ba(GH?~N'{B pk]&/:}Upn,\1OW&?!/& 41QthP>ͅ);]=vJљ\ OOws=$M]qj.Ԭ>Ӛ9Ԃn9^·z}|{}]7xa \;ȓP/pm) Tl0n)&Yp24T3smϞVܞP2, *꿰`^[)ǒ=%P (Vx }t9_oUYg[Fj/nKlϏ[ne9]RDN%9 1sgyc:PAV&%#ˆcGF D4Zj@U}}}:E]#0ğenw|LJ'N}C^rɡq˯iEF ^_[wWWN5jOWG:WoC ?3(L/PPQ4~Re]KqdN|z`@~=uSwQ&S p<wǯw}SX Y;͡ o솂mw7!AKJ:9l󧓋(Ag-qePc6'ֆah;7͒M,j_s ?PڝZM _Y{C[*+-Od9as_;oZc)_05lt UO5AYc TQ_<7J&_j%yU yez_rV\5i_Zk3wh#mkc<0۸ߕ0wHKNk3Ju"~D4 C*?N 3[9̊2Ϋ_yө :=svu2HlMO-˗}/Zl2>4$s*5j*7T,ϕG+.$ڶUp_TF8OꜨFN'vb NeP_WՐ8Ő੫Pdkú1Rى=4s-0-͸f)T cmJf8ѻK[̌Zk[Xr{Z7f'C֞:3dSM<]bmRV'}#J$ 1M+:q  =<ĜAY.Ha}D/](HU$yCmGLvhnj꜃mrOb%m^=v5=1ѦvU#9T^\+96# F6A 6_mrP:}?cYTE5Ү GڵԮS)*2̘@䉣kBGԮ8߬2373װkJ##&eݷ|e\fßy|1D` BZmĘ^ڼS;xc[iNFFNsqR+O?_U\\W:4>ga՛cO(Yya9(cU:,4HYUW*Eҝj0[P H0 ;GQN#ILz@P)㢥8a5hJ0JFo4x^'88*}:^5=hYL Y4"=SBPu_!"h(Y9\.g=[_A#18j9g;%눽WI^!)!Yc6VhEmP[ ]#`c+{^Kʝw~pez83S8q;q;a`<Ύg&8A8ɍ&' T[ݯ8ULzƱ9Lw;qv 7JS&ȃhc&' ҧlod 9㰤pVJ.qt.WyRwy<<|ճdaK~G )&'P"c5N_skJҋ "=*a$ٲ%EdْdYq:S餐F'J- HB BQb=}Ksw/`Ioμٝ}3JVw,64FT{m£3c ­xD$sXx|uXx,gXx2xXx< h/5Yͱ VH_G/Jpw2upN'K=~D;wgΝt\^,EƿAOMYe)*-(_[n7崨 ࡝@<(@E)/^jOj\<&~4&FU46 ioj_zv7oS#O~uR'FL=30Cf@sK#k燨Ł:q20@#Ow%@Izl]!2)^裌9ًN3+`p$\t*:(Em:/XhKl_R!!פ4WTZTZys^Y8̕oߐ4n~ur~Mcdͻcƴ+<6{WP.#qbˇr􏲃JXON뫄tLom\j#~=ۘW;pj)"ژ1#LESw\twcn[(S\h|ZnUʭQKq[Zimk&5gm--:#;{ֺanss_qeߎ딄o.*,YܜҼtqKֈ☘”˜10\dzE%KSE))E8]дqBJʄM-}SR&O ˙X\4!+44kXf6Z6ႛZ'eeO*. Gz=n p2c9ZN 暈e~Oe ETQp[=։[mO1J¥REm /2S72;F)vֆi}9TE^K2QzL:_GR~*/f$e2Hwy:$.GX$+>xߋHiKS-$!*6mVn]_gN+SrZb‚JSR/mRO&[Z]3&#%tqeahŊa<@g /6wf"ZRRZPbHR5_βH/͐T$ȏK̓$d/x_LIH296˕ǛO,qS" eM9<.|li[ZZҲmpӪBqlX5da c+;33UWN쬌u%%%K0n~ ΄ݐ@P%w躚\了\8O~S,do;^ 6Q&n5^3i^ҳ=ʂYi&'S"&%Ce<X똀o52!U^,&o_+2^$ꛀNob*j}8).mRExHp1U0ŎZm\ƹtp&j9.]wSPZ~=0S)i'}1ὁO"S ̞L#$يNŦ;KfoKfP*׫"38nn3;A5>:#LׁV%c{9'3rsx{o{XHTK_@ƧCʫ wo[l^r;2E]xdkqa]'agLCsvK#i6~\$e)=,iP:]cBjio[R%?ޑi?j?ܖPiv8zk|A)<43=.5N,qXPw;g !qXQ[*Ik0~T,So'N<>8)A}S=LguaQϲIq5}H%/| e U_E D VwM|Tچ.~ARAE/\rz%q+}o)n\y f~=I=l?  2e5ɚpL[ޑ*)H5 TגtRvuwZX. J+M6FG[ƒ`i6Ro-6ĂAĈ@r|M߯מq?A栓?3hl'gb]kLN&OpG;vX~ X .\.v7?i*M$T=ovjL׀Ï" &q';sx}zQ7+H7=mR 1!2:2XKMd Vi`DrdNSWIBdv&4ﴋjx=zA^+;7g'7'7}&nK^2j4PG  ?2Dy( ,Qz"PAu065A݃0V%t*v Tn QlPxQ'7'@f0?L+<É&:d٢3\ݔ3 ̝%JH=&X3h5}}t rMA3yP]5= &ɻdA F=$a†|u;9RBm&d K4)_Z[~vpP]ߘD~cs蘅Jr`ˌW4U-gɑL=ʴd䌰#ph*2Ӓ3TM"5o SmrwNu7VLp|f /rml0 ix-;:H]{{_ ?/} O4& .…BQXV3FkjX)Ta&H4c WOAEo3m6VfD8'?1C-GQuE FgbF Pױ۠0HFru fXĭW+V8ǐVՉ:$S`BѬ*;T$5ᡵ5aڂt&\A`k5ÞX[P. -BoYVR10]Rs-^]r׽$]40>;?$"FfJ d%TK&SJ쌲4pa4a䀴ʰHD"k aNʠ *Jf&ʴB+,R LʑT*[IZlMv4RMKR%i{7̃+o-?fDMK02'B,) i*'*08 DcTpRX[1VAnQ|,jlj(*,1D+f2Y`'ΕM0Fht4%@*"Μ?bU Z̵` HL1èuҬ4 2׋c6  ^$Z7-"Pr].|ݡXo߾-oώ,eZ,fn[a#_f o %G~zCj[oN9wٹ3sq8'cD 'TGL&U+Zpz`IAI,.#cOP]ZfÎ W|m1dT_pLiX]p +_JTrMpڼ_+y̝Iby  3QZ*\kK GAaUudc %ʈxSq (߂KJm$Ha^TQ9&!3*Iv4)M u"!Q=)ٱU s 2~75U`%i2@a) 1}"-I"dVVgIik+m*ȼk^%V^AtO'bdpD$l&t |tjqԢ׬jYUW'v ' (df5$‘!o D yg~[S  By}GEGL.-SvGQJ[߱vkY!\)Ť$s.]ߚo_\6r+=aI*M - 1à+W'g=+}Ҳ||YTPb~~E d~cAD+D dhN9ȪZI36`ךc"+ZP"ϛBl3ATSW?jgg?}\gfw?5S;s$؏f+`Ww7gQ%E{in[/tаlg3TOftDK\/`Fw@_Xl&#0))hѤ_XuK(YiV1NJ\uFF:76SU+NFNJvlg =m (r~1Sf3Y<fN`rk>pk.^5޽s*o˃7?ɦ7gb|ƲkOR]%uz!Ăo/s?9*j+|; P&J;#m3vܪJ&88:t_y;2۾q\_C Κsu E_'1ޜ^FYKyn?3l_I8&t-e~lڀn&FL6 <0{3nǸ[z gO.Uv9X&9՘9no\p*S^kFakNb@U< VӺҨն2rDQa0eiNGZ.*SjR!MX}!]uٹlZYn]Y`xǗXۗ/iO0)C`VM|$eNΨӀ&(kXVŔ#u m髞qrU<ȽDPPtR&-x٘>wMpҡD} iɉzLj(O-mhfmu ;)fN('ͺ,< o(/8#H{iLL`Ĕ#Wk]ٵfm4Fmw].߶ZuU";9hSvk)RrϘfm\):'VKT褉eUK%f>nS]KrZ:V"+ړWSgɮ>o* 'KqY^Nj<:rVAƱyzPxdP >NdUKn̼J} [CY.C.7fX0k k~BN"&-Y3CiB5Z[Q\tN.|`]"#{`F|-V'ŗHJYW:,44/]iU1Y1NkQԊ{Fl^m蜶y I,sP68>W@MEAQ^$$Roԁ>^A|s+3_=o1[uwIiQ1 Ya0g%E_( - [MpZDSꔪZ-gpzІ_D4xRIhϭWT>#Earv\GSgNafAh2T:_+Zag6)IXK {/l!Q]PoL s0eh+`oXJNflu(}[J]&~"3Y2;>φ*Nܬ3^Hx'*g|7k^*wgHfn؁YKf=9N=P[c6z\eԛIt'ڣ %%ʒk̢$V+ o7xCt/ת]C*Jx9xك!o", 5/,yZgGͻ``Ʌ[$}#N >ilQ/dX4/ȩ;rGN i-^ x4 f0 ^3m 7$Pa ҕp^XRq97#US {’ѹ)'.W:H#~,߀1{.]Bû1M͵"VK#f*;,plYɿ.-'﮵#77OkgJ sZ+vƆ#+Wr*YT{9mHʒT7*x}t|pxlx|!W%=WDCt6YEIi#U- 5u{Js&8._Iet(kf6*6JuU\vtЖYA#U  Z S`Qٍm`P,l`v vf# bp Ăq0+fCP.ht V vYj 3&ո(]Aצ}zJN{auZ~AjCn{΀+WL-(H]ei6UinNopyHwãZּ(aU/Wkݡ6_Xv)A.4 v $5/H)A#!-H(-eft ttȌDilrxHY2uAdd9NQtF ~ԈTSaGO /őDY&A" G'{zpYO& bibFvB4G6G[ SfgJAA$TERh 2q-#QQ`~ hZI Mfl5$G3P$f Pɹ 2} ! HA݊Kє/2PFarfDNɁq!HPHvEH d b"&a&hbF,yD.+[g+sy90Iƴ0Yy9I`SaJb*:%Iq_~P N(Rf?p_0"0C<3 A6G/AJ5&+NɝD@.RmbQE~U|]URBԠ&yE 06.kW%(Ūꄙ2,>Q(Jn_D̒kKQ[#xӭ/R4 cjf9Jbuxb. ۍjoCWW.|S 2L%Knt3D8G߇p:ul0 gZc Z˖2igǦFԦើ <Mii76+٧iuoaK{gs^*<$hԊL$XήdM`x줼GmɃ)MI>[%GŸJy?:u#U R>0oN3G/uC$yE5`SwƇ⃵AA欎2KRü9ގIX"T ^LÚ&Xxn7ŒPW0^ ?IM/f' 4*2 w]=c5H>yj4f\lQ!T*lA?LF%w)]szs7^ËDuiFۏso& rxbF5reG ^A|<kQJF7We$$zRRZ5ĭ/uKv3Ͻѵm{낽qT^膾F㲹F;1s8>Qzג(ޚQȶ/r!#tkMIL& nY3N$e4>bIד[:$}J*9χeGڴfE>"Ơlp뱐({ԟ+ݘOoܕͼʝ\>EF2 HIvqD~% W#5UNnYe7 T%H;yTݯ>^i֬ K.MeDhAI"7C\C* M uy&I֓xo'g[_;O` ᳬ;$ݴă\B):NPnrkfLړCpBSђ|[xdV&c_ \o5;F "ͳퟋUI-x nC1\Kqu\|79X^6Z̃ =Q'ZDp€kb Z+Y5]7EMeO"TkDTeC5~ ED%>0Atl2 |2 C)\*3Im@|FĠqgo"_82 Ϯ·!){j`ݽd Z<t޿Q( } !2%xA2dJC)M8wpP&Q2@(e;BT" > f@"RSl\5x=[xw#͑N\h &XeڝF%8sbQtDz>)2#TR$-B-f^~ X8ރNo ywIoݷ̇9MK/U]P:\K6qY_Y/ -?(ӷC;ñVN8 ʀc\ORa۷ɉx|Udk ?E #:D-'tN_\ ]䟛/Y4v߈O x&ou0T_oLG{ZT׿1˟PE* Ӫ? }6BmHN07c杷mlEkbj5+fM?.\qõw#5qf0ә&3Gx(9om6jj\)'ܱ8o ;p\#SwΏ?ܿO><|XW ɋha|>\'?\, t?KʐpWC%+>k|K:?:tj߾*llwƝi

    \y8Š{F5{~#G4P?_}:2 'Nm&%_n_:J"}ڤZ PwlD B7ɒ\w-WNN~2d'?23 IjA[(2zRvO#Kx v4Y-o0?_"LYPnD(>IzBz+|yk)0_|PL6;bC6z/^4ygrpz?=ڡi6籱uӤxh/cqzdocV6q<}rI]{x_/iwElyXe{-wFwWbwO{`[<Ӎ}bA*礎94p8$u;Qƭ{rqFWZh-7!ھs=@)&:oֶq N(Q&5eM)3ѫ sBh0C|Ip%m{9]t [[@\}wW=01 Gp}rj3 >m1咏>Vݘ z0=.vP׏P?Pw31s˶ͻӬMtf꾅u͝BϬAL cJ)dý2E4;ȧ7GOݺIHҲ od|&. Ԟ덒;N7Id?5.VRYYfLܼkI3B|؃kZ4T#GB$89jZev؁Sp b*Iak7^7g, ~0V2@$Q[bDA 9F*qv2_?M5ppv%-f<]ɔ1|g!t&tN8Nlw}|| _F>/CBr~0[$̸ͯa<@A2UÖ9YL* Ari)*/S*9!2Q|ɤI9̢a˜|+E<(ž?Y`c>% ?(~[ii,*.Z|vCEņXߍho*8pL猧}yzFK۔2-NkP3Rݵڰc~68cr {o? /̝{^s7$1:K(@#&F J177˝>70B)GпǎW\//"!&aɰ,V9 ߩk UC"F:I%?v UؔҐeyebI->(\LP;B`$\S=fߞ=jWǀ~${[WY>{fUI[&(FUj$xNҪ 7?n[u V&GAZ__BVEI  VD4>ܚ:%FǮ" tk2R4Ny/YVء1PgU5eF+jVC͘>1m"10"t|GUXko)k At7 2|u֗f05.:CKjȅ/g>#NѮumEֱ/y,; WE$a'x =@9).oՌ4'~%G=Smqܹ5z`43.<%L\X%՚?.&(a2ChVCFmJ Ῡ`9!Ni۪!`AH&Jڐm-)@pu;-lIva5n- 1v\;j aKx)إ0!Xs!!G>g 9J㽠p9Y]JhfCHa_%LjF"ZI)ӌeb:Y@) RBfHC@SMQp]&[2ۓI r8e0D&v:('/Fnxiqjl5Hp?_? %F8.v0m0]3HaDp{ۙ_f#v?|};RY?Ù |_!cʰ'_L A D5{>>8!㈏P<>DSrz2 vCz "d8aLxZybBUq VD+l EyXg㎩l7-x$CXN3b'r;En=Pn*6*vZ,_頃no2 m̽ \_ћwp=I W?v&&XNu?H!׏}#,;8}4 h~ 9ߞ#\f 72䕐sÝ8Iա4ΘUW)ʅ!Hu|Br_o3vj czR.u*D0Kdk\x s/@撐`P5&O 5Te7,|(omldȬMOupkd$tHBW)%v|@k=;=|J}#w]mSp+H膢\;遱澕{[{T'RA/,<入rBa=%{=ѧ-x%K{ +`VyaB!e{ kp"qڅ&6V{X$Gnw!x ;\v'!Y/0MMw [/ ޜ罰쿙 ?a$H`/xaoy, ^; y^X!} W ygS}0B6s2.+w}{&GsOw qd>`.r ց*OAm fN[wqݏ`Mj_G7~H9ܻz(s[)=y2`vz[<ߎ{LgXPdr] v7MM4}sP>ɞ W@H }!nNQ84XIg`KF_.<‹}ZN}(c°8SCg_ X"yNNSF,+>pEbwtC>sts 3aL`"!v)yE/a! OX=be"S cD45qyqb \ "ƥpAC:qFͤNL*պ9XJ9{Y E6c92,Ee^~!hU@vj`Zt9iH}IUu8Oh-ÿp'iyچ`۹ᑧ [8̃pP<$xZqx= ¨kަ#}k%#fҕ|' /[6y:󩮻|j6!'yu:"BM)52 ?1ZF.0;Wh?e~4m#yx uHlX)i9[0l~&/0'QorM$1V7erV ?Oo9@QLT#FLlxX,lSMFso'5vh?ץۉQ TDRp;q4n³~4vr i'B1or? E ٓk%ǜ#F"χ"+o`<7 Xrt' qc^fv@@C?BlG#=c{p.BJ-mϤkڞ5=lϿV|*fd8O(= &-2 bx\}GZ+?!d ;y~V(!Z:>Kr:S4cs<52^s4~4fNG\oفX|%h^B14&LHME :g( Bu!zz~ ȾpUo|>6p}ͩ_/ >>F=)OK,vb< J(]c 8m'5Id<T,Y#98kD&?Dd0xA>:F9  cYK 9sĭ%c{ g\i`.Ξ2Bz [FL=]16 l0=-~!Si^Cϡءء7wO꼦,g& k`+:5 ޶ ,Gk=Vr R C+A~&'k꿕 {E?e/p|\΃C}M?#4x3c09>˓3ݗ} ]%pC?={ 2sD9o֔͢@X!{]@ǀ B Q 3@ȏp}'u,ke@49!›4Țs Isl$3ɴLI23=$H(!@BA@4jBA\ յ꺻(!{oޛoWM{ιsz7>ςB52 ,|_Uj-4y~!Xc8ޟeSp?!֟zZ0VC˅? PCn@Z IMt 7H<[_\qv0qC]գ/ o zt6ݍ'mSʥ΅t;ҿk$T iAkzTVU%_ kv،8\INeо;B>}'W_3K! 5l$D_r/4D_CpYLC5cHh}Lk}A۩ȷ? *ȷK}͗}w^#׻ #M*ׄq\h҂A- ׌kFs5;46DD_Ӄ_cDk:>#5,;A5*p鯧Rl.q[*mFjxwsMchhl7)ϹS+Fa~Ճ/D0 %KT~҈&ׁkqLCգo1rO(m5dF`-!})Y"Z x~v@cŸ[}46r|s͠l5^UO\> .l5u60 n P A~=K< @s"|nٔs#N){Rnx{RK,Lޜ^49Jل-R3Kɬ:P|N+A9W-;jxVEpK|{Mnπ:+LI'!ϨeuPO@w$pv,wM?9ٻ#G?I<%&No΁e0E.&p~!ݵFW޼ڕ{l_Ͻß6;|TSw} (-wzQt^!H;>>;ڠpk9{}tr5N1m>?s~s{GMm>-E.>`Uܧru8NmGdp9T.lΡqj,j/1# F`> ÊYM-6=9 @4?CKw(># O!^('-̏?d6~ uR^NIXuFjQjЦ U<9z./ǙVc y%!DDG,k,?^]$6Owt8>30?c&+.=0tg-3վG-Wm@1x}bl;j|۔)Ж;-ß܅zE%WR۫AN%9N7f5`| 9|#YB1:nކIm֛}SP+fV&3 J ,Ĝc A&:x# iB d'NTmm3oN?^K~1ٌcui;ivDIDFG1Ä<9ķ'AygŸ Bs77A"n:$O]:qMKg_ƙHL(=",xC==mr偋 F#ՇW" B?jGE?/u2z~o2\'p!L7 U>O<"~ Q,=.dq]voh{eQFFe|-J$PT7H6Û ;Dդz-aH3kFDmΠ#sr+)>.}ՕGQ5$fY0xC2GEǙRZne .EOMH H H?Ey]DA龑u7P~}@Sr(Cͷ?_pؾvUHH~}+gXg~ć^)4[?Y34Vq"pk: [Iy/VQz&-n3=>Ig\κ6= sY⛧.r#1=+@1Ai;zfI=Zqn5EOԍ-]vS{qҷLa W$*!  &P$^XA7yYR @uu%NأN1~c]8.KqO}j|d\s1+$~BLjy@9>QF]9"h igv݃ceO3#cOģ|61΀9 @<ΰ}:l f}CːeD2M[߬M+I4(Dm3 {(iF#D]Nvaof# SG d!]̻xxtqUM0q*ĕ%̮n"팽{?~K?`/*i-8K}Ϥ8{oGmD)s8P8 xwYG{ E(Wq?mi}޼ʾ쪒_&rinQj4(I??i⎋LsNOmٸ$AE( 1W!R #OD p&_=TCm`AFzwzja'c`%ŞT&:)~%nuJvòEmб;K|.y\.1"$<#RݪEGR>:uێˉcCvۅNW(aouPQ/ύ: \'5GA^mf.9G}G 8`xo'$ݵ9Z伾3{;GWkmsn=-$zq*>lE"R 2sv~"q!=E{فޅLb$◂%UU}M33j*NeXn]?C5B瓎iQ5^xw 1~N9Wu<3x(b?*I1'3.p;cX9{a\ǯǢpsW)#'pK^8._%OTQ}K usЗy7$yID |qMϐ{_E+/`?َq_p0S)O NeNe8o&\3"^K/N%+%+ЯR2t+IF=`\EOzc}Hk7tя|91\U Ho@[}#c}(U%Հ ?c] 5S?? ܂ϯ ʢ8$ lnvHg"Ə)}:G/Al v/E @o'xy'z`THEf~A^⿳bN A;Gq^Ix /C8'z/a89/'8txC<WxV^5\}8@?cx ̞r=(%azTHkĢ;^`0d c ڊu(=CQMQQ7Q|TܼƘrLp.'aS$HHْLa'C~'M߿Z]K|LAK'A/ 7joҫS^~iyFSNCޏM\P6w.tV*!qy۵9?8gڠg/NǧuB%/(C$g$n'|MX8@khA\p܆"8jK[E߱tz5*hv@v'&pV?~E^&Bڛ=L. i0;1%\,[uliL`KJԟ;Ș;ӁŌ  %QC4ř VNAk7غҫJr|¶k]bKbyVD^밝{";x8TI\,J/oo"~,Dqml|^($8ZIMD8ܞdMw=GQjct:5]MH FV`*q'bYID<6 a ,=B70)Z8B;Tq#zܷ'&?*m"~ 41)~Iğ{DI)gex?pFp6ILIpďh7.b7A|IvB5N~_ 4HCXrDz庆WC_7"(eɌh6GRJƧzRvrܳ 4QL+z(Ef}27N+ȚNz+_}GνHqj)=5-~6wBhI}}p{9-~=*Sj/~Ö7DcBn\^i x:0~T+C?G~t .'j45a貑9k^^UV:3Ɔ;'j>tG~$b }>rY8$<2>\矗ps?w)C `6l\"xH"GD|4IVU3@64"5]i7@߲p9B}||(RMn^)p4Ѵ\auNp(X7(<5/X^s' s<rs+ 8Wȏq1"1>|+ }|Kewp|'/I ncs!fĿ9q}5CKߕOރ(s-f!iRS^IKV,TYcO:#iiVʶۖVY9ᙋ^Ϝ띙NWAe9aGOxxqo<99-ٜVY?,=tĊ-nlh+-F)8.ޤZ.g7Iu֋=s~:"}'×Yu떼mj9ަc]<}1+̏W4̏- su?sQ0[I,Wr z_o3{3@esNnZ'w7r H7 y-\D_o,eN\Ht ۉR؎*O,~ETgWdׯ|f{5]?ڂ2&@4~//2|?)q?Ə?K8VǕqXixr$]ߑuBVGV~%IkieQt1Dt|p\ROp\(TnEo} _w6z$wZΖAI@Y5k5jԮwnmV+y^ Zq[ *yYw2x\<-yk)IPm6257$~TDďc%RL~=$qU?c~2Ÿ3qJ&JY"eg 2]ZljnZíXMNI nV$EK1:+7N=oQQ:U"cgP?*m"~?'qL?PnYչJ@uݡH7&122D$SJz}UTr p wD,Kvo|>c\|K}I=b'ecDHܫsΖ{:/>}9o9N6.'t30QGx gzc>z3ojGZ\Pk5[)$MO(>1"~^χC7oRi#4LY`zv$]ٸ%:Aܼ'DYDŽ,6y~pֆxA8,(BmiH:Zxÿ>䒣 r]j<|՘Aq jSF˰6liF[c"5ߌg2*R Ɣdjֲ{lmfGuMUsFxA7tu`YEy׊vDOF?-E Xğ#Uz aQa=_RY&r5rC6n#1z!5M3Y,/7r&_#>>[Rm m!lPEhh {1.wrACTUFP):WH./Mlרh%WNnS;0Gα΃[Moz}G#ƞ݊5_YC PLz^*7'xef&$fZYI~{@/639&&9_)׿HrU'O'%ǜ_,;.u3#C.ihPƳ"=0L'͠*ZZČ.o3x\urȓP%ׂ4ٻ"j֦sߎa*%_itf_1P",ݦsjс)NR4'cGV4QgG"Vz9BœW>k|pkQWfƇ|k= g-q59dηF9Ȼ6=cpWSdyQZB@U8Ex|< |VH~}߰q|9 v.-Qآ!WEۼ똼3UG |)7tYT6۰Y+Ӛ9pn9/kdkJƌVLS4㼅5l7Z8)y+˅rP/}H_G"|B~,|b?Ǎ\;ƣй} a$rs8zJX*%u7{]\7cSK&MoF26R)N[Ё clո{i[3`kǴz"7K,a.G:pŞ>IB}1aޫ/r tG}RϬHh@*K(q$U)ߍ9W+U 3hs_ .5Ax%"-^J:p˦AnĐ!hjGהoA%QQ?)͐E&9)Y#D.sicN/@F뎘mWd2jlf!>6n7o v1n?,a= QaIs"6z)kE:X~̽Jo/}b-\zY:3 \`|o!yy}j kH%nË 3f;5gyԨԭ@QY d,~umkk%ϙm?N؟kJ%Kx_d C> P E~˳ ="@Br Fg ^T,.wVe=egqgX厮7@lr@):x<6RWc68oکchք:ʎ6YjYdoCTaf^R;H.$<5pr>-U?~7]>7kᬤw/ _aw/2?A?Ah,8I`IYDa}(ܡL:JsNεXxt~Z]^jj{{G;U r|5FQS`77t7tr3^dž"uٟD.?\y;\((20Bm_i䥩NQ;9n^AR.zm!|1TN?`f |)xW 6n*}Ua @#`%vrPձ6Qf2ՔP'a,q] #uJdN3SxݳNBW`w UhBRˢl.>1ZA[b?Ymw+nGqC@z\٤*Ƚ ɲTw.R0oy!>f**;AY8˧nҧ6YٶdŒ'yFτ!%юʧm0?Z׉sxR"JUܠge-ipDZog0ZSRKѨ'4O*?=ԫܒ~\ ) :sWIЎMRw"ME o7 kYw0 n_Dٙ*8Zed"X7ݴV=OGcsoT[ 1YU#iNu4.yjiS֕DEAl|uZgzmSۯVL?ꦴtc[<멵zJ\Dܝ$&((>~6~*=^[1CfAS$Gb)g;Ǘ.(+n^ޠ;|y 7*$lq/(UYGNJ6YwL淣;ΐa7a]vTR,-#\AIDZ=SAn_7ǚ }@zxAG|Q^8B܄? IW!!$vG͔xqo/-?֯z,sml4*?h=w.P<,\#u55PGwșܺR&h{<@ۻQVt9u{n6>= -$xm3lxgj/W10Wi3u:B)qlyBG]AhWC;vŜ 8JEScPSAM[jJtuO9PheTp  6 NMď+ʗpg<ˏoNjHFE w ito$!?v+\_m;0k:[;uBԔMxAm@'k7-ؖTa~ļ'VR,#isEs{ǤrYb-{f+T.2lJUȓʞ4W](+ufuiIXS b `->op!#-'-jM?ggqD꘏ kz7^+%Mh<׍x2o㨋THpKjRgA|wl:na7wڢ<[V x gE^;y^oKy}8G#ܩ8mS1σv<90/ TД(HNpTKFy}C6^>,ug|vec?^'-j GaCV8o Rѫixv!h2G; ohe(ge2%HLiUGe)gMo>O=?S'Ͷ7jg)7w:xw!pSxVEp&j;cqܽb*,׳+"N\1'?duApD|=X@xz$wx KdȲ؏OKdu-"cCbug$tb%q鸠nx@˧HqHύgwP_܂$ɐ0~->c4uH39a #3}P2ȑ]bꈢ%vspI{翓 u]0/ uBkPvѓµc'9Mm֌^S閕\f8UǖV2y:Q]U_W[p":-m}]u ]o?#Npo:9úzQ^#)оTE;\"KRg-}u5ip+Gܺ枫o=T+lBkBRU˯,\Yі6C[r/p:W2{BGm!ě( &pz A-~4.M5::hM# o;͑|(exS= _LOu|g5W$9[B_q)}^_ߓ8l?6+KKn c^ ~Ѻ/>!;3q|wM/?k{L"'n`gC~8K~Kq{KNIE|+q+[v1бBe gj,x:\D+nʽ:F eq]Az.WTjCP(a-3*k ~P[o"kyWfgQa) 8Ե) g ]_BYPv\_IVCsbwKF1iY")?񧮊NB3<^ ']Xc?+d]Eȯ+&,mFz?lT+uUi4hi뛵hmG_\H_]b.+8q*sN l^(f:9!!I,ij ޽y]3̏/| ?ga)9!:9>>x;g;}xv ;: z=U\Bg!c=v-sP^,KNH.i}԰ef2fLsbҘtWuSf%4yg>I濸:cPXb3F)Y3=kS+GL:J5fА]T~+qjm>i),64\PP^,.hSx%$UqgWŲ&qvjh-Ns5N/3ΊTQWQȦZ 0t %jZ\EFSeҝ* V9 *}aFFuJ2FM|dz.q*ܢDt's KlF+b\?P"c1t/T n6rrTPjA7QTۤixTrsrrssdTwleuKr5IآQEκU#LdWzn<>Ĩcȡ2 ,ʈXLZꋒ"]dZd.@YtcTlfÄ oaV}uivvrm2vi/͝ 6n=<(Ю!QBg=c=>51:njhG!{ 9mh{!Ѣ%./ h'Hօ}/߯4+ijm&)BJCoiZmnܿb㢣jhc7iC,Pl*UrKIVFr=6{ٚȰyE6p3n] EÊ)_Nɲ)}W[t:LY_V hd]*AV]jњi6eYANOd(_y+t4J g:>[CEEe-E7A;[u:v6hDi!z.I9B"#hV c}ɔ!lw uZ!y}zLh!V3!a.鑩UP&O1f⤷ lVMLФU.tUa{N|vIU/qM䥟ZvJB,uTO1P^R07둸d57SarN۽Tcq&;gkvvK߹oA#PH]+>*(?Kh0yiY b:;ѕ7zgBVRYn[Jf9/Lײ̎~hjLkGO2\eQwGO0%R(Fg z;Jv<݃V$; ;8vN-Ô܃`rؖחQt;ضmFKV<,SΛ^|~{2_ 9[,yjv<@+Tu *=5uʩ+0Sb HL6nʹYuvKjoIݰZm+aMe+tO濲$٣[glx77_a?C8~{589/'857_? _ WZ n@ߏ_qA.у?!I+ & 3."NL/s[Cr|-9Jp, ^|0x]! zYprW"^%E:expn$tz HzP\DAߟ{H!C~TL!2d 4=x%s"^ 7p|Wx w'_ qâ!zWnjk;,>1]ԅZ?]{/V{v>Jr}?^oүЛWo|W;_Do~Iz&}rނ?',ߟMz ztԠ4qзk*rBL_2>8ħWVp~41R%'ѫO6YT=62h7i26o6q NW]hQ*\w_oX$qrXe{ۛW𻠾5<1S ^Kωx9Oy~}wtI7 D_B|W|`|W;1(s_xq؆>m?vuEmQ ZmEր˂ld_"d" ?- Wk849/ׅЯ?*a4_kEJ7z>-E C\q0S]ťlLAբTV`>z{{']P7x۟V=zۛњ3g}YH*w'X^ M=xR$OHq.=q*^9"Ka`u ?_Cߝ:N'rP\ER NGn6>@5Tr6؄Ka#̘ -EC>|.i``9;a V^nS*sbc;o˭MK(ɴ-JUP7:yvs xHDr@ nG8)3q!~Kw&%1~&7}/.TE /ab1w9uXx]pGQ%&jdgdU,I T -Oj zciCnDwbCUq}eŤWdҒ O,͈MD+0\;]ߴta$jO" wTBW@gZH&˨^kk4G̯9׍p}zz=ſ3/zzU<% Q #CG@hfuӗN2tDF:L:H &{}ZVCGGۥ<5eDO#('iH ۙ+fjxZS{̏TJn:`2īz-TbRS11zjfbDgM$˥ǩ䣙 ;F[pC/²fg 9$[!uP{38}[ֳ»".4%[ȨQF*#tљ/uv#F-.;rD.UuOqy(5ܰ5ܷ`%,DTQ:~Ld+}וhD(V՚Gi>+#Mjlef4~}k%?,qgbfs!*r}܉ƗیexrGq\g| ݉/w$Sp9Csޖę7B~n;s_x/8ԱC M!~!1p_`p6l'jjZtb2M )#{i{;Ъ47U/4دU/so*[i!-wTF9Y8V@(#&aPAb,='zj&uK]o>3j]iGxe\Pj@F+nGnpsY3m$/8S_{+zS^|rŹԒ\\ܜgYlY4&gZP,klv } =f%IYg6g WT@ W/8xԭ 'N>qar%ep3L4 'q)cU)$9.li!yjiBtUJvI~A&&Rf {t:Y+V MajhB AfFɪmq*V,vW =BF yִ @h2(fTDS_Dv O닄fm1aBUYlHZkrKOҠ;3y7b\Y'l8ROuZPb'IzV*qS3q!\#  @Le#QzI}oHPyKt7+ҙ|o~ q#OmBj:[p!ϝ [T.;:=ZHe1IٍP)~a'wME NB6@y|_;Xp.{y"LDi+1P01ep2 ^ΛVSѿ#J\&*bX~+쫗6ypKf/=WA=F3 <'W\/3oi҂\'T_ԔX_И]Vqo3 P8 \7PЂԛrSW-'͙x0,t _7 3 f6/KIu8SS%6W=l-,9 s͸^X@3508)M:  sP|tH{zwJsR/١y =F'B(k6:g2*%N}<p֕eILcp7~Gj lVU*Xۛmm[ۚ mތan(|};Ɏ&{4f5P׳l.`iO*~)X J] qs@ZXZhȋ ҉McM)Ug]99 eMv;3j-迕}j1>W+TCѲЙU{?3{%O6һ q Fu&:W:P)%Yv#r'woSGH] |յͷ̾/$gf23Idf/d%$!h@lT"h TO'vkyU+ Z{dhe={wƏg9yY$2'ڋ:ZpANYtRo,kee .o˳d[zzv0Z8mzg2q6;dEսɎ<$GN}D1 VR"BѣE54`b#Gj>-kN2=q-^nili)\Y6-( pYrJ|rYrdj̗QB 4s)0AL,l{c!gN(8'0s7@6TfI?1W45 nRG&~Kn'oq?y`znaƋ* ɃWa1ٴ2¹f#=ьtyu& JdDt^[Tv/JNjL_$~<)?U7Qhuhƻ*r|0Ne0(D 2$ ee#8:;U-+ t&ˏ"3sB,zELdeۇT y Lj@Qv ==/̛iOH6 Ze9GTTO#\.rxzo3L.g2[Nlf-t76XR~E,gCHlXfZ] S$`^.G%?0,zngN7ЩZ\a,@Y%eV́/`_yںֹ=:fH^'`ՙ7uD!Fwsi[F tyO#'Q X)nnh|?csfESgkh@tGBGH '{أ'w2Tfhǔ0"K~C >7ldD)'9B{a{wpc`\43~Է7.>+pΔ3W_}ӊq~L@="mwo 4:;vz < \c8 (( єh2Q()W\\&ٖMBJ@^YbfKQ!۝L$JdF8Y(DYJ\e1J)'W]Z,ט'x4}YJrFXXվ̦B)1ôHA=}fv֬"XiWgT2y´`dF k MxBbΨ.'ֻ:ϻ&Xm )nvM^f/;<}o zҊi~=lO!-@-`(7`N7vB3R,)e>GK3H2'ؙb5Ŗ+v+{M҂J/Vi)4 1_-lOs IN6kb9mu,ԅP3(rD.y3b8Hx¶-ԑǓzqT.{2,Sx~҇@qp3v8@""ٹa V׼B[r[xQO*:#&"b8Ύᕘ9bÄTߩT0JhgtMacjPhM OK %S.aѸ rBRH#1%`9F!]!S)ٿB*5ByJo䃪su:~vBRY8&7O"< b: 3)~G'~2{t{*hisl mV1NvGW>ݤT7ǤNRHv}!rP݂_$ #(Gd183/%؃I mtފ_@g6ǩgx + ťqVd[J?Y`Ȝ+YݒUzhE}DbM{-r![qyVAy/rVLg} e ОP 99|]=yt0P8^m!Yϯ uziu>l𜥥m:xD#b ,Y`4 ILOOɹcmi^OIaU{V:4mjߟW4sǙF~B;oM@hCJ*J}jEA`-O_ºȁ8r wh,㘀17W Vł^2DAB.sk]+K[rTzqvٙwX?xóC_{Xl0{;fUI]/nZ*9ِw-^~xGw}]N<=mE莊ӛegiTu><5kڵ0T륲l{}=a _~!zo+Zh TAnUdYs+Ӵ%QN{ldM7f~"7H!Wv[:Z=59?@OfFښE3: E;Յxx|k' Kv64oi7>B>6O ؎}u9d)ul+jGmwdCt '?vX?8qЮ7#. ,g HtʬEw5fdXo߳Ǐo{cjg~zminع\ʲ3n_ 0: ޑ:VY/7Z# 3Gx mY{"vAdО>Ŀ)Qz9'M]V6Y \nh+t}%D&)i/wd R62"QAB)x|V $Ҍ.;&iA}J* +WQ)]|gg2|Vm+:{!˅s1],cϞdt!b4Խkh -8ꨱ_H9șd ?,)!*XظI5rwv.>o?]y;j+ڋsyR9ET2zJdH--Y]nWvqyr&ƚggOfzy ٟ\Ύ.]e~ux)LϿw I20U?L,\4I 4^XT4ѸlBZ=E!=|z5>`W-jTdwn@$/J%VIHdb}K%b[w19=o-\R"ߺªĆ*uQ^hT Ϛl +-2v|g*{:M T<^b_hc х*V CZMhdMDXʮx1^ ]h٫{wlU +Em`GmL2NO]xWKXQ_]SdWj5y/}T/ )UU(v{eDs+  %A>w`3w1QB}9B,ybmJwFb:NnOU $݌".V6|+Oc@N'ZB>c^M HRD% tڋHɻ,K$z5e.֥'%jmV84: +I^: 5IEWCfYDGՉ%ӕlUvҩw#x~6n?+rׄ-p/חۂz*F*[?@!&f<~_eH3hra.s;OAgERV[g+Ȳ2h4 _1W"'砿C(?~aD8TIą>),bK'G<=N.Q&ɓ6.{NpXJ M4%bKr/l=5vb?_ 6/smb< _ĺX\k">KLǷP l~$LH޵wn;ݱΣKT1~f]ݕ 8`\*32ǣE}uvFZ }rǗ{R> zE|j{/Q,׫8$K-pW{"ŕCq2Oӥض٣P_c(cF7~-7OM`w|`l)Fc xĽC[KrS"*{h&CfkߤgQD/\S`<_8ER7=y kΠǀ@=&F&F z,Z4Gl 5"GR 64 rrMC:7ڣGz8\9YxjּpOh@] ïn呑Kj% ᶍ/>-lХOn'IiiI>!obmFh7='8fӳqv햮`kK=sv;|cy]݅K̯z/YQѕɭdJ_<y? Dm xc`d``/k߯r2EykxݚyxU5ǿ$ "e,TZ-PEBi -Eq.U(CEeFGEP(Vee ¸"=MNn\u>y$''7y&ye4:?8:{rGqڵ bTkⳍ(t~dv<ahtsA\@?BE (O0c:m>H܃9tv^ Kh"O;)HE-GvD גyQ-a$۔_@\=Bs9×0|5H=4a5p4|XoW@#k ߵFH*@,&[PNXqk{NnNWe 31}r< kfb)D4Y:`oCWtAgbȝuF!6p#&p%XHڈO)HT1&(PfG#ƞvCtfEWk .{#ڞ,+ VK;sd*cg}- /A=bEN"jK1\HXqe&m<$L$l"Y_cҔ' w$)r PTcBwƱ R0-wJ}|,Q.20B,Ah1w+(wF#&)a8rGZL,r^FZweưE:r7mp@s}#шdR?Ωj n+ s1ӜD:e_F@@g3Iq1;λd=zo|/X7 +w b']h>YL\Tr\fɫH&lw؃2{[?'[``jP`mUvTZ0sً2QsZP\`wDry'H~FQa zʽ Jcxy/$C:I#{晭as dz2 r7ĭ ·uv}0䏔hDYLxґ$0=]`;L.:d9 +8b Lc`Cryd2KxRg}І:&S^Gߛ!=ztSd )$t[+1L#чL%ɕ=&#h2d\2Cae/eN!IƔ4RͶ㼉\G*1$Dl &ϳ r; S市c~\9=\ΏN\I8yRgO#9~L$*(s'8!;N&/ާNW5r1 ϵr99O~.E9r.>EqĪ0{Lc(G9r=haWyGNpX=/muޓ!吏bH`UN_.kIT$jوcL axp;:T܍lgDtR1v/9or$+h3Do料JZD'ݜ+P]WGvxc*o߮'r:?z^ |Ѻ8vSe|ME.ۿ='%vvڐԽ̗D<[nhQ=3͹.RqK5]Wq}|ONّ]ב+qhrGq'X*|Xf,פ1ط{~>g|Mԁw"ξ^ eh&"هhͱ5gG!Aӆ\FNGlI VXqxܒe'#moLj Y$YW{{t|m{h; 'z<շsYjk#MkK{kdcʹQc-g?5Ѧn-$Rlw@"5mmج\ r ݇}F+){8#U;eC/S?݋hWIޗ^0-X'wr| )a/sk)^u2o3Dve/=^ #)+>X*ngD7ǹ{mi_+R=BXĵo%D+{/j!!l}?:PvJ֝J}R)7?Z`};#Uu {+)ױ"<;rໝpyċ1;6Qk."A_A7ǩ:feEw~rV<{~I"kԺO4eUM{Ԝ< P3O!Qd Jvip/UYI{9h5Vgzs3׃Qc|~Ë얹>.}&?Ug _sw"Zڍ9hWn=![qOLQRgj^0>Uy9҉il"{661rs7^^Xe/Hل1owe)Ol/ID!l1͵T%Vڝ8iR6g*ۂmnJ1es\;ydfRx*vɟ˕( B23dy2Uwֈ as2p*5#/^{9p.~?wVaOy5g.Eŵi qɤa<{aެixΏi Yxe2ǽv2.)O{{Lza~^̋kKHQI+O%1!V8/Zݭk ;3!Vp T~9{_Jb=9U|oۯv`x8ep9yRTl[~|v 3է#_!iu mQ>gBM}(3j'^!o0K'{s?|2FW䗗Ag䠟Hཁw SRwd/#sO^rw~+W?4BSE68K u(&HP`&-m?K>j~^}@ժ~rηje|^mо2}e>3ޫ@+TY1d_K(Xw]4e$︟sy_t%=yY#3S~wXNkYdE3F1S.w{?}~uHӾFh:5~GAىXvt U8Ǹw2_! qN'J3^~2_әwg~6 _4Ά "STX[߫󡾻;ツZȷ|w\luCRZgZCBS=Qg+g}03BwDM +) 7zww7h?8NPcvcq;r!`#_L9ǙWΚHb%lw.SLE-ߚW5 )SB۫-}o0mWC}ؔ_[;}uƏ- )5*/0wsd5כu(G)M8w\jMEOBuCQJaar%x^Qʯ(C:(i"i+?#u֮PFwDd?6GӘPdڦ>IJpɧQ>JO*QjR](`e(p/u Y*eR(5*DQ}TGaR܃Q 2oxh*Q>#S~g0 |$I=W<" {tE{n/n^h7HCi= sMhX{_ul~uvNWt7V2Rx$yee}BwssqQ*F[@PPFٰ\lx(`7[MゥSqDpGMN0(n_ba(mc|?k]^k=kWkk GF###xl8Ƒ {|5~&7ی1w|+x/#? 3rȆ-'|!/GΌ9#?g _1|^p'7 ;_}U1#'_ǿ^>|~pjs g_C+5> JJJJJJJJJJJJJJJJJJJJJJJJJJJ *vb' *vBTslk;U섨XN9AMNP&O :Op'\ y!x2[4xEđ+'«|=Amq!O pzX _3r迧3>>p]<ޔγ0N=7tO vF_Oߚ#7cor-Gt}6*OMZ?-]z[nNr໇/ g|}ޏn(~ ?[?şs'_o.2j/a۱TmKIm˶WpO<>9e\~G~(x2FG~&gYwaJHȴ}&F#߀)xXyZRk!!i;exdHھ_}2d\ːq2.C#C>J|-«|߂)Ⴔǧ:ou~nS')xp#⇆'?l18~?/x ފ_HX牷to;Xik;mk;m?û縈k;^ ´ 7c =yeK#ea{Xea{XelQuGUwTQuGUwTQ G5pTQ G5pTQ Gu)ۥl]v)ۥl]v)sTQ=GsTQ=GsԌ+q3pθW8 g\+^OkaX9޿s_sHΑC;Guxf0'~/>oދ_02;GZwNOݑ3K O >?~at?+΍Ho$~ʧ/$n^;{NN=x kx^s,|%^_,[J/\FZ#ym䍉NI,xOs{s6<|8 /r;KJض_:;|T#/3ᣃ4xQRy[ ,Kx)^}x9O|5^J|-nxn-OkfN5|v0:F)9[Ǿ|']Z߅7n|߇׏?d(~ ?OtNxi# ?G|pS?YFO'4<2gbOSni3O ܾ3{oN|$egp'7܍| l0moqtl [:{>Hwm?ćҽl_tmç wycƗҝn\Gٸiwqôid) iMoiMt[:ۦ}M/u^#~yG6]h"^OHۛqM>U>9#l_(xS-_6rG:v˷Gl,l=ߤ+z=O龶{Ry?ÓݑU-6~/]?k8>1ŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1ͧ_>pjO#8|31ߤP3ٴ!mo:`g\Hp|0-Qamd=_c=U<8|Rb=*q=iĸߥ=b;-ql_?\qmvRx~GP⶯?tsqGxwG7 >#xp{ھteL{n~7qsҞq'i|j}#Mo6%?b+0U?V_G~g37͂ӣggF=c?k8g~)[7۾WlFwGn 3rqΧgF4#jr莨ɩTjCMv5١&;&g$j#jjCMv5١&;dPjCMv5١&;dPjCMvɎI\Ci"1+⥣LѳG"R.܉ O N<}{5^+9yqs\9yus\9yus缨9TTd|LnbTç#q_vγyv;nO:r{g =r#G?g/-=x[ No 5274r۞*IYϢRo{h-ƟnO=vuǺcnX{=vuǺcnX{=vu'Tx^5^5^5^5^5^5^5^5^5^5EQϛFF࿏^k9݉}.e>2<0rR#') 75qߧ-F|7ߋCa~?O'Si ~?/x ފ_Φ:k|oؓ1|^p'7 ;1}78 OpN-x&;Kg_o7C .I^4}{!MgH^5홾\% [pIBi†KҷNL^ހ7ҷ3~ ~hxrö?Ïgsyތ% I^ގwզo/o1zw=A(uIB ^ wq'}{!x/އHC8LO^nMዃH{o/ , V/p^+5W*7-8IBp|;ߙ\J\ yaxaod<O3/$/$;KCᅴ}Ҟc;8*yoGʏOcǶ+?3V~bZVXi18~?/x ފ_HXto1ӞO?n9.OTX0]C 7cZcǞ L+VXiU/W+܏Wkux^Lk~ضzN+x|szG7; gb9Xb_6m`{f?hf?hf?hf?hf?hf?hf?hf?hf?hf?hfO! >7w]!sḺ{xbza9Xb<~=~=~=~=~=~Mmo6x۴ ަm6miMtTQMG5tTQMG5tDzOLo50K.>8ۇ'nw]|X`]{ó6 ab9Xbq3tƝθw:Ng;qoMor}xΆ7MnX`]ߑuӻ` 3̱ҷD=]["["fc%Vxul`[v::::::::::7RFHs#un΍Թ:7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7u=#[_pxRpsӃwgxnm})x/7|YYQ lHtO⧌|_WIzVq_ھ_ ^NIYx*\<ijp]x6y ||_jm2|9^5|]Ҷxx߈Mf| :6Զ Lnka;N4,<.[mv|.mF|7ߋ!0~?Ï?')4~&xKz1<9(|5::6ݖζx>KEe_Mھȱc6+_'7?{p^1|rt[>^=NFHn<|^[^F M߮$뿧[xGkWH[}o1f3(|[n `'|>㪎XG{Sç/gn}g:$#'Lu~:?bΏ/ vz [:[z]P3k|- > I1 ',G.>Sᑴ4|:>|N2rqo۱tK|(]Ck|k;}x{紽*s=WO ]Xina4#6Yb=M998nKg>}^ _fsھQcfWXɡvۨ L+X/#[#σH츋X1cĿbX ޞcMFcM&~]M~?jj%M+yS+}&[7۾WlFwGn 3rצV^Mpf:qt<8Oy:qty6?'}%wyÓǧO >:>=;Hq/_>'0|柧 {Ý #IL܏t+@~)xz% 柧_F 0 ,/#3_F 6-lcKL8ޛ'P~|0&***************************q>}ta3s}ΰ9ӧgL3}zOY>=˧gtOwtOwtOwtOwtOwO]ۅ7 ' <OS-x1x4 /bok<Zopデ;<%Ù˂ss\~5`Ot8LkKOߚfI{n>z˅_}үn0kp-T :1b]n77 {{EM~ ~?0bcq>k x3ނ6<3bۃ+k.~~5t7?p/?4ǣ)lçx>}x?>M|7IÝM7 ӯǗ|) erkx1fi _ ' eZ!_+U/OO_ k_g?^Ux5^o7[:O] _=IA.H|;߉| 3ގwWN~o7[m~b<?şs'DoӯqWӯJ߽ .^U\K_  ~uKMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMrүgS~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM*֤bM*֤bM*֤bM*֤bM*֤bM*֤bM*֤bM*֤bM*֤bM*^4 \4X=|F_ 7͞gE# 墍I#?tO⧌yWӞ[%mo=+moKۗk:|51q),<5˶b^FnTmg9龶{Ѷ]m;9xcsF7|Eb|}KO >3xyFj _>UrN:g .p qgqߊo÷;wImF|7ߋ!0~?Ï?')4~& 8} +(|.N `'q[Xy>]|poφbO- w.N d\t[XP-aM:sVroaUoaW-]-qôM#[X74WV8nKgK 4r--~yd[Xu1fOe.N >ӷ\boal䎴OVG|q֖ӷ]oaǿb-i<} +U-6~?1} +[X[2dtN2If:L'$3dtN2If:L'$3dtN2If:L'$3dt2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!sy\03^#i{'>?2B\ֶ\_ֿKxxߘtm۞rgy><3\g9vXo;9xFwEbg{Iն=x^5>Uf]۶w x#߃A~?ŏI~?xB OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|֓$'i=IIZOz֓$'i=II*ORyʓT$'MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|3 gh=CZz3 gh=CZPy3T gG9Q|s(>G9Q|sh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzs<e`Ot{_!wf {e}++Y-kd|||R>%gs0].zEwѻ].zEwѻ].z:rgxS=e}>(jY#ke)|F>+χqzqzqzqzqz______________________ _ snֵP>Pz{dN^I|Z>#üNNκκκκκκu^gu^yz}^q^gu^gu^gu^gu>zG}>zG}>zG~z?O~z?O~z?+#+Y)jY#ke][ xo2e{ˀ-[ xo2e{ˀ-[ xo2e>HA }>HA }>HC!}>DчC!}>DчC!}>DӇa0}>LӇa0}>LӇa}>BG#}>BG#}>BGQ(}>JGQ(}>JGQ(}>Fc1}>Fc1}>Fcq8}>Nq8}>Nq8}>NO' }>AO' }>AO' }>IO'I$}>IO'I$}>IO'S)}>EOѧS)}>EOѧS)}>EOӧi4}>MOӧi4}>MOӧi }>Cg3 }>Cg3 }>CgY,}>KgY,}>KgY,}>Gs9}>Gs9}>Gsy<}>Oy<}>Oy<}>O/ }@_/ }@_/ }H_/E"}H_/E"}H_/K%}D_/їK%}D_/їK%}D_/ӗe2}L_/ӗe2}L_/ӗe }B_W+ }B_W+ }B_WU*}J_WU*}J_WU*}F_k5}F_k5}F_k𺫛3sGe#euǷZa2jY)jY#keZ^kzZkZAk Z6hmڠA+K+K+K+K+K+K+K+K+KkFZ6jmڨQk&MZ6imڤIk&.p;̇\wì2aV=ZZY'/F|J>-anoooooooooooooooooooos9z=Cϡs9z=Cϡs9z}}}}}}}}}}}}}}}}}}}}}=Kϥs\z.=Kϥs\z.=Kϥsu;ur5Vօ֣Zj=֣Zj=.]ZviڥKk.ǴzL1ǴzL1Ǵvkڭ[knZvk幋=Oϧ|z>=Oϧ|z^@/ z^@/ z^@/ Bz!^H/ Bz!^H/ Bz!^D/ыE"z^D/ыE"z^D/ыEbz1^L/Ӌbz1^L/Ӌbz1^L/K%z ^B/K%z ^B/K%z ^J/KRz)^J/KRz)^J/Ke2z^F/e2z^F/e2z^F/rz9^N/rz9^N/rz^AW+ z^AW+ z^AW+Jz%^IW+Jz%^IW+Jz%'ԷC̼o˞P>Pz{dN^I|Z>#ìWѫU*z^EWѫU*z^EWѫU*z5^MWӫjz5^MWӫjz5^MWk5z ^Ck5z ^Ck5z ^KkZz-^KkZz-^Kk:z^Gu:z^Gu:z^Gzz=^Ozz=^Ozz=$$$$$$$$$$$$$$$$$$$$$444444444444444444444 ,,,,,,,,,,,,,,,,,,,,,<<<<<<<<<<<<<<<<<<<<<@o7 z@o7 z@o7߲ sܙٵB[vaG]r5V >Q>)Og9|Fz#Ho7Fz#Ho7Fz#HB?3[QGPr5V >Q>)Og9|M&zDo7ћM&zDo7ћM&zDo7ӛfz3Lo7ӛfz3Lo7ӛfz Bo[-z Bo[-z Bo[Vz+Jo[Vz+Jo[Vz+Fom6zFom6zFomvz;Novz;Novz;Now;zAw;zAw;zIw;Nz'Iw;Nz'Iw;/ ~h'/ ~h'/ƋZ/j֋Z/j֋Z/iKZ/iKZ/i]ԺuQEZ.j]ԺuI%KZ.i]ҺuYeZ.k]ֺuY+ZWh]ѺuEV&ya+JGVY+|Ye^zYe^zY5kZ״i]ӺuMuZ׵k]׺u]u^^^^^^^^^>>>>>>>>>Z7nhкuC Z7njԺuSMZ7^zEW^zEW^ѺuK-[ZniҺ֫Zj֫ZjkZikZikZnkֺu[mZhѺuG;ZwhZkZk555555555555555555555555555555555555555555555555555555ðU(Vr5Vօ9555555555555555555555555555555555555555555555555555555{ʜ)s2{ʜ)s2{ʼּּּּּּּּV:l凹#ʰe#eua֛Zoj֛Zoj[Zoi[Zoi={ZiӺuO=z[mz[mzGwzGwމZZ5am2~C32yA|;C/zKG|/+^_jfw_;K}ؓG/ݙOx(OOf>2ayaCa>[ւ\Kr9V\kג^XD-+_ 3%әoE_i=;04g_}^o\wa|0 1rSdmW}Of ,-~Me^gvYu?#d~1̪G lIǢ ?_G2Zw2w3f'7;omldIs6DG2!2e<f_ʾ`My˓WmyG.gG 3[ᬺ-x'wOP8G¯+uxld3*M?2^ev/g7D#llllllllllllll=l=l=l=l=l=l=l=l=NT=NT=NTq';IINwĝ$$q';IINwĝ$$q';IINwvTa+SτPv=<[;}~$Q4Qf{i?# w6 ;[w3a(z<'~%l#ѩ¯SJ;W >U¬{dN^I|Z>#ÜzҺx׍u7Һ0<]_7<;aNsvhs6?a /Fԃy=uυCXDZb|K$/+K/_ɿ#"*V{5u 2ߒC~[~OOeW[Kl-׵MfLf0$$a& 3IILf0$$a& 3IILf0$$a& 3IILf0$$a& 3IILf0$$a& 3IILf0$$a&I3IILf4$$i&I3IILf4$$i&I3IILf4$$i&I3IILf4$$i&I3IILf4$$i&I3IILf4$e&)3IILRf2$e&)3IILRf2$e&)3IILRf2$e&)3IILRf2$e&)3IILRf2$e&)3IILRf6$m&i3IILf6$m&i3IILf6$m&i3IILf6$m&i3IILf6$m&i3IILf6$m&i3IG3y0/ 1̇dfwy(;aD=7 ݿh0f69T#a? \̔y),"ktOg9o_/&,[dL6.;d|!/'E(/KeWȯȯʿ'^~M~]~CfE`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{!'aFكO#euaֺu[mZnkE?A7lxwt5w`k H" $* IwHh"MШJOTTr<p}q}֚kιoFXaA)AZ"Kx[;=Z,jℸwmĞ +J ܽ?I냠byЮ νg>7b<8P 2?|. H (zDU b>0Q׃dN<U=Uի*'xJS@zj_6*D["p%1=v_5^)~&P✬6N )撒lSi*]6a9rGx$#{_G;h8cpc.i?jl.qOxyN0 M{0l&;I$8̃xSVT0NOS3M4Nt;6CL1יjf3̤&͢wpo6lZg;[jfc2t=yc '9~U?yr[{/x{oE/K祸-KpY뛴,-:RnwgݫG&/3ɤ+L24L45Z{uz;ow~,}+ ,5 ,ѻG{ϗխ^Oz!.> ]8~Lz|l/?q=dzړO}~-}o~0˃vWyrtX8}sڏ(1ui9 ';IO~2\s!\raɣK{%_;iu;4Ӵ 9?k?{Y|e_kz꿱[t;`ësr|sz[ھ?ws~y_ .ϫqp_G"vӞ_2Kܟ^eE߿ßq;_+sîz_U]`?aP{óM_~é_R9a^c|@={0Wc]曈`s.b~C侦P$CP%y{.a0p9#HG6h{8F1GP/o}zJ+͕0Wv~5_W4L<25sXgomߦ<3Y|xٻ{ώ{uSg߄6xw8f7bV[pzmgm<˵_pr=ug6y|΃gD?O|g<;KY8_ku߸S9Goiֽy}w/|G/zKv/'{r0~g?{_y:7+yE+]+\s]UyWyv֫rkw5n';~ oa&7`冺f}֛v/~ߒ [-ś[jow +h8އ/Jꢮh#z D !?B~ q!Psv;`ݑ#a]w w[~'. w)DE &{D} _p -$ |/-%bO}s q%?0#?ICt>$?2ZO \t~.\KUyQFbY["["H*AwC(Eq+ʧ E(EZ+zD( GwxEgϣD'h.f~jA)b+Ƴbm%ijK/#>#4©t>Kޕ|~q)O[y*] Kx+򲢳|ȻxUݕ8/+2_'=*U͠*}CWùW><3fLgt~Nsz? /^Ջ=cuͻ,# 7Ĺ71/?Mnλ|knVaׂ7-G z[kw}+[9oEO+ӚwյqvixGc=%N:Չ`w̤N;p< cyph5`ϣՌ{c-NU;f>Xo8a>4?2Lm j&y4)Ny :TL9`LwM9r }fșafr&f;S*rfχ;|^\Xyq}0PBz  v᷈d=_"-g/":b<ۓpb^,VXb=^/u{f /m{K.OKq\r]*wܥrjo /s[fO&o9,lӱ\rzRY WB|Zv>+`JVJVRJwr-U42UW9_şհWӲW.\t6G™2e(=_&ΙxQFk`{k^Z ֪_KZ{VZykX:9܉u9_:<.?y6_,Y`g΂6K|[3>3o;rdɖ-'Lmo6ء zl;ac6wjxyn4F6F7r]j>7۩~loWݳj7,3͛{>l=Bwc >[قV\ k+8VX[am 6X`m 6X`mdtm]v|;N9;hAw^;v9К/r3f90w s'̝0w s'̝0w C>~h>r>2#wѷ>ûpE.v.se>?>俇w7ݭ~ݼ=b}kck߽wk?SwSwd>{}x>wg~~=8 r9HA{wPA\rLL!yvCx^;a?0އq:a>s>7ssܾ0/0/ 9G:\rD(Gq=Ώs c>c~ c8.:n}'N'p: {|ߓ>'ݑIw:eNُSv;SO΅ ;v.\XraʅǏ<~ʣ/<ˣ//ӗ}:mNis>uOg=_ Nw9x[=[y<Λyxq~_'%|?e.{~˞__4YJo<q+\a>a>WqJUUso5 [pM5:~iNGΟ8 nooM{xڿ{2[fp [8J "H✸D z?G"Ztk.'~ ""E ~ *(Gpo{k6q>wD*q;Ğ NgwƈbqW p p[ݝ#NA=08DQF bIQB8¡P¾>ߛVgŕ !!DDIG$%H"/Ư0~+[<*£"YD}Q5EDRknQEUbtñ]Y\}q+nv |SY |J.ġ ~;o༁5 4 po !^ qoOC|hOC|N#|Fz5§>4טa4Xư;o̷hFS3 459MmNSs[x-wKҝj鎴-ݑHK:ZђVt­V4򷣕Vyk筝vt ]m=moVmi[Ԗ4-MmB[nkvé^^:O:j:ґXrcq;VX=by{,c8q,N83ۉם=g;{Y]g;Ostǵ?z<۞z^;ԋ%7^Qo|zG}#-}`c_}}aSlUKߗ~Ixesx +fW{ǯ{?H}O,Qn"f&D u0_bFCw:I y(Cj(l7y7K73 0nW2ܳx0ޏT3H~QhF=1|4qc8wcr&{4 xLy9ωON6xO:} w*pƗiMt^N g4=SLffogsY-w޳NGy.2ɰgЛ tgw9͡m.^ͥw.v`G<{5r;χr]` hZ>s:1 P`wxWn)Y14x"!p"MG<Ѳe DAc;;؞qwώ[ CrACnR $ ڭ߯Y2~ګX | {l.'Q^cߣDy=,l"ʛq;2k(D!e?d߯Q~~2mAm|}c6ͿDy=:Vl]Fy ?Ey ŪGy{olѯ~(GG;WM=*/+Sd8Rjtbl~pb|2o ~ _i?bIo^Ar .V0GOONR,ƐZ/ފLN `ru ͳLM+lf҂g+_>-t * ]˱H%RϤSy*ޔ%ȥK;"։?غE2/%wt *W@=@q*7 @uRH+Z^U92Vy0~ƕ0θ4;-R %L|"%LZY sU TޭZCs(ש+IpN_[S >^}i!Ե@jj*LK[(%,/-M5 m2Gd~0yULi)'kc&WNU8iTx+ > 94ygtyk>7V"X  4zr^UquǚXkn 9KsZ5qcxt0<Ṟ'$o%QVyuD s~CT 7"1\=m-BZ5~~i3^a3cZS&)tC ` ꦼ}9s%{ ٌYX g,e{yl~lfXj&X28` 7Ǯ𮘄L';WK?O]18z[s*Igg LmqO"_xL݈xwD}J+MU6`YSid zÚt顭',) Rw[m2-6XǙv_O&th:nκxpM"%UE>,"НvJKHܽ: N <rh>8)6R6nen8{RʨO:.>/~u3m?[EV-z)`5uCt⢖~t=64CY:̖]_s 7U"sloiNS_O(WMO"vө7_at+5[9?l>`gS;D ?VocecGZVϿI ayO3OAqۭnx|&4Άq5,boG3  oG3xm\6Ӷ-$efvͻ=MRnKr]{K23333333333ÿҾJ_'FC9+:[9_㸞C],,Lpr>sv˜] ℮DqεN|$NdNJ*tsS8pGܙܙYϝYl\ν<|B"bR2r} J:nY YύWYM ͝ݪss󵳙3ӭ+;8[kku6gKh6ζvYnvqusw7p7t7r7v7q7u7sǸ[[[[۸ۺ۹ۻcs^u;.5ws;v{7ܝ^w;o;Sܝwr]ܩn^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[uuvfrtpfqpnvnqntnrtrvq.s.wfu::k83;;78 'pF8;k:;;8#C(9Y9}99}9}΁AG'w?u?s?wptrvquswptrvquswptrv<89;s8s:s9s;:{c{S^FzYYټٽ99yy;Q7ηέ1%B" ΉI΅BΩΙEim"ޢbޒR2޲r ފJ^ ȋK˽WVVVVV^kz^Zhoo]o=o}ooCo#ocooSo3o7y ^7ћu{=ގN^7)ހ7 y.ToWo7owooOo/oooo_o?o@ `P0pH(hX8xD$dT4t L,l\<|B"bR2r J*jZ:zF&fV6vN.n^>~A!aQ1q I)biY9yE%eU5u M-m]=}C#cS3s K+k[;{G'gW7wO/oxJDHH@FdLf!d2'M!d Y,L!d $Y,M!˒d"YTHH"$#9YBV%dMR' $ %YMFuȺd=>ـlH6"MȦd32lN [d-َlOƒH'GƓ L$H7!;H/LH?Bv&d a Jv%dOٛC%@r9B%Hr9C%Ǒ Dr9BN%Lr9C%Br\B.%Jr\C%ב FrBn%NrC%Ay%K|C%ߑGB~%OCRJ) SI :3љ,tV:Asѹ^H/K2z9^IWk:z=Ho7[6z;Iw{>z?}>HG1gCgg>w.pw~ps~r~t~vw')4}>K%2}J_7-6}Kߣ#1~J?/+5~K'3J?/79e#28g)l$fb3Yجl66;bsyؼl>6?[-b Eآl18[-ɖbKeزl9<[Vb,a)XΪVfUjlu[Y5Y+Xbkl.[6`l)یa-ؖl+5ۆm˶c۳lƱlb$z؎l'&>ϦdCl¦]nlwۓf}~lv;fCapv;Ŏfǰcqxv;NfSitv;fsy|v].fKerv]Ůfװkuzvnf[mvvf{}~{=fGcq{=Şfϰgsy{^fWku{fw{}}>fOgs}žf߰ow{~f_owf)=N8s.%W<#H>gYl|v>y||~_/Eb|q_/ŗer|y_+<ySWyW| &o^:|]_o7&|S7[-V|k ߖoǷc'INO}O;>ȇ0߅O|'ߋ~ ?~$?͏~"?O ~&?~!_/ ~%_ͯ~#o~' ? $?͟"_ &!? %Ϳ#'p' .Jb)Fb1M.sb1O/ bXL,.KbXN,/V+DE"HD*2*bUX]!uM! QbXG+ Ćb#Dl*6cb Jl-ۊbAtqb D1ItIɢO)bg1 ǜGqbH ;.bU&v{=^boW'A`q8T&G#Qhq8V''Idq8U&Ng3Ylq8W' EbqT\&.W+U_jqV\'7MfqU&nw;'.Qq[#AxX<"IxZ<#ω ExY"^Mx[#9CX|">KZ|#߉GY"~O[;{3ΓS>q| G33ssss KKKK+++?#??3?~_ٙt^pusq&~Zh]=}C#cS3? ~?џw=N~?)?.TW7CwO/o_?@ `P0peE%???????????????????????߿пȿؿĿԿ¿ܹÿ¿ҿʿڿƿֿο޿ѿɿٿſտͿݿÿؿ˿ۿǿ׿qvr&;N____:;;S;gG:ҕ$J&җR*r%g3Yr69C)syr>9\M.( Er1\B.)Ker9\A(WH2d.ΰ3"kT\E*W5䚲.);d!K\[uzr}Pn$7Mfr\n![ɭ6r[^;N9Nwvd('n#w;9;9{8{9{^9Y~9E,r9U*w=r/G+ y*')|O>+%|E*_7-|G+ߓ#D~*?/+F~+;_'E*?/D9U"*WR)jfR3YԬj65CͩRsyԼj>5Z@-R EԢj1Z9G-RKeԲj9ZAVRH*QTVVUjjuZSUC5U*TRkjZO6PjLQ-Ԗj+FmS۫jթƩjR$խzԎj'ի&>կՀTCjX]njwSV}~ju:PVCSapu:RVǨcqxu:QNVSitu:SVsy|uP].VKeruR]VרkuzuQݤnV[mvuSݥV{}~zP=VGcqzR=VϨgsyzQ^VWkuzSVw{}P}>VOgsR}Vߨow{Q~V_owSVN^@" F#QL,l\<|B"bR2r JA%($H,ȃjP VV V V V A#hAZ````````````LyEeUuMm]}06!  AW01t=NAo09 )@0 .```````````1SiI}]; :_o|@)&1܉c+iH.>@V3ӕL;QHu颪Z+ n]5GuQrR(UR(UR(U~U_ժiktZt?ѡVCu.Z] c]5u"h%.]thTlzTc#tgJ^jL#eI~iL#& k̇fP?9^[7'975|G9{*؋dEC=tsA7]|UA/@AEQt!"Ȥ{%^ "Ȩ2*j YAVEcdVT}ȮsdXT=ȲzؓdZAEmjTnAEuC'TC@J `XM@ A/B A/B A/B A-kZ#Џ@?#Џ@?#Ѝ@7t#Ѝ@7tcЍA7tcЍA7A?cЏA?O@?tM~ՑONvR3E;)S/ N~䨗^Q?Gh5jO k_G?__T:گ~tSW=WtX7@ o~6@"@tz'jTZUUX z4  IDKMDKMH@@HH_ZW, fڋE?6iS;U6lcǠw0& 7haN$;awI[ϥZ˰Yz+Jz'Ij+ lz%>IGIa#'_84,57$M3O&X`u ')AlIz#0b IƇ0zrJ@W_{aeyBpqwhf< H Q~l/NS?z-sgS.PjԄ΁֋bkl5փaajkazixjZN֪f5Å5X35kfffpkfpkM22elĔ)3S榬 G#pdf#2B\3Ȍ. ndp#F72 nlpc957WBɜ[I[\{X(|ɟM_;5}IM_Rӗ%5}I8=BOyk3Ӂ<2BfZ0<ef&2C(7ع nnpsGQ5FEUk.ܪ5 E"qp\d8.2 E"qQF{'1}k\V˒ O 2Ê1z`g6k/89U8'581581[a0al06L& Ɔ cÄa0al0T3i%ZpZ>v"E*m+^RY}۷iA|o{;޶aC0|#R=Rn+W*8gT讂Q]Tk*scùtsmĴàq]ጷa T`\Uxq`XMj^R@P+z-m^K2k$ajAǪJW_[R#H-Fqz ###aİb?1O 'aİbdpUg?<5;kݥiiii(FByiMsquvĿKL{i/1%Df 9|ިDdD~9<E.gR{5zס9bm߯_ֶ՞c$cC-NoJ###lRDY !y6T]лm&F_$F_$F_$TM޹qHHpx-}Ԍ|Қl}0R7#L9{vF 7CX#t~<ՄāDW$B jڰثEh 'C+8-jɆf뉖=R[+Őq!v9_Z.x7qnƐ@d. ̡>k9k_gfz=h6$]~C49:4Qͷ4MY5b1Rc-X8.SbԔ) 1Rw D\]OL61SqI.ccD8(Vm;5N g.|f(((8 q2(dQȌG!36Ufffff8 q2(dQȌ<3Bf8 q2(d5 5ʍk47%7;!7*7in\ܸqMsc,ʍʍY(7fQn̢ܘE1rc,ʍY(7| _冯rWUn*7| _冯rWUn*7| _冯rWUn*7| _冯rWUn*7| _冯rWUt"25-3ZB~CFG={4ߴ`J+!hVZ$I˘$.{|LBbl9"m7j>]$r'L;i8]tNL;i:]SC[L%dSߩs\4RD#ZFĸ^AЛ&+#~jjjt)=ImB[7Mh&Ny}>MZWdyӌXQouZz&Cu2Zu #0cǵi 8-p[MyB=XhSlJSNiežGieU3{K8.q[V\Ϩ_*SEHIpt`BFa&E0# Դ&e@ȘJ4kPihݦ<b;gn3iDG~I]qO3CZB?udP#5D PieKlcH *2T6hu=GG,L_Xt߲(-j)S:!0(?{*ℯ7OEl1v\F6)L ] H"7U`\ H*^K{6ĆX ͪܰ{'v>#gd{+UtJBDԙǽQBLpS&s(lqPtkPDX#pJH䲴IY`o`oIw}d`\8i"pQPrI{6al*,R5"GjVԴlU&d5>+Q)I)A)*lzON6!; 2">-:ƀ&bc-3r̿X` i#q*DTTC }Ƽi[b-faݍU`Rac&ʴl5: kĘtLx7 U>- Ų6 RK)1s.Pߦ zLX#8*j v4kݠv%,KX @`r  k\9i9 ަXYX/OV |с~TR=큓EuN="AVZ ӽ]Y\,k<3QbKd67-WyO7 *6>̾P;( 9. .GaLIWd=&ݦ[^wA>A8 ]UHkHN3elĔ)_sSVMY;qF5277 nnpjp 69`EV]ܪ5r91r91r91r91r٤ ݇fް1gdzxԲ0 +:g#nÜ☰Ո X,oasDnڶb v؁U^W ֹjYֶ w?<7D p-s +qe&6vfkakhf-cdš myT]6ޙw%˲5{!:=&.$dW0^3pنd MmVjeOREn({ N~[<(i@;uz\{^ҪM7: ؍F9phJw!X؋Hbk"uUx)2elĔ6f VξޮN]Sr;xua$g0aCЈW(H-[`sTO*[ԽRӎ}uD)3%2|*Iیɞ<ҼC5]9>K꜇VY5yf%'?5m\n11[؎wCdOߑD+/nj{03g3̰g̝ 'יBoSEf>oP+5ibO\B{?njVfjf{cF #-NHkfL6,5m\fSdJl.lrS M _ՐYiR[ObivY1~WJͮj^kVqI-jldz6j:kUby+mt'ӆLP-1mX<%f{ӌ81#f|`M3 {iZWKnzmEO[PrC?E`=3l5 ֌?[3lpl5֌?[3l5#kFת· [W,;MvVFG}QEY"ժ?b/ |C*oq=b\F+8A2|)2%=F5׆MaSr+fxcp"(b##c_Ɲ  ؜E)2h8<lPlp6Wc6V>6VN>81lTa橁x8Y:C@aϦ!ʣލL .YS\R,mkdocs-1.6.1/mkdocs/themes/readthedocs/css/theme_extra.css0000664000175000017500000001106014664334534023534 0ustar carstencarsten/* * Wrap inline code samples otherwise they shoot of the side and * can't be read at all. * * https://github.com/mkdocs/mkdocs/issues/313 * https://github.com/mkdocs/mkdocs/issues/233 * https://github.com/mkdocs/mkdocs/issues/834 */ .rst-content code { white-space: pre-wrap; word-wrap: break-word; padding: 2px 5px; } /** * Make code blocks display as blocks and give them the appropriate * font size and padding. * * https://github.com/mkdocs/mkdocs/issues/855 * https://github.com/mkdocs/mkdocs/issues/834 * https://github.com/mkdocs/mkdocs/issues/233 */ .rst-content pre code { white-space: pre; word-wrap: normal; display: block; padding: 12px; font-size: 12px; } /** * Fix code colors * * https://github.com/mkdocs/mkdocs/issues/2027 */ .rst-content code { color: #E74C3C; } .rst-content pre code { color: #000; background: #f8f8f8; } /* * Fix link colors when the link text is inline code. * * https://github.com/mkdocs/mkdocs/issues/718 */ a code { color: #2980B9; } a:hover code { color: #3091d1; } a:visited code { color: #9B59B6; } /* * The CSS classes from highlight.js seem to clash with the * ReadTheDocs theme causing some code to be incorrectly made * bold and italic. * * https://github.com/mkdocs/mkdocs/issues/411 */ pre .cs, pre .c { font-weight: inherit; font-style: inherit; } /* * Fix some issues with the theme and non-highlighted code * samples. Without and highlighting styles attached the * formatting is broken. * * https://github.com/mkdocs/mkdocs/issues/319 */ .rst-content .no-highlight { display: block; padding: 0.5em; color: #333; } /* * Additions specific to the search functionality provided by MkDocs */ .search-results { margin-top: 23px; } .search-results article { border-top: 1px solid #E1E4E5; padding-top: 24px; } .search-results article:first-child { border-top: none; } form .search-query { width: 100%; border-radius: 50px; padding: 6px 12px; border-color: #D1D4D5; } /* * Improve inline code blocks within admonitions. * * https://github.com/mkdocs/mkdocs/issues/656 */ .rst-content .admonition code { color: #404040; border: 1px solid #c7c9cb; border: 1px solid rgba(0, 0, 0, 0.2); background: #f8fbfd; background: rgba(255, 255, 255, 0.7); } /* * Account for wide tables which go off the side. * Override borders to avoid weirdness on narrow tables. * * https://github.com/mkdocs/mkdocs/issues/834 * https://github.com/mkdocs/mkdocs/pull/1034 */ .rst-content .section .docutils { width: 100%; overflow: auto; display: block; border: none; } td, th { border: 1px solid #e1e4e5 !important; border-collapse: collapse; } /* * Without the following amendments, the navigation in the theme will be * slightly cut off. This is due to the fact that the .wy-nav-side has a * padding-bottom of 2em, which must not necessarily align with the font-size of * 90 % on the .rst-current-version container, combined with the padding of 12px * above and below. These amendments fix this in two steps: First, make sure the * .rst-current-version container has a fixed height of 40px, achieved using * line-height, and then applying a padding-bottom of 40px to this container. In * a second step, the items within that container are re-aligned using flexbox. * * https://github.com/mkdocs/mkdocs/issues/2012 */ .wy-nav-side { padding-bottom: 40px; } /* For section-index only */ .wy-menu-vertical .current-section p { background-color: #e3e3e3; color: #404040; } /* * The second step of above amendment: Here we make sure the items are aligned * correctly within the .rst-current-version container. Using flexbox, we * achieve it in such a way that it will look like the following: * * [No repo_name] * Next >> // On the first page * << Previous Next >> // On all subsequent pages * * [With repo_name] * Next >> // On the first page * << Previous Next >> // On all subsequent pages * * https://github.com/mkdocs/mkdocs/issues/2012 */ .rst-versions .rst-current-version { padding: 0 12px; display: flex; font-size: initial; justify-content: space-between; align-items: center; line-height: 40px; } /* * Please note that this amendment also involves removing certain inline-styles * from the file ./mkdocs/themes/readthedocs/versions.html. * * https://github.com/mkdocs/mkdocs/issues/2012 */ .rst-current-version span { flex: 1; text-align: center; } mkdocs-1.6.1/mkdocs/themes/readthedocs/js/0000775000175000017500000000000014664334534020343 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/js/theme_extra.js0000664000175000017500000000030314664334534023202 0ustar carstencarsten/* * Assign 'docutils' class to tables so styling and * JavaScript behavior is applied. * * https://github.com/mkdocs/mkdocs/issues/2028 */ $('div.rst-content table').addClass('docutils'); mkdocs-1.6.1/mkdocs/themes/readthedocs/search.html0000664000175000017500000000136514664334534022067 0ustar carstencarsten{% extends "main.html" %} {% block content %}

    {% trans %}Search Results{% endtrans %}

    {% trans %}Searching...{% endtrans %}
    {% endblock %} mkdocs-1.6.1/mkdocs/themes/readthedocs/footer.html0000664000175000017500000000250514664334534022115 0ustar carstencarsten
    mkdocs-1.6.1/mkdocs/themes/readthedocs/mkdocs_theme.yml0000664000175000017500000000063314664334534023116 0ustar carstencarsten# Config options for 'readthedocs' theme static_templates: - 404.html locale: en include_search_page: true search_index_only: false highlightjs: true hljs_languages: [] hljs_style: github analytics: gtag: null anonymize_ip: false include_homepage_in_sidebar: true prev_next_buttons_location: bottom navigation_depth: 4 titles_only: false sticky_navigation: true collapse_navigation: true logo: null mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/0000775000175000017500000000000014664334534021351 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/fa/0000775000175000017500000000000014664334534021737 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/fa/LC_MESSAGES/0000775000175000017500000000000014664334534023524 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/fa/LC_MESSAGES/messages.po0000664000175000017500000000614214664334534025676 0ustar carstencarsten# Persian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2.2\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2022-03-03 15:56+0330\n" "Last-Translator: Peyman Mohammadi <@peymanr34>\n" "Language: fa\n" "Language-Team: fa \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "صفحه یافت نشد" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "لوگو" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "منوی ناوبری" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "منوی ناوبری موبایل" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "مستندات" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "ویرایش در %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "فهرست مسیر" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "قبلی" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "بعدی" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "ناوبری پاورقی" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "ساخته شده توسط %(mkdocs_link)s با استفاده از %(sphinx_link)s ارائه شده " "توسط %(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "نتایج جستجو" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "جستجوی مستندات" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "عبارت جستجو را اینجا وارد کنید" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "موردی یافت نشد" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "درحال جستجو..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "جستجوی مستندات" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "نسخه‌ها" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/pl/0000775000175000017500000000000014664334534021764 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/pl/LC_MESSAGES/0000775000175000017500000000000014664334534023551 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/pl/LC_MESSAGES/messages.po0000664000175000017500000000611114664334534025717 0ustar carstencarsten# Polish translations for MkDocs. # Copyright (C) 2024 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2024-03-21 17:46+0100\n" "Last-Translator: Szymon Rakowski \n" "Language: pl\n" "Language-Team: pl \n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " "(n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Nie znaleziono strony" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Menu nawigacji" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Mobilne menu nawigacji" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Dokumentacja" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Edytuj w %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Edytuj" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Nawigacja typu Breadcrumb" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Wstecz" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Dalej" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Nawigacja w stopce" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Zbudowano przy użyciu pakietu %(mkdocs_link)s oraz %(sphinx_link)s " "dostarczonego przez %(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "motywu" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Wyniki wyszukiwania" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Przeszukaj dokumentację" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Wpisz tutaj frazę do wyszukania" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Nie znaleziono wyników" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Wyszukiwanie..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Przeszukaj dokumentację" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Wersje" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/ru/0000775000175000017500000000000014664334534021777 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/ru/LC_MESSAGES/0000775000175000017500000000000014664334534023564 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/ru/LC_MESSAGES/messages.po0000664000175000017500000000647414664334534025746 0ustar carstencarsten# Russian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2022-09-13 23:23+0300\n" "Last-Translator: Alexander Krasnikov \n" "Language: ru\n" "Language-Team: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Страница не найдена" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Логотип" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Навигационное меню" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Мобильная версия навигации" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Документация" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Редактировать в %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Редактировать" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Навигационная цепочка" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Назад" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Вперед" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Навигация по странице" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Собрано в %(mkdocs_link)s с использованием %(sphinx_link)s от " "%(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "темы" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Результаты поиска" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Поиск в документах" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Введите поисковый запрос" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Ничего не найдено" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Поиск..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Поиск в документации" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Версии" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/ja/0000775000175000017500000000000014664334534021743 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/ja/LC_MESSAGES/0000775000175000017500000000000014664334534023530 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/ja/LC_MESSAGES/messages.po0000664000175000017500000000613314664334534025702 0ustar carstencarsten# Japanese translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2021-07-31 12:07+0900\n" "Last-Translator: Goto Hayato \n" "Language: ja\n" "Language-Team: ja \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "ページが見つかりません" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "ロゴ" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "ナビゲーションメニュー" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "モバイルナビゲーションメニュー" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "ドキュメント" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "%(repo_name)s で編集" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "パンくずリストナビゲーション" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "前へ" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "次へ" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "フッターナビゲーション" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "%(rtd_link)s 提供の %(sphinx_link)s を使って %(mkdocs_link)s でビルドされました。" #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "検索結果" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "ドキュメントを検索" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "検索語句を入力してください" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "結果がありません" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "検索しています..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "ドキュメントを検索" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "バージョン" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/nl/0000775000175000017500000000000014664334534021762 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/nl/LC_MESSAGES/0000775000175000017500000000000014664334534023547 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/nl/LC_MESSAGES/messages.po0000664000175000017500000000600014664334534025712 0ustar carstencarsten# Dutch translations for MkDocs. # Copyright (C) 2024 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2024. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.5.3\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2024-08-12 11:34+0200\n" "Last-Translator: Jeroen van de Nieuwenhof \n" "Language: nl\n" "Language-Team: nl \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.16.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Pagina niet gevonden" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Navigatiemenu" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Mobiel navigatiemenu" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Documentatie" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Bewerk op %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Bewerk" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Kruimelpadnavigatie" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Vorige" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Volgende" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Footernavigatie" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Gemaakt met %(mkdocs_link)s met behulp van een %(sphinx_link)s geleverd door " "%(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "Thema" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Zoekresultaten" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Doorzoek de documentatie" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Typ hier uw zoekterm" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Geen resultaten gevonden" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Zoeken..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Doorzoek documentatie" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versies" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/it/0000775000175000017500000000000014664334534021765 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/it/LC_MESSAGES/0000775000175000017500000000000014664334534023552 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/it/LC_MESSAGES/messages.po0000664000175000017500000000577214664334534025734 0ustar carstencarsten# Italian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2022-06-05 13:13+0200\n" "Last-Translator: Francesco Maida \n" "Language: it\n" "Language-Team: fr \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Pagina non trovata" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Menu" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Menu di navigazione mobile" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Documenti" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Modifica su %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Modificare" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Navigazione breadcrumb" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Precedente" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Successivo" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navigazione a pié di pagina" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Creato con %(mkdocs_link)s utilizzando un %(sphinx_link)s fornito da " "%(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "tema" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Risultati della ricerca" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Cerca nei documenti" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Digita il termine di ricerca qui" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Nessun risultato trovato" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Ricerca in corso…" #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Cerca documenti" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versioni" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/tr/0000775000175000017500000000000014664334534021776 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/tr/LC_MESSAGES/0000775000175000017500000000000014664334534023563 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/tr/LC_MESSAGES/messages.po0000664000175000017500000000573114664334534025740 0ustar carstencarsten# Turkish translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2022-08-21 18:39+0300\n" "Last-Translator: Mustafa Sami Salt \n" "Language: tr\n" "Language-Team: tr \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Sayfa bulunamadı" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Gezinme menüsü" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Mobil gezinme menüsü" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Belgeler" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "%(repo_name)s içinde düzenle" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Düzenle" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Breadcrumb Gezinmesi" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Önceki" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Sonraki" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Footer Gezinmesi" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "%(rtd_link)s tarafından sağlanan %(sphinx_link)s kullanılarak " "%(mkdocs_link)s ile oluşturuldu." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Arama Sonuçları" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Belgelerde Ara" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Arama terimini buraya yazın" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Sonuç bulunamadı" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Aranıyor..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Belgelerde ara" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Sürümler" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/fr/0000775000175000017500000000000014664334534021760 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/fr/LC_MESSAGES/0000775000175000017500000000000014664334534023545 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/fr/LC_MESSAGES/messages.po0000664000175000017500000000576314664334534025727 0ustar carstencarsten# French translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2021-02-23 23:56+0100\n" "Last-Translator: Alexys Jacob @ultrabug\n" "Language: fr\n" "Language-Team: fr \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Page non trouvée" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Menu de navigation" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Menu de navigation sur mobile" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Documents" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editer dans %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Editer" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Fil d'Ariane" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Précédent" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Suivant" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navigation de pied de page" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Générée avec %(mkdocs_link)s avec un %(sphinx_link)s fourni par " "%(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "thème" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Résultats de la recherche" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Rechercher dans la documentation" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Tapez vos mots clés ici" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Aucun résultat trouvé" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Recherche en cours..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Rechercher des documents" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versions" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/zh_TW/0000775000175000017500000000000014664334534022404 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/zh_TW/LC_MESSAGES/0000775000175000017500000000000014664334534024171 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/zh_TW/LC_MESSAGES/messages.po0000664000175000017500000000573214664334534026347 0ustar carstencarsten# Chinese (Traditional, Taiwan) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2023-09-06 02:19+0800\n" "Last-Translator: Peter Dave Hello \n" "Language: zh_Hant_TW\n" "Language-Team: zh_Hant_TW \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "找不到頁面" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "導覽列" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "行動裝置導覽列" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "文件" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "在 %(repo_name)s 上編輯" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "編輯" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "軌跡瀏覽" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "上一頁" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "下一頁" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "頁尾導覽" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "使用 %(mkdocs_link)s 建置,並採用 %(rtd_link)s 所提供的 %(sphinx_link)s。" #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "搜尋結果" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "搜尋文件" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "在此輸入要搜尋的內容" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "沒有找到結果" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "搜尋中..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "搜尋文件" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "版本" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/es/0000775000175000017500000000000014664334534021760 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/es/LC_MESSAGES/0000775000175000017500000000000014664334534023545 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/es/LC_MESSAGES/messages.po0000664000175000017500000000602014664334534025712 0ustar carstencarsten# Spanish translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2021-12-06 13:33+0100\n" "Last-Translator: Álvaro Mondéjar Rubio \n" "Language: es\n" "Language-Team: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Página no encontrada" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Menu de navegación" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Menú de navegación en móvil" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Documentos" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editar en %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Editar" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Navegación de rastro" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Anterior" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Siguiente" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navegación de pie de página" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Construído con %(mkdocs_link)s usando un %(sphinx_link)s provisto por " "%(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "tema" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Resultados de búsqueda" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Buscar en la documentación" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Escriba el término de búsqueda aquí" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "No se encontraron resultados" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Buscando..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Buscar documentos" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versiones" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/de/0000775000175000017500000000000014664334534021741 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/de/LC_MESSAGES/0000775000175000017500000000000014664334534023526 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/de/LC_MESSAGES/messages.po0000664000175000017500000000574114664334534025704 0ustar carstencarsten# German translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2.3\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2021-10-23 18:52+0200\n" "Last-Translator: Marc Dietz \n" "Language: de\n" "Language-Team: de \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Seite nicht gefunden" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Navigationsmenü" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Mobile Navigationsmenü" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Dokumentation" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Bearbeiten auf %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Bearbeiten" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Breadcrumb-Navigation" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Zurück" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Weiter" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Footer-Navigation" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "Erzeugt mit %(mkdocs_link)s mit einem %(sphinx_link)s von %(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "Thema" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Suchergebnisse" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Dokumentation durchsuchen" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Tragen Sie hier den gesuchten Begriff ein" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Keine Ergebnisse gefunden" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Suche..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Durchsuchen" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versionen" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/uk/0000775000175000017500000000000014664334534021770 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/uk/LC_MESSAGES/0000775000175000017500000000000014664334534023555 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/uk/LC_MESSAGES/messages.po0000664000175000017500000000642314664334534025731 0ustar carstencarsten# Ukrainian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2022-09-17 15:51+0200\n" "Last-Translator: Oleh Prypin <@oprypin>\n" "Language: uk\n" "Language-Team: uk \n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Сторінку не знайдено" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Логотип" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Меню навігації" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Мобільна версія меню" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Документація" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Редагувати в %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Редагувати" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Навігаційна стежка" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Назад" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Вперед" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Нижнє меню навігації" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Зібрано у %(mkdocs_link)s з використанням %(sphinx_link)s від " "%(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "теми" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Результати пошуку" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Пошук у документах" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Введіть пошуковий запит" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Нічого не знайдено" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Пошук..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Пошук у документації" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Версії" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/zh_CN/0000775000175000017500000000000014664334534022352 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/zh_CN/LC_MESSAGES/0000775000175000017500000000000014664334534024137 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/zh_CN/LC_MESSAGES/messages.po0000664000175000017500000000574614664334534026322 0ustar carstencarsten# Chinese (Simplified, China) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/" "issues\"\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2024-04-26 06:39+0800\n" "Last-Translator: xingkong0113 \n" "Language-Team: zh_Hans_CN \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "Generated-By: Babel 2.14.0\n" "X-Generator: Poedit 3.4.2\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "找不到页面" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "导航栏" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "移动导航栏" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "文档" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "在%(repo_name)s上编辑" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "编辑" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "面包屑导航" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "上一章" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "下一章" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "页脚导航" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "用%(mkdocs_link)s构建,使用%(rtd_link)s提供的%(sphinx_link)s。" #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "主题" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "搜索结果" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "搜索文档" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "在此输入需要搜索的内容" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "没有搜到结果" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "搜索中..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "搜索文档" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "版本" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/id/0000775000175000017500000000000014664334534021745 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/id/LC_MESSAGES/0000775000175000017500000000000014664334534023532 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/id/LC_MESSAGES/messages.po0000664000175000017500000000601014664334534025676 0ustar carstencarsten# Indonesian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # Kira , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2023-03-21 21:00+0800\n" "Last-Translator: Kira \n" "Language: id\n" "Language-Team: id \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Halaman tidak ditemukan" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Menu navigasi" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Menu navigasi seluler" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Dokumen" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Sunting pada %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Sunting" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Navigasi Remah Roti" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Sebelumnya" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Selanjutnya" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navigasi Footer" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Dibangun dengan %(mkdocs_link)s menggunakan %(sphinx_link)s yang " "disediakan oleh %(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Hasil Penelusuran" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Telusuri Dokumen" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Ketik istilah pencarian di sini" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Tidak ada hasil yang ditemukan" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Menelusuri..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Telusuri dokumen" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versi" mkdocs-1.6.1/mkdocs/themes/readthedocs/locales/pt_BR/0000775000175000017500000000000014664334534022357 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/pt_BR/LC_MESSAGES/0000775000175000017500000000000014664334534024144 5ustar carstencarstenmkdocs-1.6.1/mkdocs/themes/readthedocs/locales/pt_BR/LC_MESSAGES/messages.po0000664000175000017500000000604214664334534026315 0ustar carstencarsten# Portuguese (Brazil) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2024-04-09 16:13+0200\n" "PO-Revision-Date: 2021-09-07 12:06+0200\n" "Last-Translator: Gustavo Lucas Valente \n" "Language: pt_BR\n" "Language-Team: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Página não encontrada" #: mkdocs/themes/readthedocs/base.html:96 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:110 msgid "Navigation menu" msgstr "Menu de navegação" #: mkdocs/themes/readthedocs/base.html:147 msgid "Mobile navigation menu" msgstr "Menu de navegação em dispositivo móvel" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Documentos" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editar em %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Editar" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Caminho de migalhas" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:21 msgid "Previous" msgstr "Anterior" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:24 msgid "Next" msgstr "Seguinte" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navegação no rodapé" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Construído com %(mkdocs_link)s usando um %(sphinx_link)s provido por " "%(rtd_link)s." #: mkdocs/themes/readthedocs/footer.html:25 msgid "theme" msgstr "tema" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Resultados da busca" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Buscar na documentação" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Digite o termo a ser buscado aqui" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Não foram encontrados resultados" #: mkdocs/themes/readthedocs/search.html:13 #, fuzzy msgid "Searching..." msgstr "Buscando..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Buscar documentos" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versões" mkdocs-1.6.1/mkdocs/themes/babel.cfg0000664000175000017500000000017714664334534017175 0ustar carstencarsten[jinja2: **.html] ignore_tags = script,style include_attrs = alt title summary [extractors] jinja2 = jinja2.ext:babel_extract mkdocs-1.6.1/mkdocs/config/0000775000175000017500000000000014664334534015422 5ustar carstencarstenmkdocs-1.6.1/mkdocs/config/__init__.py0000664000175000017500000000013014664334534017525 0ustar carstencarstenfrom mkdocs.config.base import Config, load_config __all__ = ['load_config', 'Config'] mkdocs-1.6.1/mkdocs/config/base.py0000664000175000017500000003154714664334534016720 0ustar carstencarstenfrom __future__ import annotations import functools import logging import os import sys import warnings from collections import UserDict from contextlib import contextmanager from typing import ( IO, TYPE_CHECKING, Any, Generic, Iterator, List, Mapping, Sequence, Tuple, TypeVar, overload, ) from mkdocs import exceptions, utils from mkdocs.utils import weak_property if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig log = logging.getLogger('mkdocs.config') T = TypeVar('T') class BaseConfigOption(Generic[T]): def __init__(self) -> None: self.warnings: list[str] = [] self.default = None @property def default(self): try: # ensure no mutable values are assigned return self._default.copy() except AttributeError: return self._default @default.setter def default(self, value): self._default = value def validate(self, value: object, /) -> T: return self.run_validation(value) def reset_warnings(self) -> None: self.warnings = [] def pre_validation(self, config: Config, key_name: str) -> None: """ Before all options are validated, perform a pre-validation process. The pre-validation process method should be implemented by subclasses. """ def run_validation(self, value: object, /): """ Perform validation for a value. The run_validation method should be implemented by subclasses. """ return value def post_validation(self, config: Config, key_name: str) -> None: """ After all options have passed validation, perform a post-validation process to do any additional changes dependent on other config values. The post-validation process method should be implemented by subclasses. """ def __set_name__(self, owner, name): if name.endswith('_') and not name.startswith('_'): name = name[:-1] self._name = name @overload def __get__(self, obj: Config, type=None) -> T: ... @overload def __get__(self, obj, type=None) -> BaseConfigOption: ... def __get__(self, obj, type=None): if not isinstance(obj, Config): return self return obj[self._name] def __set__(self, obj, value: T): if not isinstance(obj, Config): raise AttributeError( f"can't set attribute ({self._name}) because the parent is a {type(obj)} not a {Config}" ) obj[self._name] = value class ValidationError(Exception): """Raised during the validation process of the config on errors.""" def __eq__(self, other): return type(self) is type(other) and str(self) == str(other) PlainConfigSchemaItem = Tuple[str, BaseConfigOption] PlainConfigSchema = Sequence[PlainConfigSchemaItem] ConfigErrors = List[Tuple[str, Exception]] ConfigWarnings = List[Tuple[str, str]] class Config(UserDict): """ Base class for MkDocs configuration, plugin configuration (and sub-configuration) objects. It should be subclassed and have `ConfigOption`s defined as attributes. For examples, see mkdocs/contrib/search/__init__.py and mkdocs/config/defaults.py. Behavior as it was prior to MkDocs 1.4 is now handled by LegacyConfig. """ _schema: PlainConfigSchema config_file_path: str def __init_subclass__(cls): schema = dict(getattr(cls, '_schema', ())) for attr_name, attr in cls.__dict__.items(): if isinstance(attr, BaseConfigOption): schema[getattr(attr, '_name', attr_name)] = attr cls._schema = tuple(schema.items()) for attr_name, attr in cls._schema: attr.required = True if getattr(attr, '_legacy_required', None) is not None: raise TypeError( f"{cls.__name__}.{attr_name}: " "Setting 'required' is unsupported in class-based configs. " "All values are required, or can be wrapped into config_options.Optional" ) def __new__(cls, *args, **kwargs) -> Config: """Compatibility: allow referring to `LegacyConfig(...)` constructor as `Config(...)`.""" if cls is Config: return LegacyConfig(*args, **kwargs) return super().__new__(cls) def __init__(self, config_file_path: str | bytes | None = None): super().__init__() self.__user_configs: list[dict] = [] self.set_defaults() self._schema_keys = {k for k, v in self._schema} # Ensure config_file_path is a Unicode string if config_file_path is not None and not isinstance(config_file_path, str): try: # Assume config_file_path is encoded with the file system encoding. config_file_path = config_file_path.decode(encoding=sys.getfilesystemencoding()) except UnicodeDecodeError: raise ValidationError("config_file_path is not a Unicode string.") self.config_file_path = config_file_path or '' def set_defaults(self) -> None: """ Set the base config by going through each validator and getting the default if it has one. """ for key, config_option in self._schema: self[key] = config_option.default def _validate(self) -> tuple[ConfigErrors, ConfigWarnings]: failed: ConfigErrors = [] warnings: ConfigWarnings = [] for key, config_option in self._schema: try: value = self.get(key) self[key] = config_option.validate(value) warnings.extend((key, w) for w in config_option.warnings) config_option.reset_warnings() except ValidationError as e: failed.append((key, e)) break for key in set(self.keys()) - self._schema_keys: warnings.append((key, f"Unrecognised configuration name: {key}")) return failed, warnings def _pre_validate(self) -> tuple[ConfigErrors, ConfigWarnings]: failed: ConfigErrors = [] warnings: ConfigWarnings = [] for key, config_option in self._schema: try: config_option.pre_validation(self, key_name=key) warnings.extend((key, w) for w in config_option.warnings) config_option.reset_warnings() except ValidationError as e: failed.append((key, e)) return failed, warnings def _post_validate(self) -> tuple[ConfigErrors, ConfigWarnings]: failed: ConfigErrors = [] warnings: ConfigWarnings = [] for key, config_option in self._schema: try: config_option.post_validation(self, key_name=key) warnings.extend((key, w) for w in config_option.warnings) config_option.reset_warnings() except ValidationError as e: failed.append((key, e)) return failed, warnings def validate(self) -> tuple[ConfigErrors, ConfigWarnings]: failed, warnings = self._pre_validate() run_failed, run_warnings = self._validate() failed.extend(run_failed) warnings.extend(run_warnings) # Only run the post validation steps if there are no failures, warnings # are okay. if len(failed) == 0: post_failed, post_warnings = self._post_validate() failed.extend(post_failed) warnings.extend(post_warnings) return failed, warnings def load_dict(self, patch: dict) -> None: """Load config options from a dictionary.""" if not isinstance(patch, dict): raise exceptions.ConfigurationError( "The configuration is invalid. Expected a key-" f"value mapping (dict) but received: {type(patch)}" ) self.__user_configs.append(patch) self.update(patch) def load_file(self, config_file: IO) -> None: """Load config options from the open file descriptor of a YAML file.""" warnings.warn( "Config.load_file is not used since MkDocs 1.5 and will be removed soon. " "Use MkDocsConfig.load_file instead", DeprecationWarning, ) return self.load_dict(utils.yaml_load(config_file)) @weak_property def user_configs(self) -> Sequence[Mapping[str, Any]]: warnings.warn( "user_configs is never used in MkDocs and will be removed soon.", DeprecationWarning ) return self.__user_configs @functools.lru_cache(maxsize=None) def get_schema(cls: type) -> PlainConfigSchema: """Extract ConfigOptions defined in a class (used just as a container) and put them into a schema tuple.""" if issubclass(cls, Config): return cls._schema return tuple((k, v) for k, v in cls.__dict__.items() if isinstance(v, BaseConfigOption)) class LegacyConfig(Config): """A configuration object for plugins, as just a dict without type-safe attribute access.""" def __init__(self, schema: PlainConfigSchema, config_file_path: str | None = None): self._schema = tuple((k, v) for k, v in schema) # Re-create just for validation super().__init__(config_file_path) @contextmanager def _open_config_file(config_file: str | IO | None) -> Iterator[IO]: """ A context manager which yields an open file descriptor ready to be read. Accepts a filename as a string, an open or closed file descriptor, or None. When None, it defaults to `mkdocs.yml` in the CWD. If a closed file descriptor is received, a new file descriptor is opened for the same file. The file descriptor is automatically closed when the context manager block is existed. """ # Default to the standard config filename. if config_file is None: paths_to_try = ['mkdocs.yml', 'mkdocs.yaml'] # If it is a string, we can assume it is a path and attempt to open it. elif isinstance(config_file, str): paths_to_try = [config_file] # If closed file descriptor, get file path to reopen later. elif getattr(config_file, 'closed', False): paths_to_try = [config_file.name] else: result_config_file = config_file paths_to_try = None if paths_to_try: # config_file is not a file descriptor, so open it as a path. for path in paths_to_try: path = os.path.abspath(path) log.debug(f"Loading configuration file: {path}") try: result_config_file = open(path, 'rb') break except FileNotFoundError: continue else: raise exceptions.ConfigurationError(f"Config file '{paths_to_try[0]}' does not exist.") else: log.debug(f"Loading configuration file: {result_config_file}") # Ensure file descriptor is at beginning try: result_config_file.seek(0) except OSError: pass try: yield result_config_file finally: if hasattr(result_config_file, 'close'): result_config_file.close() def load_config( config_file: str | IO | None = None, *, config_file_path: str | None = None, **kwargs ) -> MkDocsConfig: """ Load the configuration for a given file object or name. The config_file can either be a file object, string or None. If it is None the default `mkdocs.yml` filename will loaded. Extra kwargs are passed to the configuration to replace any default values unless they themselves are None. """ options = kwargs.copy() # Filter None values from the options. This usually happens with optional # parameters from Click. for key, value in options.copy().items(): if value is None: options.pop(key) with _open_config_file(config_file) as fd: # Initialize the config with the default schema. from mkdocs.config.defaults import MkDocsConfig if config_file_path is None: if sys.stdin and fd is not sys.stdin.buffer: config_file_path = getattr(fd, 'name', None) cfg = MkDocsConfig(config_file_path=config_file_path) # load the config file cfg.load_file(fd) # Then load the options to overwrite anything in the config. cfg.load_dict(options) errors, warnings = cfg.validate() for config_name, warning in warnings: log.warning(f"Config value '{config_name}': {warning}") for config_name, error in errors: log.error(f"Config value '{config_name}': {error}") for key, value in cfg.items(): log.debug(f"Config value '{key}' = {value!r}") if len(errors) > 0: raise exceptions.Abort("Aborted with a configuration error!") elif cfg.strict and len(warnings) > 0: raise exceptions.Abort( f"Aborted with {len(warnings)} configuration warnings in 'strict' mode!" ) return cfg mkdocs-1.6.1/mkdocs/config/defaults.py0000664000175000017500000002136414664334534017611 0ustar carstencarstenfrom __future__ import annotations import logging from typing import IO, Dict, Mapping from mkdocs.config import base from mkdocs.config import config_options as c from mkdocs.structure.pages import Page, _AbsoluteLinksValidationValue from mkdocs.utils.yaml import get_yaml_loader, yaml_load class _LogLevel(c.OptionallyRequired[int]): levels: Mapping[str, int] = { "warn": logging.WARNING, "info": logging.INFO, "ignore": logging.DEBUG, } def run_validation(self, value: object) -> int: if not isinstance(value, str): raise base.ValidationError(f"Expected a string, but a {type(value)} was given.") try: return self.levels[value] except KeyError: raise base.ValidationError(f"Expected one of {list(self.levels)}, got {value!r}") class _AbsoluteLinksValidation(_LogLevel): levels: Mapping[str, int] = { **_LogLevel.levels, "relative_to_docs": _AbsoluteLinksValidationValue.RELATIVE_TO_DOCS, } # NOTE: The order here is important. During validation some config options # depend on others. So, if config option A depends on B, then A should be # listed higher in the schema. class MkDocsConfig(base.Config): """The configuration of MkDocs itself (the root object of mkdocs.yml).""" config_file_path: str = c.Type(str) # type: ignore[assignment] """The path to the mkdocs.yml config file. Can't be populated from the config.""" site_name = c.Type(str) """The title to use for the documentation.""" nav = c.Optional(c.Nav()) """Defines the structure of the navigation.""" pages = c.Deprecated(removed=True, moved_to='nav') exclude_docs = c.Optional(c.PathSpec()) """Gitignore-like patterns of files (relative to docs dir) to exclude from the site.""" draft_docs = c.Optional(c.PathSpec()) """Gitignore-like patterns of files (relative to docs dir) to mark as draft.""" not_in_nav = c.Optional(c.PathSpec()) """Gitignore-like patterns of files (relative to docs dir) that are not intended to be in the nav. This marks doc files that are expected not to be in the nav, otherwise they will cause a log message (see also `validation.nav.omitted_files`). """ site_url = c.Optional(c.URL(is_dir=True)) """The full URL to where the documentation will be hosted.""" site_description = c.Optional(c.Type(str)) """A description for the documentation project that will be added to the HTML meta tags.""" site_author = c.Optional(c.Type(str)) """The name of the author to add to the HTML meta tags.""" theme = c.Theme(default='mkdocs') """The MkDocs theme for the documentation.""" docs_dir = c.DocsDir(default='docs', exists=True) """The directory containing the documentation markdown.""" site_dir = c.SiteDir(default='site') """The directory where the site will be built to""" copyright = c.Optional(c.Type(str)) """A copyright notice to add to the footer of documentation.""" google_analytics = c.Deprecated( message=( 'The configuration option {} has been deprecated and ' 'will be removed in a future release of MkDocs. See the ' 'options available on your theme for an alternative.' ), option_type=c.Type(list, length=2), ) """set of values for Google analytics containing the account IO and domain this should look like, ['UA-27795084-5', 'mkdocs.org']""" dev_addr = c.IpAddress(default='127.0.0.1:8000') """The address on which to serve the live reloading docs server.""" use_directory_urls = c.Type(bool, default=True) """If `True`, use `/index.html` style files with hyperlinks to the directory. If `False`, use `.html style file with hyperlinks to the file. True generates nicer URLs, but False is useful if browsing the output on a filesystem.""" repo_url = c.Optional(c.URL()) """Specify a link to the project source repo to be included in the documentation pages.""" repo_name = c.Optional(c.RepoName('repo_url')) """A name to use for the link to the project source repo. Default, If repo_url is unset then None, otherwise "GitHub", "Bitbucket" or "GitLab" for known url or Hostname for unknown urls.""" edit_uri_template = c.Optional(c.EditURITemplate('edit_uri')) edit_uri = c.Optional(c.EditURI('repo_url')) """Specify a URI to the docs dir in the project source repo, relative to the repo_url. When set, a link directly to the page in the source repo will be added to the generated HTML. If repo_url is not set also, this option is ignored.""" extra_css = c.Type(list, default=[]) extra_javascript = c.ListOfItems(c.ExtraScript(), default=[]) """Specify which css or javascript files from the docs directory should be additionally included in the site.""" extra_templates = c.Type(list, default=[]) """Similar to the above, but each template (HTML or XML) will be build with Jinja2 and the global context.""" markdown_extensions = c.MarkdownExtensions( builtins=['toc', 'tables', 'fenced_code'], configkey='mdx_configs' ) """PyMarkdown extension names.""" mdx_configs = c.Private[Dict[str, dict]]() """PyMarkdown extension configs. Populated from `markdown_extensions`.""" strict = c.Type(bool, default=False) """Enabling strict mode causes MkDocs to stop the build when a problem is encountered rather than display an error.""" remote_branch = c.Type(str, default='gh-pages') """The remote branch to commit to when using gh-deploy.""" remote_name = c.Type(str, default='origin') """The remote name to push to when using gh-deploy.""" extra = c.SubConfig() """extra is a mapping/dictionary of data that is passed to the template. This allows template authors to require extra configuration that not relevant to all themes and doesn't need to be explicitly supported by MkDocs itself. A good example here would be including the current project version.""" plugins = c.Plugins(theme_key='theme', default=['search']) """A list of plugins. Each item may contain a string name or a key value pair. A key value pair should be the string name (as the key) and a dict of config options (as the value).""" hooks = c.Hooks('plugins') """A list of filenames that will be imported as Python modules and used as an instance of a plugin each.""" watch = c.ListOfPaths(default=[]) """A list of extra paths to watch while running `mkdocs serve`.""" class Validation(base.Config): class NavValidation(base.Config): omitted_files = _LogLevel(default='info') """Warning level for when a doc file is never mentioned in the navigation. For granular configuration, see `not_in_nav`.""" not_found = _LogLevel(default='warn') """Warning level for when the navigation links to a relative path that isn't an existing page on the site.""" absolute_links = _AbsoluteLinksValidation(default='info') """Warning level for when the navigation links to an absolute path (starting with `/`).""" nav = c.SubConfig(NavValidation) class LinksValidation(base.Config): not_found = _LogLevel(default='warn') """Warning level for when a Markdown doc links to a relative path that isn't an existing document on the site.""" absolute_links = _AbsoluteLinksValidation(default='info') """Warning level for when a Markdown doc links to an absolute path (starting with `/`).""" unrecognized_links = _LogLevel(default='info') """Warning level for when a Markdown doc links to a relative path that doesn't look like it could be a valid internal link. For example, if the link ends with `/`.""" anchors = _LogLevel(default='info') """Warning level for when a Markdown doc links to an anchor that's not present on the target page.""" links = c.SubConfig(LinksValidation) validation = c.PropagatingSubConfig[Validation]() _current_page: Page | None = None """The currently rendered page. Please do not access this and instead rely on the `page` argument to event handlers.""" def load_dict(self, patch: dict) -> None: super().load_dict(patch) if 'config_file_path' in patch: raise base.ValidationError("Can't set config_file_path in config") def load_file(self, config_file: IO) -> None: """Load config options from the open file descriptor of a YAML file.""" loader = get_yaml_loader(config=self) self.load_dict(yaml_load(config_file, loader)) def get_schema() -> base.PlainConfigSchema: """Soft-deprecated, do not use.""" return MkDocsConfig._schema mkdocs-1.6.1/mkdocs/config/config_options.py0000664000175000017500000012622614664334534021025 0ustar carstencarstenfrom __future__ import annotations import functools import ipaddress import logging import os import string import sys import traceback import types import warnings from collections import Counter, UserString from types import SimpleNamespace from typing import ( Any, Callable, Collection, Dict, Generic, Iterator, List, Mapping, MutableMapping, NamedTuple, TypeVar, Union, overload, ) from urllib.parse import quote as urlquote from urllib.parse import urlsplit, urlunsplit import markdown import pathspec import pathspec.gitignore from mkdocs import plugins, theme, utils from mkdocs.config.base import ( BaseConfigOption, Config, LegacyConfig, PlainConfigSchemaItem, ValidationError, ) from mkdocs.exceptions import ConfigurationError T = TypeVar('T') SomeConfig = TypeVar('SomeConfig', bound=Config) log = logging.getLogger(__name__) class SubConfig(Generic[SomeConfig], BaseConfigOption[SomeConfig]): """ Subconfig Config Option. New: If targeting MkDocs 1.4+, please pass a subclass of Config to the constructor, instead of the old style of a sequence of ConfigOption instances. Validation is then enabled by default. A set of `config_options` grouped under a single config option. By default, validation errors and warnings resulting from validating `config_options` are ignored (`validate=False`). Users should typically enable validation with `validate=True`. """ _config_file_path: str | None = None config_class: type[SomeConfig] @overload def __init__( self: SubConfig[SomeConfig], config_class: type[SomeConfig], /, *, validate: bool = True ): """Create a sub-config in a type-safe way, using fields defined in a Config subclass.""" @overload def __init__( self: SubConfig[LegacyConfig], *config_options: PlainConfigSchemaItem, validate: bool = False, ): """Create an untyped sub-config, using directly passed fields.""" def __init__(self, *config_options, validate=None): super().__init__() self.default = {} self._do_validation = True if validate is None else validate if type(self) is SubConfig: if ( len(config_options) == 1 and isinstance(config_options[0], type) and issubclass(config_options[0], Config) ): (self.config_class,) = config_options else: self.config_class = functools.partial(LegacyConfig, config_options) self._do_validation = False if validate is None else validate def __class_getitem__(cls, config_class: type[Config]): """Eliminates the need to write `config_class = FooConfig` when subclassing SubConfig[FooConfig].""" name = f'{cls.__name__}[{config_class.__name__}]' return type(name, (cls,), dict(config_class=config_class)) def pre_validation(self, config: Config, key_name: str): self._config_file_path = config.config_file_path def run_validation(self, value: object) -> SomeConfig: config = self.config_class(config_file_path=self._config_file_path) try: config.load_dict(value) # type: ignore failed, warnings = config.validate() except ConfigurationError as e: raise ValidationError(str(e)) if self._do_validation: # Capture errors and warnings self.warnings.extend(f"Sub-option '{key}': {msg}" for key, msg in warnings) if failed: # Get the first failing one key, err = failed[0] raise ValidationError(f"Sub-option '{key}': {err}") return config class PropagatingSubConfig(SubConfig[SomeConfig], Generic[SomeConfig]): """ A SubConfig that must consist of SubConfigs with defined schemas. Any value set on the top config gets moved to sub-configs with matching keys. """ def run_validation(self, value: object): if isinstance(value, dict): to_discard = set() for k1, v1 in self.config_class._schema: if isinstance(v1, SubConfig): for k2, _ in v1.config_class._schema: if k2 in value: subdict = value.setdefault(k1, {}) if isinstance(subdict, dict): to_discard.add(k2) subdict.setdefault(k2, value[k2]) for k in to_discard: del value[k] return super().run_validation(value) class OptionallyRequired(Generic[T], BaseConfigOption[T]): """ Soft-deprecated, do not use. A subclass of BaseConfigOption that adds support for default values and required values. It is a base class for config options. """ @overload def __init__(self, default=None): ... @overload def __init__(self, default=None, *, required: bool): ... def __init__(self, default=None, required=None): super().__init__() self.default = default self._legacy_required = required self.required = bool(required) def validate(self, value): """ Perform some initial validation. If the option is empty (None) and isn't required, leave it as such. If it is empty but has a default, use that. Finally, call the run_validation method on the subclass unless. """ if value is None: if self.default is not None: value = self.default elif not self.required: return None elif self.required: raise ValidationError("Required configuration not provided.") return self.run_validation(value) class ListOfItems(Generic[T], BaseConfigOption[List[T]]): """ Validates a homogeneous list of items. E.g. for `config_options.ListOfItems(config_options.Type(int))` a valid item is `[1, 2, 3]`. """ required: bool | None = None # Only for subclasses to set. def __init__(self, option_type: BaseConfigOption[T], default=None) -> None: super().__init__() self.default = default self.option_type = option_type self.option_type.warnings = self.warnings def __repr__(self) -> str: return f'{type(self).__name__}: {self.option_type}' def pre_validation(self, config: Config, key_name: str): self._config = config self._key_name = key_name def run_validation(self, value: object) -> list[T]: if value is None: if self.required or self.default is None: raise ValidationError("Required configuration not provided.") value = self.default if not isinstance(value, list): raise ValidationError(f'Expected a list of items, but a {type(value)} was given.') if not value: # Optimization for empty list return value fake_config = LegacyConfig(()) try: fake_config.config_file_path = self._config.config_file_path except AttributeError: pass # Emulate a config-like environment for pre_validation and post_validation. parent_key_name = getattr(self, '_key_name', '') fake_keys = [f'{parent_key_name}[{i}]' for i in range(len(value))] fake_config.data = dict(zip(fake_keys, value)) self.option_type.warnings = self.warnings for key_name in fake_config: self.option_type.pre_validation(fake_config, key_name) for key_name in fake_config: # Specifically not running `validate` to avoid the OptionallyRequired effect. fake_config[key_name] = self.option_type.run_validation(fake_config[key_name]) for key_name in fake_config: self.option_type.post_validation(fake_config, key_name) return [fake_config[k] for k in fake_keys] class DictOfItems(Generic[T], BaseConfigOption[Dict[str, T]]): """ Validates a dict of items. Keys are always strings. E.g. for `config_options.DictOfItems(config_options.Type(int))` a valid item is `{"a": 1, "b": 2}`. """ required: bool | None = None # Only for subclasses to set. def __init__(self, option_type: BaseConfigOption[T], default=None) -> None: super().__init__() self.default = default self.option_type = option_type self.option_type.warnings = self.warnings def __repr__(self) -> str: return f"{type(self).__name__}: {self.option_type}" def pre_validation(self, config: Config, key_name: str): self._config = config self._key_name = key_name def run_validation(self, value: object) -> dict[str, T]: if value is None: if self.required or self.default is None: raise ValidationError("Required configuration not provided.") value = self.default if not isinstance(value, dict): raise ValidationError(f"Expected a dict of items, but a {type(value)} was given.") if not value: # Optimization for empty list return value fake_config = LegacyConfig(()) try: fake_config.config_file_path = self._config.config_file_path except AttributeError: pass # Emulate a config-like environment for pre_validation and post_validation. fake_config.data = value for key in fake_config: self.option_type.pre_validation(fake_config, key) for key in fake_config: if not isinstance(key, str): raise ValidationError( f"Expected type: {str} for keys, but received: {type(key)} (key={key})" ) for key in fake_config: # Specifically not running `validate` to avoid the OptionallyRequired effect. fake_config[key] = self.option_type.run_validation(fake_config[key]) for key in fake_config: self.option_type.post_validation(fake_config, key) return value class ConfigItems(ListOfItems[LegacyConfig]): """ Deprecated: Use `ListOfItems(SubConfig(...))` instead of `ConfigItems(...)`. Validates a list of mappings that all must match the same set of options. """ @overload def __init__(self, *config_options: PlainConfigSchemaItem): ... @overload def __init__(self, *config_options: PlainConfigSchemaItem, required: bool): ... def __init__(self, *config_options: PlainConfigSchemaItem, required=None) -> None: super().__init__(SubConfig(*config_options), default=[]) self._legacy_required = required self.required = bool(required) class Type(Generic[T], OptionallyRequired[T]): """ Type Config Option. Validate the type of a config option against a given Python type. """ @overload def __init__(self, type_: type[T], /, length: int | None = None, **kwargs): ... @overload def __init__(self, type_: tuple[type[T], ...], /, length: int | None = None, **kwargs): ... def __init__(self, type_, /, length=None, **kwargs) -> None: super().__init__(**kwargs) self._type = type_ self.length = length def run_validation(self, value: object) -> T: if not isinstance(value, self._type): msg = f"Expected type: {self._type} but received: {type(value)}" elif self.length is not None and len(value) != self.length: msg = ( f"Expected type: {self._type} with length {self.length}" f" but received: {value!r} with length {len(value)}" ) else: return value raise ValidationError(msg) class Choice(Generic[T], OptionallyRequired[T]): """ Choice Config Option. Validate the config option against a strict set of values. """ def __init__(self, choices: Collection[T], default: T | None = None, **kwargs) -> None: super().__init__(default=default, **kwargs) try: length = len(choices) except TypeError: length = 0 if not length or isinstance(choices, str): raise ValueError(f'Expected iterable of choices, got {choices}') if default is not None and default not in choices: raise ValueError(f'{default!r} is not one of {choices!r}') self.choices = choices def run_validation(self, value: object) -> T: if value not in self.choices: raise ValidationError(f"Expected one of: {self.choices} but received: {value!r}") return value # type: ignore class Deprecated(BaseConfigOption): """ Deprecated Config Option. Raises a warning as the option is deprecated. Uses `message` for the warning. If `move_to` is set to the name of a new config option, the value is moved to the new option on pre_validation. If `option_type` is set to a ConfigOption instance, then the value is validated against that type. """ def __init__( self, moved_to: str | None = None, message: str | None = None, removed: bool = False, option_type: BaseConfigOption | None = None, ) -> None: super().__init__() self.default = None self.moved_to = moved_to if not message: if removed: message = "The configuration option '{}' was removed from MkDocs." else: message = ( "The configuration option '{}' has been deprecated and " "will be removed in a future release." ) if moved_to: message += f" Use '{moved_to}' instead." self.message = message self.removed = removed self.option = option_type or BaseConfigOption() self.warnings = self.option.warnings def pre_validation(self, config: Config, key_name: str): self.option.pre_validation(config, key_name) if config.get(key_name) is not None: if self.removed: raise ValidationError(self.message.format(key_name)) self.warnings.append(self.message.format(key_name)) if self.moved_to is not None: *parent_keys, target_key = self.moved_to.split('.') target: Any = config for key in parent_keys: if target.get(key) is None: target[key] = {} target = target[key] if not isinstance(target, dict): # We can't move it for the user return target[target_key] = config.pop(key_name) def validate(self, value): return self.option.validate(value) def post_validation(self, config: Config, key_name: str): self.option.post_validation(config, key_name) def reset_warnings(self): self.option.reset_warnings() self.warnings = self.option.warnings class _IpAddressValue(NamedTuple): host: str port: int def __str__(self) -> str: return f'{self.host}:{self.port}' class IpAddress(OptionallyRequired[_IpAddressValue]): """ IpAddress Config Option. Validate that an IP address is in an appropriate format """ def run_validation(self, value: object) -> _IpAddressValue: if not isinstance(value, str) or ':' not in value: raise ValidationError("Must be a string of format 'IP:PORT'") host, port_str = value.rsplit(':', 1) if host != 'localhost': if host.startswith('[') and host.endswith(']'): host = host[1:-1] try: # Validate and normalize IP Address host = str(ipaddress.ip_address(host)) except ValueError as e: raise ValidationError(e) try: port = int(port_str) except Exception: raise ValidationError(f"'{port_str}' is not a valid port") return _IpAddressValue(host, port) class URL(OptionallyRequired[str]): """ URL Config Option. Validate a URL by requiring a scheme is present. """ @overload def __init__(self, default=None, *, is_dir: bool = False): ... @overload def __init__(self, default=None, *, required: bool, is_dir: bool = False): ... def __init__(self, default=None, required=None, is_dir: bool = False) -> None: self.is_dir = is_dir super().__init__(default, required=required) def run_validation(self, value: object) -> str: if not isinstance(value, str): raise ValidationError(f"Expected a string, got {type(value)}") if value == '': return value try: parsed_url = urlsplit(value) except (AttributeError, TypeError): raise ValidationError("Unable to parse the URL.") if parsed_url.scheme and parsed_url.netloc: if self.is_dir and not parsed_url.path.endswith('/'): parsed_url = parsed_url._replace(path=f'{parsed_url.path}/') return urlunsplit(parsed_url) raise ValidationError("The URL isn't valid, it should include the http:// (scheme)") class Optional(Generic[T], BaseConfigOption[Union[T, None]]): """ Wraps a field and makes a None value possible for it when no value is set. E.g. `my_field = config_options.Optional(config_options.Type(str))` """ def __init__(self, config_option: BaseConfigOption[T]) -> None: if config_option.default is not None: raise ValueError( f"This option already has a default ({config_option.default!r}) " f"and doesn't need to be wrapped into Optional" ) super().__init__() self.option = config_option self.warnings = config_option.warnings def __getattr__(self, key): if key in ('option', 'warnings'): raise AttributeError return getattr(self.option, key) def pre_validation(self, config: Config, key_name: str): return self.option.pre_validation(config, key_name) def run_validation(self, value: object) -> T | None: if value is None: return None return self.option.validate(value) def post_validation(self, config: Config, key_name: str): result = self.option.post_validation(config, key_name) # type: ignore self.warnings = self.option.warnings return result def reset_warnings(self): self.option.reset_warnings() self.warnings = self.option.warnings class RepoURL(URL): def __init__(self, *args, **kwargs): warnings.warn( "RepoURL is no longer used in MkDocs and will be removed.", DeprecationWarning ) super().__init__(*args, **kwargs) def post_validation(self, config: Config, key_name: str): repo_host = urlsplit(config['repo_url']).netloc.lower() edit_uri = config.get('edit_uri') # derive repo_name from repo_url if unset if config['repo_url'] is not None and config.get('repo_name') is None: if repo_host == 'github.com': config['repo_name'] = 'GitHub' elif repo_host == 'bitbucket.org': config['repo_name'] = 'Bitbucket' elif repo_host == 'gitlab.com': config['repo_name'] = 'GitLab' else: config['repo_name'] = repo_host.split('.')[0].title() # derive edit_uri from repo_name if unset if config['repo_url'] is not None and edit_uri is None: if repo_host == 'github.com' or repo_host == 'gitlab.com': edit_uri = 'edit/master/docs/' elif repo_host == 'bitbucket.org': edit_uri = 'src/default/docs/' else: edit_uri = '' # ensure a well-formed edit_uri if edit_uri and not edit_uri.endswith('/'): edit_uri += '/' config['edit_uri'] = edit_uri class EditURI(Type[str]): def __init__(self, repo_url_key: str) -> None: super().__init__(str) self.repo_url_key = repo_url_key def post_validation(self, config: Config, key_name: str): edit_uri = config.get(key_name) repo_url = config.get(self.repo_url_key) if edit_uri is None and repo_url is not None: repo_host = urlsplit(repo_url).netloc.lower() if repo_host == 'github.com' or repo_host == 'gitlab.com': edit_uri = 'edit/master/docs/' elif repo_host == 'bitbucket.org': edit_uri = 'src/default/docs/' # ensure a well-formed edit_uri if edit_uri and not edit_uri.endswith('/'): edit_uri += '/' config[key_name] = edit_uri class EditURITemplate(BaseConfigOption[str]): class Formatter(string.Formatter): def convert_field(self, value, conversion): if conversion == 'q': return urlquote(value, safe='') return super().convert_field(value, conversion) class Template(UserString): def __init__(self, formatter, data) -> None: super().__init__(data) self.formatter = formatter try: self.format('', '') except KeyError as e: raise ValueError(f"Unknown template substitute: {e}") def format(self, path, path_noext): return self.formatter.format(self.data, path=path, path_noext=path_noext) def __init__(self, edit_uri_key: str | None = None) -> None: super().__init__() self.edit_uri_key = edit_uri_key def run_validation(self, value: object): try: return self.Template(self.Formatter(), value) except Exception as e: raise ValidationError(e) def post_validation(self, config: Config, key_name: str): if self.edit_uri_key and config.get(key_name) and config.get(self.edit_uri_key): self.warnings.append( f"The option '{self.edit_uri_key}' has no effect when '{key_name}' is set." ) class RepoName(Type[str]): def __init__(self, repo_url_key: str) -> None: super().__init__(str) self.repo_url_key = repo_url_key def post_validation(self, config: Config, key_name: str): repo_name = config.get(key_name) repo_url = config.get(self.repo_url_key) # derive repo_name from repo_url if unset if repo_url is not None and repo_name is None: repo_host = urlsplit(config['repo_url']).netloc.lower() if repo_host == 'github.com': repo_name = 'GitHub' elif repo_host == 'bitbucket.org': repo_name = 'Bitbucket' elif repo_host == 'gitlab.com': repo_name = 'GitLab' else: repo_name = repo_host.split('.')[0].title() config[key_name] = repo_name class FilesystemObject(Type[str]): """Base class for options that point to filesystem objects.""" existence_test: Callable[[str], bool] = staticmethod(os.path.exists) name = 'file or directory' def __init__(self, exists: bool = False, **kwargs) -> None: super().__init__(str, **kwargs) self.exists = exists self.config_dir: str | None = None def pre_validation(self, config: Config, key_name: str): self.config_dir = ( os.path.dirname(config.config_file_path) if config.config_file_path else None ) def run_validation(self, value: object) -> str: value = super().run_validation(value) if self.config_dir and not os.path.isabs(value): value = os.path.join(self.config_dir, value) if self.exists and not self.existence_test(value): raise ValidationError(f"The path '{value}' isn't an existing {self.name}.") return os.path.abspath(value) class Dir(FilesystemObject): """ Dir Config Option. Validate a path to a directory, optionally verifying that it exists. """ existence_test = staticmethod(os.path.isdir) name = 'directory' class DocsDir(Dir): def post_validation(self, config: Config, key_name: str): if not config.config_file_path: return # Validate that the dir is not the parent dir of the config file. if os.path.dirname(config.config_file_path) == config[key_name]: raise ValidationError( f"The '{key_name}' should not be the parent directory of the" f" config file. Use a child directory instead so that the" f" '{key_name}' is a sibling of the config file." ) class File(FilesystemObject): """ File Config Option. Validate a path to a file, optionally verifying that it exists. """ existence_test = staticmethod(os.path.isfile) name = 'file' class ListOfPaths(ListOfItems[str]): """ List of Paths Config Option. A list of file system paths. Raises an error if one of the paths does not exist. For greater flexibility, prefer ListOfItems, e.g. to require files specifically: config_options.ListOfItems(config_options.File(exists=True)) """ @overload def __init__(self, default=[]): ... @overload def __init__(self, default=[], *, required: bool): ... def __init__(self, default=[], required=None) -> None: super().__init__(FilesystemObject(exists=True), default) self.required = required class SiteDir(Dir): """ SiteDir Config Option. Validates the site_dir and docs_dir directories do not contain each other. """ def post_validation(self, config: Config, key_name: str): super().post_validation(config, key_name) docs_dir = config['docs_dir'] site_dir = config['site_dir'] # Validate that the docs_dir and site_dir don't contain the # other as this will lead to copying back and forth on each # and eventually make a deep nested mess. if (docs_dir + os.sep).startswith(site_dir.rstrip(os.sep) + os.sep): raise ValidationError( f"The 'docs_dir' should not be within the 'site_dir' as this " f"can mean the source files are overwritten by the output or " f"it will be deleted if --clean is passed to mkdocs build. " f"(site_dir: '{site_dir}', docs_dir: '{docs_dir}')" ) elif (site_dir + os.sep).startswith(docs_dir.rstrip(os.sep) + os.sep): raise ValidationError( f"The 'site_dir' should not be within the 'docs_dir' as this " f"leads to the build directory being copied into itself and " f"duplicate nested files in the 'site_dir'. " f"(site_dir: '{site_dir}', docs_dir: '{docs_dir}')" ) class Theme(BaseConfigOption[theme.Theme]): """ Theme Config Option. Validate that the theme exists and build Theme instance. """ def __init__(self, default=None) -> None: super().__init__() self.default = default def pre_validation(self, config: Config, key_name: str): self.config_file_path = config.config_file_path def run_validation(self, value: object) -> theme.Theme: if value is None and self.default is not None: theme_config = {'name': self.default} elif isinstance(value, str): theme_config = {'name': value} elif isinstance(value, dict): if 'name' not in value: raise ValidationError("No theme name set.") theme_config = value else: raise ValidationError( f'Invalid type {type(value)}. Expected a string or key/value pairs.' ) themes = utils.get_theme_names() if theme_config['name'] is not None and theme_config['name'] not in themes: raise ValidationError( f"Unrecognised theme name: '{theme_config['name']}'. " f"The available installed themes are: {', '.join(themes)}" ) if not theme_config['name'] and 'custom_dir' not in theme_config: raise ValidationError("At least one of 'name' or 'custom_dir' must be defined.") # Ensure custom_dir is an absolute path if 'custom_dir' in theme_config and not os.path.isabs(theme_config['custom_dir']): config_dir = os.path.dirname(self.config_file_path) theme_config['custom_dir'] = os.path.join(config_dir, theme_config['custom_dir']) if 'custom_dir' in theme_config and not os.path.isdir(theme_config['custom_dir']): raise ValidationError( "The path set in custom_dir ('{path}') does not exist.".format( path=theme_config['custom_dir'] ) ) if 'locale' in theme_config and not isinstance(theme_config['locale'], str): raise ValidationError("'locale' must be a string.") return theme.Theme(**theme_config) class Nav(OptionallyRequired): """ Nav Config Option. Validate the Nav config. """ def run_validation(self, value: object, *, top=True): if isinstance(value, list): for subitem in value: self._validate_nav_item(subitem) if top and not value: value = None elif isinstance(value, dict) and value and not top: # TODO: this should be an error. self.warnings.append(f"Expected nav to be a list, got {self._repr_item(value)}") for subitem in value.values(): self.run_validation(subitem, top=False) elif isinstance(value, str) and not top: pass else: raise ValidationError(f"Expected nav to be a list, got {self._repr_item(value)}") return value def _validate_nav_item(self, value): if isinstance(value, str): pass elif isinstance(value, dict): if len(value) != 1: raise ValidationError( f"Expected nav item to be a dict of size 1, got {self._repr_item(value)}" ) for subnav in value.values(): self.run_validation(subnav, top=False) else: raise ValidationError( f"Expected nav item to be a string or dict, got {self._repr_item(value)}" ) @classmethod def _repr_item(cls, value) -> str: if isinstance(value, dict) and value: return f"dict with keys {tuple(value.keys())}" elif isinstance(value, (str, type(None))): return repr(value) else: return f"a {type(value).__name__}: {value!r}" class Private(Generic[T], BaseConfigOption[T]): """A config option that can only be populated programmatically. Raises an error if set by the user.""" def run_validation(self, value: object) -> None: if value is not None: raise ValidationError('For internal use only.') class ExtraScriptValue(Config): """An extra script to be added to the page. The `extra_javascript` config is a list of these.""" path = Type(str) """The value of the `src` tag of the script.""" type = Type(str, default='') """The value of the `type` tag of the script.""" defer = Type(bool, default=False) """Whether to add the `defer` tag to the script.""" async_ = Type(bool, default=False) """Whether to add the `async` tag to the script.""" def __init__(self, path: str = '', config_file_path=None): super().__init__(config_file_path=config_file_path) self.path = path def __str__(self): return self.path def __fspath__(self): return self.path class ExtraScript(BaseConfigOption[Union[ExtraScriptValue, str]]): def __init__(self): super().__init__() self.option_type = SubConfig[ExtraScriptValue]() def run_validation(self, value: object) -> ExtraScriptValue | str: self.option_type.warnings = self.warnings if isinstance(value, str): if value.endswith('.mjs'): return self.option_type.run_validation({'path': value, 'type': 'module'}) return value return self.option_type.run_validation(value) class MarkdownExtensions(OptionallyRequired[List[str]]): """ Markdown Extensions Config Option. A list or dict of extensions. Each list item may contain either a string or a one item dict. A string must be a valid Markdown extension name with no config options defined. The key of a dict item must be a valid Markdown extension name and the value must be a dict of config options for that extension. Extension configs are set on the private setting passed to `configkey`. The `builtins` keyword accepts a list of extensions which cannot be overridden by the user. However, builtins can be duplicated to define config options for them if desired. """ def __init__( self, builtins: list[str] | None = None, configkey: str = 'mdx_configs', default: list[str] = [], **kwargs, ) -> None: super().__init__(default=default, **kwargs) self.builtins = builtins or [] self.configkey = configkey def validate_ext_cfg(self, ext: object, cfg: object) -> None: if not isinstance(ext, str): raise ValidationError(f"'{ext}' is not a valid Markdown Extension name.") if not cfg: return if not isinstance(cfg, dict): raise ValidationError(f"Invalid config options for Markdown Extension '{ext}'.") self.configdata[ext] = cfg def pre_validation(self, config, key_name): # To appease validation in case it involves the `!relative` tag. config._current_page = current_page = SimpleNamespace() # type: ignore[attr-defined] current_page.file = SimpleNamespace() current_page.file.src_path = '' def run_validation(self, value: object) -> list[str]: self.configdata: dict[str, dict] = {} if not isinstance(value, (list, tuple, dict)): raise ValidationError('Invalid Markdown Extensions configuration') extensions = [] if isinstance(value, dict): for ext, cfg in value.items(): self.validate_ext_cfg(ext, cfg) extensions.append(ext) else: for item in value: if isinstance(item, dict): if len(item) > 1: raise ValidationError('Invalid Markdown Extensions configuration') ext, cfg = item.popitem() self.validate_ext_cfg(ext, cfg) extensions.append(ext) elif isinstance(item, str): extensions.append(item) else: raise ValidationError('Invalid Markdown Extensions configuration') extensions = utils.reduce_list(self.builtins + extensions) # Confirm that Markdown considers extensions to be valid md = markdown.Markdown() for ext in extensions: try: md.registerExtensions((ext,), self.configdata) except Exception as e: stack: list = [] for frame in reversed(traceback.extract_tb(sys.exc_info()[2])): if not frame.line: # Ignore frames before break stack.insert(0, frame) tb = ''.join(traceback.format_list(stack)) raise ValidationError( f"Failed to load extension '{ext}'.\n{tb}{type(e).__name__}: {e}" ) return extensions def post_validation(self, config: Config, key_name: str): config._current_page = None # type: ignore[attr-defined] config[self.configkey] = self.configdata class Plugins(OptionallyRequired[plugins.PluginCollection]): """ Plugins config option. A list or dict of plugins. If a plugin defines config options those are used when initializing the plugin class. """ def __init__(self, theme_key: str | None = None, **kwargs) -> None: super().__init__(**kwargs) self.installed_plugins = plugins.get_plugins() self.theme_key = theme_key self._config: Config | None = None self.plugin_cache: dict[str, plugins.BasePlugin] = {} def pre_validation(self, config, key_name): self._config = config def run_validation(self, value: object) -> plugins.PluginCollection: if not isinstance(value, (list, tuple, dict)): raise ValidationError('Invalid Plugins configuration. Expected a list or dict.') self.plugins = plugins.PluginCollection() self._instance_counter: MutableMapping[str, int] = Counter() for name, cfg in self._parse_configs(value): self.load_plugin_with_namespace(name, cfg) return self.plugins @classmethod def _parse_configs(cls, value: list | tuple | dict) -> Iterator[tuple[str, dict]]: if isinstance(value, dict): for name, cfg in value.items(): if not isinstance(name, str): raise ValidationError(f"'{name}' is not a valid plugin name.") yield name, cfg else: for item in value: if isinstance(item, dict): if len(item) != 1: raise ValidationError('Invalid Plugins configuration') name, cfg = item.popitem() else: name = item cfg = {} if not isinstance(name, str): raise ValidationError(f"'{name}' is not a valid plugin name.") yield name, cfg def load_plugin_with_namespace(self, name: str, config) -> tuple[str, plugins.BasePlugin]: if '/' in name: # It's already specified with a namespace. # Special case: allow to explicitly skip namespaced loading: if name.startswith('/'): name = name[1:] else: # Attempt to load with prepended namespace for the current theme. if self.theme_key and self._config: current_theme = self._config[self.theme_key] if not isinstance(current_theme, str): current_theme = current_theme['name'] if current_theme: expanded_name = f'{current_theme}/{name}' if expanded_name in self.installed_plugins: name = expanded_name return (name, self.load_plugin(name, config)) def load_plugin(self, name: str, config) -> plugins.BasePlugin: if name not in self.installed_plugins: raise ValidationError(f'The "{name}" plugin is not installed') config = config or {} # Users may define a null (None) config if not isinstance(config, dict): raise ValidationError(f"Invalid config options for the '{name}' plugin.") self._instance_counter[name] += 1 inst_number = self._instance_counter[name] inst_name = name if inst_number > 1: inst_name += f' #{inst_number}' plugin = self.plugin_cache.get(inst_name) if plugin is None: plugin_cls = self.installed_plugins[name].load() if not issubclass(plugin_cls, plugins.BasePlugin): raise ValidationError( f'{plugin_cls.__module__}.{plugin_cls.__name__} must be a subclass of' f' {plugins.BasePlugin.__module__}.{plugins.BasePlugin.__name__}' ) plugin = plugin_cls() if hasattr(plugin, 'on_startup') or hasattr(plugin, 'on_shutdown'): self.plugin_cache[inst_name] = plugin if inst_number > 1 and not getattr(plugin, 'supports_multiple_instances', False): self.warnings.append( f"Plugin '{name}' was specified multiple times - this is likely a mistake, " "because the plugin doesn't declare `supports_multiple_instances`." ) # Only if the plugin doesn't have its own "enabled" config, apply a generic one. if 'enabled' in config and not any(pair[0] == 'enabled' for pair in plugin.config_scheme): enabled = config.pop('enabled') if not isinstance(enabled, bool): raise ValidationError( f"Plugin '{name}' option 'enabled': Expected boolean but received: {type(enabled)}" ) if not enabled: log.debug(f"Plugin '{inst_name}' is disabled in the config, skipping.") return plugin errors, warns = plugin.load_config( config, self._config.config_file_path if self._config else None ) for warning in warns: if isinstance(warning, str): self.warnings.append(f"Plugin '{inst_name}': {warning}") else: key, msg = warning self.warnings.append(f"Plugin '{inst_name}' option '{key}': {msg}") errors_message = '\n'.join(f"Plugin '{name}' option '{key}': {msg}" for key, msg in errors) if errors_message: raise ValidationError(errors_message) self.plugins[inst_name] = plugin return plugin class Hooks(BaseConfigOption[List[types.ModuleType]]): """A list of Python scripts to be treated as instances of plugins.""" def __init__(self, plugins_key: str) -> None: super().__init__() self.default = [] self.plugins_key = plugins_key def pre_validation(self, config: Config, key_name: str): self._base_option = ListOfItems(File(exists=True)) self._base_option.pre_validation(config, key_name) def run_validation(self, value: object) -> Mapping[str, Any]: paths = self._base_option.validate(value) self.warnings.extend(self._base_option.warnings) assert isinstance(value, list) hooks = {} for name, path in zip(value, paths): hooks[name] = self._load_hook(name, path) return hooks @functools.lru_cache(maxsize=None) def _load_hook(self, name, path): import importlib.util spec = importlib.util.spec_from_file_location(name, path) if spec is None: raise ValidationError(f"Cannot import path '{path}' as a Python module") module = importlib.util.module_from_spec(spec) sys.modules[name] = module if spec.loader is None: raise ValidationError(f"Cannot import path '{path}' as a Python module") old_sys_path = sys.path.copy() sys.path.insert(0, os.path.dirname(path)) try: spec.loader.exec_module(module) finally: sys.path[:] = old_sys_path return module def post_validation(self, config: Config, key_name: str): plugins = config[self.plugins_key] for name, hook in config[key_name].items(): plugins[name] = hook class PathSpec(BaseConfigOption[pathspec.gitignore.GitIgnoreSpec]): """A path pattern based on gitignore-like syntax.""" def run_validation(self, value: object) -> pathspec.gitignore.GitIgnoreSpec: if not isinstance(value, str): raise ValidationError(f'Expected a multiline string, but a {type(value)} was given.') try: return pathspec.gitignore.GitIgnoreSpec.from_lines(lines=value.splitlines()) except ValueError as e: raise ValidationError(str(e)) mkdocs-1.6.1/mkdocs/plugins.py0000664000175000017500000006126114664334534016216 0ustar carstencarsten"""Implements the plugin API for MkDocs.""" from __future__ import annotations import logging import sys from typing import TYPE_CHECKING, Any, Callable, Generic, Literal, MutableMapping, TypeVar, overload if sys.version_info >= (3, 10): from importlib.metadata import EntryPoint, entry_points else: from importlib_metadata import EntryPoint, entry_points if TYPE_CHECKING: import jinja2.environment from mkdocs import utils from mkdocs.config.base import Config, ConfigErrors, ConfigWarnings, LegacyConfig, PlainConfigSchema if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig from mkdocs.livereload import LiveReloadServer from mkdocs.structure.files import Files from mkdocs.structure.nav import Navigation from mkdocs.structure.pages import Page from mkdocs.utils.templates import TemplateContext if TYPE_CHECKING: from typing_extensions import Concatenate, ParamSpec else: ParamSpec = TypeVar P = ParamSpec('P') T = TypeVar('T') log = logging.getLogger('mkdocs.plugins') def get_plugins() -> dict[str, EntryPoint]: """Return a dict of all installed Plugins as {name: EntryPoint}.""" plugins = entry_points(group='mkdocs.plugins') # Allow third-party plugins to override core plugins pluginmap = {} for plugin in plugins: if plugin.name in pluginmap and plugin.value.startswith("mkdocs.contrib."): continue pluginmap[plugin.name] = plugin return pluginmap SomeConfig = TypeVar('SomeConfig', bound=Config) class BasePlugin(Generic[SomeConfig]): """ Plugin base class. All plugins should subclass this class. """ config_class: type[SomeConfig] = LegacyConfig # type: ignore[assignment] config_scheme: PlainConfigSchema = () config: SomeConfig = {} # type: ignore[assignment] supports_multiple_instances: bool = False """Set to true in subclasses to declare support for adding the same plugin multiple times.""" def __class_getitem__(cls, config_class: type[Config]): """Eliminates the need to write `config_class = FooConfig` when subclassing BasePlugin[FooConfig].""" name = f'{cls.__name__}[{config_class.__name__}]' return type(name, (cls,), dict(config_class=config_class)) def __init_subclass__(cls): if not issubclass(cls.config_class, Config): raise TypeError( f"config_class {cls.config_class} must be a subclass of `mkdocs.config.base.Config`" ) if cls.config_class is not LegacyConfig: cls.config_scheme = cls.config_class._schema # For compatibility. def load_config( self, options: dict[str, Any], config_file_path: str | None = None ) -> tuple[ConfigErrors, ConfigWarnings]: """Load config from a dict of options. Returns a tuple of (errors, warnings).""" if self.config_class is LegacyConfig: self.config = LegacyConfig(self.config_scheme, config_file_path=config_file_path) # type: ignore else: self.config = self.config_class(config_file_path=config_file_path) self.config.load_dict(options) return self.config.validate() # One-time events def on_startup(self, *, command: Literal['build', 'gh-deploy', 'serve'], dirty: bool) -> None: """ The `startup` event runs once at the very beginning of an `mkdocs` invocation. New in MkDocs 1.4. The presence of an `on_startup` method (even if empty) migrates the plugin to the new system where the plugin object is kept across builds within one `mkdocs serve`. Note that for initializing variables, the `__init__` method is still preferred. For initializing per-build variables (and whenever in doubt), use the `on_config` event. Args: command: the command that MkDocs was invoked with, e.g. "serve" for `mkdocs serve`. dirty: whether `--dirty` flag was passed. """ def on_shutdown(self) -> None: """ The `shutdown` event runs once at the very end of an `mkdocs` invocation, before exiting. This event is relevant only for support of `mkdocs serve`, otherwise within a single build it's undistinguishable from `on_post_build`. New in MkDocs 1.4. The presence of an `on_shutdown` method (even if empty) migrates the plugin to the new system where the plugin object is kept across builds within one `mkdocs serve`. Note the `on_post_build` method is still preferred for cleanups, when possible, as it has a much higher chance of actually triggering. `on_shutdown` is "best effort" because it relies on detecting a graceful shutdown of MkDocs. """ def on_serve( self, server: LiveReloadServer, /, *, config: MkDocsConfig, builder: Callable ) -> LiveReloadServer | None: """ The `serve` event is only called when the `serve` command is used during development. It runs only once, after the first build finishes. It is passed the `Server` instance which can be modified before it is activated. For example, additional files or directories could be added to the list of "watched" files for auto-reloading. Args: server: `livereload.Server` instance config: global configuration object builder: a callable which gets passed to each call to `server.watch` Returns: `livereload.Server` instance """ return server # Global events def on_config(self, config: MkDocsConfig) -> MkDocsConfig | None: """ The `config` event is the first event called on build and is run immediately after the user configuration is loaded and validated. Any alterations to the config should be made here. Args: config: global configuration object Returns: global configuration object """ return config def on_pre_build(self, *, config: MkDocsConfig) -> None: """ The `pre_build` event does not alter any variables. Use this event to call pre-build scripts. Args: config: global configuration object """ def on_files(self, files: Files, /, *, config: MkDocsConfig) -> Files | None: """ The `files` event is called after the files collection is populated from the `docs_dir`. Use this event to add, remove, or alter files in the collection. Note that Page objects have not yet been associated with the file objects in the collection. Use [Page Events](plugins.md#page-events) to manipulate page specific data. Args: files: global files collection config: global configuration object Returns: global files collection """ return files def on_nav( self, nav: Navigation, /, *, config: MkDocsConfig, files: Files ) -> Navigation | None: """ The `nav` event is called after the site navigation is created and can be used to alter the site navigation. Args: nav: global navigation object config: global configuration object files: global files collection Returns: global navigation object """ return nav def on_env( self, env: jinja2.Environment, /, *, config: MkDocsConfig, files: Files ) -> jinja2.Environment | None: """ The `env` event is called after the Jinja template environment is created and can be used to alter the [Jinja environment](https://jinja.palletsprojects.com/en/latest/api/#jinja2.Environment). Args: env: global Jinja environment config: global configuration object files: global files collection Returns: global Jinja Environment """ return env def on_post_build(self, *, config: MkDocsConfig) -> None: """ The `post_build` event does not alter any variables. Use this event to call post-build scripts. Args: config: global configuration object """ def on_build_error(self, *, error: Exception) -> None: """ The `build_error` event is called after an exception of any kind is caught by MkDocs during the build process. Use this event to clean things up before MkDocs terminates. Note that any other events which were scheduled to run after the error will have been skipped. See [Handling Errors](plugins.md#handling-errors) for more details. Args: error: exception raised """ # Template events def on_pre_template( self, template: jinja2.Template, /, *, template_name: str, config: MkDocsConfig ) -> jinja2.Template | None: """ The `pre_template` event is called immediately after the subject template is loaded and can be used to alter the template. Args: template: a Jinja2 [Template](https://jinja.palletsprojects.com/en/latest/api/#jinja2.Template) object template_name: string filename of template config: global configuration object Returns: a Jinja2 [Template](https://jinja.palletsprojects.com/en/latest/api/#jinja2.Template) object """ return template def on_template_context( self, context: TemplateContext, /, *, template_name: str, config: MkDocsConfig ) -> TemplateContext | None: """ The `template_context` event is called immediately after the context is created for the subject template and can be used to alter the context for that specific template only. Args: context: dict of template context variables template_name: string filename of template config: global configuration object Returns: dict of template context variables """ return context def on_post_template( self, output_content: str, /, *, template_name: str, config: MkDocsConfig ) -> str | None: """ The `post_template` event is called after the template is rendered, but before it is written to disc and can be used to alter the output of the template. If an empty string is returned, the template is skipped and nothing is is written to disc. Args: output_content: output of rendered template as string template_name: string filename of template config: global configuration object Returns: output of rendered template as string """ return output_content # Page events def on_pre_page(self, page: Page, /, *, config: MkDocsConfig, files: Files) -> Page | None: """ The `pre_page` event is called before any actions are taken on the subject page and can be used to alter the `Page` instance. Args: page: `mkdocs.structure.pages.Page` instance config: global configuration object files: global files collection Returns: `mkdocs.structure.pages.Page` instance """ return page def on_page_read_source(self, /, *, page: Page, config: MkDocsConfig) -> str | None: """ > DEPRECATED: Instead of this event, prefer one of these alternatives: > > * Since MkDocs 1.6, instead set `content_bytes`/`content_string` of a `File` inside [`on_files`][]. > * Usually (although it's not an exact alternative), `on_page_markdown` can serve the same purpose. The `on_page_read_source` event can replace the default mechanism to read the contents of a page's source from the filesystem. Args: page: `mkdocs.structure.pages.Page` instance config: global configuration object Returns: The raw source for a page as unicode string. If `None` is returned, the default loading from a file will be performed. """ return None def on_page_markdown( self, markdown: str, /, *, page: Page, config: MkDocsConfig, files: Files ) -> str | None: """ The `page_markdown` event is called after the page's markdown is loaded from file and can be used to alter the Markdown source text. The meta- data has been stripped off and is available as `page.meta` at this point. Args: markdown: Markdown source text of page as string page: `mkdocs.structure.pages.Page` instance config: global configuration object files: global files collection Returns: Markdown source text of page as string """ return markdown def on_page_content( self, html: str, /, *, page: Page, config: MkDocsConfig, files: Files ) -> str | None: """ The `page_content` event is called after the Markdown text is rendered to HTML (but before being passed to a template) and can be used to alter the HTML body of the page. Args: html: HTML rendered from Markdown source as string page: `mkdocs.structure.pages.Page` instance config: global configuration object files: global files collection Returns: HTML rendered from Markdown source as string """ return html def on_page_context( self, context: TemplateContext, /, *, page: Page, config: MkDocsConfig, nav: Navigation ) -> TemplateContext | None: """ The `page_context` event is called after the context for a page is created and can be used to alter the context for that specific page only. Args: context: dict of template context variables page: `mkdocs.structure.pages.Page` instance config: global configuration object nav: global navigation object Returns: dict of template context variables """ return context def on_post_page(self, output: str, /, *, page: Page, config: MkDocsConfig) -> str | None: """ The `post_page` event is called after the template is rendered, but before it is written to disc and can be used to alter the output of the page. If an empty string is returned, the page is skipped and nothing is written to disc. Args: output: output of rendered template as string page: `mkdocs.structure.pages.Page` instance config: global configuration object Returns: output of rendered template as string """ return output EVENTS = tuple(k[3:] for k in BasePlugin.__dict__ if k.startswith("on_")) # The above definitions were just for docs and type checking, we don't actually want them. for k in EVENTS: delattr(BasePlugin, 'on_' + k) def event_priority(priority: float) -> Callable[[T], T]: """ A decorator to set an event priority for an event handler method. Recommended priority values: `100` "first", `50` "early", `0` "default", `-50` "late", `-100` "last". As different plugins discover more precise relations to each other, the values should be further tweaked. Usage example: ```python @plugins.event_priority(-100) # Wishing to run this after all other plugins' `on_files` events. def on_files(self, files, config, **kwargs): ... ``` New in MkDocs 1.4. Recommended shim for backwards compatibility: ```python try: from mkdocs.plugins import event_priority except ImportError: event_priority = lambda priority: lambda f: f # No-op fallback ``` """ def decorator(event_method): event_method.mkdocs_priority = priority return event_method return decorator class CombinedEvent(Generic[P, T]): """ A descriptor that allows defining multiple event handlers and declaring them under one event's name. Usage example: ```python @plugins.event_priority(100) def _on_page_markdown_1(self, markdown: str, **kwargs): ... @plugins.event_priority(-50) def _on_page_markdown_2(self, markdown: str, **kwargs): ... on_page_markdown = plugins.CombinedEvent(_on_page_markdown_1, _on_page_markdown_2) ``` NOTE: The names of the sub-methods **can't** start with `on_`; instead they can start with `_on_` like in the the above example, or anything else. """ def __init__(self, *methods: Callable[Concatenate[Any, P], T]): self.methods = methods # This is only for mypy, so CombinedEvent can be a valid override of the methods in BasePlugin def __call__(self, instance: BasePlugin, *args: P.args, **kwargs: P.kwargs) -> T: raise TypeError(f"{type(self).__name__!r} object is not callable") def __get__(self, instance, owner=None): return CombinedEvent(*(f.__get__(instance, owner) for f in self.methods)) class PluginCollection(dict, MutableMapping[str, BasePlugin]): """ A collection of plugins. In addition to being a dict of Plugin instances, each event method is registered upon being added. All registered methods for a given event can then be run in order by calling `run_event`. """ _current_plugin: str | None def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.events: dict[str, list[Callable]] = {k: [] for k in EVENTS} self._event_origins: dict[Callable, str] = {} def _register_event( self, event_name: str, method: CombinedEvent | Callable, plugin_name: str | None = None ) -> None: """Register a method for an event.""" if isinstance(method, CombinedEvent): for sub in method.methods: self._register_event(event_name, sub, plugin_name=plugin_name) else: events = self.events[event_name] if event_name == 'page_read_source' and len(events) == 1: plugin1 = self._event_origins.get(next(iter(events)), '') plugin2 = plugin_name or '' log.warning( "Multiple 'on_page_read_source' handlers can't work " f"(both plugins '{plugin1}' and '{plugin2}' registered one)." ) utils.insort(events, method, key=lambda m: -getattr(m, 'mkdocs_priority', 0)) if plugin_name: try: self._event_origins[method] = plugin_name except TypeError: # If the method is somehow not hashable. pass def __getitem__(self, key: str) -> BasePlugin: return super().__getitem__(key) def __setitem__(self, key: str, value: BasePlugin) -> None: super().__setitem__(key, value) # Register all of the event methods defined for this Plugin. for event_name in (x for x in dir(value) if x.startswith('on_')): method = getattr(value, event_name, None) if callable(method): self._register_event(event_name[3:], method, plugin_name=key) @overload def run_event(self, name: str, **kwargs) -> Any: ... @overload def run_event(self, name: str, item: T, **kwargs) -> T: ... def run_event(self, name: str, item=None, **kwargs): """ Run all registered methods of an event. `item` is the object to be modified or replaced and returned by the event method. If it isn't given the event method creates a new object to be returned. All other keywords are variables for context, but would not generally be modified by the event method. """ pass_item = item is not None for method in self.events[name]: self._current_plugin = self._event_origins.get(method, '') if log.getEffectiveLevel() <= logging.DEBUG: log.debug(f"Running `{name}` event from plugin '{self._current_plugin}'") if pass_item: result = method(item, **kwargs) else: result = method(**kwargs) # keep item if method returned `None` if result is not None: item = result self._current_plugin = None return item def on_startup(self, *, command: Literal['build', 'gh-deploy', 'serve'], dirty: bool) -> None: return self.run_event('startup', command=command, dirty=dirty) def on_shutdown(self) -> None: return self.run_event('shutdown') def on_serve( self, server: LiveReloadServer, *, config: MkDocsConfig, builder: Callable ) -> LiveReloadServer: return self.run_event('serve', server, config=config, builder=builder) def on_config(self, config: MkDocsConfig) -> MkDocsConfig: return self.run_event('config', config) def on_pre_build(self, *, config: MkDocsConfig) -> None: return self.run_event('pre_build', config=config) def on_files(self, files: Files, *, config: MkDocsConfig) -> Files: return self.run_event('files', files, config=config) def on_nav(self, nav: Navigation, *, config: MkDocsConfig, files: Files) -> Navigation: return self.run_event('nav', nav, config=config, files=files) def on_env(self, env: jinja2.Environment, *, config: MkDocsConfig, files: Files): return self.run_event('env', env, config=config, files=files) def on_post_build(self, *, config: MkDocsConfig) -> None: return self.run_event('post_build', config=config) def on_build_error(self, *, error: Exception) -> None: return self.run_event('build_error', error=error) def on_pre_template( self, template: jinja2.Template, *, template_name: str, config: MkDocsConfig ) -> jinja2.Template: return self.run_event('pre_template', template, template_name=template_name, config=config) def on_template_context( self, context: TemplateContext, *, template_name: str, config: MkDocsConfig ) -> TemplateContext: return self.run_event( 'template_context', context, template_name=template_name, config=config ) def on_post_template( self, output_content: str, *, template_name: str, config: MkDocsConfig ) -> str: return self.run_event( 'post_template', output_content, template_name=template_name, config=config ) def on_pre_page(self, page: Page, *, config: MkDocsConfig, files: Files) -> Page: return self.run_event('pre_page', page, config=config, files=files) def on_page_read_source(self, *, page: Page, config: MkDocsConfig) -> str | None: return self.run_event('page_read_source', page=page, config=config) def on_page_markdown( self, markdown: str, *, page: Page, config: MkDocsConfig, files: Files ) -> str: return self.run_event('page_markdown', markdown, page=page, config=config, files=files) def on_page_content(self, html: str, *, page: Page, config: MkDocsConfig, files: Files) -> str: return self.run_event('page_content', html, page=page, config=config, files=files) def on_page_context( self, context: TemplateContext, *, page: Page, config: MkDocsConfig, nav: Navigation ) -> TemplateContext: return self.run_event('page_context', context, page=page, config=config, nav=nav) def on_post_page(self, output: str, *, page: Page, config: MkDocsConfig) -> str: return self.run_event('post_page', output, page=page, config=config) class PrefixedLogger(logging.LoggerAdapter): """A logger adapter to prefix log messages.""" def __init__(self, prefix: str, logger: logging.Logger) -> None: """ Initialize the logger adapter. Arguments: prefix: The string to insert in front of every message. logger: The logger instance. """ super().__init__(logger, {}) self.prefix = prefix def process(self, msg: str, kwargs: MutableMapping[str, Any]) -> tuple[str, Any]: """ Process the message. Arguments: msg: The message: kwargs: Remaining arguments. Returns: The processed message. """ return f"{self.prefix}: {msg}", kwargs def get_plugin_logger(name: str) -> PrefixedLogger: """ Return a logger for plugins. Arguments: name: The name to use with `logging.getLogger`. Returns: A logger configured to work well in MkDocs, prefixing each message with the plugin package name. Example: ```python from mkdocs.plugins import get_plugin_logger log = get_plugin_logger(__name__) log.info("My plugin message") ``` """ logger = logging.getLogger(f"mkdocs.plugins.{name}") return PrefixedLogger(name.split(".", 1)[0], logger) mkdocs-1.6.1/mkdocs/__main__.py0000664000175000017500000003007314664334534016252 0ustar carstencarsten#!/usr/bin/env python from __future__ import annotations import logging import os import shutil import sys import textwrap import traceback import warnings import click from mkdocs import __version__, config, utils if sys.platform.startswith("win"): try: import colorama except ImportError: pass else: colorama.init() log = logging.getLogger(__name__) def _showwarning(message, category, filename, lineno, file=None, line=None): try: # Last stack frames: # * ... # * Location of call to deprecated function <-- include this # * Location of call to warn() <-- include this # * (stdlib) Location of call to showwarning function # * (this function) Location of call to extract_stack() stack = [frame for frame in traceback.extract_stack() if frame.line][-4:-2] # Make sure the actual affected file's name is still present (the case of syntax warning): if not any(frame.filename == filename for frame in stack): stack = stack[-1:] + [traceback.FrameSummary(filename, lineno, '')] tb = ''.join(traceback.format_list(stack)) except Exception: tb = f' File "{filename}", line {lineno}' log.info(f'{category.__name__}: {message}\n{tb}') def _enable_warnings(): # When `python -W...` or `PYTHONWARNINGS` are used, `sys.warnoptions` is set. # In that case, we skip warnings configuration since # we don't want to overwrite the user configuration. if not sys.warnoptions: from mkdocs.commands import build build.log.addFilter(utils.DuplicateFilter()) warnings.simplefilter('module', DeprecationWarning) warnings.showwarning = _showwarning class ColorFormatter(logging.Formatter): colors = { 'CRITICAL': 'red', 'ERROR': 'red', 'WARNING': 'yellow', 'DEBUG': 'blue', } text_wrapper = textwrap.TextWrapper( width=shutil.get_terminal_size(fallback=(0, 0)).columns, replace_whitespace=False, break_long_words=False, break_on_hyphens=False, initial_indent=' ' * 11, subsequent_indent=' ' * 11, ) def format(self, record): message = super().format(record) prefix = f'{record.levelname:<8}- ' if record.levelname in self.colors: prefix = click.style(prefix, fg=self.colors[record.levelname]) if self.text_wrapper.width: # Only wrap text if a terminal width was detected msg = '\n'.join(self.text_wrapper.fill(line) for line in message.splitlines()) # Prepend prefix after wrapping so that color codes don't affect length return prefix + msg[11:] return prefix + message class State: """Maintain logging level.""" def __init__(self, log_name='mkdocs', level=logging.INFO): self.logger = logging.getLogger(log_name) self.logger.setLevel(level) self.logger.propagate = False self.stream = logging.StreamHandler() self.stream.setFormatter(ColorFormatter()) self.stream.name = 'MkDocsStreamHandler' self.logger.addHandler(self.stream) def __del__(self): self.logger.removeHandler(self.stream) pass_state = click.make_pass_decorator(State, ensure=True) clean_help = "Remove old files from the site_dir before building (the default)." config_help = ( "Provide a specific MkDocs config. This can be a file name, or '-' to read from stdin." ) dev_addr_help = "IP address and port to serve documentation locally (default: localhost:8000)" serve_open_help = "Open the website in a Web browser after the initial build finishes." strict_help = "Enable strict mode. This will cause MkDocs to abort the build on any warnings." theme_help = "The theme to use when building your documentation." theme_choices = sorted(utils.get_theme_names()) site_dir_help = "The directory to output the result of the documentation build." use_directory_urls_help = "Use directory URLs when building pages (the default)." reload_help = "Enable the live reloading in the development server (this is the default)" no_reload_help = "Disable the live reloading in the development server." serve_dirty_help = "Only re-build files that have changed." serve_clean_help = ( "Build the site without any effects of `mkdocs serve` - pure `mkdocs build`, then serve." ) commit_message_help = ( "A commit message to use when committing to the " "GitHub Pages remote branch. Commit {sha} and MkDocs {version} are available as expansions" ) remote_branch_help = ( "The remote branch to commit to for GitHub Pages. This " "overrides the value specified in config" ) remote_name_help = ( "The remote name to commit to for GitHub Pages. This overrides the value specified in config" ) force_help = "Force the push to the repository." no_history_help = "Replace the whole Git history with one new commit." ignore_version_help = ( "Ignore check that build is not being deployed with an older version of MkDocs." ) watch_theme_help = ( "Include the theme in list of files to watch for live reloading. " "Ignored when live reload is not used." ) shell_help = "Use the shell when invoking Git." watch_help = "A directory or file to watch for live reloading. Can be supplied multiple times." projects_file_help = ( "URL or local path of the registry file that declares all known MkDocs-related projects." ) def add_options(*opts): def inner(f): for i in reversed(opts): f = i(f) return f return inner def verbose_option(f): def callback(ctx, param, value): state = ctx.ensure_object(State) if value: state.logger.setLevel(logging.DEBUG) return click.option( '-v', '--verbose', is_flag=True, expose_value=False, help='Enable verbose output', callback=callback, )(f) def quiet_option(f): def callback(ctx, param, value): state = ctx.ensure_object(State) if value: state.logger.setLevel(logging.ERROR) return click.option( '-q', '--quiet', is_flag=True, expose_value=False, help='Silence warnings', callback=callback, )(f) def color_option(f): def callback(ctx, param, value): state = ctx.ensure_object(State) if value is False or ( value is None and ( not sys.stdout.isatty() or os.environ.get('NO_COLOR') or os.environ.get('TERM') == 'dumb' ) ): state.stream.setFormatter(logging.Formatter('%(levelname)-8s- %(message)s')) return click.option( '--color/--no-color', is_flag=True, default=None, expose_value=False, help="Force enable or disable color and wrapping for the output. Default is auto-detect.", callback=callback, )(f) common_options = add_options(quiet_option, verbose_option) common_config_options = add_options( click.option('-f', '--config-file', type=click.File('rb'), help=config_help), # Don't override config value if user did not specify --strict flag # Conveniently, load_config drops None values click.option('-s', '--strict/--no-strict', is_flag=True, default=None, help=strict_help), click.option('-t', '--theme', type=click.Choice(theme_choices), help=theme_help), # As with --strict, set the default to None so that this doesn't incorrectly # override the config file click.option( '--use-directory-urls/--no-directory-urls', is_flag=True, default=None, help=use_directory_urls_help, ), ) PYTHON_VERSION = f"{sys.version_info.major}.{sys.version_info.minor}" PKG_DIR = os.path.dirname(os.path.abspath(__file__)) @click.group(context_settings=dict(help_option_names=['-h', '--help'], max_content_width=120)) @click.version_option( __version__, '-V', '--version', message=f'%(prog)s, version %(version)s from { PKG_DIR } (Python { PYTHON_VERSION })', ) @common_options @color_option def cli(): """MkDocs - Project documentation with Markdown.""" @cli.command(name="serve") @click.option('-a', '--dev-addr', help=dev_addr_help, metavar='') @click.option('-o', '--open', 'open_in_browser', help=serve_open_help, is_flag=True) @click.option('--no-livereload', 'livereload', flag_value=False, help=no_reload_help) @click.option('--livereload', 'livereload', flag_value=True, default=True, hidden=True) @click.option('--dirtyreload', 'build_type', flag_value='dirty', hidden=True) @click.option('--dirty', 'build_type', flag_value='dirty', help=serve_dirty_help) @click.option('-c', '--clean', 'build_type', flag_value='clean', help=serve_clean_help) @click.option('--watch-theme', help=watch_theme_help, is_flag=True) @click.option( '-w', '--watch', help=watch_help, type=click.Path(exists=True), multiple=True, default=[] ) @common_config_options @common_options def serve_command(**kwargs): """Run the builtin development server.""" from mkdocs.commands import serve _enable_warnings() serve.serve(**kwargs) @cli.command(name="build") @click.option('-c', '--clean/--dirty', is_flag=True, default=True, help=clean_help) @common_config_options @click.option('-d', '--site-dir', type=click.Path(), help=site_dir_help) @common_options def build_command(clean, **kwargs): """Build the MkDocs documentation.""" from mkdocs.commands import build _enable_warnings() cfg = config.load_config(**kwargs) cfg.plugins.on_startup(command='build', dirty=not clean) try: build.build(cfg, dirty=not clean) finally: cfg.plugins.on_shutdown() @cli.command(name="gh-deploy") @click.option('-c', '--clean/--dirty', is_flag=True, default=True, help=clean_help) @click.option('-m', '--message', help=commit_message_help) @click.option('-b', '--remote-branch', help=remote_branch_help) @click.option('-r', '--remote-name', help=remote_name_help) @click.option('--force', is_flag=True, help=force_help) @click.option('--no-history', is_flag=True, help=no_history_help) @click.option('--ignore-version', is_flag=True, help=ignore_version_help) @click.option('--shell', is_flag=True, help=shell_help) @common_config_options @click.option('-d', '--site-dir', type=click.Path(), help=site_dir_help) @common_options def gh_deploy_command( clean, message, remote_branch, remote_name, force, no_history, ignore_version, shell, **kwargs ): """Deploy your documentation to GitHub Pages.""" from mkdocs.commands import build, gh_deploy _enable_warnings() cfg = config.load_config(remote_branch=remote_branch, remote_name=remote_name, **kwargs) cfg.plugins.on_startup(command='gh-deploy', dirty=not clean) try: build.build(cfg, dirty=not clean) finally: cfg.plugins.on_shutdown() gh_deploy.gh_deploy( cfg, message=message, force=force, no_history=no_history, ignore_version=ignore_version, shell=shell, ) @cli.command(name="get-deps") @verbose_option @click.option('-f', '--config-file', type=click.File('rb'), help=config_help) @click.option( '-p', '--projects-file', default=None, help=projects_file_help, show_default=True, ) def get_deps_command(config_file, projects_file): """Show required PyPI packages inferred from plugins in mkdocs.yml.""" from mkdocs_get_deps import get_deps, get_projects_file from mkdocs.config.base import _open_config_file warning_counter = utils.CountHandler() warning_counter.setLevel(logging.WARNING) logging.getLogger('mkdocs').addHandler(warning_counter) with get_projects_file(projects_file) as p: with _open_config_file(config_file) as f: deps = get_deps(config_file=f, projects_file=p) for dep in deps: print(dep) # noqa: T201 if warning_counter.get_counts(): sys.exit(1) @cli.command(name="new") @click.argument("project_directory") @common_options def new_command(project_directory): """Create a new MkDocs project.""" from mkdocs.commands import new new.new(project_directory) if __name__ == '__main__': # pragma: no cover cli() mkdocs-1.6.1/mkdocs/commands/0000775000175000017500000000000014664334534015756 5ustar carstencarstenmkdocs-1.6.1/mkdocs/commands/new.py0000664000175000017500000000265614664334534017132 0ustar carstencarstenfrom __future__ import annotations import logging import os config_text = 'site_name: My Docs\n' index_text = """# Welcome to MkDocs For full documentation visit [mkdocs.org](https://www.mkdocs.org). ## Commands * `mkdocs new [dir-name]` - Create a new project. * `mkdocs serve` - Start the live-reloading docs server. * `mkdocs build` - Build the documentation site. * `mkdocs -h` - Print help message and exit. ## Project layout mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files. """ log = logging.getLogger(__name__) def new(output_dir: str) -> None: docs_dir = os.path.join(output_dir, 'docs') config_path = os.path.join(output_dir, 'mkdocs.yml') index_path = os.path.join(docs_dir, 'index.md') if os.path.exists(config_path): log.info('Project already exists.') return if not os.path.exists(output_dir): log.info(f'Creating project directory: {output_dir}') os.mkdir(output_dir) log.info(f'Writing config file: {config_path}') with open(config_path, 'w', encoding='utf-8') as f: f.write(config_text) if os.path.exists(index_path): return log.info(f'Writing initial docs: {index_path}') if not os.path.exists(docs_dir): os.mkdir(docs_dir) with open(index_path, 'w', encoding='utf-8') as f: f.write(index_text) mkdocs-1.6.1/mkdocs/commands/build.py0000664000175000017500000003245714664334534017442 0ustar carstencarstenfrom __future__ import annotations import gzip import logging import os import time from typing import TYPE_CHECKING, Sequence from urllib.parse import urljoin, urlsplit import jinja2 from jinja2.exceptions import TemplateNotFound import mkdocs from mkdocs import utils from mkdocs.exceptions import Abort, BuildError from mkdocs.structure.files import File, Files, InclusionLevel, get_files, set_exclusions from mkdocs.structure.nav import Navigation, get_navigation from mkdocs.structure.pages import Page from mkdocs.utils import DuplicateFilter # noqa: F401 - legacy re-export from mkdocs.utils import templates if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig log = logging.getLogger(__name__) def get_context( nav: Navigation, files: Sequence[File] | Files, config: MkDocsConfig, page: Page | None = None, base_url: str = '', ) -> templates.TemplateContext: """Return the template context for a given page or template.""" if page is not None: base_url = utils.get_relative_url('.', page.url) extra_javascript = [ utils.normalize_url(str(script), page, base_url) for script in config.extra_javascript ] extra_css = [utils.normalize_url(path, page, base_url) for path in config.extra_css] if isinstance(files, Files): files = files.documentation_pages() return templates.TemplateContext( nav=nav, pages=files, base_url=base_url, extra_css=extra_css, extra_javascript=extra_javascript, mkdocs_version=mkdocs.__version__, build_date_utc=utils.get_build_datetime(), config=config, page=page, ) def _build_template( name: str, template: jinja2.Template, files: Files, config: MkDocsConfig, nav: Navigation ) -> str: """Return rendered output for given template as a string.""" # Run `pre_template` plugin events. template = config.plugins.on_pre_template(template, template_name=name, config=config) if utils.is_error_template(name): # Force absolute URLs in the nav of error pages and account for the # possibility that the docs root might be different than the server root. # See https://github.com/mkdocs/mkdocs/issues/77. # However, if site_url is not set, assume the docs root and server root # are the same. See https://github.com/mkdocs/mkdocs/issues/1598. base_url = urlsplit(config.site_url or '/').path else: base_url = utils.get_relative_url('.', name) context = get_context(nav, files, config, base_url=base_url) # Run `template_context` plugin events. context = config.plugins.on_template_context(context, template_name=name, config=config) output = template.render(context) # Run `post_template` plugin events. output = config.plugins.on_post_template(output, template_name=name, config=config) return output def _build_theme_template( template_name: str, env: jinja2.Environment, files: Files, config: MkDocsConfig, nav: Navigation ) -> None: """Build a template using the theme environment.""" log.debug(f"Building theme template: {template_name}") try: template = env.get_template(template_name) except TemplateNotFound: log.warning(f"Template skipped: '{template_name}' not found in theme directories.") return output = _build_template(template_name, template, files, config, nav) if output.strip(): output_path = os.path.join(config.site_dir, template_name) utils.write_file(output.encode('utf-8'), output_path) if template_name == 'sitemap.xml': log.debug(f"Gzipping template: {template_name}") gz_filename = f'{output_path}.gz' with open(gz_filename, 'wb') as f: timestamp = utils.get_build_timestamp( pages=[f.page for f in files.documentation_pages() if f.page is not None] ) with gzip.GzipFile( fileobj=f, filename=gz_filename, mode='wb', mtime=timestamp ) as gz_buf: gz_buf.write(output.encode('utf-8')) else: log.info(f"Template skipped: '{template_name}' generated empty output.") def _build_extra_template(template_name: str, files: Files, config: MkDocsConfig, nav: Navigation): """Build user templates which are not part of the theme.""" log.debug(f"Building extra template: {template_name}") file = files.get_file_from_path(template_name) if file is None: log.warning(f"Template skipped: '{template_name}' not found in docs_dir.") return try: template = jinja2.Template(file.content_string) except Exception as e: log.warning(f"Error reading template '{template_name}': {e}") return output = _build_template(template_name, template, files, config, nav) if output.strip(): utils.write_file(output.encode('utf-8'), file.abs_dest_path) else: log.info(f"Template skipped: '{template_name}' generated empty output.") def _populate_page(page: Page, config: MkDocsConfig, files: Files, dirty: bool = False) -> None: """Read page content from docs_dir and render Markdown.""" config._current_page = page try: # When --dirty is used, only read the page if the file has been modified since the # previous build of the output. if dirty and not page.file.is_modified(): return # Run the `pre_page` plugin event page = config.plugins.on_pre_page(page, config=config, files=files) page.read_source(config) assert page.markdown is not None # Run `page_markdown` plugin events. page.markdown = config.plugins.on_page_markdown( page.markdown, page=page, config=config, files=files ) page.render(config, files) assert page.content is not None # Run `page_content` plugin events. page.content = config.plugins.on_page_content( page.content, page=page, config=config, files=files ) except Exception as e: message = f"Error reading page '{page.file.src_uri}':" # Prevent duplicated the error message because it will be printed immediately afterwards. if not isinstance(e, BuildError): message += f" {e}" log.error(message) raise finally: config._current_page = None def _build_page( page: Page, config: MkDocsConfig, doc_files: Sequence[File], nav: Navigation, env: jinja2.Environment, dirty: bool = False, excluded: bool = False, ) -> None: """Pass a Page to theme template and write output to site_dir.""" config._current_page = page try: # When --dirty is used, only build the page if the file has been modified since the # previous build of the output. if dirty and not page.file.is_modified(): return log.debug(f"Building page {page.file.src_uri}") # Activate page. Signals to theme that this is the current page. page.active = True context = get_context(nav, doc_files, config, page) # Allow 'template:' override in md source files. template = env.get_template(page.meta.get('template', 'main.html')) # Run `page_context` plugin events. context = config.plugins.on_page_context(context, page=page, config=config, nav=nav) if excluded: page.content = ( '
    ' 'DRAFT' '
    ' + (page.content or '') ) # Render the template. output = template.render(context) # Run `post_page` plugin events. output = config.plugins.on_post_page(output, page=page, config=config) # Write the output file. if output.strip(): utils.write_file( output.encode('utf-8', errors='xmlcharrefreplace'), page.file.abs_dest_path ) else: log.info(f"Page skipped: '{page.file.src_uri}'. Generated empty output.") except Exception as e: message = f"Error building page '{page.file.src_uri}':" # Prevent duplicated the error message because it will be printed immediately afterwards. if not isinstance(e, BuildError): message += f" {e}" log.error(message) raise finally: # Deactivate page page.active = False config._current_page = None def build(config: MkDocsConfig, *, serve_url: str | None = None, dirty: bool = False) -> None: """Perform a full site build.""" logger = logging.getLogger('mkdocs') # Add CountHandler for strict mode warning_counter = utils.CountHandler() warning_counter.setLevel(logging.WARNING) if config.strict: logging.getLogger('mkdocs').addHandler(warning_counter) inclusion = InclusionLevel.is_in_serve if serve_url else InclusionLevel.is_included try: start = time.monotonic() # Run `config` plugin events. config = config.plugins.on_config(config) # Run `pre_build` plugin events. config.plugins.on_pre_build(config=config) if not dirty: log.info("Cleaning site directory") utils.clean_directory(config.site_dir) else: # pragma: no cover # Warn user about problems that may occur with --dirty option log.warning( "A 'dirty' build is being performed, this will likely lead to inaccurate navigation and other" " links within your site. This option is designed for site development purposes only." ) if not serve_url: # pragma: no cover log.info(f"Building documentation to directory: {config.site_dir}") if dirty and site_directory_contains_stale_files(config.site_dir): log.info("The directory contains stale files. Use --clean to remove them.") # First gather all data from all files/pages to ensure all data is consistent across all pages. files = get_files(config) env = config.theme.get_env() files.add_files_from_theme(env, config) # Run `files` plugin events. files = config.plugins.on_files(files, config=config) # If plugins have added files but haven't set their inclusion level, calculate it again. set_exclusions(files, config) nav = get_navigation(files, config) # Run `nav` plugin events. nav = config.plugins.on_nav(nav, config=config, files=files) log.debug("Reading markdown pages.") excluded = [] for file in files.documentation_pages(inclusion=inclusion): log.debug(f"Reading: {file.src_uri}") if file.page is None and file.inclusion.is_not_in_nav(): if serve_url and file.inclusion.is_excluded(): excluded.append(urljoin(serve_url, file.url)) Page(None, file, config) assert file.page is not None _populate_page(file.page, config, files, dirty) if excluded: log.info( "The following pages are being built only for the preview " "but will be excluded from `mkdocs build` per `draft_docs` config:\n - " + "\n - ".join(excluded) ) # Run `env` plugin events. env = config.plugins.on_env(env, config=config, files=files) # Start writing files to site_dir now that all data is gathered. Note that order matters. Files # with lower precedence get written first so that files with higher precedence can overwrite them. log.debug("Copying static assets.") files.copy_static_files(dirty=dirty, inclusion=inclusion) for template in config.theme.static_templates: _build_theme_template(template, env, files, config, nav) for template in config.extra_templates: _build_extra_template(template, files, config, nav) log.debug("Building markdown pages.") doc_files = files.documentation_pages(inclusion=inclusion) for file in doc_files: assert file.page is not None _build_page( file.page, config, doc_files, nav, env, dirty, excluded=file.inclusion.is_excluded() ) log_level = config.validation.links.anchors for file in doc_files: assert file.page is not None file.page.validate_anchor_links(files=files, log_level=log_level) # Run `post_build` plugin events. config.plugins.on_post_build(config=config) if counts := warning_counter.get_counts(): msg = ', '.join(f'{v} {k.lower()}s' for k, v in counts) raise Abort(f'Aborted with {msg} in strict mode!') log.info(f'Documentation built in {time.monotonic() - start:.2f} seconds') except Exception as e: # Run `build_error` plugin events. config.plugins.on_build_error(error=e) if isinstance(e, BuildError): log.error(str(e)) raise Abort('Aborted with a BuildError!') raise finally: logger.removeHandler(warning_counter) def site_directory_contains_stale_files(site_directory: str) -> bool: """Check if the site directory contains stale files from a previous build.""" return bool(os.path.exists(site_directory) and os.listdir(site_directory)) mkdocs-1.6.1/mkdocs/commands/__init__.py0000664000175000017500000000000014664334534020055 0ustar carstencarstenmkdocs-1.6.1/mkdocs/commands/serve.py0000664000175000017500000000651214664334534017460 0ustar carstencarstenfrom __future__ import annotations import logging import shutil import tempfile from os.path import isdir, isfile, join from typing import TYPE_CHECKING from urllib.parse import urlsplit from mkdocs.commands.build import build from mkdocs.config import load_config from mkdocs.livereload import LiveReloadServer, _serve_url if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig log = logging.getLogger(__name__) def serve( config_file: str | None = None, livereload: bool = True, build_type: str | None = None, watch_theme: bool = False, watch: list[str] = [], *, open_in_browser: bool = False, **kwargs, ) -> None: """ Start the MkDocs development server. By default it will serve the documentation on http://localhost:8000/ and it will rebuild the documentation and refresh the page automatically whenever a file is edited. """ # Create a temporary build directory, and set some options to serve it # PY2 returns a byte string by default. The Unicode prefix ensures a Unicode # string is returned. And it makes MkDocs temp dirs easier to identify. site_dir = tempfile.mkdtemp(prefix='mkdocs_') def get_config(): config = load_config( config_file=config_file, site_dir=site_dir, **kwargs, ) config.watch.extend(watch) return config is_clean = build_type == 'clean' is_dirty = build_type == 'dirty' config = get_config() config.plugins.on_startup(command=('build' if is_clean else 'serve'), dirty=is_dirty) host, port = config.dev_addr mount_path = urlsplit(config.site_url or '/').path config.site_url = serve_url = _serve_url(host, port, mount_path) def builder(config: MkDocsConfig | None = None): log.info("Building documentation...") if config is None: config = get_config() config.site_url = serve_url build(config, serve_url=None if is_clean else serve_url, dirty=is_dirty) server = LiveReloadServer( builder=builder, host=host, port=port, root=site_dir, mount_path=mount_path ) def error_handler(code) -> bytes | None: if code in (404, 500): error_page = join(site_dir, f'{code}.html') if isfile(error_page): with open(error_page, 'rb') as f: return f.read() return None server.error_handler = error_handler try: # Perform the initial build builder(config) if livereload: # Watch the documentation files, the config file and the theme files. server.watch(config.docs_dir) if config.config_file_path: server.watch(config.config_file_path) if watch_theme: for d in config.theme.dirs: server.watch(d) # Run `serve` plugin events. server = config.plugins.on_serve(server, config=config, builder=builder) for item in config.watch: server.watch(item) try: server.serve(open_in_browser=open_in_browser) except KeyboardInterrupt: log.info("Shutting down...") finally: server.shutdown() finally: config.plugins.on_shutdown() if isdir(site_dir): shutil.rmtree(site_dir) mkdocs-1.6.1/mkdocs/commands/gh_deploy.py0000664000175000017500000001215714664334534020310 0ustar carstencarstenfrom __future__ import annotations import logging import os import re import subprocess from typing import TYPE_CHECKING import ghp_import # type: ignore from packaging import version import mkdocs from mkdocs.exceptions import Abort if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig log = logging.getLogger(__name__) default_message = """Deployed {sha} with MkDocs version: {version}""" def _is_cwd_git_repo() -> bool: try: proc = subprocess.Popen( ['git', 'rev-parse', '--is-inside-work-tree'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) except FileNotFoundError: log.error("Could not find git - is it installed and on your path?") raise Abort('Deployment Aborted!') proc.communicate() return proc.wait() == 0 def _get_current_sha(repo_path) -> str: proc = subprocess.Popen( ['git', 'rev-parse', '--short', 'HEAD'], cwd=repo_path or None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) stdout, _ = proc.communicate() sha = stdout.decode('utf-8').strip() return sha def _get_remote_url(remote_name: str) -> tuple[str, str] | tuple[None, None]: # No CNAME found. We will use the origin URL to determine the GitHub # Pages location. remote = f"remote.{remote_name}.url" proc = subprocess.Popen( ["git", "config", "--get", remote], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) stdout, _ = proc.communicate() url = stdout.decode('utf-8').strip() if 'github.com/' in url: host, path = url.split('github.com/', 1) elif 'github.com:' in url: host, path = url.split('github.com:', 1) else: return None, None return host, path def _check_version(branch: str) -> None: proc = subprocess.Popen( ['git', 'show', '-s', '--format=%s', f'refs/heads/{branch}'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) stdout, _ = proc.communicate() msg = stdout.decode('utf-8').strip() m = re.search(r'\d+(\.\d+)+((a|b|rc)\d+)?(\.post\d+)?(\.dev\d+)?', msg, re.X | re.I) previousv = version.parse(m.group()) if m else None currentv = version.parse(mkdocs.__version__) if not previousv: log.warning('Version check skipped: No version specified in previous deployment.') elif currentv > previousv: log.info( f'Previous deployment was done with MkDocs version {previousv}; ' f'you are deploying with a newer version ({currentv})' ) elif currentv < previousv: log.error( f'Deployment terminated: Previous deployment was made with MkDocs version {previousv}; ' f'you are attempting to deploy with an older version ({currentv}). Use --ignore-version ' 'to deploy anyway.' ) raise Abort('Deployment Aborted!') def gh_deploy( config: MkDocsConfig, message: str | None = None, force=False, no_history=False, ignore_version=False, shell=False, ) -> None: if not _is_cwd_git_repo(): log.error('Cannot deploy - this directory does not appear to be a git repository') remote_branch = config.remote_branch remote_name = config.remote_name if not ignore_version: _check_version(remote_branch) if message is None: message = default_message sha = _get_current_sha(os.path.dirname(config.config_file_path)) message = message.format(version=mkdocs.__version__, sha=sha) log.info( "Copying '%s' to '%s' branch and pushing to GitHub.", config.site_dir, config.remote_branch, ) try: ghp_import.ghp_import( config.site_dir, mesg=message, remote=remote_name, branch=remote_branch, push=True, force=force, use_shell=shell, no_history=no_history, nojekyll=True, ) except ghp_import.GhpError as e: log.error(f"Failed to deploy to GitHub with error: \n{e.message}") raise Abort('Deployment Aborted!') cname_file = os.path.join(config.site_dir, 'CNAME') # Does this repository have a CNAME set for GitHub Pages? if os.path.isfile(cname_file): # This GitHub Pages repository has a CNAME configured. with open(cname_file) as f: cname_host = f.read().strip() log.info( f'Based on your CNAME file, your documentation should be ' f'available shortly at: http://{cname_host}' ) log.info( 'NOTE: Your DNS records must be configured appropriately for your CNAME URL to work.' ) return host, path = _get_remote_url(remote_name) if host is None or path is None: # This could be a GitHub Enterprise deployment. log.info('Your documentation should be available shortly.') else: username, repo = path.split('/', 1) if repo.endswith('.git'): repo = repo[: -len('.git')] url = f'https://{username}.github.io/{repo}/' log.info(f"Your documentation should shortly be available at: {url}") mkdocs-1.6.1/mkdocs/exceptions.py0000664000175000017500000000177214664334534016717 0ustar carstencarstenfrom __future__ import annotations from click import ClickException, echo class MkDocsException(ClickException): """ The base class which all MkDocs exceptions inherit from. This should not be raised directly. One of the subclasses should be raised instead. """ class Abort(MkDocsException, SystemExit): """Abort the build.""" code = 1 def show(self, *args, **kwargs) -> None: echo('\n' + self.format_message()) class ConfigurationError(MkDocsException): """ This error is raised by configuration validation when a validation error is encountered. This error should be raised by any configuration options defined in a plugin's [config_scheme][]. """ class BuildError(MkDocsException): """ This error may be raised by MkDocs during the build process. Plugins should not raise this error. """ class PluginError(BuildError): """ A subclass of [`mkdocs.exceptions.BuildError`][] which can be raised by plugin events. """ mkdocs-1.6.1/mkdocs/utils/0000775000175000017500000000000014664334534015315 5ustar carstencarstenmkdocs-1.6.1/mkdocs/utils/babel_stub.py0000664000175000017500000000153414664334534017774 0ustar carstencarstenfrom __future__ import annotations from string import ascii_letters from typing import NamedTuple class UnknownLocaleError(Exception): pass class Locale(NamedTuple): language: str territory: str = '' def __str__(self): if self.territory: return f'{self.language}_{self.territory}' return self.language @classmethod def parse(cls, identifier, sep): if not isinstance(identifier, str): raise TypeError(f"Unexpected value for identifier: '{identifier}'") locale = cls(*identifier.split(sep, 1)) if not all(x in ascii_letters for x in locale.language): raise ValueError(f"expected only letters, got '{locale.language}'") if len(locale.language) != 2: raise UnknownLocaleError(f"unknown locale '{locale.language}'") return locale mkdocs-1.6.1/mkdocs/utils/templates.py0000664000175000017500000000331414664334534017666 0ustar carstencarstenfrom __future__ import annotations from typing import TYPE_CHECKING, Sequence, TypedDict if TYPE_CHECKING: import datetime from markupsafe import Markup try: from jinja2 import pass_context as contextfilter # type: ignore except ImportError: from jinja2 import contextfilter # type: ignore from mkdocs.utils import normalize_url if TYPE_CHECKING: from mkdocs.config.config_options import ExtraScriptValue from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.files import File from mkdocs.structure.nav import Navigation from mkdocs.structure.pages import Page class TemplateContext(TypedDict): nav: Navigation pages: Sequence[File] base_url: str extra_css: Sequence[str] # Do not use, prefer `config.extra_css`. extra_javascript: Sequence[str] # Do not use, prefer `config.extra_javascript`. mkdocs_version: str build_date_utc: datetime.datetime config: MkDocsConfig page: Page | None @contextfilter def url_filter(context: TemplateContext, value: str) -> str: """A Template filter to normalize URLs.""" return normalize_url(str(value), page=context['page'], base=context['base_url']) @contextfilter def script_tag_filter(context: TemplateContext, extra_script: ExtraScriptValue) -> str: """Converts an ExtraScript value to an HTML ' return Markup(html).format(url_filter(context, str(extra_script)), extra_script) mkdocs-1.6.1/mkdocs/utils/meta.py0000664000175000017500000000707514664334534016626 0ustar carstencarsten""" Copyright (c) 2015, Waylan Limberg All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. MultiMarkdown Meta-Data Extracts, parses and transforms MultiMarkdown style data from documents. """ from __future__ import annotations import re from typing import Any import yaml try: from yaml import CSafeLoader as SafeLoader except ImportError: # pragma: no cover from yaml import SafeLoader # type: ignore ##################################################################### # Data Parser # ##################################################################### YAML_RE = re.compile(r'^-{3}[ \t]*\n(.*?\n)(?:\.{3}|-{3})[ \t]*\n', re.UNICODE | re.DOTALL) META_RE = re.compile(r'^[ ]{0,3}(?P[A-Za-z0-9_-]+):\s*(?P.*)') META_MORE_RE = re.compile(r'^([ ]{4}|\t)(\s*)(?P.*)') def get_data(doc: str) -> tuple[str, dict[str, Any]]: """ Extract meta-data from a text document. Returns a tuple of document and a data dict. """ data = {} # First try YAML if m := YAML_RE.match(doc): try: data = yaml.load(m.group(1), SafeLoader) if isinstance(data, dict): doc = doc[m.end() :].lstrip('\n') else: data = {} # type: ignore[unreachable] except Exception: pass return doc, data # No YAML delimiters. Try MultiMarkdown style lines = doc.replace('\r\n', '\n').replace('\r', '\n').split('\n') key = None while lines: line = lines.pop(0) if line.strip() == '': break # blank line - done if m1 := META_RE.match(line): key = m1.group('key').lower().strip() value = m1.group('value').strip() if key in data: data[key] += f' {value}' else: data[key] = value else: m2 = META_MORE_RE.match(line) if m2 and key: # Add another line to existing key data[key] += ' {}'.format(m2.group('value').strip()) else: lines.insert(0, line) break # no meta data - done return '\n'.join(lines).lstrip('\n'), data mkdocs-1.6.1/mkdocs/utils/filters.py0000664000175000017500000000010314664334534017331 0ustar carstencarstenfrom .templates import url_filter # noqa: F401 - legacy re-export mkdocs-1.6.1/mkdocs/utils/__init__.py0000664000175000017500000002777014664334534017443 0ustar carstencarsten""" Standalone file utils. Nothing in this module should have an knowledge of config or the layout and structure of the site and pages in the site. """ from __future__ import annotations import functools import logging import os import posixpath import re import shutil import sys import warnings from collections import defaultdict from datetime import datetime, timezone from pathlib import PurePath from typing import TYPE_CHECKING, Collection, Iterable, MutableSequence, TypeVar from urllib.parse import urlsplit if sys.version_info >= (3, 10): from importlib.metadata import EntryPoint, entry_points else: from importlib_metadata import EntryPoint, entry_points from mkdocs import exceptions from mkdocs.utils.yaml import get_yaml_loader, yaml_load # noqa: F401 - legacy re-export if TYPE_CHECKING: from mkdocs.structure.pages import Page T = TypeVar('T') log = logging.getLogger(__name__) markdown_extensions = ( '.markdown', '.mdown', '.mkdn', '.mkd', '.md', ) def get_build_timestamp(*, pages: Collection[Page] | None = None) -> int: """ Returns the number of seconds since the epoch for the latest updated page. In reality this is just today's date because that's how pages' update time is populated. """ if pages: # Lexicographic comparison is OK for ISO date. date_string = max(p.update_date for p in pages) dt = datetime.fromisoformat(date_string).replace(tzinfo=timezone.utc) else: dt = get_build_datetime() return int(dt.timestamp()) def get_build_datetime() -> datetime: """ Returns an aware datetime object. Support SOURCE_DATE_EPOCH environment variable for reproducible builds. See https://reproducible-builds.org/specs/source-date-epoch/ """ source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') if source_date_epoch is None: return datetime.now(timezone.utc) return datetime.fromtimestamp(int(source_date_epoch), timezone.utc) def get_build_date() -> str: """ Returns the displayable date string. Support SOURCE_DATE_EPOCH environment variable for reproducible builds. See https://reproducible-builds.org/specs/source-date-epoch/ """ return get_build_datetime().strftime('%Y-%m-%d') if sys.version_info >= (3, 9): _removesuffix = str.removesuffix else: def _removesuffix(s: str, suffix: str) -> str: if suffix and s.endswith(suffix): return s[: -len(suffix)] return s def reduce_list(data_set: Iterable[T]) -> list[T]: """Reduce duplicate items in a list and preserve order.""" return list(dict.fromkeys(data_set)) if sys.version_info >= (3, 10): from bisect import insort else: def insort(a: MutableSequence[T], x: T, *, key=lambda v: v) -> None: kx = key(x) i = len(a) while i > 0 and kx < key(a[i - 1]): i -= 1 a.insert(i, x) def copy_file(source_path: str, output_path: str) -> None: """ Copy source_path to output_path, making sure any parent directories exist. The output_path may be a directory. """ output_dir = os.path.dirname(output_path) os.makedirs(output_dir, exist_ok=True) if os.path.isdir(output_path): output_path = os.path.join(output_path, os.path.basename(source_path)) shutil.copyfile(source_path, output_path) def write_file(content: bytes, output_path: str) -> None: """Write content to output_path, making sure any parent directories exist.""" output_dir = os.path.dirname(output_path) os.makedirs(output_dir, exist_ok=True) with open(output_path, 'wb') as f: f.write(content) def clean_directory(directory: str) -> None: """Remove the content of a directory recursively but not the directory itself.""" if not os.path.exists(directory): return for entry in os.listdir(directory): # Don't remove hidden files from the directory. We never copy files # that are hidden, so we shouldn't delete them either. if entry.startswith('.'): continue path = os.path.join(directory, entry) if os.path.isdir(path): shutil.rmtree(path, True) else: os.unlink(path) def is_markdown_file(path: str) -> bool: """ Return True if the given file path is a Markdown file. https://superuser.com/questions/249436/file-extension-for-markdown-files """ return path.endswith(markdown_extensions) _ERROR_TEMPLATE_RE = re.compile(r'^\d{3}\.html?$') def is_error_template(path: str) -> bool: """Return True if the given file path is an HTTP error template.""" return bool(_ERROR_TEMPLATE_RE.match(path)) @functools.lru_cache(maxsize=None) def _norm_parts(path: str) -> list[str]: if not path.startswith('/'): path = '/' + path path = posixpath.normpath(path)[1:] return path.split('/') if path else [] def get_relative_url(url: str, other: str) -> str: """ Return given url relative to other. Both are operated as slash-separated paths, similarly to the 'path' part of a URL. The last component of `other` is skipped if it contains a dot (considered a file). Actual URLs (with schemas etc.) aren't supported. The leading slash is ignored. Paths are normalized ('..' works as parent directory), but going higher than the root has no effect ('foo/../../bar' ends up just as 'bar'). """ # Remove filename from other url if it has one. dirname, _, basename = other.rpartition('/') if '.' in basename: other = dirname other_parts = _norm_parts(other) dest_parts = _norm_parts(url) common = 0 for a, b in zip(other_parts, dest_parts): if a != b: break common += 1 rel_parts = ['..'] * (len(other_parts) - common) + dest_parts[common:] relurl = '/'.join(rel_parts) or '.' return relurl + '/' if url.endswith('/') else relurl def normalize_url(path: str, page: Page | None = None, base: str = '') -> str: """Return a URL relative to the given page or using the base.""" path, relative_level = _get_norm_url(path) if relative_level == -1: return path if page is not None: result = get_relative_url(path, page.url) if relative_level > 0: result = '../' * relative_level + result return result return posixpath.join(base, path) @functools.lru_cache(maxsize=None) def _get_norm_url(path: str) -> tuple[str, int]: if not path: path = '.' elif '\\' in path: log.warning( f"Path '{path}' uses OS-specific separator '\\'. " f"That will be unsupported in a future release. Please change it to '/'." ) path = path.replace('\\', '/') # Allow links to be fully qualified URLs parsed = urlsplit(path) if parsed.scheme or parsed.netloc or path.startswith(('/', '#')): return path, -1 # Relative path - preserve information about it norm = posixpath.normpath(path) + '/' relative_level = 0 while norm.startswith('../', relative_level * 3): relative_level += 1 return path, relative_level def create_media_urls( path_list: Iterable[str], page: Page | None = None, base: str = '' ) -> list[str]: """Soft-deprecated, do not use.""" return [normalize_url(path, page, base) for path in path_list] def path_to_url(path): warnings.warn( "path_to_url is never used in MkDocs and will be removed soon.", DeprecationWarning ) return path.replace('\\', '/') def get_theme_dir(name: str) -> str: """Return the directory of an installed theme by name.""" theme = get_themes()[name] return os.path.dirname(os.path.abspath(theme.load().__file__)) @functools.lru_cache(maxsize=None) def get_themes() -> dict[str, EntryPoint]: """Return a dict of all installed themes as {name: EntryPoint}.""" themes: dict[str, EntryPoint] = {} eps: dict[EntryPoint, None] = dict.fromkeys(entry_points(group='mkdocs.themes')) builtins = {ep.name for ep in eps if ep.dist is not None and ep.dist.name == 'mkdocs'} for theme in eps: assert theme.dist is not None if theme.name in builtins and theme.dist.name != 'mkdocs': raise exceptions.ConfigurationError( f"The theme '{theme.name}' is a builtin theme but the package '{theme.dist.name}' " "attempts to provide a theme with the same name." ) elif theme.name in themes: other_dist = themes[theme.name].dist assert other_dist is not None log.warning( f"A theme named '{theme.name}' is provided by the Python packages '{theme.dist.name}' " f"and '{other_dist.name}'. The one in '{theme.dist.name}' will be used." ) themes[theme.name] = theme return themes def get_theme_names() -> Collection[str]: """Return a list of all installed themes by name.""" return get_themes().keys() def dirname_to_title(dirname: str) -> str: """Return a page tile obtained from a directory name.""" title = dirname title = title.replace('-', ' ').replace('_', ' ') # Capitalize if the dirname was all lowercase, otherwise leave it as-is. if title.lower() == title: title = title.capitalize() return title def get_markdown_title(markdown_src: str) -> str | None: """Soft-deprecated, do not use.""" lines = markdown_src.replace('\r\n', '\n').replace('\r', '\n').split('\n') while lines: line = lines.pop(0).strip() if not line.strip(): continue if not line.startswith('# '): return None return line.lstrip('# ') return None def find_or_create_node(branch, key): """ Given a list, look for dictionary with a key matching key and return it's value. If it doesn't exist, create it with the value of an empty list and return that. """ for node in branch: if not isinstance(node, dict): continue if key in node: return node[key] new_branch = [] node = {key: new_branch} branch.append(node) return new_branch def nest_paths(paths): """ Given a list of paths, convert them into a nested structure that will match the pages config. """ nested = [] for path in paths: parts = PurePath(path).parent.parts branch = nested for part in parts: part = dirname_to_title(part) branch = find_or_create_node(branch, part) branch.append(path) return nested class DuplicateFilter: """Avoid logging duplicate messages.""" def __init__(self) -> None: self.msgs: set[str] = set() def __call__(self, record: logging.LogRecord) -> bool: rv = record.msg not in self.msgs self.msgs.add(record.msg) return rv class CountHandler(logging.NullHandler): """Counts all logged messages >= level.""" def __init__(self, **kwargs) -> None: self.counts: dict[int, int] = defaultdict(int) super().__init__(**kwargs) def handle(self, record): rv = self.filter(record) if rv: # Use levelno for keys so they can be sorted later self.counts[record.levelno] += 1 return rv def get_counts(self) -> list[tuple[str, int]]: return [(logging.getLevelName(k), v) for k, v in sorted(self.counts.items(), reverse=True)] class weak_property: """Same as a read-only property, but allows overwriting the field for good.""" def __init__(self, func): self.func = func self.__doc__ = func.__doc__ def __get__(self, instance, owner=None): if instance is None: return self return self.func(instance) def __getattr__(name: str): if name == 'warning_filter': warnings.warn( "warning_filter doesn't do anything since MkDocs 1.2 and will be removed soon. " "All messages on the `mkdocs` logger get counted automatically.", DeprecationWarning, ) return logging.Filter() raise AttributeError(f"module {__name__!r} has no attribute {name!r}") mkdocs-1.6.1/mkdocs/utils/cache.py0000664000175000017500000000214714664334534016736 0ustar carstencarstenimport datetime import urllib.request from typing import Callable import mkdocs_get_deps.cache import mkdocs def download_url(url: str) -> bytes: req = urllib.request.Request(url, headers={"User-Agent": f"mkdocs/{mkdocs.__version__}"}) with urllib.request.urlopen(req) as resp: return resp.read() def download_and_cache_url( url: str, cache_duration: datetime.timedelta, *, download: Callable[[str], bytes] = download_url, comment: bytes = b"# ", ) -> bytes: """ Downloads a file from the URL, stores it under ~/.cache/, and returns its content. For tracking the age of the content, a prefix is inserted into the stored file, rather than relying on mtime. Args: url: URL to use. download: Callback that will accept the URL and actually perform the download. cache_duration: How long to consider the URL content cached. comment: The appropriate comment prefix for this file format. """ return mkdocs_get_deps.cache.download_and_cache_url( url=url, cache_duration=cache_duration, download=download, comment=comment ) mkdocs-1.6.1/mkdocs/utils/yaml.py0000664000175000017500000001176414664334534016642 0ustar carstencarstenfrom __future__ import annotations import functools import logging import os import os.path from typing import IO, TYPE_CHECKING, Any import mergedeep # type: ignore import yaml import yaml.constructor import yaml_env_tag # type: ignore from mkdocs import exceptions if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig log = logging.getLogger(__name__) def _construct_dir_placeholder( config: MkDocsConfig, loader: yaml.BaseLoader, node: yaml.ScalarNode ) -> _DirPlaceholder: loader.construct_scalar(node) value: str = (node and node.value) or '' prefix, _, suffix = value.partition('/') if prefix.startswith('$'): if prefix == '$config_dir': return ConfigDirPlaceholder(config, suffix) elif prefix == '$docs_dir': return DocsDirPlaceholder(config, suffix) else: raise exceptions.ConfigurationError( f"Unknown prefix {prefix!r} in {node.tag} {node.value!r}" ) else: return RelativeDirPlaceholder(config, value) class _DirPlaceholder(os.PathLike): def __init__(self, config: MkDocsConfig, suffix: str = ''): self.config = config self.suffix = suffix def value(self) -> str: raise NotImplementedError def __fspath__(self) -> str: """Can be used as a path.""" return os.path.join(self.value(), self.suffix) def __str__(self) -> str: """Can be converted to a string to obtain the current class.""" return self.__fspath__() class ConfigDirPlaceholder(_DirPlaceholder): """ A placeholder object that gets resolved to the directory of the config file when used as a path. The suffix can be an additional sub-path that is always appended to this path. This is the implementation of the `!relative $config_dir/suffix` tag, but can also be passed programmatically. """ def value(self) -> str: return os.path.dirname(self.config.config_file_path) class DocsDirPlaceholder(_DirPlaceholder): """ A placeholder object that gets resolved to the docs dir when used as a path. The suffix can be an additional sub-path that is always appended to this path. This is the implementation of the `!relative $docs_dir/suffix` tag, but can also be passed programmatically. """ def value(self) -> str: return self.config.docs_dir class RelativeDirPlaceholder(_DirPlaceholder): """ A placeholder object that gets resolved to the directory of the Markdown file currently being rendered. This is the implementation of the `!relative` tag, but can also be passed programmatically. """ def __init__(self, config: MkDocsConfig, suffix: str = ''): if suffix: raise exceptions.ConfigurationError( f"'!relative' tag does not expect any value; received {suffix!r}" ) super().__init__(config, suffix) def value(self) -> str: current_page = self.config._current_page if current_page is None: raise exceptions.ConfigurationError( "The current file is not set for the '!relative' tag. " "It cannot be used in this context; the intended usage is within `markdown_extensions`." ) return os.path.dirname(os.path.join(self.config.docs_dir, current_page.file.src_path)) def get_yaml_loader(loader=yaml.Loader, config: MkDocsConfig | None = None): """Wrap PyYaml's loader so we can extend it to suit our needs.""" class Loader(loader): """ Define a custom loader derived from the global loader to leave the global loader unaltered. """ # Attach Environment Variable constructor. # See https://github.com/waylan/pyyaml-env-tag Loader.add_constructor('!ENV', yaml_env_tag.construct_env_tag) if config is not None: Loader.add_constructor('!relative', functools.partial(_construct_dir_placeholder, config)) return Loader def yaml_load(source: IO | str, loader: type[yaml.BaseLoader] | None = None) -> dict[str, Any]: """Return dict of source YAML file using loader, recursively deep merging inherited parent.""" loader = loader or get_yaml_loader() try: result = yaml.load(source, Loader=loader) except yaml.YAMLError as e: raise exceptions.ConfigurationError( f"MkDocs encountered an error parsing the configuration file: {e}" ) if result is None: return {} if 'INHERIT' in result and not isinstance(source, str): relpath = result.pop('INHERIT') abspath = os.path.normpath(os.path.join(os.path.dirname(source.name), relpath)) if not os.path.exists(abspath): raise exceptions.ConfigurationError( f"Inherited config file '{relpath}' does not exist at '{abspath}'." ) log.debug(f"Loading inherited configuration file: {abspath}") with open(abspath, 'rb') as fd: parent = yaml_load(fd, loader) result = mergedeep.merge(parent, result) return result mkdocs-1.6.1/mkdocs/utils/rendering.py0000664000175000017500000000666014664334534017654 0ustar carstencarstenfrom __future__ import annotations import copy from typing import TYPE_CHECKING, Callable import markdown import markdown.treeprocessors if TYPE_CHECKING: from xml.etree import ElementTree as etree # TODO: This will become unnecessary after min-versions have Markdown >=3.4 _unescape: Callable[[str], str] try: _unescape = markdown.treeprocessors.UnescapeTreeprocessor().unescape except AttributeError: _unescape = lambda s: s # TODO: Most of this file will become unnecessary after https://github.com/Python-Markdown/markdown/pull/1441 def get_heading_text(el: etree.Element, md: markdown.Markdown) -> str: el = copy.deepcopy(el) _remove_anchorlink(el) _remove_fnrefs(el) _extract_alt_texts(el) return _strip_tags(_render_inner_html(el, md)) def _strip_tags(text: str) -> str: """Strip HTML tags and return plain text. Note: HTML entities are unaffected.""" # A comment could contain a tag, so strip comments first while (start := text.find('', start)) != -1: text = text[:start] + text[end + 3 :] while (start := text.find('<')) != -1 and (end := text.find('>', start)) != -1: text = text[:start] + text[end + 1 :] # Collapse whitespace text = ' '.join(text.split()) return text def _render_inner_html(el: etree.Element, md: markdown.Markdown) -> str: # The `UnescapeTreeprocessor` runs after `toc` extension so run here. text = md.serializer(el) text = _unescape(text) # Strip parent tag start = text.index('>') + 1 end = text.rindex('<') text = text[start:end].strip() for pp in md.postprocessors: text = pp.run(text) return text def _remove_anchorlink(el: etree.Element) -> None: """Drop anchorlink from the element, if present.""" if len(el) > 0 and el[-1].tag == 'a' and el[-1].get('class') == 'headerlink': del el[-1] def _remove_fnrefs(root: etree.Element) -> None: """Remove footnote references from the element, if any are present.""" for parent in root.findall('.//sup[@id]/..'): _replace_elements_with_text(parent, _predicate_for_fnrefs) def _predicate_for_fnrefs(el: etree.Element) -> str | None: if el.tag == 'sup' and el.get('id', '').startswith('fnref'): return '' return None def _extract_alt_texts(root: etree.Element) -> None: """For images that have an `alt` attribute, replace them with this content.""" for parent in root.findall('.//img[@alt]/..'): _replace_elements_with_text(parent, _predicate_for_alt_texts) def _predicate_for_alt_texts(el: etree.Element) -> str | None: if el.tag == 'img' and (alt := el.get('alt')): return alt return None def _replace_elements_with_text( parent: etree.Element, predicate: Callable[[etree.Element], str | None] ) -> None: """For each child element, if matched, replace it with the text returned from the predicate.""" carry_text = "" for child in reversed(parent): # Reversed for the ability to mutate during iteration. # Remove matching elements but carry any `tail` text to preceding elements. new_text = predicate(child) if new_text is not None: carry_text = new_text + (child.tail or "") + carry_text parent.remove(child) elif carry_text: child.tail = (child.tail or "") + carry_text carry_text = "" if carry_text: parent.text = (parent.text or "") + carry_text mkdocs-1.6.1/mkdocs/contrib/0000775000175000017500000000000014664334534015615 5ustar carstencarstenmkdocs-1.6.1/mkdocs/contrib/__init__.py0000664000175000017500000000000014664334534017714 0ustar carstencarstenmkdocs-1.6.1/mkdocs/contrib/search/0000775000175000017500000000000014664334534017062 5ustar carstencarstenmkdocs-1.6.1/mkdocs/contrib/search/search_index.py0000664000175000017500000001741114664334534022074 0ustar carstencarstenfrom __future__ import annotations import json import logging import os import re import subprocess from html.parser import HTMLParser from typing import TYPE_CHECKING if TYPE_CHECKING: from mkdocs.structure.pages import Page from mkdocs.structure.toc import AnchorLink, TableOfContents try: from lunr import lunr # type: ignore haslunrpy = True except ImportError: haslunrpy = False log = logging.getLogger(__name__) class SearchIndex: """ Search index is a collection of pages and sections (heading tags and their following content are sections). """ def __init__(self, **config) -> None: self._entries: list[dict] = [] self.config = config def _find_toc_by_id(self, toc, id_: str | None) -> AnchorLink | None: """ Given a table of contents and HTML ID, iterate through and return the matched item in the TOC. """ for toc_item in toc: if toc_item.id == id_: return toc_item toc_item_r = self._find_toc_by_id(toc_item.children, id_) if toc_item_r is not None: return toc_item_r return None def _add_entry(self, title: str | None, text: str, loc: str) -> None: """A simple wrapper to add an entry, dropping bad characters.""" text = text.replace('\u00a0', ' ') text = re.sub(r'[ \t\n\r\f\v]+', ' ', text.strip()) self._entries.append({'title': title, 'text': text, 'location': loc}) def add_entry_from_context(self, page: Page) -> None: """ Create a set of entries in the index for a page. One for the page itself and then one for each of its' heading tags. """ # Create the content parser and feed in the HTML for the # full page. This handles all the parsing and prepares # us to iterate through it. parser = ContentParser() assert page.content is not None parser.feed(page.content) parser.close() # Get the absolute URL for the page, this is then # prepended to the urls of the sections url = page.url # Create an entry for the full page. text = parser.stripped_html.rstrip('\n') if self.config['indexing'] == 'full' else '' self._add_entry(title=page.title, text=text, loc=url) if self.config['indexing'] in ['full', 'sections']: for section in parser.data: self.create_entry_for_section(section, page.toc, url) def create_entry_for_section( self, section: ContentSection, toc: TableOfContents, abs_url: str ) -> None: """ Given a section on the page, the table of contents and the absolute url for the page create an entry in the index. """ toc_item = self._find_toc_by_id(toc, section.id) text = ' '.join(section.text) if self.config['indexing'] == 'full' else '' if toc_item is not None: self._add_entry(title=toc_item.title, text=text, loc=abs_url + toc_item.url) def generate_search_index(self) -> str: """Python to json conversion.""" page_dicts = {'docs': self._entries, 'config': self.config} data = json.dumps(page_dicts, sort_keys=True, separators=(',', ':'), default=str) if self.config['prebuild_index'] in (True, 'node'): try: script_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'prebuild-index.js' ) p = subprocess.Popen( ['node', script_path], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8', ) idx, err = p.communicate(data) if not err: page_dicts['index'] = json.loads(idx) data = json.dumps(page_dicts, sort_keys=True, separators=(',', ':')) log.debug('Pre-built search index created successfully.') else: log.warning(f'Failed to pre-build search index. Error: {err}') except (OSError, ValueError) as e: log.warning(f'Failed to pre-build search index. Error: {e}') elif self.config['prebuild_index'] == 'python': if haslunrpy: lunr_idx = lunr( ref='location', fields=('title', 'text'), documents=self._entries, languages=self.config['lang'], ) page_dicts['index'] = lunr_idx.serialize() data = json.dumps(page_dicts, sort_keys=True, separators=(',', ':')) else: log.warning( "Failed to pre-build search index. The 'python' method was specified; " "however, the 'lunr.py' library does not appear to be installed. Try " "installing it with 'pip install lunr'. If you are using any language " "other than English you will also need to install 'lunr[languages]'." ) return data class ContentSection: """ Used by the ContentParser class to capture the information we need when it is parsing the HTML. """ def __init__( self, text: list[str] | None = None, id_: str | None = None, title: str | None = None, ) -> None: self.text = text or [] self.id = id_ self.title = title def __eq__(self, other): return self.text == other.text and self.id == other.id and self.title == other.title _HEADER_TAGS = tuple(f"h{x}" for x in range(1, 7)) class ContentParser(HTMLParser): """ Given a block of HTML, group the content under the preceding heading tags which can then be used for creating an index for that section. """ def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.data: list[ContentSection] = [] self.section: ContentSection | None = None self.is_header_tag = False self._stripped_html: list[str] = [] def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: """Called at the start of every HTML tag.""" # We only care about the opening tag for headings. if tag not in _HEADER_TAGS: return # We are dealing with a new header, create a new section # for it and assign the ID if it has one. self.is_header_tag = True self.section = ContentSection() self.data.append(self.section) for attr in attrs: if attr[0] == "id": self.section.id = attr[1] def handle_endtag(self, tag: str) -> None: """Called at the end of every HTML tag.""" # We only care about the opening tag for headings. if tag not in _HEADER_TAGS: return self.is_header_tag = False def handle_data(self, data: str) -> None: """Called for the text contents of each tag.""" self._stripped_html.append(data) if self.section is None: # This means we have some content at the start of the # HTML before we reach a heading tag. We don't actually # care about that content as it will be added to the # overall page entry in the search. So just skip it. return # If this is a header, then the data is the title. # Otherwise it is content of something under that header # section. if self.is_header_tag: self.section.title = data else: self.section.text.append(data.rstrip('\n')) @property def stripped_html(self) -> str: return '\n'.join(self._stripped_html) mkdocs-1.6.1/mkdocs/contrib/search/__init__.py0000664000175000017500000001215614664334534021200 0ustar carstencarstenfrom __future__ import annotations import logging import os from typing import TYPE_CHECKING, List from mkdocs import utils from mkdocs.config import base from mkdocs.config import config_options as c from mkdocs.contrib.search.search_index import SearchIndex from mkdocs.plugins import BasePlugin if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.pages import Page from mkdocs.utils.templates import TemplateContext log = logging.getLogger(__name__) base_path = os.path.dirname(os.path.abspath(__file__)) class LangOption(c.OptionallyRequired[List[str]]): """Validate Language(s) provided in config are known languages.""" def get_lunr_supported_lang(self, lang): fallback = {'uk': 'ru'} for lang_part in lang.split("_"): lang_part = lang_part.lower() lang_part = fallback.get(lang_part, lang_part) if os.path.isfile(os.path.join(base_path, 'lunr-language', f'lunr.{lang_part}.js')): return lang_part def run_validation(self, value: object): if isinstance(value, str): value = [value] if not isinstance(value, list): raise c.ValidationError('Expected a list of language codes.') for lang in value[:]: if lang != 'en': lang_detected = self.get_lunr_supported_lang(lang) if not lang_detected: log.info(f"Option search.lang '{lang}' is not supported, falling back to 'en'") value.remove(lang) if 'en' not in value: value.append('en') elif lang_detected != lang: value.remove(lang) value.append(lang_detected) log.info(f"Option search.lang '{lang}' switched to '{lang_detected}'") return value class _PluginConfig(base.Config): lang = c.Optional(LangOption()) separator = c.Type(str, default=r'[\s\-]+') min_search_length = c.Type(int, default=3) prebuild_index = c.Choice((False, True, 'node', 'python'), default=False) indexing = c.Choice(('full', 'sections', 'titles'), default='full') class SearchPlugin(BasePlugin[_PluginConfig]): """Add a search feature to MkDocs.""" def on_config(self, config: MkDocsConfig, **kwargs) -> MkDocsConfig: """Add plugin templates and scripts to config.""" if config.theme.get('include_search_page'): config.theme.static_templates.add('search.html') if not config.theme.get('search_index_only'): path = os.path.join(base_path, 'templates') config.theme.dirs.append(path) if 'search/main.js' not in config.extra_javascript: config.extra_javascript.append('search/main.js') # type: ignore if self.config.lang is None: # lang setting undefined. Set default based on theme locale validate = _PluginConfig.lang.run_validation self.config.lang = validate(config.theme.locale.language) # The `python` method of `prebuild_index` is pending deprecation as of version 1.2. # TODO: Raise a deprecation warning in a future release (1.3?). if self.config.prebuild_index == 'python': log.info( "The 'python' method of the search plugin's 'prebuild_index' config option " "is pending deprecation and will not be supported in a future release." ) return config def on_pre_build(self, config: MkDocsConfig, **kwargs) -> None: """Create search index instance for later use.""" self.search_index = SearchIndex(**self.config) def on_page_context(self, context: TemplateContext, page: Page, **kwargs) -> None: """Add page to search index.""" self.search_index.add_entry_from_context(page) def on_post_build(self, config: MkDocsConfig, **kwargs) -> None: """Build search index.""" output_base_path = os.path.join(config.site_dir, 'search') search_index = self.search_index.generate_search_index() json_output_path = os.path.join(output_base_path, 'search_index.json') utils.write_file(search_index.encode('utf-8'), json_output_path) assert self.config.lang is not None if not config.theme.get('search_index_only'): # Include language support files in output. Copy them directly # so that only the needed files are included. files = [] if len(self.config.lang) > 1 or 'en' not in self.config.lang: files.append('lunr.stemmer.support.js') if len(self.config.lang) > 1: files.append('lunr.multi.js') if 'ja' in self.config.lang or 'jp' in self.config.lang: files.append('tinyseg.js') for lang in self.config.lang: if lang != 'en': files.append(f'lunr.{lang}.js') for filename in files: from_path = os.path.join(base_path, 'lunr-language', filename) to_path = os.path.join(output_base_path, filename) utils.copy_file(from_path, to_path) mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/0000775000175000017500000000000014664334534021623 5ustar carstencarstenmkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.hy.js0000664000175000017500000000613414664334534023564 0ustar carstencarsten/*! * Lunr languages, `Armenian` language * https://github.com/turbobit/lunr-languages * * Copyright 2021, Manikandan Venkatasubban * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.hy = function() { this.pipeline.reset(); this.pipeline.add( lunr.hy.trimmer, lunr.hy.stopWordFilter ); }; /* lunr trimmer function */ // http://www.unicode.org/charts/ lunr.hy.wordCharacters = "[" + "A-Za-z" + "\u0530-\u058F" + // armenian alphabet "\uFB00-\uFB4F" + // armenian ligatures "]"; lunr.hy.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.hy.wordCharacters); lunr.Pipeline.registerFunction(lunr.hy.trimmer, 'trimmer-hy'); /* lunr stop word filter */ // https://www.ranks.nl/stopwords/armenian lunr.hy.stopWordFilter = lunr.generateStopWordFilter('դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում'.split(' ')); lunr.Pipeline.registerFunction(lunr.hy.stopWordFilter, 'stopWordFilter-hy'); /* lunr stemmer function */ lunr.hy.stemmer = (function() { return function(word) { // for lunr version 2 if (typeof word.update === "function") { return word.update(function(word) { return word; }) } else { // for lunr version <= 1 return word; } } })(); lunr.Pipeline.registerFunction(lunr.hy.stemmer, 'stemmer-hy'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.multi.js0000664000175000017500000000633014664334534024274 0ustar carstencarsten/** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ;(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function () { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* Set up the pipeline for indexing content in multiple languages. The corresponding lunr.{lang} files must be loaded before calling this function; English ('en') is built in. Returns: a lunr plugin for use in your indexer. Known drawback: every word will be stemmed with stemmers for every language. This could mean that sometimes words that have the same stemming root will not be stemmed as such. */ lunr.multiLanguage = function(/* lang1, lang2, ... */) { var languages = Array.prototype.slice.call(arguments); var nameSuffix = languages.join('-'); var wordCharacters = ""; var pipeline = []; var searchPipeline = []; for (var i = 0; i < languages.length; ++i) { if (languages[i] == 'en') { wordCharacters += '\\w'; pipeline.unshift(lunr.stopWordFilter); pipeline.push(lunr.stemmer); searchPipeline.push(lunr.stemmer); } else { wordCharacters += lunr[languages[i]].wordCharacters; if (lunr[languages[i]].stopWordFilter) { pipeline.unshift(lunr[languages[i]].stopWordFilter); } if (lunr[languages[i]].stemmer) { pipeline.push(lunr[languages[i]].stemmer); searchPipeline.push(lunr[languages[i]].stemmer); } } }; var multiTrimmer = lunr.trimmerSupport.generateTrimmer(wordCharacters); lunr.Pipeline.registerFunction(multiTrimmer, 'lunr-multi-trimmer-' + nameSuffix); pipeline.unshift(multiTrimmer); return function() { this.pipeline.reset(); this.pipeline.add.apply(this.pipeline, pipeline); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add.apply(this.searchPipeline, searchPipeline); } }; } } })); mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.th.js0000664000175000017500000000577614664334534023572 0ustar carstencarsten/*! * Lunr languages, `Thai` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2017, Keerati Thiwanruk * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* Thai tokenization is the same to Japanense, which does not take into account spaces. So, it uses the same logic to assign tokenization function due to different Lunr versions. */ var isLunr2 = lunr.version[0] == "2"; /* register specific locale function */ lunr.th = function() { this.pipeline.reset(); this.pipeline.add( /*lunr.th.stopWordFilter,*/ lunr.th.trimmer ); if (isLunr2) { // for lunr version 2.0.0 this.tokenizer = lunr.th.tokenizer; } else { if (lunr.tokenizer) { // for lunr version 0.6.0 lunr.tokenizer = lunr.th.tokenizer; } if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 this.tokenizerFn = lunr.th.tokenizer; } } }; /* lunr trimmer function */ lunr.th.wordCharacters = "[\u0e00-\u0e7f]"; lunr.th.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.th.wordCharacters); lunr.Pipeline.registerFunction(lunr.th.trimmer, 'trimmer-th'); var segmenter = lunr.wordcut; segmenter.init(); lunr.th.tokenizer = function(obj) { //console.log(obj); if (!arguments.length || obj == null || obj == undefined) return [] if (Array.isArray(obj)) return obj.map(function(t) { return isLunr2 ? new lunr.Token(t) : t }) var str = obj.toString().replace(/^\s+/, ''); return segmenter.cut(str).split('|'); } }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.es.js0000664000175000017500000005752614664334534023566 0ustar carstencarsten/*! * Lunr languages, `Spanish` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.es = function() { this.pipeline.reset(); this.pipeline.add( lunr.es.trimmer, lunr.es.stopWordFilter, lunr.es.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.es.stemmer) } }; /* lunr trimmer function */ lunr.es.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.es.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.es.wordCharacters); lunr.Pipeline.registerFunction(lunr.es.trimmer, 'trimmer-es'); /* lunr stemmer function */ lunr.es.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function SpanishStemmer() { var a_0 = [new Among("", -1, 6), new Among("\u00E1", 0, 1), new Among("\u00E9", 0, 2), new Among("\u00ED", 0, 3), new Among("\u00F3", 0, 4), new Among("\u00FA", 0, 5) ], a_1 = [ new Among("la", -1, -1), new Among("sela", 0, -1), new Among("le", -1, -1), new Among("me", -1, -1), new Among("se", -1, -1), new Among("lo", -1, -1), new Among("selo", 5, -1), new Among("las", -1, -1), new Among("selas", 7, -1), new Among("les", -1, -1), new Among("los", -1, -1), new Among("selos", 10, -1), new Among("nos", -1, -1) ], a_2 = [new Among("ando", -1, 6), new Among("iendo", -1, 6), new Among("yendo", -1, 7), new Among("\u00E1ndo", -1, 2), new Among("i\u00E9ndo", -1, 1), new Among("ar", -1, 6), new Among("er", -1, 6), new Among("ir", -1, 6), new Among("\u00E1r", -1, 3), new Among("\u00E9r", -1, 4), new Among("\u00EDr", -1, 5) ], a_3 = [ new Among("ic", -1, -1), new Among("ad", -1, -1), new Among("os", -1, -1), new Among("iv", -1, 1) ], a_4 = [ new Among("able", -1, 1), new Among("ible", -1, 1), new Among("ante", -1, 1) ], a_5 = [new Among("ic", -1, 1), new Among("abil", -1, 1), new Among("iv", -1, 1) ], a_6 = [ new Among("ica", -1, 1), new Among("ancia", -1, 2), new Among("encia", -1, 5), new Among("adora", -1, 2), new Among("osa", -1, 1), new Among("ista", -1, 1), new Among("iva", -1, 9), new Among("anza", -1, 1), new Among("log\u00EDa", -1, 3), new Among("idad", -1, 8), new Among("able", -1, 1), new Among("ible", -1, 1), new Among("ante", -1, 2), new Among("mente", -1, 7), new Among("amente", 13, 6), new Among("aci\u00F3n", -1, 2), new Among("uci\u00F3n", -1, 4), new Among("ico", -1, 1), new Among("ismo", -1, 1), new Among("oso", -1, 1), new Among("amiento", -1, 1), new Among("imiento", -1, 1), new Among("ivo", -1, 9), new Among("ador", -1, 2), new Among("icas", -1, 1), new Among("ancias", -1, 2), new Among("encias", -1, 5), new Among("adoras", -1, 2), new Among("osas", -1, 1), new Among("istas", -1, 1), new Among("ivas", -1, 9), new Among("anzas", -1, 1), new Among("log\u00EDas", -1, 3), new Among("idades", -1, 8), new Among("ables", -1, 1), new Among("ibles", -1, 1), new Among("aciones", -1, 2), new Among("uciones", -1, 4), new Among("adores", -1, 2), new Among("antes", -1, 2), new Among("icos", -1, 1), new Among("ismos", -1, 1), new Among("osos", -1, 1), new Among("amientos", -1, 1), new Among("imientos", -1, 1), new Among("ivos", -1, 9) ], a_7 = [ new Among("ya", -1, 1), new Among("ye", -1, 1), new Among("yan", -1, 1), new Among("yen", -1, 1), new Among("yeron", -1, 1), new Among("yendo", -1, 1), new Among("yo", -1, 1), new Among("yas", -1, 1), new Among("yes", -1, 1), new Among("yais", -1, 1), new Among("yamos", -1, 1), new Among("y\u00F3", -1, 1) ], a_8 = [ new Among("aba", -1, 2), new Among("ada", -1, 2), new Among("ida", -1, 2), new Among("ara", -1, 2), new Among("iera", -1, 2), new Among("\u00EDa", -1, 2), new Among("ar\u00EDa", 5, 2), new Among("er\u00EDa", 5, 2), new Among("ir\u00EDa", 5, 2), new Among("ad", -1, 2), new Among("ed", -1, 2), new Among("id", -1, 2), new Among("ase", -1, 2), new Among("iese", -1, 2), new Among("aste", -1, 2), new Among("iste", -1, 2), new Among("an", -1, 2), new Among("aban", 16, 2), new Among("aran", 16, 2), new Among("ieran", 16, 2), new Among("\u00EDan", 16, 2), new Among("ar\u00EDan", 20, 2), new Among("er\u00EDan", 20, 2), new Among("ir\u00EDan", 20, 2), new Among("en", -1, 1), new Among("asen", 24, 2), new Among("iesen", 24, 2), new Among("aron", -1, 2), new Among("ieron", -1, 2), new Among("ar\u00E1n", -1, 2), new Among("er\u00E1n", -1, 2), new Among("ir\u00E1n", -1, 2), new Among("ado", -1, 2), new Among("ido", -1, 2), new Among("ando", -1, 2), new Among("iendo", -1, 2), new Among("ar", -1, 2), new Among("er", -1, 2), new Among("ir", -1, 2), new Among("as", -1, 2), new Among("abas", 39, 2), new Among("adas", 39, 2), new Among("idas", 39, 2), new Among("aras", 39, 2), new Among("ieras", 39, 2), new Among("\u00EDas", 39, 2), new Among("ar\u00EDas", 45, 2), new Among("er\u00EDas", 45, 2), new Among("ir\u00EDas", 45, 2), new Among("es", -1, 1), new Among("ases", 49, 2), new Among("ieses", 49, 2), new Among("abais", -1, 2), new Among("arais", -1, 2), new Among("ierais", -1, 2), new Among("\u00EDais", -1, 2), new Among("ar\u00EDais", 55, 2), new Among("er\u00EDais", 55, 2), new Among("ir\u00EDais", 55, 2), new Among("aseis", -1, 2), new Among("ieseis", -1, 2), new Among("asteis", -1, 2), new Among("isteis", -1, 2), new Among("\u00E1is", -1, 2), new Among("\u00E9is", -1, 1), new Among("ar\u00E9is", 64, 2), new Among("er\u00E9is", 64, 2), new Among("ir\u00E9is", 64, 2), new Among("ados", -1, 2), new Among("idos", -1, 2), new Among("amos", -1, 2), new Among("\u00E1bamos", 70, 2), new Among("\u00E1ramos", 70, 2), new Among("i\u00E9ramos", 70, 2), new Among("\u00EDamos", 70, 2), new Among("ar\u00EDamos", 74, 2), new Among("er\u00EDamos", 74, 2), new Among("ir\u00EDamos", 74, 2), new Among("emos", -1, 1), new Among("aremos", 78, 2), new Among("eremos", 78, 2), new Among("iremos", 78, 2), new Among("\u00E1semos", 78, 2), new Among("i\u00E9semos", 78, 2), new Among("imos", -1, 2), new Among("ar\u00E1s", -1, 2), new Among("er\u00E1s", -1, 2), new Among("ir\u00E1s", -1, 2), new Among("\u00EDs", -1, 2), new Among("ar\u00E1", -1, 2), new Among("er\u00E1", -1, 2), new Among("ir\u00E1", -1, 2), new Among("ar\u00E9", -1, 2), new Among("er\u00E9", -1, 2), new Among("ir\u00E9", -1, 2), new Among("i\u00F3", -1, 2) ], a_9 = [ new Among("a", -1, 1), new Among("e", -1, 2), new Among("o", -1, 1), new Among("os", -1, 1), new Among("\u00E1", -1, 1), new Among("\u00E9", -1, 2), new Among("\u00ED", -1, 1), new Among("\u00F3", -1, 1) ], g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 ], I_p2, I_p1, I_pV, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function habr1() { if (sbp.out_grouping(g_v, 97, 252)) { while (!sbp.in_grouping(g_v, 97, 252)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } return false; } return true; } function habr2() { if (sbp.in_grouping(g_v, 97, 252)) { var v_1 = sbp.cursor; if (habr1()) { sbp.cursor = v_1; if (!sbp.in_grouping(g_v, 97, 252)) return true; while (!sbp.out_grouping(g_v, 97, 252)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } } return false; } return true; } function habr3() { var v_1 = sbp.cursor, v_2; if (habr2()) { sbp.cursor = v_1; if (!sbp.out_grouping(g_v, 97, 252)) return; v_2 = sbp.cursor; if (habr1()) { sbp.cursor = v_2; if (!sbp.in_grouping(g_v, 97, 252) || sbp.cursor >= sbp.limit) return; sbp.cursor++; } } I_pV = sbp.cursor; } function habr4() { while (!sbp.in_grouping(g_v, 97, 252)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 252)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } return true; } function r_mark_regions() { var v_1 = sbp.cursor; I_pV = sbp.limit; I_p1 = I_pV; I_p2 = I_pV; habr3(); sbp.cursor = v_1; if (habr4()) { I_p1 = sbp.cursor; if (habr4()) I_p2 = sbp.cursor; } } function r_postlude() { var among_var; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_0, 6); if (among_var) { sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("a"); continue; case 2: sbp.slice_from("e"); continue; case 3: sbp.slice_from("i"); continue; case 4: sbp.slice_from("o"); continue; case 5: sbp.slice_from("u"); continue; case 6: if (sbp.cursor >= sbp.limit) break; sbp.cursor++; continue; } } break; } } function r_RV() { return I_pV <= sbp.cursor; } function r_R1() { return I_p1 <= sbp.cursor; } function r_R2() { return I_p2 <= sbp.cursor; } function r_attached_pronoun() { var among_var; sbp.ket = sbp.cursor; if (sbp.find_among_b(a_1, 13)) { sbp.bra = sbp.cursor; among_var = sbp.find_among_b(a_2, 11); if (among_var && r_RV()) switch (among_var) { case 1: sbp.bra = sbp.cursor; sbp.slice_from("iendo"); break; case 2: sbp.bra = sbp.cursor; sbp.slice_from("ando"); break; case 3: sbp.bra = sbp.cursor; sbp.slice_from("ar"); break; case 4: sbp.bra = sbp.cursor; sbp.slice_from("er"); break; case 5: sbp.bra = sbp.cursor; sbp.slice_from("ir"); break; case 6: sbp.slice_del(); break; case 7: if (sbp.eq_s_b(1, "u")) sbp.slice_del(); break; } } } function habr5(a, n) { if (!r_R2()) return true; sbp.slice_del(); sbp.ket = sbp.cursor; var among_var = sbp.find_among_b(a, n); if (among_var) { sbp.bra = sbp.cursor; if (among_var == 1 && r_R2()) sbp.slice_del(); } return false; } function habr6(c1) { if (!r_R2()) return true; sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, c1)) { sbp.bra = sbp.cursor; if (r_R2()) sbp.slice_del(); } return false; } function r_standard_suffix() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_6, 46); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (!r_R2()) return false; sbp.slice_del(); break; case 2: if (habr6("ic")) return false; break; case 3: if (!r_R2()) return false; sbp.slice_from("log"); break; case 4: if (!r_R2()) return false; sbp.slice_from("u"); break; case 5: if (!r_R2()) return false; sbp.slice_from("ente"); break; case 6: if (!r_R1()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_3, 4); if (among_var) { sbp.bra = sbp.cursor; if (r_R2()) { sbp.slice_del(); if (among_var == 1) { sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "at")) { sbp.bra = sbp.cursor; if (r_R2()) sbp.slice_del(); } } } } break; case 7: if (habr5(a_4, 3)) return false; break; case 8: if (habr5(a_5, 3)) return false; break; case 9: if (habr6("at")) return false; break; } return true; } return false; } function r_y_verb_suffix() { var among_var, v_1; if (sbp.cursor >= I_pV) { v_1 = sbp.limit_backward; sbp.limit_backward = I_pV; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_7, 12); sbp.limit_backward = v_1; if (among_var) { sbp.bra = sbp.cursor; if (among_var == 1) { if (!sbp.eq_s_b(1, "u")) return false; sbp.slice_del(); } return true; } } return false; } function r_verb_suffix() { var among_var, v_1, v_2, v_3; if (sbp.cursor >= I_pV) { v_1 = sbp.limit_backward; sbp.limit_backward = I_pV; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_8, 96); sbp.limit_backward = v_1; if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: v_2 = sbp.limit - sbp.cursor; if (sbp.eq_s_b(1, "u")) { v_3 = sbp.limit - sbp.cursor; if (sbp.eq_s_b(1, "g")) sbp.cursor = sbp.limit - v_3; else sbp.cursor = sbp.limit - v_2; } else sbp.cursor = sbp.limit - v_2; sbp.bra = sbp.cursor; case 2: sbp.slice_del(); break; } } } } function r_residual_suffix() { var among_var, v_1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_9, 8); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (r_RV()) sbp.slice_del(); break; case 2: if (r_RV()) { sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "u")) { sbp.bra = sbp.cursor; v_1 = sbp.limit - sbp.cursor; if (sbp.eq_s_b(1, "g")) { sbp.cursor = sbp.limit - v_1; if (r_RV()) sbp.slice_del(); } } } break; } } } this.stem = function() { var v_1 = sbp.cursor; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_attached_pronoun(); sbp.cursor = sbp.limit; if (!r_standard_suffix()) { sbp.cursor = sbp.limit; if (!r_y_verb_suffix()) { sbp.cursor = sbp.limit; r_verb_suffix(); } } sbp.cursor = sbp.limit; r_residual_suffix(); sbp.cursor = sbp.limit_backward; r_postlude(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.es.stemmer, 'stemmer-es'); lunr.es.stopWordFilter = lunr.generateStopWordFilter('a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos'.split(' ')); lunr.Pipeline.registerFunction(lunr.es.stopWordFilter, 'stopWordFilter-es'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.fr.js0000664000175000017500000006206614664334534023561 0ustar carstencarsten/*! * Lunr languages, `French` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.fr = function() { this.pipeline.reset(); this.pipeline.add( lunr.fr.trimmer, lunr.fr.stopWordFilter, lunr.fr.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.fr.stemmer) } }; /* lunr trimmer function */ lunr.fr.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.fr.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.fr.wordCharacters); lunr.Pipeline.registerFunction(lunr.fr.trimmer, 'trimmer-fr'); /* lunr stemmer function */ lunr.fr.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function FrenchStemmer() { var a_0 = [new Among("col", -1, -1), new Among("par", -1, -1), new Among("tap", -1, -1) ], a_1 = [new Among("", -1, 4), new Among("I", 0, 1), new Among("U", 0, 2), new Among("Y", 0, 3) ], a_2 = [ new Among("iqU", -1, 3), new Among("abl", -1, 3), new Among("I\u00E8r", -1, 4), new Among("i\u00E8r", -1, 4), new Among("eus", -1, 2), new Among("iv", -1, 1) ], a_3 = [ new Among("ic", -1, 2), new Among("abil", -1, 1), new Among("iv", -1, 3) ], a_4 = [new Among("iqUe", -1, 1), new Among("atrice", -1, 2), new Among("ance", -1, 1), new Among("ence", -1, 5), new Among("logie", -1, 3), new Among("able", -1, 1), new Among("isme", -1, 1), new Among("euse", -1, 11), new Among("iste", -1, 1), new Among("ive", -1, 8), new Among("if", -1, 8), new Among("usion", -1, 4), new Among("ation", -1, 2), new Among("ution", -1, 4), new Among("ateur", -1, 2), new Among("iqUes", -1, 1), new Among("atrices", -1, 2), new Among("ances", -1, 1), new Among("ences", -1, 5), new Among("logies", -1, 3), new Among("ables", -1, 1), new Among("ismes", -1, 1), new Among("euses", -1, 11), new Among("istes", -1, 1), new Among("ives", -1, 8), new Among("ifs", -1, 8), new Among("usions", -1, 4), new Among("ations", -1, 2), new Among("utions", -1, 4), new Among("ateurs", -1, 2), new Among("ments", -1, 15), new Among("ements", 30, 6), new Among("issements", 31, 12), new Among("it\u00E9s", -1, 7), new Among("ment", -1, 15), new Among("ement", 34, 6), new Among("issement", 35, 12), new Among("amment", 34, 13), new Among("emment", 34, 14), new Among("aux", -1, 10), new Among("eaux", 39, 9), new Among("eux", -1, 1), new Among("it\u00E9", -1, 7) ], a_5 = [ new Among("ira", -1, 1), new Among("ie", -1, 1), new Among("isse", -1, 1), new Among("issante", -1, 1), new Among("i", -1, 1), new Among("irai", 4, 1), new Among("ir", -1, 1), new Among("iras", -1, 1), new Among("ies", -1, 1), new Among("\u00EEmes", -1, 1), new Among("isses", -1, 1), new Among("issantes", -1, 1), new Among("\u00EEtes", -1, 1), new Among("is", -1, 1), new Among("irais", 13, 1), new Among("issais", 13, 1), new Among("irions", -1, 1), new Among("issions", -1, 1), new Among("irons", -1, 1), new Among("issons", -1, 1), new Among("issants", -1, 1), new Among("it", -1, 1), new Among("irait", 21, 1), new Among("issait", 21, 1), new Among("issant", -1, 1), new Among("iraIent", -1, 1), new Among("issaIent", -1, 1), new Among("irent", -1, 1), new Among("issent", -1, 1), new Among("iront", -1, 1), new Among("\u00EEt", -1, 1), new Among("iriez", -1, 1), new Among("issiez", -1, 1), new Among("irez", -1, 1), new Among("issez", -1, 1) ], a_6 = [new Among("a", -1, 3), new Among("era", 0, 2), new Among("asse", -1, 3), new Among("ante", -1, 3), new Among("\u00E9e", -1, 2), new Among("ai", -1, 3), new Among("erai", 5, 2), new Among("er", -1, 2), new Among("as", -1, 3), new Among("eras", 8, 2), new Among("\u00E2mes", -1, 3), new Among("asses", -1, 3), new Among("antes", -1, 3), new Among("\u00E2tes", -1, 3), new Among("\u00E9es", -1, 2), new Among("ais", -1, 3), new Among("erais", 15, 2), new Among("ions", -1, 1), new Among("erions", 17, 2), new Among("assions", 17, 3), new Among("erons", -1, 2), new Among("ants", -1, 3), new Among("\u00E9s", -1, 2), new Among("ait", -1, 3), new Among("erait", 23, 2), new Among("ant", -1, 3), new Among("aIent", -1, 3), new Among("eraIent", 26, 2), new Among("\u00E8rent", -1, 2), new Among("assent", -1, 3), new Among("eront", -1, 2), new Among("\u00E2t", -1, 3), new Among("ez", -1, 2), new Among("iez", 32, 2), new Among("eriez", 33, 2), new Among("assiez", 33, 3), new Among("erez", 32, 2), new Among("\u00E9", -1, 2) ], a_7 = [new Among("e", -1, 3), new Among("I\u00E8re", 0, 2), new Among("i\u00E8re", 0, 2), new Among("ion", -1, 1), new Among("Ier", -1, 2), new Among("ier", -1, 2), new Among("\u00EB", -1, 4) ], a_8 = [ new Among("ell", -1, -1), new Among("eill", -1, -1), new Among("enn", -1, -1), new Among("onn", -1, -1), new Among("ett", -1, -1) ], g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 ], g_keep_with_s = [1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 ], I_p2, I_p1, I_pV, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function habr1(c1, c2, v_1) { if (sbp.eq_s(1, c1)) { sbp.ket = sbp.cursor; if (sbp.in_grouping(g_v, 97, 251)) { sbp.slice_from(c2); sbp.cursor = v_1; return true; } } return false; } function habr2(c1, c2, v_1) { if (sbp.eq_s(1, c1)) { sbp.ket = sbp.cursor; sbp.slice_from(c2); sbp.cursor = v_1; return true; } return false; } function r_prelude() { var v_1, v_2; while (true) { v_1 = sbp.cursor; if (sbp.in_grouping(g_v, 97, 251)) { sbp.bra = sbp.cursor; v_2 = sbp.cursor; if (habr1("u", "U", v_1)) continue; sbp.cursor = v_2; if (habr1("i", "I", v_1)) continue; sbp.cursor = v_2; if (habr2("y", "Y", v_1)) continue; } sbp.cursor = v_1; sbp.bra = v_1; if (!habr1("y", "Y", v_1)) { sbp.cursor = v_1; if (sbp.eq_s(1, "q")) { sbp.bra = sbp.cursor; if (habr2("u", "U", v_1)) continue; } sbp.cursor = v_1; if (v_1 >= sbp.limit) return; sbp.cursor++; } } } function habr3() { while (!sbp.in_grouping(g_v, 97, 251)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 251)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } return false; } function r_mark_regions() { var v_1 = sbp.cursor; I_pV = sbp.limit; I_p1 = I_pV; I_p2 = I_pV; if (sbp.in_grouping(g_v, 97, 251) && sbp.in_grouping(g_v, 97, 251) && sbp.cursor < sbp.limit) sbp.cursor++; else { sbp.cursor = v_1; if (!sbp.find_among(a_0, 3)) { sbp.cursor = v_1; do { if (sbp.cursor >= sbp.limit) { sbp.cursor = I_pV; break; } sbp.cursor++; } while (!sbp.in_grouping(g_v, 97, 251)); } } I_pV = sbp.cursor; sbp.cursor = v_1; if (!habr3()) { I_p1 = sbp.cursor; if (!habr3()) I_p2 = sbp.cursor; } } function r_postlude() { var among_var, v_1; while (true) { v_1 = sbp.cursor; sbp.bra = v_1; among_var = sbp.find_among(a_1, 4); if (!among_var) break; sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("i"); break; case 2: sbp.slice_from("u"); break; case 3: sbp.slice_from("y"); break; case 4: if (sbp.cursor >= sbp.limit) return; sbp.cursor++; break; } } } function r_RV() { return I_pV <= sbp.cursor; } function r_R1() { return I_p1 <= sbp.cursor; } function r_R2() { return I_p2 <= sbp.cursor; } function r_standard_suffix() { var among_var, v_1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_4, 43); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (!r_R2()) return false; sbp.slice_del(); break; case 2: if (!r_R2()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "ic")) { sbp.bra = sbp.cursor; if (!r_R2()) sbp.slice_from("iqU"); else sbp.slice_del(); } break; case 3: if (!r_R2()) return false; sbp.slice_from("log"); break; case 4: if (!r_R2()) return false; sbp.slice_from("u"); break; case 5: if (!r_R2()) return false; sbp.slice_from("ent"); break; case 6: if (!r_RV()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_2, 6); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (r_R2()) { sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "at")) { sbp.bra = sbp.cursor; if (r_R2()) sbp.slice_del(); } } break; case 2: if (r_R2()) sbp.slice_del(); else if (r_R1()) sbp.slice_from("eux"); break; case 3: if (r_R2()) sbp.slice_del(); break; case 4: if (r_RV()) sbp.slice_from("i"); break; } } break; case 7: if (!r_R2()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_3, 3); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (r_R2()) sbp.slice_del(); else sbp.slice_from("abl"); break; case 2: if (r_R2()) sbp.slice_del(); else sbp.slice_from("iqU"); break; case 3: if (r_R2()) sbp.slice_del(); break; } } break; case 8: if (!r_R2()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "at")) { sbp.bra = sbp.cursor; if (r_R2()) { sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "ic")) { sbp.bra = sbp.cursor; if (r_R2()) sbp.slice_del(); else sbp.slice_from("iqU"); break; } } } break; case 9: sbp.slice_from("eau"); break; case 10: if (!r_R1()) return false; sbp.slice_from("al"); break; case 11: if (r_R2()) sbp.slice_del(); else if (!r_R1()) return false; else sbp.slice_from("eux"); break; case 12: if (!r_R1() || !sbp.out_grouping_b(g_v, 97, 251)) return false; sbp.slice_del(); break; case 13: if (r_RV()) sbp.slice_from("ant"); return false; case 14: if (r_RV()) sbp.slice_from("ent"); return false; case 15: v_1 = sbp.limit - sbp.cursor; if (sbp.in_grouping_b(g_v, 97, 251) && r_RV()) { sbp.cursor = sbp.limit - v_1; sbp.slice_del(); } return false; } return true; } return false; } function r_i_verb_suffix() { var among_var, v_1; if (sbp.cursor < I_pV) return false; v_1 = sbp.limit_backward; sbp.limit_backward = I_pV; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_5, 35); if (!among_var) { sbp.limit_backward = v_1; return false; } sbp.bra = sbp.cursor; if (among_var == 1) { if (!sbp.out_grouping_b(g_v, 97, 251)) { sbp.limit_backward = v_1; return false; } sbp.slice_del(); } sbp.limit_backward = v_1; return true; } function r_verb_suffix() { var among_var, v_2, v_3; if (sbp.cursor < I_pV) return false; v_2 = sbp.limit_backward; sbp.limit_backward = I_pV; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_6, 38); if (!among_var) { sbp.limit_backward = v_2; return false; } sbp.bra = sbp.cursor; switch (among_var) { case 1: if (!r_R2()) { sbp.limit_backward = v_2; return false; } sbp.slice_del(); break; case 2: sbp.slice_del(); break; case 3: sbp.slice_del(); v_3 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "e")) { sbp.bra = sbp.cursor; sbp.slice_del(); } else sbp.cursor = sbp.limit - v_3; break; } sbp.limit_backward = v_2; return true; } function r_residual_suffix() { var among_var, v_1 = sbp.limit - sbp.cursor, v_2, v_4, v_5; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "s")) { sbp.bra = sbp.cursor; v_2 = sbp.limit - sbp.cursor; if (sbp.out_grouping_b(g_keep_with_s, 97, 232)) { sbp.cursor = sbp.limit - v_2; sbp.slice_del(); } else sbp.cursor = sbp.limit - v_1; } else sbp.cursor = sbp.limit - v_1; if (sbp.cursor >= I_pV) { v_4 = sbp.limit_backward; sbp.limit_backward = I_pV; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_7, 7); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (r_R2()) { v_5 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "s")) { sbp.cursor = sbp.limit - v_5; if (!sbp.eq_s_b(1, "t")) break; } sbp.slice_del(); } break; case 2: sbp.slice_from("i"); break; case 3: sbp.slice_del(); break; case 4: if (sbp.eq_s_b(2, "gu")) sbp.slice_del(); break; } } sbp.limit_backward = v_4; } } function r_un_double() { var v_1 = sbp.limit - sbp.cursor; if (sbp.find_among_b(a_8, 5)) { sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.bra = sbp.cursor; sbp.slice_del(); } } } function r_un_accent() { var v_1, v_2 = 1; while (sbp.out_grouping_b(g_v, 97, 251)) v_2--; if (v_2 <= 0) { sbp.ket = sbp.cursor; v_1 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "\u00E9")) { sbp.cursor = sbp.limit - v_1; if (!sbp.eq_s_b(1, "\u00E8")) return; } sbp.bra = sbp.cursor; sbp.slice_from("e"); } } function habr5() { if (!r_standard_suffix()) { sbp.cursor = sbp.limit; if (!r_i_verb_suffix()) { sbp.cursor = sbp.limit; if (!r_verb_suffix()) { sbp.cursor = sbp.limit; r_residual_suffix(); return; } } } sbp.cursor = sbp.limit; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "Y")) { sbp.bra = sbp.cursor; sbp.slice_from("i"); } else { sbp.cursor = sbp.limit; if (sbp.eq_s_b(1, "\u00E7")) { sbp.bra = sbp.cursor; sbp.slice_from("c"); } } } this.stem = function() { var v_1 = sbp.cursor; r_prelude(); sbp.cursor = v_1; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; habr5(); sbp.cursor = sbp.limit; r_un_double(); sbp.cursor = sbp.limit; r_un_accent(); sbp.cursor = sbp.limit_backward; r_postlude(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.fr.stemmer, 'stemmer-fr'); lunr.fr.stopWordFilter = lunr.generateStopWordFilter('ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes'.split(' ')); lunr.Pipeline.registerFunction(lunr.fr.stopWordFilter, 'stopWordFilter-fr'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.ja.js0000664000175000017500000001375514664334534023545 0ustar carstencarsten/*! * Lunr languages, `Japanese` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Chad Liu * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* Japanese tokenization is trickier, since it does not take into account spaces. Since the tokenization function is represented different internally for each of the Lunr versions, this had to be done in order to try to try to pick the best way of doing this based on the Lunr version */ var isLunr2 = lunr.version[0] == "2"; /* register specific locale function */ lunr.ja = function() { this.pipeline.reset(); this.pipeline.add( lunr.ja.trimmer, lunr.ja.stopWordFilter, lunr.ja.stemmer ); // change the tokenizer for japanese one if (isLunr2) { // for lunr version 2.0.0 this.tokenizer = lunr.ja.tokenizer; } else { if (lunr.tokenizer) { // for lunr version 0.6.0 lunr.tokenizer = lunr.ja.tokenizer; } if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 this.tokenizerFn = lunr.ja.tokenizer; } } }; var segmenter = new lunr.TinySegmenter(); // インスタンス生成 lunr.ja.tokenizer = function(obj) { var i; var str; var len; var segs; var tokens; var char; var sliceLength; var sliceStart; var sliceEnd; var segStart; if (!arguments.length || obj == null || obj == undefined) return []; if (Array.isArray(obj)) { return obj.map( function(t) { return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase(); } ); } str = obj.toString().toLowerCase().replace(/^\s+/, ''); for (i = str.length - 1; i >= 0; i--) { if (/\S/.test(str.charAt(i))) { str = str.substring(0, i + 1); break; } } tokens = []; len = str.length; for (sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { char = str.charAt(sliceEnd); sliceLength = sliceEnd - sliceStart; if ((char.match(/\s/) || sliceEnd == len)) { if (sliceLength > 0) { segs = segmenter.segment(str.slice(sliceStart, sliceEnd)).filter( function(token) { return !!token; } ); segStart = sliceStart; for (i = 0; i < segs.length; i++) { if (isLunr2) { tokens.push( new lunr.Token( segs[i], { position: [segStart, segs[i].length], index: tokens.length } ) ); } else { tokens.push(segs[i]); } segStart += segs[i].length; } } sliceStart = sliceEnd + 1; } } return tokens; } /* lunr stemmer function */ lunr.ja.stemmer = (function() { /* TODO japanese stemmer */ return function(word) { return word; } })(); lunr.Pipeline.registerFunction(lunr.ja.stemmer, 'stemmer-ja'); /* lunr trimmer function */ lunr.ja.wordCharacters = "一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9"; lunr.ja.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.ja.wordCharacters); lunr.Pipeline.registerFunction(lunr.ja.trimmer, 'trimmer-ja'); /* lunr stop word filter. see http://www.ranks.nl/stopwords/japanese */ lunr.ja.stopWordFilter = lunr.generateStopWordFilter( 'これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし'.split(' ')); lunr.Pipeline.registerFunction(lunr.ja.stopWordFilter, 'stopWordFilter-ja'); // alias ja => jp for backward-compatibility. // jp is the country code, while ja is the language code // a new lunr.ja.js has been created, but in order to // keep the backward compatibility, we'll leave the lunr.jp.js // here for a while, and just make it use the new lunr.ja.js lunr.jp = lunr.ja; lunr.Pipeline.registerFunction(lunr.jp.stemmer, 'stemmer-jp'); lunr.Pipeline.registerFunction(lunr.jp.trimmer, 'trimmer-jp'); lunr.Pipeline.registerFunction(lunr.jp.stopWordFilter, 'stopWordFilter-jp'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.jp.js0000664000175000017500000000042114664334534023546 0ustar carstencarsten// jp is the country code, while ja is the language code // a new lunr.ja.js has been created, but in order to // keep the backward compatibility, we'll leave the lunr.jp.js // here for a while, and just make it use the new lunr.ja.js module.exports = require('./lunr.ja');mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/tinyseg.js0000664000175000017500000005453614664334534023660 0ustar carstencarsten/** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ;(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function () { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { // TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript // (c) 2008 Taku Kudo // TinySegmenter is freely distributable under the terms of a new BSD licence. // For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt function TinySegmenter() { var patterns = { "[一二三四五六七八九十百千万億兆]":"M", "[一-龠々〆ヵヶ]":"H", "[ぁ-ん]":"I", "[ァ-ヴーア-ン゙ー]":"K", "[a-zA-Za-zA-Z]":"A", "[0-90-9]":"N" } this.chartype_ = []; for (var i in patterns) { var regexp = new RegExp(i); this.chartype_.push([regexp, patterns[i]]); } this.BIAS__ = -332 this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378}; this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920}; this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266}; this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352}; this.BP2__ = {"BO":60,"OO":-1762}; this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965}; this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146}; this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699}; this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973}; this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682}; this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669}; this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990}; this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832}; this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649}; this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393}; this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841}; this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68}; this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591}; this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685}; this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156}; this.TW1__ = {"につい":-4681,"東京都":2026}; this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216}; this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287}; this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865}; this.UC1__ = {"A":484,"K":93,"M":645,"O":-505}; this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646}; this.UC3__ = {"A":-1370,"I":2311}; this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646}; this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831}; this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387}; this.UP1__ = {"O":-214}; this.UP2__ = {"B":69,"O":935}; this.UP3__ = {"B":189}; this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422}; this.UQ2__ = {"BH":216,"BI":113,"OK":1759}; this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212}; this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135}; this.UW2__ = {",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568}; this.UW3__ = {",":4889,"1":-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278}; this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637}; this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343}; this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496}; return this; } TinySegmenter.prototype.ctype_ = function(str) { for (var i in this.chartype_) { if (str.match(this.chartype_[i][0])) { return this.chartype_[i][1]; } } return "O"; } TinySegmenter.prototype.ts_ = function(v) { if (v) { return v; } return 0; } TinySegmenter.prototype.segment = function(input) { if (input == null || input == undefined || input == "") { return []; } var result = []; var seg = ["B3","B2","B1"]; var ctype = ["O","O","O"]; var o = input.split(""); for (i = 0; i < o.length; ++i) { seg.push(o[i]); ctype.push(this.ctype_(o[i])) } seg.push("E1"); seg.push("E2"); seg.push("E3"); ctype.push("O"); ctype.push("O"); ctype.push("O"); var word = seg[3]; var p1 = "U"; var p2 = "U"; var p3 = "U"; for (var i = 4; i < seg.length - 3; ++i) { var score = this.BIAS__; var w1 = seg[i-3]; var w2 = seg[i-2]; var w3 = seg[i-1]; var w4 = seg[i]; var w5 = seg[i+1]; var w6 = seg[i+2]; var c1 = ctype[i-3]; var c2 = ctype[i-2]; var c3 = ctype[i-1]; var c4 = ctype[i]; var c5 = ctype[i+1]; var c6 = ctype[i+2]; score += this.ts_(this.UP1__[p1]); score += this.ts_(this.UP2__[p2]); score += this.ts_(this.UP3__[p3]); score += this.ts_(this.BP1__[p1 + p2]); score += this.ts_(this.BP2__[p2 + p3]); score += this.ts_(this.UW1__[w1]); score += this.ts_(this.UW2__[w2]); score += this.ts_(this.UW3__[w3]); score += this.ts_(this.UW4__[w4]); score += this.ts_(this.UW5__[w5]); score += this.ts_(this.UW6__[w6]); score += this.ts_(this.BW1__[w2 + w3]); score += this.ts_(this.BW2__[w3 + w4]); score += this.ts_(this.BW3__[w4 + w5]); score += this.ts_(this.TW1__[w1 + w2 + w3]); score += this.ts_(this.TW2__[w2 + w3 + w4]); score += this.ts_(this.TW3__[w3 + w4 + w5]); score += this.ts_(this.TW4__[w4 + w5 + w6]); score += this.ts_(this.UC1__[c1]); score += this.ts_(this.UC2__[c2]); score += this.ts_(this.UC3__[c3]); score += this.ts_(this.UC4__[c4]); score += this.ts_(this.UC5__[c5]); score += this.ts_(this.UC6__[c6]); score += this.ts_(this.BC1__[c2 + c3]); score += this.ts_(this.BC2__[c3 + c4]); score += this.ts_(this.BC3__[c4 + c5]); score += this.ts_(this.TC1__[c1 + c2 + c3]); score += this.ts_(this.TC2__[c2 + c3 + c4]); score += this.ts_(this.TC3__[c3 + c4 + c5]); score += this.ts_(this.TC4__[c4 + c5 + c6]); // score += this.ts_(this.TC5__[c4 + c5 + c6]); score += this.ts_(this.UQ1__[p1 + c1]); score += this.ts_(this.UQ2__[p2 + c2]); score += this.ts_(this.UQ3__[p3 + c3]); score += this.ts_(this.BQ1__[p2 + c2 + c3]); score += this.ts_(this.BQ2__[p2 + c3 + c4]); score += this.ts_(this.BQ3__[p3 + c2 + c3]); score += this.ts_(this.BQ4__[p3 + c3 + c4]); score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]); score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]); score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]); score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]); var p = "O"; if (score > 0) { result.push(word); word = ""; p = "B"; } p1 = p2; p2 = p3; p3 = p; word += seg[i]; } result.push(word); return result; } lunr.TinySegmenter = TinySegmenter; }; }));mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.de.js0000664000175000017500000003317514664334534023541 0ustar carstencarsten/*! * Lunr languages, `German` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.de = function() { this.pipeline.reset(); this.pipeline.add( lunr.de.trimmer, lunr.de.stopWordFilter, lunr.de.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.de.stemmer) } }; /* lunr trimmer function */ lunr.de.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.de.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.de.wordCharacters); lunr.Pipeline.registerFunction(lunr.de.trimmer, 'trimmer-de'); /* lunr stemmer function */ lunr.de.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function GermanStemmer() { var a_0 = [new Among("", -1, 6), new Among("U", 0, 2), new Among("Y", 0, 1), new Among("\u00E4", 0, 3), new Among("\u00F6", 0, 4), new Among("\u00FC", 0, 5) ], a_1 = [ new Among("e", -1, 2), new Among("em", -1, 1), new Among("en", -1, 2), new Among("ern", -1, 1), new Among("er", -1, 1), new Among("s", -1, 3), new Among("es", 5, 2) ], a_2 = [new Among("en", -1, 1), new Among("er", -1, 1), new Among("st", -1, 2), new Among("est", 2, 1) ], a_3 = [new Among("ig", -1, 1), new Among("lich", -1, 1) ], a_4 = [new Among("end", -1, 1), new Among("ig", -1, 2), new Among("ung", -1, 1), new Among("lich", -1, 3), new Among("isch", -1, 2), new Among("ik", -1, 2), new Among("heit", -1, 3), new Among("keit", -1, 4) ], g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 ], g_s_ending = [117, 30, 5], g_st_ending = [ 117, 30, 4 ], I_x, I_p2, I_p1, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function habr1(c1, c2, v_1) { if (sbp.eq_s(1, c1)) { sbp.ket = sbp.cursor; if (sbp.in_grouping(g_v, 97, 252)) { sbp.slice_from(c2); sbp.cursor = v_1; return true; } } return false; } function r_prelude() { var v_1 = sbp.cursor, v_2, v_3, v_4, v_5; while (true) { v_2 = sbp.cursor; sbp.bra = v_2; if (sbp.eq_s(1, "\u00DF")) { sbp.ket = sbp.cursor; sbp.slice_from("ss"); } else { if (v_2 >= sbp.limit) break; sbp.cursor = v_2 + 1; } } sbp.cursor = v_1; while (true) { v_3 = sbp.cursor; while (true) { v_4 = sbp.cursor; if (sbp.in_grouping(g_v, 97, 252)) { v_5 = sbp.cursor; sbp.bra = v_5; if (habr1("u", "U", v_4)) break; sbp.cursor = v_5; if (habr1("y", "Y", v_4)) break; } if (v_4 >= sbp.limit) { sbp.cursor = v_3; return; } sbp.cursor = v_4 + 1; } } } function habr2() { while (!sbp.in_grouping(g_v, 97, 252)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 252)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } return false; } function r_mark_regions() { I_p1 = sbp.limit; I_p2 = I_p1; var c = sbp.cursor + 3; if (0 <= c && c <= sbp.limit) { I_x = c; if (!habr2()) { I_p1 = sbp.cursor; if (I_p1 < I_x) I_p1 = I_x; if (!habr2()) I_p2 = sbp.cursor; } } } function r_postlude() { var among_var, v_1; while (true) { v_1 = sbp.cursor; sbp.bra = v_1; among_var = sbp.find_among(a_0, 6); if (!among_var) return; sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("y"); break; case 2: case 5: sbp.slice_from("u"); break; case 3: sbp.slice_from("a"); break; case 4: sbp.slice_from("o"); break; case 6: if (sbp.cursor >= sbp.limit) return; sbp.cursor++; break; } } } function r_R1() { return I_p1 <= sbp.cursor; } function r_R2() { return I_p2 <= sbp.cursor; } function r_standard_suffix() { var among_var, v_1 = sbp.limit - sbp.cursor, v_2, v_3, v_4; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_1, 7); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: sbp.slice_del(); break; case 2: sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "s")) { sbp.bra = sbp.cursor; if (sbp.eq_s_b(3, "nis")) sbp.slice_del(); } break; case 3: if (sbp.in_grouping_b(g_s_ending, 98, 116)) sbp.slice_del(); break; } } } sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_2, 4); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: sbp.slice_del(); break; case 2: if (sbp.in_grouping_b(g_st_ending, 98, 116)) { var c = sbp.cursor - 3; if (sbp.limit_backward <= c && c <= sbp.limit) { sbp.cursor = c; sbp.slice_del(); } } break; } } } sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_4, 8); if (among_var) { sbp.bra = sbp.cursor; if (r_R2()) { switch (among_var) { case 1: sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "ig")) { sbp.bra = sbp.cursor; v_2 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "e")) { sbp.cursor = sbp.limit - v_2; if (r_R2()) sbp.slice_del(); } } break; case 2: v_3 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "e")) { sbp.cursor = sbp.limit - v_3; sbp.slice_del(); } break; case 3: sbp.slice_del(); sbp.ket = sbp.cursor; v_4 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(2, "er")) { sbp.cursor = sbp.limit - v_4; if (!sbp.eq_s_b(2, "en")) break; } sbp.bra = sbp.cursor; if (r_R1()) sbp.slice_del(); break; case 4: sbp.slice_del(); sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_3, 2); if (among_var) { sbp.bra = sbp.cursor; if (r_R2() && among_var == 1) sbp.slice_del(); } break; } } } } this.stem = function() { var v_1 = sbp.cursor; r_prelude(); sbp.cursor = v_1; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_standard_suffix(); sbp.cursor = sbp.limit_backward; r_postlude(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.de.stemmer, 'stemmer-de'); lunr.de.stopWordFilter = lunr.generateStopWordFilter('aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über'.split(' ')); lunr.Pipeline.registerFunction(lunr.de.stopWordFilter, 'stopWordFilter-de'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.hu.js0000664000175000017500000005142114664334534023557 0ustar carstencarsten/*! * Lunr languages, `Hungarian` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.hu = function() { this.pipeline.reset(); this.pipeline.add( lunr.hu.trimmer, lunr.hu.stopWordFilter, lunr.hu.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.hu.stemmer) } }; /* lunr trimmer function */ lunr.hu.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.hu.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.hu.wordCharacters); lunr.Pipeline.registerFunction(lunr.hu.trimmer, 'trimmer-hu'); /* lunr stemmer function */ lunr.hu.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function HungarianStemmer() { var a_0 = [new Among("cs", -1, -1), new Among("dzs", -1, -1), new Among("gy", -1, -1), new Among("ly", -1, -1), new Among("ny", -1, -1), new Among("sz", -1, -1), new Among("ty", -1, -1), new Among("zs", -1, -1) ], a_1 = [ new Among("\u00E1", -1, 1), new Among("\u00E9", -1, 2) ], a_2 = [ new Among("bb", -1, -1), new Among("cc", -1, -1), new Among("dd", -1, -1), new Among("ff", -1, -1), new Among("gg", -1, -1), new Among("jj", -1, -1), new Among("kk", -1, -1), new Among("ll", -1, -1), new Among("mm", -1, -1), new Among("nn", -1, -1), new Among("pp", -1, -1), new Among("rr", -1, -1), new Among("ccs", -1, -1), new Among("ss", -1, -1), new Among("zzs", -1, -1), new Among("tt", -1, -1), new Among("vv", -1, -1), new Among("ggy", -1, -1), new Among("lly", -1, -1), new Among("nny", -1, -1), new Among("tty", -1, -1), new Among("ssz", -1, -1), new Among("zz", -1, -1) ], a_3 = [new Among("al", -1, 1), new Among("el", -1, 2) ], a_4 = [new Among("ba", -1, -1), new Among("ra", -1, -1), new Among("be", -1, -1), new Among("re", -1, -1), new Among("ig", -1, -1), new Among("nak", -1, -1), new Among("nek", -1, -1), new Among("val", -1, -1), new Among("vel", -1, -1), new Among("ul", -1, -1), new Among("n\u00E1l", -1, -1), new Among("n\u00E9l", -1, -1), new Among("b\u00F3l", -1, -1), new Among("r\u00F3l", -1, -1), new Among("t\u00F3l", -1, -1), new Among("b\u00F5l", -1, -1), new Among("r\u00F5l", -1, -1), new Among("t\u00F5l", -1, -1), new Among("\u00FCl", -1, -1), new Among("n", -1, -1), new Among("an", 19, -1), new Among("ban", 20, -1), new Among("en", 19, -1), new Among("ben", 22, -1), new Among("k\u00E9ppen", 22, -1), new Among("on", 19, -1), new Among("\u00F6n", 19, -1), new Among("k\u00E9pp", -1, -1), new Among("kor", -1, -1), new Among("t", -1, -1), new Among("at", 29, -1), new Among("et", 29, -1), new Among("k\u00E9nt", 29, -1), new Among("ank\u00E9nt", 32, -1), new Among("enk\u00E9nt", 32, -1), new Among("onk\u00E9nt", 32, -1), new Among("ot", 29, -1), new Among("\u00E9rt", 29, -1), new Among("\u00F6t", 29, -1), new Among("hez", -1, -1), new Among("hoz", -1, -1), new Among("h\u00F6z", -1, -1), new Among("v\u00E1", -1, -1), new Among("v\u00E9", -1, -1) ], a_5 = [new Among("\u00E1n", -1, 2), new Among("\u00E9n", -1, 1), new Among("\u00E1nk\u00E9nt", -1, 3) ], a_6 = [ new Among("stul", -1, 2), new Among("astul", 0, 1), new Among("\u00E1stul", 0, 3), new Among("st\u00FCl", -1, 2), new Among("est\u00FCl", 3, 1), new Among("\u00E9st\u00FCl", 3, 4) ], a_7 = [ new Among("\u00E1", -1, 1), new Among("\u00E9", -1, 2) ], a_8 = [ new Among("k", -1, 7), new Among("ak", 0, 4), new Among("ek", 0, 6), new Among("ok", 0, 5), new Among("\u00E1k", 0, 1), new Among("\u00E9k", 0, 2), new Among("\u00F6k", 0, 3) ], a_9 = [new Among("\u00E9i", -1, 7), new Among("\u00E1\u00E9i", 0, 6), new Among("\u00E9\u00E9i", 0, 5), new Among("\u00E9", -1, 9), new Among("k\u00E9", 3, 4), new Among("ak\u00E9", 4, 1), new Among("ek\u00E9", 4, 1), new Among("ok\u00E9", 4, 1), new Among("\u00E1k\u00E9", 4, 3), new Among("\u00E9k\u00E9", 4, 2), new Among("\u00F6k\u00E9", 4, 1), new Among("\u00E9\u00E9", 3, 8) ], a_10 = [new Among("a", -1, 18), new Among("ja", 0, 17), new Among("d", -1, 16), new Among("ad", 2, 13), new Among("ed", 2, 13), new Among("od", 2, 13), new Among("\u00E1d", 2, 14), new Among("\u00E9d", 2, 15), new Among("\u00F6d", 2, 13), new Among("e", -1, 18), new Among("je", 9, 17), new Among("nk", -1, 4), new Among("unk", 11, 1), new Among("\u00E1nk", 11, 2), new Among("\u00E9nk", 11, 3), new Among("\u00FCnk", 11, 1), new Among("uk", -1, 8), new Among("juk", 16, 7), new Among("\u00E1juk", 17, 5), new Among("\u00FCk", -1, 8), new Among("j\u00FCk", 19, 7), new Among("\u00E9j\u00FCk", 20, 6), new Among("m", -1, 12), new Among("am", 22, 9), new Among("em", 22, 9), new Among("om", 22, 9), new Among("\u00E1m", 22, 10), new Among("\u00E9m", 22, 11), new Among("o", -1, 18), new Among("\u00E1", -1, 19), new Among("\u00E9", -1, 20) ], a_11 = [ new Among("id", -1, 10), new Among("aid", 0, 9), new Among("jaid", 1, 6), new Among("eid", 0, 9), new Among("jeid", 3, 6), new Among("\u00E1id", 0, 7), new Among("\u00E9id", 0, 8), new Among("i", -1, 15), new Among("ai", 7, 14), new Among("jai", 8, 11), new Among("ei", 7, 14), new Among("jei", 10, 11), new Among("\u00E1i", 7, 12), new Among("\u00E9i", 7, 13), new Among("itek", -1, 24), new Among("eitek", 14, 21), new Among("jeitek", 15, 20), new Among("\u00E9itek", 14, 23), new Among("ik", -1, 29), new Among("aik", 18, 26), new Among("jaik", 19, 25), new Among("eik", 18, 26), new Among("jeik", 21, 25), new Among("\u00E1ik", 18, 27), new Among("\u00E9ik", 18, 28), new Among("ink", -1, 20), new Among("aink", 25, 17), new Among("jaink", 26, 16), new Among("eink", 25, 17), new Among("jeink", 28, 16), new Among("\u00E1ink", 25, 18), new Among("\u00E9ink", 25, 19), new Among("aitok", -1, 21), new Among("jaitok", 32, 20), new Among("\u00E1itok", -1, 22), new Among("im", -1, 5), new Among("aim", 35, 4), new Among("jaim", 36, 1), new Among("eim", 35, 4), new Among("jeim", 38, 1), new Among("\u00E1im", 35, 2), new Among("\u00E9im", 35, 3) ], g_v = [ 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 52, 14 ], I_p1, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function r_mark_regions() { var v_1 = sbp.cursor, v_2; I_p1 = sbp.limit; if (sbp.in_grouping(g_v, 97, 252)) { while (true) { v_2 = sbp.cursor; if (sbp.out_grouping(g_v, 97, 252)) { sbp.cursor = v_2; if (!sbp.find_among(a_0, 8)) { sbp.cursor = v_2; if (v_2 < sbp.limit) sbp.cursor++; } I_p1 = sbp.cursor; return; } sbp.cursor = v_2; if (v_2 >= sbp.limit) { I_p1 = v_2; return; } sbp.cursor++; } } sbp.cursor = v_1; if (sbp.out_grouping(g_v, 97, 252)) { while (!sbp.in_grouping(g_v, 97, 252)) { if (sbp.cursor >= sbp.limit) return; sbp.cursor++; } I_p1 = sbp.cursor; } } function r_R1() { return I_p1 <= sbp.cursor; } function r_v_ending() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_1, 2); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: sbp.slice_from("a"); break; case 2: sbp.slice_from("e"); break; } } } } function r_double() { var v_1 = sbp.limit - sbp.cursor; if (!sbp.find_among_b(a_2, 23)) return false; sbp.cursor = sbp.limit - v_1; return true; } function r_undouble() { if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.ket = sbp.cursor; var c = sbp.cursor - 1; if (sbp.limit_backward <= c && c <= sbp.limit) { sbp.cursor = c; sbp.bra = c; sbp.slice_del(); } } } function r_instrum() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_3, 2); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { if (among_var == 1 || among_var == 2) if (!r_double()) return; sbp.slice_del(); r_undouble(); } } } function r_case() { sbp.ket = sbp.cursor; if (sbp.find_among_b(a_4, 44)) { sbp.bra = sbp.cursor; if (r_R1()) { sbp.slice_del(); r_v_ending(); } } } function r_case_special() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_5, 3); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: sbp.slice_from("e"); break; case 2: case 3: sbp.slice_from("a"); break; } } } } function r_case_other() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_6, 6); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: case 2: sbp.slice_del(); break; case 3: sbp.slice_from("a"); break; case 4: sbp.slice_from("e"); break; } } } } function r_factive() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_7, 2); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { if (among_var == 1 || among_var == 2) if (!r_double()) return; sbp.slice_del(); r_undouble() } } } function r_plural() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_8, 7); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: sbp.slice_from("a"); break; case 2: sbp.slice_from("e"); break; case 3: case 4: case 5: case 6: case 7: sbp.slice_del(); break; } } } } function r_owned() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_9, 12); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: case 4: case 7: case 9: sbp.slice_del(); break; case 2: case 5: case 8: sbp.slice_from("e"); break; case 3: case 6: sbp.slice_from("a"); break; } } } } function r_sing_owner() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_10, 31); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: case 4: case 7: case 8: case 9: case 12: case 13: case 16: case 17: case 18: sbp.slice_del(); break; case 2: case 5: case 10: case 14: case 19: sbp.slice_from("a"); break; case 3: case 6: case 11: case 15: case 20: sbp.slice_from("e"); break; } } } } function r_plur_owner() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_11, 42); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: case 4: case 5: case 6: case 9: case 10: case 11: case 14: case 15: case 16: case 17: case 20: case 21: case 24: case 25: case 26: case 29: sbp.slice_del(); break; case 2: case 7: case 12: case 18: case 22: case 27: sbp.slice_from("a"); break; case 3: case 8: case 13: case 19: case 23: case 28: sbp.slice_from("e"); break; } } } } this.stem = function() { var v_1 = sbp.cursor; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_instrum(); sbp.cursor = sbp.limit; r_case(); sbp.cursor = sbp.limit; r_case_special(); sbp.cursor = sbp.limit; r_case_other(); sbp.cursor = sbp.limit; r_factive(); sbp.cursor = sbp.limit; r_owned(); sbp.cursor = sbp.limit; r_sing_owner(); sbp.cursor = sbp.limit; r_plur_owner(); sbp.cursor = sbp.limit; r_plural(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.hu.stemmer, 'stemmer-hu'); lunr.hu.stopWordFilter = lunr.generateStopWordFilter('a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra'.split(' ')); lunr.Pipeline.registerFunction(lunr.hu.stopWordFilter, 'stopWordFilter-hu'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.pt.js0000664000175000017500000005317514664334534023576 0ustar carstencarsten/*! * Lunr languages, `Portuguese` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.pt = function() { this.pipeline.reset(); this.pipeline.add( lunr.pt.trimmer, lunr.pt.stopWordFilter, lunr.pt.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.pt.stemmer) } }; /* lunr trimmer function */ lunr.pt.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.pt.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.pt.wordCharacters); lunr.Pipeline.registerFunction(lunr.pt.trimmer, 'trimmer-pt'); /* lunr stemmer function */ lunr.pt.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function PortugueseStemmer() { var a_0 = [new Among("", -1, 3), new Among("\u00E3", 0, 1), new Among("\u00F5", 0, 2) ], a_1 = [new Among("", -1, 3), new Among("a~", 0, 1), new Among("o~", 0, 2) ], a_2 = [ new Among("ic", -1, -1), new Among("ad", -1, -1), new Among("os", -1, -1), new Among("iv", -1, 1) ], a_3 = [ new Among("ante", -1, 1), new Among("avel", -1, 1), new Among("\u00EDvel", -1, 1) ], a_4 = [new Among("ic", -1, 1), new Among("abil", -1, 1), new Among("iv", -1, 1) ], a_5 = [ new Among("ica", -1, 1), new Among("\u00E2ncia", -1, 1), new Among("\u00EAncia", -1, 4), new Among("ira", -1, 9), new Among("adora", -1, 1), new Among("osa", -1, 1), new Among("ista", -1, 1), new Among("iva", -1, 8), new Among("eza", -1, 1), new Among("log\u00EDa", -1, 2), new Among("idade", -1, 7), new Among("ante", -1, 1), new Among("mente", -1, 6), new Among("amente", 12, 5), new Among("\u00E1vel", -1, 1), new Among("\u00EDvel", -1, 1), new Among("uci\u00F3n", -1, 3), new Among("ico", -1, 1), new Among("ismo", -1, 1), new Among("oso", -1, 1), new Among("amento", -1, 1), new Among("imento", -1, 1), new Among("ivo", -1, 8), new Among("a\u00E7a~o", -1, 1), new Among("ador", -1, 1), new Among("icas", -1, 1), new Among("\u00EAncias", -1, 4), new Among("iras", -1, 9), new Among("adoras", -1, 1), new Among("osas", -1, 1), new Among("istas", -1, 1), new Among("ivas", -1, 8), new Among("ezas", -1, 1), new Among("log\u00EDas", -1, 2), new Among("idades", -1, 7), new Among("uciones", -1, 3), new Among("adores", -1, 1), new Among("antes", -1, 1), new Among("a\u00E7o~es", -1, 1), new Among("icos", -1, 1), new Among("ismos", -1, 1), new Among("osos", -1, 1), new Among("amentos", -1, 1), new Among("imentos", -1, 1), new Among("ivos", -1, 8) ], a_6 = [new Among("ada", -1, 1), new Among("ida", -1, 1), new Among("ia", -1, 1), new Among("aria", 2, 1), new Among("eria", 2, 1), new Among("iria", 2, 1), new Among("ara", -1, 1), new Among("era", -1, 1), new Among("ira", -1, 1), new Among("ava", -1, 1), new Among("asse", -1, 1), new Among("esse", -1, 1), new Among("isse", -1, 1), new Among("aste", -1, 1), new Among("este", -1, 1), new Among("iste", -1, 1), new Among("ei", -1, 1), new Among("arei", 16, 1), new Among("erei", 16, 1), new Among("irei", 16, 1), new Among("am", -1, 1), new Among("iam", 20, 1), new Among("ariam", 21, 1), new Among("eriam", 21, 1), new Among("iriam", 21, 1), new Among("aram", 20, 1), new Among("eram", 20, 1), new Among("iram", 20, 1), new Among("avam", 20, 1), new Among("em", -1, 1), new Among("arem", 29, 1), new Among("erem", 29, 1), new Among("irem", 29, 1), new Among("assem", 29, 1), new Among("essem", 29, 1), new Among("issem", 29, 1), new Among("ado", -1, 1), new Among("ido", -1, 1), new Among("ando", -1, 1), new Among("endo", -1, 1), new Among("indo", -1, 1), new Among("ara~o", -1, 1), new Among("era~o", -1, 1), new Among("ira~o", -1, 1), new Among("ar", -1, 1), new Among("er", -1, 1), new Among("ir", -1, 1), new Among("as", -1, 1), new Among("adas", 47, 1), new Among("idas", 47, 1), new Among("ias", 47, 1), new Among("arias", 50, 1), new Among("erias", 50, 1), new Among("irias", 50, 1), new Among("aras", 47, 1), new Among("eras", 47, 1), new Among("iras", 47, 1), new Among("avas", 47, 1), new Among("es", -1, 1), new Among("ardes", 58, 1), new Among("erdes", 58, 1), new Among("irdes", 58, 1), new Among("ares", 58, 1), new Among("eres", 58, 1), new Among("ires", 58, 1), new Among("asses", 58, 1), new Among("esses", 58, 1), new Among("isses", 58, 1), new Among("astes", 58, 1), new Among("estes", 58, 1), new Among("istes", 58, 1), new Among("is", -1, 1), new Among("ais", 71, 1), new Among("eis", 71, 1), new Among("areis", 73, 1), new Among("ereis", 73, 1), new Among("ireis", 73, 1), new Among("\u00E1reis", 73, 1), new Among("\u00E9reis", 73, 1), new Among("\u00EDreis", 73, 1), new Among("\u00E1sseis", 73, 1), new Among("\u00E9sseis", 73, 1), new Among("\u00EDsseis", 73, 1), new Among("\u00E1veis", 73, 1), new Among("\u00EDeis", 73, 1), new Among("ar\u00EDeis", 84, 1), new Among("er\u00EDeis", 84, 1), new Among("ir\u00EDeis", 84, 1), new Among("ados", -1, 1), new Among("idos", -1, 1), new Among("amos", -1, 1), new Among("\u00E1ramos", 90, 1), new Among("\u00E9ramos", 90, 1), new Among("\u00EDramos", 90, 1), new Among("\u00E1vamos", 90, 1), new Among("\u00EDamos", 90, 1), new Among("ar\u00EDamos", 95, 1), new Among("er\u00EDamos", 95, 1), new Among("ir\u00EDamos", 95, 1), new Among("emos", -1, 1), new Among("aremos", 99, 1), new Among("eremos", 99, 1), new Among("iremos", 99, 1), new Among("\u00E1ssemos", 99, 1), new Among("\u00EAssemos", 99, 1), new Among("\u00EDssemos", 99, 1), new Among("imos", -1, 1), new Among("armos", -1, 1), new Among("ermos", -1, 1), new Among("irmos", -1, 1), new Among("\u00E1mos", -1, 1), new Among("ar\u00E1s", -1, 1), new Among("er\u00E1s", -1, 1), new Among("ir\u00E1s", -1, 1), new Among("eu", -1, 1), new Among("iu", -1, 1), new Among("ou", -1, 1), new Among("ar\u00E1", -1, 1), new Among("er\u00E1", -1, 1), new Among("ir\u00E1", -1, 1) ], a_7 = [new Among("a", -1, 1), new Among("i", -1, 1), new Among("o", -1, 1), new Among("os", -1, 1), new Among("\u00E1", -1, 1), new Among("\u00ED", -1, 1), new Among("\u00F3", -1, 1) ], a_8 = [ new Among("e", -1, 1), new Among("\u00E7", -1, 2), new Among("\u00E9", -1, 1), new Among("\u00EA", -1, 1) ], g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 ], I_p2, I_p1, I_pV, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function r_prelude() { var among_var; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_0, 3); if (among_var) { sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("a~"); continue; case 2: sbp.slice_from("o~"); continue; case 3: if (sbp.cursor >= sbp.limit) break; sbp.cursor++; continue; } } break; } } function habr2() { if (sbp.out_grouping(g_v, 97, 250)) { while (!sbp.in_grouping(g_v, 97, 250)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } return false; } return true; } function habr3() { if (sbp.in_grouping(g_v, 97, 250)) { while (!sbp.out_grouping(g_v, 97, 250)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } } I_pV = sbp.cursor; return true; } function habr4() { var v_1 = sbp.cursor, v_2, v_3; if (sbp.in_grouping(g_v, 97, 250)) { v_2 = sbp.cursor; if (habr2()) { sbp.cursor = v_2; if (habr3()) return; } else I_pV = sbp.cursor; } sbp.cursor = v_1; if (sbp.out_grouping(g_v, 97, 250)) { v_3 = sbp.cursor; if (habr2()) { sbp.cursor = v_3; if (!sbp.in_grouping(g_v, 97, 250) || sbp.cursor >= sbp.limit) return; sbp.cursor++; } I_pV = sbp.cursor; } } function habr5() { while (!sbp.in_grouping(g_v, 97, 250)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 250)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } return true; } function r_mark_regions() { var v_1 = sbp.cursor; I_pV = sbp.limit; I_p1 = I_pV; I_p2 = I_pV; habr4(); sbp.cursor = v_1; if (habr5()) { I_p1 = sbp.cursor; if (habr5()) I_p2 = sbp.cursor; } } function r_postlude() { var among_var; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_1, 3); if (among_var) { sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("\u00E3"); continue; case 2: sbp.slice_from("\u00F5"); continue; case 3: if (sbp.cursor >= sbp.limit) break; sbp.cursor++; continue; } } break; } } function r_RV() { return I_pV <= sbp.cursor; } function r_R1() { return I_p1 <= sbp.cursor; } function r_R2() { return I_p2 <= sbp.cursor; } function r_standard_suffix() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_5, 45); if (!among_var) return false; sbp.bra = sbp.cursor; switch (among_var) { case 1: if (!r_R2()) return false; sbp.slice_del(); break; case 2: if (!r_R2()) return false; sbp.slice_from("log"); break; case 3: if (!r_R2()) return false; sbp.slice_from("u"); break; case 4: if (!r_R2()) return false; sbp.slice_from("ente"); break; case 5: if (!r_R1()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_2, 4); if (among_var) { sbp.bra = sbp.cursor; if (r_R2()) { sbp.slice_del(); if (among_var == 1) { sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "at")) { sbp.bra = sbp.cursor; if (r_R2()) sbp.slice_del(); } } } } break; case 6: if (!r_R2()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_3, 3); if (among_var) { sbp.bra = sbp.cursor; if (among_var == 1) if (r_R2()) sbp.slice_del(); } break; case 7: if (!r_R2()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_4, 3); if (among_var) { sbp.bra = sbp.cursor; if (among_var == 1) if (r_R2()) sbp.slice_del(); } break; case 8: if (!r_R2()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "at")) { sbp.bra = sbp.cursor; if (r_R2()) sbp.slice_del(); } break; case 9: if (!r_RV() || !sbp.eq_s_b(1, "e")) return false; sbp.slice_from("ir"); break; } return true; } function r_verb_suffix() { var among_var, v_1; if (sbp.cursor >= I_pV) { v_1 = sbp.limit_backward; sbp.limit_backward = I_pV; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_6, 120); if (among_var) { sbp.bra = sbp.cursor; if (among_var == 1) sbp.slice_del(); sbp.limit_backward = v_1; return true; } sbp.limit_backward = v_1; } return false; } function r_residual_suffix() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_7, 7); if (among_var) { sbp.bra = sbp.cursor; if (among_var == 1) if (r_RV()) sbp.slice_del(); } } function habr6(c1, c2) { if (sbp.eq_s_b(1, c1)) { sbp.bra = sbp.cursor; var v_1 = sbp.limit - sbp.cursor; if (sbp.eq_s_b(1, c2)) { sbp.cursor = sbp.limit - v_1; if (r_RV()) sbp.slice_del(); return false; } } return true; } function r_residual_form() { var among_var, v_1, v_2, v_3; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_8, 4); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (r_RV()) { sbp.slice_del(); sbp.ket = sbp.cursor; v_1 = sbp.limit - sbp.cursor; if (habr6("u", "g")) habr6("i", "c") } break; case 2: sbp.slice_from("c"); break; } } } function habr1() { if (!r_standard_suffix()) { sbp.cursor = sbp.limit; if (!r_verb_suffix()) { sbp.cursor = sbp.limit; r_residual_suffix(); return; } } sbp.cursor = sbp.limit; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "i")) { sbp.bra = sbp.cursor; if (sbp.eq_s_b(1, "c")) { sbp.cursor = sbp.limit; if (r_RV()) sbp.slice_del(); } } } this.stem = function() { var v_1 = sbp.cursor; r_prelude(); sbp.cursor = v_1; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; habr1(); sbp.cursor = sbp.limit; r_residual_form(); sbp.cursor = sbp.limit_backward; r_postlude(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.pt.stemmer, 'stemmer-pt'); lunr.pt.stopWordFilter = lunr.generateStopWordFilter('a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos'.split(' ')); lunr.Pipeline.registerFunction(lunr.pt.stopWordFilter, 'stopWordFilter-pt'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.no.js0000664000175000017500000002333314664334534023560 0ustar carstencarsten/*! * Lunr languages, `Norwegian` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.no = function() { this.pipeline.reset(); this.pipeline.add( lunr.no.trimmer, lunr.no.stopWordFilter, lunr.no.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.no.stemmer) } }; /* lunr trimmer function */ lunr.no.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.no.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.no.wordCharacters); lunr.Pipeline.registerFunction(lunr.no.trimmer, 'trimmer-no'); /* lunr stemmer function */ lunr.no.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function NorwegianStemmer() { var a_0 = [new Among("a", -1, 1), new Among("e", -1, 1), new Among("ede", 1, 1), new Among("ande", 1, 1), new Among("ende", 1, 1), new Among("ane", 1, 1), new Among("ene", 1, 1), new Among("hetene", 6, 1), new Among("erte", 1, 3), new Among("en", -1, 1), new Among("heten", 9, 1), new Among("ar", -1, 1), new Among("er", -1, 1), new Among("heter", 12, 1), new Among("s", -1, 2), new Among("as", 14, 1), new Among("es", 14, 1), new Among("edes", 16, 1), new Among("endes", 16, 1), new Among("enes", 16, 1), new Among("hetenes", 19, 1), new Among("ens", 14, 1), new Among("hetens", 21, 1), new Among("ers", 14, 1), new Among("ets", 14, 1), new Among("et", -1, 1), new Among("het", 25, 1), new Among("ert", -1, 3), new Among("ast", -1, 1) ], a_1 = [new Among("dt", -1, -1), new Among("vt", -1, -1) ], a_2 = [new Among("leg", -1, 1), new Among("eleg", 0, 1), new Among("ig", -1, 1), new Among("eig", 2, 1), new Among("lig", 2, 1), new Among("elig", 4, 1), new Among("els", -1, 1), new Among("lov", -1, 1), new Among("elov", 7, 1), new Among("slov", 7, 1), new Among("hetslov", 9, 1) ], g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 ], g_s_ending = [ 119, 125, 149, 1 ], I_x, I_p1, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function r_mark_regions() { var v_1, c = sbp.cursor + 3; I_p1 = sbp.limit; if (0 <= c || c <= sbp.limit) { I_x = c; while (true) { v_1 = sbp.cursor; if (sbp.in_grouping(g_v, 97, 248)) { sbp.cursor = v_1; break; } if (v_1 >= sbp.limit) return; sbp.cursor = v_1 + 1; } while (!sbp.out_grouping(g_v, 97, 248)) { if (sbp.cursor >= sbp.limit) return; sbp.cursor++; } I_p1 = sbp.cursor; if (I_p1 < I_x) I_p1 = I_x; } } function r_main_suffix() { var among_var, v_1, v_2; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_0, 29); sbp.limit_backward = v_1; if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: sbp.slice_del(); break; case 2: v_2 = sbp.limit - sbp.cursor; if (sbp.in_grouping_b(g_s_ending, 98, 122)) sbp.slice_del(); else { sbp.cursor = sbp.limit - v_2; if (sbp.eq_s_b(1, "k") && sbp.out_grouping_b(g_v, 97, 248)) sbp.slice_del(); } break; case 3: sbp.slice_from("er"); break; } } } } function r_consonant_pair() { var v_1 = sbp.limit - sbp.cursor, v_2; if (sbp.cursor >= I_p1) { v_2 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; if (sbp.find_among_b(a_1, 2)) { sbp.bra = sbp.cursor; sbp.limit_backward = v_2; sbp.cursor = sbp.limit - v_1; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.bra = sbp.cursor; sbp.slice_del(); } } else sbp.limit_backward = v_2; } } function r_other_suffix() { var among_var, v_1; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_2, 11); if (among_var) { sbp.bra = sbp.cursor; sbp.limit_backward = v_1; if (among_var == 1) sbp.slice_del(); } else sbp.limit_backward = v_1; } } this.stem = function() { var v_1 = sbp.cursor; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_main_suffix(); sbp.cursor = sbp.limit; r_consonant_pair(); sbp.cursor = sbp.limit; r_other_suffix(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.no.stemmer, 'stemmer-no'); lunr.no.stopWordFilter = lunr.generateStopWordFilter('alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å'.split(' ')); lunr.Pipeline.registerFunction(lunr.no.stopWordFilter, 'stopWordFilter-no'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.ta.js0000664000175000017500000001135114664334534023545 0ustar carstencarsten/*! * Lunr languages, `Tamil` language * https://github.com/tvmani/lunr-languages * * Copyright 2021, Manikandan Venkatasubban * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.ta = function() { this.pipeline.reset(); this.pipeline.add( lunr.ta.trimmer, lunr.ta.stopWordFilter, lunr.ta.stemmer ); // change the tokenizer for japanese one // if (isLunr2) { // for lunr version 2.0.0 // this.tokenizer = lunr.ta.tokenizer; // } else { // if (lunr.tokenizer) { // for lunr version 0.6.0 // lunr.tokenizer = lunr.ta.tokenizer; // } // if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 // this.tokenizerFn = lunr.ta.tokenizer; // } // } if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.ta.stemmer) } }; /* lunr trimmer function */ lunr.ta.wordCharacters = "\u0b80-\u0b89\u0b8a-\u0b8f\u0b90-\u0b99\u0b9a-\u0b9f\u0ba0-\u0ba9\u0baa-\u0baf\u0bb0-\u0bb9\u0bba-\u0bbf\u0bc0-\u0bc9\u0bca-\u0bcf\u0bd0-\u0bd9\u0bda-\u0bdf\u0be0-\u0be9\u0bea-\u0bef\u0bf0-\u0bf9\u0bfa-\u0bffa-zA-Za-zA-Z0-90-9"; lunr.ta.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.ta.wordCharacters); lunr.Pipeline.registerFunction(lunr.ta.trimmer, 'trimmer-ta'); /* lunr stop word filter */ lunr.ta.stopWordFilter = lunr.generateStopWordFilter( 'அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்'.split(' ')); /* lunr stemmer function */ lunr.ta.stemmer = (function() { return function(word) { // for lunr version 2 if (typeof word.update === "function") { return word.update(function(word) { return word; }) } else { // for lunr version <= 1 return word; } } })(); var segmenter = lunr.wordcut; segmenter.init(); lunr.ta.tokenizer = function(obj) { if (!arguments.length || obj == null || obj == undefined) return [] if (Array.isArray(obj)) return obj.map(function(t) { return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase() }); var str = obj.toString().toLowerCase().replace(/^\s+/, ''); return segmenter.cut(str).split('|'); } lunr.Pipeline.registerFunction(lunr.ta.stemmer, 'stemmer-ta'); lunr.Pipeline.registerFunction(lunr.ta.stopWordFilter, 'stopWordFilter-ta'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.ar.js0000664000175000017500000005773614664334534023564 0ustar carstencarsten/*! * Lunr languages, `Arabic` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2018, Dalia Al-Shahrabi * http://www.mozilla.org/MPL/ */ /*! * based on * Kazem Taghva, Rania Elkhoury, and Jeffrey Coombs (2005) * Meryeme Hadni, Abdelmonaime Lachkar, and S. Alaoui Ouatik (2012) * * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.ar = function() { this.pipeline.reset(); this.pipeline.add( lunr.ar.trimmer, lunr.ar.stopWordFilter, lunr.ar.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.ar.stemmer) } }; /* lunr trimmer function */ lunr.ar.wordCharacters = "\u0621-\u065b\u0671\u0640"; lunr.ar.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.ar.wordCharacters); lunr.Pipeline.registerFunction(lunr.ar.trimmer, 'trimmer-ar'); /* lunr stemmer function */ lunr.ar.stemmer = (function() { var self = this; var word = ''; self.result = false; self.preRemoved = false; self.sufRemoved = false; //prefix data self.pre = { pre1: 'ف ك ب و س ل ن ا ي ت', pre2: 'ال لل', pre3: 'بال وال فال تال كال ولل', pre4: 'فبال كبال وبال وكال' }; //suffix data self.suf = { suf1: 'ه ك ت ن ا ي', suf2: 'نك نه ها وك يا اه ون ين تن تم نا وا ان كم كن ني نن ما هم هن تك ته ات يه', suf3: 'تين كهم نيه نهم ونه وها يهم ونا ونك وني وهم تكم تنا تها تني تهم كما كها ناه نكم هنا تان يها', suf4: 'كموه ناها ونني ونهم تكما تموه تكاه كماه ناكم ناهم نيها وننا' } //arabic language patterns and alternative mapping for patterns self.patterns = JSON.parse('{"pt43":[{"pt":[{"c":"ا","l":1}]},{"pt":[{"c":"ا,ت,ن,ي","l":0}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"و","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ي","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ا","l":2},{"c":"ل","l":3,"m":3}]},{"pt":[{"c":"م","l":0}]}],"pt53":[{"pt":[{"c":"ت","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":3},{"c":"ل","l":3,"m":4},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":3}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ن","l":4}]},{"pt":[{"c":"ت","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"م","l":0},{"c":"و","l":3}]},{"pt":[{"c":"ا","l":1},{"c":"و","l":3}]},{"pt":[{"c":"و","l":1},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"ا","l":2},{"c":"ن","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":1},{"c":"ا","l":3}]},{"pt":[{"c":"ي,ت,ا,ن","l":0},{"c":"ت","l":1}],"mPt":[{"c":"ف","l":0,"m":2},{"c":"ع","l":1,"m":3},{"c":"ا","l":2},{"c":"ل","l":3,"m":4}]},{"pt":[{"c":"ت,ي,ا,ن","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":2},{"c":"ي","l":3}]},{"pt":[{"c":"ا,ي,ت,ن","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ء","l":4}]}],"pt63":[{"pt":[{"c":"ا","l":0},{"c":"ت","l":2},{"c":"ا","l":4}]},{"pt":[{"c":"ا,ت,ن,ي","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"و","l":3}]},{"pt":[{"c":"م","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ي","l":1},{"c":"ي","l":3},{"c":"ا","l":4},{"c":"ء","l":5}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ا","l":4}]}],"pt54":[{"pt":[{"c":"ت","l":0}]},{"pt":[{"c":"ا,ي,ت,ن","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"م","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":2}]}],"pt64":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":1}]}],"pt73":[{"pt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ا","l":5}]}],"pt75":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":5}]}]}'); self.execArray = [ 'cleanWord', 'removeDiacritics', 'cleanAlef', 'removeStopWords', 'normalizeHamzaAndAlef', 'removeStartWaw', 'removePre432', 'removeEndTaa', 'wordCheck' ]; self.stem = function() { var counter = 0; self.result = false; self.preRemoved = false; self.sufRemoved = false; while (counter < self.execArray.length && self.result != true) { self.result = self[self.execArray[counter]](); counter++; } } self.setCurrent = function(word) { self.word = word; } self.getCurrent = function() { return self.word } /*remove elongating character and test that the word does not contain non-arabic characters. If the word contains special characters, don't stem. */ self.cleanWord = function() { var wordCharacters = "\u0621-\u065b\u0671\u0640"; var testRegex = new RegExp("[^" + wordCharacters + "]"); self.word = self.word .replace(new RegExp('\u0640', 'g'), ''); if (testRegex.test(word)) { return true; } return false; } self.removeDiacritics = function() { var diacriticsRegex = new RegExp("[\u064b-\u065b]"); self.word = self.word.replace(/[\u064b-\u065b]/gi, ''); return false; } /*Replace all variations of alef (آأإٱى) to a plain alef (ا)*/ self.cleanAlef = function() { var alefRegex = new RegExp("[\u0622\u0623\u0625\u0671\u0649]"); self.word = self.word.replace(alefRegex, "\u0627"); return false; } /* if the word is a stop word, don't stem*/ self.removeStopWords = function() { var stopWords = '، اض امين اه اها اي ا اب اجل اجمع اخ اخذ اصبح اضحى اقبل اقل اكثر الا ام اما امامك امامك امسى اما ان انا انت انتم انتما انتن انت انشا انى او اوشك اولئك اولئكم اولاء اولالك اوه اي ايا اين اينما اي ان اي اف اذ اذا اذا اذما اذن الى اليكم اليكما اليكن اليك اليك الا اما ان انما اي اياك اياكم اياكما اياكن ايانا اياه اياها اياهم اياهما اياهن اياي ايه ان ا ابتدا اثر اجل احد اخرى اخلولق اذا اربعة ارتد استحال اطار اعادة اعلنت اف اكثر اكد الالاء الالى الا الاخيرة الان الاول الاولى التى التي الثاني الثانية الذاتي الذى الذي الذين السابق الف اللائي اللاتي اللتان اللتيا اللتين اللذان اللذين اللواتي الماضي المقبل الوقت الى اليوم اما امام امس ان انبرى انقلب انه انها او اول اي ايار ايام ايضا ب بات باسم بان بخ برس بسبب بس بشكل بضع بطان بعد بعض بك بكم بكما بكن بل بلى بما بماذا بمن بن بنا به بها بي بيد بين بس بله بئس تان تانك تبدل تجاه تحول تلقاء تلك تلكم تلكما تم تينك تين ته تي ثلاثة ثم ثم ثمة ثم جعل جلل جميع جير حار حاشا حاليا حاي حتى حرى حسب حم حوالى حول حيث حيثما حين حي حبذا حتى حذار خلا خلال دون دونك ذا ذات ذاك ذانك ذان ذلك ذلكم ذلكما ذلكن ذو ذوا ذواتا ذواتي ذيت ذينك ذين ذه ذي راح رجع رويدك ريث رب زيارة سبحان سرعان سنة سنوات سوف سوى ساء ساءما شبه شخصا شرع شتان صار صباح صفر صه صه ضد ضمن طاق طالما طفق طق ظل عاد عام عاما عامة عدا عدة عدد عدم عسى عشر عشرة علق على عليك عليه عليها عل عن عند عندما عوض عين عدس عما غدا غير ف فان فلان فو فى في فيم فيما فيه فيها قال قام قبل قد قط قلما قوة كانما كاين كاي كاين كاد كان كانت كذا كذلك كرب كل كلا كلاهما كلتا كلم كليكما كليهما كلما كلا كم كما كي كيت كيف كيفما كان كخ لئن لا لات لاسيما لدن لدى لعمر لقاء لك لكم لكما لكن لكنما لكي لكيلا للامم لم لما لما لن لنا له لها لو لوكالة لولا لوما لي لست لست لستم لستما لستن لست لسن لعل لكن ليت ليس ليسا ليستا ليست ليسوا لسنا ما ماانفك مابرح مادام ماذا مازال مافتئ مايو متى مثل مذ مساء مع معاذ مقابل مكانكم مكانكما مكانكن مكانك مليار مليون مما ممن من منذ منها مه مهما من من نحن نحو نعم نفس نفسه نهاية نخ نعما نعم ها هاؤم هاك هاهنا هب هذا هذه هكذا هل هلم هلا هم هما هن هنا هناك هنالك هو هي هيا هيت هيا هؤلاء هاتان هاتين هاته هاتي هج هذا هذان هذين هذه هذي هيهات و وا واحد واضاف واضافت واكد وان واها واوضح وراءك وفي وقال وقالت وقد وقف وكان وكانت ولا ولم ومن وهو وهي ويكان وي وشكان يكون يمكن يوم ايان'.split(' '); if (stopWords.indexOf(self.word) >= 0) { return true; } } /* changes ؤ ئ to ء and removes alef if at the end of the word*/ self.normalizeHamzaAndAlef = function() { self.word = self.word.replace('\u0624', '\u0621'); self.word = self.word.replace('\u0626', '\u0621'); self.word = self.word.replace(/([\u0627])\1+/gi, '\u0627'); return false; } /*remove end taa marboota ة*/ self.removeEndTaa = function() { if (self.word.length > 2) { self.word = self.word.replace(/[\u0627]$/, ''); self.word = self.word.replace('\u0629', ''); return false; } else return true; } /* if the word starts with double waw وو keep only one of them */ self.removeStartWaw = function() { if (self.word.length > 3 && self.word[0] == '\u0648' && self.word[1] == '\u0648') { self.word = self.word.slice(1); } return false; } /* remove prefixes of size 4, 3 and 2 characters */ self.removePre432 = function() { var word = self.word; if (self.word.length >= 7) { var pre4Regex = new RegExp('^(' + self.pre.pre4.split(' ').join('|') + ')') self.word = self.word.replace(pre4Regex, ''); } if (self.word == word && self.word.length >= 6) { var pre3Regex = new RegExp('^(' + self.pre.pre3.split(' ').join('|') + ')') self.word = self.word.replace(pre3Regex, ''); } if (self.word == word && self.word.length >= 5) { var pre2Regex = new RegExp('^(' + self.pre.pre2.split(' ').join('|') + ')') self.word = self.word.replace(pre2Regex, ''); } if (word != self.word) self.preRemoved = true; return false; } /* check the word against word patterns. If the word matches a pattern, map it to the alternative pattern if available then stop stemming. */ self.patternCheck = function(pattern) { var patternMatch = false; for (var i = 0; i < pattern.length; i++) { var currentPatternCheck = true; for (var j = 0; j < pattern[i].pt.length; j++) { var chars = pattern[i].pt[j].c.split(','); var charMatch = false; chars.forEach(function(el) { if (self.word[pattern[i].pt[j].l] == el) { charMatch = true; } }) if (!charMatch) { currentPatternCheck = false; break; } } if (currentPatternCheck == true) { if (pattern[i].mPt) { var newWord = []; for (var k = 0; k < pattern[i].mPt.length; k++) { if (pattern[i].mPt[k].m != null) { newWord[pattern[i].mPt[k].l] = self.word[pattern[i].mPt[k].m] } else { newWord[pattern[i].mPt[k].l] = pattern[i].mPt[k].c } } self.word = newWord.join(''); } self.result = true; break; } } } /* remove prefixes of size 1 char*/ self.removePre1 = function() { var word = self.word; if (self.preRemoved == false) if (self.word.length > 3) { var pre1Regex = new RegExp('^(' + self.pre.pre1.split(' ').join('|') + ')') self.word = self.word.replace(pre1Regex, ''); } if (word != self.word) self.preRemoved = true; return false; } /*remove suffixes of size 1 char */ self.removeSuf1 = function() { var word = self.word; if (self.sufRemoved == false) if (self.word.length > 3) { var suf1Regex = new RegExp('(' + self.suf.suf1.split(' ').join('|') + ')$') self.word = self.word.replace(suf1Regex, ''); } if (word != self.word) self.sufRemoved = true; return false; } /*remove suffixes of size 4, 3 and 2 chars*/ self.removeSuf432 = function() { var word = self.word; if (self.word.length >= 6) { var suf4Regex = new RegExp('(' + self.suf.suf4.split(' ').join('|') + ')$') self.word = self.word.replace(suf4Regex, ''); } if (self.word == word && self.word.length >= 5) { var suf3Regex = new RegExp('(' + self.suf.suf3.split(' ').join('|') + ')$') self.word = self.word.replace(suf3Regex, ''); } if (self.word == word && self.word.length >= 4) { var suf2Regex = new RegExp('(' + self.suf.suf2.split(' ').join('|') + ')$') self.word = self.word.replace(suf2Regex, ''); } if (word != self.word) self.sufRemoved = true; return false; } /*check the word length and decide what is the next step accordingly*/ self.wordCheck = function() { var word = self.word; var word7Exec = [self.removeSuf432, self.removeSuf1, self.removePre1] var counter = 0; var patternChecked = false; while (self.word.length >= 7 && !self.result && counter < word7Exec.length) { if (self.word.length == 7 && !patternChecked) { self.checkPattern73(); patternChecked = true; } else { word7Exec[counter](); counter++; patternChecked = false; } } var word6Exec = [self.checkPattern63, self.removeSuf432, self.removeSuf1, self.removePre1, self.checkPattern64]; counter = 0; while (self.word.length == 6 && !self.result && counter < word6Exec.length) { word6Exec[counter](); counter++; } var word5Exec = [self.checkPattern53, self.removeSuf432, self.removeSuf1, self.removePre1, self.checkPattern54]; counter = 0; while (self.word.length == 5 && !self.result && counter < word5Exec.length) { word5Exec[counter](); counter++; } var word4Exec = [self.checkPattern43, self.removeSuf1, self.removePre1, self.removeSuf432]; counter = 0; while (self.word.length == 4 && !self.result && counter < word4Exec.length) { word4Exec[counter](); counter++; } return true; } self.checkPattern43 = function() { self.patternCheck(self.patterns.pt43) } self.checkPattern53 = function() { self.patternCheck(self.patterns.pt53) } self.checkPattern54 = function() { self.patternCheck(self.patterns.pt54) } self.checkPattern63 = function() { self.patternCheck(self.patterns.pt63) } self.checkPattern64 = function() { self.patternCheck(self.patterns.pt64) } self.checkPattern73 = function() { self.patternCheck(self.patterns.pt73) } /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { self.setCurrent(word); self.stem(); return self.getCurrent(); }) } else { // for lunr version <= 1 self.setCurrent(token); self.stem(); return self.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.ar.stemmer, 'stemmer-ar'); lunr.ar.stopWordFilter = lunr.generateStopWordFilter('، اض امين اه اها اي ا اب اجل اجمع اخ اخذ اصبح اضحى اقبل اقل اكثر الا ام اما امامك امامك امسى اما ان انا انت انتم انتما انتن انت انشا انى او اوشك اولئك اولئكم اولاء اولالك اوه اي ايا اين اينما اي ان اي اف اذ اذا اذا اذما اذن الى اليكم اليكما اليكن اليك اليك الا اما ان انما اي اياك اياكم اياكما اياكن ايانا اياه اياها اياهم اياهما اياهن اياي ايه ان ا ابتدا اثر اجل احد اخرى اخلولق اذا اربعة ارتد استحال اطار اعادة اعلنت اف اكثر اكد الالاء الالى الا الاخيرة الان الاول الاولى التى التي الثاني الثانية الذاتي الذى الذي الذين السابق الف اللائي اللاتي اللتان اللتيا اللتين اللذان اللذين اللواتي الماضي المقبل الوقت الى اليوم اما امام امس ان انبرى انقلب انه انها او اول اي ايار ايام ايضا ب بات باسم بان بخ برس بسبب بس بشكل بضع بطان بعد بعض بك بكم بكما بكن بل بلى بما بماذا بمن بن بنا به بها بي بيد بين بس بله بئس تان تانك تبدل تجاه تحول تلقاء تلك تلكم تلكما تم تينك تين ته تي ثلاثة ثم ثم ثمة ثم جعل جلل جميع جير حار حاشا حاليا حاي حتى حرى حسب حم حوالى حول حيث حيثما حين حي حبذا حتى حذار خلا خلال دون دونك ذا ذات ذاك ذانك ذان ذلك ذلكم ذلكما ذلكن ذو ذوا ذواتا ذواتي ذيت ذينك ذين ذه ذي راح رجع رويدك ريث رب زيارة سبحان سرعان سنة سنوات سوف سوى ساء ساءما شبه شخصا شرع شتان صار صباح صفر صه صه ضد ضمن طاق طالما طفق طق ظل عاد عام عاما عامة عدا عدة عدد عدم عسى عشر عشرة علق على عليك عليه عليها عل عن عند عندما عوض عين عدس عما غدا غير ف فان فلان فو فى في فيم فيما فيه فيها قال قام قبل قد قط قلما قوة كانما كاين كاي كاين كاد كان كانت كذا كذلك كرب كل كلا كلاهما كلتا كلم كليكما كليهما كلما كلا كم كما كي كيت كيف كيفما كان كخ لئن لا لات لاسيما لدن لدى لعمر لقاء لك لكم لكما لكن لكنما لكي لكيلا للامم لم لما لما لن لنا له لها لو لوكالة لولا لوما لي لست لست لستم لستما لستن لست لسن لعل لكن ليت ليس ليسا ليستا ليست ليسوا لسنا ما ماانفك مابرح مادام ماذا مازال مافتئ مايو متى مثل مذ مساء مع معاذ مقابل مكانكم مكانكما مكانكن مكانك مليار مليون مما ممن من منذ منها مه مهما من من نحن نحو نعم نفس نفسه نهاية نخ نعما نعم ها هاؤم هاك هاهنا هب هذا هذه هكذا هل هلم هلا هم هما هن هنا هناك هنالك هو هي هيا هيت هيا هؤلاء هاتان هاتين هاته هاتي هج هذا هذان هذين هذه هذي هيهات وا واحد واضاف واضافت واكد وان واها واوضح وراءك وفي وقال وقالت وقد وقف وكان وكانت ولا ولم ومن وهو وهي ويكان وي وشكان يكون يمكن يوم ايان'.split(' ')); lunr.Pipeline.registerFunction(lunr.ar.stopWordFilter, 'stopWordFilter-ar'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.sa.js0000664000175000017500000001534414664334534023552 0ustar carstencarsten/*! * Lunr languages, `Sanskrit` language * https://github.com/MiKr13/lunr-languages * * Copyright 2023, India * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.sa = function() { this.pipeline.reset(); this.pipeline.add( lunr.sa.trimmer, lunr.sa.stopWordFilter, lunr.sa.stemmer ); if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.sa.stemmer) } }; /* lunr trimmer function */ lunr.sa.wordCharacters = "\u0900-\u0903\u0904-\u090f\u0910-\u091f\u0920-\u092f\u0930-\u093f\u0940-\u094f\u0950-\u095f\u0960-\u096f\u0970-\u097f\uA8E0-\uA8F1\uA8F2-\uA8F7\uA8F8-\uA8FB\uA8FC-\uA8FD\uA8FE-\uA8FF\u11B00-\u11B09"; lunr.sa.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.sa.wordCharacters); lunr.Pipeline.registerFunction(lunr.sa.trimmer, 'trimmer-sa'); /* lunr stop word filter */ lunr.sa.stopWordFilter = lunr.generateStopWordFilter( 'तथा अयम्‌ एकम्‌ इत्यस्मिन्‌ तथा तत्‌ वा अयम्‌ इत्यस्य ते आहूत उपरि तेषाम्‌ किन्तु तेषाम्‌ तदा इत्यनेन अधिकः इत्यस्य तत्‌ केचन बहवः द्वि तथा महत्वपूर्णः अयम्‌ अस्य विषये अयं अस्ति तत्‌ प्रथमः विषये इत्युपरि इत्युपरि इतर अधिकतमः अधिकः अपि सामान्यतया ठ इतरेतर नूतनम्‌ द न्यूनम्‌ कश्चित्‌ वा विशालः द सः अस्ति तदनुसारम् तत्र अस्ति केवलम्‌ अपि अत्र सर्वे विविधाः तत्‌ बहवः यतः इदानीम्‌ द दक्षिण इत्यस्मै तस्य उपरि नथ अतीव कार्यम्‌ सर्वे एकैकम्‌ इत्यादि। एते सन्ति उत इत्थम्‌ मध्ये एतदर्थं . स कस्य प्रथमः श्री. करोति अस्मिन् प्रकारः निर्मिता कालः तत्र कर्तुं समान अधुना ते सन्ति स एकः अस्ति सः अर्थात् तेषां कृते . स्थितम् विशेषः अग्रिम तेषाम्‌ समान स्रोतः ख म समान इदानीमपि अधिकतया करोतु ते समान इत्यस्य वीथी सह यस्मिन् कृतवान्‌ धृतः तदा पुनः पूर्वं सः आगतः किम्‌ कुल इतर पुरा मात्रा स विषये उ अतएव अपि नगरस्य उपरि यतः प्रतिशतं कतरः कालः साधनानि भूत तथापि जात सम्बन्धि अन्यत्‌ ग अतः अस्माकं स्वकीयाः अस्माकं इदानीं अन्तः इत्यादयः भवन्तः इत्यादयः एते एताः तस्य अस्य इदम् एते तेषां तेषां तेषां तान् तेषां तेषां तेषां समानः सः एकः च तादृशाः बहवः अन्ये च वदन्ति यत् कियत् कस्मै कस्मै यस्मै यस्मै यस्मै यस्मै न अतिनीचः किन्तु प्रथमं सम्पूर्णतया ततः चिरकालानन्तरं पुस्तकं सम्पूर्णतया अन्तः किन्तु अत्र वा इह इव श्रद्धाय अवशिष्यते परन्तु अन्ये वर्गाः सन्ति ते सन्ति शक्नुवन्ति सर्वे मिलित्वा सर्वे एकत्र"'.split(' ')); /* lunr stemmer function */ lunr.sa.stemmer = (function() { return function(word) { // for lunr version 2 if (typeof word.update === "function") { return word.update(function(word) { return word; }) } else { // for lunr version <= 1 return word; } } })(); var segmenter = lunr.wordcut; segmenter.init(); lunr.sa.tokenizer = function(obj) { if (!arguments.length || obj == null || obj == undefined) return [] if (Array.isArray(obj)) return obj.map(function(t) { return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase() }); var str = obj.toString().toLowerCase().replace(/^\s+/, ''); return segmenter.cut(str).split('|'); } lunr.Pipeline.registerFunction(lunr.sa.stemmer, 'stemmer-sa'); lunr.Pipeline.registerFunction(lunr.sa.stopWordFilter, 'stopWordFilter-sa'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.fi.js0000664000175000017500000005072514664334534023547 0ustar carstencarsten/*! * Lunr languages, `Finnish` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.fi = function() { this.pipeline.reset(); this.pipeline.add( lunr.fi.trimmer, lunr.fi.stopWordFilter, lunr.fi.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.fi.stemmer) } }; /* lunr trimmer function */ lunr.fi.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.fi.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.fi.wordCharacters); lunr.Pipeline.registerFunction(lunr.fi.trimmer, 'trimmer-fi'); /* lunr stemmer function */ lunr.fi.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function FinnishStemmer() { var a_0 = [new Among("pa", -1, 1), new Among("sti", -1, 2), new Among("kaan", -1, 1), new Among("han", -1, 1), new Among("kin", -1, 1), new Among("h\u00E4n", -1, 1), new Among("k\u00E4\u00E4n", -1, 1), new Among("ko", -1, 1), new Among("p\u00E4", -1, 1), new Among("k\u00F6", -1, 1) ], a_1 = [ new Among("lla", -1, -1), new Among("na", -1, -1), new Among("ssa", -1, -1), new Among("ta", -1, -1), new Among("lta", 3, -1), new Among("sta", 3, -1) ], a_2 = [ new Among("ll\u00E4", -1, -1), new Among("n\u00E4", -1, -1), new Among("ss\u00E4", -1, -1), new Among("t\u00E4", -1, -1), new Among("lt\u00E4", 3, -1), new Among("st\u00E4", 3, -1) ], a_3 = [ new Among("lle", -1, -1), new Among("ine", -1, -1) ], a_4 = [ new Among("nsa", -1, 3), new Among("mme", -1, 3), new Among("nne", -1, 3), new Among("ni", -1, 2), new Among("si", -1, 1), new Among("an", -1, 4), new Among("en", -1, 6), new Among("\u00E4n", -1, 5), new Among("ns\u00E4", -1, 3) ], a_5 = [new Among("aa", -1, -1), new Among("ee", -1, -1), new Among("ii", -1, -1), new Among("oo", -1, -1), new Among("uu", -1, -1), new Among("\u00E4\u00E4", -1, -1), new Among("\u00F6\u00F6", -1, -1) ], a_6 = [new Among("a", -1, 8), new Among("lla", 0, -1), new Among("na", 0, -1), new Among("ssa", 0, -1), new Among("ta", 0, -1), new Among("lta", 4, -1), new Among("sta", 4, -1), new Among("tta", 4, 9), new Among("lle", -1, -1), new Among("ine", -1, -1), new Among("ksi", -1, -1), new Among("n", -1, 7), new Among("han", 11, 1), new Among("den", 11, -1, r_VI), new Among("seen", 11, -1, r_LONG), new Among("hen", 11, 2), new Among("tten", 11, -1, r_VI), new Among("hin", 11, 3), new Among("siin", 11, -1, r_VI), new Among("hon", 11, 4), new Among("h\u00E4n", 11, 5), new Among("h\u00F6n", 11, 6), new Among("\u00E4", -1, 8), new Among("ll\u00E4", 22, -1), new Among("n\u00E4", 22, -1), new Among("ss\u00E4", 22, -1), new Among("t\u00E4", 22, -1), new Among("lt\u00E4", 26, -1), new Among("st\u00E4", 26, -1), new Among("tt\u00E4", 26, 9) ], a_7 = [new Among("eja", -1, -1), new Among("mma", -1, 1), new Among("imma", 1, -1), new Among("mpa", -1, 1), new Among("impa", 3, -1), new Among("mmi", -1, 1), new Among("immi", 5, -1), new Among("mpi", -1, 1), new Among("impi", 7, -1), new Among("ej\u00E4", -1, -1), new Among("mm\u00E4", -1, 1), new Among("imm\u00E4", 10, -1), new Among("mp\u00E4", -1, 1), new Among("imp\u00E4", 12, -1) ], a_8 = [new Among("i", -1, -1), new Among("j", -1, -1) ], a_9 = [new Among("mma", -1, 1), new Among("imma", 0, -1) ], g_AEI = [17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 ], g_V1 = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 ], g_V2 = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 ], g_particle_end = [17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 ], B_ending_removed, S_x, I_p2, I_p1, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function r_mark_regions() { I_p1 = sbp.limit; I_p2 = I_p1; if (!habr1()) { I_p1 = sbp.cursor; if (!habr1()) I_p2 = sbp.cursor; } } function habr1() { var v_1; while (true) { v_1 = sbp.cursor; if (sbp.in_grouping(g_V1, 97, 246)) break; sbp.cursor = v_1; if (v_1 >= sbp.limit) return true; sbp.cursor++; } sbp.cursor = v_1; while (!sbp.out_grouping(g_V1, 97, 246)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } return false; } function r_R2() { return I_p2 <= sbp.cursor; } function r_particle_etc() { var among_var, v_1; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_0, 10); if (among_var) { sbp.bra = sbp.cursor; sbp.limit_backward = v_1; switch (among_var) { case 1: if (!sbp.in_grouping_b(g_particle_end, 97, 246)) return; break; case 2: if (!r_R2()) return; break; } sbp.slice_del(); } else sbp.limit_backward = v_1; } } function r_possessive() { var among_var, v_1, v_2; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_4, 9); if (among_var) { sbp.bra = sbp.cursor; sbp.limit_backward = v_1; switch (among_var) { case 1: v_2 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "k")) { sbp.cursor = sbp.limit - v_2; sbp.slice_del(); } break; case 2: sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(3, "kse")) { sbp.bra = sbp.cursor; sbp.slice_from("ksi"); } break; case 3: sbp.slice_del(); break; case 4: if (sbp.find_among_b(a_1, 6)) sbp.slice_del(); break; case 5: if (sbp.find_among_b(a_2, 6)) sbp.slice_del(); break; case 6: if (sbp.find_among_b(a_3, 2)) sbp.slice_del(); break; } } else sbp.limit_backward = v_1; } } function r_LONG() { return sbp.find_among_b(a_5, 7); } function r_VI() { return sbp.eq_s_b(1, "i") && sbp.in_grouping_b(g_V2, 97, 246); } function r_case_ending() { var among_var, v_1, v_2; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_6, 30); if (among_var) { sbp.bra = sbp.cursor; sbp.limit_backward = v_1; switch (among_var) { case 1: if (!sbp.eq_s_b(1, "a")) return; break; case 2: case 9: if (!sbp.eq_s_b(1, "e")) return; break; case 3: if (!sbp.eq_s_b(1, "i")) return; break; case 4: if (!sbp.eq_s_b(1, "o")) return; break; case 5: if (!sbp.eq_s_b(1, "\u00E4")) return; break; case 6: if (!sbp.eq_s_b(1, "\u00F6")) return; break; case 7: v_2 = sbp.limit - sbp.cursor; if (!r_LONG()) { sbp.cursor = sbp.limit - v_2; if (!sbp.eq_s_b(2, "ie")) { sbp.cursor = sbp.limit - v_2; break; } } sbp.cursor = sbp.limit - v_2; if (sbp.cursor <= sbp.limit_backward) { sbp.cursor = sbp.limit - v_2; break; } sbp.cursor--; sbp.bra = sbp.cursor; break; case 8: if (!sbp.in_grouping_b(g_V1, 97, 246) || !sbp.out_grouping_b(g_V1, 97, 246)) return; break; } sbp.slice_del(); B_ending_removed = true; } else sbp.limit_backward = v_1; } } function r_other_endings() { var among_var, v_1, v_2; if (sbp.cursor >= I_p2) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p2; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_7, 14); if (among_var) { sbp.bra = sbp.cursor; sbp.limit_backward = v_1; if (among_var == 1) { v_2 = sbp.limit - sbp.cursor; if (sbp.eq_s_b(2, "po")) return; sbp.cursor = sbp.limit - v_2; } sbp.slice_del(); } else sbp.limit_backward = v_1; } } function r_i_plural() { var v_1; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; if (sbp.find_among_b(a_8, 2)) { sbp.bra = sbp.cursor; sbp.limit_backward = v_1; sbp.slice_del(); } else sbp.limit_backward = v_1; } } function r_t_plural() { var among_var, v_1, v_2, v_3, v_4, v_5; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "t")) { sbp.bra = sbp.cursor; v_2 = sbp.limit - sbp.cursor; if (sbp.in_grouping_b(g_V1, 97, 246)) { sbp.cursor = sbp.limit - v_2; sbp.slice_del(); sbp.limit_backward = v_1; v_3 = sbp.limit - sbp.cursor; if (sbp.cursor >= I_p2) { sbp.cursor = I_p2; v_4 = sbp.limit_backward; sbp.limit_backward = sbp.cursor; sbp.cursor = sbp.limit - v_3; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_9, 2); if (among_var) { sbp.bra = sbp.cursor; sbp.limit_backward = v_4; if (among_var == 1) { v_5 = sbp.limit - sbp.cursor; if (sbp.eq_s_b(2, "po")) return; sbp.cursor = sbp.limit - v_5; } sbp.slice_del(); return; } } } } sbp.limit_backward = v_1; } } function r_tidy() { var v_1, v_2, v_3, v_4; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; v_2 = sbp.limit - sbp.cursor; if (r_LONG()) { sbp.cursor = sbp.limit - v_2; sbp.ket = sbp.cursor; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.bra = sbp.cursor; sbp.slice_del(); } } sbp.cursor = sbp.limit - v_2; sbp.ket = sbp.cursor; if (sbp.in_grouping_b(g_AEI, 97, 228)) { sbp.bra = sbp.cursor; if (sbp.out_grouping_b(g_V1, 97, 246)) sbp.slice_del(); } sbp.cursor = sbp.limit - v_2; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "j")) { sbp.bra = sbp.cursor; v_3 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "o")) { sbp.cursor = sbp.limit - v_3; if (sbp.eq_s_b(1, "u")) sbp.slice_del(); } else sbp.slice_del(); } sbp.cursor = sbp.limit - v_2; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "o")) { sbp.bra = sbp.cursor; if (sbp.eq_s_b(1, "j")) sbp.slice_del(); } sbp.cursor = sbp.limit - v_2; sbp.limit_backward = v_1; while (true) { v_4 = sbp.limit - sbp.cursor; if (sbp.out_grouping_b(g_V1, 97, 246)) { sbp.cursor = sbp.limit - v_4; break; } sbp.cursor = sbp.limit - v_4; if (sbp.cursor <= sbp.limit_backward) return; sbp.cursor--; } sbp.ket = sbp.cursor; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.bra = sbp.cursor; S_x = sbp.slice_to(); if (sbp.eq_v_b(S_x)) sbp.slice_del(); } } } this.stem = function() { var v_1 = sbp.cursor; r_mark_regions(); B_ending_removed = false; sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_particle_etc(); sbp.cursor = sbp.limit; r_possessive(); sbp.cursor = sbp.limit; r_case_ending(); sbp.cursor = sbp.limit; r_other_endings(); sbp.cursor = sbp.limit; if (B_ending_removed) { r_i_plural(); sbp.cursor = sbp.limit; } else { sbp.cursor = sbp.limit; r_t_plural(); sbp.cursor = sbp.limit; } r_tidy(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.fi.stemmer, 'stemmer-fi'); lunr.fi.stopWordFilter = lunr.generateStopWordFilter('ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli'.split(' ')); lunr.Pipeline.registerFunction(lunr.fi.stopWordFilter, 'stopWordFilter-fi'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.te.js0000664000175000017500000001117214664334534023552 0ustar carstencarsten/*! * Lunr languages, `Hindi` language * https://github.com/MiKr13/lunr-languages * * Copyright 2023, India * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.te = function() { this.pipeline.reset(); this.pipeline.add( lunr.te.trimmer, lunr.te.stopWordFilter, lunr.te.stemmer ); // change the tokenizer for japanese one // if (isLunr2) { // for lunr version 2.0.0 // this.tokenizer = lunr.hi.tokenizer; // } else { // if (lunr.tokenizer) { // for lunr version 0.6.0 // lunr.tokenizer = lunr.hi.tokenizer; // } // if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 // this.tokenizerFn = lunr.hi.tokenizer; // } // } if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.te.stemmer) } }; /* lunr trimmer function */ lunr.te.wordCharacters = "\u0C00-\u0C04\u0C05-\u0C14\u0C15-\u0C39\u0C3E-\u0C4C\u0C55-\u0C56\u0C58-\u0C5A\u0C60-\u0C61\u0C62-\u0C63\u0C66-\u0C6F\u0C78-\u0C7F\u0C3C\u0C3D\u0C4D\u0C5D\u0C77\u0C64\u0C65"; lunr.te.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.te.wordCharacters); lunr.Pipeline.registerFunction(lunr.te.trimmer, 'trimmer-te'); /* lunr stop word filter */ lunr.te.stopWordFilter = lunr.generateStopWordFilter( 'అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం'.split(' ')); /* lunr stemmer function */ lunr.te.stemmer = (function() { return function(word) { // for lunr version 2 if (typeof word.update === "function") { return word.update(function(word) { return word; }) } else { // for lunr version <= 1 return word; } } })(); var segmenter = lunr.wordcut; segmenter.init(); lunr.te.tokenizer = function(obj) { if (!arguments.length || obj == null || obj == undefined) return [] if (Array.isArray(obj)) return obj.map(function(t) { return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase() }); var str = obj.toString().toLowerCase().replace(/^\s+/, ''); return segmenter.cut(str).split('|'); } lunr.Pipeline.registerFunction(lunr.te.stemmer, 'stemmer-te'); lunr.Pipeline.registerFunction(lunr.te.stopWordFilter, 'stopWordFilter-te'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.zh.js0000664000175000017500000001163214664334534023564 0ustar carstencarsten/*! * Lunr languages, `Chinese` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2019, Felix Lian (repairearth) * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball zhvaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory(require('@node-rs/jieba')) } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function(nodejieba) { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr, nodejiebaDictJson) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* Chinese tokenization is trickier, since it does not take into account spaces. Since the tokenization function is represented different internally for each of the Lunr versions, this had to be done in order to try to try to pick the best way of doing this based on the Lunr version */ var isLunr2 = lunr.version[0] == "2"; /* register specific locale function */ lunr.zh = function() { this.pipeline.reset(); this.pipeline.add( lunr.zh.trimmer, lunr.zh.stopWordFilter, lunr.zh.stemmer ); // change the tokenizer for Chinese one if (isLunr2) { // for lunr version 2.0.0 this.tokenizer = lunr.zh.tokenizer; } else { if (lunr.tokenizer) { // for lunr version 0.6.0 lunr.tokenizer = lunr.zh.tokenizer; } if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 this.tokenizerFn = lunr.zh.tokenizer; } } }; lunr.zh.tokenizer = function(obj) { if (!arguments.length || obj == null || obj == undefined) return [] if (Array.isArray(obj)) return obj.map(function(t) { return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase() }) nodejiebaDictJson && nodejieba.load(nodejiebaDictJson) var str = obj.toString().trim().toLowerCase(); var tokens = []; nodejieba.cut(str, true).forEach(function(seg) { tokens = tokens.concat(seg.split(' ')) }) tokens = tokens.filter(function(token) { return !!token; }); var fromIndex = 0 return tokens.map(function(token, index) { if (isLunr2) { var start = str.indexOf(token, fromIndex) var tokenMetadata = {} tokenMetadata["position"] = [start, token.length] tokenMetadata["index"] = index fromIndex = start return new lunr.Token(token, tokenMetadata); } else { return token } }); } /* lunr trimmer function */ lunr.zh.wordCharacters = "\\w\u4e00-\u9fa5"; lunr.zh.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.zh.wordCharacters); lunr.Pipeline.registerFunction(lunr.zh.trimmer, 'trimmer-zh'); /* lunr stemmer function */ lunr.zh.stemmer = (function() { /* TODO Chinese stemmer */ return function(word) { return word; } })(); lunr.Pipeline.registerFunction(lunr.zh.stemmer, 'stemmer-zh'); /* lunr stop word filter. see https://www.ranks.nl/stopwords/chinese-stopwords */ lunr.zh.stopWordFilter = lunr.generateStopWordFilter( '的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自'.split(' ')); lunr.Pipeline.registerFunction(lunr.zh.stopWordFilter, 'stopWordFilter-zh'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.ru.js0000664000175000017500000004525214664334534023576 0ustar carstencarsten/*! * Lunr languages, `Russian` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.ru = function() { this.pipeline.reset(); this.pipeline.add( lunr.ru.trimmer, lunr.ru.stopWordFilter, lunr.ru.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.ru.stemmer) } }; /* lunr trimmer function */ lunr.ru.wordCharacters = "\u0400-\u0484\u0487-\u052F\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E\uFE2F"; lunr.ru.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.ru.wordCharacters); lunr.Pipeline.registerFunction(lunr.ru.trimmer, 'trimmer-ru'); /* lunr stemmer function */ lunr.ru.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function RussianStemmer() { var a_0 = [new Among("\u0432", -1, 1), new Among("\u0438\u0432", 0, 2), new Among("\u044B\u0432", 0, 2), new Among("\u0432\u0448\u0438", -1, 1), new Among("\u0438\u0432\u0448\u0438", 3, 2), new Among("\u044B\u0432\u0448\u0438", 3, 2), new Among("\u0432\u0448\u0438\u0441\u044C", -1, 1), new Among("\u0438\u0432\u0448\u0438\u0441\u044C", 6, 2), new Among("\u044B\u0432\u0448\u0438\u0441\u044C", 6, 2) ], a_1 = [ new Among("\u0435\u0435", -1, 1), new Among("\u0438\u0435", -1, 1), new Among("\u043E\u0435", -1, 1), new Among("\u044B\u0435", -1, 1), new Among("\u0438\u043C\u0438", -1, 1), new Among("\u044B\u043C\u0438", -1, 1), new Among("\u0435\u0439", -1, 1), new Among("\u0438\u0439", -1, 1), new Among("\u043E\u0439", -1, 1), new Among("\u044B\u0439", -1, 1), new Among("\u0435\u043C", -1, 1), new Among("\u0438\u043C", -1, 1), new Among("\u043E\u043C", -1, 1), new Among("\u044B\u043C", -1, 1), new Among("\u0435\u0433\u043E", -1, 1), new Among("\u043E\u0433\u043E", -1, 1), new Among("\u0435\u043C\u0443", -1, 1), new Among("\u043E\u043C\u0443", -1, 1), new Among("\u0438\u0445", -1, 1), new Among("\u044B\u0445", -1, 1), new Among("\u0435\u044E", -1, 1), new Among("\u043E\u044E", -1, 1), new Among("\u0443\u044E", -1, 1), new Among("\u044E\u044E", -1, 1), new Among("\u0430\u044F", -1, 1), new Among("\u044F\u044F", -1, 1) ], a_2 = [ new Among("\u0435\u043C", -1, 1), new Among("\u043D\u043D", -1, 1), new Among("\u0432\u0448", -1, 1), new Among("\u0438\u0432\u0448", 2, 2), new Among("\u044B\u0432\u0448", 2, 2), new Among("\u0449", -1, 1), new Among("\u044E\u0449", 5, 1), new Among("\u0443\u044E\u0449", 6, 2) ], a_3 = [ new Among("\u0441\u044C", -1, 1), new Among("\u0441\u044F", -1, 1) ], a_4 = [ new Among("\u043B\u0430", -1, 1), new Among("\u0438\u043B\u0430", 0, 2), new Among("\u044B\u043B\u0430", 0, 2), new Among("\u043D\u0430", -1, 1), new Among("\u0435\u043D\u0430", 3, 2), new Among("\u0435\u0442\u0435", -1, 1), new Among("\u0438\u0442\u0435", -1, 2), new Among("\u0439\u0442\u0435", -1, 1), new Among("\u0435\u0439\u0442\u0435", 7, 2), new Among("\u0443\u0439\u0442\u0435", 7, 2), new Among("\u043B\u0438", -1, 1), new Among("\u0438\u043B\u0438", 10, 2), new Among("\u044B\u043B\u0438", 10, 2), new Among("\u0439", -1, 1), new Among("\u0435\u0439", 13, 2), new Among("\u0443\u0439", 13, 2), new Among("\u043B", -1, 1), new Among("\u0438\u043B", 16, 2), new Among("\u044B\u043B", 16, 2), new Among("\u0435\u043C", -1, 1), new Among("\u0438\u043C", -1, 2), new Among("\u044B\u043C", -1, 2), new Among("\u043D", -1, 1), new Among("\u0435\u043D", 22, 2), new Among("\u043B\u043E", -1, 1), new Among("\u0438\u043B\u043E", 24, 2), new Among("\u044B\u043B\u043E", 24, 2), new Among("\u043D\u043E", -1, 1), new Among("\u0435\u043D\u043E", 27, 2), new Among("\u043D\u043D\u043E", 27, 1), new Among("\u0435\u0442", -1, 1), new Among("\u0443\u0435\u0442", 30, 2), new Among("\u0438\u0442", -1, 2), new Among("\u044B\u0442", -1, 2), new Among("\u044E\u0442", -1, 1), new Among("\u0443\u044E\u0442", 34, 2), new Among("\u044F\u0442", -1, 2), new Among("\u043D\u044B", -1, 1), new Among("\u0435\u043D\u044B", 37, 2), new Among("\u0442\u044C", -1, 1), new Among("\u0438\u0442\u044C", 39, 2), new Among("\u044B\u0442\u044C", 39, 2), new Among("\u0435\u0448\u044C", -1, 1), new Among("\u0438\u0448\u044C", -1, 2), new Among("\u044E", -1, 2), new Among("\u0443\u044E", 44, 2) ], a_5 = [ new Among("\u0430", -1, 1), new Among("\u0435\u0432", -1, 1), new Among("\u043E\u0432", -1, 1), new Among("\u0435", -1, 1), new Among("\u0438\u0435", 3, 1), new Among("\u044C\u0435", 3, 1), new Among("\u0438", -1, 1), new Among("\u0435\u0438", 6, 1), new Among("\u0438\u0438", 6, 1), new Among("\u0430\u043C\u0438", 6, 1), new Among("\u044F\u043C\u0438", 6, 1), new Among("\u0438\u044F\u043C\u0438", 10, 1), new Among("\u0439", -1, 1), new Among("\u0435\u0439", 12, 1), new Among("\u0438\u0435\u0439", 13, 1), new Among("\u0438\u0439", 12, 1), new Among("\u043E\u0439", 12, 1), new Among("\u0430\u043C", -1, 1), new Among("\u0435\u043C", -1, 1), new Among("\u0438\u0435\u043C", 18, 1), new Among("\u043E\u043C", -1, 1), new Among("\u044F\u043C", -1, 1), new Among("\u0438\u044F\u043C", 21, 1), new Among("\u043E", -1, 1), new Among("\u0443", -1, 1), new Among("\u0430\u0445", -1, 1), new Among("\u044F\u0445", -1, 1), new Among("\u0438\u044F\u0445", 26, 1), new Among("\u044B", -1, 1), new Among("\u044C", -1, 1), new Among("\u044E", -1, 1), new Among("\u0438\u044E", 30, 1), new Among("\u044C\u044E", 30, 1), new Among("\u044F", -1, 1), new Among("\u0438\u044F", 33, 1), new Among("\u044C\u044F", 33, 1) ], a_6 = [ new Among("\u043E\u0441\u0442", -1, 1), new Among("\u043E\u0441\u0442\u044C", -1, 1) ], a_7 = [ new Among("\u0435\u0439\u0448\u0435", -1, 1), new Among("\u043D", -1, 2), new Among("\u0435\u0439\u0448", -1, 1), new Among("\u044C", -1, 3) ], g_v = [33, 65, 8, 232], I_p2, I_pV, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function habr3() { while (!sbp.in_grouping(g_v, 1072, 1103)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } return true; } function habr4() { while (!sbp.out_grouping(g_v, 1072, 1103)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } return true; } function r_mark_regions() { I_pV = sbp.limit; I_p2 = I_pV; if (habr3()) { I_pV = sbp.cursor; if (habr4()) if (habr3()) if (habr4()) I_p2 = sbp.cursor; } } function r_R2() { return I_p2 <= sbp.cursor; } function habr2(a, n) { var among_var, v_1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a, n); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: v_1 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "\u0430")) { sbp.cursor = sbp.limit - v_1; if (!sbp.eq_s_b(1, "\u044F")) return false; } case 2: sbp.slice_del(); break; } return true; } return false; } function r_perfective_gerund() { return habr2(a_0, 9); } function habr1(a, n) { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a, n); if (among_var) { sbp.bra = sbp.cursor; if (among_var == 1) sbp.slice_del(); return true; } return false; } function r_adjective() { return habr1(a_1, 26); } function r_adjectival() { var among_var; if (r_adjective()) { habr2(a_2, 8); return true; } return false; } function r_reflexive() { return habr1(a_3, 2); } function r_verb() { return habr2(a_4, 46); } function r_noun() { habr1(a_5, 36); } function r_derivational() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_6, 2); if (among_var) { sbp.bra = sbp.cursor; if (r_R2() && among_var == 1) sbp.slice_del(); } } function r_tidy_up() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_7, 4); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: sbp.slice_del(); sbp.ket = sbp.cursor; if (!sbp.eq_s_b(1, "\u043D")) break; sbp.bra = sbp.cursor; case 2: if (!sbp.eq_s_b(1, "\u043D")) break; case 3: sbp.slice_del(); break; } } } this.stem = function() { r_mark_regions(); sbp.cursor = sbp.limit; if (sbp.cursor < I_pV) return false; sbp.limit_backward = I_pV; if (!r_perfective_gerund()) { sbp.cursor = sbp.limit; if (!r_reflexive()) sbp.cursor = sbp.limit; if (!r_adjectival()) { sbp.cursor = sbp.limit; if (!r_verb()) { sbp.cursor = sbp.limit; r_noun(); } } } sbp.cursor = sbp.limit; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "\u0438")) { sbp.bra = sbp.cursor; sbp.slice_del(); } else sbp.cursor = sbp.limit; r_derivational(); sbp.cursor = sbp.limit; r_tidy_up(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.ru.stemmer, 'stemmer-ru'); lunr.ru.stopWordFilter = lunr.generateStopWordFilter('алло без близко более больше будем будет будете будешь будто буду будут будь бы бывает бывь был была были было быть в важная важное важные важный вам вами вас ваш ваша ваше ваши вверх вдали вдруг ведь везде весь вниз внизу во вокруг вон восемнадцатый восемнадцать восемь восьмой вот впрочем времени время все всегда всего всем всеми всему всех всею всю всюду вся всё второй вы г где говорил говорит год года году да давно даже далеко дальше даром два двадцатый двадцать две двенадцатый двенадцать двух девятнадцатый девятнадцать девятый девять действительно дел день десятый десять для до довольно долго должно другая другие других друго другое другой е его ее ей ему если есть еще ещё ею её ж же жизнь за занят занята занято заняты затем зато зачем здесь значит и из или им именно иметь ими имя иногда их к каждая каждое каждые каждый кажется как какая какой кем когда кого ком кому конечно которая которого которой которые который которых кроме кругом кто куда лет ли лишь лучше люди м мало между меля менее меньше меня миллионов мимо мира мне много многочисленная многочисленное многочисленные многочисленный мной мною мог могут мож может можно можхо мои мой мор мочь моя моё мы на наверху над надо назад наиболее наконец нам нами нас начала наш наша наше наши не него недавно недалеко нее ней нельзя нем немного нему непрерывно нередко несколько нет нею неё ни нибудь ниже низко никогда никуда ними них ничего но ну нужно нх о об оба обычно один одиннадцатый одиннадцать однажды однако одного одной около он она они оно опять особенно от отовсюду отсюда очень первый перед по под пожалуйста позже пока пор пора после посреди потом потому почему почти прекрасно при про просто против процентов пятнадцатый пятнадцать пятый пять раз разве рано раньше рядом с сам сама сами самим самими самих само самого самой самом самому саму свое своего своей свои своих свою сеаой себе себя сегодня седьмой сейчас семнадцатый семнадцать семь сих сказал сказала сказать сколько слишком сначала снова со собой собою совсем спасибо стал суть т та так такая также такие такое такой там твой твоя твоё те тебе тебя тем теми теперь тех то тобой тобою тогда того тоже только том тому тот тою третий три тринадцатый тринадцать ту туда тут ты тысяч у уж уже уметь хорошо хотеть хоть хотя хочешь часто чаще чего человек чем чему через четвертый четыре четырнадцатый четырнадцать что чтоб чтобы чуть шестнадцатый шестнадцать шестой шесть эта эти этим этими этих это этого этой этом этому этот эту я а'.split(' ')); lunr.Pipeline.registerFunction(lunr.ru.stopWordFilter, 'stopWordFilter-ru'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.tr.js0000664000175000017500000011261314664334534023571 0ustar carstencarsten/*! * Lunr languages, `Turkish` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.tr = function() { this.pipeline.reset(); this.pipeline.add( lunr.tr.trimmer, lunr.tr.stopWordFilter, lunr.tr.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.tr.stemmer) } }; /* lunr trimmer function */ lunr.tr.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.tr.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.tr.wordCharacters); lunr.Pipeline.registerFunction(lunr.tr.trimmer, 'trimmer-tr'); /* lunr stemmer function */ lunr.tr.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function TurkishStemmer() { var a_0 = [new Among("m", -1, -1), new Among("n", -1, -1), new Among("miz", -1, -1), new Among("niz", -1, -1), new Among("muz", -1, -1), new Among("nuz", -1, -1), new Among("m\u00FCz", -1, -1), new Among("n\u00FCz", -1, -1), new Among("m\u0131z", -1, -1), new Among("n\u0131z", -1, -1) ], a_1 = [ new Among("leri", -1, -1), new Among("lar\u0131", -1, -1) ], a_2 = [ new Among("ni", -1, -1), new Among("nu", -1, -1), new Among("n\u00FC", -1, -1), new Among("n\u0131", -1, -1) ], a_3 = [ new Among("in", -1, -1), new Among("un", -1, -1), new Among("\u00FCn", -1, -1), new Among("\u0131n", -1, -1) ], a_4 = [ new Among("a", -1, -1), new Among("e", -1, -1) ], a_5 = [ new Among("na", -1, -1), new Among("ne", -1, -1) ], a_6 = [ new Among("da", -1, -1), new Among("ta", -1, -1), new Among("de", -1, -1), new Among("te", -1, -1) ], a_7 = [ new Among("nda", -1, -1), new Among("nde", -1, -1) ], a_8 = [ new Among("dan", -1, -1), new Among("tan", -1, -1), new Among("den", -1, -1), new Among("ten", -1, -1) ], a_9 = [ new Among("ndan", -1, -1), new Among("nden", -1, -1) ], a_10 = [ new Among("la", -1, -1), new Among("le", -1, -1) ], a_11 = [ new Among("ca", -1, -1), new Among("ce", -1, -1) ], a_12 = [ new Among("im", -1, -1), new Among("um", -1, -1), new Among("\u00FCm", -1, -1), new Among("\u0131m", -1, -1) ], a_13 = [ new Among("sin", -1, -1), new Among("sun", -1, -1), new Among("s\u00FCn", -1, -1), new Among("s\u0131n", -1, -1) ], a_14 = [ new Among("iz", -1, -1), new Among("uz", -1, -1), new Among("\u00FCz", -1, -1), new Among("\u0131z", -1, -1) ], a_15 = [ new Among("siniz", -1, -1), new Among("sunuz", -1, -1), new Among("s\u00FCn\u00FCz", -1, -1), new Among("s\u0131n\u0131z", -1, -1) ], a_16 = [ new Among("lar", -1, -1), new Among("ler", -1, -1) ], a_17 = [ new Among("niz", -1, -1), new Among("nuz", -1, -1), new Among("n\u00FCz", -1, -1), new Among("n\u0131z", -1, -1) ], a_18 = [ new Among("dir", -1, -1), new Among("tir", -1, -1), new Among("dur", -1, -1), new Among("tur", -1, -1), new Among("d\u00FCr", -1, -1), new Among("t\u00FCr", -1, -1), new Among("d\u0131r", -1, -1), new Among("t\u0131r", -1, -1) ], a_19 = [ new Among("cas\u0131na", -1, -1), new Among("cesine", -1, -1) ], a_20 = [ new Among("di", -1, -1), new Among("ti", -1, -1), new Among("dik", -1, -1), new Among("tik", -1, -1), new Among("duk", -1, -1), new Among("tuk", -1, -1), new Among("d\u00FCk", -1, -1), new Among("t\u00FCk", -1, -1), new Among("d\u0131k", -1, -1), new Among("t\u0131k", -1, -1), new Among("dim", -1, -1), new Among("tim", -1, -1), new Among("dum", -1, -1), new Among("tum", -1, -1), new Among("d\u00FCm", -1, -1), new Among("t\u00FCm", -1, -1), new Among("d\u0131m", -1, -1), new Among("t\u0131m", -1, -1), new Among("din", -1, -1), new Among("tin", -1, -1), new Among("dun", -1, -1), new Among("tun", -1, -1), new Among("d\u00FCn", -1, -1), new Among("t\u00FCn", -1, -1), new Among("d\u0131n", -1, -1), new Among("t\u0131n", -1, -1), new Among("du", -1, -1), new Among("tu", -1, -1), new Among("d\u00FC", -1, -1), new Among("t\u00FC", -1, -1), new Among("d\u0131", -1, -1), new Among("t\u0131", -1, -1) ], a_21 = [ new Among("sa", -1, -1), new Among("se", -1, -1), new Among("sak", -1, -1), new Among("sek", -1, -1), new Among("sam", -1, -1), new Among("sem", -1, -1), new Among("san", -1, -1), new Among("sen", -1, -1) ], a_22 = [ new Among("mi\u015F", -1, -1), new Among("mu\u015F", -1, -1), new Among("m\u00FC\u015F", -1, -1), new Among("m\u0131\u015F", -1, -1) ], a_23 = [new Among("b", -1, 1), new Among("c", -1, 2), new Among("d", -1, 3), new Among("\u011F", -1, 4) ], g_vowel = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8, 0, 0, 0, 0, 0, 0, 1 ], g_U = [ 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1 ], g_vowel1 = [1, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], g_vowel2 = [17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130 ], g_vowel3 = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], g_vowel4 = [17], g_vowel5 = [65], g_vowel6 = [65], B_c_s_n_s, I_strlen, g_habr = [ ["a", g_vowel1, 97, 305], ["e", g_vowel2, 101, 252], ["\u0131", g_vowel3, 97, 305], ["i", g_vowel4, 101, 105], ["o", g_vowel5, 111, 117], ["\u00F6", g_vowel6, 246, 252], ["u", g_vowel5, 111, 117] ], sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function habr1(g_v, n1, n2) { while (true) { var v_1 = sbp.limit - sbp.cursor; if (sbp.in_grouping_b(g_v, n1, n2)) { sbp.cursor = sbp.limit - v_1; break; } sbp.cursor = sbp.limit - v_1; if (sbp.cursor <= sbp.limit_backward) return false; sbp.cursor--; } return true; } function r_check_vowel_harmony() { var v_1, v_2; v_1 = sbp.limit - sbp.cursor; habr1(g_vowel, 97, 305); for (var i = 0; i < g_habr.length; i++) { v_2 = sbp.limit - sbp.cursor; var habr = g_habr[i]; if (sbp.eq_s_b(1, habr[0]) && habr1(habr[1], habr[2], habr[3])) { sbp.cursor = sbp.limit - v_1; return true; } sbp.cursor = sbp.limit - v_2; } sbp.cursor = sbp.limit - v_2; if (!sbp.eq_s_b(1, "\u00FC") || !habr1(g_vowel6, 246, 252)) return false; sbp.cursor = sbp.limit - v_1; return true; } function habr2(f1, f2) { var v_1 = sbp.limit - sbp.cursor, v_2; if (f1()) { sbp.cursor = sbp.limit - v_1; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; v_2 = sbp.limit - sbp.cursor; if (f2()) { sbp.cursor = sbp.limit - v_2; return true; } } } sbp.cursor = sbp.limit - v_1; if (f1()) { sbp.cursor = sbp.limit - v_1; return false; } sbp.cursor = sbp.limit - v_1; if (sbp.cursor <= sbp.limit_backward) return false; sbp.cursor--; if (!f2()) return false; sbp.cursor = sbp.limit - v_1; return true; } function habr3(f1) { return habr2(f1, function() { return sbp.in_grouping_b(g_vowel, 97, 305); }); } function r_mark_suffix_with_optional_n_consonant() { return habr3(function() { return sbp.eq_s_b(1, "n"); }); } function r_mark_suffix_with_optional_s_consonant() { return habr3(function() { return sbp.eq_s_b(1, "s"); }); } function r_mark_suffix_with_optional_y_consonant() { return habr3(function() { return sbp.eq_s_b(1, "y"); }); } function r_mark_suffix_with_optional_U_vowel() { return habr2(function() { return sbp.in_grouping_b(g_U, 105, 305); }, function() { return sbp.out_grouping_b(g_vowel, 97, 305); }); } function r_mark_possessives() { return sbp.find_among_b(a_0, 10) && r_mark_suffix_with_optional_U_vowel(); } function r_mark_sU() { return r_check_vowel_harmony() && sbp.in_grouping_b(g_U, 105, 305) && r_mark_suffix_with_optional_s_consonant(); } function r_mark_lArI() { return sbp.find_among_b(a_1, 2); } function r_mark_yU() { return r_check_vowel_harmony() && sbp.in_grouping_b(g_U, 105, 305) && r_mark_suffix_with_optional_y_consonant(); } function r_mark_nU() { return r_check_vowel_harmony() && sbp.find_among_b(a_2, 4); } function r_mark_nUn() { return r_check_vowel_harmony() && sbp.find_among_b(a_3, 4) && r_mark_suffix_with_optional_n_consonant(); } function r_mark_yA() { return r_check_vowel_harmony() && sbp.find_among_b(a_4, 2) && r_mark_suffix_with_optional_y_consonant(); } function r_mark_nA() { return r_check_vowel_harmony() && sbp.find_among_b(a_5, 2); } function r_mark_DA() { return r_check_vowel_harmony() && sbp.find_among_b(a_6, 4); } function r_mark_ndA() { return r_check_vowel_harmony() && sbp.find_among_b(a_7, 2); } function r_mark_DAn() { return r_check_vowel_harmony() && sbp.find_among_b(a_8, 4); } function r_mark_ndAn() { return r_check_vowel_harmony() && sbp.find_among_b(a_9, 2); } function r_mark_ylA() { return r_check_vowel_harmony() && sbp.find_among_b(a_10, 2) && r_mark_suffix_with_optional_y_consonant(); } function r_mark_ki() { return sbp.eq_s_b(2, "ki"); } function r_mark_ncA() { return r_check_vowel_harmony() && sbp.find_among_b(a_11, 2) && r_mark_suffix_with_optional_n_consonant(); } function r_mark_yUm() { return r_check_vowel_harmony() && sbp.find_among_b(a_12, 4) && r_mark_suffix_with_optional_y_consonant(); } function r_mark_sUn() { return r_check_vowel_harmony() && sbp.find_among_b(a_13, 4); } function r_mark_yUz() { return r_check_vowel_harmony() && sbp.find_among_b(a_14, 4) && r_mark_suffix_with_optional_y_consonant(); } function r_mark_sUnUz() { return sbp.find_among_b(a_15, 4); } function r_mark_lAr() { return r_check_vowel_harmony() && sbp.find_among_b(a_16, 2); } function r_mark_nUz() { return r_check_vowel_harmony() && sbp.find_among_b(a_17, 4); } function r_mark_DUr() { return r_check_vowel_harmony() && sbp.find_among_b(a_18, 8); } function r_mark_cAsInA() { return sbp.find_among_b(a_19, 2); } function r_mark_yDU() { return r_check_vowel_harmony() && sbp.find_among_b(a_20, 32) && r_mark_suffix_with_optional_y_consonant(); } function r_mark_ysA() { return sbp.find_among_b(a_21, 8) && r_mark_suffix_with_optional_y_consonant(); } function r_mark_ymUs_() { return r_check_vowel_harmony() && sbp.find_among_b(a_22, 4) && r_mark_suffix_with_optional_y_consonant(); } function r_mark_yken() { return sbp.eq_s_b(3, "ken") && r_mark_suffix_with_optional_y_consonant(); } function habr4() { var v_1 = sbp.limit - sbp.cursor; if (!r_mark_ymUs_()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_yDU()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_ysA()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_yken()) return true; } } } return false; } function habr5() { if (r_mark_cAsInA()) { var v_1 = sbp.limit - sbp.cursor; if (!r_mark_sUnUz()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_lAr()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_yUm()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_sUn()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_yUz()) sbp.cursor = sbp.limit - v_1; } } } } if (r_mark_ymUs_()) return false; } return true; } function habr6() { if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); var v_1 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (!r_mark_DUr()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_yDU()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_ysA()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_ymUs_()) sbp.cursor = sbp.limit - v_1; } } } B_c_s_n_s = false; return false; } return true; } function habr7() { if (!r_mark_nUz()) return true; var v_1 = sbp.limit - sbp.cursor; if (!r_mark_yDU()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_ysA()) return true; } return false; } function habr8() { var v_1 = sbp.limit - sbp.cursor, v_2; if (!r_mark_sUnUz()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_yUz()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_sUn()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_yUm()) return true; } } } sbp.bra = sbp.cursor; sbp.slice_del(); v_2 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (!r_mark_ymUs_()) sbp.cursor = sbp.limit - v_2; return false; } function r_stem_nominal_verb_suffixes() { var v_1 = sbp.limit - sbp.cursor, v_2; sbp.ket = sbp.cursor; B_c_s_n_s = true; if (habr4()) { sbp.cursor = sbp.limit - v_1; if (habr5()) { sbp.cursor = sbp.limit - v_1; if (habr6()) { sbp.cursor = sbp.limit - v_1; if (habr7()) { sbp.cursor = sbp.limit - v_1; if (habr8()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_DUr()) return; sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; v_2 = sbp.limit - sbp.cursor; if (!r_mark_sUnUz()) { sbp.cursor = sbp.limit - v_2; if (!r_mark_lAr()) { sbp.cursor = sbp.limit - v_2; if (!r_mark_yUm()) { sbp.cursor = sbp.limit - v_2; if (!r_mark_sUn()) { sbp.cursor = sbp.limit - v_2; if (!r_mark_yUz()) sbp.cursor = sbp.limit - v_2; } } } } if (!r_mark_ymUs_()) sbp.cursor = sbp.limit - v_2; } } } } } sbp.bra = sbp.cursor; sbp.slice_del(); } function r_stem_suffix_chain_before_ki() { var v_1, v_2, v_3, v_4; sbp.ket = sbp.cursor; if (r_mark_ki()) { v_1 = sbp.limit - sbp.cursor; if (r_mark_DA()) { sbp.bra = sbp.cursor; sbp.slice_del(); v_2 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } else { sbp.cursor = sbp.limit - v_2; if (r_mark_possessives()) { sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } } } return true; } sbp.cursor = sbp.limit - v_1; if (r_mark_nUn()) { sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; v_3 = sbp.limit - sbp.cursor; if (r_mark_lArI()) { sbp.bra = sbp.cursor; sbp.slice_del(); } else { sbp.cursor = sbp.limit - v_3; sbp.ket = sbp.cursor; if (!r_mark_possessives()) { sbp.cursor = sbp.limit - v_3; if (!r_mark_sU()) { sbp.cursor = sbp.limit - v_3; if (!r_stem_suffix_chain_before_ki()) return true; } } sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki() } } return true; } sbp.cursor = sbp.limit - v_1; if (r_mark_ndA()) { v_4 = sbp.limit - sbp.cursor; if (r_mark_lArI()) { sbp.bra = sbp.cursor; sbp.slice_del(); } else { sbp.cursor = sbp.limit - v_4; if (r_mark_sU()) { sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } } else { sbp.cursor = sbp.limit - v_4; if (!r_stem_suffix_chain_before_ki()) return false; } } return true; } } return false; } function habr9(v_1) { sbp.ket = sbp.cursor; if (!r_mark_ndA()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_nA()) return false; } var v_2 = sbp.limit - sbp.cursor; if (r_mark_lArI()) { sbp.bra = sbp.cursor; sbp.slice_del(); } else { sbp.cursor = sbp.limit - v_2; if (r_mark_sU()) { sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } } else { sbp.cursor = sbp.limit - v_2; if (!r_stem_suffix_chain_before_ki()) return false; } } return true; } function habr10(v_1) { sbp.ket = sbp.cursor; if (!r_mark_ndAn()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_nU()) return false; } var v_2 = sbp.limit - sbp.cursor; if (!r_mark_sU()) { sbp.cursor = sbp.limit - v_2; if (!r_mark_lArI()) return false; } sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } return true; } function habr11() { var v_1 = sbp.limit - sbp.cursor, v_2; sbp.ket = sbp.cursor; if (!r_mark_nUn()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_ylA()) return false; } sbp.bra = sbp.cursor; sbp.slice_del(); v_2 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); if (r_stem_suffix_chain_before_ki()) return true; } sbp.cursor = sbp.limit - v_2; sbp.ket = sbp.cursor; if (!r_mark_possessives()) { sbp.cursor = sbp.limit - v_2; if (!r_mark_sU()) { sbp.cursor = sbp.limit - v_2; if (!r_stem_suffix_chain_before_ki()) return true; } } sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } return true; } function habr12() { var v_1 = sbp.limit - sbp.cursor, v_2, v_3; sbp.ket = sbp.cursor; if (!r_mark_DA()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_yU()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_yA()) return false; } } sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; v_2 = sbp.limit - sbp.cursor; if (r_mark_possessives()) { sbp.bra = sbp.cursor; sbp.slice_del(); v_3 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (!r_mark_lAr()) sbp.cursor = sbp.limit - v_3; } else { sbp.cursor = sbp.limit - v_2; if (!r_mark_lAr()) return true; } sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; r_stem_suffix_chain_before_ki(); return true; } function r_stem_noun_suffixes() { var v_1 = sbp.limit - sbp.cursor, v_2, v_3; sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); return; } sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; if (r_mark_ncA()) { sbp.bra = sbp.cursor; sbp.slice_del(); v_2 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (r_mark_lArI()) { sbp.bra = sbp.cursor; sbp.slice_del(); } else { sbp.cursor = sbp.limit - v_2; sbp.ket = sbp.cursor; if (!r_mark_possessives()) { sbp.cursor = sbp.limit - v_2; if (!r_mark_sU()) { sbp.cursor = sbp.limit - v_2; sbp.ket = sbp.cursor; if (!r_mark_lAr()) return; sbp.bra = sbp.cursor; sbp.slice_del(); if (!r_stem_suffix_chain_before_ki()) return; } } sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } } return; } sbp.cursor = sbp.limit - v_1; if (habr9(v_1)) return; sbp.cursor = sbp.limit - v_1; if (habr10(v_1)) return; sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; if (r_mark_DAn()) { sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; v_3 = sbp.limit - sbp.cursor; if (r_mark_possessives()) { sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } } else { sbp.cursor = sbp.limit - v_3; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } else { sbp.cursor = sbp.limit - v_3; r_stem_suffix_chain_before_ki(); } } return; } sbp.cursor = sbp.limit - v_1; if (habr11()) return; sbp.cursor = sbp.limit - v_1; if (r_mark_lArI()) { sbp.bra = sbp.cursor; sbp.slice_del(); return; } sbp.cursor = sbp.limit - v_1; if (r_stem_suffix_chain_before_ki()) return; sbp.cursor = sbp.limit - v_1; if (habr12()) return; sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; if (!r_mark_possessives()) { sbp.cursor = sbp.limit - v_1; if (!r_mark_sU()) return; } sbp.bra = sbp.cursor; sbp.slice_del(); sbp.ket = sbp.cursor; if (r_mark_lAr()) { sbp.bra = sbp.cursor; sbp.slice_del(); r_stem_suffix_chain_before_ki(); } } function r_post_process_last_consonants() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_23, 4); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("p"); break; case 2: sbp.slice_from("\u00E7"); break; case 3: sbp.slice_from("t"); break; case 4: sbp.slice_from("k"); break; } } } function habr13() { while (true) { var v_1 = sbp.limit - sbp.cursor; if (sbp.in_grouping_b(g_vowel, 97, 305)) { sbp.cursor = sbp.limit - v_1; break; } sbp.cursor = sbp.limit - v_1; if (sbp.cursor <= sbp.limit_backward) return false; sbp.cursor--; } return true; } function habr14(v_1, c1, c2) { sbp.cursor = sbp.limit - v_1; if (habr13()) { var v_2 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, c1)) { sbp.cursor = sbp.limit - v_2; if (!sbp.eq_s_b(1, c2)) return true; } sbp.cursor = sbp.limit - v_1; var c = sbp.cursor; sbp.insert(sbp.cursor, sbp.cursor, c2); sbp.cursor = c; return false; } return true; } function r_append_U_to_stems_ending_with_d_or_g() { var v_1 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "d")) { sbp.cursor = sbp.limit - v_1; if (!sbp.eq_s_b(1, "g")) return; } if (habr14(v_1, "a", "\u0131")) if (habr14(v_1, "e", "i")) if (habr14(v_1, "o", "u")) habr14(v_1, "\u00F6", "\u00FC") } function r_more_than_one_syllable_word() { var v_1 = sbp.cursor, v_2 = 2, v_3; while (true) { v_3 = sbp.cursor; while (!sbp.in_grouping(g_vowel, 97, 305)) { if (sbp.cursor >= sbp.limit) { sbp.cursor = v_3; if (v_2 > 0) return false; sbp.cursor = v_1; return true; } sbp.cursor++; } v_2--; } } function habr15(v_1, n1, c1) { while (!sbp.eq_s(n1, c1)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } I_strlen = n1; if (I_strlen != sbp.limit) return true; sbp.cursor = v_1; return false; } function r_is_reserved_word() { var v_1 = sbp.cursor; if (habr15(v_1, 2, "ad")) { sbp.cursor = v_1; if (habr15(v_1, 5, "soyad")) return false; } return true; } function r_postlude() { var v_1 = sbp.cursor; if (r_is_reserved_word()) return false; sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_append_U_to_stems_ending_with_d_or_g(); sbp.cursor = sbp.limit; r_post_process_last_consonants(); return true; } this.stem = function() { if (r_more_than_one_syllable_word()) { sbp.limit_backward = sbp.cursor; sbp.cursor = sbp.limit; r_stem_nominal_verb_suffixes(); sbp.cursor = sbp.limit; if (B_c_s_n_s) { r_stem_noun_suffixes(); sbp.cursor = sbp.limit_backward; if (r_postlude()) return true; } } return false; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.tr.stemmer, 'stemmer-tr'); lunr.tr.stopWordFilter = lunr.generateStopWordFilter('acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle'.split(' ')); lunr.Pipeline.registerFunction(lunr.tr.stopWordFilter, 'stopWordFilter-tr'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.stemmer.support.js0000664000175000017500000003230014664334534026325 0ustar carstencarsten/*! * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ;(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function () { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* provides utilities for the included stemmers */ lunr.stemmerSupport = { Among: function(s, substring_i, result, method) { this.toCharArray = function(s) { var sLength = s.length, charArr = new Array(sLength); for (var i = 0; i < sLength; i++) charArr[i] = s.charCodeAt(i); return charArr; }; if ((!s && s != "") || (!substring_i && (substring_i != 0)) || !result) throw ("Bad Among initialisation: s:" + s + ", substring_i: " + substring_i + ", result: " + result); this.s_size = s.length; this.s = this.toCharArray(s); this.substring_i = substring_i; this.result = result; this.method = method; }, SnowballProgram: function() { var current; return { bra : 0, ket : 0, limit : 0, cursor : 0, limit_backward : 0, setCurrent : function(word) { current = word; this.cursor = 0; this.limit = word.length; this.limit_backward = 0; this.bra = this.cursor; this.ket = this.limit; }, getCurrent : function() { var result = current; current = null; return result; }, in_grouping : function(s, min, max) { if (this.cursor < this.limit) { var ch = current.charCodeAt(this.cursor); if (ch <= max && ch >= min) { ch -= min; if (s[ch >> 3] & (0X1 << (ch & 0X7))) { this.cursor++; return true; } } } return false; }, in_grouping_b : function(s, min, max) { if (this.cursor > this.limit_backward) { var ch = current.charCodeAt(this.cursor - 1); if (ch <= max && ch >= min) { ch -= min; if (s[ch >> 3] & (0X1 << (ch & 0X7))) { this.cursor--; return true; } } } return false; }, out_grouping : function(s, min, max) { if (this.cursor < this.limit) { var ch = current.charCodeAt(this.cursor); if (ch > max || ch < min) { this.cursor++; return true; } ch -= min; if (!(s[ch >> 3] & (0X1 << (ch & 0X7)))) { this.cursor++; return true; } } return false; }, out_grouping_b : function(s, min, max) { if (this.cursor > this.limit_backward) { var ch = current.charCodeAt(this.cursor - 1); if (ch > max || ch < min) { this.cursor--; return true; } ch -= min; if (!(s[ch >> 3] & (0X1 << (ch & 0X7)))) { this.cursor--; return true; } } return false; }, eq_s : function(s_size, s) { if (this.limit - this.cursor < s_size) return false; for (var i = 0; i < s_size; i++) if (current.charCodeAt(this.cursor + i) != s.charCodeAt(i)) return false; this.cursor += s_size; return true; }, eq_s_b : function(s_size, s) { if (this.cursor - this.limit_backward < s_size) return false; for (var i = 0; i < s_size; i++) if (current.charCodeAt(this.cursor - s_size + i) != s .charCodeAt(i)) return false; this.cursor -= s_size; return true; }, find_among : function(v, v_size) { var i = 0, j = v_size, c = this.cursor, l = this.limit, common_i = 0, common_j = 0, first_key_inspected = false; while (true) { var k = i + ((j - i) >> 1), diff = 0, common = common_i < common_j ? common_i : common_j, w = v[k]; for (var i2 = common; i2 < w.s_size; i2++) { if (c + common == l) { diff = -1; break; } diff = current.charCodeAt(c + common) - w.s[i2]; if (diff) break; common++; } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0 || j == i || first_key_inspected) break; first_key_inspected = true; } } while (true) { var w = v[i]; if (common_i >= w.s_size) { this.cursor = c + w.s_size; if (!w.method) return w.result; var res = w.method(); this.cursor = c + w.s_size; if (res) return w.result; } i = w.substring_i; if (i < 0) return 0; } }, find_among_b : function(v, v_size) { var i = 0, j = v_size, c = this.cursor, lb = this.limit_backward, common_i = 0, common_j = 0, first_key_inspected = false; while (true) { var k = i + ((j - i) >> 1), diff = 0, common = common_i < common_j ? common_i : common_j, w = v[k]; for (var i2 = w.s_size - 1 - common; i2 >= 0; i2--) { if (c - common == lb) { diff = -1; break; } diff = current.charCodeAt(c - 1 - common) - w.s[i2]; if (diff) break; common++; } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0 || j == i || first_key_inspected) break; first_key_inspected = true; } } while (true) { var w = v[i]; if (common_i >= w.s_size) { this.cursor = c - w.s_size; if (!w.method) return w.result; var res = w.method(); this.cursor = c - w.s_size; if (res) return w.result; } i = w.substring_i; if (i < 0) return 0; } }, replace_s : function(c_bra, c_ket, s) { var adjustment = s.length - (c_ket - c_bra), left = current .substring(0, c_bra), right = current.substring(c_ket); current = left + s + right; this.limit += adjustment; if (this.cursor >= c_ket) this.cursor += adjustment; else if (this.cursor > c_bra) this.cursor = c_bra; return adjustment; }, slice_check : function() { if (this.bra < 0 || this.bra > this.ket || this.ket > this.limit || this.limit > current.length) throw ("faulty slice operation"); }, slice_from : function(s) { this.slice_check(); this.replace_s(this.bra, this.ket, s); }, slice_del : function() { this.slice_from(""); }, insert : function(c_bra, c_ket, s) { var adjustment = this.replace_s(c_bra, c_ket, s); if (c_bra <= this.bra) this.bra += adjustment; if (c_bra <= this.ket) this.ket += adjustment; }, slice_to : function() { this.slice_check(); return current.substring(this.bra, this.ket); }, eq_v_b : function(s) { return this.eq_s_b(s.length, s); } }; } }; lunr.trimmerSupport = { generateTrimmer: function(wordCharacters) { var startRegex = new RegExp("^[^" + wordCharacters + "]+") var endRegex = new RegExp("[^" + wordCharacters + "]+$") return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function (s) { return s .replace(startRegex, '') .replace(endRegex, ''); }) } else { // for lunr version 1 return token .replace(startRegex, '') .replace(endRegex, ''); } }; } } } })); mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.ko.js0000664000175000017500000002415014664334534023553 0ustar carstencarsten/*! * Lunr languages, `Korean` language * https://github.com/turbobit/lunr-languages * * Copyright 2021, Manikandan Venkatasubban * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.ko = function() { this.pipeline.reset(); this.pipeline.add( lunr.ko.trimmer, lunr.ko.stopWordFilter ); // change the tokenizer for japanese one // if (isLunr2) { // for lunr version 2.0.0 // this.tokenizer = lunr.ko.tokenizer; // } else { // if (lunr.tokenizer) { // for lunr version 0.6.0 // lunr.tokenizer = lunr.ko.tokenizer; // } // if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 // this.tokenizerFn = lunr.ko.tokenizer; // } // } /* if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.ko.stemmer) } */ }; /* lunr trimmer function */ lunr.ko.wordCharacters = "[" + "A-Za-z" + "\uac00-\ud7a3" + "]"; lunr.ko.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.ko.wordCharacters); lunr.Pipeline.registerFunction(lunr.ko.trimmer, 'trimmer-ko'); /* lunr stop word filter */ //https://www.ranks.nl/stopwords/korean lunr.ko.stopWordFilter = lunr.generateStopWordFilter('아 휴 아이구 아이쿠 아이고 어 나 우리 저희 따라 의해 을 를 에 의 가 으로 로 에게 뿐이다 의거하여 근거하여 입각하여 기준으로 예하면 예를 들면 예를 들자면 저 소인 소생 저희 지말고 하지마 하지마라 다른 물론 또한 그리고 비길수 없다 해서는 안된다 뿐만 아니라 만이 아니다 만은 아니다 막론하고 관계없이 그치지 않다 그러나 그런데 하지만 든간에 논하지 않다 따지지 않다 설사 비록 더라도 아니면 만 못하다 하는 편이 낫다 불문하고 향하여 향해서 향하다 쪽으로 틈타 이용하여 타다 오르다 제외하고 이 외에 이 밖에 하여야 비로소 한다면 몰라도 외에도 이곳 여기 부터 기점으로 따라서 할 생각이다 하려고하다 이리하여 그리하여 그렇게 함으로써 하지만 일때 할때 앞에서 중에서 보는데서 으로써 로써 까지 해야한다 일것이다 반드시 할줄알다 할수있다 할수있어 임에 틀림없다 한다면 등 등등 제 겨우 단지 다만 할뿐 딩동 댕그 대해서 대하여 대하면 훨씬 얼마나 얼마만큼 얼마큼 남짓 여 얼마간 약간 다소 좀 조금 다수 몇 얼마 지만 하물며 또한 그러나 그렇지만 하지만 이외에도 대해 말하자면 뿐이다 다음에 반대로 반대로 말하자면 이와 반대로 바꾸어서 말하면 바꾸어서 한다면 만약 그렇지않으면 까악 툭 딱 삐걱거리다 보드득 비걱거리다 꽈당 응당 해야한다 에 가서 각 각각 여러분 각종 각자 제각기 하도록하다 와 과 그러므로 그래서 고로 한 까닭에 하기 때문에 거니와 이지만 대하여 관하여 관한 과연 실로 아니나다를가 생각한대로 진짜로 한적이있다 하곤하였다 하 하하 허허 아하 거바 와 오 왜 어째서 무엇때문에 어찌 하겠는가 무슨 어디 어느곳 더군다나 하물며 더욱이는 어느때 언제 야 이봐 어이 여보시오 흐흐 흥 휴 헉헉 헐떡헐떡 영차 여차 어기여차 끙끙 아야 앗 아야 콸콸 졸졸 좍좍 뚝뚝 주룩주룩 솨 우르르 그래도 또 그리고 바꾸어말하면 바꾸어말하자면 혹은 혹시 답다 및 그에 따르는 때가 되어 즉 지든지 설령 가령 하더라도 할지라도 일지라도 지든지 몇 거의 하마터면 인젠 이젠 된바에야 된이상 만큼 어찌됏든 그위에 게다가 점에서 보아 비추어 보아 고려하면 하게될것이다 일것이다 비교적 좀 보다더 비하면 시키다 하게하다 할만하다 의해서 연이서 이어서 잇따라 뒤따라 뒤이어 결국 의지하여 기대여 통하여 자마자 더욱더 불구하고 얼마든지 마음대로 주저하지 않고 곧 즉시 바로 당장 하자마자 밖에 안된다 하면된다 그래 그렇지 요컨대 다시 말하자면 바꿔 말하면 즉 구체적으로 말하자면 시작하여 시초에 이상 허 헉 허걱 바와같이 해도좋다 해도된다 게다가 더구나 하물며 와르르 팍 퍽 펄렁 동안 이래 하고있었다 이었다 에서 로부터 까지 예하면 했어요 해요 함께 같이 더불어 마저 마저도 양자 모두 습니다 가까스로 하려고하다 즈음하여 다른 다른 방면으로 해봐요 습니까 했어요 말할것도 없고 무릎쓰고 개의치않고 하는것만 못하다 하는것이 낫다 매 매번 들 모 어느것 어느 로써 갖고말하자면 어디 어느쪽 어느것 어느해 어느 년도 라 해도 언젠가 어떤것 어느것 저기 저쪽 저것 그때 그럼 그러면 요만한걸 그래 그때 저것만큼 그저 이르기까지 할 줄 안다 할 힘이 있다 너 너희 당신 어찌 설마 차라리 할지언정 할지라도 할망정 할지언정 구토하다 게우다 토하다 메쓰겁다 옆사람 퉤 쳇 의거하여 근거하여 의해 따라 힘입어 그 다음 버금 두번째로 기타 첫번째로 나머지는 그중에서 견지에서 형식으로 쓰여 입장에서 위해서 단지 의해되다 하도록시키다 뿐만아니라 반대로 전후 전자 앞의것 잠시 잠깐 하면서 그렇지만 다음에 그러한즉 그런즉 남들 아무거나 어찌하든지 같다 비슷하다 예컨대 이럴정도로 어떻게 만약 만일 위에서 서술한바와같이 인 듯하다 하지 않는다면 만약에 무엇 무슨 어느 어떤 아래윗 조차 한데 그럼에도 불구하고 여전히 심지어 까지도 조차도 하지 않도록 않기 위하여 때 시각 무렵 시간 동안 어때 어떠한 하여금 네 예 우선 누구 누가 알겠는가 아무도 줄은모른다 줄은 몰랏다 하는 김에 겸사겸사 하는바 그런 까닭에 한 이유는 그러니 그러니까 때문에 그 너희 그들 너희들 타인 것 것들 너 위하여 공동으로 동시에 하기 위하여 어찌하여 무엇때문에 붕붕 윙윙 나 우리 엉엉 휘익 윙윙 오호 아하 어쨋든 만 못하다 하기보다는 차라리 하는 편이 낫다 흐흐 놀라다 상대적으로 말하자면 마치 아니라면 쉿 그렇지 않으면 그렇지 않다면 안 그러면 아니었다면 하든지 아니면 이라면 좋아 알았어 하는것도 그만이다 어쩔수 없다 하나 일 일반적으로 일단 한켠으로는 오자마자 이렇게되면 이와같다면 전부 한마디 한항목 근거로 하기에 아울러 하지 않도록 않기 위해서 이르기까지 이 되다 로 인하여 까닭으로 이유만으로 이로 인하여 그래서 이 때문에 그러므로 그런 까닭에 알 수 있다 결론을 낼 수 있다 으로 인하여 있다 어떤것 관계가 있다 관련이 있다 연관되다 어떤것들 에 대해 이리하여 그리하여 여부 하기보다는 하느니 하면 할수록 운운 이러이러하다 하구나 하도다 다시말하면 다음으로 에 있다 에 달려 있다 우리 우리들 오히려 하기는한데 어떻게 어떻해 어찌됏어 어때 어째서 본대로 자 이 이쪽 여기 이것 이번 이렇게말하자면 이런 이러한 이와 같은 요만큼 요만한 것 얼마 안 되는 것 이만큼 이 정도의 이렇게 많은 것 이와 같다 이때 이렇구나 것과 같이 끼익 삐걱 따위 와 같은 사람들 부류의 사람들 왜냐하면 중의하나 오직 오로지 에 한하다 하기만 하면 도착하다 까지 미치다 도달하다 정도에 이르다 할 지경이다 결과에 이르다 관해서는 여러분 하고 있다 한 후 혼자 자기 자기집 자신 우에 종합한것과같이 총적으로 보면 총적으로 말하면 총적으로 대로 하다 으로서 참 그만이다 할 따름이다 쿵 탕탕 쾅쾅 둥둥 봐 봐라 아이야 아니 와아 응 아이 참나 년 월 일 령 영 일 이 삼 사 오 육 륙 칠 팔 구 이천육 이천칠 이천팔 이천구 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 령 영'.split(' ')); lunr.Pipeline.registerFunction(lunr.ko.stopWordFilter, 'stopWordFilter-ko'); /* lunr stemmer function */ lunr.ko.stemmer = (function() { return function(word) { // for lunr version 2 if (typeof word.update === "function") { return word.update(function(word) { return word; }) } else { // for lunr version <= 1 return word; } } })(); lunr.Pipeline.registerFunction(lunr.ko.stemmer, 'stemmer-ko'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.kn.js0000664000175000017500000001252214664334534023552 0ustar carstencarsten/*! * Lunr languages, `Kannada` language * https://github.com/MiKr13/lunr-languages * * Copyright 2023, India * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.kn = function() { this.pipeline.reset(); this.pipeline.add( lunr.kn.trimmer, lunr.kn.stopWordFilter, lunr.kn.stemmer ); if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.kn.stemmer) } }; /* lunr trimmer function */ lunr.kn.wordCharacters = "\u0C80-\u0C84\u0C85-\u0C94\u0C95-\u0CB9\u0CBE-\u0CCC\u0CBC-\u0CBD\u0CD5-\u0CD6\u0CDD-\u0CDE\u0CE0-\u0CE1\u0CE2-\u0CE3\u0CE4\u0CE5\u0CE6-\u0CEF\u0CF1-\u0CF3"; lunr.kn.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.kn.wordCharacters); lunr.Pipeline.registerFunction(lunr.kn.trimmer, 'trimmer-kn'); /* lunr stop word filter */ lunr.kn.stopWordFilter = lunr.generateStopWordFilter( 'ಮತ್ತು ಈ ಒಂದು ರಲ್ಲಿ ಹಾಗೂ ಎಂದು ಅಥವಾ ಇದು ರ ಅವರು ಎಂಬ ಮೇಲೆ ಅವರ ತನ್ನ ಆದರೆ ತಮ್ಮ ನಂತರ ಮೂಲಕ ಹೆಚ್ಚು ನ ಆ ಕೆಲವು ಅನೇಕ ಎರಡು ಹಾಗು ಪ್ರಮುಖ ಇದನ್ನು ಇದರ ಸುಮಾರು ಅದರ ಅದು ಮೊದಲ ಬಗ್ಗೆ ನಲ್ಲಿ ರಂದು ಇತರ ಅತ್ಯಂತ ಹೆಚ್ಚಿನ ಸಹ ಸಾಮಾನ್ಯವಾಗಿ ನೇ ಹಲವಾರು ಹೊಸ ದಿ ಕಡಿಮೆ ಯಾವುದೇ ಹೊಂದಿದೆ ದೊಡ್ಡ ಅನ್ನು ಇವರು ಪ್ರಕಾರ ಇದೆ ಮಾತ್ರ ಕೂಡ ಇಲ್ಲಿ ಎಲ್ಲಾ ವಿವಿಧ ಅದನ್ನು ಹಲವು ರಿಂದ ಕೇವಲ ದ ದಕ್ಷಿಣ ಗೆ ಅವನ ಅತಿ ನೆಯ ಬಹಳ ಕೆಲಸ ಎಲ್ಲ ಪ್ರತಿ ಇತ್ಯಾದಿ ಇವು ಬೇರೆ ಹೀಗೆ ನಡುವೆ ಇದಕ್ಕೆ ಎಸ್ ಇವರ ಮೊದಲು ಶ್ರೀ ಮಾಡುವ ಇದರಲ್ಲಿ ರೀತಿಯ ಮಾಡಿದ ಕಾಲ ಅಲ್ಲಿ ಮಾಡಲು ಅದೇ ಈಗ ಅವು ಗಳು ಎ ಎಂಬುದು ಅವನು ಅಂದರೆ ಅವರಿಗೆ ಇರುವ ವಿಶೇಷ ಮುಂದೆ ಅವುಗಳ ಮುಂತಾದ ಮೂಲ ಬಿ ಮೀ ಒಂದೇ ಇನ್ನೂ ಹೆಚ್ಚಾಗಿ ಮಾಡಿ ಅವರನ್ನು ಇದೇ ಯ ರೀತಿಯಲ್ಲಿ ಜೊತೆ ಅದರಲ್ಲಿ ಮಾಡಿದರು ನಡೆದ ಆಗ ಮತ್ತೆ ಪೂರ್ವ ಆತ ಬಂದ ಯಾವ ಒಟ್ಟು ಇತರೆ ಹಿಂದೆ ಪ್ರಮಾಣದ ಗಳನ್ನು ಕುರಿತು ಯು ಆದ್ದರಿಂದ ಅಲ್ಲದೆ ನಗರದ ಮೇಲಿನ ಏಕೆಂದರೆ ರಷ್ಟು ಎಂಬುದನ್ನು ಬಾರಿ ಎಂದರೆ ಹಿಂದಿನ ಆದರೂ ಆದ ಸಂಬಂಧಿಸಿದ ಮತ್ತೊಂದು ಸಿ ಆತನ '.split(' ')); /* lunr stemmer function */ lunr.kn.stemmer = (function() { return function(word) { // for lunr version 2 if (typeof word.update === "function") { return word.update(function(word) { return word; }) } else { // for lunr version <= 1 return word; } } })(); var segmenter = lunr.wordcut; segmenter.init(); lunr.kn.tokenizer = function(obj) { if (!arguments.length || obj == null || obj == undefined) return [] if (Array.isArray(obj)) return obj.map(function(t) { return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase() }); var str = obj.toString().toLowerCase().replace(/^\s+/, ''); return segmenter.cut(str).split('|'); } lunr.Pipeline.registerFunction(lunr.kn.stemmer, 'stemmer-kn'); lunr.Pipeline.registerFunction(lunr.kn.stopWordFilter, 'stopWordFilter-kn'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.da.js0000664000175000017500000002415514664334534023533 0ustar carstencarsten/*! * Lunr languages, `Danish` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.da = function() { this.pipeline.reset(); this.pipeline.add( lunr.da.trimmer, lunr.da.stopWordFilter, lunr.da.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.da.stemmer) } }; /* lunr trimmer function */ lunr.da.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.da.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.da.wordCharacters); lunr.Pipeline.registerFunction(lunr.da.trimmer, 'trimmer-da'); /* lunr stemmer function */ lunr.da.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function DanishStemmer() { var a_0 = [new Among("hed", -1, 1), new Among("ethed", 0, 1), new Among("ered", -1, 1), new Among("e", -1, 1), new Among("erede", 3, 1), new Among("ende", 3, 1), new Among("erende", 5, 1), new Among("ene", 3, 1), new Among("erne", 3, 1), new Among("ere", 3, 1), new Among("en", -1, 1), new Among("heden", 10, 1), new Among("eren", 10, 1), new Among("er", -1, 1), new Among("heder", 13, 1), new Among("erer", 13, 1), new Among("s", -1, 2), new Among("heds", 16, 1), new Among("es", 16, 1), new Among("endes", 18, 1), new Among("erendes", 19, 1), new Among("enes", 18, 1), new Among("ernes", 18, 1), new Among("eres", 18, 1), new Among("ens", 16, 1), new Among("hedens", 24, 1), new Among("erens", 24, 1), new Among("ers", 16, 1), new Among("ets", 16, 1), new Among("erets", 28, 1), new Among("et", -1, 1), new Among("eret", 30, 1) ], a_1 = [ new Among("gd", -1, -1), new Among("dt", -1, -1), new Among("gt", -1, -1), new Among("kt", -1, -1) ], a_2 = [ new Among("ig", -1, 1), new Among("lig", 0, 1), new Among("elig", 1, 1), new Among("els", -1, 1), new Among("l\u00F8st", -1, 2) ], g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 ], g_s_ending = [239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 ], I_x, I_p1, S_ch, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function r_mark_regions() { var v_1, c = sbp.cursor + 3; I_p1 = sbp.limit; if (0 <= c && c <= sbp.limit) { I_x = c; while (true) { v_1 = sbp.cursor; if (sbp.in_grouping(g_v, 97, 248)) { sbp.cursor = v_1; break; } sbp.cursor = v_1; if (v_1 >= sbp.limit) return; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 248)) { if (sbp.cursor >= sbp.limit) return; sbp.cursor++; } I_p1 = sbp.cursor; if (I_p1 < I_x) I_p1 = I_x; } } function r_main_suffix() { var among_var, v_1; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_0, 32); sbp.limit_backward = v_1; if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: sbp.slice_del(); break; case 2: if (sbp.in_grouping_b(g_s_ending, 97, 229)) sbp.slice_del(); break; } } } } function r_consonant_pair() { var v_1 = sbp.limit - sbp.cursor, v_2; if (sbp.cursor >= I_p1) { v_2 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; if (sbp.find_among_b(a_1, 4)) { sbp.bra = sbp.cursor; sbp.limit_backward = v_2; sbp.cursor = sbp.limit - v_1; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.bra = sbp.cursor; sbp.slice_del(); } } else sbp.limit_backward = v_2; } } function r_other_suffix() { var among_var, v_1 = sbp.limit - sbp.cursor, v_2, v_3; sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "st")) { sbp.bra = sbp.cursor; if (sbp.eq_s_b(2, "ig")) sbp.slice_del(); } sbp.cursor = sbp.limit - v_1; if (sbp.cursor >= I_p1) { v_2 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_2, 5); sbp.limit_backward = v_2; if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: sbp.slice_del(); v_3 = sbp.limit - sbp.cursor; r_consonant_pair(); sbp.cursor = sbp.limit - v_3; break; case 2: sbp.slice_from("l\u00F8s"); break; } } } } function r_undouble() { var v_1; if (sbp.cursor >= I_p1) { v_1 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.ket = sbp.cursor; if (sbp.out_grouping_b(g_v, 97, 248)) { sbp.bra = sbp.cursor; S_ch = sbp.slice_to(S_ch); sbp.limit_backward = v_1; if (sbp.eq_v_b(S_ch)) sbp.slice_del(); } else sbp.limit_backward = v_1; } } this.stem = function() { var v_1 = sbp.cursor; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_main_suffix(); sbp.cursor = sbp.limit; r_consonant_pair(); sbp.cursor = sbp.limit; r_other_suffix(); sbp.cursor = sbp.limit; r_undouble(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.da.stemmer, 'stemmer-da'); lunr.da.stopWordFilter = lunr.generateStopWordFilter('ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været'.split(' ')); lunr.Pipeline.registerFunction(lunr.da.stopWordFilter, 'stopWordFilter-da'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.nl.js0000664000175000017500000003543614664334534023564 0ustar carstencarsten/*! * Lunr languages, `Dutch` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.nl = function() { this.pipeline.reset(); this.pipeline.add( lunr.nl.trimmer, lunr.nl.stopWordFilter, lunr.nl.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.nl.stemmer) } }; /* lunr trimmer function */ lunr.nl.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.nl.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.nl.wordCharacters); lunr.Pipeline.registerFunction(lunr.nl.trimmer, 'trimmer-nl'); /* lunr stemmer function */ lunr.nl.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function DutchStemmer() { var a_0 = [new Among("", -1, 6), new Among("\u00E1", 0, 1), new Among("\u00E4", 0, 1), new Among("\u00E9", 0, 2), new Among("\u00EB", 0, 2), new Among("\u00ED", 0, 3), new Among("\u00EF", 0, 3), new Among("\u00F3", 0, 4), new Among("\u00F6", 0, 4), new Among("\u00FA", 0, 5), new Among("\u00FC", 0, 5) ], a_1 = [new Among("", -1, 3), new Among("I", 0, 2), new Among("Y", 0, 1) ], a_2 = [ new Among("dd", -1, -1), new Among("kk", -1, -1), new Among("tt", -1, -1) ], a_3 = [new Among("ene", -1, 2), new Among("se", -1, 3), new Among("en", -1, 2), new Among("heden", 2, 1), new Among("s", -1, 3) ], a_4 = [ new Among("end", -1, 1), new Among("ig", -1, 2), new Among("ing", -1, 1), new Among("lijk", -1, 3), new Among("baar", -1, 4), new Among("bar", -1, 5) ], a_5 = [ new Among("aa", -1, -1), new Among("ee", -1, -1), new Among("oo", -1, -1), new Among("uu", -1, -1) ], g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 ], g_v_I = [1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 ], g_v_j = [ 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 ], I_p2, I_p1, B_e_found, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function r_prelude() { var among_var, v_1 = sbp.cursor, v_2, v_3; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_0, 11); if (among_var) { sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("a"); continue; case 2: sbp.slice_from("e"); continue; case 3: sbp.slice_from("i"); continue; case 4: sbp.slice_from("o"); continue; case 5: sbp.slice_from("u"); continue; case 6: if (sbp.cursor >= sbp.limit) break; sbp.cursor++; continue; } } break; } sbp.cursor = v_1; sbp.bra = v_1; if (sbp.eq_s(1, "y")) { sbp.ket = sbp.cursor; sbp.slice_from("Y"); } else sbp.cursor = v_1; while (true) { v_2 = sbp.cursor; if (sbp.in_grouping(g_v, 97, 232)) { v_3 = sbp.cursor; sbp.bra = v_3; if (sbp.eq_s(1, "i")) { sbp.ket = sbp.cursor; if (sbp.in_grouping(g_v, 97, 232)) { sbp.slice_from("I"); sbp.cursor = v_2; } } else { sbp.cursor = v_3; if (sbp.eq_s(1, "y")) { sbp.ket = sbp.cursor; sbp.slice_from("Y"); sbp.cursor = v_2; } else if (habr1(v_2)) break; } } else if (habr1(v_2)) break; } } function habr1(v_1) { sbp.cursor = v_1; if (v_1 >= sbp.limit) return true; sbp.cursor++; return false; } function r_mark_regions() { I_p1 = sbp.limit; I_p2 = I_p1; if (!habr2()) { I_p1 = sbp.cursor; if (I_p1 < 3) I_p1 = 3; if (!habr2()) I_p2 = sbp.cursor; } } function habr2() { while (!sbp.in_grouping(g_v, 97, 232)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 232)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } return false; } function r_postlude() { var among_var; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_1, 3); if (among_var) { sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("y"); break; case 2: sbp.slice_from("i"); break; case 3: if (sbp.cursor >= sbp.limit) return; sbp.cursor++; break; } } } } function r_R1() { return I_p1 <= sbp.cursor; } function r_R2() { return I_p2 <= sbp.cursor; } function r_undouble() { var v_1 = sbp.limit - sbp.cursor; if (sbp.find_among_b(a_2, 3)) { sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.bra = sbp.cursor; sbp.slice_del(); } } } function r_e_ending() { var v_1; B_e_found = false; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "e")) { sbp.bra = sbp.cursor; if (r_R1()) { v_1 = sbp.limit - sbp.cursor; if (sbp.out_grouping_b(g_v, 97, 232)) { sbp.cursor = sbp.limit - v_1; sbp.slice_del(); B_e_found = true; r_undouble(); } } } } function r_en_ending() { var v_1; if (r_R1()) { v_1 = sbp.limit - sbp.cursor; if (sbp.out_grouping_b(g_v, 97, 232)) { sbp.cursor = sbp.limit - v_1; if (!sbp.eq_s_b(3, "gem")) { sbp.cursor = sbp.limit - v_1; sbp.slice_del(); r_undouble(); } } } } function r_standard_suffix() { var among_var, v_1 = sbp.limit - sbp.cursor, v_2, v_3, v_4, v_5, v_6; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_3, 5); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (r_R1()) sbp.slice_from("heid"); break; case 2: r_en_ending(); break; case 3: if (r_R1() && sbp.out_grouping_b(g_v_j, 97, 232)) sbp.slice_del(); break; } } sbp.cursor = sbp.limit - v_1; r_e_ending(); sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; if (sbp.eq_s_b(4, "heid")) { sbp.bra = sbp.cursor; if (r_R2()) { v_2 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "c")) { sbp.cursor = sbp.limit - v_2; sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "en")) { sbp.bra = sbp.cursor; r_en_ending(); } } } } sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_4, 6); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (r_R2()) { sbp.slice_del(); v_3 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "ig")) { sbp.bra = sbp.cursor; if (r_R2()) { v_4 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "e")) { sbp.cursor = sbp.limit - v_4; sbp.slice_del(); break; } } } sbp.cursor = sbp.limit - v_3; r_undouble(); } break; case 2: if (r_R2()) { v_5 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "e")) { sbp.cursor = sbp.limit - v_5; sbp.slice_del(); } } break; case 3: if (r_R2()) { sbp.slice_del(); r_e_ending(); } break; case 4: if (r_R2()) sbp.slice_del(); break; case 5: if (r_R2() && B_e_found) sbp.slice_del(); break; } } sbp.cursor = sbp.limit - v_1; if (sbp.out_grouping_b(g_v_I, 73, 232)) { v_6 = sbp.limit - sbp.cursor; if (sbp.find_among_b(a_5, 4) && sbp.out_grouping_b(g_v, 97, 232)) { sbp.cursor = sbp.limit - v_6; sbp.ket = sbp.cursor; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.bra = sbp.cursor; sbp.slice_del(); } } } } this.stem = function() { var v_1 = sbp.cursor; r_prelude(); sbp.cursor = v_1; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_standard_suffix(); sbp.cursor = sbp.limit_backward; r_postlude(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.nl.stemmer, 'stemmer-nl'); lunr.nl.stopWordFilter = lunr.generateStopWordFilter(' aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou'.split(' ')); lunr.Pipeline.registerFunction(lunr.nl.stopWordFilter, 'stopWordFilter-nl'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.ro.js0000664000175000017500000005516514664334534023574 0ustar carstencarsten/*! * Lunr languages, `Romanian` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.ro = function() { this.pipeline.reset(); this.pipeline.add( lunr.ro.trimmer, lunr.ro.stopWordFilter, lunr.ro.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.ro.stemmer) } }; /* lunr trimmer function */ lunr.ro.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.ro.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.ro.wordCharacters); lunr.Pipeline.registerFunction(lunr.ro.trimmer, 'trimmer-ro'); /* lunr stemmer function */ lunr.ro.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function RomanianStemmer() { var a_0 = [new Among("", -1, 3), new Among("I", 0, 1), new Among("U", 0, 2)], a_1 = [ new Among("ea", -1, 3), new Among("a\u0163ia", -1, 7), new Among("aua", -1, 2), new Among("iua", -1, 4), new Among("a\u0163ie", -1, 7), new Among("ele", -1, 3), new Among("ile", -1, 5), new Among("iile", 6, 4), new Among("iei", -1, 4), new Among("atei", -1, 6), new Among("ii", -1, 4), new Among("ului", -1, 1), new Among("ul", -1, 1), new Among("elor", -1, 3), new Among("ilor", -1, 4), new Among("iilor", 14, 4) ], a_2 = [ new Among("icala", -1, 4), new Among("iciva", -1, 4), new Among("ativa", -1, 5), new Among("itiva", -1, 6), new Among("icale", -1, 4), new Among("a\u0163iune", -1, 5), new Among("i\u0163iune", -1, 6), new Among("atoare", -1, 5), new Among("itoare", -1, 6), new Among("\u0103toare", -1, 5), new Among("icitate", -1, 4), new Among("abilitate", -1, 1), new Among("ibilitate", -1, 2), new Among("ivitate", -1, 3), new Among("icive", -1, 4), new Among("ative", -1, 5), new Among("itive", -1, 6), new Among("icali", -1, 4), new Among("atori", -1, 5), new Among("icatori", 18, 4), new Among("itori", -1, 6), new Among("\u0103tori", -1, 5), new Among("icitati", -1, 4), new Among("abilitati", -1, 1), new Among("ivitati", -1, 3), new Among("icivi", -1, 4), new Among("ativi", -1, 5), new Among("itivi", -1, 6), new Among("icit\u0103i", -1, 4), new Among("abilit\u0103i", -1, 1), new Among("ivit\u0103i", -1, 3), new Among("icit\u0103\u0163i", -1, 4), new Among("abilit\u0103\u0163i", -1, 1), new Among("ivit\u0103\u0163i", -1, 3), new Among("ical", -1, 4), new Among("ator", -1, 5), new Among("icator", 35, 4), new Among("itor", -1, 6), new Among("\u0103tor", -1, 5), new Among("iciv", -1, 4), new Among("ativ", -1, 5), new Among("itiv", -1, 6), new Among("ical\u0103", -1, 4), new Among("iciv\u0103", -1, 4), new Among("ativ\u0103", -1, 5), new Among("itiv\u0103", -1, 6) ], a_3 = [new Among("ica", -1, 1), new Among("abila", -1, 1), new Among("ibila", -1, 1), new Among("oasa", -1, 1), new Among("ata", -1, 1), new Among("ita", -1, 1), new Among("anta", -1, 1), new Among("ista", -1, 3), new Among("uta", -1, 1), new Among("iva", -1, 1), new Among("ic", -1, 1), new Among("ice", -1, 1), new Among("abile", -1, 1), new Among("ibile", -1, 1), new Among("isme", -1, 3), new Among("iune", -1, 2), new Among("oase", -1, 1), new Among("ate", -1, 1), new Among("itate", 17, 1), new Among("ite", -1, 1), new Among("ante", -1, 1), new Among("iste", -1, 3), new Among("ute", -1, 1), new Among("ive", -1, 1), new Among("ici", -1, 1), new Among("abili", -1, 1), new Among("ibili", -1, 1), new Among("iuni", -1, 2), new Among("atori", -1, 1), new Among("osi", -1, 1), new Among("ati", -1, 1), new Among("itati", 30, 1), new Among("iti", -1, 1), new Among("anti", -1, 1), new Among("isti", -1, 3), new Among("uti", -1, 1), new Among("i\u015Fti", -1, 3), new Among("ivi", -1, 1), new Among("it\u0103i", -1, 1), new Among("o\u015Fi", -1, 1), new Among("it\u0103\u0163i", -1, 1), new Among("abil", -1, 1), new Among("ibil", -1, 1), new Among("ism", -1, 3), new Among("ator", -1, 1), new Among("os", -1, 1), new Among("at", -1, 1), new Among("it", -1, 1), new Among("ant", -1, 1), new Among("ist", -1, 3), new Among("ut", -1, 1), new Among("iv", -1, 1), new Among("ic\u0103", -1, 1), new Among("abil\u0103", -1, 1), new Among("ibil\u0103", -1, 1), new Among("oas\u0103", -1, 1), new Among("at\u0103", -1, 1), new Among("it\u0103", -1, 1), new Among("ant\u0103", -1, 1), new Among("ist\u0103", -1, 3), new Among("ut\u0103", -1, 1), new Among("iv\u0103", -1, 1) ], a_4 = [new Among("ea", -1, 1), new Among("ia", -1, 1), new Among("esc", -1, 1), new Among("\u0103sc", -1, 1), new Among("ind", -1, 1), new Among("\u00E2nd", -1, 1), new Among("are", -1, 1), new Among("ere", -1, 1), new Among("ire", -1, 1), new Among("\u00E2re", -1, 1), new Among("se", -1, 2), new Among("ase", 10, 1), new Among("sese", 10, 2), new Among("ise", 10, 1), new Among("use", 10, 1), new Among("\u00E2se", 10, 1), new Among("e\u015Fte", -1, 1), new Among("\u0103\u015Fte", -1, 1), new Among("eze", -1, 1), new Among("ai", -1, 1), new Among("eai", 19, 1), new Among("iai", 19, 1), new Among("sei", -1, 2), new Among("e\u015Fti", -1, 1), new Among("\u0103\u015Fti", -1, 1), new Among("ui", -1, 1), new Among("ezi", -1, 1), new Among("\u00E2i", -1, 1), new Among("a\u015Fi", -1, 1), new Among("se\u015Fi", -1, 2), new Among("ase\u015Fi", 29, 1), new Among("sese\u015Fi", 29, 2), new Among("ise\u015Fi", 29, 1), new Among("use\u015Fi", 29, 1), new Among("\u00E2se\u015Fi", 29, 1), new Among("i\u015Fi", -1, 1), new Among("u\u015Fi", -1, 1), new Among("\u00E2\u015Fi", -1, 1), new Among("a\u0163i", -1, 2), new Among("ea\u0163i", 38, 1), new Among("ia\u0163i", 38, 1), new Among("e\u0163i", -1, 2), new Among("i\u0163i", -1, 2), new Among("\u00E2\u0163i", -1, 2), new Among("ar\u0103\u0163i", -1, 1), new Among("ser\u0103\u0163i", -1, 2), new Among("aser\u0103\u0163i", 45, 1), new Among("seser\u0103\u0163i", 45, 2), new Among("iser\u0103\u0163i", 45, 1), new Among("user\u0103\u0163i", 45, 1), new Among("\u00E2ser\u0103\u0163i", 45, 1), new Among("ir\u0103\u0163i", -1, 1), new Among("ur\u0103\u0163i", -1, 1), new Among("\u00E2r\u0103\u0163i", -1, 1), new Among("am", -1, 1), new Among("eam", 54, 1), new Among("iam", 54, 1), new Among("em", -1, 2), new Among("asem", 57, 1), new Among("sesem", 57, 2), new Among("isem", 57, 1), new Among("usem", 57, 1), new Among("\u00E2sem", 57, 1), new Among("im", -1, 2), new Among("\u00E2m", -1, 2), new Among("\u0103m", -1, 2), new Among("ar\u0103m", 65, 1), new Among("ser\u0103m", 65, 2), new Among("aser\u0103m", 67, 1), new Among("seser\u0103m", 67, 2), new Among("iser\u0103m", 67, 1), new Among("user\u0103m", 67, 1), new Among("\u00E2ser\u0103m", 67, 1), new Among("ir\u0103m", 65, 1), new Among("ur\u0103m", 65, 1), new Among("\u00E2r\u0103m", 65, 1), new Among("au", -1, 1), new Among("eau", 76, 1), new Among("iau", 76, 1), new Among("indu", -1, 1), new Among("\u00E2ndu", -1, 1), new Among("ez", -1, 1), new Among("easc\u0103", -1, 1), new Among("ar\u0103", -1, 1), new Among("ser\u0103", -1, 2), new Among("aser\u0103", 84, 1), new Among("seser\u0103", 84, 2), new Among("iser\u0103", 84, 1), new Among("user\u0103", 84, 1), new Among("\u00E2ser\u0103", 84, 1), new Among("ir\u0103", -1, 1), new Among("ur\u0103", -1, 1), new Among("\u00E2r\u0103", -1, 1), new Among("eaz\u0103", -1, 1) ], a_5 = [new Among("a", -1, 1), new Among("e", -1, 1), new Among("ie", 1, 1), new Among("i", -1, 1), new Among("\u0103", -1, 1) ], g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 4 ], B_standard_suffix_removed, I_p2, I_p1, I_pV, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function habr1(c1, c2) { if (sbp.eq_s(1, c1)) { sbp.ket = sbp.cursor; if (sbp.in_grouping(g_v, 97, 259)) sbp.slice_from(c2); } } function r_prelude() { var v_1, v_2; while (true) { v_1 = sbp.cursor; if (sbp.in_grouping(g_v, 97, 259)) { v_2 = sbp.cursor; sbp.bra = v_2; habr1("u", "U"); sbp.cursor = v_2; habr1("i", "I"); } sbp.cursor = v_1; if (sbp.cursor >= sbp.limit) { break; } sbp.cursor++; } } function habr2() { if (sbp.out_grouping(g_v, 97, 259)) { while (!sbp.in_grouping(g_v, 97, 259)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } return false; } return true; } function habr3() { if (sbp.in_grouping(g_v, 97, 259)) { while (!sbp.out_grouping(g_v, 97, 259)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } } return false; } function habr4() { var v_1 = sbp.cursor, v_2, v_3; if (sbp.in_grouping(g_v, 97, 259)) { v_2 = sbp.cursor; if (habr2()) { sbp.cursor = v_2; if (!habr3()) { I_pV = sbp.cursor; return; } } else { I_pV = sbp.cursor; return; } } sbp.cursor = v_1; if (sbp.out_grouping(g_v, 97, 259)) { v_3 = sbp.cursor; if (habr2()) { sbp.cursor = v_3; if (sbp.in_grouping(g_v, 97, 259) && sbp.cursor < sbp.limit) sbp.cursor++; } I_pV = sbp.cursor; } } function habr5() { while (!sbp.in_grouping(g_v, 97, 259)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 259)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } return true; } function r_mark_regions() { var v_1 = sbp.cursor; I_pV = sbp.limit; I_p1 = I_pV; I_p2 = I_pV; habr4(); sbp.cursor = v_1; if (habr5()) { I_p1 = sbp.cursor; if (habr5()) I_p2 = sbp.cursor; } } function r_postlude() { var among_var; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_0, 3); if (among_var) { sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("i"); continue; case 2: sbp.slice_from("u"); continue; case 3: if (sbp.cursor >= sbp.limit) break; sbp.cursor++; continue; } } break; } } function r_RV() { return I_pV <= sbp.cursor; } function r_R1() { return I_p1 <= sbp.cursor; } function r_R2() { return I_p2 <= sbp.cursor; } function r_step_0() { var among_var, v_1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_1, 16); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: sbp.slice_del(); break; case 2: sbp.slice_from("a"); break; case 3: sbp.slice_from("e"); break; case 4: sbp.slice_from("i"); break; case 5: v_1 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(2, "ab")) { sbp.cursor = sbp.limit - v_1; sbp.slice_from("i"); } break; case 6: sbp.slice_from("at"); break; case 7: sbp.slice_from("a\u0163i"); break; } } } } function r_combo_suffix() { var among_var, v_1 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_2, 46); if (among_var) { sbp.bra = sbp.cursor; if (r_R1()) { switch (among_var) { case 1: sbp.slice_from("abil"); break; case 2: sbp.slice_from("ibil"); break; case 3: sbp.slice_from("iv"); break; case 4: sbp.slice_from("ic"); break; case 5: sbp.slice_from("at"); break; case 6: sbp.slice_from("it"); break; } B_standard_suffix_removed = true; sbp.cursor = sbp.limit - v_1; return true; } } return false; } function r_standard_suffix() { var among_var, v_1; B_standard_suffix_removed = false; while (true) { v_1 = sbp.limit - sbp.cursor; if (!r_combo_suffix()) { sbp.cursor = sbp.limit - v_1; break; } } sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_3, 62); if (among_var) { sbp.bra = sbp.cursor; if (r_R2()) { switch (among_var) { case 1: sbp.slice_del(); break; case 2: if (sbp.eq_s_b(1, "\u0163")) { sbp.bra = sbp.cursor; sbp.slice_from("t"); } break; case 3: sbp.slice_from("ist"); break; } B_standard_suffix_removed = true; } } } function r_verb_suffix() { var among_var, v_1, v_2; if (sbp.cursor >= I_pV) { v_1 = sbp.limit_backward; sbp.limit_backward = I_pV; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_4, 94); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: v_2 = sbp.limit - sbp.cursor; if (!sbp.out_grouping_b(g_v, 97, 259)) { sbp.cursor = sbp.limit - v_2; if (!sbp.eq_s_b(1, "u")) break; } case 2: sbp.slice_del(); break; } } sbp.limit_backward = v_1; } } function r_vowel_suffix() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_5, 5); if (among_var) { sbp.bra = sbp.cursor; if (r_RV() && among_var == 1) sbp.slice_del(); } } this.stem = function() { var v_1 = sbp.cursor; r_prelude(); sbp.cursor = v_1; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_step_0(); sbp.cursor = sbp.limit; r_standard_suffix(); sbp.cursor = sbp.limit; if (!B_standard_suffix_removed) { sbp.cursor = sbp.limit; r_verb_suffix(); sbp.cursor = sbp.limit; } r_vowel_suffix(); sbp.cursor = sbp.limit_backward; r_postlude(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.ro.stemmer, 'stemmer-ro'); lunr.ro.stopWordFilter = lunr.generateStopWordFilter('acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie'.split(' ')); lunr.Pipeline.registerFunction(lunr.ro.stopWordFilter, 'stopWordFilter-ro'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.it.js0000664000175000017500000005701514664334534023564 0ustar carstencarsten/*! * Lunr languages, `Italian` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.it = function() { this.pipeline.reset(); this.pipeline.add( lunr.it.trimmer, lunr.it.stopWordFilter, lunr.it.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.it.stemmer) } }; /* lunr trimmer function */ lunr.it.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.it.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.it.wordCharacters); lunr.Pipeline.registerFunction(lunr.it.trimmer, 'trimmer-it'); /* lunr stemmer function */ lunr.it.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function ItalianStemmer() { var a_0 = [new Among("", -1, 7), new Among("qu", 0, 6), new Among("\u00E1", 0, 1), new Among("\u00E9", 0, 2), new Among("\u00ED", 0, 3), new Among("\u00F3", 0, 4), new Among("\u00FA", 0, 5) ], a_1 = [new Among("", -1, 3), new Among("I", 0, 1), new Among("U", 0, 2) ], a_2 = [ new Among("la", -1, -1), new Among("cela", 0, -1), new Among("gliela", 0, -1), new Among("mela", 0, -1), new Among("tela", 0, -1), new Among("vela", 0, -1), new Among("le", -1, -1), new Among("cele", 6, -1), new Among("gliele", 6, -1), new Among("mele", 6, -1), new Among("tele", 6, -1), new Among("vele", 6, -1), new Among("ne", -1, -1), new Among("cene", 12, -1), new Among("gliene", 12, -1), new Among("mene", 12, -1), new Among("sene", 12, -1), new Among("tene", 12, -1), new Among("vene", 12, -1), new Among("ci", -1, -1), new Among("li", -1, -1), new Among("celi", 20, -1), new Among("glieli", 20, -1), new Among("meli", 20, -1), new Among("teli", 20, -1), new Among("veli", 20, -1), new Among("gli", 20, -1), new Among("mi", -1, -1), new Among("si", -1, -1), new Among("ti", -1, -1), new Among("vi", -1, -1), new Among("lo", -1, -1), new Among("celo", 31, -1), new Among("glielo", 31, -1), new Among("melo", 31, -1), new Among("telo", 31, -1), new Among("velo", 31, -1) ], a_3 = [new Among("ando", -1, 1), new Among("endo", -1, 1), new Among("ar", -1, 2), new Among("er", -1, 2), new Among("ir", -1, 2) ], a_4 = [ new Among("ic", -1, -1), new Among("abil", -1, -1), new Among("os", -1, -1), new Among("iv", -1, 1) ], a_5 = [ new Among("ic", -1, 1), new Among("abil", -1, 1), new Among("iv", -1, 1) ], a_6 = [new Among("ica", -1, 1), new Among("logia", -1, 3), new Among("osa", -1, 1), new Among("ista", -1, 1), new Among("iva", -1, 9), new Among("anza", -1, 1), new Among("enza", -1, 5), new Among("ice", -1, 1), new Among("atrice", 7, 1), new Among("iche", -1, 1), new Among("logie", -1, 3), new Among("abile", -1, 1), new Among("ibile", -1, 1), new Among("usione", -1, 4), new Among("azione", -1, 2), new Among("uzione", -1, 4), new Among("atore", -1, 2), new Among("ose", -1, 1), new Among("ante", -1, 1), new Among("mente", -1, 1), new Among("amente", 19, 7), new Among("iste", -1, 1), new Among("ive", -1, 9), new Among("anze", -1, 1), new Among("enze", -1, 5), new Among("ici", -1, 1), new Among("atrici", 25, 1), new Among("ichi", -1, 1), new Among("abili", -1, 1), new Among("ibili", -1, 1), new Among("ismi", -1, 1), new Among("usioni", -1, 4), new Among("azioni", -1, 2), new Among("uzioni", -1, 4), new Among("atori", -1, 2), new Among("osi", -1, 1), new Among("anti", -1, 1), new Among("amenti", -1, 6), new Among("imenti", -1, 6), new Among("isti", -1, 1), new Among("ivi", -1, 9), new Among("ico", -1, 1), new Among("ismo", -1, 1), new Among("oso", -1, 1), new Among("amento", -1, 6), new Among("imento", -1, 6), new Among("ivo", -1, 9), new Among("it\u00E0", -1, 8), new Among("ist\u00E0", -1, 1), new Among("ist\u00E8", -1, 1), new Among("ist\u00EC", -1, 1) ], a_7 = [ new Among("isca", -1, 1), new Among("enda", -1, 1), new Among("ata", -1, 1), new Among("ita", -1, 1), new Among("uta", -1, 1), new Among("ava", -1, 1), new Among("eva", -1, 1), new Among("iva", -1, 1), new Among("erebbe", -1, 1), new Among("irebbe", -1, 1), new Among("isce", -1, 1), new Among("ende", -1, 1), new Among("are", -1, 1), new Among("ere", -1, 1), new Among("ire", -1, 1), new Among("asse", -1, 1), new Among("ate", -1, 1), new Among("avate", 16, 1), new Among("evate", 16, 1), new Among("ivate", 16, 1), new Among("ete", -1, 1), new Among("erete", 20, 1), new Among("irete", 20, 1), new Among("ite", -1, 1), new Among("ereste", -1, 1), new Among("ireste", -1, 1), new Among("ute", -1, 1), new Among("erai", -1, 1), new Among("irai", -1, 1), new Among("isci", -1, 1), new Among("endi", -1, 1), new Among("erei", -1, 1), new Among("irei", -1, 1), new Among("assi", -1, 1), new Among("ati", -1, 1), new Among("iti", -1, 1), new Among("eresti", -1, 1), new Among("iresti", -1, 1), new Among("uti", -1, 1), new Among("avi", -1, 1), new Among("evi", -1, 1), new Among("ivi", -1, 1), new Among("isco", -1, 1), new Among("ando", -1, 1), new Among("endo", -1, 1), new Among("Yamo", -1, 1), new Among("iamo", -1, 1), new Among("avamo", -1, 1), new Among("evamo", -1, 1), new Among("ivamo", -1, 1), new Among("eremo", -1, 1), new Among("iremo", -1, 1), new Among("assimo", -1, 1), new Among("ammo", -1, 1), new Among("emmo", -1, 1), new Among("eremmo", 54, 1), new Among("iremmo", 54, 1), new Among("immo", -1, 1), new Among("ano", -1, 1), new Among("iscano", 58, 1), new Among("avano", 58, 1), new Among("evano", 58, 1), new Among("ivano", 58, 1), new Among("eranno", -1, 1), new Among("iranno", -1, 1), new Among("ono", -1, 1), new Among("iscono", 65, 1), new Among("arono", 65, 1), new Among("erono", 65, 1), new Among("irono", 65, 1), new Among("erebbero", -1, 1), new Among("irebbero", -1, 1), new Among("assero", -1, 1), new Among("essero", -1, 1), new Among("issero", -1, 1), new Among("ato", -1, 1), new Among("ito", -1, 1), new Among("uto", -1, 1), new Among("avo", -1, 1), new Among("evo", -1, 1), new Among("ivo", -1, 1), new Among("ar", -1, 1), new Among("ir", -1, 1), new Among("er\u00E0", -1, 1), new Among("ir\u00E0", -1, 1), new Among("er\u00F2", -1, 1), new Among("ir\u00F2", -1, 1) ], g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 ], g_AEIO = [17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 ], g_CG = [17], I_p2, I_p1, I_pV, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function habr1(c1, c2, v_1) { if (sbp.eq_s(1, c1)) { sbp.ket = sbp.cursor; if (sbp.in_grouping(g_v, 97, 249)) { sbp.slice_from(c2); sbp.cursor = v_1; return true; } } return false; } function r_prelude() { var among_var, v_1 = sbp.cursor, v_2, v_3, v_4; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_0, 7); if (among_var) { sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("\u00E0"); continue; case 2: sbp.slice_from("\u00E8"); continue; case 3: sbp.slice_from("\u00EC"); continue; case 4: sbp.slice_from("\u00F2"); continue; case 5: sbp.slice_from("\u00F9"); continue; case 6: sbp.slice_from("qU"); continue; case 7: if (sbp.cursor >= sbp.limit) break; sbp.cursor++; continue; } } break; } sbp.cursor = v_1; while (true) { v_2 = sbp.cursor; while (true) { v_3 = sbp.cursor; if (sbp.in_grouping(g_v, 97, 249)) { sbp.bra = sbp.cursor; v_4 = sbp.cursor; if (habr1("u", "U", v_3)) break; sbp.cursor = v_4; if (habr1("i", "I", v_3)) break; } sbp.cursor = v_3; if (sbp.cursor >= sbp.limit) { sbp.cursor = v_2; return; } sbp.cursor++; } } } function habr2(v_1) { sbp.cursor = v_1; if (!sbp.in_grouping(g_v, 97, 249)) return false; while (!sbp.out_grouping(g_v, 97, 249)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } return true; } function habr3() { if (sbp.in_grouping(g_v, 97, 249)) { var v_1 = sbp.cursor; if (sbp.out_grouping(g_v, 97, 249)) { while (!sbp.in_grouping(g_v, 97, 249)) { if (sbp.cursor >= sbp.limit) return habr2(v_1); sbp.cursor++; } return true; } return habr2(v_1); } return false; } function habr4() { var v_1 = sbp.cursor, v_2; if (!habr3()) { sbp.cursor = v_1; if (!sbp.out_grouping(g_v, 97, 249)) return; v_2 = sbp.cursor; if (sbp.out_grouping(g_v, 97, 249)) { while (!sbp.in_grouping(g_v, 97, 249)) { if (sbp.cursor >= sbp.limit) { sbp.cursor = v_2; if (sbp.in_grouping(g_v, 97, 249) && sbp.cursor < sbp.limit) sbp.cursor++; return; } sbp.cursor++; } I_pV = sbp.cursor; return; } sbp.cursor = v_2; if (!sbp.in_grouping(g_v, 97, 249) || sbp.cursor >= sbp.limit) return; sbp.cursor++; } I_pV = sbp.cursor; } function habr5() { while (!sbp.in_grouping(g_v, 97, 249)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 249)) { if (sbp.cursor >= sbp.limit) return false; sbp.cursor++; } return true; } function r_mark_regions() { var v_1 = sbp.cursor; I_pV = sbp.limit; I_p1 = I_pV; I_p2 = I_pV; habr4(); sbp.cursor = v_1; if (habr5()) { I_p1 = sbp.cursor; if (habr5()) I_p2 = sbp.cursor; } } function r_postlude() { var among_var; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_1, 3); if (!among_var) break; sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("i"); break; case 2: sbp.slice_from("u"); break; case 3: if (sbp.cursor >= sbp.limit) return; sbp.cursor++; break; } } } function r_RV() { return I_pV <= sbp.cursor; } function r_R1() { return I_p1 <= sbp.cursor; } function r_R2() { return I_p2 <= sbp.cursor; } function r_attached_pronoun() { var among_var; sbp.ket = sbp.cursor; if (sbp.find_among_b(a_2, 37)) { sbp.bra = sbp.cursor; among_var = sbp.find_among_b(a_3, 5); if (among_var && r_RV()) { switch (among_var) { case 1: sbp.slice_del(); break; case 2: sbp.slice_from("e"); break; } } } } function r_standard_suffix() { var among_var; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_6, 51); if (!among_var) return false; sbp.bra = sbp.cursor; switch (among_var) { case 1: if (!r_R2()) return false; sbp.slice_del(); break; case 2: if (!r_R2()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "ic")) { sbp.bra = sbp.cursor; if (r_R2()) sbp.slice_del(); } break; case 3: if (!r_R2()) return false; sbp.slice_from("log"); break; case 4: if (!r_R2()) return false; sbp.slice_from("u"); break; case 5: if (!r_R2()) return false; sbp.slice_from("ente"); break; case 6: if (!r_RV()) return false; sbp.slice_del(); break; case 7: if (!r_R1()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_4, 4); if (among_var) { sbp.bra = sbp.cursor; if (r_R2()) { sbp.slice_del(); if (among_var == 1) { sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "at")) { sbp.bra = sbp.cursor; if (r_R2()) sbp.slice_del(); } } } } break; case 8: if (!r_R2()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_5, 3); if (among_var) { sbp.bra = sbp.cursor; if (among_var == 1) if (r_R2()) sbp.slice_del(); } break; case 9: if (!r_R2()) return false; sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "at")) { sbp.bra = sbp.cursor; if (r_R2()) { sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "ic")) { sbp.bra = sbp.cursor; if (r_R2()) sbp.slice_del(); } } } break; } return true; } function r_verb_suffix() { var among_var, v_1; if (sbp.cursor >= I_pV) { v_1 = sbp.limit_backward; sbp.limit_backward = I_pV; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_7, 87); if (among_var) { sbp.bra = sbp.cursor; if (among_var == 1) sbp.slice_del(); } sbp.limit_backward = v_1; } } function habr6() { var v_1 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (sbp.in_grouping_b(g_AEIO, 97, 242)) { sbp.bra = sbp.cursor; if (r_RV()) { sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "i")) { sbp.bra = sbp.cursor; if (r_RV()) { sbp.slice_del(); return; } } } } sbp.cursor = sbp.limit - v_1; } function r_vowel_suffix() { habr6(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "h")) { sbp.bra = sbp.cursor; if (sbp.in_grouping_b(g_CG, 99, 103)) if (r_RV()) sbp.slice_del(); } } this.stem = function() { var v_1 = sbp.cursor; r_prelude(); sbp.cursor = v_1; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_attached_pronoun(); sbp.cursor = sbp.limit; if (!r_standard_suffix()) { sbp.cursor = sbp.limit; r_verb_suffix(); } sbp.cursor = sbp.limit; r_vowel_suffix(); sbp.cursor = sbp.limit_backward; r_postlude(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.it.stemmer, 'stemmer-it'); lunr.it.stopWordFilter = lunr.generateStopWordFilter('a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è'.split(' ')); lunr.Pipeline.registerFunction(lunr.it.stopWordFilter, 'stopWordFilter-it'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.du.js0000664000175000017500000003574214664334534023563 0ustar carstencarsten/*! * Lunr languages, `Dutch` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } console.warn("[Lunr Languages] Please use the \"nl\" instead of the \"du\". The \"nl\" code is the standard code for Dutch language, and \"du\" will be removed in the next major versions."); /* register specific locale function */ lunr.du = function() { this.pipeline.reset(); this.pipeline.add( lunr.du.trimmer, lunr.du.stopWordFilter, lunr.du.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.du.stemmer) } }; /* lunr trimmer function */ lunr.du.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.du.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.du.wordCharacters); lunr.Pipeline.registerFunction(lunr.du.trimmer, 'trimmer-du'); /* lunr stemmer function */ lunr.du.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function DutchStemmer() { var a_0 = [new Among("", -1, 6), new Among("\u00E1", 0, 1), new Among("\u00E4", 0, 1), new Among("\u00E9", 0, 2), new Among("\u00EB", 0, 2), new Among("\u00ED", 0, 3), new Among("\u00EF", 0, 3), new Among("\u00F3", 0, 4), new Among("\u00F6", 0, 4), new Among("\u00FA", 0, 5), new Among("\u00FC", 0, 5) ], a_1 = [new Among("", -1, 3), new Among("I", 0, 2), new Among("Y", 0, 1) ], a_2 = [ new Among("dd", -1, -1), new Among("kk", -1, -1), new Among("tt", -1, -1) ], a_3 = [new Among("ene", -1, 2), new Among("se", -1, 3), new Among("en", -1, 2), new Among("heden", 2, 1), new Among("s", -1, 3) ], a_4 = [ new Among("end", -1, 1), new Among("ig", -1, 2), new Among("ing", -1, 1), new Among("lijk", -1, 3), new Among("baar", -1, 4), new Among("bar", -1, 5) ], a_5 = [ new Among("aa", -1, -1), new Among("ee", -1, -1), new Among("oo", -1, -1), new Among("uu", -1, -1) ], g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 ], g_v_I = [1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 ], g_v_j = [ 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 ], I_p2, I_p1, B_e_found, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function r_prelude() { var among_var, v_1 = sbp.cursor, v_2, v_3; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_0, 11); if (among_var) { sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("a"); continue; case 2: sbp.slice_from("e"); continue; case 3: sbp.slice_from("i"); continue; case 4: sbp.slice_from("o"); continue; case 5: sbp.slice_from("u"); continue; case 6: if (sbp.cursor >= sbp.limit) break; sbp.cursor++; continue; } } break; } sbp.cursor = v_1; sbp.bra = v_1; if (sbp.eq_s(1, "y")) { sbp.ket = sbp.cursor; sbp.slice_from("Y"); } else sbp.cursor = v_1; while (true) { v_2 = sbp.cursor; if (sbp.in_grouping(g_v, 97, 232)) { v_3 = sbp.cursor; sbp.bra = v_3; if (sbp.eq_s(1, "i")) { sbp.ket = sbp.cursor; if (sbp.in_grouping(g_v, 97, 232)) { sbp.slice_from("I"); sbp.cursor = v_2; } } else { sbp.cursor = v_3; if (sbp.eq_s(1, "y")) { sbp.ket = sbp.cursor; sbp.slice_from("Y"); sbp.cursor = v_2; } else if (habr1(v_2)) break; } } else if (habr1(v_2)) break; } } function habr1(v_1) { sbp.cursor = v_1; if (v_1 >= sbp.limit) return true; sbp.cursor++; return false; } function r_mark_regions() { I_p1 = sbp.limit; I_p2 = I_p1; if (!habr2()) { I_p1 = sbp.cursor; if (I_p1 < 3) I_p1 = 3; if (!habr2()) I_p2 = sbp.cursor; } } function habr2() { while (!sbp.in_grouping(g_v, 97, 232)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 232)) { if (sbp.cursor >= sbp.limit) return true; sbp.cursor++; } return false; } function r_postlude() { var among_var; while (true) { sbp.bra = sbp.cursor; among_var = sbp.find_among(a_1, 3); if (among_var) { sbp.ket = sbp.cursor; switch (among_var) { case 1: sbp.slice_from("y"); break; case 2: sbp.slice_from("i"); break; case 3: if (sbp.cursor >= sbp.limit) return; sbp.cursor++; break; } } } } function r_R1() { return I_p1 <= sbp.cursor; } function r_R2() { return I_p2 <= sbp.cursor; } function r_undouble() { var v_1 = sbp.limit - sbp.cursor; if (sbp.find_among_b(a_2, 3)) { sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.bra = sbp.cursor; sbp.slice_del(); } } } function r_e_ending() { var v_1; B_e_found = false; sbp.ket = sbp.cursor; if (sbp.eq_s_b(1, "e")) { sbp.bra = sbp.cursor; if (r_R1()) { v_1 = sbp.limit - sbp.cursor; if (sbp.out_grouping_b(g_v, 97, 232)) { sbp.cursor = sbp.limit - v_1; sbp.slice_del(); B_e_found = true; r_undouble(); } } } } function r_en_ending() { var v_1; if (r_R1()) { v_1 = sbp.limit - sbp.cursor; if (sbp.out_grouping_b(g_v, 97, 232)) { sbp.cursor = sbp.limit - v_1; if (!sbp.eq_s_b(3, "gem")) { sbp.cursor = sbp.limit - v_1; sbp.slice_del(); r_undouble(); } } } } function r_standard_suffix() { var among_var, v_1 = sbp.limit - sbp.cursor, v_2, v_3, v_4, v_5, v_6; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_3, 5); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (r_R1()) sbp.slice_from("heid"); break; case 2: r_en_ending(); break; case 3: if (r_R1() && sbp.out_grouping_b(g_v_j, 97, 232)) sbp.slice_del(); break; } } sbp.cursor = sbp.limit - v_1; r_e_ending(); sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; if (sbp.eq_s_b(4, "heid")) { sbp.bra = sbp.cursor; if (r_R2()) { v_2 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "c")) { sbp.cursor = sbp.limit - v_2; sbp.slice_del(); sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "en")) { sbp.bra = sbp.cursor; r_en_ending(); } } } } sbp.cursor = sbp.limit - v_1; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_4, 6); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: if (r_R2()) { sbp.slice_del(); v_3 = sbp.limit - sbp.cursor; sbp.ket = sbp.cursor; if (sbp.eq_s_b(2, "ig")) { sbp.bra = sbp.cursor; if (r_R2()) { v_4 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "e")) { sbp.cursor = sbp.limit - v_4; sbp.slice_del(); break; } } } sbp.cursor = sbp.limit - v_3; r_undouble(); } break; case 2: if (r_R2()) { v_5 = sbp.limit - sbp.cursor; if (!sbp.eq_s_b(1, "e")) { sbp.cursor = sbp.limit - v_5; sbp.slice_del(); } } break; case 3: if (r_R2()) { sbp.slice_del(); r_e_ending(); } break; case 4: if (r_R2()) sbp.slice_del(); break; case 5: if (r_R2() && B_e_found) sbp.slice_del(); break; } } sbp.cursor = sbp.limit - v_1; if (sbp.out_grouping_b(g_v_I, 73, 232)) { v_6 = sbp.limit - sbp.cursor; if (sbp.find_among_b(a_5, 4) && sbp.out_grouping_b(g_v, 97, 232)) { sbp.cursor = sbp.limit - v_6; sbp.ket = sbp.cursor; if (sbp.cursor > sbp.limit_backward) { sbp.cursor--; sbp.bra = sbp.cursor; sbp.slice_del(); } } } } this.stem = function() { var v_1 = sbp.cursor; r_prelude(); sbp.cursor = v_1; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_standard_suffix(); sbp.cursor = sbp.limit_backward; r_postlude(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.du.stemmer, 'stemmer-du'); lunr.du.stopWordFilter = lunr.generateStopWordFilter(' aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou'.split(' ')); lunr.Pipeline.registerFunction(lunr.du.stopWordFilter, 'stopWordFilter-du'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.vi.js0000664000175000017500000000477614664334534023574 0ustar carstencarsten/*! * Lunr languages, `Vietnamese` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2017, Keerati Thiwanruk * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.vi = function() { this.pipeline.reset(); this.pipeline.add( lunr.vi.stopWordFilter, lunr.vi.trimmer ); }; /* lunr trimmer function */ lunr.vi.wordCharacters = "[" + "A-Za-z" + "\u0300\u0350" + // dấu huyền "\u0301\u0351" + // dấu sắc "\u0309" + // dấu hỏi "\u0323" + // dấu nặng "\u0303\u0343" + // dấu ngã "\u00C2\u00E2" + // Â "\u00CA\u00EA" + // Ê "\u00D4\u00F4" + // Ô "\u0102-\u0103" + // Ă "\u0110-\u0111" + // Đ "\u01A0-\u01A1" + // Ơ "\u01AF-\u01B0" + // Ư "]"; lunr.vi.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.vi.wordCharacters); lunr.Pipeline.registerFunction(lunr.vi.trimmer, 'trimmer-vi'); lunr.vi.stopWordFilter = lunr.generateStopWordFilter('là cái nhưng mà'.split(' ')); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.sv.js0000664000175000017500000002264314664334534023577 0ustar carstencarsten/*! * Lunr languages, `Swedish` language * https://github.com/MihaiValentin/lunr-languages * * Copyright 2014, Mihai Valentin * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.sv = function() { this.pipeline.reset(); this.pipeline.add( lunr.sv.trimmer, lunr.sv.stopWordFilter, lunr.sv.stemmer ); // for lunr version 2 // this is necessary so that every searched word is also stemmed before // in lunr <= 1 this is not needed, as it is done using the normal pipeline if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.sv.stemmer) } }; /* lunr trimmer function */ lunr.sv.wordCharacters = "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A"; lunr.sv.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.sv.wordCharacters); lunr.Pipeline.registerFunction(lunr.sv.trimmer, 'trimmer-sv'); /* lunr stemmer function */ lunr.sv.stemmer = (function() { /* create the wrapped stemmer object */ var Among = lunr.stemmerSupport.Among, SnowballProgram = lunr.stemmerSupport.SnowballProgram, st = new function SwedishStemmer() { var a_0 = [new Among("a", -1, 1), new Among("arna", 0, 1), new Among("erna", 0, 1), new Among("heterna", 2, 1), new Among("orna", 0, 1), new Among("ad", -1, 1), new Among("e", -1, 1), new Among("ade", 6, 1), new Among("ande", 6, 1), new Among("arne", 6, 1), new Among("are", 6, 1), new Among("aste", 6, 1), new Among("en", -1, 1), new Among("anden", 12, 1), new Among("aren", 12, 1), new Among("heten", 12, 1), new Among("ern", -1, 1), new Among("ar", -1, 1), new Among("er", -1, 1), new Among("heter", 18, 1), new Among("or", -1, 1), new Among("s", -1, 2), new Among("as", 21, 1), new Among("arnas", 22, 1), new Among("ernas", 22, 1), new Among("ornas", 22, 1), new Among("es", 21, 1), new Among("ades", 26, 1), new Among("andes", 26, 1), new Among("ens", 21, 1), new Among("arens", 29, 1), new Among("hetens", 29, 1), new Among("erns", 21, 1), new Among("at", -1, 1), new Among("andet", -1, 1), new Among("het", -1, 1), new Among("ast", -1, 1) ], a_1 = [new Among("dd", -1, -1), new Among("gd", -1, -1), new Among("nn", -1, -1), new Among("dt", -1, -1), new Among("gt", -1, -1), new Among("kt", -1, -1), new Among("tt", -1, -1) ], a_2 = [ new Among("ig", -1, 1), new Among("lig", 0, 1), new Among("els", -1, 1), new Among("fullt", -1, 3), new Among("l\u00F6st", -1, 2) ], g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 ], g_s_ending = [119, 127, 149], I_x, I_p1, sbp = new SnowballProgram(); this.setCurrent = function(word) { sbp.setCurrent(word); }; this.getCurrent = function() { return sbp.getCurrent(); }; function r_mark_regions() { var v_1, c = sbp.cursor + 3; I_p1 = sbp.limit; if (0 <= c || c <= sbp.limit) { I_x = c; while (true) { v_1 = sbp.cursor; if (sbp.in_grouping(g_v, 97, 246)) { sbp.cursor = v_1; break; } sbp.cursor = v_1; if (sbp.cursor >= sbp.limit) return; sbp.cursor++; } while (!sbp.out_grouping(g_v, 97, 246)) { if (sbp.cursor >= sbp.limit) return; sbp.cursor++; } I_p1 = sbp.cursor; if (I_p1 < I_x) I_p1 = I_x; } } function r_main_suffix() { var among_var, v_2 = sbp.limit_backward; if (sbp.cursor >= I_p1) { sbp.limit_backward = I_p1; sbp.cursor = sbp.limit; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_0, 37); sbp.limit_backward = v_2; if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: sbp.slice_del(); break; case 2: if (sbp.in_grouping_b(g_s_ending, 98, 121)) sbp.slice_del(); break; } } } } function r_consonant_pair() { var v_1 = sbp.limit_backward; if (sbp.cursor >= I_p1) { sbp.limit_backward = I_p1; sbp.cursor = sbp.limit; if (sbp.find_among_b(a_1, 7)) { sbp.cursor = sbp.limit; sbp.ket = sbp.cursor; if (sbp.cursor > sbp.limit_backward) { sbp.bra = --sbp.cursor; sbp.slice_del(); } } sbp.limit_backward = v_1; } } function r_other_suffix() { var among_var, v_2; if (sbp.cursor >= I_p1) { v_2 = sbp.limit_backward; sbp.limit_backward = I_p1; sbp.cursor = sbp.limit; sbp.ket = sbp.cursor; among_var = sbp.find_among_b(a_2, 5); if (among_var) { sbp.bra = sbp.cursor; switch (among_var) { case 1: sbp.slice_del(); break; case 2: sbp.slice_from("l\u00F6s"); break; case 3: sbp.slice_from("full"); break; } } sbp.limit_backward = v_2; } } this.stem = function() { var v_1 = sbp.cursor; r_mark_regions(); sbp.limit_backward = v_1; sbp.cursor = sbp.limit; r_main_suffix(); sbp.cursor = sbp.limit; r_consonant_pair(); sbp.cursor = sbp.limit; r_other_suffix(); return true; } }; /* and return a function that stems a word for the current locale */ return function(token) { // for lunr version 2 if (typeof token.update === "function") { return token.update(function(word) { st.setCurrent(word); st.stem(); return st.getCurrent(); }) } else { // for lunr version <= 1 st.setCurrent(token); st.stem(); return st.getCurrent(); } } })(); lunr.Pipeline.registerFunction(lunr.sv.stemmer, 'stemmer-sv'); lunr.sv.stopWordFilter = lunr.generateStopWordFilter('alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över'.split(' ')); lunr.Pipeline.registerFunction(lunr.sv.stopWordFilter, 'stopWordFilter-sv'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/lunr-language/lunr.hi.js0000664000175000017500000001410414664334534023540 0ustar carstencarsten/*! * Lunr languages, `Hindi` language * https://github.com/MiKr13/lunr-languages * * Copyright 2020, Mihir Kumar * http://www.mozilla.org/MPL/ */ /*! * based on * Snowball JavaScript Library v0.3 * http://code.google.com/p/urim/ * http://snowball.tartarus.org/ * * Copyright 2010, Oleg Mazko * http://www.mozilla.org/MPL/ */ /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ; (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if ('undefined' === typeof lunr) { throw new Error('Lunr is not present. Please include / require Lunr before this script.'); } /* throw error if lunr stemmer support is not yet included */ if ('undefined' === typeof lunr.stemmerSupport) { throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); } /* register specific locale function */ lunr.hi = function() { this.pipeline.reset(); this.pipeline.add( lunr.hi.trimmer, lunr.hi.stopWordFilter, lunr.hi.stemmer ); // change the tokenizer for japanese one // if (isLunr2) { // for lunr version 2.0.0 // this.tokenizer = lunr.hi.tokenizer; // } else { // if (lunr.tokenizer) { // for lunr version 0.6.0 // lunr.tokenizer = lunr.hi.tokenizer; // } // if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 // this.tokenizerFn = lunr.hi.tokenizer; // } // } if (this.searchPipeline) { this.searchPipeline.reset(); this.searchPipeline.add(lunr.hi.stemmer) } }; /* lunr trimmer function */ lunr.hi.wordCharacters = "\u0900-\u0903\u0904-\u090f\u0910-\u091f\u0920-\u092f\u0930-\u093f\u0940-\u094f\u0950-\u095f\u0960-\u096f\u0970-\u097fa-zA-Za-zA-Z0-90-9"; // lunr.hi.wordCharacters = "ऀँंःऄअआइईउऊऋऌऍऎएऐऑऒओऔकखगघङचछजझञटठडढणतथदधनऩपफबभमयरऱलळऴवशषसहऺऻ़ऽािीुूृॄॅॆेैॉॊोौ्ॎॏॐ॒॑॓॔ॕॖॗक़ख़ग़ज़ड़ढ़फ़य़ॠॡॢॣ।॥०१२३४५६७८९॰ॱॲॳॴॵॶॷॸॹॺॻॼॽॾॿa-zA-Za-zA-Z0-90-9"; lunr.hi.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.hi.wordCharacters); lunr.Pipeline.registerFunction(lunr.hi.trimmer, 'trimmer-hi'); /* lunr stop word filter */ lunr.hi.stopWordFilter = lunr.generateStopWordFilter( 'अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने'.split(' ')); /* lunr stemmer function */ lunr.hi.stemmer = (function() { return function(word) { // for lunr version 2 if (typeof word.update === "function") { return word.update(function(word) { return word; }) } else { // for lunr version <= 1 return word; } } })(); var segmenter = lunr.wordcut; segmenter.init(); lunr.hi.tokenizer = function(obj) { if (!arguments.length || obj == null || obj == undefined) return [] if (Array.isArray(obj)) return obj.map(function(t) { return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase() }); var str = obj.toString().toLowerCase().replace(/^\s+/, ''); return segmenter.cut(str).split('|'); } lunr.Pipeline.registerFunction(lunr.hi.stemmer, 'stemmer-hi'); lunr.Pipeline.registerFunction(lunr.hi.stopWordFilter, 'stopWordFilter-hi'); }; }))mkdocs-1.6.1/mkdocs/contrib/search/templates/0000775000175000017500000000000014664334534021060 5ustar carstencarstenmkdocs-1.6.1/mkdocs/contrib/search/templates/search/0000775000175000017500000000000014664334534022325 5ustar carstencarstenmkdocs-1.6.1/mkdocs/contrib/search/templates/search/worker.js0000664000175000017500000000721414664334534024200 0ustar carstencarstenvar base_path = 'function' === typeof importScripts ? '.' : '/search/'; var allowSearch = false; var index; var documents = {}; var lang = ['en']; var data; function getScript(script, callback) { console.log('Loading script: ' + script); $.getScript(base_path + script).done(function () { callback(); }).fail(function (jqxhr, settings, exception) { console.log('Error: ' + exception); }); } function getScriptsInOrder(scripts, callback) { if (scripts.length === 0) { callback(); return; } getScript(scripts[0], function() { getScriptsInOrder(scripts.slice(1), callback); }); } function loadScripts(urls, callback) { if( 'function' === typeof importScripts ) { importScripts.apply(null, urls); callback(); } else { getScriptsInOrder(urls, callback); } } function onJSONLoaded () { data = JSON.parse(this.responseText); var scriptsToLoad = ['lunr.js']; if (data.config && data.config.lang && data.config.lang.length) { lang = data.config.lang; } if (lang.length > 1 || lang[0] !== "en") { scriptsToLoad.push('lunr.stemmer.support.js'); if (lang.length > 1) { scriptsToLoad.push('lunr.multi.js'); } if (lang.includes("ja") || lang.includes("jp")) { scriptsToLoad.push('tinyseg.js'); } for (var i=0; i < lang.length; i++) { if (lang[i] != 'en') { scriptsToLoad.push(['lunr', lang[i], 'js'].join('.')); } } } loadScripts(scriptsToLoad, onScriptsLoaded); } function onScriptsLoaded () { console.log('All search scripts loaded, building Lunr index...'); if (data.config && data.config.separator && data.config.separator.length) { lunr.tokenizer.separator = new RegExp(data.config.separator); } if (data.index) { index = lunr.Index.load(data.index); data.docs.forEach(function (doc) { documents[doc.location] = doc; }); console.log('Lunr pre-built index loaded, search ready'); } else { index = lunr(function () { if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { this.use(lunr[lang[0]]); } else if (lang.length > 1) { this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility } this.field('title'); this.field('text'); this.ref('location'); for (var i=0; i < data.docs.length; i++) { var doc = data.docs[i]; this.add(doc); documents[doc.location] = doc; } }); console.log('Lunr index built, search ready'); } allowSearch = true; postMessage({config: data.config}); postMessage({allowSearch: allowSearch}); } function init () { var oReq = new XMLHttpRequest(); oReq.addEventListener("load", onJSONLoaded); var index_path = base_path + '/search_index.json'; if( 'function' === typeof importScripts ){ index_path = 'search_index.json'; } oReq.open("GET", index_path); oReq.send(); } function search (query) { if (!allowSearch) { console.error('Assets for search still loading'); return; } var resultDocuments = []; var results = index.search(query); for (var i=0; i < results.length; i++){ var result = results[i]; doc = documents[result.ref]; doc.summary = doc.text.substring(0, 200); resultDocuments.push(doc); } return resultDocuments; } if( 'function' === typeof importScripts ) { onmessage = function (e) { if (e.data.init) { init(); } else if (e.data.query) { postMessage({ results: search(e.data.query) }); } else { console.error("Worker - Unrecognized message: " + e); } }; } mkdocs-1.6.1/mkdocs/contrib/search/templates/search/lunr.js0000664000175000017500000030273514664334534023655 0ustar carstencarsten/** * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 * Copyright (C) 2020 Oliver Nightingale * @license MIT */ ;(function(){ /** * A convenience function for configuring and constructing * a new lunr Index. * * A lunr.Builder instance is created and the pipeline setup * with a trimmer, stop word filter and stemmer. * * This builder object is yielded to the configuration function * that is passed as a parameter, allowing the list of fields * and other builder parameters to be customised. * * All documents _must_ be added within the passed config function. * * @example * var idx = lunr(function () { * this.field('title') * this.field('body') * this.ref('id') * * documents.forEach(function (doc) { * this.add(doc) * }, this) * }) * * @see {@link lunr.Builder} * @see {@link lunr.Pipeline} * @see {@link lunr.trimmer} * @see {@link lunr.stopWordFilter} * @see {@link lunr.stemmer} * @namespace {function} lunr */ var lunr = function (config) { var builder = new lunr.Builder builder.pipeline.add( lunr.trimmer, lunr.stopWordFilter, lunr.stemmer ) builder.searchPipeline.add( lunr.stemmer ) config.call(builder, builder) return builder.build() } lunr.version = "2.3.9" /*! * lunr.utils * Copyright (C) 2020 Oliver Nightingale */ /** * A namespace containing utils for the rest of the lunr library * @namespace lunr.utils */ lunr.utils = {} /** * Print a warning message to the console. * * @param {String} message The message to be printed. * @memberOf lunr.utils * @function */ lunr.utils.warn = (function (global) { /* eslint-disable no-console */ return function (message) { if (global.console && console.warn) { console.warn(message) } } /* eslint-enable no-console */ })(this) /** * Convert an object to a string. * * In the case of `null` and `undefined` the function returns * the empty string, in all other cases the result of calling * `toString` on the passed object is returned. * * @param {Any} obj The object to convert to a string. * @return {String} string representation of the passed object. * @memberOf lunr.utils */ lunr.utils.asString = function (obj) { if (obj === void 0 || obj === null) { return "" } else { return obj.toString() } } /** * Clones an object. * * Will create a copy of an existing object such that any mutations * on the copy cannot affect the original. * * Only shallow objects are supported, passing a nested object to this * function will cause a TypeError. * * Objects with primitives, and arrays of primitives are supported. * * @param {Object} obj The object to clone. * @return {Object} a clone of the passed object. * @throws {TypeError} when a nested object is passed. * @memberOf Utils */ lunr.utils.clone = function (obj) { if (obj === null || obj === undefined) { return obj } var clone = Object.create(null), keys = Object.keys(obj) for (var i = 0; i < keys.length; i++) { var key = keys[i], val = obj[key] if (Array.isArray(val)) { clone[key] = val.slice() continue } if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') { clone[key] = val continue } throw new TypeError("clone is not deep and does not support nested objects") } return clone } lunr.FieldRef = function (docRef, fieldName, stringValue) { this.docRef = docRef this.fieldName = fieldName this._stringValue = stringValue } lunr.FieldRef.joiner = "/" lunr.FieldRef.fromString = function (s) { var n = s.indexOf(lunr.FieldRef.joiner) if (n === -1) { throw "malformed field ref string" } var fieldRef = s.slice(0, n), docRef = s.slice(n + 1) return new lunr.FieldRef (docRef, fieldRef, s) } lunr.FieldRef.prototype.toString = function () { if (this._stringValue == undefined) { this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef } return this._stringValue } /*! * lunr.Set * Copyright (C) 2020 Oliver Nightingale */ /** * A lunr set. * * @constructor */ lunr.Set = function (elements) { this.elements = Object.create(null) if (elements) { this.length = elements.length for (var i = 0; i < this.length; i++) { this.elements[elements[i]] = true } } else { this.length = 0 } } /** * A complete set that contains all elements. * * @static * @readonly * @type {lunr.Set} */ lunr.Set.complete = { intersect: function (other) { return other }, union: function () { return this }, contains: function () { return true } } /** * An empty set that contains no elements. * * @static * @readonly * @type {lunr.Set} */ lunr.Set.empty = { intersect: function () { return this }, union: function (other) { return other }, contains: function () { return false } } /** * Returns true if this set contains the specified object. * * @param {object} object - Object whose presence in this set is to be tested. * @returns {boolean} - True if this set contains the specified object. */ lunr.Set.prototype.contains = function (object) { return !!this.elements[object] } /** * Returns a new set containing only the elements that are present in both * this set and the specified set. * * @param {lunr.Set} other - set to intersect with this set. * @returns {lunr.Set} a new set that is the intersection of this and the specified set. */ lunr.Set.prototype.intersect = function (other) { var a, b, elements, intersection = [] if (other === lunr.Set.complete) { return this } if (other === lunr.Set.empty) { return other } if (this.length < other.length) { a = this b = other } else { a = other b = this } elements = Object.keys(a.elements) for (var i = 0; i < elements.length; i++) { var element = elements[i] if (element in b.elements) { intersection.push(element) } } return new lunr.Set (intersection) } /** * Returns a new set combining the elements of this and the specified set. * * @param {lunr.Set} other - set to union with this set. * @return {lunr.Set} a new set that is the union of this and the specified set. */ lunr.Set.prototype.union = function (other) { if (other === lunr.Set.complete) { return lunr.Set.complete } if (other === lunr.Set.empty) { return this } return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) } /** * A function to calculate the inverse document frequency for * a posting. This is shared between the builder and the index * * @private * @param {object} posting - The posting for a given term * @param {number} documentCount - The total number of documents. */ lunr.idf = function (posting, documentCount) { var documentsWithTerm = 0 for (var fieldName in posting) { if (fieldName == '_index') continue // Ignore the term index, its not a field documentsWithTerm += Object.keys(posting[fieldName]).length } var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) return Math.log(1 + Math.abs(x)) } /** * A token wraps a string representation of a token * as it is passed through the text processing pipeline. * * @constructor * @param {string} [str=''] - The string token being wrapped. * @param {object} [metadata={}] - Metadata associated with this token. */ lunr.Token = function (str, metadata) { this.str = str || "" this.metadata = metadata || {} } /** * Returns the token string that is being wrapped by this object. * * @returns {string} */ lunr.Token.prototype.toString = function () { return this.str } /** * A token update function is used when updating or optionally * when cloning a token. * * @callback lunr.Token~updateFunction * @param {string} str - The string representation of the token. * @param {Object} metadata - All metadata associated with this token. */ /** * Applies the given function to the wrapped string token. * * @example * token.update(function (str, metadata) { * return str.toUpperCase() * }) * * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. * @returns {lunr.Token} */ lunr.Token.prototype.update = function (fn) { this.str = fn(this.str, this.metadata) return this } /** * Creates a clone of this token. Optionally a function can be * applied to the cloned token. * * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. * @returns {lunr.Token} */ lunr.Token.prototype.clone = function (fn) { fn = fn || function (s) { return s } return new lunr.Token (fn(this.str, this.metadata), this.metadata) } /*! * lunr.tokenizer * Copyright (C) 2020 Oliver Nightingale */ /** * A function for splitting a string into tokens ready to be inserted into * the search index. Uses `lunr.tokenizer.separator` to split strings, change * the value of this property to change how strings are split into tokens. * * This tokenizer will convert its parameter to a string by calling `toString` and * then will split this string on the character in `lunr.tokenizer.separator`. * Arrays will have their elements converted to strings and wrapped in a lunr.Token. * * Optional metadata can be passed to the tokenizer, this metadata will be cloned and * added as metadata to every token that is created from the object to be tokenized. * * @static * @param {?(string|object|object[])} obj - The object to convert into tokens * @param {?object} metadata - Optional metadata to associate with every token * @returns {lunr.Token[]} * @see {@link lunr.Pipeline} */ lunr.tokenizer = function (obj, metadata) { if (obj == null || obj == undefined) { return [] } if (Array.isArray(obj)) { return obj.map(function (t) { return new lunr.Token( lunr.utils.asString(t).toLowerCase(), lunr.utils.clone(metadata) ) }) } var str = obj.toString().toLowerCase(), len = str.length, tokens = [] for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { var char = str.charAt(sliceEnd), sliceLength = sliceEnd - sliceStart if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) { if (sliceLength > 0) { var tokenMetadata = lunr.utils.clone(metadata) || {} tokenMetadata["position"] = [sliceStart, sliceLength] tokenMetadata["index"] = tokens.length tokens.push( new lunr.Token ( str.slice(sliceStart, sliceEnd), tokenMetadata ) ) } sliceStart = sliceEnd + 1 } } return tokens } /** * The separator used to split a string into tokens. Override this property to change the behaviour of * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. * * @static * @see lunr.tokenizer */ lunr.tokenizer.separator = /[\s\-]+/ /*! * lunr.Pipeline * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.Pipelines maintain an ordered list of functions to be applied to all * tokens in documents entering the search index and queries being ran against * the index. * * An instance of lunr.Index created with the lunr shortcut will contain a * pipeline with a stop word filter and an English language stemmer. Extra * functions can be added before or after either of these functions or these * default functions can be removed. * * When run the pipeline will call each function in turn, passing a token, the * index of that token in the original list of all tokens and finally a list of * all the original tokens. * * The output of functions in the pipeline will be passed to the next function * in the pipeline. To exclude a token from entering the index the function * should return undefined, the rest of the pipeline will not be called with * this token. * * For serialisation of pipelines to work, all functions used in an instance of * a pipeline should be registered with lunr.Pipeline. Registered functions can * then be loaded. If trying to load a serialised pipeline that uses functions * that are not registered an error will be thrown. * * If not planning on serialising the pipeline then registering pipeline functions * is not necessary. * * @constructor */ lunr.Pipeline = function () { this._stack = [] } lunr.Pipeline.registeredFunctions = Object.create(null) /** * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token * string as well as all known metadata. A pipeline function can mutate the token string * or mutate (or add) metadata for a given token. * * A pipeline function can indicate that the passed token should be discarded by returning * null, undefined or an empty string. This token will not be passed to any downstream pipeline * functions and will not be added to the index. * * Multiple tokens can be returned by returning an array of tokens. Each token will be passed * to any downstream pipeline functions and all will returned tokens will be added to the index. * * Any number of pipeline functions may be chained together using a lunr.Pipeline. * * @interface lunr.PipelineFunction * @param {lunr.Token} token - A token from the document being processed. * @param {number} i - The index of this token in the complete list of tokens for this document/field. * @param {lunr.Token[]} tokens - All tokens for this document/field. * @returns {(?lunr.Token|lunr.Token[])} */ /** * Register a function with the pipeline. * * Functions that are used in the pipeline should be registered if the pipeline * needs to be serialised, or a serialised pipeline needs to be loaded. * * Registering a function does not add it to a pipeline, functions must still be * added to instances of the pipeline for them to be used when running a pipeline. * * @param {lunr.PipelineFunction} fn - The function to check for. * @param {String} label - The label to register this function with */ lunr.Pipeline.registerFunction = function (fn, label) { if (label in this.registeredFunctions) { lunr.utils.warn('Overwriting existing registered function: ' + label) } fn.label = label lunr.Pipeline.registeredFunctions[fn.label] = fn } /** * Warns if the function is not registered as a Pipeline function. * * @param {lunr.PipelineFunction} fn - The function to check for. * @private */ lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { var isRegistered = fn.label && (fn.label in this.registeredFunctions) if (!isRegistered) { lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) } } /** * Loads a previously serialised pipeline. * * All functions to be loaded must already be registered with lunr.Pipeline. * If any function from the serialised data has not been registered then an * error will be thrown. * * @param {Object} serialised - The serialised pipeline to load. * @returns {lunr.Pipeline} */ lunr.Pipeline.load = function (serialised) { var pipeline = new lunr.Pipeline serialised.forEach(function (fnName) { var fn = lunr.Pipeline.registeredFunctions[fnName] if (fn) { pipeline.add(fn) } else { throw new Error('Cannot load unregistered function: ' + fnName) } }) return pipeline } /** * Adds new functions to the end of the pipeline. * * Logs a warning if the function has not been registered. * * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. */ lunr.Pipeline.prototype.add = function () { var fns = Array.prototype.slice.call(arguments) fns.forEach(function (fn) { lunr.Pipeline.warnIfFunctionNotRegistered(fn) this._stack.push(fn) }, this) } /** * Adds a single function after a function that already exists in the * pipeline. * * Logs a warning if the function has not been registered. * * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. */ lunr.Pipeline.prototype.after = function (existingFn, newFn) { lunr.Pipeline.warnIfFunctionNotRegistered(newFn) var pos = this._stack.indexOf(existingFn) if (pos == -1) { throw new Error('Cannot find existingFn') } pos = pos + 1 this._stack.splice(pos, 0, newFn) } /** * Adds a single function before a function that already exists in the * pipeline. * * Logs a warning if the function has not been registered. * * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. */ lunr.Pipeline.prototype.before = function (existingFn, newFn) { lunr.Pipeline.warnIfFunctionNotRegistered(newFn) var pos = this._stack.indexOf(existingFn) if (pos == -1) { throw new Error('Cannot find existingFn') } this._stack.splice(pos, 0, newFn) } /** * Removes a function from the pipeline. * * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. */ lunr.Pipeline.prototype.remove = function (fn) { var pos = this._stack.indexOf(fn) if (pos == -1) { return } this._stack.splice(pos, 1) } /** * Runs the current list of functions that make up the pipeline against the * passed tokens. * * @param {Array} tokens The tokens to run through the pipeline. * @returns {Array} */ lunr.Pipeline.prototype.run = function (tokens) { var stackLength = this._stack.length for (var i = 0; i < stackLength; i++) { var fn = this._stack[i] var memo = [] for (var j = 0; j < tokens.length; j++) { var result = fn(tokens[j], j, tokens) if (result === null || result === void 0 || result === '') continue if (Array.isArray(result)) { for (var k = 0; k < result.length; k++) { memo.push(result[k]) } } else { memo.push(result) } } tokens = memo } return tokens } /** * Convenience method for passing a string through a pipeline and getting * strings out. This method takes care of wrapping the passed string in a * token and mapping the resulting tokens back to strings. * * @param {string} str - The string to pass through the pipeline. * @param {?object} metadata - Optional metadata to associate with the token * passed to the pipeline. * @returns {string[]} */ lunr.Pipeline.prototype.runString = function (str, metadata) { var token = new lunr.Token (str, metadata) return this.run([token]).map(function (t) { return t.toString() }) } /** * Resets the pipeline by removing any existing processors. * */ lunr.Pipeline.prototype.reset = function () { this._stack = [] } /** * Returns a representation of the pipeline ready for serialisation. * * Logs a warning if the function has not been registered. * * @returns {Array} */ lunr.Pipeline.prototype.toJSON = function () { return this._stack.map(function (fn) { lunr.Pipeline.warnIfFunctionNotRegistered(fn) return fn.label }) } /*! * lunr.Vector * Copyright (C) 2020 Oliver Nightingale */ /** * A vector is used to construct the vector space of documents and queries. These * vectors support operations to determine the similarity between two documents or * a document and a query. * * Normally no parameters are required for initializing a vector, but in the case of * loading a previously dumped vector the raw elements can be provided to the constructor. * * For performance reasons vectors are implemented with a flat array, where an elements * index is immediately followed by its value. E.g. [index, value, index, value]. This * allows the underlying array to be as sparse as possible and still offer decent * performance when being used for vector calculations. * * @constructor * @param {Number[]} [elements] - The flat list of element index and element value pairs. */ lunr.Vector = function (elements) { this._magnitude = 0 this.elements = elements || [] } /** * Calculates the position within the vector to insert a given index. * * This is used internally by insert and upsert. If there are duplicate indexes then * the position is returned as if the value for that index were to be updated, but it * is the callers responsibility to check whether there is a duplicate at that index * * @param {Number} insertIdx - The index at which the element should be inserted. * @returns {Number} */ lunr.Vector.prototype.positionForIndex = function (index) { // For an empty vector the tuple can be inserted at the beginning if (this.elements.length == 0) { return 0 } var start = 0, end = this.elements.length / 2, sliceLength = end - start, pivotPoint = Math.floor(sliceLength / 2), pivotIndex = this.elements[pivotPoint * 2] while (sliceLength > 1) { if (pivotIndex < index) { start = pivotPoint } if (pivotIndex > index) { end = pivotPoint } if (pivotIndex == index) { break } sliceLength = end - start pivotPoint = start + Math.floor(sliceLength / 2) pivotIndex = this.elements[pivotPoint * 2] } if (pivotIndex == index) { return pivotPoint * 2 } if (pivotIndex > index) { return pivotPoint * 2 } if (pivotIndex < index) { return (pivotPoint + 1) * 2 } } /** * Inserts an element at an index within the vector. * * Does not allow duplicates, will throw an error if there is already an entry * for this index. * * @param {Number} insertIdx - The index at which the element should be inserted. * @param {Number} val - The value to be inserted into the vector. */ lunr.Vector.prototype.insert = function (insertIdx, val) { this.upsert(insertIdx, val, function () { throw "duplicate index" }) } /** * Inserts or updates an existing index within the vector. * * @param {Number} insertIdx - The index at which the element should be inserted. * @param {Number} val - The value to be inserted into the vector. * @param {function} fn - A function that is called for updates, the existing value and the * requested value are passed as arguments */ lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { this._magnitude = 0 var position = this.positionForIndex(insertIdx) if (this.elements[position] == insertIdx) { this.elements[position + 1] = fn(this.elements[position + 1], val) } else { this.elements.splice(position, 0, insertIdx, val) } } /** * Calculates the magnitude of this vector. * * @returns {Number} */ lunr.Vector.prototype.magnitude = function () { if (this._magnitude) return this._magnitude var sumOfSquares = 0, elementsLength = this.elements.length for (var i = 1; i < elementsLength; i += 2) { var val = this.elements[i] sumOfSquares += val * val } return this._magnitude = Math.sqrt(sumOfSquares) } /** * Calculates the dot product of this vector and another vector. * * @param {lunr.Vector} otherVector - The vector to compute the dot product with. * @returns {Number} */ lunr.Vector.prototype.dot = function (otherVector) { var dotProduct = 0, a = this.elements, b = otherVector.elements, aLen = a.length, bLen = b.length, aVal = 0, bVal = 0, i = 0, j = 0 while (i < aLen && j < bLen) { aVal = a[i], bVal = b[j] if (aVal < bVal) { i += 2 } else if (aVal > bVal) { j += 2 } else if (aVal == bVal) { dotProduct += a[i + 1] * b[j + 1] i += 2 j += 2 } } return dotProduct } /** * Calculates the similarity between this vector and another vector. * * @param {lunr.Vector} otherVector - The other vector to calculate the * similarity with. * @returns {Number} */ lunr.Vector.prototype.similarity = function (otherVector) { return this.dot(otherVector) / this.magnitude() || 0 } /** * Converts the vector to an array of the elements within the vector. * * @returns {Number[]} */ lunr.Vector.prototype.toArray = function () { var output = new Array (this.elements.length / 2) for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { output[j] = this.elements[i] } return output } /** * A JSON serializable representation of the vector. * * @returns {Number[]} */ lunr.Vector.prototype.toJSON = function () { return this.elements } /* eslint-disable */ /*! * lunr.stemmer * Copyright (C) 2020 Oliver Nightingale * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt */ /** * lunr.stemmer is an english language stemmer, this is a JavaScript * implementation of the PorterStemmer taken from http://tartarus.org/~martin * * @static * @implements {lunr.PipelineFunction} * @param {lunr.Token} token - The string to stem * @returns {lunr.Token} * @see {@link lunr.Pipeline} * @function */ lunr.stemmer = (function(){ var step2list = { "ational" : "ate", "tional" : "tion", "enci" : "ence", "anci" : "ance", "izer" : "ize", "bli" : "ble", "alli" : "al", "entli" : "ent", "eli" : "e", "ousli" : "ous", "ization" : "ize", "ation" : "ate", "ator" : "ate", "alism" : "al", "iveness" : "ive", "fulness" : "ful", "ousness" : "ous", "aliti" : "al", "iviti" : "ive", "biliti" : "ble", "logi" : "log" }, step3list = { "icate" : "ic", "ative" : "", "alize" : "al", "iciti" : "ic", "ical" : "ic", "ful" : "", "ness" : "" }, c = "[^aeiou]", // consonant v = "[aeiouy]", // vowel C = c + "[^aeiouy]*", // consonant sequence V = v + "[aeiou]*", // vowel sequence mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 s_v = "^(" + C + ")?" + v; // vowel in stem var re_mgr0 = new RegExp(mgr0); var re_mgr1 = new RegExp(mgr1); var re_meq1 = new RegExp(meq1); var re_s_v = new RegExp(s_v); var re_1a = /^(.+?)(ss|i)es$/; var re2_1a = /^(.+?)([^s])s$/; var re_1b = /^(.+?)eed$/; var re2_1b = /^(.+?)(ed|ing)$/; var re_1b_2 = /.$/; var re2_1b_2 = /(at|bl|iz)$/; var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); var re_1c = /^(.+?[^aeiou])y$/; var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; var re2_4 = /^(.+?)(s|t)(ion)$/; var re_5 = /^(.+?)e$/; var re_5_1 = /ll$/; var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); var porterStemmer = function porterStemmer(w) { var stem, suffix, firstch, re, re2, re3, re4; if (w.length < 3) { return w; } firstch = w.substr(0,1); if (firstch == "y") { w = firstch.toUpperCase() + w.substr(1); } // Step 1a re = re_1a re2 = re2_1a; if (re.test(w)) { w = w.replace(re,"$1$2"); } else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } // Step 1b re = re_1b; re2 = re2_1b; if (re.test(w)) { var fp = re.exec(w); re = re_mgr0; if (re.test(fp[1])) { re = re_1b_2; w = w.replace(re,""); } } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1]; re2 = re_s_v; if (re2.test(stem)) { w = stem; re2 = re2_1b_2; re3 = re3_1b_2; re4 = re4_1b_2; if (re2.test(w)) { w = w + "e"; } else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } else if (re4.test(w)) { w = w + "e"; } } } // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) re = re_1c; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; w = stem + "i"; } // Step 2 re = re_2; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = re_mgr0; if (re.test(stem)) { w = stem + step2list[suffix]; } } // Step 3 re = re_3; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = re_mgr0; if (re.test(stem)) { w = stem + step3list[suffix]; } } // Step 4 re = re_4; re2 = re2_4; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = re_mgr1; if (re.test(stem)) { w = stem; } } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1] + fp[2]; re2 = re_mgr1; if (re2.test(stem)) { w = stem; } } // Step 5 re = re_5; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = re_mgr1; re2 = re_meq1; re3 = re3_5; if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { w = stem; } } re = re_5_1; re2 = re_mgr1; if (re.test(w) && re2.test(w)) { re = re_1b_2; w = w.replace(re,""); } // and turn initial Y back to y if (firstch == "y") { w = firstch.toLowerCase() + w.substr(1); } return w; }; return function (token) { return token.update(porterStemmer); } })(); lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') /*! * lunr.stopWordFilter * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.generateStopWordFilter builds a stopWordFilter function from the provided * list of stop words. * * The built in lunr.stopWordFilter is built using this generator and can be used * to generate custom stopWordFilters for applications or non English languages. * * @function * @param {Array} token The token to pass through the filter * @returns {lunr.PipelineFunction} * @see lunr.Pipeline * @see lunr.stopWordFilter */ lunr.generateStopWordFilter = function (stopWords) { var words = stopWords.reduce(function (memo, stopWord) { memo[stopWord] = stopWord return memo }, {}) return function (token) { if (token && words[token.toString()] !== token.toString()) return token } } /** * lunr.stopWordFilter is an English language stop word list filter, any words * contained in the list will not be passed through the filter. * * This is intended to be used in the Pipeline. If the token does not pass the * filter then undefined will be returned. * * @function * @implements {lunr.PipelineFunction} * @params {lunr.Token} token - A token to check for being a stop word. * @returns {lunr.Token} * @see {@link lunr.Pipeline} */ lunr.stopWordFilter = lunr.generateStopWordFilter([ 'a', 'able', 'about', 'across', 'after', 'all', 'almost', 'also', 'am', 'among', 'an', 'and', 'any', 'are', 'as', 'at', 'be', 'because', 'been', 'but', 'by', 'can', 'cannot', 'could', 'dear', 'did', 'do', 'does', 'either', 'else', 'ever', 'every', 'for', 'from', 'get', 'got', 'had', 'has', 'have', 'he', 'her', 'hers', 'him', 'his', 'how', 'however', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'just', 'least', 'let', 'like', 'likely', 'may', 'me', 'might', 'most', 'must', 'my', 'neither', 'no', 'nor', 'not', 'of', 'off', 'often', 'on', 'only', 'or', 'other', 'our', 'own', 'rather', 'said', 'say', 'says', 'she', 'should', 'since', 'so', 'some', 'than', 'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'this', 'tis', 'to', 'too', 'twas', 'us', 'wants', 'was', 'we', 'were', 'what', 'when', 'where', 'which', 'while', 'who', 'whom', 'why', 'will', 'with', 'would', 'yet', 'you', 'your' ]) lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') /*! * lunr.trimmer * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.trimmer is a pipeline function for trimming non word * characters from the beginning and end of tokens before they * enter the index. * * This implementation may not work correctly for non latin * characters and should either be removed or adapted for use * with languages with non-latin characters. * * @static * @implements {lunr.PipelineFunction} * @param {lunr.Token} token The token to pass through the filter * @returns {lunr.Token} * @see lunr.Pipeline */ lunr.trimmer = function (token) { return token.update(function (s) { return s.replace(/^\W+/, '').replace(/\W+$/, '') }) } lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') /*! * lunr.TokenSet * Copyright (C) 2020 Oliver Nightingale */ /** * A token set is used to store the unique list of all tokens * within an index. Token sets are also used to represent an * incoming query to the index, this query token set and index * token set are then intersected to find which tokens to look * up in the inverted index. * * A token set can hold multiple tokens, as in the case of the * index token set, or it can hold a single token as in the * case of a simple query token set. * * Additionally token sets are used to perform wildcard matching. * Leading, contained and trailing wildcards are supported, and * from this edit distance matching can also be provided. * * Token sets are implemented as a minimal finite state automata, * where both common prefixes and suffixes are shared between tokens. * This helps to reduce the space used for storing the token set. * * @constructor */ lunr.TokenSet = function () { this.final = false this.edges = {} this.id = lunr.TokenSet._nextId lunr.TokenSet._nextId += 1 } /** * Keeps track of the next, auto increment, identifier to assign * to a new tokenSet. * * TokenSets require a unique identifier to be correctly minimised. * * @private */ lunr.TokenSet._nextId = 1 /** * Creates a TokenSet instance from the given sorted array of words. * * @param {String[]} arr - A sorted array of strings to create the set from. * @returns {lunr.TokenSet} * @throws Will throw an error if the input array is not sorted. */ lunr.TokenSet.fromArray = function (arr) { var builder = new lunr.TokenSet.Builder for (var i = 0, len = arr.length; i < len; i++) { builder.insert(arr[i]) } builder.finish() return builder.root } /** * Creates a token set from a query clause. * * @private * @param {Object} clause - A single clause from lunr.Query. * @param {string} clause.term - The query clause term. * @param {number} [clause.editDistance] - The optional edit distance for the term. * @returns {lunr.TokenSet} */ lunr.TokenSet.fromClause = function (clause) { if ('editDistance' in clause) { return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) } else { return lunr.TokenSet.fromString(clause.term) } } /** * Creates a token set representing a single string with a specified * edit distance. * * Insertions, deletions, substitutions and transpositions are each * treated as an edit distance of 1. * * Increasing the allowed edit distance will have a dramatic impact * on the performance of both creating and intersecting these TokenSets. * It is advised to keep the edit distance less than 3. * * @param {string} str - The string to create the token set from. * @param {number} editDistance - The allowed edit distance to match. * @returns {lunr.Vector} */ lunr.TokenSet.fromFuzzyString = function (str, editDistance) { var root = new lunr.TokenSet var stack = [{ node: root, editsRemaining: editDistance, str: str }] while (stack.length) { var frame = stack.pop() // no edit if (frame.str.length > 0) { var char = frame.str.charAt(0), noEditNode if (char in frame.node.edges) { noEditNode = frame.node.edges[char] } else { noEditNode = new lunr.TokenSet frame.node.edges[char] = noEditNode } if (frame.str.length == 1) { noEditNode.final = true } stack.push({ node: noEditNode, editsRemaining: frame.editsRemaining, str: frame.str.slice(1) }) } if (frame.editsRemaining == 0) { continue } // insertion if ("*" in frame.node.edges) { var insertionNode = frame.node.edges["*"] } else { var insertionNode = new lunr.TokenSet frame.node.edges["*"] = insertionNode } if (frame.str.length == 0) { insertionNode.final = true } stack.push({ node: insertionNode, editsRemaining: frame.editsRemaining - 1, str: frame.str }) // deletion // can only do a deletion if we have enough edits remaining // and if there are characters left to delete in the string if (frame.str.length > 1) { stack.push({ node: frame.node, editsRemaining: frame.editsRemaining - 1, str: frame.str.slice(1) }) } // deletion // just removing the last character from the str if (frame.str.length == 1) { frame.node.final = true } // substitution // can only do a substitution if we have enough edits remaining // and if there are characters left to substitute if (frame.str.length >= 1) { if ("*" in frame.node.edges) { var substitutionNode = frame.node.edges["*"] } else { var substitutionNode = new lunr.TokenSet frame.node.edges["*"] = substitutionNode } if (frame.str.length == 1) { substitutionNode.final = true } stack.push({ node: substitutionNode, editsRemaining: frame.editsRemaining - 1, str: frame.str.slice(1) }) } // transposition // can only do a transposition if there are edits remaining // and there are enough characters to transpose if (frame.str.length > 1) { var charA = frame.str.charAt(0), charB = frame.str.charAt(1), transposeNode if (charB in frame.node.edges) { transposeNode = frame.node.edges[charB] } else { transposeNode = new lunr.TokenSet frame.node.edges[charB] = transposeNode } if (frame.str.length == 1) { transposeNode.final = true } stack.push({ node: transposeNode, editsRemaining: frame.editsRemaining - 1, str: charA + frame.str.slice(2) }) } } return root } /** * Creates a TokenSet from a string. * * The string may contain one or more wildcard characters (*) * that will allow wildcard matching when intersecting with * another TokenSet. * * @param {string} str - The string to create a TokenSet from. * @returns {lunr.TokenSet} */ lunr.TokenSet.fromString = function (str) { var node = new lunr.TokenSet, root = node /* * Iterates through all characters within the passed string * appending a node for each character. * * When a wildcard character is found then a self * referencing edge is introduced to continually match * any number of any characters. */ for (var i = 0, len = str.length; i < len; i++) { var char = str[i], final = (i == len - 1) if (char == "*") { node.edges[char] = node node.final = final } else { var next = new lunr.TokenSet next.final = final node.edges[char] = next node = next } } return root } /** * Converts this TokenSet into an array of strings * contained within the TokenSet. * * This is not intended to be used on a TokenSet that * contains wildcards, in these cases the results are * undefined and are likely to cause an infinite loop. * * @returns {string[]} */ lunr.TokenSet.prototype.toArray = function () { var words = [] var stack = [{ prefix: "", node: this }] while (stack.length) { var frame = stack.pop(), edges = Object.keys(frame.node.edges), len = edges.length if (frame.node.final) { /* In Safari, at this point the prefix is sometimes corrupted, see: * https://github.com/olivernn/lunr.js/issues/279 Calling any * String.prototype method forces Safari to "cast" this string to what * it's supposed to be, fixing the bug. */ frame.prefix.charAt(0) words.push(frame.prefix) } for (var i = 0; i < len; i++) { var edge = edges[i] stack.push({ prefix: frame.prefix.concat(edge), node: frame.node.edges[edge] }) } } return words } /** * Generates a string representation of a TokenSet. * * This is intended to allow TokenSets to be used as keys * in objects, largely to aid the construction and minimisation * of a TokenSet. As such it is not designed to be a human * friendly representation of the TokenSet. * * @returns {string} */ lunr.TokenSet.prototype.toString = function () { // NOTE: Using Object.keys here as this.edges is very likely // to enter 'hash-mode' with many keys being added // // avoiding a for-in loop here as it leads to the function // being de-optimised (at least in V8). From some simple // benchmarks the performance is comparable, but allowing // V8 to optimize may mean easy performance wins in the future. if (this._str) { return this._str } var str = this.final ? '1' : '0', labels = Object.keys(this.edges).sort(), len = labels.length for (var i = 0; i < len; i++) { var label = labels[i], node = this.edges[label] str = str + label + node.id } return str } /** * Returns a new TokenSet that is the intersection of * this TokenSet and the passed TokenSet. * * This intersection will take into account any wildcards * contained within the TokenSet. * * @param {lunr.TokenSet} b - An other TokenSet to intersect with. * @returns {lunr.TokenSet} */ lunr.TokenSet.prototype.intersect = function (b) { var output = new lunr.TokenSet, frame = undefined var stack = [{ qNode: b, output: output, node: this }] while (stack.length) { frame = stack.pop() // NOTE: As with the #toString method, we are using // Object.keys and a for loop instead of a for-in loop // as both of these objects enter 'hash' mode, causing // the function to be de-optimised in V8 var qEdges = Object.keys(frame.qNode.edges), qLen = qEdges.length, nEdges = Object.keys(frame.node.edges), nLen = nEdges.length for (var q = 0; q < qLen; q++) { var qEdge = qEdges[q] for (var n = 0; n < nLen; n++) { var nEdge = nEdges[n] if (nEdge == qEdge || qEdge == '*') { var node = frame.node.edges[nEdge], qNode = frame.qNode.edges[qEdge], final = node.final && qNode.final, next = undefined if (nEdge in frame.output.edges) { // an edge already exists for this character // no need to create a new node, just set the finality // bit unless this node is already final next = frame.output.edges[nEdge] next.final = next.final || final } else { // no edge exists yet, must create one // set the finality bit and insert it // into the output next = new lunr.TokenSet next.final = final frame.output.edges[nEdge] = next } stack.push({ qNode: qNode, output: next, node: node }) } } } } return output } lunr.TokenSet.Builder = function () { this.previousWord = "" this.root = new lunr.TokenSet this.uncheckedNodes = [] this.minimizedNodes = {} } lunr.TokenSet.Builder.prototype.insert = function (word) { var node, commonPrefix = 0 if (word < this.previousWord) { throw new Error ("Out of order word insertion") } for (var i = 0; i < word.length && i < this.previousWord.length; i++) { if (word[i] != this.previousWord[i]) break commonPrefix++ } this.minimize(commonPrefix) if (this.uncheckedNodes.length == 0) { node = this.root } else { node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child } for (var i = commonPrefix; i < word.length; i++) { var nextNode = new lunr.TokenSet, char = word[i] node.edges[char] = nextNode this.uncheckedNodes.push({ parent: node, char: char, child: nextNode }) node = nextNode } node.final = true this.previousWord = word } lunr.TokenSet.Builder.prototype.finish = function () { this.minimize(0) } lunr.TokenSet.Builder.prototype.minimize = function (downTo) { for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { var node = this.uncheckedNodes[i], childKey = node.child.toString() if (childKey in this.minimizedNodes) { node.parent.edges[node.char] = this.minimizedNodes[childKey] } else { // Cache the key for this node since // we know it can't change anymore node.child._str = childKey this.minimizedNodes[childKey] = node.child } this.uncheckedNodes.pop() } } /*! * lunr.Index * Copyright (C) 2020 Oliver Nightingale */ /** * An index contains the built index of all documents and provides a query interface * to the index. * * Usually instances of lunr.Index will not be created using this constructor, instead * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be * used to load previously built and serialized indexes. * * @constructor * @param {Object} attrs - The attributes of the built search index. * @param {Object} attrs.invertedIndex - An index of term/field to document reference. * @param {Object} attrs.fieldVectors - Field vectors * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. * @param {string[]} attrs.fields - The names of indexed document fields. * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. */ lunr.Index = function (attrs) { this.invertedIndex = attrs.invertedIndex this.fieldVectors = attrs.fieldVectors this.tokenSet = attrs.tokenSet this.fields = attrs.fields this.pipeline = attrs.pipeline } /** * A result contains details of a document matching a search query. * @typedef {Object} lunr.Index~Result * @property {string} ref - The reference of the document this result represents. * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. */ /** * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple * query language which itself is parsed into an instance of lunr.Query. * * For programmatically building queries it is advised to directly use lunr.Query, the query language * is best used for human entered text rather than program generated text. * * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' * or 'world', though those that contain both will rank higher in the results. * * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding * wildcards will increase the number of documents that will be found but can also have a negative * impact on query performance, especially with wildcards at the beginning of a term. * * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term * hello in the title field will match this query. Using a field not present in the index will lead * to an error being thrown. * * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. * Avoid large values for edit distance to improve query performance. * * Each term also supports a presence modifier. By default a term's presence in document is optional, however * this can be changed to either required or prohibited. For a term's presence to be required in a document the * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. * * To escape special characters the backslash character '\' can be used, this allows searches to include * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead * of attempting to apply a boost of 2 to the search term "foo". * * @typedef {string} lunr.Index~QueryString * @example Simple single term query * hello * @example Multiple term query * hello world * @example term scoped to a field * title:hello * @example term with a boost of 10 * hello^10 * @example term with an edit distance of 2 * hello~2 * @example terms with presence modifiers * -foo +bar baz */ /** * Performs a search against the index using lunr query syntax. * * Results will be returned sorted by their score, the most relevant results * will be returned first. For details on how the score is calculated, please see * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. * * For more programmatic querying use lunr.Index#query. * * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. * @returns {lunr.Index~Result[]} */ lunr.Index.prototype.search = function (queryString) { return this.query(function (query) { var parser = new lunr.QueryParser(queryString, query) parser.parse() }) } /** * A query builder callback provides a query object to be used to express * the query to perform on the index. * * @callback lunr.Index~queryBuilder * @param {lunr.Query} query - The query object to build up. * @this lunr.Query */ /** * Performs a query against the index using the yielded lunr.Query object. * * If performing programmatic queries against the index, this method is preferred * over lunr.Index#search so as to avoid the additional query parsing overhead. * * A query object is yielded to the supplied function which should be used to * express the query to be run against the index. * * Note that although this function takes a callback parameter it is _not_ an * asynchronous operation, the callback is just yielded a query object to be * customized. * * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. * @returns {lunr.Index~Result[]} */ lunr.Index.prototype.query = function (fn) { // for each query clause // * process terms // * expand terms from token set // * find matching documents and metadata // * get document vectors // * score documents var query = new lunr.Query(this.fields), matchingFields = Object.create(null), queryVectors = Object.create(null), termFieldCache = Object.create(null), requiredMatches = Object.create(null), prohibitedMatches = Object.create(null) /* * To support field level boosts a query vector is created per * field. An empty vector is eagerly created to support negated * queries. */ for (var i = 0; i < this.fields.length; i++) { queryVectors[this.fields[i]] = new lunr.Vector } fn.call(query, query) for (var i = 0; i < query.clauses.length; i++) { /* * Unless the pipeline has been disabled for this term, which is * the case for terms with wildcards, we need to pass the clause * term through the search pipeline. A pipeline returns an array * of processed terms. Pipeline functions may expand the passed * term, which means we may end up performing multiple index lookups * for a single query term. */ var clause = query.clauses[i], terms = null, clauseMatches = lunr.Set.empty if (clause.usePipeline) { terms = this.pipeline.runString(clause.term, { fields: clause.fields }) } else { terms = [clause.term] } for (var m = 0; m < terms.length; m++) { var term = terms[m] /* * Each term returned from the pipeline needs to use the same query * clause object, e.g. the same boost and or edit distance. The * simplest way to do this is to re-use the clause object but mutate * its term property. */ clause.term = term /* * From the term in the clause we create a token set which will then * be used to intersect the indexes token set to get a list of terms * to lookup in the inverted index */ var termTokenSet = lunr.TokenSet.fromClause(clause), expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() /* * If a term marked as required does not exist in the tokenSet it is * impossible for the search to return any matches. We set all the field * scoped required matches set to empty and stop examining any further * clauses. */ if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { for (var k = 0; k < clause.fields.length; k++) { var field = clause.fields[k] requiredMatches[field] = lunr.Set.empty } break } for (var j = 0; j < expandedTerms.length; j++) { /* * For each term get the posting and termIndex, this is required for * building the query vector. */ var expandedTerm = expandedTerms[j], posting = this.invertedIndex[expandedTerm], termIndex = posting._index for (var k = 0; k < clause.fields.length; k++) { /* * For each field that this query term is scoped by (by default * all fields are in scope) we need to get all the document refs * that have this term in that field. * * The posting is the entry in the invertedIndex for the matching * term from above. */ var field = clause.fields[k], fieldPosting = posting[field], matchingDocumentRefs = Object.keys(fieldPosting), termField = expandedTerm + "/" + field, matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) /* * if the presence of this term is required ensure that the matching * documents are added to the set of required matches for this clause. * */ if (clause.presence == lunr.Query.presence.REQUIRED) { clauseMatches = clauseMatches.union(matchingDocumentsSet) if (requiredMatches[field] === undefined) { requiredMatches[field] = lunr.Set.complete } } /* * if the presence of this term is prohibited ensure that the matching * documents are added to the set of prohibited matches for this field, * creating that set if it does not yet exist. */ if (clause.presence == lunr.Query.presence.PROHIBITED) { if (prohibitedMatches[field] === undefined) { prohibitedMatches[field] = lunr.Set.empty } prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) /* * Prohibited matches should not be part of the query vector used for * similarity scoring and no metadata should be extracted so we continue * to the next field */ continue } /* * The query field vector is populated using the termIndex found for * the term and a unit value with the appropriate boost applied. * Using upsert because there could already be an entry in the vector * for the term we are working with. In that case we just add the scores * together. */ queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) /** * If we've already seen this term, field combo then we've already collected * the matching documents and metadata, no need to go through all that again */ if (termFieldCache[termField]) { continue } for (var l = 0; l < matchingDocumentRefs.length; l++) { /* * All metadata for this term/field/document triple * are then extracted and collected into an instance * of lunr.MatchData ready to be returned in the query * results */ var matchingDocumentRef = matchingDocumentRefs[l], matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), metadata = fieldPosting[matchingDocumentRef], fieldMatch if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) } else { fieldMatch.add(expandedTerm, field, metadata) } } termFieldCache[termField] = true } } } /** * If the presence was required we need to update the requiredMatches field sets. * We do this after all fields for the term have collected their matches because * the clause terms presence is required in _any_ of the fields not _all_ of the * fields. */ if (clause.presence === lunr.Query.presence.REQUIRED) { for (var k = 0; k < clause.fields.length; k++) { var field = clause.fields[k] requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) } } } /** * Need to combine the field scoped required and prohibited * matching documents into a global set of required and prohibited * matches */ var allRequiredMatches = lunr.Set.complete, allProhibitedMatches = lunr.Set.empty for (var i = 0; i < this.fields.length; i++) { var field = this.fields[i] if (requiredMatches[field]) { allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) } if (prohibitedMatches[field]) { allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) } } var matchingFieldRefs = Object.keys(matchingFields), results = [], matches = Object.create(null) /* * If the query is negated (contains only prohibited terms) * we need to get _all_ fieldRefs currently existing in the * index. This is only done when we know that the query is * entirely prohibited terms to avoid any cost of getting all * fieldRefs unnecessarily. * * Additionally, blank MatchData must be created to correctly * populate the results. */ if (query.isNegated()) { matchingFieldRefs = Object.keys(this.fieldVectors) for (var i = 0; i < matchingFieldRefs.length; i++) { var matchingFieldRef = matchingFieldRefs[i] var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) matchingFields[matchingFieldRef] = new lunr.MatchData } } for (var i = 0; i < matchingFieldRefs.length; i++) { /* * Currently we have document fields that match the query, but we * need to return documents. The matchData and scores are combined * from multiple fields belonging to the same document. * * Scores are calculated by field, using the query vectors created * above, and combined into a final document score using addition. */ var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), docRef = fieldRef.docRef if (!allRequiredMatches.contains(docRef)) { continue } if (allProhibitedMatches.contains(docRef)) { continue } var fieldVector = this.fieldVectors[fieldRef], score = queryVectors[fieldRef.fieldName].similarity(fieldVector), docMatch if ((docMatch = matches[docRef]) !== undefined) { docMatch.score += score docMatch.matchData.combine(matchingFields[fieldRef]) } else { var match = { ref: docRef, score: score, matchData: matchingFields[fieldRef] } matches[docRef] = match results.push(match) } } /* * Sort the results objects by score, highest first. */ return results.sort(function (a, b) { return b.score - a.score }) } /** * Prepares the index for JSON serialization. * * The schema for this JSON blob will be described in a * separate JSON schema file. * * @returns {Object} */ lunr.Index.prototype.toJSON = function () { var invertedIndex = Object.keys(this.invertedIndex) .sort() .map(function (term) { return [term, this.invertedIndex[term]] }, this) var fieldVectors = Object.keys(this.fieldVectors) .map(function (ref) { return [ref, this.fieldVectors[ref].toJSON()] }, this) return { version: lunr.version, fields: this.fields, fieldVectors: fieldVectors, invertedIndex: invertedIndex, pipeline: this.pipeline.toJSON() } } /** * Loads a previously serialized lunr.Index * * @param {Object} serializedIndex - A previously serialized lunr.Index * @returns {lunr.Index} */ lunr.Index.load = function (serializedIndex) { var attrs = {}, fieldVectors = {}, serializedVectors = serializedIndex.fieldVectors, invertedIndex = Object.create(null), serializedInvertedIndex = serializedIndex.invertedIndex, tokenSetBuilder = new lunr.TokenSet.Builder, pipeline = lunr.Pipeline.load(serializedIndex.pipeline) if (serializedIndex.version != lunr.version) { lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") } for (var i = 0; i < serializedVectors.length; i++) { var tuple = serializedVectors[i], ref = tuple[0], elements = tuple[1] fieldVectors[ref] = new lunr.Vector(elements) } for (var i = 0; i < serializedInvertedIndex.length; i++) { var tuple = serializedInvertedIndex[i], term = tuple[0], posting = tuple[1] tokenSetBuilder.insert(term) invertedIndex[term] = posting } tokenSetBuilder.finish() attrs.fields = serializedIndex.fields attrs.fieldVectors = fieldVectors attrs.invertedIndex = invertedIndex attrs.tokenSet = tokenSetBuilder.root attrs.pipeline = pipeline return new lunr.Index(attrs) } /*! * lunr.Builder * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.Builder performs indexing on a set of documents and * returns instances of lunr.Index ready for querying. * * All configuration of the index is done via the builder, the * fields to index, the document reference, the text processing * pipeline and document scoring parameters are all set on the * builder before indexing. * * @constructor * @property {string} _ref - Internal reference to the document reference field. * @property {string[]} _fields - Internal reference to the document fields to index. * @property {object} invertedIndex - The inverted index maps terms to document fields. * @property {object} documentTermFrequencies - Keeps track of document term frequencies. * @property {object} documentLengths - Keeps track of the length of documents added to the index. * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. * @property {number} documentCount - Keeps track of the total number of documents indexed. * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. */ lunr.Builder = function () { this._ref = "id" this._fields = Object.create(null) this._documents = Object.create(null) this.invertedIndex = Object.create(null) this.fieldTermFrequencies = {} this.fieldLengths = {} this.tokenizer = lunr.tokenizer this.pipeline = new lunr.Pipeline this.searchPipeline = new lunr.Pipeline this.documentCount = 0 this._b = 0.75 this._k1 = 1.2 this.termIndex = 0 this.metadataWhitelist = [] } /** * Sets the document field used as the document reference. Every document must have this field. * The type of this field in the document should be a string, if it is not a string it will be * coerced into a string by calling toString. * * The default ref is 'id'. * * The ref should _not_ be changed during indexing, it should be set before any documents are * added to the index. Changing it during indexing can lead to inconsistent results. * * @param {string} ref - The name of the reference field in the document. */ lunr.Builder.prototype.ref = function (ref) { this._ref = ref } /** * A function that is used to extract a field from a document. * * Lunr expects a field to be at the top level of a document, if however the field * is deeply nested within a document an extractor function can be used to extract * the right field for indexing. * * @callback fieldExtractor * @param {object} doc - The document being added to the index. * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. * @example Extracting a nested field * function (doc) { return doc.nested.field } */ /** * Adds a field to the list of document fields that will be indexed. Every document being * indexed should have this field. Null values for this field in indexed documents will * not cause errors but will limit the chance of that document being retrieved by searches. * * All fields should be added before adding documents to the index. Adding fields after * a document has been indexed will have no effect on already indexed documents. * * Fields can be boosted at build time. This allows terms within that field to have more * importance when ranking search results. Use a field boost to specify that matches within * one field are more important than other fields. * * @param {string} fieldName - The name of a field to index in all documents. * @param {object} attributes - Optional attributes associated with this field. * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. * @throws {RangeError} fieldName cannot contain unsupported characters '/' */ lunr.Builder.prototype.field = function (fieldName, attributes) { if (/\//.test(fieldName)) { throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") } this._fields[fieldName] = attributes || {} } /** * A parameter to tune the amount of field length normalisation that is applied when * calculating relevance scores. A value of 0 will completely disable any normalisation * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b * will be clamped to the range 0 - 1. * * @param {number} number - The value to set for this tuning parameter. */ lunr.Builder.prototype.b = function (number) { if (number < 0) { this._b = 0 } else if (number > 1) { this._b = 1 } else { this._b = number } } /** * A parameter that controls the speed at which a rise in term frequency results in term * frequency saturation. The default value is 1.2. Setting this to a higher value will give * slower saturation levels, a lower value will result in quicker saturation. * * @param {number} number - The value to set for this tuning parameter. */ lunr.Builder.prototype.k1 = function (number) { this._k1 = number } /** * Adds a document to the index. * * Before adding fields to the index the index should have been fully setup, with the document * ref and all fields to index already having been specified. * * The document must have a field name as specified by the ref (by default this is 'id') and * it should have all fields defined for indexing, though null or undefined values will not * cause errors. * * Entire documents can be boosted at build time. Applying a boost to a document indicates that * this document should rank higher in search results than other documents. * * @param {object} doc - The document to add to the index. * @param {object} attributes - Optional attributes associated with this document. * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. */ lunr.Builder.prototype.add = function (doc, attributes) { var docRef = doc[this._ref], fields = Object.keys(this._fields) this._documents[docRef] = attributes || {} this.documentCount += 1 for (var i = 0; i < fields.length; i++) { var fieldName = fields[i], extractor = this._fields[fieldName].extractor, field = extractor ? extractor(doc) : doc[fieldName], tokens = this.tokenizer(field, { fields: [fieldName] }), terms = this.pipeline.run(tokens), fieldRef = new lunr.FieldRef (docRef, fieldName), fieldTerms = Object.create(null) this.fieldTermFrequencies[fieldRef] = fieldTerms this.fieldLengths[fieldRef] = 0 // store the length of this field for this document this.fieldLengths[fieldRef] += terms.length // calculate term frequencies for this field for (var j = 0; j < terms.length; j++) { var term = terms[j] if (fieldTerms[term] == undefined) { fieldTerms[term] = 0 } fieldTerms[term] += 1 // add to inverted index // create an initial posting if one doesn't exist if (this.invertedIndex[term] == undefined) { var posting = Object.create(null) posting["_index"] = this.termIndex this.termIndex += 1 for (var k = 0; k < fields.length; k++) { posting[fields[k]] = Object.create(null) } this.invertedIndex[term] = posting } // add an entry for this term/fieldName/docRef to the invertedIndex if (this.invertedIndex[term][fieldName][docRef] == undefined) { this.invertedIndex[term][fieldName][docRef] = Object.create(null) } // store all whitelisted metadata about this token in the // inverted index for (var l = 0; l < this.metadataWhitelist.length; l++) { var metadataKey = this.metadataWhitelist[l], metadata = term.metadata[metadataKey] if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { this.invertedIndex[term][fieldName][docRef][metadataKey] = [] } this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) } } } } /** * Calculates the average document length for this index * * @private */ lunr.Builder.prototype.calculateAverageFieldLengths = function () { var fieldRefs = Object.keys(this.fieldLengths), numberOfFields = fieldRefs.length, accumulator = {}, documentsWithField = {} for (var i = 0; i < numberOfFields; i++) { var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), field = fieldRef.fieldName documentsWithField[field] || (documentsWithField[field] = 0) documentsWithField[field] += 1 accumulator[field] || (accumulator[field] = 0) accumulator[field] += this.fieldLengths[fieldRef] } var fields = Object.keys(this._fields) for (var i = 0; i < fields.length; i++) { var fieldName = fields[i] accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] } this.averageFieldLength = accumulator } /** * Builds a vector space model of every document using lunr.Vector * * @private */ lunr.Builder.prototype.createFieldVectors = function () { var fieldVectors = {}, fieldRefs = Object.keys(this.fieldTermFrequencies), fieldRefsLength = fieldRefs.length, termIdfCache = Object.create(null) for (var i = 0; i < fieldRefsLength; i++) { var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), fieldName = fieldRef.fieldName, fieldLength = this.fieldLengths[fieldRef], fieldVector = new lunr.Vector, termFrequencies = this.fieldTermFrequencies[fieldRef], terms = Object.keys(termFrequencies), termsLength = terms.length var fieldBoost = this._fields[fieldName].boost || 1, docBoost = this._documents[fieldRef.docRef].boost || 1 for (var j = 0; j < termsLength; j++) { var term = terms[j], tf = termFrequencies[term], termIndex = this.invertedIndex[term]._index, idf, score, scoreWithPrecision if (termIdfCache[term] === undefined) { idf = lunr.idf(this.invertedIndex[term], this.documentCount) termIdfCache[term] = idf } else { idf = termIdfCache[term] } score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) score *= fieldBoost score *= docBoost scoreWithPrecision = Math.round(score * 1000) / 1000 // Converts 1.23456789 to 1.234. // Reducing the precision so that the vectors take up less // space when serialised. Doing it now so that they behave // the same before and after serialisation. Also, this is // the fastest approach to reducing a number's precision in // JavaScript. fieldVector.insert(termIndex, scoreWithPrecision) } fieldVectors[fieldRef] = fieldVector } this.fieldVectors = fieldVectors } /** * Creates a token set of all tokens in the index using lunr.TokenSet * * @private */ lunr.Builder.prototype.createTokenSet = function () { this.tokenSet = lunr.TokenSet.fromArray( Object.keys(this.invertedIndex).sort() ) } /** * Builds the index, creating an instance of lunr.Index. * * This completes the indexing process and should only be called * once all documents have been added to the index. * * @returns {lunr.Index} */ lunr.Builder.prototype.build = function () { this.calculateAverageFieldLengths() this.createFieldVectors() this.createTokenSet() return new lunr.Index({ invertedIndex: this.invertedIndex, fieldVectors: this.fieldVectors, tokenSet: this.tokenSet, fields: Object.keys(this._fields), pipeline: this.searchPipeline }) } /** * Applies a plugin to the index builder. * * A plugin is a function that is called with the index builder as its context. * Plugins can be used to customise or extend the behaviour of the index * in some way. A plugin is just a function, that encapsulated the custom * behaviour that should be applied when building the index. * * The plugin function will be called with the index builder as its argument, additional * arguments can also be passed when calling use. The function will be called * with the index builder as its context. * * @param {Function} plugin The plugin to apply. */ lunr.Builder.prototype.use = function (fn) { var args = Array.prototype.slice.call(arguments, 1) args.unshift(this) fn.apply(this, args) } /** * Contains and collects metadata about a matching document. * A single instance of lunr.MatchData is returned as part of every * lunr.Index~Result. * * @constructor * @param {string} term - The term this match data is associated with * @param {string} field - The field in which the term was found * @param {object} metadata - The metadata recorded about this term in this field * @property {object} metadata - A cloned collection of metadata associated with this document. * @see {@link lunr.Index~Result} */ lunr.MatchData = function (term, field, metadata) { var clonedMetadata = Object.create(null), metadataKeys = Object.keys(metadata || {}) // Cloning the metadata to prevent the original // being mutated during match data combination. // Metadata is kept in an array within the inverted // index so cloning the data can be done with // Array#slice for (var i = 0; i < metadataKeys.length; i++) { var key = metadataKeys[i] clonedMetadata[key] = metadata[key].slice() } this.metadata = Object.create(null) if (term !== undefined) { this.metadata[term] = Object.create(null) this.metadata[term][field] = clonedMetadata } } /** * An instance of lunr.MatchData will be created for every term that matches a * document. However only one instance is required in a lunr.Index~Result. This * method combines metadata from another instance of lunr.MatchData with this * objects metadata. * * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. * @see {@link lunr.Index~Result} */ lunr.MatchData.prototype.combine = function (otherMatchData) { var terms = Object.keys(otherMatchData.metadata) for (var i = 0; i < terms.length; i++) { var term = terms[i], fields = Object.keys(otherMatchData.metadata[term]) if (this.metadata[term] == undefined) { this.metadata[term] = Object.create(null) } for (var j = 0; j < fields.length; j++) { var field = fields[j], keys = Object.keys(otherMatchData.metadata[term][field]) if (this.metadata[term][field] == undefined) { this.metadata[term][field] = Object.create(null) } for (var k = 0; k < keys.length; k++) { var key = keys[k] if (this.metadata[term][field][key] == undefined) { this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] } else { this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) } } } } } /** * Add metadata for a term/field pair to this instance of match data. * * @param {string} term - The term this match data is associated with * @param {string} field - The field in which the term was found * @param {object} metadata - The metadata recorded about this term in this field */ lunr.MatchData.prototype.add = function (term, field, metadata) { if (!(term in this.metadata)) { this.metadata[term] = Object.create(null) this.metadata[term][field] = metadata return } if (!(field in this.metadata[term])) { this.metadata[term][field] = metadata return } var metadataKeys = Object.keys(metadata) for (var i = 0; i < metadataKeys.length; i++) { var key = metadataKeys[i] if (key in this.metadata[term][field]) { this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) } else { this.metadata[term][field][key] = metadata[key] } } } /** * A lunr.Query provides a programmatic way of defining queries to be performed * against a {@link lunr.Index}. * * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method * so the query object is pre-initialized with the right index fields. * * @constructor * @property {lunr.Query~Clause[]} clauses - An array of query clauses. * @property {string[]} allFields - An array of all available fields in a lunr.Index. */ lunr.Query = function (allFields) { this.clauses = [] this.allFields = allFields } /** * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. * * This allows wildcards to be added to the beginning and end of a term without having to manually do any string * concatenation. * * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. * * @constant * @default * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists * @see lunr.Query~Clause * @see lunr.Query#clause * @see lunr.Query#term * @example query term with trailing wildcard * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) * @example query term with leading and trailing wildcard * query.term('foo', { * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING * }) */ lunr.Query.wildcard = new String ("*") lunr.Query.wildcard.NONE = 0 lunr.Query.wildcard.LEADING = 1 lunr.Query.wildcard.TRAILING = 2 /** * Constants for indicating what kind of presence a term must have in matching documents. * * @constant * @enum {number} * @see lunr.Query~Clause * @see lunr.Query#clause * @see lunr.Query#term * @example query term with required presence * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) */ lunr.Query.presence = { /** * Term's presence in a document is optional, this is the default value. */ OPTIONAL: 1, /** * Term's presence in a document is required, documents that do not contain * this term will not be returned. */ REQUIRED: 2, /** * Term's presence in a document is prohibited, documents that do contain * this term will not be returned. */ PROHIBITED: 3 } /** * A single clause in a {@link lunr.Query} contains a term and details on how to * match that term against a {@link lunr.Index}. * * @typedef {Object} lunr.Query~Clause * @property {string[]} fields - The fields in an index this clause should be matched against. * @property {number} [boost=1] - Any boost that should be applied when matching this clause. * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. */ /** * Adds a {@link lunr.Query~Clause} to this query. * * Unless the clause contains the fields to be matched all fields will be matched. In addition * a default boost of 1 is applied to the clause. * * @param {lunr.Query~Clause} clause - The clause to add to this query. * @see lunr.Query~Clause * @returns {lunr.Query} */ lunr.Query.prototype.clause = function (clause) { if (!('fields' in clause)) { clause.fields = this.allFields } if (!('boost' in clause)) { clause.boost = 1 } if (!('usePipeline' in clause)) { clause.usePipeline = true } if (!('wildcard' in clause)) { clause.wildcard = lunr.Query.wildcard.NONE } if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { clause.term = "*" + clause.term } if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { clause.term = "" + clause.term + "*" } if (!('presence' in clause)) { clause.presence = lunr.Query.presence.OPTIONAL } this.clauses.push(clause) return this } /** * A negated query is one in which every clause has a presence of * prohibited. These queries require some special processing to return * the expected results. * * @returns boolean */ lunr.Query.prototype.isNegated = function () { for (var i = 0; i < this.clauses.length; i++) { if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { return false } } return true } /** * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} * to the list of clauses that make up this query. * * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion * to a token or token-like string should be done before calling this method. * * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an * array, each term in the array will share the same options. * * @param {object|object[]} term - The term(s) to add to the query. * @param {object} [options] - Any additional properties to add to the query clause. * @returns {lunr.Query} * @see lunr.Query#clause * @see lunr.Query~Clause * @example adding a single term to a query * query.term("foo") * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard * query.term("foo", { * fields: ["title"], * boost: 10, * wildcard: lunr.Query.wildcard.TRAILING * }) * @example using lunr.tokenizer to convert a string to tokens before using them as terms * query.term(lunr.tokenizer("foo bar")) */ lunr.Query.prototype.term = function (term, options) { if (Array.isArray(term)) { term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) return this } var clause = options || {} clause.term = term.toString() this.clause(clause) return this } lunr.QueryParseError = function (message, start, end) { this.name = "QueryParseError" this.message = message this.start = start this.end = end } lunr.QueryParseError.prototype = new Error lunr.QueryLexer = function (str) { this.lexemes = [] this.str = str this.length = str.length this.pos = 0 this.start = 0 this.escapeCharPositions = [] } lunr.QueryLexer.prototype.run = function () { var state = lunr.QueryLexer.lexText while (state) { state = state(this) } } lunr.QueryLexer.prototype.sliceString = function () { var subSlices = [], sliceStart = this.start, sliceEnd = this.pos for (var i = 0; i < this.escapeCharPositions.length; i++) { sliceEnd = this.escapeCharPositions[i] subSlices.push(this.str.slice(sliceStart, sliceEnd)) sliceStart = sliceEnd + 1 } subSlices.push(this.str.slice(sliceStart, this.pos)) this.escapeCharPositions.length = 0 return subSlices.join('') } lunr.QueryLexer.prototype.emit = function (type) { this.lexemes.push({ type: type, str: this.sliceString(), start: this.start, end: this.pos }) this.start = this.pos } lunr.QueryLexer.prototype.escapeCharacter = function () { this.escapeCharPositions.push(this.pos - 1) this.pos += 1 } lunr.QueryLexer.prototype.next = function () { if (this.pos >= this.length) { return lunr.QueryLexer.EOS } var char = this.str.charAt(this.pos) this.pos += 1 return char } lunr.QueryLexer.prototype.width = function () { return this.pos - this.start } lunr.QueryLexer.prototype.ignore = function () { if (this.start == this.pos) { this.pos += 1 } this.start = this.pos } lunr.QueryLexer.prototype.backup = function () { this.pos -= 1 } lunr.QueryLexer.prototype.acceptDigitRun = function () { var char, charCode do { char = this.next() charCode = char.charCodeAt(0) } while (charCode > 47 && charCode < 58) if (char != lunr.QueryLexer.EOS) { this.backup() } } lunr.QueryLexer.prototype.more = function () { return this.pos < this.length } lunr.QueryLexer.EOS = 'EOS' lunr.QueryLexer.FIELD = 'FIELD' lunr.QueryLexer.TERM = 'TERM' lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' lunr.QueryLexer.BOOST = 'BOOST' lunr.QueryLexer.PRESENCE = 'PRESENCE' lunr.QueryLexer.lexField = function (lexer) { lexer.backup() lexer.emit(lunr.QueryLexer.FIELD) lexer.ignore() return lunr.QueryLexer.lexText } lunr.QueryLexer.lexTerm = function (lexer) { if (lexer.width() > 1) { lexer.backup() lexer.emit(lunr.QueryLexer.TERM) } lexer.ignore() if (lexer.more()) { return lunr.QueryLexer.lexText } } lunr.QueryLexer.lexEditDistance = function (lexer) { lexer.ignore() lexer.acceptDigitRun() lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) return lunr.QueryLexer.lexText } lunr.QueryLexer.lexBoost = function (lexer) { lexer.ignore() lexer.acceptDigitRun() lexer.emit(lunr.QueryLexer.BOOST) return lunr.QueryLexer.lexText } lunr.QueryLexer.lexEOS = function (lexer) { if (lexer.width() > 0) { lexer.emit(lunr.QueryLexer.TERM) } } // This matches the separator used when tokenising fields // within a document. These should match otherwise it is // not possible to search for some tokens within a document. // // It is possible for the user to change the separator on the // tokenizer so it _might_ clash with any other of the special // characters already used within the search string, e.g. :. // // This means that it is possible to change the separator in // such a way that makes some words unsearchable using a search // string. lunr.QueryLexer.termSeparator = lunr.tokenizer.separator lunr.QueryLexer.lexText = function (lexer) { while (true) { var char = lexer.next() if (char == lunr.QueryLexer.EOS) { return lunr.QueryLexer.lexEOS } // Escape character is '\' if (char.charCodeAt(0) == 92) { lexer.escapeCharacter() continue } if (char == ":") { return lunr.QueryLexer.lexField } if (char == "~") { lexer.backup() if (lexer.width() > 0) { lexer.emit(lunr.QueryLexer.TERM) } return lunr.QueryLexer.lexEditDistance } if (char == "^") { lexer.backup() if (lexer.width() > 0) { lexer.emit(lunr.QueryLexer.TERM) } return lunr.QueryLexer.lexBoost } // "+" indicates term presence is required // checking for length to ensure that only // leading "+" are considered if (char == "+" && lexer.width() === 1) { lexer.emit(lunr.QueryLexer.PRESENCE) return lunr.QueryLexer.lexText } // "-" indicates term presence is prohibited // checking for length to ensure that only // leading "-" are considered if (char == "-" && lexer.width() === 1) { lexer.emit(lunr.QueryLexer.PRESENCE) return lunr.QueryLexer.lexText } if (char.match(lunr.QueryLexer.termSeparator)) { return lunr.QueryLexer.lexTerm } } } lunr.QueryParser = function (str, query) { this.lexer = new lunr.QueryLexer (str) this.query = query this.currentClause = {} this.lexemeIdx = 0 } lunr.QueryParser.prototype.parse = function () { this.lexer.run() this.lexemes = this.lexer.lexemes var state = lunr.QueryParser.parseClause while (state) { state = state(this) } return this.query } lunr.QueryParser.prototype.peekLexeme = function () { return this.lexemes[this.lexemeIdx] } lunr.QueryParser.prototype.consumeLexeme = function () { var lexeme = this.peekLexeme() this.lexemeIdx += 1 return lexeme } lunr.QueryParser.prototype.nextClause = function () { var completedClause = this.currentClause this.query.clause(completedClause) this.currentClause = {} } lunr.QueryParser.parseClause = function (parser) { var lexeme = parser.peekLexeme() if (lexeme == undefined) { return } switch (lexeme.type) { case lunr.QueryLexer.PRESENCE: return lunr.QueryParser.parsePresence case lunr.QueryLexer.FIELD: return lunr.QueryParser.parseField case lunr.QueryLexer.TERM: return lunr.QueryParser.parseTerm default: var errorMessage = "expected either a field or a term, found " + lexeme.type if (lexeme.str.length >= 1) { errorMessage += " with value '" + lexeme.str + "'" } throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } } lunr.QueryParser.parsePresence = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } switch (lexeme.str) { case "-": parser.currentClause.presence = lunr.Query.presence.PROHIBITED break case "+": parser.currentClause.presence = lunr.Query.presence.REQUIRED break default: var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { var errorMessage = "expecting term or field, found nothing" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } switch (nextLexeme.type) { case lunr.QueryLexer.FIELD: return lunr.QueryParser.parseField case lunr.QueryLexer.TERM: return lunr.QueryParser.parseTerm default: var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseField = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } if (parser.query.allFields.indexOf(lexeme.str) == -1) { var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } parser.currentClause.fields = [lexeme.str] var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { var errorMessage = "expecting term, found nothing" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: return lunr.QueryParser.parseTerm default: var errorMessage = "expecting term, found '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseTerm = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } parser.currentClause.term = lexeme.str.toLowerCase() if (lexeme.str.indexOf("*") != -1) { parser.currentClause.usePipeline = false } var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { parser.nextClause() return } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: parser.nextClause() return lunr.QueryParser.parseTerm case lunr.QueryLexer.FIELD: parser.nextClause() return lunr.QueryParser.parseField case lunr.QueryLexer.EDIT_DISTANCE: return lunr.QueryParser.parseEditDistance case lunr.QueryLexer.BOOST: return lunr.QueryParser.parseBoost case lunr.QueryLexer.PRESENCE: parser.nextClause() return lunr.QueryParser.parsePresence default: var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseEditDistance = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } var editDistance = parseInt(lexeme.str, 10) if (isNaN(editDistance)) { var errorMessage = "edit distance must be numeric" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } parser.currentClause.editDistance = editDistance var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { parser.nextClause() return } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: parser.nextClause() return lunr.QueryParser.parseTerm case lunr.QueryLexer.FIELD: parser.nextClause() return lunr.QueryParser.parseField case lunr.QueryLexer.EDIT_DISTANCE: return lunr.QueryParser.parseEditDistance case lunr.QueryLexer.BOOST: return lunr.QueryParser.parseBoost case lunr.QueryLexer.PRESENCE: parser.nextClause() return lunr.QueryParser.parsePresence default: var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseBoost = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } var boost = parseInt(lexeme.str, 10) if (isNaN(boost)) { var errorMessage = "boost must be numeric" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } parser.currentClause.boost = boost var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { parser.nextClause() return } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: parser.nextClause() return lunr.QueryParser.parseTerm case lunr.QueryLexer.FIELD: parser.nextClause() return lunr.QueryParser.parseField case lunr.QueryLexer.EDIT_DISTANCE: return lunr.QueryParser.parseEditDistance case lunr.QueryLexer.BOOST: return lunr.QueryParser.parseBoost case lunr.QueryLexer.PRESENCE: parser.nextClause() return lunr.QueryParser.parsePresence default: var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ;(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) root.lunr = factory() } }(this, function () { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return lunr })) })(); mkdocs-1.6.1/mkdocs/contrib/search/templates/search/main.js0000664000175000017500000000620614664334534023613 0ustar carstencarstenfunction getSearchTermFromLocation() { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == 'q') { return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); } } } function joinUrl (base, path) { if (path.substring(0, 1) === "/") { // path starts with `/`. Thus it is absolute. return path; } if (base.substring(base.length-1) === "/") { // base ends with `/` return base + path; } return base + "/" + path; } function escapeHtml (value) { return value.replace(/&/g, '&') .replace(/"/g, '"') .replace(//g, '>'); } function formatResult (location, title, summary) { return ''; } function displayResults (results) { var search_results = document.getElementById("mkdocs-search-results"); while (search_results.firstChild) { search_results.removeChild(search_results.firstChild); } if (results.length > 0){ for (var i=0; i < results.length; i++){ var result = results[i]; var html = formatResult(result.location, result.title, result.summary); search_results.insertAdjacentHTML('beforeend', html); } } else { var noResultsText = search_results.getAttribute('data-no-results-text'); if (!noResultsText) { noResultsText = "No results found"; } search_results.insertAdjacentHTML('beforeend', '

    ' + noResultsText + '

    '); } } function doSearch () { var query = document.getElementById('mkdocs-search-query').value; if (query.length > min_search_length) { if (!window.Worker) { displayResults(search(query)); } else { searchWorker.postMessage({query: query}); } } else { // Clear results for short queries displayResults([]); } } function initSearch () { var search_input = document.getElementById('mkdocs-search-query'); if (search_input) { search_input.addEventListener("keyup", doSearch); } var term = getSearchTermFromLocation(); if (term) { search_input.value = term; doSearch(); } } function onWorkerMessage (e) { if (e.data.allowSearch) { initSearch(); } else if (e.data.results) { var results = e.data.results; displayResults(results); } else if (e.data.config) { min_search_length = e.data.config.min_search_length-1; } } if (!window.Worker) { console.log('Web Worker API not supported'); // load index in main thread $.getScript(joinUrl(base_url, "search/worker.js")).done(function () { console.log('Loaded worker'); init(); window.postMessage = function (msg) { onWorkerMessage({data: msg}); }; }).fail(function (jqxhr, settings, exception) { console.error('Could not load worker.js'); }); } else { // Wrap search in a web worker var searchWorker = new Worker(joinUrl(base_url, "search/worker.js")); searchWorker.postMessage({init: true}); searchWorker.onmessage = onWorkerMessage; } mkdocs-1.6.1/mkdocs/contrib/search/prebuild-index.js0000664000175000017500000000273014664334534022335 0ustar carstencarstenvar lunr = require('./templates/search/lunr'), stdin = process.stdin, stdout = process.stdout, buffer = []; stdin.resume(); stdin.setEncoding('utf8'); stdin.on('data', function (data) { buffer.push(data); }); stdin.on('end', function () { var data = JSON.parse(buffer.join('')), lang = ['en']; if (data.config) { if (data.config.lang && data.config.lang.length) { lang = data.config.lang; if (lang.length > 1 || lang[0] !== "en") { require('./lunr-language/lunr.stemmer.support')(lunr); if (lang.length > 1) { require('./lunr-language/lunr.multi')(lunr); } if (lang.includes("ja") || lang.includes("jp")) { require('./lunr-language/tinyseg')(lunr); } for (var i=0; i < lang.length; i++) { if (lang[i] != 'en') { require('./lunr-language/lunr.' + lang[i])(lunr); } } } } if (data.config.separator && data.config.separator.length) { lunr.tokenizer.separator = new RegExp(data.config.separator); } } var idx = lunr(function () { if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { this.use(lunr[lang[0]]); } else if (lang.length > 1) { this.use(lunr.multiLanguage.apply(null, lang)); } this.field('title'); this.field('text'); this.ref('location'); data.docs.forEach(function (doc) { this.add(doc); }, this); }); stdout.write(JSON.stringify(idx)); }); mkdocs-1.6.1/mkdocs/templates/0000775000175000017500000000000014664334534016153 5ustar carstencarstenmkdocs-1.6.1/mkdocs/templates/sitemap.xml0000664000175000017500000000076314664334534020345 0ustar carstencarsten {%- for file in pages -%} {% if not file.page.is_link and (file.page.abs_url or file.page.canonical_url) %} {% if file.page.canonical_url %}{{ file.page.canonical_url|e }}{% else %}{{ file.page.abs_url|e }}{% endif %} {% if file.page.update_date %}{{file.page.update_date}}{% endif %} {%- endif -%} {% endfor %} mkdocs-1.6.1/README.md0000664000175000017500000000611414664334534014156 0ustar carstencarsten# MkDocs > *Project documentation with Markdown* [![PyPI Version][pypi-v-image]][pypi-v-link] [![Build Status][GHAction-image]][GHAction-link] [![Coverage Status][codecov-image]][codecov-link] MkDocs is a **fast**, **simple** and **downright gorgeous** static site generator that's geared towards building project documentation. Documentation source files are written in Markdown, and configured with a single YAML configuration file. It is designed to be easy to use and can be extended with third-party themes, plugins, and Markdown extensions. Please see the [Documentation][mkdocs] for an introductory tutorial and a full user guide. ## Features - Build static HTML files from Markdown files. - Use Plugins and Markdown Extensions to enhance MkDocs. - Use the built-in themes, third party themes or create your own. - Publish your documentation anywhere that static files can be served. - Much more! ## Support If you need help with MkDocs, do not hesitate to get in contact with us! - For questions and high-level discussions, use **[Discussions]** on GitHub. - For small questions, a good alternative is the **[Chat room]** on Gitter/Matrix. - To report a bug or make a feature request, open an **[Issue]** on GitHub. Please note that we may only provide support for problems/questions regarding core features of MkDocs. Any questions or bug reports about features of third-party themes, plugins, extensions or similar should be made to their respective projects. But, such questions are *not* banned from the [chat room]. Make sure to stick around to answer some questions as well! ## Links - [Official Documentation][mkdocs] - [Latest Release Notes][release-notes] - [Catalog of third-party plugins, themes and recipes][catalog] ## Contributing to MkDocs The MkDocs project welcomes, and depends on, contributions from developers and users in the open source community. Please see the [Contributing Guide] for information on how you can help. ## Code of Conduct Everyone interacting in the MkDocs project's codebases, issue trackers, and discussion forums is expected to follow the [PyPA Code of Conduct]. [codecov-image]: https://codecov.io/github/mkdocs/mkdocs/coverage.svg?branch=master [codecov-link]: https://codecov.io/github/mkdocs/mkdocs?branch=master [pypi-v-image]: https://img.shields.io/pypi/v/mkdocs.svg [pypi-v-link]: https://pypi.org/project/mkdocs/ [GHAction-image]: https://github.com/mkdocs/mkdocs/workflows/CI/badge.svg?branch=master&event=push [GHAction-link]: https://github.com/mkdocs/mkdocs/actions?query=event%3Apush+branch%3Amaster [mkdocs]: https://www.mkdocs.org [Issue]: https://github.com/mkdocs/mkdocs/issues [Discussions]: https://github.com/mkdocs/mkdocs/discussions [Chat room]: https://gitter.im/mkdocs/community [release-notes]: https://www.mkdocs.org/about/release-notes/ [Contributing Guide]: https://www.mkdocs.org/about/contributing/ [PyPA Code of Conduct]: https://www.pypa.io/en/latest/code-of-conduct/ [catalog]: https://github.com/mkdocs/catalog ## License [BSD-2-Clause](https://github.com/mkdocs/mkdocs/blob/master/LICENSE) mkdocs-1.6.1/requirements/0000775000175000017500000000000014664334534015420 5ustar carstencarstenmkdocs-1.6.1/requirements/requirements-style.txt0000664000175000017500000000061314664334534022042 0ustar carstencarsten# # This file is autogenerated by hatch-pip-compile with Python 3.11 # # - black # - isort # - ruff # black==23.12.1 # via hatch.envs.style click==8.1.7 # via black isort==5.13.2 # via hatch.envs.style mypy-extensions==1.0.0 # via black packaging==23.2 # via black pathspec==0.12.1 # via black platformdirs==4.1.0 # via black ruff==0.1.14 # via hatch.envs.style mkdocs-1.6.1/requirements/requirements-docs.txt0000664000175000017500000000513614664334534021637 0ustar carstencarsten# # This file is autogenerated by hatch-pip-compile with Python 3.11 # # - markdown-callouts # - mdx-gh-links # - mkdocs # - mkdocs-autorefs # - mkdocs-click # - mkdocs-literate-nav # - mkdocs-redirects # - mkdocstrings # - mkdocstrings-python # - pymdown-extensions # - click>=7.0 # - colorama>=0.4; platform_system == "Windows" # - ghp-import>=1.0 # - importlib-metadata>=4.4; python_version < "3.10" # - jinja2>=2.11.1 # - markdown>=3.3.6 # - markupsafe>=2.0.1 # - mergedeep>=1.3.4 # - mkdocs-get-deps>=0.2.0 # - packaging>=20.5 # - pathspec>=0.11.1 # - pyyaml-env-tag>=0.1 # - pyyaml>=5.1 # - watchdog>=2.0 # click==8.1.7 # via # hatch.envs.docs # mkdocs # mkdocs-click # mkdocstrings colorama==0.4.6 # via griffe ghp-import==2.1.0 # via # hatch.envs.docs # mkdocs griffe==0.38.0 # via mkdocstrings-python jinja2==3.1.2 # via # hatch.envs.docs # mkdocs # mkdocstrings markdown==3.5.1 # via # hatch.envs.docs # markdown-callouts # mdx-gh-links # mkdocs # mkdocs-autorefs # mkdocs-click # mkdocstrings # pymdown-extensions markdown-callouts==0.3.0 # via hatch.envs.docs markupsafe==2.1.3 # via # hatch.envs.docs # jinja2 # mkdocs # mkdocstrings mdx-gh-links==0.3.1 # via hatch.envs.docs mergedeep==1.3.4 # via # hatch.envs.docs # mkdocs # mkdocs-get-deps mkdocs==1.5.3 # via # hatch.envs.docs # mkdocs-autorefs # mkdocs-literate-nav # mkdocs-redirects # mkdocstrings mkdocs-autorefs==0.5.0 # via # hatch.envs.docs # mkdocstrings mkdocs-click==0.8.1 # via hatch.envs.docs mkdocs-get-deps==0.2.0 # via hatch.envs.docs mkdocs-literate-nav==0.6.1 # via hatch.envs.docs mkdocs-redirects==1.2.1 # via hatch.envs.docs mkdocstrings==0.24.0 # via # hatch.envs.docs # mkdocstrings-python mkdocstrings-python==1.7.5 # via hatch.envs.docs packaging==23.2 # via # hatch.envs.docs # mkdocs pathspec==0.11.2 # via # hatch.envs.docs # mkdocs platformdirs==4.0.0 # via # mkdocs # mkdocs-get-deps # mkdocstrings pymdown-extensions==10.4 # via # hatch.envs.docs # mkdocstrings python-dateutil==2.8.2 # via ghp-import pyyaml==6.0.1 # via # hatch.envs.docs # mkdocs # mkdocs-get-deps # pymdown-extensions # pyyaml-env-tag pyyaml-env-tag==0.1 # via # hatch.envs.docs # mkdocs six==1.16.0 # via python-dateutil watchdog==3.0.0 # via # hatch.envs.docs # mkdocs mkdocs-1.6.1/.gitignore0000664000175000017500000000150114664334534014662 0ustar carstencarsten# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ node_modules/ parts/ sdist/ var/ package*.json *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ # Translations *.mo # Scrapy stuff: .scrapy # PyBuilder target/ # IPython Notebook .ipynb_checkpoints # pyenv .python-version # virtualenv venv/ ENV/ # MkDocs documentation site*/ mkdocs-1.6.1/hatch_build.py0000664000175000017500000000070714664334534015521 0ustar carstencarstenimport os from hatchling.builders.hooks.plugin.interface import BuildHookInterface class CustomBuildHook(BuildHookInterface): def initialize(self, version, build_data): from babel.messages.frontend import compile_catalog for theme in 'mkdocs', 'readthedocs': cmd = compile_catalog() cmd.directory = os.path.join('mkdocs', 'themes', theme, 'locales') cmd.finalize_options() cmd.run() mkdocs-1.6.1/FUNDING.yml0000664000175000017500000000001714664334534014510 0ustar carstencarstengithub: mkdocs mkdocs-1.6.1/.editorconfig0000664000175000017500000000032714664334534015354 0ustar carstencarsten# editorconfig.org root = true [*] charset = utf-8 indent_size = 4 indent_style = space insert_final_newline = true trim_trailing_whitespace = true [*.js] indent_size = 2 [*.md] trim_trailing_whitespace = false mkdocs-1.6.1/setup.py0000664000175000017500000000042114664334534014404 0ustar carstencarsten"""Installation using setup.py is no longer supported. Use `python -m pip install .` instead.""" import sys from setuptools import setup sys.exit(__doc__) # Fake reference so GitHub still considers it a real package for statistics purposes. setup( name="mkdocs", ) mkdocs-1.6.1/pyproject.toml0000664000175000017500000001501514664334534015613 0ustar carstencarsten[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "mkdocs" description = "Project documentation with Markdown." readme = "README.md" license = "BSD-2-Clause" authors = [ {name = "Tom Christie", email = "tom@tomchristie.com"}, ] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "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 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Documentation", "Topic :: Text Processing", ] dynamic = ["version"] requires-python = ">=3.8" dependencies = [ "click >=7.0", "Jinja2 >=2.11.1", "markupsafe >=2.0.1", "Markdown >=3.3.6", "PyYAML >=5.1", "watchdog >=2.0", "ghp-import >=1.0", "pyyaml_env_tag >=0.1", "importlib-metadata >=4.4; python_version < '3.10'", "packaging >=20.5", "mergedeep >=1.3.4", "pathspec >=0.11.1", "mkdocs-get-deps >=0.2.0", "colorama >=0.4; platform_system == 'Windows'", ] [project.optional-dependencies] i18n = [ "babel >=2.9.0", ] min-versions = [ "click ==7.0", "Jinja2 ==2.11.1", "markupsafe ==2.0.1", "Markdown ==3.3.6", "PyYAML ==5.1", "watchdog ==2.0", "ghp-import ==1.0", "pyyaml_env_tag ==0.1", "importlib-metadata ==4.4; python_version < '3.10'", "packaging ==20.5", "mergedeep ==1.3.4", "pathspec ==0.11.1", "mkdocs-get-deps ==0.2.0", "colorama ==0.4; platform_system == 'Windows'", "babel ==2.9.0", ] [project.urls] Documentation = "https://www.mkdocs.org/" Source = "https://github.com/mkdocs/mkdocs" Issues = "https://github.com/mkdocs/mkdocs/issues" History = "https://www.mkdocs.org/about/release-notes/" [project.scripts] mkdocs = "mkdocs.__main__:cli" [project.entry-points."mkdocs.themes"] mkdocs = "mkdocs.themes.mkdocs" readthedocs = "mkdocs.themes.readthedocs" [project.entry-points."mkdocs.plugins"] search = "mkdocs.contrib.search:SearchPlugin" [tool.hatch.version] path = "mkdocs/__init__.py" [tool.hatch.build] artifacts = ["/mkdocs/**/*.mo"] [tool.hatch.build.targets.sdist] include = ["/mkdocs"] [tool.hatch.build.targets.wheel] exclude = ["/mkdocs/tests", "*.po", "*.pot", "babel.cfg"] [tool.hatch.build.hooks.custom] dependencies = [ "babel", "setuptools; python_version >= '3.12'", ] [tool.hatch.env] requires = ["hatch-mkdocs", "hatch-pip-compile"] [tool.hatch.envs.default.scripts] all = [ "hatch run style:fix", "hatch run types:check", "hatch run test:test", "hatch run lint:check", "hatch run +type=default integration:test", ] [tool.hatch.envs.test] features = ["i18n"] dependencies = [ "coverage", ] [tool.hatch.envs.test.scripts] test = 'python -m unittest discover -s mkdocs -p "*tests.py"' _coverage = [ 'coverage run --source=mkdocs --omit "mkdocs/tests/*" -m unittest discover -s mkdocs -p "*tests.py"', "coverage xml", "coverage report --show-missing" ] with-coverage = "test" [[tool.hatch.envs.test.matrix]] python = ["3.8", "3.9", "3.10", "3.11", "3.12", "pypy3"] type = ["default", "min-req"] [tool.hatch.envs.test.overrides] matrix.type.features = [ { value = "min-versions", if = ["min-req"] }, ] matrix.type.scripts = [ { key = "with-coverage", value = "_coverage", if = ["default"] }, ] [tool.hatch.env.collectors.mkdocs.integration] path = "mkdocs.yml" [tool.hatch.envs.integration] detached = false [tool.hatch.envs.integration.scripts] test = "python -m mkdocs.tests.integration" [[tool.hatch.envs.integration.matrix]] python = ["3.8", "3.9", "3.10", "3.11", "3.12", "pypy3"] type = ["default", "no-babel"] [tool.hatch.envs.integration.overrides] matrix.type.features = [ { value = "i18n", if = ["default"] }, ] [tool.hatch.envs.types] dependencies = [ "mypy", "babel", "types-Markdown", "types-pytz", "types-PyYAML", "types-setuptools", "typing-extensions", ] [tool.hatch.envs.types.scripts] check = "mypy mkdocs" [tool.hatch.envs.style] type = "pip-compile" detached = true dependencies = [ "black", "isort", "ruff", ] [tool.hatch.envs.style.scripts] check = [ "isort --check-only --diff mkdocs docs", "black -q --check --diff mkdocs docs", "lint", ] lint = [ "ruff check mkdocs docs {args}" ] fix = [ "lint --fix", "format", ] format = [ "isort -q mkdocs docs", "black -q mkdocs docs", ] [tool.hatch.envs.lint] detached = true dependencies = [ "codespell==2.2.6", ] [tool.hatch.envs.lint.scripts] spelling = 'codespell mkdocs docs *.* -S LC_MESSAGES -S "*.min.js" -S "lunr*.js" -S fontawesome-webfont.svg -S tinyseg.js -S "*.map"' markdown = "npm exec --yes -- markdownlint-cli README.md CONTRIBUTING.md docs/ --ignore docs/CNAME" js = "npm exec --yes -- jshint mkdocs/" check = ["markdown", "js", "css", "spelling"] [tool.hatch.env.collectors.mkdocs.docs] path = "mkdocs.yml" [tool.hatch.envs.docs] type = "pip-compile" detached = false [tool.black] line-length = 100 skip-string-normalization = true [tool.isort] profile = "black" line_length = 100 [tool.ruff] select = [ "F", "W", "E", "UP", "YTT", "C4", "DTZ", "FA", "ISC", "PIE", "T20", "RSE", "TCH", "B002", "B003", "B005", "B007", "B009", "B012", "B013", "B014", "B015", "B018", "B020", "B021", "B023", "B026", "B033", "B034", "B905", "COM818", "D200", "D201", "D202", "D204", "D207", "D208", "D209", "D210", "D211", "D213", "D214", "D300", "D301", "D400", "D402", "D403", "D405", "D412", "D414", "D415", "D416", "D417", "D419", "PERF101", "PGH002", "PGH004", "PGH005", "FLY002", "PLC", "PLE", "PLR0124", "PLR0133", "PLR0206", "PLR0402", "PLR1701", "PLR1722", "PLW0120", "PLW0127", "PLW0129", "PLW0131", "PLW0406", "PLW0602", "PLW0603", "PLW0711", "RUF001", "RUF005", "RUF007", "RUF010", "RUF013", "RUF100", "RUF200", "SIM101", "SIM107", "SIM201", "SIM202", "SIM208", "SIM210", "SIM211", "SIM300", "SIM401", "SIM910", ] ignore = ["E501", "E731"] [tool.ruff.flake8-comprehensions] allow-dict-calls-with-keyword-arguments = true [tool.mypy] warn_unreachable = true no_implicit_optional = true show_error_codes = true