pax_global_header00006660000000000000000000000064141670530520014515gustar00rootroot0000000000000052 comment=1795ed15031dc742a09b95c3ee55ac52d66fa796 drf-yasg-1.20.1/000077500000000000000000000000001416705305200133125ustar00rootroot00000000000000drf-yasg-1.20.1/.codecov.yml000066400000000000000000000007151416705305200155400ustar00rootroot00000000000000codecov: branch: master coverage: precision: 2 round: down range: 60...100 status: project: default: enabled: yes target: auto threshold: 100% if_no_uploads: error if_ci_failed: error patch: default: enabled: yes target: 100% threshold: 100% if_no_uploads: error if_ci_failed: error changes: default: enabled: no comment: false drf-yasg-1.20.1/.coveragerc000066400000000000000000000020111416705305200154250ustar00rootroot00000000000000[run] source = drf_yasg branch = True parallel = true disable_warnings = module-not-measured [report] # Regexes for lines to exclude from consideration exclude_lines = # Have to re-enable the standard pragma pragma: no cover # Don't complain about missing debug-only code: def __repr__ if self/.debug # Don't complain if tests don't hit defensive assertion code: raise AssertionError raise ImproperlyConfigured raise TypeError raise NotImplementedError warnings.warn logger.debug logger.info logger.warning logger.error return NotHandled # Don't complain if non-runnable code isn't run: if 0: if __name__ == .__main__.: # Don't complain if we don't hit invalid schema configurations raise SwaggerGenerationError ignore_errors = True precision = 2 show_missing = True [paths] source = src/drf_yasg/ .tox/*/Lib/site-packages/drf_yasg/ .tox/*/lib/*/site-packages/drf_yasg/ /home/travis/virtualenv/*/lib/*/site-packages/drf_yasg/ drf-yasg-1.20.1/.editorconfig000066400000000000000000000005471416705305200157750ustar00rootroot00000000000000root = true [*] end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true charset = utf-8 [*.py] indent_style = space indent_size = 4 [*.rst] indent_style = space indent_size = 3 [{package.json,package-lock.json}] indent_style = space indent_size = 2 [*.{yml,yaml}] indent_style = space indent_size = 2 [Makefile] indent_style = tab drf-yasg-1.20.1/.gitattributes000066400000000000000000000000351416705305200162030ustar00rootroot00000000000000* text=auto *.sh text eol=lf drf-yasg-1.20.1/.github/000077500000000000000000000000001416705305200146525ustar00rootroot00000000000000drf-yasg-1.20.1/.github/ISSUE_TEMPLATE/000077500000000000000000000000001416705305200170355ustar00rootroot00000000000000drf-yasg-1.20.1/.github/ISSUE_TEMPLATE/bug.md000066400000000000000000000010201416705305200201250ustar00rootroot00000000000000--- name: 'Bug Report' about: Report a bug --- # Bug Report ## Description A clear and concise description of the problem... ## Is this a regression? Yes, the previous version in which this bug was not present was: ... ## Minimal Reproduction ```code ``` ## Stack trace / Error message ```code ``` ## Your Environment ```code ``` drf-yasg-1.20.1/.github/ISSUE_TEMPLATE/feature.md000066400000000000000000000006271416705305200210170ustar00rootroot00000000000000--- name: 'Feature Request' about: Suggest a feature --- # Feature Request ## Description A clear and concise description of the problem or missing capability... ## Describe the solution you'd like If you have a solution in mind, please describe it. ## Describe alternatives you've considered Have you considered any alternative solutions or workarounds? drf-yasg-1.20.1/.github/PULL_REQUEST_TEMPLATE/000077500000000000000000000000001416705305200201315ustar00rootroot00000000000000drf-yasg-1.20.1/.github/PULL_REQUEST_TEMPLATE/general.md000066400000000000000000000012461416705305200220730ustar00rootroot00000000000000# PR Checklist Please check if your PR fulfills the following requirements: - [ ] The commit message follows our contributing guidelines - [ ] Tests for the changes have been added (for bug fixes / features) - [ ] Docs have been added / updated (for bug fixes / features) ## PR Type What kind of change does this PR introduce? - [ ] Bugfix - [ ] Feature - [ ] Code style update - [ ] Refactoring (no functional changes) - [ ] Build related changes - [ ] CI related changes - [ ] Documentation content changes - [ ] Other ## What is the current behavior? ## What is the new behavior? ## Does this PR introduce a breaking change? - [ ] Yes - [ ] No ## Other information drf-yasg-1.20.1/.github/workflows/000077500000000000000000000000001416705305200167075ustar00rootroot00000000000000drf-yasg-1.20.1/.github/workflows/publish.yml000066400000000000000000000017161416705305200211050ustar00rootroot00000000000000name: Publish on: push: tags: - "v*.*.*" jobs: publish: name: Publish the package on pypi runs-on: ubuntu-latest steps: - name: Checkout the source code uses: actions/checkout@v2 - name: Set the python version uses: actions/setup-python@v2 # This is the version of python used to package the code. The unit # tests will have run against python 3.6, 3.7 etc ensuring # compatibility with those runtimes. # https://github.com/axnsan12/drf-yasg/pull/741#discussion_r713297594 with: python-version: 3.8 - name: Install pip dependencies run: pip install -r requirements/publish.txt - name: Build the distributions run: python setup.py sdist bdist_wheel - name: Publish the package uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} drf-yasg-1.20.1/.github/workflows/review.yml000066400000000000000000000014071416705305200207350ustar00rootroot00000000000000name: Review on: [push, pull_request] jobs: review: name: Run linters and tests runs-on: ubuntu-latest strategy: matrix: python: [3.6, 3.7, 3.8, 3.9] steps: - name: Set up pip package caching uses: actions/cache@v2 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} restore-keys: ${{ runner.os }}-pip- - name: Checkout the source code uses: actions/checkout@v2 - name: Set the python version uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - name: Install pip dependencies run: pip install -r requirements/ci.txt - name: Run unit tests run: tox drf-yasg-1.20.1/.gitignore000066400000000000000000000045321416705305200153060ustar00rootroot00000000000000.idea/ node_modules/ testproj/db.sqlite3 testproj/staticfiles \.pytest_cache/ docs/\.doctrees/ pip-wheel-metadata/ # Created by .ignore support plugin (hsz.mobi) ### Python template # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # 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 *.pot # Django stuff: *.log .static_storage/ .media/ local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ ### JetBrains template # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # User-specific stuff: .idea/**/workspace.xml .idea/**/tasks.xml .idea/dictionaries # Sensitive or high-churn files: .idea/**/dataSources/ .idea/**/dataSources.ids .idea/**/dataSources.xml .idea/**/dataSources.local.xml .idea/**/sqlDataSources.xml .idea/**/dynamic.xml .idea/**/uiDesigner.xml # Gradle: .idea/**/gradle.xml .idea/**/libraries # CMake cmake-build-debug/ # Mongo Explorer plugin: .idea/**/mongoSettings.xml ## File-based project format: *.iws ## Plugin-specific files: # IntelliJ out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Cursive Clojure plugin .idea/replstate.xml # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties drf-yasg-1.20.1/.readthedocs.yml000066400000000000000000000003701416705305200164000ustar00rootroot00000000000000version: 2 sphinx: configuration: docs/conf.py formats: - pdf build: image: latest python: version: 3.8 install: - requirements: requirements/docs.txt - method: pip path: . extra_requirements: - validation drf-yasg-1.20.1/CONTRIBUTING.rst000066400000000000000000000101411416705305200157500ustar00rootroot00000000000000.. |br| raw:: html
############ Contributing ############ Contributions are always welcome and appreciated! Here are some ways you can contribute. ****** Issues ****** You can and should open an issue for any of the following reasons: * you found a bug; steps for reproducing, or a pull request with a failing test case will be greatly appreciated * you wanted to do something but did not find a way to do it after reading the documentation * you believe the current way of doing something is more complicated or less elegant than it can be * a related feature that you want is missing from the package Please always check for existing issues before opening a new issue. ************* Pull requests ************* You want to contribute some code? Great! Here are a few steps to get you started: #. **Fork the repository on GitHub** #. **Clone your fork and create a branch for the code you want to add** #. **Create a new virtualenv and install the package in development mode** .. code:: console $ python -m venv venv $ source venv/bin/activate (venv) $ python -m pip install -U pip setuptools (venv) $ pip install -U -e .[validation] (venv) $ pip install -U -r requirements/dev.txt #. **Make your changes and check them against the test project** .. code:: console (venv) $ cd testproj (venv) $ python manage.py migrate (venv) $ python manage.py runserver (venv) $ firefox localhost:8000/swagger/ #. **Update the tests if necessary** You can find them in the ``tests`` directory. If your change modifies the expected schema output, you should regenerate the reference schema at ``tests/reference.yaml``: .. code:: console (venv) $ python testproj/manage.py generate_swagger tests/reference.yaml --overwrite --user admin --url http://test.local:8002/ After checking the git diff to verify that no unexpected changes appeared, you should commit the new ``reference.yaml`` together with your changes. #. **Run tests. The project is setup to use tox and pytest for testing** .. code:: console # install test dependencies (venv) $ pip install -U -r requirements/test.txt # run tests in the current environment, faster than tox (venv) $ pytest -n auto --cov # (optional) sort imports with isort and check flake8 linting (venv) $ isort --apply (venv) $ flake8 src/drf_yasg testproj tests setup.py # (optional) run tests for other python versions in separate environments (venv) $ tox #. **Update documentation** If the change modifies behaviour or adds new features, you should update the documentation and ``README.rst`` accordingly. Documentation is written in reStructuredText and built using Sphinx. You can find the sources in the ``docs`` directory. To build and check the docs, run .. code:: console (venv) $ tox -e docs #. **Push your branch and submit a pull request to the master branch on GitHub** Incomplete/Work In Progress pull requests are encouraged, because they allow you to get feedback and help more easily. #. **Your code must pass all the required CI jobs before it is merged** As of now, this consists of running on the supported Python, Django, DRF version matrix (see README), and building the docs succesfully. ****************** Maintainer's notes ****************** Release checklist ================= * update ``docs/changelog.rst`` with changes since the last tagged version * commit & tag the release - ``git tag x.x.x -m "Release version x.x.x"`` * push using ``git push --follow-tags`` * verify that `Actions`_ has built the tag and successfully published the release to `PyPI`_ * publish release notes `on GitHub`_ * start the `ReadTheDocs build`_ if it has not already started * deploy the live demo `on Heroku`_ .. _Actions: https://github.com/axnsan12/drf-yasg/actions .. _PyPI: https://pypi.org/project/drf-yasg/ .. _on GitHub: https://github.com/axnsan12/drf-yasg/releases .. _ReadTheDocs build: https://readthedocs.org/projects/drf-yasg/builds/ .. _on Heroku: https://dashboard.heroku.com/pipelines/412d1cae-6a95-4f5e-810b-94869133f36a drf-yasg-1.20.1/LICENSE.rst000066400000000000000000000031471416705305200151330ustar00rootroot00000000000000.. |br| raw:: html
####### License ####### ******************** BSD 3-Clause License ******************** Copyright (c) 2017 - 2019, Cristian V. |br|\ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. drf-yasg-1.20.1/MANIFEST.in000066400000000000000000000002621416705305200150500ustar00rootroot00000000000000include README.rst include LICENSE.rst include pyproject.toml recursive-include requirements * recursive-include src/drf_yasg/static * recursive-include src/drf_yasg/templates * drf-yasg-1.20.1/Procfile000066400000000000000000000001451416705305200150000ustar00rootroot00000000000000release: python testproj/manage.py migrate web: gunicorn --chdir testproj testproj.wsgi --log-file - drf-yasg-1.20.1/README.rst000066400000000000000000000314401416705305200150030ustar00rootroot00000000000000.. role:: python(code) :language: python ######################################## drf-yasg - Yet another Swagger generator ######################################## |actions| |nbsp| |codecov| |nbsp| |rtd-badge| |nbsp| |pypi-version| Generate **real** Swagger/OpenAPI 2.0 specifications from a Django Rest Framework API. Compatible with - **Django Rest Framework**: 3.10, 3.11, 3.12 - **Django**: 2.2, 3.0, 3.1 - **Python**: 3.6, 3.7, 3.8, 3.9 Only the latest patch version of each ``major.minor`` series of Python, Django and Django REST Framework is supported. **Only the latest version of drf-yasg is supported.** Support of old versions is dropped immediately with the release of a new version. Please do not create issues before upgrading to the latest release available at the time. Regression reports are accepted and will be resolved with a new release as quickly as possible. Removed features will usually go through a deprecation cycle of a few minor releases. Resources: * **Source**: https://github.com/axnsan12/drf-yasg/ * **Documentation**: https://drf-yasg.readthedocs.io/ * **Changelog**: https://drf-yasg.readthedocs.io/en/stable/changelog.html * **Live demo**: https://drf-yasg-demo.herokuapp.com/ |heroku-button| **************** OpenAPI 3.0 note **************** If you are looking to add Swagger/OpenAPI support to a new project you might want to take a look at `drf-spectacular `_, which is an actively maintained new library that shares most of the goals of this project, while working with OpenAPI 3.0 schemas. OpenAPI 3.0 provides a lot more flexibility than 2.0 in the types of API that can be described. ``drf-yasg`` is unlikely to soon, if ever, get support for OpenAPI 3.0. ******** Features ******** - full support for nested Serializers and Schemas - response schemas and descriptions - model definitions compatible with codegen tools - customization hooks at all points in the spec generation process - JSON and YAML format for spec - bundles latest version of `swagger-ui `_ and `redoc `_ for viewing the generated documentation - schema view is cacheable out of the box - generated Swagger schema can be automatically validated by `swagger-spec-validator `_ - supports Django REST Framework API versioning with ``URLPathVersioning`` and ``NamespaceVersioning``; other DRF or custom versioning schemes are not currently supported .. figure:: https://raw.githubusercontent.com/axnsan12/drf-yasg/1.0.2/screenshots/redoc-nested-response.png :width: 100% :figwidth: image :alt: redoc screenshot **Fully nested request and response schemas.** .. figure:: https://raw.githubusercontent.com/axnsan12/drf-yasg/1.0.2/screenshots/swagger-ui-list.png :width: 100% :figwidth: image :alt: swagger-ui screenshot **Choose between redoc and swagger-ui.** .. figure:: https://raw.githubusercontent.com/axnsan12/drf-yasg/1.0.2/screenshots/swagger-ui-models.png :width: 100% :figwidth: image :alt: model definitions screenshot **Real Model definitions.** ***************** Table of contents ***************** .. contents:: :depth: 4 ***** Usage ***** 0. Installation =============== The preferred installation method is directly from pypi: .. code:: console pip install -U drf-yasg Additionally, if you want to use the built-in validation mechanisms (see `4. Validation`_), you need to install some extra requirements: .. code:: console pip install -U drf-yasg[validation] .. _readme-quickstart: 1. Quickstart ============= In ``settings.py``: .. code:: python INSTALLED_APPS = [ ... 'django.contrib.staticfiles', # required for serving swagger ui's css/js files 'drf_yasg', ... ] In ``urls.py``: .. code:: python ... from rest_framework import permissions from drf_yasg.views import get_schema_view from drf_yasg import openapi ... schema_view = get_schema_view( openapi.Info( title="Snippets API", default_version='v1', description="Test description", terms_of_service="https://www.google.com/policies/terms/", contact=openapi.Contact(email="contact@snippets.local"), license=openapi.License(name="BSD License"), ), public=True, permission_classes=[permissions.AllowAny], ) urlpatterns = [ re_path(r'^swagger(?P\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'), re_path(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), re_path(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), ... ] This exposes 4 endpoints: * A JSON view of your API specification at ``/swagger.json`` * A YAML view of your API specification at ``/swagger.yaml`` * A swagger-ui view of your API specification at ``/swagger/`` * A ReDoc view of your API specification at ``/redoc/`` 2. Configuration ================ --------------------------------- a. ``get_schema_view`` parameters --------------------------------- - ``info`` - Swagger API Info object; if omitted, defaults to ``DEFAULT_INFO`` - ``url`` - API base url; if left blank will be deduced from the location the view is served at - ``patterns`` - passed to SchemaGenerator - ``urlconf`` - passed to SchemaGenerator - ``public`` - if False, includes only endpoints the current user has access to - ``validators`` - a list of validator names to apply on the generated schema; only ``ssv`` is currently supported - ``generator_class`` - schema generator class to use; should be a subclass of ``OpenAPISchemaGenerator`` - ``authentication_classes`` - authentication classes for the schema view itself - ``permission_classes`` - permission classes for the schema view itself ------------------------------- b. ``SchemaView`` options ------------------------------- - :python:`SchemaView.with_ui(renderer, cache_timeout, cache_kwargs)` - get a view instance using the specified UI renderer; one of ``swagger``, ``redoc`` - :python:`SchemaView.without_ui(cache_timeout, cache_kwargs)` - get a view instance with no UI renderer; same as ``as_cached_view`` with no kwargs - :python:`SchemaView.as_cached_view(cache_timeout, cache_kwargs, **initkwargs)` - same as ``as_view``, but with optional caching - you can, of course, call :python:`as_view` as usual All of the first 3 methods take two optional arguments, ``cache_timeout`` and ``cache_kwargs``; if present, these are passed on to Django’s :python:`cached_page` decorator in order to enable caching on the resulting view. See `3. Caching`_. ---------------------------------------------- c. ``SWAGGER_SETTINGS`` and ``REDOC_SETTINGS`` ---------------------------------------------- Additionally, you can include some more settings in your ``settings.py`` file. See https://drf-yasg.readthedocs.io/en/stable/settings.html for details. 3. Caching ========== Since the schema does not usually change during the lifetime of the django process, there is out of the box support for caching the schema view in-memory, with some sane defaults: * caching is enabled by the `cache_page `__ decorator, using the default Django cache backend, can be changed using the ``cache_kwargs`` argument * HTTP caching of the response is blocked to avoid confusing situations caused by being shown stale schemas * the cached schema varies on the ``Cookie`` and ``Authorization`` HTTP headers to enable filtering of visible endpoints according to the authentication credentials of each user; note that this means that every user accessing the schema will have a separate schema cached in memory. 4. Validation ============= Given the numerous methods to manually customize the generated schema, it makes sense to validate the result to ensure it still conforms to OpenAPI 2.0. To this end, validation is provided at the generation point using python swagger libraries, and can be activated by passing :python:`validators=['ssv']` to ``get_schema_view``; if the generated schema is not valid, a :python:`SwaggerValidationError` is raised by the handling codec. **Warning:** This internal validation can slow down your server. Caching can mitigate the speed impact of validation. The provided validation will catch syntactic errors, but more subtle violations of the spec might slip by them. To ensure compatibility with code generation tools, it is recommended to also employ one or more of the following methods: ------------------------------- ``swagger-ui`` validation badge ------------------------------- Online ^^^^^^ If your schema is publicly accessible, `swagger-ui` will automatically validate it against the official swagger online validator and display the result in the bottom-right validation badge. Offline ^^^^^^^ If your schema is not accessible from the internet, you can run a local copy of `swagger-validator `_ and set the ``VALIDATOR_URL`` accordingly: .. code:: python SWAGGER_SETTINGS = { ... 'VALIDATOR_URL': 'http://localhost:8189', ... } .. code:: console $ docker run --name swagger-validator -d -p 8189:8080 --add-host test.local:10.0.75.1 swaggerapi/swagger-validator 84dabd52ba967c32ae6b660934fa6a429ca6bc9e594d56e822a858b57039c8a2 $ curl http://localhost:8189/debug?url=http://test.local:8002/swagger/?format=openapi {} --------------------- Using ``swagger-cli`` --------------------- https://www.npmjs.com/package/swagger-cli .. code:: console $ npm install -g swagger-cli [...] $ swagger-cli validate http://test.local:8002/swagger.yaml http://test.local:8002/swagger.yaml is valid -------------------------------------------------------------- Manually on `editor.swagger.io `__ -------------------------------------------------------------- Importing the generated spec into https://editor.swagger.io/ will automatically trigger validation on it. This method is currently the only way to get both syntactic and semantic validation on your specification. The other validators only provide JSON schema-level validation, but miss things like duplicate operation names, improper content types, etc 5. Code generation ================== You can use the specification outputted by this library together with `swagger-codegen `_ to generate client code in your language of choice: .. code:: console $ docker run --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli generate -i /local/tests/reference.yaml -l javascript -o /local/.codegen/js See the github page linked above for more details. .. _readme-testproj: 6. Example project ================== For additional usage examples, you can take a look at the test project in the ``testproj`` directory: .. code:: console $ git clone https://github.com/axnsan12/drf-yasg.git $ cd drf-yasg $ virtualenv venv $ source venv/bin/activate (venv) $ cd testproj (venv) $ python -m pip install -U pip setuptools (venv) $ pip install -U -r requirements.txt (venv) $ python manage.py migrate (venv) $ python manage.py runserver (venv) $ firefox localhost:8000/swagger/ ************************ Third-party integrations ************************ djangorestframework-camel-case =============================== Integration with `djangorestframework-camel-case `_ is provided out of the box - if you have ``djangorestframework-camel-case`` installed and your ``APIView`` uses ``CamelCaseJSONParser`` or ``CamelCaseJSONRenderer``, all property names will be converted to *camelCase* by default. djangorestframework-recursive =============================== Integration with `djangorestframework-recursive `_ is provided out of the box - if you have ``djangorestframework-recursive`` installed. .. |actions| image:: https://img.shields.io/github/workflow/status/axnsan12/drf-yasg/Review :target: https://github.com/axnsan12/drf-yasg/actions :alt: GitHub Workflow Status .. |codecov| image:: https://img.shields.io/codecov/c/github/axnsan12/drf-yasg/master.svg :target: https://codecov.io/gh/axnsan12/drf-yasg :alt: Codecov .. |pypi-version| image:: https://img.shields.io/pypi/v/drf-yasg.svg :target: https://pypi.org/project/drf-yasg/ :alt: PyPI .. |rtd-badge| image:: https://img.shields.io/readthedocs/drf-yasg.svg :target: https://drf-yasg.readthedocs.io/ :alt: ReadTheDocs .. |heroku-button| image:: https://www.herokucdn.com/deploy/button.svg :target: https://heroku.com/deploy?template=https://github.com/axnsan12/drf-yasg :alt: Heroku deploy button .. |nbsp| unicode:: 0xA0 :trim: drf-yasg-1.20.1/app.json000066400000000000000000000010101416705305200147550ustar00rootroot00000000000000{ "name": "drf-yasg Demo app", "description": "A demonstrative app using https://github.com/axnsan12/drf-yasg", "repository": "https://github.com/axnsan12/drf-yasg", "logo": "https://swaggerhub.com/wp-content/uploads/2017/10/Swagger-Icon.svg", "keywords": [ "django", "django-rest-framework", "swagger", "openapi" ], "env": { "DJANGO_SETTINGS_MODULE": "testproj.settings.heroku", "DJANGO_SECRET_KEY": "m76=^#=z7xv5^(o%4dv9w7+1_c)y2m6)1ogjx%s@9$1^nupry=" }, "success_url": "/" } drf-yasg-1.20.1/docs/000077500000000000000000000000001416705305200142425ustar00rootroot00000000000000drf-yasg-1.20.1/docs/Makefile000066400000000000000000000011361416705305200157030ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build SPHINXPROJ = drf-yasg SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) drf-yasg-1.20.1/docs/_static/000077500000000000000000000000001416705305200156705ustar00rootroot00000000000000drf-yasg-1.20.1/docs/_static/.gitignore000066400000000000000000000000441416705305200176560ustar00rootroot00000000000000# force directory to show up in git drf-yasg-1.20.1/docs/_static/css/000077500000000000000000000000001416705305200164605ustar00rootroot00000000000000drf-yasg-1.20.1/docs/_static/css/style.css000066400000000000000000000010061416705305200203270ustar00rootroot00000000000000.versionadded, .versionchanged, .deprecated { font-family: "Roboto", Corbel, Avenir, "Lucida Grande", "Lucida Sans", sans-serif; padding: 10px 13px; border: 1px solid rgb(137, 191, 4); border-radius: 4px; margin-bottom: 10px; } .versionmodified { font-weight: bold; display: block; } .versionadded p, .versionchanged p, .deprecated p, /*override fucking !important by being more specific */ .rst-content dl .versionadded p, .rst-content dl .versionchanged p { margin: 0 !important; } drf-yasg-1.20.1/docs/_templates/000077500000000000000000000000001416705305200163775ustar00rootroot00000000000000drf-yasg-1.20.1/docs/_templates/.gitignore000066400000000000000000000000441416705305200203650ustar00rootroot00000000000000# force directory to show up in git drf-yasg-1.20.1/docs/_templates/layout.html000066400000000000000000000002451416705305200206030ustar00rootroot00000000000000{% extends "!layout.html" %} {% block extrahead %} {% endblock %} drf-yasg-1.20.1/docs/changelog.rst000066400000000000000000000576111416705305200167350ustar00rootroot00000000000000######### Changelog ######### ********** **1.20.0** ********** *Release date: Oct 25, 2020* - **IMPROVED:** updated ``swagger-ui`` to version 3.36.0 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-rc.40 - **FIXED:** fixed compatibility with Django Rest Framework 3.12 - **FIXED:** fixed compatibility with Python 3.9 typing generics - **FIXED:** dropped support for obsolete ``django.conf.settings.LOGOUT_URL`` (:pr:`646`) | **Support was dropped for Python 2.7, DRF 3.8, DRF 3.9.** | **Requirements are now: Python>=3.6, Django>=2.2, DRF>=3.10** The 1.18 and 1.19 series was skipped to avoid confusion with the drf-yasg2 fork. I would also like to take this opportunity to extend my apologies to the community at large for the large gap in the maintenance of drf-yasg and the problems it has caused. ********** **1.17.1** ********** *Release date: Feb 17, 2020* - **FIXED:** fixed compatibility issue with CurrentUserDefault in Django Rest Framework 3.11 - **FIXED:** respect `USERNAME_FIELD` in `generate_swagger` command (:pr:`486`) **Support was dropped for Python 3.5, Django 2.0, Django 2.1, DRF 3.7** ********** **1.17.0** ********** *Release date: Oct 03, 2019* - **ADDED:** added `JSONFieldInspector` for `JSONField` support (:pr:`417`) - **IMPROVED:** updated ``swagger-ui`` to version 3.23.11 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-rc.14 (:issue:`398`) - **FIXED:** fixed a type hint support issue (:pr:`428`, :issue:`450`) - **FIXED:** fixed packaging issue caused by a missing requirement (:issue:`412`) ********** **1.16.1** ********** *Release date: Jul 16, 2019* - **IMPROVED:** better enum type detection for nested `ChoiceField`\ s (:pr:`400`) - **FIXED:** fixed DRF 3.10 compatibility (:pr:`408`, :issue:`410`, :issue:`411`) ********** **1.16.0** ********** *Release date: Jun 13, 2019* - **ADDED:** added `reference_resolver_class` attribute hook to `SwaggerAutoSchema` (:pr:`350`) - **ADDED:** added `operation_keys` attribute to `SwaggerAutoSchema`, along with `__init__` parameter (:pr:`355`) - **FIXED:** fixed potential crash on `issubclass` check without `isclass` check ********** **1.15.1** ********** *Release date: Jun 13, 2019* - **IMPROVED:** updated ``swagger-ui`` to version 3.22.3 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-rc.8-1 - **FIXED:** fixed an issue with inspection of typing hints on Python 2.7 (:issue:`363`) - **FIXED:** fixed an issue with inspection of typing hints on Python 3.7 (:issue:`371`) **Python 3.4 support has been dropped!** ********** **1.15.0** ********** *Release date: Apr 01, 2019* - **ADDED:** added ``is_list_view`` and ``has_list_response`` extension points to ``SwaggerAutoSchema`` (:issue:`331`) - **IMPROVED:** updated ``swagger-ui`` to version 3.22.0 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-rc.4 - **FIXED:** ``ListModelMixin`` will now always be treated as a list view (:issue:`306`) - **FIXED:** non-primtive values in field ``choices`` will now be handled properly (:issue:`340`) ********** **1.14.0** ********** *Release date: Mar 04, 2019* - **IMPROVED:** updated ``swagger-ui`` to version 3.21.0 - **FIXED:** implicit ``ref_name`` collisions will now throw an exception - **FIXED:** ``RecursiveField`` will now also work as a child of ``ListSerializer`` (:pr:`321`) - **FIXED:** fixed ``minLength`` and ``maxLength`` for ``ListSerializer`` and ``ListField`` - **FIXED:** the ``items`` property of ``Schema``, ``Parameter`` and ``Items`` objects was renamed to ``items_``; this is a *mildly breaking change* and was needed to fix the collision with the ``items`` method of ``dict`` (:pr:`308`) - **REMOVED:** the ``get_summary`` and ``get_description`` methods have been removed (previously deprecated in 1.12.0) ********** **1.13.0** ********** *Release date: Jan 29, 2019* - **IMPROVED:** type hint inspection is now supported for collections and ``Optional`` (:pr:`272`) - **IMPROVED:** updated ``swagger-ui`` to version 3.20.5 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-rc.2 - **DEPRECATED:** quietly dropped support for the ``flex`` validator; it will still work if the library is installed, but the setup.py requirement was removed and the validator will be silently skipped if not installed (:issue:`285`) ********** **1.12.1** ********** *Release date: Dec 28, 2018* - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-rc.0 - **FIXED:** management command will now correctly fall back to ``DEFAULT_VERSION`` for mock request - **FIXED:** fixed bad "raised exception during schema generation" warnings caused by missing ``self`` parameter ********** **1.12.0** ********** *Release date: Dec 23, 2018* - **ADDED:** ``get_security_definitions`` and ``get_security_requirements`` hooks to ``OpenAPISchemaGenerator`` - **ADDED:** added ``get_summary_and_description`` and ``split_summary_from_description`` extension points to ``SwaggerAutoSchema`` to allow for better customisation - **IMPROVED:** updated ``swagger-ui`` to version 3.20.4 - **IMPROVED:** paginator ``next`` and ``previous`` fields are now marked as ``x-nullable`` (:issue:`263`) - **IMPROVED:** added the ``tags`` argument to ``swagger_auto_schema`` (:pr:`259`) - **IMPROVED:** type of ``enum`` will now be automatically detected from ``ChoiceField`` if all ``choices`` values are objects of the same Python class (:pr:`264`) - **IMPROVED:** ``SwaggerValidationError`` details will now be logged and shown in the exception message - **FIXED:** user implementations of ``get_queryset``, ``get_parsers`` and ``get_renderers`` will no longer be bypassed - **FIXED:** fixed handling of lazy objects in user-supplied values - **FIXED:** ``read_only`` serializer fields will be correctly ignored when generating form parameters (:issue:`261`) - **FIXED:** fixed incorrect return type from ``UIRenderer`` (:pr:`268`) - **FIXED:** fixed incosistent ordering of global ``securityDefinitions`` and ``security`` objects - **DEPRECATED:** the ``get_summary`` and ``get_description`` extension points have been deprecated in favor of the new ``get_summary_and_description``, and will be removed in a future release **IMPORTANT PACKAGING NOTE** Starting with this version, the ``setup_requires`` argument was dropped from ``setup.py`` in favor of ``build-system.requires`` in ``pyproject.toml`` . This means that for correctly building or installing from sdist, you will need to use a PEP517/PEP518 compliant tool (tox>=3.3.0, setuptools>=40, pip>=10.0, pep517.build) or manually install the build requirements yourself (just ``setuptools`` and ``setuptools-scm``, for now). Additionally, for correct package version detection, a full git checkout is required when building (this was always the case). Building without ``.git`` or without ``setuptools-scm`` will result in a distribution with a version like ``drf-yasg-1!0.0.0.dev0+noscm.00000167d19bd859``. ********** **1.11.1** ********** *Release date: Nov 29, 2018* - **IMPROVED:** updated ``swagger-ui`` to version 3.20.1 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-alpha.41 - **FIXED:** ``minLength`` and ``maxLength`` will now also work for ``ListSerializer`` in addition to ``ListField`` - **FIXED:** ``MultipleChoiceField`` will now use the ``multi`` ``collectionFormat`` where appropriate (:issue:`257`) - **FIXED:** the ``format``, ``pattern``, ``enum``, ``min_length`` and ``max_length`` attributes of ``coreschema.Schema`` will now be persited into the converted ``openapi.Parameter`` (:issue:`212`, :pr:`233`) ********** **1.11.0** ********** *Release date: Oct 14, 2018* - **ADDED:** ``PERSIST_AUTH``, ``REFETCH_SCHEMA_WITH_AUTH``, ``REFETCH_SCHEMA_ON_LOGOUT`` settings and related javascript implementation for persisting authentication data to swagger-ui localStorage - **IMPROVED:** UI-enabled views will now no longer generate the full specification document twice; the HTML part of the view will only generate a barebones ``Swagger`` object with no ``paths`` and ``definitions`` - **IMPROVED:** added the ``FETCH_SCHEMA_WITH_QUERY`` setting to enable fetching of the schema document using query parameters passed to the UI view (:issue:`208`) - **IMPROVED:** added support for the very common ``x-nullable`` extension (:issue:`217`) - **IMPROVED:** extensibility of some classes was improved by adding more extension points, together with more blocks for ``swagger-ui.html``/``redoc.html`` and some JavaScript hooks in ``swagger-ui-init.js`` - **FIXED:** removed usage of ``inspect.signature`` on python 2.7 (:issue:`222`) ********** **1.10.2** ********** *Release date: Sep 13, 2018* - **ADDED:** added the ``DISPLAY_OPERATION_ID`` ``swagger-ui`` setting - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-alpha.38 - **IMPROVED:** Operation summary will now be parsed from multi-line view method docstrings (:issue:`205`) - **IMPROVED:** ``pattern`` will now work on any field with a ``RegexValidator`` (would previously not appear on fields with special formats such as ``EmailField``) - **FIXED:** fixed an issue with ``RelatedFieldInspector`` handling of nested serializers - **FIXED:** fixed handling of ``reverse_lazy`` in URL settings (:issue:`209`) ********** **1.10.1** ********** *Release date: Sep 10, 2018* - **ADDED:** added the ``SPEC_URL`` setting for controlling the download link in ``swagger-ui`` and ``ReDoc`` - **ADDED:** updated ``ReDoc`` settings (added ``NATIVE_SCROLLBARS`` and ``REQUIRED_PROPS_FIRST``) - **ADDED:** added ``extra_styles`` and ``extra_scripts`` blocks to ui templates (:issue:`178`) - **IMPROVED:** updated ``swagger-ui`` to version 3.18.2 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-alpha.37 - **FIXED:** stopped generating invalid OpenAPI by improper placement of ``readOnly`` Schemas - **FIXED:** fixed broken CSS when ``USE_SESSION_AUTH=False`` - **FIXED:** fixed implementation of ``operation_summary`` and ``deprecated`` (:pr:`194`, :pr:`198`) - **FIXED:** fixed a bug related to nested ``typing`` hints (:pr:`195`) - **FIXED:** removed dependency on ``future`` (:issue:`196`) - **FIXED:** fixed exceptions logged for fields with ``default=None`` (:issue:`203`) - **FIXED:** fixed ``request_body=no_body`` handling and related tests (:issue:`188`, :issue:`199`) ********** **1.10.0** ********** *Release date: Aug 08, 2018* - **ADDED:** added ``EXCLUDED_MEDIA_TYPES`` setting for controlling ``produces`` MIME type filtering (:issue:`158`) - **ADDED:** added support for ``SerializerMethodField``, via the ``swagger_serializer_method`` decorator for the method field, and support for Python 3.5 style type hinting of the method field return type (:issue:`137`, :pr:`175`, :pr:`179`) *NOTE:* in order for this to work, you will have to add the new ``drf_yasg.inspectors.SerializerMethodFieldInspector`` to your ``DEFAULT_FIELD_INSPECTORS`` array if you changed it from the default value - **IMPROVED:** updated ``swagger-ui`` to version 3.18.0 - **IMPROVED:** added support for Python 3.7 and Django 2.1 (:pr:`176`) - **IMPROVED:** ``swagger_schema_fields`` will now also work on serializer ``Field``\ s (:issue:`167`) - **IMPROVED:** ``ref_name`` collisions will now log a warning message (:issue:`156`) - **IMPROVED:** added ``operation_summary`` and ``deprecated`` arguments to ``swagger_auto_schema`` (:issue:`149`, :issue:`173`) - **FIXED:** made ``swagger_auto_schema`` work with DRF 3.9 ``@action`` mappings (:issue:`177`) ********* **1.9.2** ********* *Release date: Aug 03, 2018* - **IMPROVED:** updated ``swagger-ui`` to version 3.17.6 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-alpha.32 - **IMPROVED:** added ``--api-version`` argument to the ``generate_swagger`` management command (:pr:`170`) - **FIXED:** corrected various documentation typos (:pr:`160`, :pr:`162`, :issue:`171`, :pr:`172`) - **FIXED:** made ``generate_swagger`` work for projects without authentication (:pr:`161`) - **FIXED:** fixed ``SafeText`` interaction with YAML codec (:issue:`159`) ********* **1.9.1** ********* *Release date: Jun 30, 2018* - **IMPROVED:** added a ``swagger_fake_view`` marker to more easily detect mock views in view methods; ``getattr(self, 'swagger_fake_view', False)`` inside a view method like ``get_serializer_class`` will tell you if the view instance is being used for swagger schema introspection (:issue:`154`) - **IMPROVED:** updated ``swagger-ui`` to version 3.17.1 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-alpha.25 - **FIXED:** fixed wrong handling of duplicate urls in urlconf (:pr:`155`) - **FIXED:** fixed crash when passing ``None`` as a response override (:issue:`148`) ********* **1.9.0** ********* *Release date: Jun 16, 2018* - **ADDED:** added ``DEFAULT_GENERATOR_CLASS`` setting and ``--generator-class`` argument to the ``generate_swagger`` management command (:issue:`140`) - **FIXED:** fixed wrongly required ``'count'`` response field on ``CursorPagination`` (:issue:`141`) - **FIXED:** fixed some cases where ``swagger_schema_fields`` would not be handlded (:pr:`142`) - **FIXED:** fixed crash when encountering ``coreapi.Fields``\ s without a ``schema`` (:issue:`143`) ********* **1.8.0** ********* *Release date: Jun 01, 2018* - **ADDED:** added a :ref:`swagger_schema_fields ` field on serializer ``Meta`` classes for customizing schema generation (:issue:`132`, :pr:`134`) - **FIXED:** error responses from schema views are now rendered with ``JSONRenderer`` instead of throwing confusing errors (:pr:`130`, :issue:`58`) - **FIXED:** ``readOnly`` schema fields will now no longer be marked as ``required`` (:pr:`133`) ********* **1.7.4** ********* *Release date: May 14, 2018* - **IMPROVED:** updated ``swagger-ui`` to version 3.14.2 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-alpha.20 - **FIXED:** ignore ``None`` return from ``get_operation`` to avoid empty ``Path`` objects in output - **FIXED:** request body is now allowed on ``DELETE`` endpoints (:issue:`118`) ********* **1.7.3** ********* *Release date: May 12, 2018* - **FIXED:** views whose ``__init__`` methods throw exceptions will now be ignored during endpoint enumeration ********* **1.7.2** ********* *Release date: May 12, 2018* - **FIXED:** fixed generation of default ``SECURITY_REQUIREMENTS`` to match documented behaviour - **FIXED:** ordering of ``SECURITY_REQUIREMENTS`` and ``SECURITY_DEFINITIONS`` is now stable ********* **1.7.1** ********* *Release date: May 05, 2018* - **IMPROVED:** updated ``swagger-ui`` to version 3.14.1 - **IMPROVED:** set ``swagger-ui`` ``showCommonExtensions`` to ``True`` by default and add ``SHOW_COMMON_EXTENSIONS`` setting key - **IMPROVED:** set ``min_length=1`` when ``allow_blank=False`` (:pr:`112`, thanks to :ghuser:`elnappo`) - **FIXED:** made documentation ordering of ``SwaggerDict`` extra attributes stable ********* **1.7.0** ********* *Release date: Apr 27, 2018* - **ADDED:** added integration with `djangorestframework-recursive `_ (:issue:`109`, :pr:`110`, thanks to :ghuser:`rsichny`) *NOTE:* in order for this to work, you will have to add the new ``drf_yasg.inspectors.RecursiveFieldInspector`` to your ``DEFAULT_FIELD_INSPECTORS`` array if you changed it from the default value - **FIXED:** ``SchemaRef`` now supports cyclical references via the ``ignore_unresolved`` argument ********* **1.6.2** ********* *Release date: Apr 25, 2018* - **IMPROVED:** updated ``swagger-ui`` to version 3.13.6 - **IMPROVED:** switched ``ReDoc`` to version 2.0.0-alpha.17 (was 1.21.2); fixes :issue:`107` - **FIXED:** made documentation ordering of parameters stable for urls with multiple parameters (:issue:`105`, :pr:`106`) - **FIXED:** fixed crash when using a model ``ChoiceField`` of unknown child type ********* **1.6.1** ********* *Release date: Apr 01, 2018* - **ADDED:** added ``SUPPORTED_SUBMIT_METHODS`` ``swagger-ui`` setting ********* **1.6.0** ********* *Release date: Mar 24, 2018* - **IMPROVED:** ``OAUTH2_REDIRECT_URL`` will now default to the built in ``oauth2-redirect.html`` file ********* **1.5.1** ********* *Release date: Mar 18, 2018* - **IMPROVED:** updated ``swagger-ui`` to version 3.13.0 - **FIXED:** fixed a crash caused by ``serializers.OneToOneRel`` (:pr:`81`, thanks to :ghuser:`ko-pp`) ********* **1.5.0** ********* *Release date: Mar 12, 2018* - **IMPROVED:** ``serializers.HiddenField`` are now hidden (:issue:`78`, :pr:`79`, thanks to :ghuser:`therefromhere`) *NOTE:* in order for this to work, you will have to add the new ``drf_yasg.inspectors.HiddenFieldInspector`` to your ``DEFAULT_FIELD_INSPECTORS`` array if you changed it from the default value - **IMPROVED:** type of model field is now detected for ``serializers.SlugRelatedField`` with ``read_only=True`` (:issue:`82`, :pr:`83`, thanks to :ghuser:`therefromhere`) ********* **1.4.7** ********* *Release date: Mar 05, 2018* - **FIXED:** prevent crashes caused by attempting to delete object attributes which do not exist in the first place (:issue:`76`) ********* **1.4.6** ********* *Release date: Mar 05, 2018* - **IMPROVED:** updated ``swagger-ui`` to version 3.12.0 - **IMPROVED:** updated ``ReDoc`` to version 1.21.2 ********* **1.4.5** ********* *Release date: Mar 05, 2018* - **FIXED:** fixed an issue with modification of ``swagger_auto_schema`` arguments in-place during introspection, which would sometimes cause an incomplete Swagger document to be generated after the first pass (:issue:`74`, :pr:`75`) ********* **1.4.4** ********* *Release date: Feb 26, 2018* - **IMPROVED:** ``type`` for ``ChoiceField`` generated by a ``ModelSerializer`` from a model field with ``choices=...`` will now be set according to the associated model field (:issue:`69`) - **FIXED:** ``lookup_field`` and ``lookup_value_regex`` on the same ``ViewSet`` will no longer trigger an exception (:issue:`68`) ********* **1.4.3** ********* *Release date: Feb 22, 2018* - **FIXED:** added a missing assignment that would cause the ``default`` argument to ``openapi.Parameter.__init__`` to be ignored ********* **1.4.2** ********* *Release date: Feb 22, 2018* - **FIXED:** fixed a bug that causes a ``ModelViewSet`` generated from models with nested ``ForeignKey`` to output models named ``Nested`` into the ``definitions`` section (:issue:`59`, :pr:`65`) - **FIXED:** ``Response`` objects without a ``schema`` are now properly handled when passed through ``swagger_auto_schema`` (:issue:`66`) ********* **1.4.1** ********* *Release date: Feb 21, 2018* - **FIXED:** the ``coerce_to_string`` is now respected when setting the type, default value and min/max values of ``DecimalField`` in the OpenAPI schema (:issue:`62`) - **FIXED:** error responses from web UI views are now rendered with ``TemplateHTMLRenderer`` instead of throwing confusing errors (:issue:`58`) - **IMPROVED:** updated ``swagger-ui`` to version 3.10.0 - **IMPROVED:** updated ``ReDoc`` to version 1.21.0 ********* **1.4.0** ********* *Release date: Feb 04, 2018* - **ADDED:** added settings for OAuth2 client configuration in ``swagger-ui`` (:issue:`53`) - **IMPROVED:** updated ``swagger-ui`` to version 3.9.3 ********* **1.3.1** ********* *Release date: Jan 24, 2018* - **FIXED:** fixed a bug that would sometimes cause endpoints to wrongly be output as form operations (:issue:`50`) - **IMPROVED:** added generation of ``produces`` based on renderer classes - **IMPROVED:** added generation of top-level ``consumes`` and ``produces`` based on ``DEFAULT_PARSER_CLASSES`` and ``DEFAULT_RENDERER_CLASSES`` (:issue:`48`) ********* **1.3.0** ********* *Release date: Jan 23, 2018* - **ADDED:** security requirements are now correctly set and can be customized; this should fix problems related to authentication in ``swagger-ui`` Try it out! (:issue:`50`, :pr:`54`) - **IMPROVED:** updated ``swagger-ui`` to version 3.9.2 - **IMPROVED:** updated ``ReDoc`` to version 1.20.0 - **FIXED:** fixed an exception caused by a warning in get_path_from_regex (:pr:`49`, thanks to :ghuser:`blueyed`) ********* **1.2.2** ********* *Release date: Jan 12, 2018* - **FIXED:** djangorestframework>=3.7.7 is now required because of breaking changes (:issue:`44`, :pr:`45`, thanks to :ghuser:`h-hirokawa`) ********* **1.2.1** ********* *Release date: Jan 12, 2018* - Fixed deployment issues ********* **1.2.0** ********* *Release date: Jan 12, 2018 (missing from PyPI due to deployment issues)* - **ADDED:** ``basePath`` is now generated by taking into account the ``SCRIPT_NAME`` variable and the longest common prefix of API urls (:issue:`37`, :pr:`42`) - **IMPROVED:** removed inline scripts and styles from bundled HTML templates to increase CSP compatibility - **IMPROVED:** improved validation errors and added more assertion sanity checks (:issue:`37`, :issue:`40`) - **IMPROVED:** improved handling of NamespaceVersioning by excluding endpoints of differing versions (i.e. when accesing the schema view for v1, v2 endpoints will not be included in swagger) ********* **1.1.3** ********* *Release date: Jan 02, 2018* - **FIXED:** schema view cache will now always ``Vary`` on the ``Cookie`` and ``Authentication`` (the ``Vary`` header was previously only added if ``public`` was set to ``True``) - this fixes issues related to Django authentication in ``swagger-ui`` and ``CurrentUserDefault`` values in the schema ********* **1.1.2** ********* *Release date: Jan 01, 2018* - **IMPROVED:** updated ``swagger-ui`` to version 3.8.1 - **IMPROVED:** removed some unneeded static files ********* **1.1.1** ********* *Release date: Dec 27, 2017* - **ADDED:** :ref:`generate_swagger management command ` (:issue:`29`, :pr:`31`, thanks to :ghuser:`beaugunderson`) - **FIXED:** fixed improper generation of ``\Z`` regex tokens - will now be repalced by ``$`` ********* **1.1.0** ********* *Release date: Dec 27, 2017* - **ADDED:** added support for APIs versioned with ``URLPathVersioning`` or ``NamespaceVersioning`` - **ADDED:** added ability to recursively customize schema generation :ref:`using pluggable inspector classes ` - **ADDED:** added ``operation_id`` parameter to :func:`@swagger_auto_schema <.swagger_auto_schema>` - **ADDED:** integration with `djangorestframework-camel-case `_ (:issue:`28`) - **IMPROVED:** strings, arrays and integers will now have min/max validation attributes inferred from the field-level validators - **FIXED:** fixed a bug that caused ``title`` to never be generated for Schemas; ``title`` is now correctly populated from the field's ``label`` property ********* **1.0.6** ********* *Release date: Dec 23, 2017* - **FIXED:** Swagger UI "Try it out!" should now work with Django login - **FIXED:** callable ``default`` values on serializer fields will now be properly called (:pr:`24`, :issue:`25`) - **IMPROVED:** updated ``swagger-ui`` to version 3.8.0 - **IMPROVED:** ``PrimaryKeyRelatedField`` and ``SlugRelatedField`` will now have appropriate types based on the related model (:pr:`26`) - **IMPROVED:** mock views will now have a bound request even with ``public=False`` (:pr:`23`) ********* **1.0.5** ********* *Release date: Dec 18, 2017* - **FIXED:** fixed a crash caused by having read-only Serializers nested by reference - **FIXED:** removed erroneous backslashes in paths when routes are generated using Django 2 `path() `_ - **IMPROVED:** updated ``swagger-ui`` to version 3.7.0 - **IMPROVED:** ``FileField`` is now generated as an URL or file name in response Schemas (:pr:`21`, thanks to :ghuser:`h-hirokawa`) ********* **1.0.4** ********* *Release date: Dec 16, 2017* - **FIXED:** fixed improper generation of YAML references - **ADDED:** added ``query_serializer`` parameter to :func:`@swagger_auto_schema <.swagger_auto_schema>` (:issue:`16`, :pr:`17`) ********* **1.0.3** ********* *Release date: Dec 15, 2017* - **FIXED:** fixed bug that caused schema views returned from cache to fail (:issue:`14`) - **FIXED:** disabled automatic generation of response schemas for form operations to avoid confusing errors caused by attempting to shove file parameters into Schema objects ********* **1.0.2** ********* *Release date: Dec 13, 2017* - First published version drf-yasg-1.20.1/docs/conf.py000066400000000000000000000250511416705305200155440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # drf-yasg documentation build configuration file, created by # sphinx-quickstart on Sun Dec 10 15:20:34 2017. import inspect import os import re import sys import sphinx_rtd_theme from docutils import nodes, utils from docutils.parsers.rst import roles from docutils.parsers.rst.roles import set_classes from pkg_resources import get_distribution # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The master toctree document. master_doc = 'index' # General information about the project. project = 'drf-yasg' copyright = '2018, Cristi V.' author = 'Cristi V.' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # The full version, including alpha/beta/rc tags. release = get_distribution('drf_yasg').version if 'noscm' in release: raise AssertionError('Invalid package version string: %s. \n' 'The documentation must be built with drf_yasg installed from a distribution package, ' 'which must have been built with a proper version number (i.e. from a full source checkout).' % (release,)) # The short X.Y.Z version. version = '.'.join(release.split('.')[:3]) # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' modindex_common_prefix = ['drf_yasg.'] # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # # html_theme = 'default' html_theme = "sphinx_rtd_theme" html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # This is required for the alabaster theme # refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars html_sidebars = { '**': [ 'relations.html', # needs 'show_related': True theme option to display 'searchbox.html', ] } # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. htmlhelp_basename = 'drf-yasgdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'drf-yasg.tex', 'drf-yasg Documentation', 'Cristi V.', 'manual'), ] # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'drf-yasg', 'drf-yasg Documentation', [author], 1) ] # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'drf-yasg', 'drf-yasg Documentation', author, 'drf-yasg', 'One line description of project.', 'Miscellaneous'), ] autodoc_default_options = { 'private-members': None } autodoc_member_order = 'bysource' autoclass_content = 'both' autodoc_mock_imports = [] nitpick_ignore = [ ('py:class', 'object'), ('py:class', 'bool'), ('py:class', 'dict'), ('py:class', 'list'), ('py:class', 'str'), ('py:class', 'int'), ('py:class', 'bytes'), ('py:class', 'tuple'), ('py:class', 'function'), ('py:class', 'type'), ('py:class', 'OrderedDict'), ('py:class', 'None'), ('py:obj', 'None'), ('py:class', 'Exception'), ('py:class', 'collections.OrderedDict'), ('py:class', 'ruamel.yaml.dumper.SafeDumper'), ('py:class', 'rest_framework.serializers.Serializer'), ('py:class', 'rest_framework.renderers.BaseRenderer'), ('py:class', 'rest_framework.parsers.BaseParser'), ('py:class', 'rest_framework.schemas.generators.EndpointEnumerator'), ('py:class', 'rest_framework.views.APIView'), ('py:class', 'OpenAPICodecYaml'), ('py:class', 'OpenAPICodecJson'), ('py:class', 'OpenAPISchemaGenerator'), ('py:class', 'coreapi.Field'), ('py:class', 'BaseFilterBackend'), ('py:class', 'BasePagination'), ('py:class', 'Request'), ('py:class', 'rest_framework.request.Request'), ('py:class', 'rest_framework.serializers.Field'), ('py:class', 'serializers.Field'), ('py:class', 'serializers.BaseSerializer'), ('py:class', 'Serializer'), ('py:class', 'BaseSerializer'), ('py:class', 'APIView'), ] # even though the package should be already installed, the sphinx build on RTD # for some reason needs the sources dir to be in the path in order for viewcode to work sys.path.insert(0, os.path.abspath('../src')) # activate the Django testproj to be able to succesfully import drf_yasg sys.path.insert(0, os.path.abspath('../testproj')) os.putenv('DJANGO_SETTINGS_MODULE', 'testproj.settings.local') from django.conf import settings # noqa: E402 settings.configure() # instantiate a SchemaView in the views module to make it available to autodoc import drf_yasg.views # noqa: E402 drf_yasg.views.SchemaView = drf_yasg.views.get_schema_view(None) # monkey patch to stop sphinx from trying to find classes by their real location instead of the # top-level __init__ alias; this allows us to document only `drf_yasg.inspectors` and avoid broken references or # double documenting import drf_yasg.inspectors # noqa: E402 def redirect_cls(cls): if cls.__module__.startswith('drf_yasg.inspectors'): return getattr(drf_yasg.inspectors, cls.__name__) return cls for cls_name in drf_yasg.inspectors.__all__: # first pass - replace all classes' module with the top level module real_cls = getattr(drf_yasg.inspectors, cls_name) if not inspect.isclass(real_cls): continue patched_dict = dict(real_cls.__dict__) patched_dict.update({'__module__': 'drf_yasg.inspectors'}) patched_cls = type(cls_name, real_cls.__bases__, patched_dict) setattr(drf_yasg.inspectors, cls_name, patched_cls) for cls_name in drf_yasg.inspectors.__all__: # second pass - replace the inheritance bases for all classes to point to the new clean classes real_cls = getattr(drf_yasg.inspectors, cls_name) if not inspect.isclass(real_cls): continue patched_bases = tuple(redirect_cls(base) for base in real_cls.__bases__) patched_cls = type(cls_name, patched_bases, dict(real_cls.__dict__)) setattr(drf_yasg.inspectors, cls_name, patched_cls) # custom interpreted role for linking to GitHub issues and pull requests # use as :issue:`14` or :pr:`17` gh_issue_uri = "https://github.com/axnsan12/drf-yasg/issues/{}" gh_pr_uri = "https://github.com/axnsan12/drf-yasg/pull/{}" gh_user_uri = "https://github.com/{}" def sphinx_err(inliner, lineno, rawtext, msg): msg = inliner.reporter.error(msg, line=lineno) prb = inliner.problematic(rawtext, rawtext, msg) return [prb], [msg] def sphinx_ref(options, rawtext, text, ref): set_classes(options) node = nodes.reference(rawtext, text, refuri=ref, **options) return [node], [] def role_github_user(name, rawtext, text, lineno, inliner, options=None, content=None): options = options or {} content = content or [] if not re.match(r"^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}$", text, re.IGNORECASE): return sphinx_err(inliner, lineno, rawtext, '"%s" is not a valid GitHub username.' % text) ref = gh_user_uri.format(text) text = '@' + utils.unescape(text) return sphinx_ref(options, rawtext, text, ref) def role_github_pull_request_or_issue(name, rawtext, text, lineno, inliner, options=None, content=None): options = options or {} content = content or [] try: if int(text) <= 0: raise ValueError except ValueError: return sphinx_err( inliner, lineno, rawtext, 'GitHub pull request or issue number must be a number greater than or equal to 1; "%s" is invalid.' % text ) if name == 'pr': ref = gh_pr_uri elif name == 'issue': ref = gh_issue_uri else: return sphinx_err(inliner, lineno, rawtext, 'unknown role name for GitHub reference - "%s"' % name) ref = ref.format(text) text = '#' + utils.unescape(text) return sphinx_ref(options, rawtext, text, ref) roles.register_local_role('pr', role_github_pull_request_or_issue) roles.register_local_role('issue', role_github_pull_request_or_issue) roles.register_local_role('ghuser', role_github_user) def setup(app): app.add_css_file('css/style.css') drf-yasg-1.20.1/docs/contributing.rst000066400000000000000000000000411416705305200174760ustar00rootroot00000000000000.. include:: ../CONTRIBUTING.rst drf-yasg-1.20.1/docs/custom_spec.rst000066400000000000000000000424221416705305200173240ustar00rootroot00000000000000.. |br| raw:: html
######################## Custom schema generation ######################## If the default spec generation does not quite match what you were hoping to achieve, ``drf-yasg`` provides some custom behavior hooks by default. .. _custom-spec-excluding-endpoints: ******************* Excluding endpoints ******************* You can prevent a view from being included in the Swagger view by setting its class-level ``swagger_schema`` attribute to ``None``, or you can prevent an operation from being included by setting its ``auto_schema`` override to none in :ref:`@swagger_auto_schema `: .. code-block:: python class UserList(APIView): swagger_schema = None # all methods of the UserList class will be excluded ... # only the GET method will be shown in Swagger @swagger_auto_schema(method='put', auto_schema=None) @swagger_auto_schema(methods=['get'], ...) @api_view(['GET', 'PUT']) def user_detail(request, pk): pass .. _custom-spec-swagger-auto-schema: ************************************** The ``@swagger_auto_schema`` decorator ************************************** You can use the :func:`@swagger_auto_schema <.swagger_auto_schema>` decorator on view functions to override some properties of the generated :class:`.Operation`. For example, in a ``ViewSet``, .. code-block:: python from drf_yasg.utils import swagger_auto_schema @swagger_auto_schema(operation_description="partial_update description override", responses={404: 'slug not found'}) def partial_update(self, request, *args, **kwargs): """partial_update method docstring""" ... will override the description of the ``PATCH /article/{id}/`` operation, and document a 404 response with no body and the given description. Where you can use the :func:`@swagger_auto_schema <.swagger_auto_schema>` decorator depends on the type of your view: * for function based ``@api_view``\ s, because the same view can handle multiple methods, and thus represent multiple operations, you have to add the decorator multiple times if you want to override different operations: .. code-block:: python from drf_yasg import openapi from drf_yasg.utils import swagger_auto_schema from rest_framework.decorators import api_view from drf_yasg import openapi test_param = openapi.Parameter('test', openapi.IN_QUERY, description="test manual param", type=openapi.TYPE_BOOLEAN) user_response = openapi.Response('response description', UserSerializer) # 'method' can be used to customize a single HTTP method of a view @swagger_auto_schema(method='get', manual_parameters=[test_param], responses={200: user_response}) # 'methods' can be used to apply the same modification to multiple methods @swagger_auto_schema(methods=['put', 'post'], request_body=UserSerializer) @api_view(['GET', 'PUT', 'POST']) def user_detail(request, pk): ... * for class based ``APIView``, ``GenericAPIView`` and non-``ViewSet`` derivatives, you have to decorate the respective method of each operation: .. code-block:: python class UserList(APIView): @swagger_auto_schema(responses={200: UserSerializer(many=True)}) def get(self, request): ... @swagger_auto_schema(operation_description="description") def post(self, request): ... * for ``ViewSet``, ``GenericViewSet``, ``ModelViewSet``, because each viewset corresponds to multiple **paths**, you have to decorate the *action methods*, i.e. ``list``, ``create``, ``retrieve``, etc. |br| Additionally, ``@action``\ s defined on the viewset, like function based api views, can respond to multiple HTTP methods and thus have multiple operations that must be decorated separately: .. code-block:: python class ArticleViewSet(viewsets.ModelViewSet): # method or 'methods' can be skipped because the action only handles a single method (GET) @swagger_auto_schema(operation_description='GET /articles/today/') @action(detail=False, methods=['get']) def today(self, request): ... @swagger_auto_schema(method='get', operation_description="GET /articles/{id}/image/") @swagger_auto_schema(method='post', operation_description="POST /articles/{id}/image/") @action(detail=True, methods=['get', 'post'], parser_classes=(MultiPartParser,)) def image(self, request, id=None): ... @swagger_auto_schema(operation_description="PUT /articles/{id}/") def update(self, request, *args, **kwargs): ... @swagger_auto_schema(operation_description="PATCH /articles/{id}/") def partial_update(self, request, *args, **kwargs): ... .. Tip:: If you want to customize the generation of a method you are not implementing yourself, you can use ``swagger_auto_schema`` in combination with Django's ``method_decorator``: .. code-block:: python @method_decorator(name='list', decorator=swagger_auto_schema( operation_description="description from swagger_auto_schema via method_decorator" )) class ArticleViewSet(viewsets.ModelViewSet): ... This allows you to avoid unnecessarily overriding the method. .. Tip:: You can go even further and directly decorate the result of ``as_view``, in the same manner you would override an ``@api_view`` as described above: .. code-block:: python decorated_login_view = \ swagger_auto_schema( method='post', responses={status.HTTP_200_OK: LoginResponseSerializer} )(LoginView.as_view()) urlpatterns = [ ... url(r'^login/$', decorated_login_view, name='login') ] This can allow you to avoid skipping an unnecessary *subclass* altogether. .. Warning:: However, do note that both of the methods above can lead to unexpected (and maybe surprising) results by replacing/decorating methods on the base class itself. ********************************* Support for SerializerMethodField ********************************* Schema generation of ``serializers.SerializerMethodField`` is supported in two ways: 1) The :func:`swagger_serializer_method <.swagger_serializer_method>` decorator for the use case where the serializer method is using a serializer. e.g.: .. code-block:: python from drf_yasg.utils import swagger_serializer_method class OtherStuffSerializer(serializers.Serializer): foo = serializers.CharField() class ParentSerializer(serializers.Serializer): other_stuff = serializers.SerializerMethodField() @swagger_serializer_method(serializer_or_field=OtherStuffSerializer) def get_other_stuff(self, obj): return OtherStuffSerializer().data Note that the ``serializer_or_field`` parameter can accept either a subclass or an instance of ``serializers.Field``. 2) For simple cases where the method is returning one of the supported types, `Python 3 type hinting`_ of the serializer method return value can be used. e.g.: .. code-block:: python class SomeSerializer(serializers.Serializer): some_number = serializers.SerializerMethodField() def get_some_number(self, obj) -> float: return 1.0 When return type hinting is not supported, the equivalent ``serializers.Field`` subclass can be used with :func:`swagger_serializer_method <.swagger_serializer_method>`: .. code-block:: python class SomeSerializer(serializers.Serializer): some_number = serializers.SerializerMethodField() @swagger_serializer_method(serializer_or_field=serializers.FloatField) def get_some_number(self, obj): return 1.0 ******************************** Serializer ``Meta`` nested class ******************************** You can define some per-serializer or per-field options by adding a ``Meta`` class to your ``Serializer`` or serializer ``Field``, e.g.: .. code-block:: python class WhateverSerializer(Serializer): ... class Meta: ... options here ... .. _swagger_schema_fields: The available options are: * ``ref_name`` - a string which will be used as the model definition name for this serializer class; setting it to ``None`` will force the serializer to be generated as an inline model everywhere it is used. If two serializers have the same ``ref_name``, both their usages will be replaced with a reference to the same definition. If this option is not specified, all serializers have an implicit name derived from their class name, minus any ``Serializer`` suffix (e.g. ``UserSerializer`` -> ``User``, ``SerializerWithSuffix`` -> ``SerializerWithSuffix``) * ``swagger_schema_fields`` - a dictionary mapping :class:`.Schema` field names to values. These attributes will be set on the :class:`.Schema` object generated from the ``Serializer``. Field names must be python values, which are converted to Swagger ``Schema`` attribute names according to :func:`.make_swagger_name`. Attribute names and values must conform to the `OpenAPI 2.0 specification `_. Suppose you wanted to model an email using a `JSONField` to store the subject and body for performance reasons: .. code-block:: python from django.contrib.postgres.fields import JSONField class Email(models.Model): # Store data as JSON, but the data should be made up of # an object that has two properties, "subject" and "body" # Example: # { # "subject": "My Title", # "body": "The body of the message.", # } message = JSONField() To instruct ``drf-yasg`` to output an OpenAPI schema that matches this, create a custom ``JSONField``: .. code-block:: python class EmailMessageField(serializers.JSONField): class Meta: swagger_schema_fields = { "type": openapi.TYPE_OBJECT, "title": "Email", "properties": { "subject": openapi.Schema( title="Email subject", type=openapi.TYPE_STRING, ), "body": openapi.Schema( title="Email body", type=openapi.TYPE_STRING, ), }, "required": ["subject", "body"], } class EmailSerializer(ModelSerializer): class Meta: model = Email fields = "__all__" message = EmailMessageField() .. Warning:: Overriding a default ``Field`` generated by a ``ModelSerializer`` will also override automatically generated validators for that ``Field``. To add ``Serializer`` validation back in manually, see the relevant `DRF Validators`_ and `DRF Fields`_ documentation. One example way to do this is to set the ``default_validators`` attribute on a field. .. code-block:: python class EmailMessageField(serializers.JSONField): default_validators = [my_custom_email_validator] ... ************************* Subclassing and extending ************************* --------------------- ``SwaggerAutoSchema`` --------------------- For more advanced control you can subclass :class:`~.inspectors.SwaggerAutoSchema` - see the documentation page for a list of methods you can override. You can put your custom subclass to use by setting it on a view method using the :ref:`@swagger_auto_schema ` decorator described above, by setting it as a class-level attribute named ``swagger_schema`` on the view class, or :ref:`globally via settings `. For example, to generate all operation IDs as camel case, you could do: .. code-block:: python from inflection import camelize class CamelCaseOperationIDAutoSchema(SwaggerAutoSchema): def get_operation_id(self, operation_keys): operation_id = super(CamelCaseOperationIDAutoSchema, self).get_operation_id(operation_keys) return camelize(operation_id, uppercase_first_letter=False) SWAGGER_SETTINGS = { 'DEFAULT_AUTO_SCHEMA_CLASS': 'path.to.CamelCaseOperationIDAutoSchema', ... } -------------------------- ``OpenAPISchemaGenerator`` -------------------------- If you need to control things at a higher level than :class:`.Operation` objects (e.g. overall document structure, vendor extensions in metadata) you can also subclass :class:`.OpenAPISchemaGenerator` - again, see the documentation page for a list of its methods. This custom generator can be put to use by setting it as the :attr:`.generator_class` of a :class:`.SchemaView` using :func:`.get_schema_view`. .. _custom-spec-inspectors: --------------------- ``Inspector`` classes --------------------- For customizing behavior related to specific field, serializer, filter or paginator classes you can implement the :class:`~.inspectors.FieldInspector`, :class:`~.inspectors.SerializerInspector`, :class:`~.inspectors.FilterInspector`, :class:`~.inspectors.PaginatorInspector` classes and use them with :ref:`@swagger_auto_schema ` or one of the :ref:`related settings `. A :class:`~.inspectors.FilterInspector` that adds a description to all ``DjangoFilterBackend`` parameters could be implemented like so: .. code-block:: python class DjangoFilterDescriptionInspector(CoreAPICompatInspector): def get_filter_parameters(self, filter_backend): if isinstance(filter_backend, DjangoFilterBackend): result = super(DjangoFilterDescriptionInspector, self).get_filter_parameters(filter_backend) for param in result: if not param.get('description', ''): param.description = "Filter the returned list by {field_name}".format(field_name=param.name) return result return NotHandled @method_decorator(name='list', decorator=swagger_auto_schema( filter_inspectors=[DjangoFilterDescriptionInspector] )) class ArticleViewSet(viewsets.ModelViewSet): filter_backends = (DjangoFilterBackend,) filterset_fields = ('title',) ... A second example, of a :class:`~.inspectors.FieldInspector` that removes the ``title`` attribute from all generated :class:`.Schema` objects: .. code-block:: python from drf_yasg.inspectors import FieldInspector class NoSchemaTitleInspector(FieldInspector): def process_result(self, result, method_name, obj, **kwargs): # remove the `title` attribute of all Schema objects if isinstance(result, openapi.Schema.OR_REF): # traverse any references and alter the Schema object in place schema = openapi.resolve_ref(result, self.components) schema.pop('title', None) # no ``return schema`` here, because it would mean we always generate # an inline `object` instead of a definition reference # return back the same object that we got - i.e. a reference if we got a reference return result class NoTitleAutoSchema(SwaggerAutoSchema): field_inspectors = [NoSchemaTitleInspector] + swagger_settings.DEFAULT_FIELD_INSPECTORS class ArticleViewSet(viewsets.ModelViewSet): swagger_schema = NoTitleAutoSchema ... .. Note:: A note on references - :class:`.Schema` objects are sometimes output by reference (:class:`.SchemaRef`); in fact, that is how named models are implemented in OpenAPI: - in the output swagger document there is a ``definitions`` section containing :class:`.Schema` objects for all models - every usage of a model refers to that single :class:`.Schema` object - for example, in the ArticleViewSet above, all requests and responses containg an ``Article`` model would refer to the same schema definition by a ``'$ref': '#/definitions/Article'`` This is implemented by only generating **one** :class:`.Schema` object for every serializer **class** encountered. This means that you should generally avoid view or method-specific ``FieldInspector``\ s if you are dealing with references (a.k.a named models), because you can never know which view will be the first to generate the schema for a given serializer. **IMPORTANT:** nested fields on ``ModelSerializer``\ s that are generated from model ``ForeignKeys`` will always be output by value. If you want the by-reference behaviour you have to explictly set the serializer class of nested fields instead of letting ``ModelSerializer`` generate one automatically; for example: .. code-block:: python class OneSerializer(serializers.ModelSerializer): class Meta: model = SomeModel fields = ('id',) class AnotherSerializer(serializers.ModelSerializer): child = OneSerializer() class Meta: model = SomeParentModel fields = ('id', 'child') Another caveat that stems from this is that any serializer named "``NestedSerializer``" will be forced inline unless it has a ``ref_name`` set explicitly. .. _Python 3 type hinting: https://docs.python.org/3/library/typing.html .. _DRF Validators: https://www.django-rest-framework.org/api-guide/validators/ .. _DRF Fields: https://www.django-rest-framework.org/api-guide/fields/#validators drf-yasg-1.20.1/docs/custom_ui.rst000066400000000000000000000016551416705305200170120ustar00rootroot00000000000000###################### Customizing the web UI ###################### The web UI can be customized using the settings available in :ref:`swagger-ui-settings` and :ref:`redoc-ui-settings`. You can also extend one of the `drf-yasg/swagger-ui.html`_ or `drf-yasg/redoc.html`_ templates that are used for rendering. See the template source code (linked above) for a complete list of customizable blocks. The ``swagger-ui`` view has some quite involed JavaScript hooks used for some functionality, which you might also want to review at `drf-yasg/swagger-ui-init.js`_. .. _drf-yasg/swagger-ui.html: https://github.com/axnsan12/drf-yasg/blob/master/src/drf_yasg/templates/drf-yasg/swagger-ui.html .. _drf-yasg/swagger-ui-init.js: https://github.com/axnsan12/drf-yasg/blob/master/src/drf_yasg/static/drf-yasg/swagger-ui-init.js .. _drf-yasg/redoc.html: https://github.com/axnsan12/drf-yasg/blob/master/src/drf_yasg/templates/drf-yasg/redoc.html drf-yasg-1.20.1/docs/drf_yasg.rst000066400000000000000000000027131416705305200165750ustar00rootroot00000000000000drf\_yasg package ==================== drf\_yasg\.codecs --------------------------- .. automodule:: drf_yasg.codecs :members: :undoc-members: :show-inheritance: :exclude-members: SaneYamlDumper,SaneYamlLoader drf\_yasg\.errors --------------------------- .. automodule:: drf_yasg.errors :members: :undoc-members: :show-inheritance: drf\_yasg\.generators ------------------------------- .. automodule:: drf_yasg.generators :members: :undoc-members: :show-inheritance: drf\_yasg\.inspectors ------------------------------- .. autodata:: drf_yasg.inspectors.NotHandled .. automodule:: drf_yasg.inspectors :members: :undoc-members: :show-inheritance: drf\_yasg\.middleware ------------------------------- .. automodule:: drf_yasg.middleware :members: :undoc-members: :show-inheritance: drf\_yasg\.openapi ---------------------------- .. automodule:: drf_yasg.openapi :members: :undoc-members: :show-inheritance: :exclude-members: _bare_SwaggerDict drf\_yasg\.renderers ------------------------------ .. automodule:: drf_yasg.renderers :members: :undoc-members: :show-inheritance: drf\_yasg\.utils -------------------------- .. automodule:: drf_yasg.utils :members: :undoc-members: :show-inheritance: drf\_yasg\.views -------------------------- .. automodule:: drf_yasg.views :members: :undoc-members: :show-inheritance: .. |br| raw:: html
drf-yasg-1.20.1/docs/index.rst000066400000000000000000000011561416705305200161060ustar00rootroot00000000000000.. drf-yasg documentation master file, created by sphinx-quickstart on Sun Dec 10 15:20:34 2017. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. drf-yasg =========== .. toctree:: :maxdepth: 2 :caption: Table of contents: readme.rst rendering.rst openapi.rst security.rst custom_spec.rst custom_ui.rst settings.rst contributing.rst license.rst changelog.rst Source code documentation ========================= * :ref:`genindex` * :ref:`modindex` * :ref:`search` .. toctree:: :maxdepth: 2 drf_yasg.rst drf-yasg-1.20.1/docs/license.rst000066400000000000000000000000331416705305200164120ustar00rootroot00000000000000.. include:: ../LICENSE.rstdrf-yasg-1.20.1/docs/make.bat000066400000000000000000000014101416705305200156430ustar00rootroot00000000000000@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=. set BUILDDIR=_build set SPHINXPROJ=drf-yasg if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% :end popd drf-yasg-1.20.1/docs/openapi.rst000066400000000000000000000266151416705305200164410ustar00rootroot00000000000000.. |br| raw:: html
********************** Functional overview ********************** ------------------------------ OpenAPI specification overview ------------------------------ This library generates OpenAPI 2.0 documents. The authoritative specification for this document's structure will always be the official documentation over at `swagger.io `__ and the `OpenAPI 2.0 specification page `__. Because the above specifications are a bit heavy and convoluted, here is a general overview of how the specification is structured, starting from the root ``Swagger`` object. * :class:`.Swagger` object + ``info``, ``schemes``, ``securityDefinitions`` and other informative attributes + ``paths``: :class:`.Paths` object A list of all the paths in the API in the form of a mapping - ``{path}``: :class:`.PathItem` - each :class:`.PathItem` has multiple operations keyed by method * ``{http_method}``: :class:`.Operation` Each operation is thus uniquely identified by its ``(path, http_method)`` combination, e.g. ``GET /articles/``, ``POST /articles/``, etc. * ``parameters``: [:class:`.Parameter`] - and a list of path parameters + ``definitions``: named Models A list of all the named models in the API in the form of a mapping - ``{ModelName}``: :class:`.Schema` * :class:`.Operation` contains the following information about each operation: + ``parameters``: [:class:`.Parameter`] A list of all the *query*, *header* and *form* parameters accepted by the operation. - there can also be **at most one** body parameter whose structure is represented by a :class:`.Schema` or a reference to one (:class:`.SchemaRef`) + ``responses``: :class:`.Responses` A list of all the possible responses the operation is expected to return. Each response can optionally have a :class:`.Schema` which describes the structure of its body. - ``{status_code}``: :class:`.Response` - mapping of status code to response definition + ``operationId`` - should be unique across all operations + ``tags`` - used to group operations in the listing It is interesting to note the main differences between :class:`.Parameter` and :class:`.Schema` objects: +----------------------------------------------------------+-----------------------------------------------------------+ | :class:`.Schema` | :class:`.Parameter` | +==========================================================+===========================================================+ | Can nest other Schemas | Cannot nest other Parameters |br| | | | Can only nest a Schema if the parameter is ``in: body`` | +----------------------------------------------------------+-----------------------------------------------------------+ | Cannot describe file uploads |br| | Can describe file uploads via ``type`` = ``file``, |br| | | - ``file`` is not permitted as a value for ``type`` | but only as part of a form :class:`.Operation` [#formop]_ | +----------------------------------------------------------+-----------------------------------------------------------+ | Can be used in :class:`.Response`\ s | Cannot be used in :class:`.Response`\ s | +----------------------------------------------------------+-----------------------------------------------------------+ | Cannot be used in form :class:`.Operation`\ s [#formop]_ | Can be used in form :class:`.Operation`\ s [#formop]_ | +----------------------------------------------------------+-----------------------------------------------------------+ | Can only describe request or response bodies | Can describe ``query``, ``form``, ``header`` or ``path`` | | | parameters | +----------------------------------------------------------+-----------------------------------------------------------+ .. [#formop] a form Operation is an :class:`.Operation` that consumes ``multipart/form-data`` or ``application/x-www-form-urlencoded`` content * a form Operation cannot have ``body`` parameters * a non-form operation cannot have ``form`` parameters ---------------- Default behavior ---------------- This section describes where information is sourced from when using the default generation process. * :class:`.Paths` are generated by exploring the patterns registered in your default ``urlconf``, or the ``patterns`` and ``urlconf`` you specified when constructing :class:`.OpenAPISchemaGenerator`; only views inheriting from Django Rest Framework's ``APIView`` are looked at, all other views are ignored * ``path`` :class:`.Parameter`\ s are generated by looking in the URL pattern for any template parameters; attempts are made to guess their type from the views ``queryset`` and ``lookup_field``, if applicable. You can override path parameters via ``manual_parameters`` in :ref:`@swagger_auto_schema `. * ``query`` :class:`.Parameter`\ s - i.e. parameters specified in the URL as ``/path/?query1=value&query2=value`` - are generated from your view's ``filter_backends`` and ``paginator``, if any are declared. Additional parameters can be specified via the ``query_serializer`` and ``manual_parameters`` arguments of :ref:`@swagger_auto_schema ` * The request body is only generated for the HTTP ``POST``, ``PUT`` and ``PATCH`` methods, and is sourced from the view's ``serializer_class``. You can also override the request body using the ``request_body`` argument of :ref:`@swagger_auto_schema `. - if the view represents a form request (that is, all its parsers are of the ``multipart/form-data`` or ``application/x-www-form-urlencoded`` media types), the request body will be output as ``form`` :class:`.Parameter`\ s - if it is not a form request, the request body will be output as a single ``body`` :class:`.Parameter` wrapped around a :class:`.Schema` * ``header`` :class:`.Parameter`\ s are supported by the OpenAPI specification but are never generated by this library; you can still add them using ``manual_parameters``. * :class:`.Responses` are generated as follows: + if ``responses`` is provided to :ref:`@swagger_auto_schema ` and contains at least one success status code (i.e. any `2xx` status code), no automatic response is generated and the given response is used as described in the :func:`@swagger_auto_schema documentation <.swagger_auto_schema>` + otherwise, an attempt is made to generate a default response: - the success status code is assumed to be ``204`` for ``DELETE`` requests, ``201`` for ``POST`` requests, and ``200`` for all other request methods - if the view has a request body, the same ``Serializer`` or :class:`.Schema` as in the request body is used in generating the :class:`.Response` schema; this is inline with the default ``GenericAPIView`` and ``GenericViewSet`` behavior - if the view has no request body, its ``serializer_class`` is used to generate the :class:`.Response` schema - if the view is a list view (as defined by :func:`.is_list_view`), the response schema is wrapped in an array - if the view is also paginated, the response schema is then wrapped in the appropriate paging response structure - the description of the response is left blank * :class:`.Response` headers are supported by the OpenAPI specification but not currently supported by this library; you can still add them manually by providing an `appropriately structured dictionary `_ to the ``headers`` property of a :class:`.Response` object * *descriptions* for :class:`.Operation`\ s, :class:`.Parameter`\ s and :class:`.Schema`\ s are picked up from docstrings and ``help_text`` attributes in the same manner as the `default DRF SchemaGenerator `_ * .. _custom-spec-base-url: The base URL for the API consists of three values - the ``host``, ``schemes`` and ``basePath`` attributes * The host name and scheme are determined, in descending order of priority: + from the ``url`` argument passed to :func:`.get_schema_view` (more specifically, to the underlying :class:`.OpenAPISchemaGenerator`) + from the :ref:`DEFAULT_API_URL setting ` + inferred from the request made to the schema endpoint For example, an url of ``https://www.example.com:8080/some/path`` will populate the ``host`` and ``schemes`` attributes with ``www.example.com:8080`` and ``['https']``, respectively. The path component will be ignored. * The base path is determined as the concatenation of two variables: #. the `SCRIPT_NAME`_ wsgi environment variable; this is set, for example, when serving the site from a sub-path using web server url rewriting .. Tip:: The Django `FORCE_SCRIPT_NAME`_ setting can be used to override the `SCRIPT_NAME`_ or set it when it's missing from the environment. #. the longest common path prefix of all the urls in your API - see :meth:`.determine_path_prefix` * When using API versioning with ``NamespaceVersioning`` or ``URLPathVersioning``, versioned endpoints that do not match the version used to access the ``SchemaView`` will be excluded from the endpoint list - for example, ``/api/v1.0/endpoint`` will be shown when viewing ``/api/v1.0/swagger/``, while ``/api/v2.0/endpoint`` will not Other versioning schemes are not presently supported. --------------------- A note on limitations --------------------- When schema generation is requested, available endpoints are inspected by enumeration all the routes registered in Django's urlconf. Each registered view is then artificially instantiated for introspection, and it is this step that brings some limitations to what can be done: * the ``request`` the view sees will always be the request made against the schema view endpoint - e.g. ``GET /swagger.yaml`` * path parameters will not be filled This means that you could get surprizing results if your ``get_serializer`` or ``get_serializer_class`` methods depend on the incoming request, call ``get_object`` or in general depend on any stateful logic. You can prevent this in a few ways: * provide a fixed serializer for request and response body introspection using :ref:`@swagger_auto_schema `, to prevent ``get_serializer`` from being called on the view * :ref:`exclude your endpoint from introspection ` * use the ``swagger_fake_view`` marker to detect requests generated by ``drf-yasg``: .. code-block:: python def get_serializer_class(self): if getattr(self, 'swagger_fake_view', False): return TodoTreeSerializer raise NotImplementedError("must not call this") .. _SCRIPT_NAME: https://www.python.org/dev/peps/pep-0333/#environ-variables .. _FORCE_SCRIPT_NAME: https://docs.djangoproject.com/en/2.0/ref/settings/#force-script-name drf-yasg-1.20.1/docs/readme.rst000066400000000000000000000000321416705305200162240ustar00rootroot00000000000000.. include:: ../README.rstdrf-yasg-1.20.1/docs/rendering.rst000066400000000000000000000053441416705305200167570ustar00rootroot00000000000000################## Serving the schema ################## ************************************************ ``get_schema_view`` and the ``SchemaView`` class ************************************************ The :func:`.get_schema_view` function and the :class:`.SchemaView` class it returns (click links for documentation) are intended to cover the majority of use cases one might want to configure. The class returned by :func:`.get_schema_view` can be used to obtain view instances via :meth:`.SchemaView.with_ui`, :meth:`.SchemaView.without_ui` and :meth:`.SchemaView.as_cached_view` - see :ref:`readme-quickstart` in the README for a usage example. You can also subclass :class:`.SchemaView` by extending the return value of :func:`.get_schema_view`, e.g.: .. code-block:: python SchemaView = get_schema_view(info, ...) class CustomSchemaView(SchemaView): generator_class = CustomSchemaGenerator renderer_classes = (CustomRenderer1, CustomRenderer2,) ******************** Renderers and codecs ******************** If you need to modify how your Swagger spec is presented in views, you might want to override one of the renderers in :mod:`.renderers` or one of the codecs in :mod:`.codecs`. The codec is the last stage where the Swagger object arrives before being transformed into bytes, while the renderer is the stage responsible for tying together the codec and the view. You can use your custom renderer classes as kwargs to :meth:`.SchemaView.as_cached_view` or by subclassing :class:`.SchemaView`. .. _management-command: ****************** Management command ****************** If you only need a swagger spec file in YAML or JSON format, you can use the ``generate_swagger`` management command to get it without having to start the web server: .. code-block:: console $ python manage.py generate_swagger swagger.json See the command help for more advanced options: .. code-block:: console $ python manage.py generate_swagger --help usage: manage.py generate_swagger [-h] [--version] [-v {0,1,2,3}] ... more options ... .. Note:: The :ref:`DEFAULT_INFO ` setting must be defined when using the ``generate_swagger`` command. For example, the :ref:`README quickstart ` code could be modified as such: In ``settings.py``: .. code-block:: python SWAGGER_SETTINGS = { 'DEFAULT_INFO': 'import.path.to.urls.api_info', } In ``urls.py``: .. code-block:: python api_info = openapi.Info( title="Snippets API", ... other arguments ... ) schema_view = get_schema_view( # the info argument is no longer needed here as it will be picked up from DEFAULT_INFO ... other arguments ... ) drf-yasg-1.20.1/docs/security.rst000066400000000000000000000074451416705305200166550ustar00rootroot00000000000000********************************* Describing authentication schemes ********************************* When using the `swagger-ui` frontend, it is possible to interact with the API described by your Swagger document. This interaction might require authentication, which you will have to describe in order to make `swagger-ui` work with it. -------------------- Security definitions -------------------- The first step that you have to do is add a :ref:`SECURITY_DEFINITIONS ` setting to declare all authentication schemes supported by your API. For example, the definition for a simple API accepting HTTP basic auth and `Authorization` header API tokens would be: .. code-block:: python SWAGGER_SETTINGS = { 'SECURITY_DEFINITIONS': { 'Basic': { 'type': 'basic' }, 'Bearer': { 'type': 'apiKey', 'name': 'Authorization', 'in': 'header' } } } --------------------- Security requirements --------------------- The second step is specifying, for each endpoint, which authentication mechanism can be used for interacting with it. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#security-requirement-object for details. By default, a top-level `security` that accepts any one of the declared security definitions is generated. For the example above, that would be :code:`[{'Basic': []}, {'Bearer': []}]`. This can be overriden using the :ref:`SECURITY_REQUIREMENTS ` setting. Operation-level overrides can be added using the ``security`` parameter of :ref:`@swagger_auto_schema `. ------------------------------- ``swagger-ui`` as OAuth2 client ------------------------------- It is possible to configure ``swagger-ui`` to authenticate against your (or a third party) OAuth2 service when sending "Try it out" requests. This client-side configuration does not remove the requirement of a spec-side :ref:`security definiiton `, but merely allows you to test OAuth2 APIs using ``swagger-ui`` as a client. **DISCLAIMER**: this setup is very poorly tested as I do not currently implement OAuth in any of my projects. All contributions relating to documentation, bugs, mistakes or anything else are welcome as an issue or pull request. The settings described below were added as a result of discussion in issue :issue:`53`. The settings of interest can be found on the :ref:`settings page `. Configuration options are similar to most OAuth client setups like web or mobile applications. Reading the relevant ``swagger-ui`` docmentation linked will also probably help. Example ^^^^^^^ A very simple working configuration was provided by :ghuser:`Vigrond`, originally at `https://github.com/Vigrond/django_oauth2_example `_. .. code-block:: python SWAGGER_SETTINGS = { 'USE_SESSION_AUTH': False, 'SECURITY_DEFINITIONS': { 'Your App API - Swagger': { 'type': 'oauth2', 'authorizationUrl': '/yourapp/o/authorize', 'tokenUrl': '/yourapp/o/token/', 'flow': 'accessCode', 'scopes': { 'read:groups': 'read groups', } } }, 'OAUTH2_CONFIG': { 'clientId': 'yourAppClientId', 'clientSecret': 'yourAppClientSecret', 'appName': 'your application name' }, } If the OAuth2 provider requires you to provide the full absolute redirect URL, the default value for most ``staticfiles`` configurations will be ``/static/drf-yasg/swagger-ui-dist/oauth2-redirect.html``. If this is not suitable for some reason, you can override the ``OAUTH2_REDIRECT_URL`` setting as appropriate. drf-yasg-1.20.1/docs/settings.rst000066400000000000000000000340241416705305200166370ustar00rootroot00000000000000.. role:: python(code) :language: python .. |br| raw:: html
######## Settings ######## Settings are configurable in ``settings.py`` by defining ``SWAGGER_SETTINGS`` or ``REDOC_SETTINGS``. Example: **settings.py** .. code-block:: python SWAGGER_SETTINGS = { 'SECURITY_DEFINITIONS': { 'basic': { 'type': 'basic' } }, ... } REDOC_SETTINGS = { 'LAZY_RENDERING': False, ... } .. _url-settings: All settings which configure URLs (``LOGIN_URL``, ``SPEC_URL``, ``VALIDATOR_URL``, etc.) can accept several forms of input: * A view name: `urls.reverse()` will be used to reverse-resolve the name * A 2-tuple of ``(view_name, kwargs)```: `urls.reverse()` will be used to reverse-resolve the name using the given `kwargs`; `kwargs` must be a dict * A 3-tuple of ``(view_name, args, kwargs)```: `urls.reverse()` will be used to reverse-resolve the name using the given `args` and `kwargs`; `args`, `kwargs` must be a tuple/list and a dict respectively * A URL, which will be used as-is The possible settings and their default values are as follows: **************** SWAGGER_SETTINGS **************** .. _default-class-settings: Default classes =============== DEFAULT_GENERATOR_CLASS ------------------------- :class:`~.generators.OpenAPISchemaGenerator` subclass that will be used by default for generating the final :class:`.Schema` object. Can be overriden by the ``generator_class`` argument to :func:`.get_schema_view`. **Default**: :class:`drf_yasg.generators.OpenAPISchemaGenerator` DEFAULT_AUTO_SCHEMA_CLASS ------------------------- :class:`~.inspectors.ViewInspector` subclass that will be used by default for generating :class:`.Operation` objects when iterating over endpoints. Can be overriden by using the `auto_schema` argument of :func:`@swagger_auto_schema <.swagger_auto_schema>` or by a ``swagger_schema`` attribute on the view class. **Default**: :class:`drf_yasg.inspectors.SwaggerAutoSchema` DEFAULT_FIELD_INSPECTORS ------------------------ List of :class:`~.inspectors.FieldInspector` subclasses that will be used by default for inspecting serializers and serializer fields. Field inspectors given to :func:`@swagger_auto_schema <.swagger_auto_schema>` will be prepended to this list. **Default**: ``[`` |br| \ :class:`'drf_yasg.inspectors.CamelCaseJSONFilter' <.inspectors.CamelCaseJSONFilter>`, |br| \ :class:`'drf_yasg.inspectors.ReferencingSerializerInspector' <.inspectors.ReferencingSerializerInspector>`, |br| \ :class:`'drf_yasg.inspectors.RelatedFieldInspector' <.inspectors.RelatedFieldInspector>`, |br| \ :class:`'drf_yasg.inspectors.ChoiceFieldInspector' <.inspectors.ChoiceFieldInspector>`, |br| \ :class:`'drf_yasg.inspectors.FileFieldInspector' <.inspectors.FileFieldInspector>`, |br| \ :class:`'drf_yasg.inspectors.DictFieldInspector' <.inspectors.DictFieldInspector>`, |br| \ :class:`'drf_yasg.inspectors.JSONFieldInspector' <.inspectors.JSONFieldInspector>`, |br| \ :class:`'drf_yasg.inspectors.HiddenFieldInspector' <.inspectors.HiddenFieldInspector>`, |br| \ :class:`'drf_yasg.inspectors.RecursiveFieldInspector' <.inspectors.RecursiveFieldInspector>`, |br| \ :class:`'drf_yasg.inspectors.SerializerMethodFieldInspector' <.inspectors.SerializerMethodFieldInspector>`, |br| \ :class:`'drf_yasg.inspectors.SimpleFieldInspector' <.inspectors.SimpleFieldInspector>`, |br| \ :class:`'drf_yasg.inspectors.StringDefaultFieldInspector' <.inspectors.StringDefaultFieldInspector>`, |br| \ ``]`` DEFAULT_FILTER_INSPECTORS ------------------------- List of :class:`~.inspectors.FilterInspector` subclasses that will be used by default for inspecting filter backends. Filter inspectors given to :func:`@swagger_auto_schema <.swagger_auto_schema>` will be prepended to this list. **Default**: ``[`` |br| \ :class:`'drf_yasg.inspectors.CoreAPICompatInspector' <.inspectors.CoreAPICompatInspector>`, |br| \ ``]`` DEFAULT_PAGINATOR_INSPECTORS ---------------------------- List of :class:`~.inspectors.PaginatorInspector` subclasses that will be used by default for inspecting paginators. Paginator inspectors given to :func:`@swagger_auto_schema <.swagger_auto_schema>` will be prepended to this list. **Default**: ``[`` |br| \ :class:`'drf_yasg.inspectors.DjangoRestResponsePagination' <.inspectors.DjangoRestResponsePagination>`, |br| \ :class:`'drf_yasg.inspectors.CoreAPICompatInspector' <.inspectors.CoreAPICompatInspector>`, |br| \ ``]`` Swagger document attributes =========================== EXCLUDED_MEDIA_TYPES -------------------- A list of keywords for excluding MIME types from ``Operation.produces``. Any MIME type string which includes one of the substrings in this list will be prevented from appearing in a ``produces`` array in the Swagger document. **Default**: :python:`['html']` .. _default-swagger-settings: DEFAULT_INFO ------------ An import string to an :class:`.openapi.Info` object. This will be used when running the ``generate_swagger`` management command, or if no ``info`` argument is passed to :func:`.get_schema_view`. **Default**: :python:`None` DEFAULT_API_URL --------------- A string representing the default API URL. This will be used to populate the ``host`` and ``schemes`` attributes of the Swagger document if no API URL is otherwise provided. The Django `FORCE_SCRIPT_NAME`_ setting can be used for providing an API mount point prefix. See also: :ref:`documentation on base URL construction ` **Default**: :python:`None` Authorization ============= USE_SESSION_AUTH ---------------- Enable/disable Django login as an authentication/authorization mechanism. If True, a login/logout button will be displayed in Swagger UI. **Default**: :python:`True` LOGIN_URL --------- URL for the Django Login action when using `USE_SESSION_AUTH`_. **Default**: :python:`django.conf.settings.LOGIN_URL` LOGOUT_URL ---------- URL for the Django Logout action when using `USE_SESSION_AUTH`_. **Default**: :python:`'/accounts/logout/'` .. _security-definitions-settings: SECURITY_DEFINITIONS -------------------- Swagger security definitions to be included in the specification. |br| See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#security-definitions-object. **Default**: .. code-block:: python 'basic': { 'type': 'basic' } SECURITY_REQUIREMENTS --------------------- Global security requirements. If :python:`None`, all schemes in ``SECURITY_DEFINITIONS`` are accepted. |br| See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#securityRequirementObject. **Default**: :python:`None` .. _swagger-ui-settings: Swagger UI settings =================== Swagger UI configuration settings. |br| See https://github.com/swagger-api/swagger-ui/blob/112bca906553a937ac67adc2e500bdeed96d067b/docs/usage/configuration.md#parameters. SPEC_URL -------- URL pointing to a swagger document for use by swagger-ui. The default behaviour is to append ``?format=openapi`` to the URL which serves the UI; see :ref:`note on URL settings ` above. **Default**: :python:`None` |br| *Maps to parameter*: ``url`` VALIDATOR_URL ------------- URL pointing to a swagger-validator instance; used for the validation badge shown in swagger-ui. Can be modified to point to a local install of `swagger-validator `_ or set to ``None`` to remove the badge. **Default**: :python:`'http://online.swagger.io/validator/'` |br| *Maps to parameter*: ``validatorUrl`` PERSIST_AUTH ------------ Persist swagger-ui authorization data to local storage. |br| **WARNING:** This may be a security risk as the credentials are stored unencrypted and can be accessed by all javascript code running on the same domain. **Default**: :python:`False` |br| *Maps to parameter*: - REFETCH_SCHEMA_WITH_AUTH ------------------------ Re-fetch the OpenAPI document with the new credentials after authorization is performed through swagger-ui. **Default**: :python:`False` |br| *Maps to parameter*: - REFETCH_SCHEMA_ON_LOGOUT ------------------------ Re-fetch the OpenAPI document without credentials after authorization is removed through swagger-ui. **Default**: :python:`False` |br| *Maps to parameter*: - FETCH_SCHEMA_WITH_QUERY ----------------------- Fetch the OpenAPI document using the query parameters passed to the swagger-ui page request. **Default**: :python:`True` |br| *Maps to parameter*: - OPERATIONS_SORTER ----------------- Sorting order for the operation list of each tag. * :python:`None`: show in the order returned by the server * :python:`'alpha'`: sort alphabetically by path * :python:`'method'`: sort by HTTP method **Default**: :python:`None` |br| *Maps to parameter*: ``operationsSorter`` TAGS_SORTER ----------- Sorting order for tagged operation groups. * :python:`None`: Swagger UI default ordering * :python:`'alpha'`: sort alphabetically **Default**: :python:`None` |br| *Maps to parameter*: ``tagsSorter`` DOC_EXPANSION ------------- Controls the default expansion setting for the operations and tags. * :python:`'none'`: everything is collapsed * :python:`'list'`: only tags are expanded * :python:`'full'`: all operations are expanded **Default**: :python:`'list'` |br| *Maps to parameter*: ``docExpansion`` DEEP_LINKING ------------ Automatically update the fragment part of the URL with permalinks to the currently selected operation. **Default**: :python:`False` |br| *Maps to parameter*: ``deepLinking`` SHOW_EXTENSIONS --------------- Show vendor extension (``x-..``) fields. **Default**: :python:`True` |br| *Maps to parameter*: ``showExtensions`` DEFAULT_MODEL_RENDERING ----------------------- Controls whether operations show the model structure or the example value by default. * :python:`'model'`: show the model fields by default * :python:`'example'`: show the example value by default **Default**: :python:`'model'` |br| *Maps to parameter*: ``defaultModelRendering`` DEFAULT_MODEL_DEPTH ------------------- Controls how many levels are expaned by default when showing nested models. **Default**: :python:`3` |br| *Maps to parameter*: ``defaultModelExpandDepth`` SHOW_COMMON_EXTENSIONS ---------------------- Controls the display of extensions (``pattern``, ``maxLength``, ``minLength``, ``maximum``, ``minimum``) fields and values for Parameters. **Default**: :python:`True` |br| *Maps to parameter*: ``showCommonExtensions`` .. _oauth2-settings: OAUTH2_REDIRECT_URL ------------------- Used when OAuth2 authentication of API requests via swagger-ui is desired. If ``None`` is passed, the ``oauth2RedirectUrl`` parameter will be set to ``{% static 'drf-yasg/swagger-ui-dist/oauth2-redirect.html' %}``. This is the default `https://github.com/swagger-api/swagger-ui/blob/master/dist/oauth2-redirect.html `_ file provided by ``swagger-ui``. **Default**: :python:`None` |br| *Maps to parameter*: ``oauth2RedirectUrl`` OAUTH2_CONFIG ------------- Used when OAuth2 authentication of API requests via swagger-ui is desired. Provides OAuth2 configuration parameters to the ``SwaggerUIBundle#initOAuth`` method, and must be a dictionary. See `OAuth2 configuration `_. **Default**: :python:`{}` SUPPORTED_SUBMIT_METHODS ------------------------ List of HTTP methods that have the Try it out feature enabled. An empty array disables Try it out for all operations. This does not filter the operations from the display. **Default**: :python:`['get','put','post','delete','options','head','patch','trace']` |br| *Maps to parameter*: ``supportedSubmitMethods`` DISPLAY_OPERATION_ID -------------------- Controls the display of operationId in operations list. **Default**: :python:`True` *Maps to parameter*: ``displayOperationId`` ************** REDOC_SETTINGS ************** .. _redoc-ui-settings: ReDoc UI settings ================= ReDoc UI configuration settings. |br| See https://github.com/Rebilly/ReDoc#configuration. SPEC_URL -------- URL pointing to a swagger document for use by ReDoc. The default behaviour is to append ``?format=openapi`` to the URL which serves the UI; see :ref:`note on URL settings ` above. **Default**: :python:`None` |br| *Maps to attribute*: ``spec-url`` LAZY_RENDERING -------------- If set, enables lazy rendering mode in ReDoc. This mode is useful for APIs with big number of operations (e.g. > 50). In this mode ReDoc shows initial screen ASAP and then renders the rest operations asynchronously while showing progress bar on the top. **NOTE:** this feature might be removed in future versions of ReDoc (see https://github.com/Rebilly/ReDoc/issues/475) **Default**: :python:`False` |br| *Maps to attribute*: ``lazyRendering`` HIDE_HOSTNAME ------------- If set, the protocol and hostname is not shown in the operation definition. **Default**: :python:`False` |br| *Maps to attribute*: ``hideHostname`` EXPAND_RESPONSES ---------------- Specify which responses to expand by default by response codes. Values should be passed as comma-separated list without spaces e.g. expandResponses="200,201". Special value "all" expands all responses by default. Be careful: this option can slow-down documentation rendering time. **Default**: :python:`'all'` |br| *Maps to attribute*: ``expandResponses`` PATH_IN_MIDDLE -------------- Show path link and HTTP verb in the middle panel instead of the right one. **Default**: :python:`False` |br| *Maps to attribute*: ``pathInMiddlePanel`` NATIVE_SCROLLBARS ----------------- Use native scrollbar for sidemenu instead of perfect-scroll (scrolling performance optimization for big specs). **Default**: :python:`False` |br| *Maps to attribute*: ``nativeScrollbars`` REQUIRED_PROPS_FIRST -------------------- Show required properties first ordered in the same order as in required array. **Default**: :python:`False` |br| *Maps to attribute*: ``requiredPropsFirst`` FETCH_SCHEMA_WITH_QUERY ----------------------- Fetch the OpenAPI document using the query parameters passed to the ReDoc page request. **Default**: :python:`True` |br| *Maps to parameter*: - .. _FORCE_SCRIPT_NAME: https://docs.djangoproject.com/en/2.0/ref/settings/#force-script-name drf-yasg-1.20.1/package-lock.json000066400000000000000000000657171416705305200165460ustar00rootroot00000000000000{ "name": "drf-yasg", "requires": true, "lockfileVersion": 1, "dependencies": { "@babel/runtime": { "version": "7.16.3", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@exodus/schemasafe": { "version": "1.0.0-rc.6", "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.6.tgz", "integrity": "sha512-dDnQizD94EdBwEj/fh3zPRa/HWCS9O5au2PuHhZBbuM3xWHxuaKzPBOEWze7Nn0xW68MIpZ7Xdyn1CoCpjKCuQ==" }, "@redocly/ajv": { "version": "8.6.4", "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.6.4.tgz", "integrity": "sha512-y9qNj0//tZtWB2jfXNK3BX18BSBp9zNR7KE7lMysVHwbZtY392OJCjm6Rb/h4UHH2r1AqjNEHFD6bRn+DqU9Mw==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "@redocly/openapi-core": { "version": "1.0.0-beta.69", "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.0.0-beta.69.tgz", "integrity": "sha512-A05sPH8U26qQdZgkOQfHrL8dwY3twJ51/PY43WUuRqMdeZEu3SRcIdgLyXaIgR82ZnHC2Y/MnexE5QKtKObYJA==", "requires": { "@redocly/ajv": "^8.6.4", "@types/node": "^14.11.8", "colorette": "^1.2.0", "js-levenshtein": "^1.1.6", "js-yaml": "^4.1.0", "lodash.isequal": "^4.5.0", "minimatch": "^3.0.4", "node-fetch": "^2.6.1", "pluralize": "^8.0.0", "yaml-ast-parser": "0.0.43" } }, "@redocly/react-dropdown-aria": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/@redocly/react-dropdown-aria/-/react-dropdown-aria-2.0.12.tgz", "integrity": "sha512-feQEZlyBvQsbT/fvpJ4jJ5OLGaUPpnskHYDsY8DGpPymN+HUeDQrqkBEbbKRwMKidFTI2cxk2kJNNTnvdS9jyw==" }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, "@types/node": { "version": "14.18.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==" }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" }, "classnames": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "clsx": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "decko": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz", "integrity": "sha1-/UPHNelnuAEzBohKVvvmZZlraBc=" }, "dompurify": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.4.tgz", "integrity": "sha512-6BVcgOAVFXjI0JTjEvZy901Rghm+7fDQOrNIcxB4+gdhj6Kwp6T9VBhBY/AbagKHJocRkDYGd6wvI+p4/10xtQ==" }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "http2-client": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==" }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { "argparse": "^2.0.1" } }, "json-pointer": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.1.tgz", "integrity": "sha512-3OvjqKdCBvH41DLpV4iSt6v2XhZXV1bPB4OROuknvUXI7ZQNofieCPkmE26stEJ9zdQuvIxDHCuYhfgxFAAs+Q==", "requires": { "foreach": "^2.0.4" } }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" }, "mark.js": { "version": "8.11.1", "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", "integrity": "sha1-GA8fnr74sOY45BZq1S24eb6y/8U=" }, "marked": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" } }, "mobx-react": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-7.2.1.tgz", "integrity": "sha512-LZS99KFLn75VWDXPdRJhILzVQ7qLcRjQbzkK+wVs0Qg4kWw5hOI2USp7tmu+9zP9KYsVBmKyx2k/8cTTBfsymw==", "requires": { "mobx-react-lite": "^3.2.0" } }, "mobx-react-lite": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.2.tgz", "integrity": "sha512-FxJJMqmHcnQYOVVs2DdjNHioGlFsXF5/9VHztS9NAfIT3DYrxNZzVi119Zr/OmlWKkWNkAsssSNzPkqautfL4A==" }, "node-fetch": { "version": "2.6.6", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "requires": { "whatwg-url": "^5.0.0" } }, "node-fetch-h2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", "requires": { "http2-client": "^1.2.5" } }, "node-readfiles": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", "integrity": "sha1-271K8SE04uY1wkXvk//Pb2BnOl0=", "requires": { "es6-promise": "^3.2.1" } }, "oas-kit-common": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", "requires": { "fast-safe-stringify": "^2.0.7" } }, "oas-linter": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", "requires": { "@exodus/schemasafe": "^1.0.0-rc.2", "should": "^13.2.1", "yaml": "^1.10.0" } }, "oas-resolver": { "version": "2.5.6", "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", "requires": { "node-fetch-h2": "^2.3.0", "oas-kit-common": "^1.0.8", "reftools": "^1.1.9", "yaml": "^1.10.0", "yargs": "^17.0.1" } }, "oas-schema-walker": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==" }, "oas-validator": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", "requires": { "call-me-maybe": "^1.0.1", "oas-kit-common": "^1.0.8", "oas-linter": "^3.2.2", "oas-resolver": "^2.5.6", "oas-schema-walker": "^1.1.5", "reftools": "^1.1.9", "should": "^13.2.1", "yaml": "^1.10.0" } }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "openapi-sampler": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.1.1.tgz", "integrity": "sha512-WAFsl5SPYuhQwaMTDFOcKhnEY1G1rmamrMiPmJdqwfl1lr81g63/befcsN9BNi0w5/R0L+hfcUj13PANEBeLgg==", "requires": { "@types/json-schema": "^7.0.7", "json-pointer": "^0.6.1" } }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" }, "perfect-scrollbar": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.3.tgz", "integrity": "sha512-+Lo6t61lSuCY9ghpqh1NFMXOu8fNwlYGqPoUMOZ3HTFIL4g7+L7zD7hQCLW5yjkOZ6LGTw1m9+MfEew7cngtAQ==" }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" }, "polished": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.3.tgz", "integrity": "sha512-ocPAcVBUOryJEKe0z2KLd1l9EBa1r5mSwlKpExmrLzsnIzJo4axsoU9O2BjOTkDGDT4mZ0WFE5XKTlR3nLnZOA==", "requires": { "@babel/runtime": "^7.14.0" } }, "prismjs": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-tabs": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.3.tgz", "integrity": "sha512-jx325RhRVnS9DdFbeF511z0T0WEqEoMl1uCE3LoZ6VaZZm7ytatxbum0B8bCTmaiV0KsU+4TtLGTGevCic7SWg==", "requires": { "clsx": "^1.1.0", "prop-types": "^15.5.0" } }, "redoc": { "version": "2.0.0-rc.59", "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.0.0-rc.59.tgz", "integrity": "sha512-1Wkj/HSCv5CdtwF7FSZc5L0EeBgI0N7YpAIsatMtfiMHEon0WhuArAkc5rMQ6mQXUPRrqq5Fs6QPc4GpNp6DuA==", "requires": { "@babel/runtime": "^7.14.0", "@redocly/openapi-core": "^1.0.0-beta.54", "@redocly/react-dropdown-aria": "^2.0.11", "classnames": "^2.3.1", "decko": "^1.2.0", "dompurify": "^2.2.8", "eventemitter3": "^4.0.7", "json-pointer": "^0.6.1", "lunr": "^2.3.9", "mark.js": "^8.11.1", "marked": "^0.7.0", "mobx-react": "^7.2.0", "openapi-sampler": "^1.0.1", "path-browserify": "^1.0.1", "perfect-scrollbar": "^1.5.1", "polished": "^4.1.3", "prismjs": "^1.24.1", "prop-types": "^15.7.2", "react-tabs": "^3.2.2", "slugify": "~1.4.7", "stickyfill": "^1.1.1", "swagger2openapi": "^7.0.6", "url-template": "^2.0.8" } }, "reftools": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==" }, "regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "should": { "version": "13.2.3", "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", "requires": { "should-equal": "^2.0.0", "should-format": "^3.0.3", "should-type": "^1.4.0", "should-type-adaptors": "^1.0.1", "should-util": "^1.0.0" } }, "should-equal": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "requires": { "should-type": "^1.4.0" } }, "should-format": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", "requires": { "should-type": "^1.3.0", "should-type-adaptors": "^1.0.1" } }, "should-type": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=" }, "should-type-adaptors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "requires": { "should-type": "^1.3.0", "should-util": "^1.0.0" } }, "should-util": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==" }, "slugify": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==" }, "stickyfill": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stickyfill/-/stickyfill-1.1.1.tgz", "integrity": "sha1-OUE/7p0CXHSn5ZzuyyN4TMDxfwI=" }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" } }, "swagger-ui-dist": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.1.3.tgz", "integrity": "sha512-WvfPSfAAMlE/sKS6YkW47nX/hA7StmhYnAHc6wWCXNL0oclwLj6UXv0hQCkLnDgvebi0MEV40SJJpVjKUgH1IQ==" }, "swagger2openapi": { "version": "7.0.8", "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", "requires": { "call-me-maybe": "^1.0.1", "node-fetch": "^2.6.1", "node-fetch-h2": "^2.3.0", "node-readfiles": "^0.2.0", "oas-kit-common": "^1.0.8", "oas-resolver": "^2.5.6", "oas-schema-walker": "^1.1.5", "oas-validator": "^5.0.8", "reftools": "^1.1.9", "yaml": "^1.10.0", "yargs": "^17.0.1" } }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yaml-ast-parser": { "version": "0.0.43", "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" }, "yargs": { "version": "17.3.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.0.0" } }, "yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" } } } drf-yasg-1.20.1/package.json000066400000000000000000000003421416705305200155770ustar00rootroot00000000000000{ "name": "drf-yasg", "dependencies": { "redoc": "^2.0.0-rc.59", "swagger-ui-dist": "^4.1.3" }, "repository": { "type": "git", "url": "https://github.com/axnsan12/drf-yasg.git" }, "private": true } drf-yasg-1.20.1/pyproject.toml000066400000000000000000000001771416705305200162330ustar00rootroot00000000000000[build-system] requires = ["setuptools >= 40.6.3", "wheel", "setuptools-scm >= 3.0.3"] build-backend = "setuptools.build_meta" drf-yasg-1.20.1/requirements.txt000066400000000000000000000003161416705305200165760ustar00rootroot00000000000000# this file is only used when deploying to heroku, because heroku insists on having a root-level requirements.txt # for normal usage see the requirements/ directory .[validation] -r requirements/heroku.txt drf-yasg-1.20.1/requirements/000077500000000000000000000000001416705305200160355ustar00rootroot00000000000000drf-yasg-1.20.1/requirements/base.txt000066400000000000000000000002431416705305200175070ustar00rootroot00000000000000coreapi>=2.3.3 coreschema>=0.0.4 djangorestframework>=3.10.3 django>=2.2.16 ruamel.yaml>=0.16.13 inflection>=0.3.1 packaging>=21.0 pytz>=2021.1 uritemplate>=3.0.0 drf-yasg-1.20.1/requirements/ci.txt000066400000000000000000000001011416705305200171610ustar00rootroot00000000000000# requirements for the CI test runner codecov>=2.0.9 -r tox.txt drf-yasg-1.20.1/requirements/dev.txt000066400000000000000000000002251416705305200173530ustar00rootroot00000000000000# requirements for local development to be installed via pip install -U -r requirements/dev.txt -r tox.txt -r test.txt -r lint.txt tox-battery>=0.5 drf-yasg-1.20.1/requirements/docs.txt000066400000000000000000000003131416705305200175230ustar00rootroot00000000000000# used by the 'docs' tox env for building the documentation Sphinx>=1.7.0 sphinx_rtd_theme>=0.2.4 Pillow>=4.3.0 readme_renderer[md]>=24.0 twine>=1.12.1 Django>=2.0 djangorestframework_camel_case>=0.2.0 drf-yasg-1.20.1/requirements/heroku.txt000066400000000000000000000002061416705305200200710ustar00rootroot00000000000000# requirements necessary when deploying the test project to heroku -r testproj.txt psycopg2>=2.7.3 gunicorn>=19.7.1 whitenoise>=3.3.1 drf-yasg-1.20.1/requirements/lint.txt000066400000000000000000000001371416705305200175450ustar00rootroot00000000000000# used by the 'lint' tox env for linting via flake8 isort>=4.2 flake8>=3.5.0 flake8-isort>=2.3 drf-yasg-1.20.1/requirements/publish.txt000066400000000000000000000000151416705305200202400ustar00rootroot00000000000000wheel>=0.37.0drf-yasg-1.20.1/requirements/test.txt000066400000000000000000000003421416705305200175540ustar00rootroot00000000000000# requirements for running the tests via pytest pytest>=4.0 pytest-pythonpath>=0.7.1 pytest-cov>=2.6.0 pytest-xdist>=1.25.0 pytest-django>=3.4.4 datadiff==2.0.0 psycopg2-binary==2.8.6 django-fake-model==0.1.4 -r testproj.txt drf-yasg-1.20.1/requirements/testproj.txt000066400000000000000000000003451416705305200204520ustar00rootroot00000000000000# test project requirements Pillow>=4.3.0 django-filter>=2.4.0 djangorestframework-camel-case>=1.1.2 djangorestframework-recursive>=0.1.2 dj-database-url>=0.4.2 user_agents>=1.1.0 django-cors-headers django-oauth-toolkit>=1.3.0 drf-yasg-1.20.1/requirements/tox.txt000066400000000000000000000000671416705305200174130ustar00rootroot00000000000000# requirements for building and running tox tox>=3.3.0 drf-yasg-1.20.1/requirements/validation.txt000066400000000000000000000001101416705305200207200ustar00rootroot00000000000000# requirements for the validation feature swagger-spec-validator>=2.1.0 drf-yasg-1.20.1/runtime.txt000066400000000000000000000000151416705305200155320ustar00rootroot00000000000000python-3.9.0 drf-yasg-1.20.1/screenshots/000077500000000000000000000000001416705305200156525ustar00rootroot00000000000000drf-yasg-1.20.1/screenshots/redoc-nested-response.png000066400000000000000000003157121416705305200226010ustar00rootroot00000000000000‰PNG  IHDR€8čÓÁCsRGB®ÎégAMA±Ź üa pHYsĂĂÇo¨d˙ĄIDATx^ěý}xUŐť÷Ź÷żůóţďűç}_Wż­ßéuÓą:2őB돑)ră Oc S´[L@Ʀ€b ť8¨8ڰ1$cJi@„Ô 4<e(AC"&éCŚN?ż˝öĂ9űśóÉÉŮÉIö çőšëUÎŢkíµ÷><ĚÎçíZűK‚7}}}‚ö öpË­ă‡Mçź~:$ €-ěA+Ň!""""ćKęF‘ŃrŔ´"""""bľ4hˇn €-ěA+Ň!""""ćKęF‘ŃrŔ´"""""bľ4hˇn €-ěA+Ň!""""ćKęF‘ŃrŔ´"""""bľ4hˇnŕwżű]uX`DË{ĐŠtůŇ …şFţjíŔ– ö éóĄA uĂáď@!00˘ĺ€=hE:DDDDÄ|iHtÓCßôít €-ěA+Ň!""""ćKCz «…˝ŔŁX°­H‡/ énA/0â(ěA+Ň!""""ćKęF‘ŃrŔ´"""""bľ4hˇn €-ěA+Ň!""""ćKęF1ďpó­ňbÍAů÷—öËţĂGÔ>ÖŰŮ,?­Ú$?k–­q{ĐŠtůŇ …şQĚkü/ŰvË˙-].˙P¶Z=ňűůÁu˙"ż˝ö±Úż;ĺÄĎ6I… aľ%—Ծà 0Z$ŘV¤CDDDDĚ—-ÔŤbŢŕWßüąřš_}f6° ůÉ放ٽ,ÝŔw—śčô÷ůěÁËá~Ă(0Z$ŘV¤CDDDDĚ—-ÔŤbŢŕ޸Ů5}˙›ŤÇÜ`řƧ]mŞ—ßňfü¦‡ŻťÍr"€€6°î˛ľßń§§:SÇ5}ÝĎţŚâ` 9o"~K†f"'ĆBAŔ´"""""bľ4hˇnó›×Ľű7}ż™lÚĚŻémŞélîᬿżăÔ®d8kÚýÓf'‚ĺ]~Hü–\Jě Âfçpś…Ś5‚ËP#ú€=hE:DDDDÄ|iĐBÝ(ću°yßoú~ ›8Ę{€/Ő™°5]/Ś ÚËA!nzPÇí›ö*c&f}w‡–ĄF!Ŕ´"""""bľ4hˇnó7žř•ôVmß“XîŮě»÷‡«ĺľ=žŃ?'3q}ë.÷;úa­Öž‡‚b` €=hE:DDDDÄ|iĐBÝ(ć-6ţ˶Ýn¬i‚aít;N˝•˛Ë<›@ötˇ­cčďęM x €q” ö éóĄA uŁ×ŘxîâewŮgŁ™l¶˙ˇluÎ!pö&CŮ |ő÷e„łţľĐě`ďŘ´ă´Ą˘3–…vŽ©s>ŁE€=hE:DDDDÄ|iĐBÝ(ć=ÖŚ'ۤiÁkІ5ÁnĘţ]ňÓ`c°?Đ„ľŔh‘`Z‘1_´P7Š#Ă!đ›ŤÇÔ>)ŘV¤CDDDDĚ—-ÔŤâŔFŻv›Üř´KmGÄLŔ´"""""bľ4hˇnG4FÄč€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤbŢŕË—/#bHíďÉ`{ĐŠtůŇ …şQd0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hE:DDDDÄ|iĐBÝ(#Z.ŘV¤‹ŰŻ~ă6ůň×Ç:ŢŠ99Vľň—·©ĎVqkĐBÝ(#Z.ŘV¤‹ÓŻţĄ µ˘&""""äWľa_lĐBÝ(#Z.ŘV¤‹Ó˙÷/ů‹8XÍł”öڧ-ÔŤ"0˘ĺ€=hEş8Ő ™»Ú3Vś´P7ŠŔ– ö éâT+b""""bîjĎXqjĐBÝ(#Z.ŘV¤‹S­‰ą«=cĹ©A uŁHŚhą…F×őnéő?؆V¤‹S­‰ą«=cĹ©A uŁHŚhą…Dóc“ÝÜƬlň÷ŘEz.nµ"&""""ć®öڧ-ÔŤ"0˘ĺWv•¸˙¸m:ëﱜ–=˛řˇ˛ćP‡żD:¤ö±Î÷˛Gšý=7麸Պ»Ú3Vś´P7ŠŔ– sčA÷ă •Ł$°ÎĘúbó˙¤”ZŔÍDz.nµ"&""""ć®öڧ-ÔŤâ°Ŕ-Usĺ®âeRÓ“şż~őT™±ů|ĘľľľóňTÉyęśůuŞs\¦î1 ĺrWÉiM9¶OZ7/ŤŮ(Ë•ăďZÝčµ›1ŠČćsýŤŃĎńŽËĽ~‰±\{äÄÖGä;Óü~ÓJeéÖfé ŤmúÔ”9mł7IK°Ď˝ŽäŘIËĄŢý>Ľó%Ćči–Í+JĄČďW4{™ŰąďýˇpöÚvůN±ů>fÉÚSɱ<•°7}_ŹsOÎw9eő[Ňâę=ŇÖ°ÉsŞ|gkpÍŢ1w9çYŢţÎ €o­¤÷’T?4[ĆŽ ţA/wĚY%Ő{ý­U2Á´=pX¤ű´ěHë_ôP­\ń»&PŐÔ@±ýh•Ěś4ŢgśŚ™ľX*Ź*K0‡ÇňŻwŚĚ-ă&Ë=+kĺĂĐĺ&镬’{ÂçT"e.9-Á5)šűőé˝X+‹§OĚńĽ9r˝I*ď Ý‹űÝŻČřj0mSe}«Č•ŕ~Š«äŚßžŰ}&1÷R6grÚyťßó«~˙ťgę]G’iŘ´XОü>XFęĎ;ń«1«¨Ž6µűBDDD̦öڧ-ÔŤbŢŕž7–É]‹¶K«˙k[¨ÍŠxöR™?ÍąŽDx:ȸáq)šöL›ĺś®™ ]´®QNTĚrMm8®_ç·â­´™˝Ž§6ʔ⥲óšŮöŽůÎ’Ąr×´r©O\đÍ }ś•J?ü4á܇'CÄéĎ&CÝ ľo•”Ťw~5áç}+dn8DśóBj<@\éż#8ăĽÇ8$ĆzÁ;ż ťç­ĹóÂAđRŰí÷wé–Ú‚13ű'ĎáżçvÎDw˙âĹ]wťöş´>ëÝż”:í÷•Č~ŕY´©Íë‘®ký1ťsŽź-3ťóÍ ĚEŰ’ăpYĺ^ű8§˙c‡ĄÝmÍő>=>Ü6;Ń×˝—‡JŃřŕř©R„»î;‘Ë÷>'Ę=ÁwňĐR{ÝďĎ3ţLŚ—…‡R~C¬ĂűYȵ"ć`ŐŐѦv_ŮÔž±âÔ …şQĚsÜ);—™©×¤Żç ”Ď•Š÷“íVŔfŚcĄ(´ô``s/EÍ)í™—µÓfÉ*ćľżI¦d,‹=PlîG›9lôľëů/™ŮĆÁ1×Ü}ÉĄ  €o­ă˘l†fşş\o’şˇđ.€ÇĚ{55č˝^+ ÝpĽ”ő÷˛ŔĆÉRVź:K´·%8ĎdYÓâď4„fŁŽ™ó¬4§Lkíę u®­Ëß{fÓTŻ˙Ľ=©łt{OKĺÓ_?GFřěđˇ?ÖÂCţźöŁGäŘ`2ÎîĂţw–ůďţáy«¤Áß4x°qĽĚÜ—8GľOçÜë+ŹČ•´©Ág*ýqV6ů{ ©3¶SIĎÖ4ůa´Ďő#˛Ř ęĘn2`°ďg-{ÔŠU TG›Ú}!"""fS{ĆŠSęF1ż°»Üq2ätg݆f˝9öß›njśŢ;4îŃŠYÎgo)čÁŔKë’mŞî,áŤrÂÝľ&›ůáx˘O.đRyąźYĆÉď3t̵}2?±4đÍ uđĽ=©^:‰Xô‚đp¦Kţ‡ŕ;ógצѵoˇŰžD&ŕţĹ“ňđ$Ó^"[ÜŮ©MRć¬ýôżú¬9ăŤ]sŇßáC`°ďgM{ÔŠU TG›Ú}!"""fS{ĆŠSęF1ݰYîř®˛ÉĺŠM„Ő¸YÖNË1ž˝QŽvvJGČŁsÓ๲öXjźäő„Ç5łsťëŮz~ĐpöŔ=RS6U¦T}Ř×¶µÔą‡MŇ’č3PěÍ Î6Ř{Ďrę8m/KAß ÚG›l™ă˙C4nŞĚ­¬•cW•Ŕ.±tćý=¸=52?}iäţŕô}Ž©á­ />ë}żóö¤öuΙř}I €/IĄ»?tîîn˙{čv®ËűŢ'TžNýnÚŹVÉš}mţ€ť¸?Y¤VĬZ š©Ěľ+‡'ňÁ;oĘżµ}!˝íĘß§s@Ćąîü¬ů{yý€łýF›ó3ć˝Ďiý’Žl\Ľ÷˘ČŻwÉmJ›ť®”7Ż;ßůN­Mó19Ňu]Ţ\®µ!""ŽN—ŻzÔUk3š¶˙3óÔ¶°Ú3Vś´P7ŠŔ–kÍ•“ý„ĆËŘé eńC‹ĺžI~Zül2Ě{ĽXÖűďě3©Dć†Ď›qŚC0ÖĘ*?8/EóVČâyłÝ­îqłĎĘ–9Á~˙‡JŃxߤURî,=í8füDkÎăŢďiYďÎ.v7Ń羹ýçš6Ą]kŽtťXë‡ÝÁw°BfNźčßĎx™ OłŔŃî3ÚŢ2nŞĚtÎ9wÎdďśĹS˝ëI €ť?#Ź…ţŚ8ßË”0ř”%ľ›ÉrĎ}©ßÍ9/DÇFďç{ÔŠU T3ÍźsÚľcGÂmMňz—Č•Ö&ůĘ–3ŇüąóešĄˇOť’)[´ţ#O’mż6aę$ůň˝•ňćĹŕ‡â^io—·dňNçŰëGeŰ\”.˙żhî˝~Bž»7c—s˝É€őo]ůő>ů‘éďu—®‹ő˛6­˙‘ŞmŇt=1 śÚůP2„ľë!ŮöŢőÄ@>źąŢ0ío­”éOÔË…ŕdîXřçr\^/í×ëĺÁ6""âMŕ™VŻÖ®…Ŕfźaű‹»3ÚŇŐž±âÔ …şQ$F´\ioŮ#eAh4AŢĘZů0<Ą3ď°·¤°™%:3üŽ™ľX*ʦÍ5„Çę˝$Ő…_ĺzôʇVĄ„ËcĆĎ–ą›š2fËşN8×ăżŰ÷–qłeń „íć]iăL*‘˛—2fľFâz“TŢş—[ÇËsVIőĹÔQłŔ†(÷ŮÖĎ÷§˝Ř`úOőű;×7ŻJŽĄíҰi±ůˇŻ{î||7#@đsŚ-jEĚÁŞŞ™¦łoĘ˝§>u~žë–Ý/š¶ßË+)K9'ÝîüŔŮ~á]÷ó¸}gäpgź˙s`ź\¸p:mÖđŔw™0¶U¶Ýĺ·ć=ąSn•‰÷®‘];+˝@ÖŔ]&6mĄ›¤ÉéÚűŢ6?°Uŕ^/@ţŢŚIrŰŚ5ňŠůŮ=šţ˝ŇŰuU^bžLüútůnŐ çgň^ů`ë§}Ž<÷k§ý·őRQ:]ľ<ĺ©xÇ»¶ďąÇ§Ďö¶ŻüÇîXÓ´O¶=1Éoó®Ç„ÄÁ6""âÍŕ7îřk5Âßęš×Sú÷§öڧ-ÔŤ"0˘ĺB–wĘfC “†Fz.nµ"ć`ŐŐLM0›Ćç”cďüÂi33{łĎľđŢ‘Ôý;šd]« ÓŰF.ľmk‹ô^Ü'ĹÎçďţÇU‘®VŮő#ʆú™8íÁî˛Ń)nz|BÖú}]Í{†ť;mz"čďÜó^ö&űü¨±[Ä\‹Ű÷şĽľ4ŮöĺŻWJSopŽôřyý·ÎĄ˙zź,»7ý]ÄÉë×»ĺH„÷#""ŽÓCŕ¨áŻQ{ĆŠSęF‘Ńrě!˝@·Zs°jj¦&í“cŤM2˙Ő&ą÷Ĺ7CmoĘ“Yßlf ;Ű{ŽĘ˝)Ë>ż™2;ŘsäŕŠ÷z“Aě]÷IĹ´J»I¤{ŻËŻ­IÎN_B9eź˙zW˛Żk8´Míź0Ó,Ůěý‘KŁWNU™ľ™ďľmţ&yý×Ţ’Ń˝×[ĺ•ů3€KÉ•ô0ń&2˘„żFí+N Z¨E`DË…›3n?ô„,~ČĽ{w`×R–¸€XH/ĐĹ­VĬZ šéÁě§ýs‘®öK˛bO˝|eË)müŘ 3Ű[˝€wĹĄ>‘ŢOd÷›ż»«Ţ”)oţV.|ţ…4ż“G*Ţ$§z/Ę®éű'É?¸K2_•×KťíÁŔy|ä‰以aď“bwrfśĐ„ŘţrŃćýĹfVsď;•™ýo"8jřkÔž±âÔ …şQ$F´\¸9ŕ3•SSţAĎ&łěAűą-Nµ"ć`ŐŐLsf÷ś–×Ű˙čÎD5ôövËáĆŁ2.hßrTžlýTÚ?÷;|Ţ'Zß“»ĂcŚT\Ő"˝~PjBߊĆVyłę!7dťhfΡî ŕAľx§ňŕ»ćČ÷ŞęĄé?üÉÁ’Ďďl’ď–®‘¬Ř$G~íô]:ÇiwĆ2KY»ç2ý‚YĂ7·&Öö¤öڧ-ÔŤ"0˘ĺ€=hEş8ŐŠU TG›Ú}esí;˝rĺ?đ·Í¬ßząĐD×Ýr!\˙ú€¬}ë˘tůŁuýö¨™_쌽hŁĽ|Ęą­˘ořá‡j{ľ,€OďF+Ň!""""ćKęF1żđµíňťĐ»ë×Í’˘uÉ 73Ř˝&WG_ÚŔKë’m™f€ÓßśŇďň[˛jŃ,˙Ŕ dUA0f:RáŻŃ:Z«dáĘ=˛fúxďŁqłe͉nżQ¤ëD•Ěď˙C5~ˇ¬O´u˱ÇJdŚ˙ŘŘyUrĚi:S95ńŹÚ-·f†¤&8ÝQżJ&Ś Ž{AÎ\?"eĹÚůۤúˇ©ţ9&ĘÂ}mξò01ţ8/h6ˇé}φúN–˛ú\îÁiK»–ő÷éÁn¶~ŮĆo7¦x…T_ő®ľ* '÷0NĆŢ·G>tŹëę&şˇieKpţ'dÂś¤Ýůܰr˘3Îié2 ݧe}ńdYÓb6”Ŕ&ô=Ôć\‰s5ć&=!ͦ-Ű=¸mJőU÷(ąRżÖG €łőË6~«Y®y­ÔąÇ‰´uŽ›c–oî-sfËz˙;7÷¶¦Ř9ćşó9m°¨OŻ’ćD°€ť¶I«¤Öż®fg;řŢŰw•ČŘüßźŢ6©[ăô%Č@+Ň!""""ćKęF1Źp٬š–îΩÓíㆸ+jüŕµGę+fÉŚÍçÓĆ8¶wg„ÁN˙ŮYúcÁyăĆŤ ŤÖaf§…µÇÖL•˛Ł"nš- ů;}şö-”{¶uxÁç¤eˡ“ňáőD:é‘5^(»ĂÝťľw¤ô ÂÝò°¸JÎř{]N¬•™›.9”řľplkVŻ=Ű=_gîK˝vmiçlý˛ŤŻµ]9zŇ}oĂĘÉrĎc{¤ˇĹą/öPŕÔ1Âp‰,®w?z$Ží–Ýóü@9Aň8H˘éóĄA uŁ·¸çŤer×ěŤRšYklŮ\*w-Ú.mNźŚ`×}OđRŮy-u¬ŕľ©_=Ë9_ą|żÇÝ×s®Q*–Ě•UnX«Íô5ý˛ŔWÉ[¤ţš7f[ĂF™Q\*›Ó® [3XŰ?\Z‡ˇŁ»Äp«ż3 Ôż÷âaY˙P‰Üa–'żP¶}łŔikFßP¬üC9vÍÉPź´ĐÔś'Ű=d†«zś­_öń•¶ŇĽë ™9}˘»Ló+Źx3ťÓî%{ś6~âŘ´ďÇ…@#ýçNDDDDÄ|jĐBÝ(ć)ľ&›™™ľĘűrÝw®¬=•%Ř /ěË{äÄÖGdF0ëxZ©,Ýz\:Ü6/čM™‰\˛EZµý®ĺRďwYV,•)ˇ1×6xł—ăŇ:ü°2LN3€Óč=±JîĆ|Ŕó^őBŃ r€m›ÜŰÝí.SťJ‡ě7[*/:ó‹Tß—6Óš@E+Ň!""""ćKęF1ŻďFÄük&4čŔA[čý¶íŰJdÂcţűyÍ{q<(wď6ď^ifęf’{ě-“+eĹ㽌ĆÍ–5'‚dU¤ëD•Ěď˙C5~ˇ¬O´µIőCSÝĺ‹MŰŘyUr,qX“<쓦F €SĎ1^&Ü·'ńNŕ+»şűÝcłŔýßÓVżJ&%¬ý{(óßśN¶~ŮĆo7¦x…T»vÚ1ă¦Ęâm^sĎ;ć™ß‹©n¸;ŘŘĽ¸neđÝM”™ŰŞd.0@îĎeäA uŁHŚhąÖaŕ~–k†›3ł ­H‡/ Z¨E`D˵ŕ›“Îďë&‰îŢ6©~`˘Üł-e Z‘1_´P7ŠŔ–kŔ7)f čŮÉĺłWIĽW’hE:DDDDÄ|iĐBÝ(#Z.ŘV¤CDDDDĚ—-ÔŤ"0˘ĺ€=hEşxť)?ŘS/ŰkCUK¦%úܵ®&µÝµF~pO0Ćť2nÉ3˛qĎ›~Ű›Rőô ąó¶ Ý㹇Űłź«—ň%ˇ>YÎó—ó*e}řĎUĘ˙˝[ą~ß§×ÍL9—wť[ĄjżßgŤl¬|Tîî3Qî}ŢiŰW%SŽ ®ďEą7Ążç¸G«ť¶äµfŢ‹s˝•Kĺ›îwâ]spßałą\?"""ş-ÔŤ"0˘ĺ€=hEşxM#ĽwlÜ˙¦üó‚;Ý}ý…·žw:íŐ˛}˙^ůÁ‚iňőŰĆÉ×Ć—ČĽçŢíű¶ĘßűádcdŔýťgü Y_ű¦¬_úäkÎ9ż>yľĚ{úą÷oB}–ěí{*ĺ®đqagUÉsµ5ňĂ{ďr¶ťűśµT~řôůŰPP}ËdçŢťó<ż˙ Y~ohżcÎ>·ˇ$e˙-·-‘Un(›'îĹ\ďYľ3Ą€űűrą~DDD,x Z¨E`DË{ĐŠtńއ‘&|®r~âsżˇ¤Öȧ{aqŇż•yĎ×Ëó•÷»ŰýŤ‘s|OĄ<][-K&+mŔ¦}˙żÉ˙ÍNÜđ†<_µDŠ+˝_Ămćúž~n‡<˝‡ĚÍşýˇ_”íĎż(OôűŢżU¶ďÜ w6Îáú Z¨E`DË{ĐŠtń:´řNłôńóŹĘו¶[ü›<żďů[çscäß¶DţŮ̲ݳC~p˙?¸3Ť3ú O^'këĺůťĎČĽ{ÍLâô>ćoĘ*3óŮťm›şÜłąľ§×Íw—Ţřh°Dv‰üpź9ć!)îxŔëGDDD$F,Ŕ´"]Ľf†‘_»{…”§/íľ‹6¤Rš¶çüYľşłvwČlçsÁć€ďó7÷ËžŻ‘çݶ7dýşűĺ/6ă@°ă×îY!«vúďN{×q8°ľĺÖi˛dg8čő®Ď]ÂŮ„ĂţLÜŻ;ç|~çwëđm%ňCg*߼ű˙$ď…ĂßüŃŢě3€MPę|ÎD]'şËD§ÎÖĎ“âm˙GţöŃňśs­ë—NLîĎ!NxÇ?ČßWV»÷úĂYfßDwfořýľăĚěć}U2Ńß6×ç˝Ă×[Ţú‰‡KdÉÎ7ťë7× Ŕ)ß©3öóëä.wćň@3€sř2®ŃÓ …şQ$F´\°­HŻ^ąţá l4Ë §ľÓWo}Ýe‰łĽŘŹî×Í{rÝ™˛ˇ>·Ý/˙Ľď Y~Ż·ťő<ó·ňÍ”eźďtg{¬żo Ř#eĆđ­˙ ? ‚X÷]Ć©­§™ íőOŔζ ·M{" ÖfAîÄ´ĺš €ű˙ú˝ţ”ýXČ´P7ŠŔ– ö éâ53ŚüKÖn_—kł†’·Ţé´WËöý{ĺ ¦ąďćýÚř™÷ÜÎľ2űoü~ă—Jůţz©Ş\"ăL{Ç4ůű*gÜťm¶óܵÁiŰłUîťeÂÔ;ĺëÓ×ÉÁűz~Yŕ»ÜŔřąç+ĺ˙NľËŮľSĆ-xFž®­–%“ÇÉÄ Îő>żNî ĎĽuśýô›‰;%ö—~âáżő·sxp´ĐÝř7暲—ýú3ű#""bˇjĐBÝ(#Z.ŘV¤‹Wm6Ş·/7ÝP2cflř;eÜ’gdă˙Ý´ŽO?·AŠđ7pňCÉ÷×Öľ)O?_™Ň'ëynű[)~t‡Tí÷÷﯑őˇeŞ]š|ŰLą·rŻ<ťŁZţů~ço["«Bďí”Ë­ż– Kß”ů­iBןIńţŹBÇ ›ŔÖďŰţ‘4ţtżüŮ8§żÓŔ“ëĺ˙ŘŹ~{V6Ěý™ü™sĽ kSÇęÇ´1ŚuŹîröŐIÝo;˝sâĘ_§‡§ ß}÷]ąrĺJF›Ů×_[>{ĐŠtqúŐż4áŻVÔDDDDÄüĘ7ě Z^ĹüŔďÖË˙ű˛<ęÎřM× €ż:ëůҸZŮĺ†ÂưëE)sĆ)Ţď|VÂŰO[Ž8×ŕŚď|lüÓŇňgK[Rű!:jAo°ďÜąs)}ó)ŘV¤‹Ó˙÷/ů‹8XÍł”öڧ-/Šb—€n‘éăvČ—&ÖČâýéK&{đ·÷_–Gg…—‚¶/nyîw¦ňW˙é¨Ô¶úËM#ú†Cŕ‘Ť`Z‘.NµB&""""ć®öڧ-/Šb^ßüéĹ÷eńÜ=ţűswÉ_=öľô°óąµQľžX :JÜ)g÷Ö8cď÷–•ÎoŰdséĎäKsßI.íżÇ7az ¬…ČÎyŢŮ[+_5a¶sĚźM®•ÍÁ2~G"ü5€=hEş8ŐŠ»Ú3Vś´Ľ(Šů €ŰŻHís5ň?Ćî;wš 7;íî,[w)čŕ´wÜË2˝¶Ík7ámZűźM~3±Ľ´;Ö‚Łrö╤潾ţącdŔťrůÝfąwŞ3öÄ:©Sű`ˇjBŕ‘Ť`Z‘.Nµ"&""""ć®öڧ-/Šbţŕß¶ÉŮ”}ť˛yÁůźŹ]t>§Ŕf¶îżĚ5KA×Ę_ 0řŢĂYÂۉoĘ+n¸Ű–¶ätúXýwşcĄôy·^ţźĐ5"Ž´`Z‘.Nµ"&""""ć®öڧ-/ŠbŢŕĆG÷Č—&ÖĘć_~$ąłgĺŻĆýLŠkMp›;ţö¨ü•;s7Ę;€Cfť˝;ȸý¤Üé.]Ý"-&pnż"Żü“3ÎÔ#Ň>q{ĐŠtqŞ11wµg¬85hyQó¸t›ĽRY“xwî—Ć푿Ş<+ąmJěxyçţá €CËC¦\2ĆG-ďČôYÁ{ŚwČźM}Sv]äŔź`Z‘.Nµ"&""""ć®öڧ-/ŠâđĽó&ŘV¤‹S­‰ą«=cĹ©AË‹˘HŚhą`Z‘.Nµ"&""""ć®öڧ-/Š"0˘ĺ€=hEş8ŐŠ»Ú3Vś´Ľ(ŠŔ– ö éâT+b""""bîjĎXqjĐň˘(#Z.ŘV¤‹S­‰ą«=cĹ©AË‹˘HŚhą`Z‘.Nµ"&""""ć®öڧ-/Š"0˘ĺ€=hEş8ŐŠ»Ú3Vś´Ľ(ŠŔ– ö éâT+b""""bîjĎXqjĐň˘(#Z.ŘV¤‹S­‰ą«=cĹ©AË‹˘HŚhą`Z‘.Nµ"&""""ć®öڧ-/Š"0˘ĺ€=hEş8ŐŠ»Ú3Vś´Ľ(ŠŔ– ö éâT+b""""bîjĎXqjĐň˘(#Z.ŘV¤‹S­‰ą«=cĹ©AË‹˘HŚhą`Z‘.Nµ"&""""ć®öڧ-/Š"0˘ĺ€=hEş8ŐŠC÷5iýü éhzRiCDDDĽąÔž±âÔ ĺEQ$F´\ű¸$µ˙öĽl ąeW­4\íőŰEÚŹîIi÷Ü# ×ýŇ+WNÔĘîm~۶=R}´ÍŮ›ÄăĐ%+ɇ‡ž—Ú‹ŢçÎÓŐz8ĺ»ëĎJ{o‡4ě ÷Oşăh‡w`‚Ě{Ý´íU©»ľRsž#˛{× ~źd÷ˇłŇĺ·ą\<ś:†ă–}GäL·ß~őěŘvD®ř›Wę_őmţŘ€V¤‹S­9d«/ţ"""bÁ¨=cĹ©AË‹˘řĄË—/ "Ú«}P45ĚíşxX¶üŰ«Ňěšý…·˝ňáˇdÓ®Ăr溤öv_’†}Ď˦}'ĄÝÝ!îď<×›d‡{ťţ9®;ç8t25d5Á쮦Ä93IżWöÖ:÷Z+gü Ř˝†mŻJĂĹn/ŔîíćÎým;,9qúyz»ĺĂŁŻ:ăc÷Ę™i´{ýÉó€hEş8ŐŠC– Hí+N Z¨E`D˵ŹĚPÔ`ĚęV/­ĚĚš°x›l¶IÝ®çewKö1r€MčjBXSepʾ[ů.‚@wK0{·źó¸×żď¤7[8%đőBňĚÉ7Z‘.Nµ"ć%FDDÄR{ĆŠSęF‘Ńrích° pÁh˝-ŻĘ¦gÝ™´C€»OËn©ĺć«ÁZËi "îm=,[ücşN8ç÷Ż7«GdK°¬sçé=+Őfćt8ô5ߍ»$th1XV¤‹S­9Ë›nHß'ÇĄ\iCDDDĽŐž±âÔ …şQ$F´\űPBQwöjÚĐiďĽ ‚Zŕł|3Ą9ŔýśÇĄű¬ÔîóßÍ»mŹÔ¶¦Á9Ŕiă›ĺžý÷›ó÷f{3zýČýž'í»ôgďŢĄ˝Źl@+ŇĹ©VIJĚFDDÄR{ĆŠSęF‘ŃríC E˙mŹÔ]L†şn0{ŕ´ôöö†ôÚ®Ôż}đ>ç8çł{K+§Ŕýś'…Ţů°Ţ;-¸ÎupÝŐäř]ʏď>挞±śAäŔîű‘ZşbC+ŇĹ©VIJŔX@jĎXqjĐBÝ(#Z®}¤…˘f©ĺ´wúęá­ŹŚf{°7K··µ6ů~ÜNźm/8çö¶˛žÇ\›˙ŃŁCśńđŘ%Ç8}ąk3 Ůťˇë.3ťŮîśÜ Şłxű9Ź{ýűN§Ţă€×q˘éâT+bY`DDD, µg¬85hˇn €-×>2CŃ+ő©K!g fĹ{×í¦]‡ĺĚu/˘ííľ$ űžO >{ťól{^vÔ_ňŇŢnůĐ9Ϧ]'}˛ťÇ°[4ɇÝŢ9Ľ™»ŻĘ±đ*Đ€{Żź–jçşRf!›eˇ/v{so‡4đgń túyĚ˝}U¶há10€ŐhEş8ŐŠC÷5iýü B`DDD,µg¬85hˇn €-×>”Y±nXkf{›n(š±LtxömŻ\9Q+»·m/Čîúłił}Âďđuúě8Đ$WBÓzłź§[ÎÔż*;‚sl{5e™j—śŕԱͻ„«Ź¶ĄĚ.îj="»w%Żs÷ˇ´{1çIÇą—}GäLÚ+‰]€¬F+ŇĹ©VÄDDDDÄÜŐž±âÔ …şQ$F´Ü›w夶ŐDŞ˝rćP­4kÁ(€hEş8ŐŠ»Ú3Vś´P7ŠŔ–[ôşË3{łc·8ÍěW°­H§ZsW{ĆŠSęF‘ŃrŔ´"]śjELDDDDĚ]í+N Z¨E`DË{ĐŠtqŞ11wµg¬85hˇn €-ěA+ŇĹ©VÄDDDDÄÜŐž±âÔ …şQĚ[üë‹gäéăOHŮĎçËo}gČšqĚxf\í|…˘mĽŐĐ8bÚ†V¤‹S­‰ą«=cĹ©A uŁ·ř™ăOŞAîPÝüÎFő|7‡5ňýŞQö#&{ĐŠtqŞ11wµg¬85hˇnó/?rżŕ—ÖĎsýA}‰|˙­ą‰mÓöD›·ť®W;ß ÜżJľýĎøîXľż_Ů? ˇ8—kôyp4 ö éâT+b""""bîjĎXqjĐBÝ(ć-ÖÂŰ|©ťĎ*óç"pA ö éâT+b""""bîjĎXqjĐBÝ(ŽHüAÇŻär÷EyýĂ—ĄâťŐrţĆŻÝí5GËäřµFůug‹üŞý„Ű×ĚN?^;źëŃ­ňÝ)Sä˙Wä8e<Ľ˙Ľ»ż±âayř_~,÷řmffíy·˙Fů~Ĺ/}ľżćűňmslŃtągŤßÇ„˛Ą?–‡çL÷Çýľ<{Ô?ß™šŚýŤs˝mŁćž—WÖĚMŚűwĄ[ĄŃW3‡®íüţеOďď<écáÍ*ŘV¤‹S­‰ą«=cĹ©A uŁ8"đ˙éżĺ'ďţXýĺĄöâ+rúú)wűźŽ,’ÇŹ˙łÓţ…TĽłJ=Ö¨ťĎřĘ?}O*~ĺo˙ŞFţç¤ŮůlÂŇo—ľ ÇÝ~ďÉłĄ ¤â„ó9%ž+÷T4řˇď ů÷ŇŮňđćsŤ|ĘòŰ÷7~,÷,Ü*qÖüX^ ÎwľAV—n·ĚçđĚ\ç÷óĺóҸĺ!\M-ţĄ¬[¸J^9ďő9t«Üżć?Ľ>Ě.HŔ´"]śjEL«Ýp\:>˙Búν&_®ľ }Î玦'őľY,oş1¨ă‚söĽůşţ~ť>MJj–ĘýĎÜ-_^R"÷;źKÖ}Kď;ŚŽYw˙đś×’űCDD «=cĹ©A uŁ8"pÇŰźwýúyůôłnđ«µkjç3š™˛7eş|{Ęůîúä-?45ł{׳vĂŰi3€Ă}LŰýn[ć˛Ě»—>,ŻśŮ*÷3p~_vs¦łż”gKÍ5M—ż[¸JÖí/e¬TőŔŤ[ľď˙íéß“VÔ¸ˇ¶Ű‡¸ {ĐŠtqŞ1íö5i BS?Lm­Níł÷ÜŮÚŽjNÇW_dp;đőÍ»ezŠúaéô%Zżţ˝ý™ą]Ůo‡Cż?DDÄ|«=cĹ©A uŁ8"p÷gźĘÎ3[ätGłżďüúر•î `ÓţÇ/ţqLXí|aĎźiW*’żsgę2>üců®ź—ĄË+'ţUî f⦫łçĎČńĂ/ČĂ%ÁĚbM=öďXîÝî˝řňţ‡Ć˝,Ç+Čý/{ź3ŐŕyŘĽ7ŘźÍ|ůÄF™±ôďsř§űĚń'Őó ŐŚ% †BŮĽéŚéÂIçös~ÄTŔ´"]śjEĚŃn|đ“ňöąô%ź-×ĚćÄ ŕ €s9""bĚjĎXqjĐBÝ(ć-ţőĹ3n\öóůjU3ŽĎŚ«ťo¨ŽlŚ8xŔ´"]śjEĚŃnĘ2Ěî{v•@7k<řăË›nô;nîe čěŢţLÚ;sMüĚÝý÷1íéł„‡-ÎĽ>ł$täŔîď™óýť{MoGDDĚłÚ3Vś´P7Šy €qx{ĐŠtqŞ1G˝A±ür¬¦›´ńř˝ç˛·ěpŔáĺźő% ˝ĐWkO_>Ú3čęí‰1–÷˙zűÜcBçI†ĽŢ{~%Ď”DžlBřľĎÓŢĹŚ8ŚjĎXqjĐBÝ(#Z.ŘV¤‹S­‰hŤýÍ$΢ ŕ‡> 1wµg¬85hˇn €-ěA+ŇĹ©VÄDŚÓ”YĘéďĐפufN#""fS{ĆŠSęF‘ŃrŔ´"]śjELDDDDĚ]í+N Z¨E`DË{ĐŠtqŞ11wµg¬85hˇn €-ěA+ŇĹ©VÄDDDDÄÜŐž±âÔ …şQ$F´\°­H§ZsW{ĆŠSęF‘ŃrŔ´"]śjELDDDDĚ]í+N Z¨E`DË{ĐŠtqŞ11wµg¬85hˇn €-ěA+ŇĹ©VÄDDDDÄÜŐž±âÔ …şQ$F´\°­H§ZsW{ĆŠSęF‘ŃrŔ´"]śjELDDDDĚ]í+N Z¨Ĺ/őőő "Ú+ŘV¤‹S­‰ą«=cĹ©A uŁHŚhą`Z‘.Nµ"¦Őn8.ź!}ç^“/W_>çsGÓ“zß!ű¤Ľý‰s®OŽKąÚ®8Ü×7}š”Ô,•űźą[ľĽ¤Dîw>—¬ű–Ţwłîţá9Ż%÷‡Eí+N Z¨E`DË{ĐŠtqŞ1íö5i BU?lm­ÖúĺË'ĺísŕażľ»ezŠúaéô%Zżţ˝ý™ą]Ůo‡Cż?DDÄ‘V{ĆŠSęF‘ŃrŔ´"]śjEL»őV7TuÖňö†Ô>ĺM7Ü™·®ź—·ĎĄöŮ{Îos˝ {CÇăí­Őépj{ćěŕŻ/1ł8ăÜąč¤n(ę¤÷ËÝÓSűÜţĚRwć¬ë3%2ýĹi2&tl˘Í7°Çş¬?÷ţšP`śŘ§ĚĚőۦŻógń¦ëú-ąűĹ Íąö%^ßäXß""˘mjĎXqjĐBÝ(#Z.ŘV¤‹S­i·&< BU¶¦†¨nřk–_öąË0'CXţ¦,ÉlBÚD;ŘN y÷¦…Éîř)!pöëKöllÔ 5aiZŔş¤$%5K5ßź€=ś,Ăçlßť> 7í<áýéq¸ź “sh¶oĐ űCDD´Pí+N Z¨E`DË{ĐŠtqŞ1GŻO°\ók҇}Ë›.xí†ăŇšńľ^çDŔëÍîMĚţM8 w¸ ϰ5f¨ąŔÓµp7l–8eÉć”±îÍFöíoDDÄQ¤öڧ-ÔŤ"0˘ĺ€=hEş8ŐŠŁ×á€ßBÍlŢA̱8—s!""Z®öڧ-ÔŤ"0˘ĺ€=hEş8ŐŠŁYłtĘĎţrËî;yťíŚ%śSB]ÓWYR:´ÄsćřŃ»¦á9|ű3iďĚ5đ3w÷ßÇ´§Ď¶8óúĚ’Đ‘g»ďVvľ?%ĚGDDŚCí+N Z¨E`DË{ĐŠtqŞ1G»ć=żá%šđ×3sç”ö \ ÄBěA+ŇĹ©VÄDDDDÄÜŐž±âÔ …şQĚ[ü`í 5ČŞËžTĎ7(—˘uŤzŰPl(—ĺ Ęţ­_].őĘ~}€=hEş8ŐŠ»Ú3Vś´P7Šy €oű·Cj€;T͸Úů¬’‡Q°­H§ZsW{ĆŠSęF1o°Ţţáó/äj÷äĺÓ—eńwäw}_Čť}Ĺ;ŹHóµOäň§ż—7Ď_“»wÔKĎgź»mËťrŹý˙žz=1Žv>×sű¤tÚTą«ŘqZ©¬mčq÷·n.—µ[7Ę żÍĚúíqűo‘ĺ›Ď'ú,ŻX&EćŘâY2ŁÂďÓ×(ËË6ĘÚ’Yţ¸Ëdç9˙|ťŤű[7/đ¶Ť«Íě⩯XwJŮ>iuÇŐm«{cýꥲůšż}­QÖ®«‘6çł e‹Ęjä’Űďšě,+•Í—ťĎ)đ™±ů?˝,/—Í•µÇĚçFY>­\úăvŰ(3–ě“3NĹF©Î×óT”m’ó9<Ř9Çü pîë‘Ö—ńÇU|“L)Ů"-nčŰ'm ŹËŚŠăÎgs Ëd§ąfÓďŘ&YţŇůDhŰö†sľ7z¤ďrŁ=ç…ŢĆ–ŞĄ‰sĄĚîďř ­ěA+ŇĹ©VÄDDDDÄÜŐž±âÔ …şQÖŘĚřýŐµňč[-ňdăůçş_ÉŽć‹nđ[él˙â7íŇŐë»á$ŕ?Ď1îiŘ(S¦Í’˘iĄRZU“RÍěާ‚Y»áí´Ŕá>¦m©ŰÖ(ËÝ™ĽÉ¶+ĘĄľsźĚ÷gŐ&]&5ćś)K@ź—ťećšfÉ”%ŹËS ×RĆ ŰńŇŇ~–ŽN˝†ŁÁ,ߤEÍNŰ59¸®ÔźŮ대ű?>8Ú,ŘV¤‹S­‰ą«=cĹ©A uŁ8¬đç˙ý§Äç-'ÎËń+îĚßű^;.ß«yGÖýü´»L´ißÔtVţóĂkîç\göt~ ő›‘)îLÝAŔ§6J©÷HMYąÔ_Ţ.óÝŮąˇcµw÷tĘĄS5˛vQ0ł8Ó\`3Óyggzsü2)})Ĺ캎pÜßń8:{ĐŠtqŞ11wµg¬85hˇn‡56łzMkŢçűv‘m'?tŕ[7t_3ăwíĎO»}gím”Ň︟oy*uśôsy^–ť«CK2w6ĘŞ%Ţűrs €—JibYä´% K’ă&—€6ďÖ] k3z{¤íZ§÷ąˇ\ćď÷—TnŘ·O.m.•ĄuŢç Ó–€î8¶I–V™™ą©pŹ3ţ”˛iőűő]»ě.u}iëRgl˙®5ĘSKf…ŕĄň˛ßżżăÝĎh˝…NÝCăeěš“ţV:ge}ńTYßęo 3Z‘.Nµ"&""""ć®öڧ-ÔŤâ°ŔůR;ź±çÔ)ťć/k<Í„ł^›[ĽLJW/ó—Ož%ß©jöCŰFYľ¨\V•řË&O+—šPČĽ6±®”nýŔŰ­Ć[şd»\r—e^X–ą¨lźJ×’n[Ýă2Ăż‡˘˛-r iÓg!÷IËÖŕZť~‹6J˝™ŃŰă\Ďloß]Ó–ÉS&öÇÝżÔÝ?cëĺţŹŤŹöZXtHícOHíu3ťë‡eÍc‡ĄÝß$Č'˝ţŻ ­H§ZsW{ĆŠSęF1ođ^÷fď† żË÷«Žf6p°Ľł™l>}L{úĚ_ăµ'Ôó ŐŚ% f†ŻC×Ó_“.čçü©ş­U2ˇ¸JÎř›Ŕ¸Ú$Ő‡NK—ż™J·ś©Ż•ş‹„ŔˇéâT+bZí†ăŇńůŇwî5ůrőés>w4=™l÷÷eěOłĽéFÖvkčţqÄŐž±âÔ …şQĚ[üQ×ďÜř/žy##ÄŚf3žW;ßPŮqđŽVľ4v‡˙)WLţGÎ vk'*ĎzáočŔ[Ü 8=îş•SeŚŰgĽLx¨V®ř-OÖr%ůs«jEL»}MZĐÓC[«•~ŐnŇ`4Çű‚÷Ýňçrź˛uµg¬85hˇnó#âđ8Z‰2gô&`Ă3€››,cć<+ÍÝÎF÷YŮ1o|ňX€BÁůł_w¨VŞ˱«"]-‡ýmc“\‘ni>tXŽqűż3WŽÖJÓWşOKíˇ&9V#±,{›KŚ}Ä=Om‹ů P8hEş8ŐŠvë nčé 7äí é}ű €łÍöŰZ›üY¶®do¸Źţ`ŚľOŽKy¤ăo•˝çBÇÔ~î‚´†Ď‘Óý?)o˘ŹťÝŻË¦/Y¤ąékÉ>÷Ýâí{ńĎż!_ţÚźű}üŔŘßúOţóŻ&űúÇgśă+˙[&'ÚG§Ú3Vś´P7ŠŔ–;Zů¸IĘĆĄëőV>ô7 äÖµzK9÷^=)µNzďÍN™lŕÔđ6%vC_oŚ®Ö#R]Ö}Cđ‡&>Úć˝-¸·Ă € ĐĐŠtqŞ1íÖ„›AčiÂĐ~BÎfg Cc¦őŰ{.-p5ý3BŕlǧĎ&ÄM;>Ün–ŞN?§űlě9ŕ ŕ˙ýżĺĹpxël—!ń×ţ<%06m›Bđ}·|UĘ˙w¨Ý„Ć„Ŕ8ĘŐž±âÔ …şQ$F´\ŰxôßšsräŕòPů‡ň–q«¤Áí Pt]4łzkĄ¶ľIš[;’K>gŔŢĚ߀ÔŔˇĄ˘ÇuČ1¶p€9† ŤŚź;cV+bަ©ö×îěOYRyĂqiMôK›ý›05đÍzĽywoĐć[Ţt!*á­2ö™KuSĚë3Ś3G©Ú3Vś´P7ŠŔ–k&ÜÍ…¸fŻ9Ń!í×Ăv{ł Š^éş~IšŹšĄźű›L 0´"]śjEĚ›Âa €ź”·Ď…gă*9N3}†đ8|đ7¤üfű""âͧöڧ-ÔŤ"0˘ĺÚĆđŔădć¶KŇŢrI®8{2ŕ[Ę–‹Ň|±ÍŮ‘[3Yn)^+uW{Ez»Ąy×*Ys”p oi熋ţöĐ{VęÜwţ: 9vúś` h­H§Zó¦pX`oIćĆÍv|ĆŇiˇrF» €•Đ8»C]:´Ló˙6Ë=§ÂŔÉwţz3~Ăď6ďN}'°˘ąg3ű9ň}#""ĆŁöڧ-ÔŤ"0˘ĺÚĆđŔ"Wö-–±ćąń+¤úzZ,m˛űľ‰î?€cŞ•öŚĂmRýĐTăţ#9^î÷¬43ý ŤîłRw¨Ö]şÚĽË×ü.mrĚÝgáÁŔî‰±Ź¸ç!€B#˝@·Zsôšľ|r`„Đ^mŢßëísCÜ t ‡ľć=ľÉcŤQŽĎ\F:÷;v$‡{ˇŻ¶<ó7¤ü+ᥛ=Sfü¦,óüU)˙š7V8ô˝ď–ÔăÓ—€vß{üyzPŽhŻÚ3Vś´P7ŠŔ–kąŔpócBăşVţ+ (,´"]śjELÄ85!xÖYÖ–©=cĹ©A uŁHŚhą¶A P¸tµIÎř53…ÓŢ PhEş8ŐŠńifHrć2""bLjĎXqjĐBÝ(#Z®m2Ýr¦>ąĽt]+é/Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ0€˝lŻ­GDDDDĽé´ ­H§ZÓj7—ŽĎżľsŻÉ—«/HźóąŁéÉd»ż/cˇ8Đ÷“7_“ÖBýŽÓÔž±âÔ …şQ$F´\Ű €BF+ŇĹ©VÄ´ŰPđ臝­ŐJżę Nćřý Ő‚ý~3Őž±âÔ …şQ$F´\Ű €BF+ŇĹ©VÄ´[/ŕtCM7ŕĽ!ooHďăŘ_@ĚőMéăĎmm ÷ą {ĂÇýIyű“ Í9wµ××'8Ţ\Ë›n¸Ű)çČv~×,ă»íŢýÇ÷}r\ĘSŽĎĺű Α~o$FDDL¨=cĹ©A uŁHŚhą¶A …ŚV¤‹S­i·&Ľ BMvöböż&{CčŢsi3dÝ74fÚ8©ýCłmCýSĆŰp\ZĂíś ń÷žK tÍő¦„Ŕą|?ŔůT{ĆŠSęF‘Ńrm ­H§Zsx Ďp ;„0Rłß€Ň UĂçN€űpťcÓgܦź'ëńĆlçhüĚc=óüÝ  ;ł9cć1""báŞ=cĹ©A uŁHŚhą¶A …ŚV¤‹S­yS¨ŔáٱľémÖW hÓެÇtţĆwŽ?gIđŞ~ż…©öڧ-ÔŤbŢŕO~ß)[[ţU~xd<đÖw†¬ÇŚgĆŐ·X(Ú02Z‘.Nµ"ćMˇP¦¬ŢŚÚÜŕĚ%Í’Íé3€Ógě¦lpţĆ7ło3ď+Ş,ŤOµg¬85hˇnó˙´ĺi5Č5.­ź'Ö˙Łü ľDľ˙Ö\÷łŃ´ýŔo3}ŇŹ3îxłz>Ôl”ĺ%[¤UmĂŃŞm@!ŁéâT+bŽ^sX^şÚĽă7ŘCŢnň¶Ý6Ôćno8.ţvz¨ôë8w!upJ»3~µ7FâřlçĎi|/NŽaŚä#""ćSí+N Z¨ĹĽŔ˙˘T p‡ŞW;ß lx\ŠÖ5ęmC±ˇ\–7(űG\ŕ›QŰ €BF+ŇĹ©VÄÄwjmĐęŐ„ŔŔYŐÂŰŔŁW.ďw4Ëľs?“uM+ääÇMňAÇŻdŐŰKĄţżJS[ŰÇô53„ÓŹ×Îg•Ŕ8ŚÚ02Z‘.Nµ"&f7enú;{óŕpŹŹůU{ĆŠSęFqD`Ă l–Ťď–ËëźĽ/[O˙«¬řĹ÷äŮ_=é¶˙Ű{?QŹ5jçs=·OJ§M•»Š§•ĘÚ†wëćrY»uŁĚđŰ̬ß·˙Yľů|˘ĎňŠeRdŽ-ž%3*ü>&D-Ű(kKfůă.“ťçüóu6fěoÝĽŔŰ6®6ł‹{¤ľbAbÜ)eű˛˛Îą–<.kg;}ýŕ¶e«rM=ÍňT™Ţ”kí“¶7ĘCý—ůŔ7ť¶A …ŚV¤‹S­‰ą«=cĹ©A uŁ8"pçŻ'>ďiÝ&źôvČcÇV&ö]˙ĂljϚÚůŚő«—ĘćkţöµFY»®FÚśĎ&”-*«‘Knżk˛ł¬T6_v>§Ŕ dĆćü ő˛Ľ\6WÖ3źeů´r9čŹŰqlŁĚX˛O:Ě8Ą>8_ĎRQ¶IZĚçđ `çóŔąŻGZ_zÄWÓśk™ě4×f¶Źm’ĺ/ťO w—żŃ#}—ĺč9/Ü6¶T-őĆ쬑ŇEĺh§ßż®\Š€o:m ­H§ZsW{ĆŠSęFqDŕŽ?¶Ë¦SŹË;×Ţ–Ďü»Ľwý]YٸD¬˙GwÉçžľnuéç@í|Ćž†Ť2eÚ,)šV*ĄU5ŇŇăí7ł{ź f톷Óf‡ű¶Ąn[Ł,wgň&Ű®(—úÎ}2ßťiv™Ôs¦,}^v–™kš%S–<.O5\K+ŐÔs­fů&-ŞhvÚ®ÉÁuĄţL_O÷|ÎyKM@Źř¦Ó6€ ŃŠtqŞ11wµg¬85hˇnG$ľŃŰ)Ýź}*G®Ľ)Ď4W¸ŰĆ'O¬vŰŰ~w%ă°ÚůÂöt~ ő›‘)îLÝAŔ§6J©÷HMYąÔ_Ţ.ó+އö‡ÔŢÜÓ)—NŐČÚEÁĚbÍÔs™Í;ýŮĽa;^Z&Ą/ł•ó„¶1:ŕòđÖ©˛ľŐßČZ‘.Nµ"&""""ć®öڧ-ÔŤâŔCU;źY¶yçęĐ’ĚťŤ˛j‰~ć/•ŇÄrËiK@—$ÇM.}^ž*Y k3z{¤íZ§÷ąˇ\ćď÷؆ŤˇqűäŇćRYZç}Î45îqĆ™RV#­ţLćľk—Ý%­/m]ęŚáźëZŁ<µd–§/Ýđ8K@ß„Ú0ŔÍJŻ˙«ýüţĄGäúKgĺ `$ŃŠtqŞ11wµg¬85hˇnG$6Ë;‡—xÖ¶ĎšÚůŚ=§¶Hé4Yäi&śőBŘÜŕeRşz™ż¬ň,ůNUłÚ6ĘňE岪Ä_ŽyZąÔ„B浉ýsĄtëŢţk5ŢňĐ%Űĺ’»\ó‚ÄrÍEeű˛˛©°±ekpMα‹6J˝ w{śóÎööÝ5m™sL€‚"kś?Ľx‚|üěërŁv·´O3Ađ é ý•Ť`îĎ–©11wµg¬85hˇnóňűN7ţá‘jU3ŽĎŚ«ťo¨ŽlŚ8xm#×řKcwřź"pb­ÜqëTy¸ľMzť˙»R˙„,ŢtV¤űU™yëx™ąë¬^uµTÉg»ě¨9¨M¶Ě'cćí‘3&×í>-•něŔî±eńˇ`̵2aÜRK 7+ÝgĄîP­T0–cWÍß™Ăţ¶±I®H·4:, Gʏ}šťżWŽÖJÓ×üŞ=Ô$ÇęCc\÷†6ߎ%Ć>âž§¶%ő/“ß#ťÎ_]—Ă?pg|ŘltH×ę`†đ·äÚęźËgÎŢĎNnŹţÚŰ÷ŃěŕřÔ 69îYé4ˇň´źČ‚0wŃ÷䚎ľÓOËÇ“ĚXŽ“ćű×áłh‚·oö ·/0 ­H§ZsW{ĆŠSęF1o0"ʶ1śpĂĘńrÇc§ý­$íŰJä–yݦĚ\Ľ˛i¶ÜňŔa‘ë/Č=·.”Ýá ęęłRäŔ_ÚĆÉÂCţŔM† rëZ˝Ąś{Żž”Ú'ĄÝl¤Ě6pjx›»ˇŻ7FWë©®?ëľ!řC 5˙1…Co‡g€{ĺwÉí?üě^÷óő†KňűĂËüжE:Šż)W§="Ýżi‘ÎEßňűG€o/’ŹV,“ON˙RÚMĽh·üţ7ďzc9ýş_ťďôů–|üł–Äy €`°hEş8ŐŠ»Ú3Vś´P7ŠŔ–kĂ÷Ěž©ś**é„>‡”[Š«äLk•L0żú»=’ď6Çj˙€Ţł­Ăď psŃuŃĚę­•Úú&iníHţ‡°7ó7 uph©čÄqrĚź-`ŽŃ`Ę~K>úŮYůÂ9çŤEáýž×~üc7˝VĺýO˝ŕ Ě=Yž2¶ç¤˝ĚűŐ»§´c"˘ýڧZłŕÝp\:>˙Búν&_®ľ }Î玦'őľq8Ü×7}š”Ô,•űźą[ľĽ¤Dîw>—¬ű–Ţ7Í1ëîwúß/wO×Űóâ®q8Ôž±âÔ …şQ$F´\Ű0p.Ú4xĚ}ŻĘ•ëŇ65ł¸É蕮뗤ů¨YúążŔĂ{ďţd…ůü-io2-Ň9ď›ruRąô¸=Eľ0˙Ó±C>ş=OpÓ#NźoĘÇŻ&ŻÉśŁËŔýs×`Z‘.Nµ"&ľ&­A¨ę‡­­ŐZż¸îë»[¦ˇŞ¶N_˘őÓ˝ý™a€‡x}ůV{ĆŠSęF‘ŃrmĂ„»ąźwŻ•™–®Św?+÷Ś ŢÜ-»ç ôŕбWŹČú•N_s(ŔM‡·´sĂEoůfé=+uî;†;}ND]Ú_’Ů kť¶gg¸íµu?—?śŢ-O2ýú[:zťý§ýĺś €ĺçŢůţzľ|rú’tŻs®ĹiűC°ôK, CG+ŇĹ©VÄD/`uCU7`˝!oođŰü·­Mţ,\× ˛7||0C×79;×·ď“ Ňú‰\˘ox ż_ŕ'ÇĄ<Ń–lWŻ/á“ňvpŽ”ýąč¬n¨ę¬in0×7}ö­{cx}r?ţögüţKÂ}Ňĺ®q„Őž±âÔ …şQ$F´\ŰÖء˝~•Lçý#7fŇBY —z[ž•™“Ć{˙Ž›*‹´ąű]şOĘz7ôőÚĘę÷$–€6tť¨’™ăý<ÇÍvÚYţnbşĎJݡZwčjó.ß«~,mrĚÝgáÁŔî‰±Ź¸çÉ‹|憯Á¬ÜéZí…Ŕ&˝¶âu7î;ąA>2Áíí¤­8zťc/“6·ďůx‘9n ŘëôÓň±;†łŇ|é €ż%wż„Ş&l-‘ŰĂíÓď–ŰC« mĂ3p!n˘OÚ9>gú5 p}#¬öڧ-ÔŤ"0˘ĺÚF®0Üüи®5óCz€ `Z‘.Nµ"&`(¬uÝp\ZSŢÁ›67|¶ Ě5°yŹŻůś3óXĎÁąĂĄ77ÁkLpĂŰ®KJBű†z<""˘]jĎXqjĐBÝ(#Z®m.]­G’3~ÍLá´wç`°­H§Z0kžťë›Ň Ř9ţ\ú’Ď6ž}ë›ÎŞďNôęńö©=cĹ©A uŁHŚhą¶A PČtË™úäňŇu­yNFZ‘.Nµ"&`Ö8đŰźG™|«”7ÝH]RzPe člŢ-Ó_ś&cÂŰĘ Ţű3úË4ćxłŹežŃ^µg¬85hˇn €-×6€ ŃŠtqŞ11‹ŐćýżŢ˛Ěn`kB\;Ú†úô}~CŢnň¶[«CË;›ŕ×?Ö=Î?&Í{“cŁąĂ;.) -ß|żÜ˝ÎŰ6!îu÷§ěKôI›ńŰßń¦ÝťśrüR)Y÷­äń–©=cĹ©A uŁHŚhą¶A …ŚV¤‹S­‰§ęĐ«=cĹ©A uŁHŚhą¶A …ŚV¤‹S­‰—îňĎÁĚß´e mU{ĆŠSęF‘Ńrm ­H§ZsW{ĆŠSęF‘Ńrm ­H§ZsW{ĆŠSęF‘Ńrm ­H§ZsW{ĆŠSęF‘Ńrm ­H§ZsW{ĆŠSęF‘Ńrm ­H§ZsW{ĆŠSęF‘Ńrm ­H§ZsW{ĆŠSęF‘Ńrm ­H§ZsW{ĆŠSęF‘Ńrm ­H§ZsW{ĆŠSęF‘ŃrmŔ^¶×Ö#""""ŢtÚ†V¤‹S­‰ą«=cĹ©A uŁHŚhą¶A …ŚV¤‹S­‰ą«=cĹ©A uŁHŚhą¶A …ŚV¤‹S­i»ĺM7¤ďó ˛WiCDDDiµg¬85hˇn €-×6€ ŃŠtqŞ1G&n­ÖŰGRí+N Z¨E`D˵ `(d´"]śjEĚQaő`DDD´Bí+N Z¨E`D˵ `(d´"]śjEĚQ!0"""Z˘öڧ-ÔŤbŢŕî]R·˝F¶ŻxJž/«˛f3žW;6Ęň’-ŇŞ¶áÍ m@!ŁéâT+bŽź”·?ůB:šžTÚGNí+N Z¨ĹĽŔ˙ąă€äŐúkŐó ʆǥh]ŁŢ6Ęey˛DĚ!>·E–o>Ż·ˇőÚ02Z‘.Nµ"ć¨Ŕh‰Ú3Vś´P7Šy €wţč5Ŕ5V?ąC^ß´[^\ý¬üĚégÜýčsî,ßęĘR]±Cö˙d§z¬W;źUă0jŔPČhEş8ŐŠŁÂlđ†ăŇńůŇwî5˝1ŹjĎXqjĐBÝ(ć-ÖÂŰ@ĂÇ—®Ę…“gäř9yč¨\üŐY9üÓ×äěńÓnűoZÎą}·ţpcĆńÚů\Ďí“ŇiSĺ®bÇiĄ˛¶ˇÇÝßşą\ÖnÝ(3ü63ë·Çíź BMźĺˤČ[ż!ooĐŰó©öڧ-ÔŤâŔÝźĘ{o—Ëď__Ľô¦ś¨ý…´6˝—X6şç“®ŚcÂjç3ÖŻ^*›ŻůŰ×eíşis>›P¶¨¬F.ąý®ÉβRŮ|Ůůś/›?đCŐËňrŮ\Y{Ě|n”ĺÓĘĺ ?nDZŤ2cÉ>é0ăTl”úŕ|=HEŮ&i1źĂ3€ťsĚçľi}é\Ŭp?××Y#Ą‹6ĘŃNď¶şr)rÝNiihvďß«ó-YZf®Űůşo÷űčď>ĐJm ­H§ZÓv˝€÷‚ěUÚŚ{Ďńn`DDD9µg¬85hˇnG$ţě˝ňë_ţJ>·OŢýŹ·ĺČ‹oČ{őďČ[;ČÖ‡~"ż»ŃíţŞkÔÎgěiŘ(S¦Í’˘iĄRZU#-=Ţ~3{ö©Đ¬ÖÄvJśÚÇ´-uŰ’!lŕÁĺRßąOć3i.“sΔ% ĎËÎ2sMłdĘ’Ç婆k)cĄ5îçúśs•ľáÍtNăĎěí9µEJgű3{ŤÁŚßpśí>c˘MÚ02Z‘.Nµ"ćčö5iÍ#"""ć[í+N Z¨Ĺ €˙ű‹˙N|6Ë?›ż}˝źÉˇŻv÷Éź$Ń®©ť/lOçRżů™âÎÔd|jŁ”ŞpŹÔ”•Kýĺí2żâxhHíŔ=ťréTŤ¬]Ě,VŚ××o|\Ö.13{¶óňÔj%ÎvhĄ¶A …ŚV¤‹S­‰ą«=cĹ©A uŁ8"pí3/ÉO˙é'îű}_\łYę¶˝&o>˙Şěxř_íéÇ„ŐÎg–EŢą:´”qg٬ZâžąŔKĄôĄóúĐ%Éq“K@ź—§JČÚÄŚŢi»Öé}n(—ůűýŕµachÜ>ą´ąT–Öyź3uÎ5{ŁugßöHëţeR”€űąľô% ÷—€6×,ĺěŚUW.SB3€K+šÝţn0Üß} •ÚĆđŔ‡eá­J­űů,7Q>ánXV¤‹S­‰ą«=cĹ©A uŁ8"đPŐÎgt—<žć/c<Í„š^›[ĽLJW/“"w äYňťŞf?lm”ĺ‹ĘeU‰ż”ň´r© …ĚkűçJéÖĽý×jĽe•K¶ËĄľkrpÝÜ©RT¶Ď aű±ukiâ¦8×óťDÜßőőIŰĺˇń—É ?čm})ŮĆş-˛j…›ŮÁî÷T.őf»żű@+µŤ‘ €`0\9Z+ WýŤ<ďńF;Z‘.Nµ"&""""ć®öڧ-ÔŤbŢŕşí5jxëúĂÔm3ŘŘ_{Ř˙Üq@=ßPÍXb9acĆ;€‡®3¦Ř&]ĐĎů=űż>,4mŔn€†­H§ZsW{ĆŠSęF1op÷Ť.7Ţľâ)5ČŤŞÇŚgĆŐÎ7TG6Ž.0ÚĆČŔćóTYßęnHíădBe­l™7ŃűGpÜT)«ďöÚëWÉ„qŢ?ŽcŠWHuXµVÉg̡ö±ó^3~łôž–Ęy“eŚűëx™đP­\ń›şŇƬ˝î7X 0ŔđâţLj‘ZsW{ĆŠSęF1o0"ʶ‘küĄ±;üOQČßrëly¸ľMzĄ[š+§Ę-ăVIilyBîW"•-&î–3»Ęâ*/äuŕq2öľ=rĆiî˝Z+ ÇŤ“{¶u¸}wĎ'cćymŇ}ZÖ;Ű+›śŤł˛~ŇD/dîuÎw VŽ™ń,Ƕu'NJ­óg¶Úxô’ówĆçęI© ö8âýąwqţŢÔö÷×Jí ó÷Ě#%č¤\ :]=÷°óűg\Ký%éňšF-Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚFśđ‡Žx.Éö†•ăeBĺYżá¬¬/ž*•ťŹn<[*C3ĎđřĂ"×_{n](»!ĂŐgĄČ˝†KRY¸ÝŇ|¨Vę.:[˝gĄîŔaiö˙Ľ÷^m’ęMîŚ÷ö™ÇÔş˙AE(vŹwúűz/:Ç×{ár×Ő6iţuź–Z\÷ZęĎúˇo›4¨•c̤€QŽV¤‹S­‰ą«=cĹ©A uŁHŚhą¶gśň&Ű˝ŮÁ鎗˛ŁN7 čđ{…°i f 'ť÷j­”Íń–śľĂĚ ö:XMĘŚ]‡ŢÖ#^¸ë˙šÄ z®vȱP0ěbÂáC^p›ď˘s|b–o ôĘőÓR猕ľ?őZ‚óů›Ł”Ěź?ăU+b""""bîjĎXqjĐBÝ(#Z®m8G2vg?vRÚŻw¤Ře¦&f €łÎŃ}ZÖËFŘÍpŔîńő—Ľö‚qü©Ái3€ €ŕfC+ŇĹ©VÄDDDDÄÜŐž±âÔ …şQ$F´\Ű0án.Śd,'ÖĘÎgďýŔ˝ŇŐ˛GĘkň–ťÍKć;€+çŚ÷ŢÜ}XÖ¬¬•ćî^‘Ţ6Ů2‡F&tM_Î9K@×ʱ čuţ^\q?{r°´s— Š €ŕ&F+ŇĹ©VÄDDDDÄÜŐž±âÔ …şQ$F´\۰2v¸r`…Lçýă8fŇB©lńCެ°Cďi©ś7YƸ˙°Ž— ŐzKÚJ‡Ô=V"cýpÇÎ{% aT`B׺'Ą6XŽů¨÷ž^—«'Ý×[¦ů÷>¸tË™úĂţţZ©=„Á©!noÚńÍÁű|ťýÁůjO49}ś±ť€ŕf$\śłA­‰ą«=cĹ©A uŁHŚhą¶‘k p3˘éâT+bZí†ăŇńůŇwî5ůrőés>w4=©÷ýsúĽĂ}ýÓ§IIÍRą˙™»ĺËKJä~çsÉşoé}Ółî~§˙ýr÷t˝=/áúmU{ĆŠSęF‘Ńrm ­H§ZÓn_“Ö 4őĂÔÖj­_˙î=wAö*ű#Y}aÁíĐŻ?»wËô TőĂÖéK´~ş·?3ĚđŻŃFµg¬85hˇn €-×6€ ŃŠtqŞ1íÖ PÝĐÔ PoČŰRűě=çÍĐu=wAZ?9.ĺˇcmľÉ6hŤĚřMŚ‘ÜŻŔiçH?.‡ë˙ňן”·?1Ç&¨öV7TuÖ´@7ë›>űÖ €˝1Ľ>ąű3~˙%á>éňׇ8 Őž±âÔ …şQ$F´\Ű €BF+ŇĹ©VÄ´[ގ© SÓBŇ´`¶ĽéFF›uđ†ăŇšěŞýű €÷žK tM€śrţ®?Ńg°đ·äîPŐ„­%r{¸}úÝr{(p5ˇmxn"ÄMôI#§ăĂçLż†®qŞ=cĹ©A uŁHŚhą¶A …ŚV¤‹S­9ş ÂÓŔĚu % SÚ•@ŘU €Óf˙fą†řôfŕ3xŤénxŰuIIhßPŹGDDĽůÔž±âÔ …şQ$F´\Ű €BF+ŇĹ©VÄĽ©4Ë,G™l …ľýöUŕ'ĺíséK>Űdxö­oZ8«ľ8Ńg¨Ç#""ŢśjĎXqjĐBÝ(#Z®m@!ŁéâT+bŽf3–`6đą×úďcÚű›%Üßě_c?K@›%§µýŃĘĐŮĽ[¦ż8MĆ„·•Ľ÷gô –iĚńf_ÄežÝßçţÓ~ßmU{ĆŠSęF‘Ńrm ­H§Zs4»÷\xéĺ~BÔ `ěŻ=Ń'˝-}yi}Śś®!«Ă;.) -ß|żÜ˝ÎŰ6!îu÷§ěKôI›ńŰßń¦ÝťśrüR)Y÷­äń9čľ·ůó´ Ńbµg¬85hˇn €-×6€ ŃŠtqŞ1Ń1Űě_ěWu čš}賨GNí+N Z¨E`D˵ `(d´"]śjEĚBÖ›}šś˝ŰZ­÷ĂLÝĺź™żiË@çîkŇ:3ź‡Qí+N Z¨E`D˵ `(d´"]śjELDDDDĚ]í+N Z¨E`D˵ `(d´"]śjELDDDDĚ]í+N Z¨E`D˵ `(d´"]śjELDDDDĚ]í+N Z¨E`D˵ `(d´"]śjELDDDDĚ]í+N Z¨E`D˵ `{Ů^[ŹxÓiZ‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"&""""ć®öڧ-ÔŤbŢŕ^g°öÝ»ĺJyąü×#Ź Y3ŽĎŚ«ť±P´ `(d´"]śjELDDDDĚ]í+N Z¨ĹĽŔí{ö$ÜU«<ĂŰ?úQňłůŐl§¶CźŻżü˛zľ›ÓFY^˛EZŐ6ĎÖÍĺňÔ9˝ oNm ­H§ZÓj7—ŽĎżľsŻÉ—«/HźóąŁéÉd»ż/cšĺM7˛¶›]ľL|7äí J;"""ćMí+N Z¨ĹĽŔW{Ě oó¬W;ß lx\ŠÖ5ęmC±ˇ\–7(ű#›§8o×6hŔPČhEş8ŐŠvű𴎩¦¶V+ýŞ/ÄđhŽ×?T­˝DDÄ›Oí+N Z¨ĹĽŔáжäł+WÜĎm?ů‰»ýi]ť´oŰ&ż;yŇÝ˙ÉëŻËçíírmÓ&éţĹ/Ü>źwtČ•µkĺŹçÎąźă)çłJ`Fm ­H§ZÓn˝Ő Mݵź®ý ‰™±ĘĚ[ż­µÉźĄëzAö†űřçĆčű且§´ß*{Ď…ÚĎ]Ö”>ą\˙“ňö'ćřôsGqÄÔž±âÔ …şQ–XľřB>zî9ůěżţKÚŞŞäOź}&W7lJďo~ăöůĂéÓň»wß•+Ź>*ż]ż^ţ»§G:^~Ů]Ú˙ń–-‰ń´óąžŰ'ĄÓ¦Ę]ĹŽÓJemCʻ߄¤k·n”~›™őŰăöß"Ë7źOôY^±LŠĚ±ĹłdF…ßÇ„°eemÉ,Üe˛3\;3ö·n^ŕmW›ŮĹ=R_± 1}Yݶ7ĘC×đ¸ĚOŔČć˛ŕ\ Rî-çt=}ŇŃú.¸´OŰ €BF+ŇĹ©VÄ´[ގ© Sű I @łġ1Óúí=—Řšţá€7­żYj:5$Îĺú €G“Ú3Vś´P7ŠĂŃŐ%˙µzµüéŹtĂÝ?9í7’Ž˝{ÝŮ˝¦OwcŁŰŻ}űvwŰĚ6ˇ±ůüßÝÝŇ×Ö–O;ź±~őRŮ|ÍßľÖ(k×ŐH›óŮ„ Ee5rÉíwMv–•ĘćËÎç”xĚŘüú^–—ËćĘÚcćsŁ,źV.ýq;Žm”KöI‡§bŁÔçëů@*Ę6I‹ůžqëśc~8÷őHëKŹřă*vÖH颍r´ÓŰn«+—"?>ZU.;ĎyˇŻą‡šŐĺRÓ€sĽžkűdmEŁű˝íž÷7IiŐ^Ž m ­H§Zsx ÂÍt‡vj€ö×îěOY’yĂqiMôK›ý«^{úýĺůľr•qÄÔž±âÔ …şQžŔ×wî”?¶¶ĘµýW‘Ď?—«O>)7jkÝ ÷·Ź?.ż˙ŐŻä÷ÍÍňŰuëÜcţűwż“ŹúÓÄńÁgŁv>cOĂF™2m–M+•ŇŞiéńö§/“śŘN›ś˛”˛Ó¶Ômk”ĺţĚŮŔ+ĘĄľsźĚfÖ&\憲©K.ź—ťećšfÉ”%ŹËS ×RĆJŃ9®ôŤ ä5K@—µÁĚ愳dí©Đuçx=/-MëăXvШq4hŔPČhEş8ŐŠ7…Ă?)oźË\ň9«f™ge™ča—qÄÔž±âÔ …şQ–řŹçĎ»šĎ&ř5ź?=|X®VVJáđÇ[·şËA3€wę”ű>`óů÷--Ňwőjb<í|a{:?úÍŹČw¦î ŕSĄT €{¤¦¬\ę/o—ůÇCűC¦Ŕľ=ťréTŤ¬]Ě,Vě7v~őď%ĄżcâşsĽžK[—ö~Ú02Z‘.Nµ"ćMá°ŔŢ’ÎŮĆÍX"ÚŔç^Ké3°,Ť8šÔž±âÔ …şQ–8áŞUúţjç3Ë6ď\ZąłQV-ń–OÎ-^*Ą/ť×—€.IŽ›\úĽ™çŚ;o·üŃߍ7ĺcs]eoúŰP(¤čâV+bâM`b6sÚ’Ôwµg¬85hˇnóvă†_)/WܨšqĚx˝ÎEjçŞ##^۱¸ű´ěXY"wŚó˙Ń7Yfn;ëum­’ f_ń*©\9UƸ˙(N”…űÚĽvg¬-ó&zÇŤ_([*{ź8ě´–…n˙ĄÖď›óyĄ[ęç›,e›Vů×Q%gÜö^i޵X&řÇŽ™äś»Őm1n®x‚|üěërŁv·´O3Ađ é ţšÇ0@ˇâţ¬h‘ZsW{ĆŠSęF1o0"ʶ‘küĄ±;üOą’>ř,7^ĆŽźč8Ţ˙‡o˛¬iqš‚ŘŐ鄵·.”ÝÝ" +ţćřŕłc.p–ó¶ď*ń·ÇÉđ¸~ܵoafű¸UŇ`†í‡7nřźRéo?Ŕ@¤ŔWOKÝZ©v=,Ç®z»Ż­•ş'Ą6h«ż$]^“tµńű×Jm˝ůÜ$Wśýć˙xóC4Jn_iIS}č¤Űߥűlňü‡Ž¸źcĚy’ç?-íŢî^|Źt˙ýĹá¸3?6ŤĄCşV3„ż%×V˙\>sö~vr|ô×ŢľŹfǧµÉqĎJ§ •§ýDţ„ą‹ľ'×üsôť~Z>ždĆrś4ßżçEĽ}łg¸} € ŹÄĎ‚–¨11wµg¬85hˇn €-×6F.n“j3× b'úłný¶Děľ^hk¶§ĘúÖ`śÉňđ Ó&rlÍd÷ŘÜŕţĎ[ű€÷yć>/\KľnÜ![ćöń2÷€×~lĄ7 9čźÎöíŰĺßřFFŘkö˙Ż˙őżü-€h„஫mŇüńë>-µˇ0·şţ¬ú¶IĂZ9v=čsXšýcĽ0x ¸[®\íHČÎů«Źšiş^źDí‡Áî1×OJőˇÓ©Çśčđ·ždúő·tô:űOűË9ËĎ˝óýő|ůäô%é^ç\‹Óö‡` č—X  ~N´E­‰ą«=cĹ©A uŁHŚhą¶1R°t‘2?¨SĽJűłks €ŹMÎ. ŢĹëŔ"]'ž"?Ü˝cĺłR–ëyM vô’yn×®oÜâgĺCwOŻ4ďZ,‚ŕxÜlY| 4›r.]şä<)K@_=™XšąöD“Ô™ĐŐůśm9g/ôőŹ©OŔŇmfôzű«9cŐ'Źąrâ°ĚaçďsLýYďď‰úzÇIŔć<‰eŁťLĚ H €E>sĂ×`Vn‡t­öB`Č^[ńş ÷ťÜ ™ŕöö ŇV˝Î±‡—I›Űw‚|ĽČ7PěŚuúiůŘĂŮ?iľtž4ç˝*7Ę&xűŠçËG“RŹ€ÂŔýyĎ"µ"&""""ć®öڧ-ÔŤ"0˘ĺÚF®p¬ÔŻđf隥łxÇKŮQż}°\}VŠ‚qCK@ßł-÷`Tá.ďĚî*^ĐĚHnŇd€|ü,h‹ZsW{ĆŠSęF‘Ńrmc4Ŕ˝kĄlÎd©ćq2fR‰¬©ĎţľŃś¸Ţ$•÷ÍNŚkfřÎÝu:1#`ôÓ& ‡‚÷ůöş3…«ë?3ýĘŃĂĽ¸÷j“eź˝ŮňĂ0 áâś jELDDDDĚ]í+N Z¨E`D˵ŤQ1MohŮčęú“ŢňĎĄ·MŽňÇ:pDŽ%–ť˝hEş8ŐŠ»Ú3Vś´P7ŠŔ–kŔPČhEş8ŐŠčř÷›erĺëž˙´Tďč¨=cĹ©A uŁHŚhą¶A …ŚV¤‹S­YđNx\ľýčăňçţöź/Ú-wţ}ZDDDD_í+N Z¨E`D˵ `(d´"]śjEĚB÷Ďm–żšŢ·Tîd0"""öŁöڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"fˇ«ŔˇÁaµg¬85hˇn €-×6€ ŃŠtqŞ1 ]`DDDŚ˘öڧ-ÔŤ"0˘ĺÚ0dĄµJ&¶>+Eţ9ŁÍn’˛ńSĺáŁŢ’Đ˝WŹČĂĹĄě¨Ů2÷8mÉŮźćý·n¸™/Iĺô´°´űU™Ě6Mŕ\äÔ% V–¸!凛f'HĚzc¦ŔĘyćĽ íţf‚”8yď N¬•™›.yźÝ1VIŮśĄ:‘YG€µĺ¦[ž +›śĘąC¤ÉaBçwľç{:âîőH¶uí[(÷lK}qđeťśNâNĘĂĹ~řř30Ŕ÷p˘éâT+b""""bîjĎXqjĐBÝ(#Z®mŚ2ÜŮšĺžmfF¬·$s°´k"8L“‰đ/‰™A솵‰ăŇ–EL̦ Č kI]¶9Đ›ś5î/`M€3Ć'cלôŰEŽ­ś(cW&·ŁŔ©áµÁ9§űÝôs}>áq®X‘\Ú5§ţ$Ż-ń{"§¸ű¤¬O,íé}_Ęő&Î?đ÷pł‘ţě·ZsW{ĆŠSęF‘ŃrmŔfNËŽÇgĽ˙6ůĚĚPó^×+‰­É`o¨°:xŢZ9ć¶f#3\ ®ĺĂMił’Cd €sťśF‡pîăž^-”Heâ{‰y°é?ďiîćo‡Îźń{j;°8c©ídĽ8yŤ†Äď—™]íüÖ·%ż“Ä=8cĎIű˝Lś€ďŕ&D+ŇĹ©VÄDDDDÄÜŐž±âÔ …şQ$F´\Ű °™n©}`˛ÜS y»ĎJµŮ·©Í]RůžMţrĐ˝mrlŰB3Č8×wďćučj=,Ő'RI- M\‹yđôµ‰wŕşK[8醍©pŽď>şJ&„fôşďĽÝĺżóÖ}Wn­s.óŮžţŇĎݵ˛pNp}˛eN‰ěHżź”8xp}đĺ´wçzPîxčdwË™CÎőç0Ř Ŕďi?š|°ůŹcúßŐ-A`?˝D*/zÇô^=)[Bďům~l˛óŮĎo若w÷÷=ÜśhEş8ŐŠ»Ú3Vś´P7ŠŔ–kŔ¶Ó&Ő+K’Ë<Ź›,3+›üń¬l™71´żJćN\ĽpĺłRV<Ţk¶¬ ‚Ý”ăĽ%§Çú.cç9¶Ů †MčŰ÷É%×ßî˝WzŻ˝'żżô élzF.ďř;çČ?ąËB €Ďí“ŇiSĺ®bÇiĄ˛¶ˇÇÝoε[7Ę żÍĚíqűo‘ĺ›Ď'ú,ŻX&EćŘâY2ŁÂďcÂ˲Ť˛¶d–?î2Ů„ĄťŤű[7/đ¶Ť«ÍĚŰ©ŻXwJŮľ,!g˙çę9µ%to ÷fîa銍^ŰęjyŞÄďăč†Đˇ{l«{<ń„ÇÎźwĆL ”€ą˙ďĚ9×ĺˇýŹË|?ÖďĂąo·Żq-Čć˛ŕ{Ý/şl‚ ­H§ZsW{ĆŠSęFqXŕ?őýAţđ_MňŃ,“¶ýßs.óOňYÇy7ě5í]-{]ÍçĎÚĎČLJIűy×oĺóO˙Kţôůű´óëW/•Í×üíkŤ˛v]Ť´9źM([TV#—Ü~×dgY©lľě|N €ČŚÍřćeyąl®¬=f>7ĘňiĺrĐ·ăŘF™±dźtq*6J}pľž¤˘l“´ĎáŔÎ9ćs_Ź´ľô?®fçę“K ÇĄµ'čçśkÉF9j>;ăĎ(q>wmi3€÷Ř)- Íî÷áîď|K––yc>îç;묑ŇEÉkj«+—"?î÷>Ňf­*—ťç‚Đ÷šÔ8ç¬IWŘÚ02Z‘.Nµ"¦Ý>)oň…ô}ţ…t4=©´#"""ެÚ3Vś´P7ŠĂ3řO_ČŐWşźŻŐ–ąáoÇŰ?qĂ^łŻçÜAWóůłö_»mżŮţ·îöÖíÇąŔ= eĘ´YR4­TJ«j¤Ĺ ÓÎÄvJś‚:mKݶFYîÎäM¶\Q.őťűd~bÖjŕ2/¤LYúĽě,3×4K¦,y\žj¸–2VŞýśË|ľö–¬ZäĎuő÷‡î!P€ýŮ·łCcřˇěŕŕ~ľ3çţKßĎŘuî+XşżűH €ŹËÚ`–pÂY˛öT0^akŔPČhEş8ŐŠŁÂę Ŕh…Ú3Vś´P7ŠĂńűëţç‰r­öAw6pŰkߓޏZÜýÝďW»šĎż;Xţűź8Çt¸ďţíűä˘ű.ŕĎ»Żúc üŕžÎ¤~ó#2Ĺź=;¨řÔF)Uŕ©)+—úËŰe~ĹńĐţÚ;€{:ĺŇ©Y»(Y¬ŮĎąú:egŮ2Ůů~2TM„Ľ9ŔÇeí3c9#¸ć-ľł~ŕ,÷‘;ýýß»ähŔPČhEş8ŐŠŁB`DDD´Dí+N Z¨Ĺa €ó­v>łńÎŐˇ%™;eŐ=ŕÔŕĄRúŇy} č’ä¸Ée™M0jŢMĚčí‘¶kťŢç†r™żß96†Ćí“K›Keiť÷9ÓţÎuY6/yDK*7l‘ůÓ˛ŔKĺĺ`ąäD»Ű_˘Ú,E]W.SršlĆ3ß…w?=çj¤Ô?wżßYúĐ ŹűK@gąó}–m”îç÷śĄű“ß[Űĺl3§ KŰ €BF+ŇĹ©VÄ#""˘%jĎXqjĐBÝ(ŽâŘ_â8X:xš g˝Đ2·x™”®^&EţrĂß©jöĂÇFYľ¨\V•řËO+—šPČĽ6±®”nýŔŰ­Ć[şd»\ę»&×-đÇť*EeűüY®šýźË]Ţ:1ĆYk‚TsŚ·í_ęö›±őrę=ľ”Ľżë¶ČŞąŔ}ç¶Ëwüďµhvą”:×čŔý}gÎ5ĽQşçe2Ă›ű˝ÇŁŢ}{ł§?ÍeÁRŃÎŘŤĚöµ `(d´"]śjEĚQ!0"""Z˘öڧ-ÔŤbŢŕŹßú±ŢŐŹßZ§žo¨ö‚6fĽ—wč:cú!hŇÎů‡ă\ą[ż:ýš¦ĘŚ´p9ě€Á1‹¶A …ŚV¤‹S­9*$FDDDKÔž±âÔ …şQĚ[üYĎu7ľüB±äFŐŚcĆëíľ®žo¨ŽlÜźńŔQ%ŽGŰ €BF+ŇĹ©VÄf €7—ŽĎżľsŻéíyT{ĆŠSęF1o0"ʶA …ŚV¤‹S­9*Ě—7ÝľĎoČŰ2Űó­öڧ-ÔŤ"0˘ĺÚ02Z‘.Nµ"ć¨0KĽ÷Ü,Ť#¦öڧ-ÔŤ"0˘ĺÚ0€˝lŻ­GDDDDĽé´ ­H§ZÓnź”·?ůBú>ď/ä}MZ?ż {3ö#"""ŹÚ3Vś´P7ŠŔ–kŔPČhEş8ŐŠ»Ú3Vś´P7ŠŔ–kŔPČhEş8ŐŠ»Ú3Vś´P7ŠŔ–kŔPČhEş8ŐŠ»Ú3Vś´P7ŠŔ–kŔPČhEş8ŐŠ»Ú3Vś´P7ŠŔ–kŔPČhEş8ý˙ł÷·ßr”÷ť˙;Ŕyđ[ë<;ë¬óŔgÂJÎ(łń‹Řf9B¶ËbiŔ˛D@á> H,2ň@lcbîlŔFč'Ľa¶ ĐYfs§!Gähmi„[B˛„ HP€ä{ę[7ÝUŐß®®Ú»{_×µ÷ű“őŠ÷®Şî]ׇ޶1PźuŽĺ’Ć*u› <ç[(€ !„B!„LĺXt.Y¨Ď:ÇrIc•şMPžó-Ŕ„B!„B¦r¬A:—¬ALÔgťcऱJÝ&(€Ďů `B!„B!S9Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç| 0!„B!„©kÎ%kőYçX.i¬R· `Ŕsľ…B!„BČTŽ5Hç’5 €ú¬s,—4V©Ű0ŕ9ßBL!„B!d*ǤsÉÄôÚ­/É‘O>•ŹwÉg6î‘ŹŁźŹŚÜfĎëŁtť[ďC2úÉYoNsh˘>­÷ń]Ův«10ĄXçX.i¬R· `Ŕsľ…B!„BČTŽ5Hç’5é7-ÓR/-űF7ZóynăžŔ ŕÁYż{<Ĺň}>x˙9Ö9–K«Ôm‚đśoˇ&„B!„2•c Ňąd bú-)řâR/.řĘW`&Ół«l?~ç%YmLk?żtgë±D»äKźűÎ}G§í‘ő­y“Ârýný9ZÖĆü2ş\!Úµ@¬Z˙ju^?™'Ý®ÖU¬ĹÂ5›§÷4ëęÚŢëżzäÝÂôm»łu,=7U.p ë°[ߏÎ÷¸űçCÝ&۲÷°đxŔ€ëË%ŤUę6A xηř]o’%ÓŻáô7B!„B!¤ß±é\˛1ý¦ĺ]ľ0,”ĄÂOKÎŽ‚°X8 Ć[‡d}îůZ6¶§—ËĹôµŁ×ČćIĘÉü:u®c¬KŘ{ý«Őzý¬¸Î–ýľ-·ţ…őŇy»˝~4m´´ ˝Ö?.őöĚůé%µ±ż2Ąý/ݰ~ŐźŹö<Ŕ€ţ±Î±\ŇXĄnŔ€ç|‹‹řµ‡Ż“v¤żT†±çxúż„B!„ŞXt.Y••oeă(ăZ’‚¶÷˛uľwĺH«(,O+>żPçJÓ#Y‘ą±X·çOĺ¦çë,ë®wµ^ß(nŃëçËŮÔę‘=Ć~Št,§×úGďýî.erNő- Ëźź~|nĆ€cťcऱJÝ&(€Ďůđđň˛äéô—ĘPŇ5oŤČƧ_—ŁéŻĹ“ť›‡ĺ™˝”Ŕ„B!„ôŠ5Hç’5®zc\Ţ~ňi\ËR-;Ż`mĎS§6Jĺr›>ÖY Ö\˙ µ^`pŻőŻ·}ŤľX߇nW(’ůţ¦*ëË%ŤUę6A xηÔ-€˙݉¤?5ȱ-rĺÜYÉAnĆŮrÉÓGâň7ŕ[ň´–Ľ eÝ[és˘ݰDNXü-ŔÇwü@ĚJź;k‰¬yĺX:…)ĘB!„R7ůGő52˝%pe1·Qo9ś»"őťŇ÷üĘÄäŠÖfđ§·l6 Í.bĎőďˇÖëw-€uŢr\QÚËéµţťÓ“÷ _PÖA÷sî*ߎőËżµ%Ż9®«‡)€9Ö9–K«Ôm‚đśodĽsÝYrâő[䨗Ł;†eă+Éăĺ+€ő÷/~ď@úŰ1ůéâ˛`–»ąřŘc˛`úrÉÓ˘Ą—}›o’ÓfDÓč€Édϱ]ňĚÓŃßĎj“Ľř–DO›ŇßŐě‹ţn^{z“<˙ë-ń<ŻEű~=,ĎëXqěu~zD^Üś[ĆŰɢEČ‹­eo‰_gxT„B!djŤsÉÄ ]\‚¶nś+úâň7y,.ăr1ů˝Ućĺ承›v$ů}tcRÇŹká>7~^ú]f\P¦ĎÉ´‹Â¬x,+‘]׿†±Ľ~ľ|ÍJďîÓsŚXőZ˙ňôŽĺçŢ—~î›6 `@YçX.i¬R· `Ŕsľeđß;[N{“<óVń6´·€Ţ|ťL›˙٧?ÇEďůiÜAµ ŕĂ÷-’–oŇ[©+iBÂŤąĎŚ&CÇßÚ.ĂOl—ĂúKá `-€‹ĺmˇŽKßdGG·ČĆÍ»âo~CKá_ëTĺř‘¸ ¦&„B!S-Ö ťKÖ &Ć®ó Ú‰5ˇŻ?•KP `@ŽuŽĺ’Ć*u› <ç[´®cL·€–˛ńúEr˘äÎĽDMí,n·Č%3ÉÝzUâÓWäŠŢvĽsÝŮćó+÷If%d’ćč^˝ŞwX†7ŹČkŁGÚ·|î(€“+łŻÎÝ*şőĽ#ňbzµp}0!„B™j±ţ]Ó%kcS¸:ŐÁ÷ŇţőKW;ŘFo´®w[řü`ťcऱJÝ&(€Ďů-wëdlp–cňÚ-gË çţ8ľrŃşr÷ůëgÉWî;PšVĽxÚŇÇdßŰGäp]™9.Gß~S^űµŢúąŰŔŔ„B!„Ś%Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç|Ëŕ ŕc2|ËŤ˛qDZä;{őÎąř”ë·Čá˝»d_Ö5ýúF™6‰,ĐďőMęüŕY˛ŕá]q‘uô­-˛ćúźÉNťFȤMrkçç÷¦·Q?ľKž‰żó7ʸ ŕhžW¸4!„B!Ö ťKÖ &|ÔůÝĽEăř>[0.Ö9–K«Ôm‚đśoäŔ‡7Ż•ŻĚJrł–ČÝé- ĺ•µrŠ>6cˇ¬Ů‘>&Űe…Î[řžß\ĺč+wČ‚lyŃsŻÜĚíźÉȱ]ňĚÓĂńm 7ęwů¶ľSű€Ľ?¦…đŘ ŕx­eo‰_‡B!„Lµäç|` b >ëË%ŤUę6A 4ôÁŹŠo©[>Çä§‹;o M™¸hiüĚhV0B!„25b Ňąd b >ëË%ŤUę6A 4 ĺ﫯ľ*‡2§‚oq_×^ySŢŘ|Łś6ă:y&}”2řÝŇľâWŻ.}'0!„B!S!Ö ťKÖ &ęłÎ±\ŇXĄn},€%×ÎýşüÝîŇă»ď–Ż.ş[FÓß<ó·rţ9gËćFÎą@.úöS2úľNű_ňw‹ŇÇó˛ç>żş4íkňĺ+ď–Wâç&Ţ˙źwË_,üZkúů×Ý-›¶§ý ĺďD–ŔľĹyüö°,‰oë|†\ň4Í!›c˛ssűöŇĎŚň7H!„B¦^¬A:—¬ALÔgťcऱJÝ&&¶ţ§ďÉ—ŁyľýOďÇÓŢ˙§_É·oľ_^‰çM ŕkźĎ=7O ŕ\‘üńűeóÍ_“/\şAÄż?%1÷krů/ĆÓß?řš÷Ż’’W_gî_Čąâd˘J`ßBL!„B!d*ǤsÉÄ@}Ö9–K«Ômbb ŕ䢹gËżńyô&Wę¶Ťłţř%ąIo-˝đŻĺďž˙_ň~a> ˙˛řŤ7Ţ0§÷‹oˇ&„B!„2•c Ňąd b >ëË%ŤUę61áßüńož“ż‘~Oď9_—źÉŠ`ű;€[…pGüľěřá×Ű·€VżIţîĘ ä‹ńsż&ńĂ×(‚1Uţ*ßBL 5~řˇ8xPŢ ®÷|nI1!oW•ŞmÖLÖíî7öc3Uűk*î+öG}ľď+ŢËţ`?ÖWµŻ&C¬A:—¬ALÔgťcऱJÝ&_˙ĎďČ;®ÜŤĽ˙żdó·˙Bľ0÷ůö?écI|ůĎ/G~ßÖ*pµ.•Ă_XřŮüűtzÁAyĺ‘żŽ‹ŕżřEň}Ă@żLdů«| 0!$Ôč@ä‡}$ňIpt˝uý­„Ľ]U޶Y3Y·»ßŘŹÍTíŻ©¸ŻŘőůľŻx/űýX_Őľš ±é\˛1‘’ŃO>•##·ÓÖ9–K«Ôm˘ŹđkrÓ9_“K·p~˙ç—Ë®|*)ró…něÉß-Ě®ň­q č…ß‘_ÇĹđűňć#—ËŻ{®˝Ľ÷ŁÇóóGžşîlůę˙Wá1`<Ţ}÷Ý -•oˇ&ÄăĽőůâô%ňÓcéďiŽnX"'Ě˙ěK·2Ľ|†,yZ:.Gß>ý#ŁwČisďťéŻcNż–Ó0z5Š5@ ]+ˇoW•n۬™ĚŰÝoěÇfşíŻ©şŻŘőůľŻx/űýX_·}5b Ňąd b"µqĺ/čÉ:ÇrIc•şMô±ţXFďůş|áśż’Gw'WÝľ˙?ď—‹Îůš\ű|ň»˛_ĽňnŮ|0ůýŔóß‘ŻÎý ůáA}~Óď~MnZř5ąéĹä÷Ń;./,ü[yęźŇ×Ţ˝AţÂ(¤ńŇ+€­ÇĹ·PâsČşů3dÁ†||L~şx†|ń{Ňßí´ ŕ˝I‰üŔŰÉă…LĆxë·â“Şk·ţVî]ť`­ÜÖ9OÉć•Ń| –7ŤiăŇc] 8Źa»Ô›^žh~K6ÓǢr™cÜfMÇv‡˛ÍŕÁ~¬+Ů7MöË6ą¶źű±ĆöuŰ_˝Ż&ÄěŹA3ýwÖńYíçľRŘ_=Ö±ë7{Ďô8ˇËM|ůÁßóU®‹ý8¶ccłm®2ć÷fŚűj2$Ű÷ľ°1‘˘5XçX.i¬R·‰ľŔú˝ĽŻüđŻäË礷h>ç/rßń«~#O}űňÂô›ž˙}:Íţŕ/Ě]-›uzGü±Ľ=öĹ…ß‘Wâß/żľçŻĺüÖ˛/ż¸ç˙ך•oˇ&ÄďěűŢB9ańcr4ý]Ž=& ¦/’»­B7—öŔ™Śđo–/ÇťÉŔe˝ÔhŢ•(€{¬KŁç1mWŰć• €k0—9ĆmÖtlw(Ű<íÇ:&lżXjl_·ý51űj›\ۇ˘­¶ ŮŃď8f¦ůy*,»źűJ bőXÇţ¬ßřőý=Űú-ąv«ńx ćş8ÚŹŤöË8¶ąŠ˝ÇĄ1î«ÉkÎ%k) `PuŽĺ’Ć*u›čs  ß| 0!žçíËWr·Žo˙|îŹĺpüŰ.y`éŮ2-=‘8qńŹ[%l»Ţ$K¦_!ĂńŁ";ď["'ĆóĎ’Ó/’;Š[˝ęx–\˛9ýU^—Ugž!Wľ˝öćµň•Yé‰ËŚłĺĘÍéJĺ ŕ§Ż–oŠÖě\wvű÷c[äĘhŮŮó/y"»Šy—Ü˝ř¬t;˘őş~KRxë˛fÜ(ĎÇótĆŐAÍôJ+˝ęŞ0š^Ő+\ŤőŰdp>7˝Î󲫺6·®˛)=Żj]"ŤśÇ´]mÝÄ“ç}ůÁmń@oűJźčő˛eNż@îýMéą‘®ĘcŘfMçv‡˛Í]Äëx\»2ű|´—Y¸2,[§Âv¸ŢŹÉŔ˛ÎŮ~Ém{n?ęţËöKŻíęzEZĹľJT˝7ŐűJuŰ_ýŘW•ŰśßO™ôóÖýyéľ_xAňXĽőąév×ŮWß=Ž™]߯ź«”ůwÖíłÚktů¬&ÓűąŻTÓý•ßąeÄódëY˝ŽýY?•­Kş>>l¬Sy]Űěcc·çUtݲýK׹÷q3{~—u™ýXőyˆKű±Ű6w"—Î’Óľ÷fü›YďX+§L?[ÖěĐo>.oÜ·D¦WîĆ%sVÚęsÎ\+ŻEŻ˝só°<ż7ů6áăŃă§eË­U¶ă YňÄ蕣çżő\0cQrkj}Îą?NľÓří-rÉ™łäĘ_ë/ÇäđŰůŰ_cĚVŘş­0ŰľŞ%Śn śęďąÁŮ^Ďk ś–ž×Cłç ]ׯ­s@\ÝŰŹĹĎݶż4oĆdŻV5pÜh»Ůćx€>ű|č {n˝¸¬čő\!8Qű1)Ňý­˙µńôâľ)”‘:ŰeíÇîűŞŢ{SĄŰţę׾ŞŢćh}sď{^÷çµ·Q?§ńkµöő窎ńď}Oşýýô~żěĎU{şőů¨Ú˙Ý÷GőgµŽľ|vŞö—±ýćc]ôgý’ĎY»čÓýV˙ýLž_~lśźč=.ŹŞúoÍš§žţěÇŞĎ[4­őţ[żGşlóŘŹ=Ö<™čő72ÝöŐd5Hç’5‰W€¬s,—4V©Ű0ŕ9ßBL˙‰ Y˝ t|űçöŐŔZŞnĽzaë `uÚş]ń«>|ß"9aiv-p”n·nŽ_'yÎk·śŐúľáŁŻÜ! ÎLŻŕŤ5(€ăe¶×3ŻăčĎä+3fČ´3É·ü¸U2÷JÓn8Íżv{UŞK¤ůÁč±>݇ţ 8Gş®_[ÇpÇ@sn0ÚÚ†Žůű;Č®i´Ýló›~+W€ç‹Ë˛î»™¨ýX\˙TÇ~)ţÔŮ.k?vÝW5ß›*ÝöWżöUő6w/Zş?ŻýśÖ<ąýPőąŞcüű#zÍnÇľď—ůąĘ±>UűżëţčńY­Ł/źťŞý•˝×ŃďzU¦®oŻý“ןőëţ­ó~ŞŽ÷lĽźă5Tőßš5O=}ŮŹUź·hZţó›ČäÉ<Ö6—ź[˙ŘcÍ“©xĎ{č¶Ż&CňűŮÖ &RŔ ëË%ŤUę6A xηP@ŇBö§§Epúp\ Ď˝C^K a-}{Ŕąr¶ę»{źąz–,Ř0"«ÎĚľoXo=«uoüÜ&péVÖť9&‡wŚČë.‘S¦gWW§ńwţęŁÂŕtŹÁůŞç•[­Aď.ú2ŕ\ą~mŔÍŃr‚)€ĂŮ檢®¸,{ŕľ›‰ÚŹfAÓ±_Š?u¶ËÚŹ]÷UÍ÷¦J·ýŐŻ}U˝ÍŃs)€ ďWeńéü|Tď˙®űŁÇgµŽńď+U±ż˛őŤ×5yß­żŹnúł~Ý?ŁuŢOŐ±Îăýݎş˙Ít›§žľěÇŞĎ›µ?ĘĚm®ţěŹ}TĽç=tŰW“!Ö ťKÖ &RŔ ëË%ŤUę6A xηPB’[?ëÉBRę&‰ ÝĹ?Knýö\9·şNJŰŢ·€ŽóëeÚ™gÉ)­Â9ZţŚłäĘWrϵ `}ެĺůx¶ňÓĄłŇBXż[x†śxő–d}ŁiĎ<±%ľíł^eşůF9%{îŐWȧ§W®$Ţ%dë4ă¬hť¶Ż~{‹\9?»…ô˛`Ýö´\Öí8+˝•µ.{8ů>`˝šxÖMňbWŐg]÷ŹĎNĺgµ†~|vjíŻlť˘ź ÓzčÇú%JďMţóÔőý¬~Ďúö9Čż_c9ľdĎ­ĐŻýX÷ŘMo—ĂůÇ#ąm۱§÷ţčz\ęˇŰľš )î/÷¬ALÔgťcऱJÝ&(€Ďů `BH¨i>ŔÝoż- őkŔą?¶Ż\Şă‰ßî‰ŮćAđk?úŻŰţšŞűŠýQźďűŠ÷˛?ŘŹőuŰW“!Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç| 0!$Ô¸ŤŻęJOâZWă4ŕ|Ŕąp5Rý+ĄĆŁjŕxB¶ŰÁ6‚óýnűkŞî+öG}ľď+ŢËţ`?Ö×m_M†dçtľ°1PźuŽĺ’Ć*u› <ç[(€ !ˇ&ôŮ©8ŕ\5pŢvwŢĆ4o,˙Q@]“k?^·ý5U÷űŁ>ß÷ďe°ëë¶Ż&C¬–»d b >ëË%ŤUę6A xηPBBMčłSqŔąjŕx2owż±›é¶ż¦ęľbÔçűľâ˝ěöc}ÝöŐd5Hç’5 €ú¬s,—4V©Ű0ŕ9ßBL 5”?úČ ôť®·®ż•·«JŐ6k&ëv÷ű±™Şý5÷űŁ>ß÷ďe°ë«ÚW“!Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç| 0!$Ô|đÁń@¤^Ť]o]+!oW•ŞmÖLÖíî7öc3Uűk*î+öG}ľď+ŢËţ`?ÖWµŻ&C¬A:—¬ALÔgťcऱJÝ&(€Ďů `B!„B!S9Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç| 0!„B!„©kÎ%kőYçX.i¬R· `Ŕsľ…B!„BČTŽ5Hç’5 €ú¬s,—4V©Ű0ŕ9ßBL!„B!d*ǤsÉÄ@}Ö9–K«Ôm‚đśoˇ&$Ś|řá‡rŕŕAyk’ŃmúŕŇ­,f˛nó °‹Şö‡&Ô}2Y·k˘MŐýXµÝ|vŠŘWE쏢ŞýAÂŤ5Hç’5‰ pëKrä“OĺăÝCň™Ť{äăčç##·ŮóÔŚ~˛GÖ›Ó¦°Aż?óĎ‘EŹ_.Ëîś-źąt‘,‹~^tóçěyhÚÍËóşžlLëË%ŤUę6A xηPFt°ńĂŹ>Šţ%÷“IE·I·ÍĘdÝćA`?UíM¨űd˛n×D›Şű±j»ů챯ŠŘEUű„kÎ%kA‹×´TLËĆŃŤÖ|áZż;äbyĐďĎl™ź•˘iY:˙RkľîNľs‘śl<î‡ńo„Ä:ÇrIc•şMPžó-Ŕ„„˝âÄ„ś t۬LćmöcQ·ýˇ yźLÖíšhSu?vŰn>;ťŘWE쏢nű„kÎ%k!)ăR1.ß•m·&ÓÖďţ4úűŹ~ß^…kOoĎ“”骗®äÍćé=Íşş5YżÖ<ďĽ$« Ó§Ëę‘w Ó·íÎÖ±ôÜTí5ݞёüö—Ęäě ÝT{ýÓ×~gŹŚľ“>Ż5o~˝¶ŻűűÓv›lË^ŁđxIA—˘qAşLfĎ/Îsňť—ÇWÎĆî\$ó:G¦ĺžŰš–ʬŮsă6˝wŮăąÂ¸őqen:mţÍéUĽĺçĆ>'łʦEë~i2o{Y˝·&ëË%ŤUę6A xηPFĚ֭ߊO ®Ýú[ąwat2±r[ç<>豞Ť•{nó6ą6=±R_~đ·ĄéÝčóľ%›ÍiăóćDëŇ^vň»®_Ă× b?Véó>ăţĐtě“Zűc0źŹ´]cţŽŃDżŢÄ~>&Z—ĎcŤőě¶Ýţnóx_ö•ňd•˙yÓHŹmđřóĎfôýö‰5‰‰ ĺaľ0µ ÚraY*łb3+/Łß·Ą%«>żPęęĽF‰›M-Ŕë[enJKŮÜóăňWoŹśźŢQRŹĄMĹËË=?ú˝¸=C˛ľđZů‚ą\ަˉ–‘ÍÓkűz˝?íyĆZkš•˘Z–– ÖKŠY˝Uó˛VśčypvćěyŃďłËWá–^'˙xą0Îϧs»pÎ]í›Íßkű`’±Î±\ŇXĄnŔ€ç| 0!aÄ`ýÍĂňĺx°3śěOI7=ֳѠrŻmŢú-ąvkîwOl^Ů9(m=ViŇîÇmríXĘ1îMÇ>éµ?&ŇoWăĎá8MŘëMÖĎG•ëŮm»ýŢć1#Şôs_)Źö×˙Ćzlűý1€ĎA•1în¬A:—¬AL¸W,4Są3f·‰!Í—ł©Ő#{ŠĄg¦c9IÚş:¶%+:o“m»»”É9ă-€«·µsŰóGÓrĄř‘l_´–Ůkű|żÂVu¨u ŕůVą›WQnŮ\XÖěÜŐČ©nË€)Â:ÇrIc•şMPžó-Ŕ„„s€UC>,oF?o^©W©ä¦ĄW®$.{ŁŹ'',Ľ@ľ¬ŹŻÜ?Ż=˝ôĽtŮí×Kźź-óÁ‡ŰĎ‹ŻĽÉ¦}K®- @W¬g¤Ń rŲ’mÉi­¶ŢşťŮz¶×ŻňĘDs?fŹ_mgöÜÜ4§Ď‹÷sç˛;Ëž“­wůwŹ÷c᪳Žő®ŘÇůý”Éř´?4ťű¤ű˛*?ąő˙ňŰ’ýÓ*(˛}¤ňźŹęĎăDmWĆ.‹¬uĎýý§ËěŘ7Ýţ^rĚ×ëq§ňő˝ÓőËń´ęřQ5-Růy¬ń~wŰîľmłůىôŘ®®Ď˦ĄW­íĎög·}śźwŕűJ5ß_ÉúĄëÖq|Ë>÷:o¶o’yăeDómnm_qýőoěŢÖ´ÜľĐ1µţţôút{?sÇÚ–Ö±¶Ű{ť;v¤Ëę/˙zĺuăţ á¦ýYđ5 ÷:®PUV÷*x]Ŕů«sS…ů{ŔőÖß+z5ﮞ°¸ÎkŔ$fťcऱJÝ&(€Ďů `BÂ=ŔÚM{вó÷čçÜ r|EËo–kł+[¶nkžnýVኗâ¨.§=Xúćß* 2ça«5Tî!Zçň m&řM×9żÍ©ÎbŞj?¦ËË u›[Ńí}ÜšĎŘVVŘŹĆďU\ďÇâöüVî]™ßw łüÓý•ČĎÄţĐŚeźźŹÜűŞíÂB‹‡|™PśWőú]Xďuů±öďŃňt !aƤsÉÄ„{ń- K·lî(T»ŔV\QzËŃ[ăą•6¶·;^fn9­}›'ţîát_ŤnĚm·‹ésăçĄĎÉÖł×öő6Č8űgűĐIékM/ß>:Ń.tíé­e\Şß˙›<?'÷:í’7ůŢßlľEw.j|pü=ҥPYçX.i¬R· `Ŕsľ…0Ňh€ŐLo©ŚŽ¦ĺŻş*,§É@q4o®˘i:¨+”Eö@z[ÇŔqĺ~¬ÄîXc°>bTÇŹ§ĐŰbq˝«KkžLőg«ßűC3–}ұîë“űÜ[źťŇü˝>ŹÝ |»z®{űó\xnŹż—Lçg`ŚÇťšŻ×Möc{ýZŰŐZŻŞíŞ.Áަe:÷c=ݶ»/Űl˝'ąĎN×íęńĽd_ęż0—·ązgÜí+Uő)Ż[ç{m'ŚĎDeşţgL÷ĎwŻ÷ł˝/»±ßëč5ĆqĚę¦Űţ áƤsÉÄ„{ć- eăž>\ ‹)­Ű•Ä´€çs`˛°Î±\ŇXĄnŔ€ç| 0!a¤Ůk{°łsZŐ`tqpµu»ĘÖďĹ+cô6ŽÉôňëEË™ pĺ~ě1ť¤ŽöŻuKl{ :żŰ:ř{p˝óźóJ˝řqk›óźÝçĄ+ČűĽ?4cŮ'ťë^üśÇ·5ÍoGGéR|~ŻĎc7ß®Ţë>,—'Ő/s?öĺ¸ÓLöc{Ý[ŰUóxÚýřQ=-Óąëé¶ÝýŮćęĎN÷íŞ~^ë5őXZ8®Tďăöă®ö•ŞÚ_úXőqÓ>NDű+:Nvű<·×řüôůÚlT}z˝źŃôŞVDşľ×ă8fuÓmpc Ňąd b­•©ĄŰ@÷Gé âĽ&»ÂUĘĺďîIŻÔî˙•ÓŕŠuŽĺ’Ć*u› <ç[(€ #MXăň‰†r&¦ú»޶›Óyu 5ůľÁtž•ßj=ž,w[zVŞ5PŰ^n¦[yhéĎ rç:´ŇKëi*ĎËßŇÜŹŃă[ł[G÷k¶OňűQçą¶5°ßăőRÝŠŚ*n÷c$·Żľ¬ĺ‚.'Ţ˝·ąđą3¶»źűCSźôX÷Öç ˛ňábˇ’źiŻŹýŘĂ„oW¤sýôůFqŇíďĄÇëŤí¸éúz˝Ť?¶·I÷OŁăiŐńŁňŘR˝ëč¶ÝýÚ殟ťĘíŞx^6ŻÎ—{żłĎG÷ĎŽë}ĄjěŻÜ6Ź›=ţąorÓÓýŘÚĺŢdű9ĺěź1=>ŐÇ‚Ňôňg$};ťŘWE쏢nű„kÎ%kőYçX.i¬R· `Ŕsľ…02™XTîöcQ·ýˇ yźLÖíšhSu?vŰn>;ťŘWE쏢nű„kÎ%kőYçX.i¬R· `Ŕsľ…0rŕŕAůđŁŹĚAČé6é¶Y™¬Ű<ěǢŞýˇ uźLÖíšhSu?Vm7źť"öUűٍjpc Ňąd b >ëË%ŤUę6A xηPF>řŕx°QŻ8™Lt›t۬LÖmöcQŐţĐ„şO&ëvM´©ş«¶›ĎNűŞýQTµ?H¸±é\˛1PźuŽĺ’Ć*u› <ç[(€ !„B!„LĺXt.Y¨Ď:ÇrIc•şMPžó-Ŕ„B!„B¦r¬A:—¬ALÔgťcऱJÝ&(€Ďů `B!„B!S9Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç| 0!„B!„©kÎ%kŕÖ—äČ'źĘÇ»‡ä3÷ČÇŃĎGFnłç­°zäÝćĎK_otŁ1­}ÍŹ?yW¶ÝjOBźöWóĎ‘EŹ_.Ëîś-źąt‘,‹~^tóçěyhÚÍËóşžlřÂ:ÇrIc•şMPžó-Ŕ„„‘>ř@ţîwňÖÁđŚľ/úţXá} SŐ{úá‡Ęă9“™no·ýˇ™Šű¤›^űŠc‚źŞţć5ľĆ«>w“őďs˛nsČŰUµî!ĤsÉÄÄD’ѬtLËȱ˛Ý¬ß˝GÖŹÇ6î×ë­ßx<đý?[ćgĄhZ–ÎżÔšŻ»“ď\$'ŹűaüŰ“‰uŽĺ’Ć*u› <ç[(€ #o8 ~ô‘|üÉ'đĚ逬Ţ·0U˝§úřT{Ou{»íÍTÜ'ÝôÚWüTő7Żńý3^őą›¬ź“u›CŢ®Şu!Ö ťKÖ &&BR@ĆĄc\@– ŐŰdŰ;źFźyMŰ””­«TÓ«Ví+W“egÓ3…‚3.€óóĺĘâŇÂÉżĹ×I ŕüó›Âëw'Ď‹—ŮÚ–|a]Ú†w^’Ő…ç¶÷I·×Ď^ŁsŮŞ×ţWŮ{PQ¤w•¤q)¤Ëdöüâ<'ßyy|ĺlěÎE2˙ˇsdZîą­i©|Áš=7.`Ó+p—=ž+Ś[ŹWć¦Óćßś^Ĺ[~něs2űˇlZ´î—&ó¶—Ő{ű`*±Î±\ŇXĄnŔ€ç| 0!aDݬ°Űŕ}¬đľ…‹÷´¨ŰţĐđ9/b_…)ô÷­ŰúOćĎÜdÝć·«Űş‡kÎ%kAËŬtÔ2˛X2jyŮ.l“˛˛łčŤlÜc?éupˇ4-/'ú˝Pßú’Ś ŕréÚą =ĄW޶ĘÝč÷mékv\a¬ëŰQç_Żřú:˝°=úZąç÷Ú˙íyĆZkš•˘Z–– ÖKŠY˝Uó˛VśčypvćěyŃďłËWá–^'˙xą0Îϧs»pÎ]í›Íßkű`Š±Î±\ŇXĄnŔ€ç| 0!aÄôŰú­řâÚ­ż•{F'+·uÎ3ˇ¶ÉµÓż%›ÍióćDűaĽŻŰcöŘ׍k§đű–ĽWzâŰíőš­Ë¸Ţ{ŢÓ˘1îMÇ>™ŕýŃűs•čϱ"ÄľjöŘĽ2zí…˛ƴ‰ĐŹ÷¦ç2ţŚ×y˝nëď|ÝÇŞźŰ¬|Úîë2qŰ5±˙¬đ=ş]>±1áÚŚĘĘH·˘·Űă‘F·€.Ľu ŕÂtU~N/ĺ×lI ďöŐ»™bÁŰýőŁçëwűć§EVŹě)–ĘN寰UťjťxľUîćUŔ…[6–5;w5rŞŰr1ëË%ŤUę6A xηPFĚAżß<,_Žî’A¸/?řŰÎy¦Í+ÇW$¶ÉµÝN{ěëFµĽo}zżŐËš¬ďiĹvŤŐ÷‡¦cź8úŚ×ů\őĺł7 öU§čőWş+€U?Ţ›Ęex˙ľŤýxĄş­łuŔ±e¬úąÍʧíî±mýŰ®㺇kÎ%k®p·˛ÔY\şBWő­ľM¶í.mIőë‡P—čŐĽc¸x ŕ:ŻSuŽĺ’Ć*u› <ç[(€ #ć źX¦WléŐ[×nMĎ®äÚÜş*®=-–^˝+\ń• ćť0ýą÷7ѲăytŻ×óz]—-+™~ma€>?M_7˙Ľ ńdúĽ•ŰŠţcÝľÜpk{ZĎŹ¦Ą?ç÷u¦Ń`íT~ßRVISą.ą÷űËnK¶7}ŻtY÷¶ž›[—üg$Sŕ÷ů=U]öŹíŞÜŹů×ëxßƶ?4ťű¤űٰ~˝ţvfůWu¬(ěăňţČ^3ťöŕĂąéßWů»ŽźsAôY2ţ^ôő´Î-·¸]־ʯcy>ă˝(Óq\ĺץxlęz<Čžçô}«6Îă•ę¶ţµ×˝×:t{O*?W‘ÜrËÇďâ{ŮěýRő·YŤe»ÇţwŘ~núü>CęoWîµÓiĺă‚}śHź·đ‚dźÄ—:Oţ˝Űş‡dřĂÄ„{傳ă–Ć™Ę8·Ś[ővËąB¸FÜ^nrEnţuâ[0Jjť§á­’»ŔÉ÷wŰ.ŐůúúXţ árAÜ»Tî4ž[@W;ůÎŇwćj|çěîóčôňUÂ+€;×Oo ÍŔĐťuŽĺ’Ć*u› <ç[(€ #ö _7é^a37x·u[ađ˛|őF2(Î˙›‡ĺÚlzŹç)«€yóÁoµ_;hÍć)­—*"»)Η¬oîycÝ>]n¶Ď¶ćj{k6XŰÍdßÚ¬×ë>­¸üx0:7Đ˙ží3]ĎÖţKź[ř˝>×ďi÷ýŻzo—ąsű­ó÷jÝö‡¦ţ>©Ú˝×Żűßn˘×g§x¬¨ţ‹ ť–ź·ZöU˘˙×Ńň˛ý_ř{Iß›Ö>Ď}eĽćcŞŢ›Č˙6ŞŹŐ&ä}«śí“ë[Ömý›­{Ĺ:Tľ'Ý>WĹ÷ąxü®ţ¬Ł?۬Ş÷}×÷¬bź âŇt»ĘÇëPuÜÔm·©ô®ŇmÝC5Hç’5 $Ąkvűă#»÷äĘҬ,+•qékLۨß˙›<—ŔąůĘĄo2ß»˛mc2ŹN×r6~l¤˝śâ÷÷bŻůęá¸ä-ĚS*x Ż_.Č‹űO5ş:96Č8űgűĐIékM/ß>:Ń.tíé­e\Şß˙›<?'÷:í’7ůŢßlľEw.â `¨`ťcऱJÝ&(€Ďů `BÂHłA?T- č,sW¬DĘĹAap=ŻÇó”5¸çž×µŁ×H¦ëdű9‰tđ´5O¦´˝cÝľt¸8@]Ok'ůű–›ß|˝TÇ´Ž÷;zŤÜűSś?Ú‡…ŰŘ&ďiűąő9O»í˙Xďí˛öcţµă/$4ő÷IĹţ¨±~Ý˙v˝?;ą×ďő9ăçFőg_%úýw]\^ţďĄâ˝©łŻŇĎ«>Öë}ŠU˝7éô®Ű—ľV6-żśęăAµ yß*§ ćs×lÝ+Öˇâ=éúąęxźŁĺgÇďĘĎU=ýŮfU˝ď»ľg]÷‰ďe$żŹ­ýéçŢŻĘĎU=ýŮfU˝ď›˙V/Ż—ţmWűďŞŰßeçăíuoM«ü,ę¶î!ĤsÉÄ„ WŔ–żx cżLŚÂUĘĺďXçX.i¬R· `Ŕsľ…0ŇlĐOüş]ťS”lÝŢ/ý˝8o^ďç%Ź—óú*ZNk°ľspľŰeQi`ő7z5XöĽ±nźJź«Ë+”m˝őg°v˛żomUówNËż¶nçĄ[@çç/Ż[i˝Łý[·\pűžVí˙ňďövő~O›é¶?4ő÷IŐţč˝~Ý˙vćg'·Ź‹ÇŠčő*>Ç›W–Ż>ľŔü۱ôg_%úűw]^^~tľ7í}P˝ŻŢ|đáh}’yőűťëÝvąę˝©Úľňç$˙·PŢćÎő®2ř÷­×´ü¶$ďÇÄ—ˇÝÖˇę=©ú\ßźâń»óý±>łUúłÍŞzߏĺďpÇćŰŃR]˙F»Ľvç>ooWk°Ö &ęłÎ±\ŇXĄnŔ€ç| 0!a¤Ů _2¨zďĘ܉Fn2ů.»äń/ŻüVë¶ťń _66˝0ŔŰíyÉ`iţyí[·vN+ hoí}SK~]ôŠÝku[ÓÁ۱m_şžşźâ""™^X× ý¬ťěď[ł×+Üţ7˙zń>*˝×ń{ź[F·ýVóóĄÜľ§=öůąĺĎqîy…ýűl'ę—-Ýö‡¦ţ>©ŢÝׯĆßnaz{›óű©|¬¨ţ—^3żž=ôg_ ŕďşµ˝ş_sóEۦĺ•î—ü{SŘUűJ§ĺöiq?vWőŢŚĺoŁőśŠăA•ÁżoŐď©*lwÍýé¶ţő×=Ńmşľ'ź«řąůĎNîřÝ1-âj›•˝Ýcý;4žŰ‡cČX¶+ů›)ë;˙Ž’ăDűqÝÎě¸đfzlno[wÝÖ=„÷‡{Ö &0vťß˝[Ô˙ďÓŔ5ëË%ŤUę6A xηPFš úý¶8ŔŠëĎ`-ď[=Ű W] ďiQ·ýˇ©żO¦ĆgĽ?ű -ô÷­Űúűµîý=~‡±ÍÍ…Ľ]ÝÖ=„Xt.Y¨Ď:ÇrIc•şMPžó-Ŕ„„‘&~ńéÉEť«50~ý¬ĺ}«P¸24wEëńžuŰšşűdŞ|Ćű±Ż0ńBßş­żóuŕńŰŰm§·«Űş‡ěźOľ°1PźuŽĺ’Ć*u› <ç[(€ #ˇfNv!ÖÂĆ{ZÔmhřś±ŻTç­só|üBßş­˙dţĚMÖmy»ş­{±ŽU.Y¨Ď:ÇrIc•şMPžó-Ŕ„„‘Đ3'»kaă=-ę¶?4|΋ŘWa ý}ë¶ţ“ů37Y·9äíę¶î!ĤsÉÄ@}Ö9–K«Ôm‚đśoˇ&$Ś„>9Ů…ëË%ŤUę6A xηPFŢ˙çŽŻŞ€źôý±Âű®nďé|p[Ď™¬t{u»»e*î“nzí+Ž ţęö7Żńý3^őą›¬ź“u›CŢ®Şu!Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç| 0!„B!„©kÎ%kőYçX.i¬R· `Ŕsľ…B!„BČTŽ5Hç’5‰é˛zä]ůř“=˛ŢgťcऱJÝ&(€Ďů `B!„B!S9Ö ťKÖ &ZŹn´§d¬s,—4V©Ű0ŕ9ßBLHůđĂťď[Őw»ů°~ú÷ŮB!„ޱé\˛1‘Ú¸‡ôdťcऱJÝ&(€Ďů `B‘~ô‘|üÉ'ÎčëëzXńaýˇj› !„BČä5Hç’5‰0¨Á:ÇrIc•şMPžó-Ŕ„„˝Ő*('š®‡_Öoşm3!„B™±é\˛1‘ąM¶˝ó©ąÍ°Î±\ŇXĄnŔ€ç| 0!aÄ,X·~+>¸vëoĺŢ…ŃÉÄĘmťó4Őc™Ť ŕA¬_Mo>xAôÚß’ÍĆ´cÜfB!„29˘ç‚>±1‘â `PuŽĺ’Ć*u› <ç[(€ #fÁú›‡ĺËqÉ™—_~đ·ťó4Őc™Ť ŕA¬_›WÖ,€Ç¸Í„B!drĤsÉÄDŠÔ`ťcऱJÝ&(€Ďů `BÂY°~˛M®]ř°ĽýĽyĄ^ÁŞŹĄW±ęÉE:-ąVË Ńčy­oɵ…˘ÔZf[Ł¸Ű˛âÂ5[źöú¶_+· Ó/{|XîýM6-żîŃ´Öă‘Ör#+· ŕô*_óycÜfB!„29Ň>Oô5‰Äę‘w)€@OÖ9–K«Ôm‚đśoˇ&$ŚŘkwĺ«_óżżůŕ·Úhëę×öĽUšŔ´ÍÔůҵXÂjá›¶Z çË[ť–­{ţçň- Űoëy…ß«QB!„LîXt.YHĘߏ?Ů#ëŤiyÖ9–K«Ôm‚đśoˇ&$Ś4.Xó°\›ÝĘ8˙sú{ëJŮHůŠ×*}+€UvUná;w·ÉµÝľ+¸Ľ*ZFĽţŮ˙¶¦iYśŔ…«3ĺ«€»Ł&„B™ÜéëË%ŤUę6A xηPFĆV÷__ ŕŔPB!„LîXt.Y¨Ď:ÇrIc•şMPžó-Ŕ„„ `w(€ !„B&w¬A:—¬ALÔgťcऱJÝ&(€Ďů `B°;Ŕ„B!“;Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç| 0!a„Ř `B!„ÉkÎ%kőYçX.i¬R· `Ŕsľ…0Bě0!„BČäŽ5Hç’5 €ú¬s,—4V©Ű0ŕ9ßBLH9pđ |řŃGfA9Qôőu=¬ř°~PµÍ„B!drĤsÉÄ@}Ö9–K«Ôm‚đśoˇ&$Ś|đÁq©WŁş˘ŻŻëaŇő„Şm&„B!“#Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç| 0!„B!„©kÎ%kÓo·É¶w>•Ź?ůTŽŚÜfLXÖ9–K«Ôm‚đśoˇ&„B!„2•c Ňąd baă `ŕëË%ŤUę6A xηPB!„B™Ę±é\˛1@ ëË%ŤUę6A xηPB!„B™Ę±é\˛1PźuŽĺ’Ć*u› <ç[(€ !„B!„LĺXt.Y¨Ď:ÇrIc•şMPžó-Ŕ„B!„B¦r¬A:—¬AĚńX=ň®|üÉYoLڬs,—4V©Ű0ŕ9ßBL!„B!d*ǤsÉÄ/-G7ÚÓ&ëË%ŤUę6A xηPB!„B™Ę±é\˛1Çmă `0eXçX.i¬R· `Ŕsľ…B!„BČTŽ5Hç’59nŔ` ±Î±\ŇXĄnŔ€ç| 0!„B!„©kÎ%ksün“mď|*GFn3¦L.Ö9–K«Ôm‚đśolĽI–LżB†ăź·Č%3ÎŻÄżB!„B!^ĤsÉÄ7®SuŽĺ’Ć*u› <ç[&®&„Ś+›Ż“içţX§żşË1ľúŚřÄeÉÓéCYާ˙K!„BH@)Đąf bŽ0B¬s,—4V©Ű0ŕ9ßBLHyćę+ä’«/‘uoĄ¸ĘŢČW–wŃÇvÉ3Ol‘7z”ŔGwl’Ťż>ţF!„BűXt.Yăµzä] `0eXçX.i¬R· `Ŕsľeâ `ýůlY3˙"ĂËgČië†ĺîĹÉ•„'Ě8[®Ü|,™ĺđćĺ´ÉÁqÚÜëdcVzŰ"WÎťŐzÎ%OI'2™ýý,}LŽľr“\đ=Çĺéč˛dÝ®ô—ćˇ&„B!ľ%ó…59Zţ~üÉYoLڬs,—4V©Ű0ŕ9ßR·ţw'>ţÔ$Őđ ÓĘŠÍ专×Öť-'̸Qž×‰;ÖĘ)3ÉşZ“ť/‘isďťŃo;ם%'^żEŽFĎ:şcX6ňťÂd äč†Kä‚ ú÷°]Vś»VZµŁwČKo”ł˘ż§ĺ›˘żŹhľë—ȉŃI…Ţžyß×µţCŠf-‘»őďď­Č‚«·$ĎŹ3"W.ţěKKr\^ű^˛}ďőĺźľ˘uŇrBÇŐýäů'F’ĺĽ5"7o—źŽţFźP[äŤčůű~ťýyúőčďXçÝ.Ď´Ű.ű˛+ă+ŠłÇ·Ä??źţ‡ GG·Čp6móëÉŐČÇ^—á§GäůÍ:şlB!„Bj¤}ŽëkőYçX.i¬R· `ŔsľĹe<­PBµ§?ý,9­p…á.Y3÷lY·WäŤďť-'Ě˝Ižy‹/%S%Çä§K/‘ź¦ČżvË"Yµ#ůY ŕÓćŢ(ĎżťüşsÝŮrÚő#é홏Čk›s…ęŰĂrÁâä;„źąţŠÖňdóŤ˛$.—sŮ|ťś˛řg˛3~ř¸ě{â 9qńcI©Úő ŕRüÄ–ôůińűJrµ~á ŕăZňFĎI×ńř^-ŽßLţ٧‡e8ţŹ@˘¤ep\ż˝˝PđĆËÓeküÄ&y­´)„B!„ôŠ5Hç’5 €ú¬s,—4V©Ű0ŕ9ߢp(€‹%o{zrupŮ,ąň×:ßŮxý˘äĘÄ3/‘Ňĺ2isě1Y•Żškĺ+«¶'?—ĘŘťë®hýŤiŽľr‡,83˝eşJݤ×e,‰o%],—ł /o˙­&‰ć[śţ-×-€s·yΗľ…xď–ä*Ţ-„Ób8™+JRk|ř•ňü‘§wÉŃř `®ü%„B!ÍSüwO÷¬ALÔgťcऱJÝ&(€Ďů-wëd" ŕř ŕ[¶Ëá·Ź-\ô{L^»ĺl9áÜäŠFB&kß·¨ó¤!»]ze<"Wž{Ł<óVÖîî’5ËÓXČÝË×Ęko˙¸t;č$Ď_żpB ŕăŁ[â+~;ófuś^M\0!„Bc:ηł1PźuŽĺ’Ć*u› <ç[|,€ĺ•›ä”čçäűő»~&WŢ2"Gĺ ßrŁlÜq,~|źcŔdR瀬›żPÖĄß}›ĺ™«ĎK6G?TŔŃßÔܵňZüN“ťO\!§dWk6ß$K_Ńľťt.GźŽćď- kŔÉ- ‡ĺĹě–îÇČľřçă˛ss—[@żµ]ň·—–cŃsôŘŔ„B!dڱé\˛1PźuŽĺ’Ć*u› <ç[Ľ,€Łě{â:9mFrpśvćY·#)o^+_™•8g-‘»[e!“0oýŔĽB·őxeý~ß’ävéÓgÉiWß!—,ÍŔzkéů?Č]e›Ďqyí{Ůsgȉ‹ďłÂuśpVćĆ·mŽ~=ţÖöä÷Řy-ý>ăÖ|ńĽ[Úp”ŁŁ[d¸5-ýžc `B!„2Ćdsľ°1PźuŽĺ’Ć*u› <ç[ęŔ„É”ăń-ÔlČZ]ß“ÜúŬ&„B!¤Ź±é\˛1PźuŽĺ’Ć*u› <ç[(€ ™jŃ«íőŞŢ·Żö0ű~˝IžOo }\Ż(~b‹Ľ˙F!„BHc Ňąd b >ëË%ŤUę6A xηPBĽĚńňâÓémžźŘ"/–ľ™B!„~ŤsÉÄ@}Ö9–K«Ôm‚đśoˇ&„B!„2•c Ňąd b >ëË%ŤUę6A xηPB!„B™Ę±é\˛1PźuŽĺ’Ć*u› <ç[(€ !„B!„LĺXt.Y¨Ď:ÇrIc•şMPžó-Ŕ„B!„B¦r¬A:—¬ALÔgťcऱJÝ&(€Ďů `B!„B!S9Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç| 0!„B!„©kÎ%kőYçX.i¬R· `Ŕsľ…B!„BČTŽ5Hç’5 €ú¬s,—4V©Ű0ŕ9ßBL!„B!d*ǤsÉÄ@}Ö9–K«Ôm‚đśoˇ&„B!„2•c Ňąd b >ëË%ŤUę6A xηPB!„B™Ę±é\˛1PźuŽĺ’Ć*u› <ç[(€ ń7÷o&ßb Ňąd b >ëË%ÍöíŰÇŚ€oˇ&„B!„2•c Ňąô™˙x˘9 €˘s)ëË%ŤUěÖE Ŕ·PB!„B™Ę±é\ú?ů¬= €žô\Ę:ÇrIc»uQđ-Ŕ„B!„B¦r¬A:×ţýźj Ě•Ŕőťčeů«4V±[0ßBL!„B!d*ǤúEc»uQđ-Ŕ„B!„B¦r¬A: _4V±[0ßBL!„B!d*ǤúEc»uQđ-Ŕ„B!„B¦r¬A: _4V±[0ßBL!„B!d*ǤúEc»uQđ-Ŕ„B!„B¦r¬A: _4V±[0ßBL!„B!d*ǤúEc»uQđ-Ŕ„B!„B¦r¬A: _4V±[0ßBL!„B!d*ǤúEc»uQđ-Ŕ~ćř±cr<ý™B!„BČŕb Ňý˘±ŠÝş(€ř `óôń?¦]?’>@ń?Çäč%żţXú;!„B %ĺ: ź4V±[0ß2Ą ŕ´h=aî˛3}Č‹üúF91ZŻWŤ§~]¸ú:ąäęµ2üvú ;›Ż“içţX§żşË1ľúŚřogÉÓéCqČóO ËĆĽ§·Ëľ1\ĘŢ˙«ßwÉďĎů3yëäś…%ďH'÷%/ČۧFË]ůBú{Ăěúor0ZŻwěJ „B!•üŕĐo«Ř­‹€oˇŽŔľŔ}É&Y˙ĂĺlY3š>D‚Î3W_!—\}‰¬{+}ŔUöţ@ľ˛tŘ(˘µŢ$Żĺ.€=:şE6>±˝YiýÖl|z—Mm–ÎuH’Ŕg^,żţďňî#—­o-üľ|Îá<Ŕ„B!ÎR úIc»uQđ-u ŕwâéO ňöYunrĄŕ ÓgÉŻß—:/®:+ylţd_ôűó×ĎŠź¶|“}k‹¬YşP¦ĄĆf,”+7§mNVŘ.˝Cî^ś.wĆŮŃôňâ÷–ÄWÍž0ý Yp_Z dóźy‰\™Í?k‰¬yĄ´Ľ¬>ţş<°ôěôµgÉ)‹\«^®óĎS–Ţ( f%?ź¸řy1~™]˛f®>­ç÷n”Ó˘őŤ ŮcŰeÍâłZŰyâąkĺ™ěJÝl˝˘ý§j˝ Ó˛×}Sî>7٧jÚ¬3˘ĺ˙X޲ńęöĽÓć_'÷Ö»Öňµ×^‹WŮ$K–>&G_ąI.ř^_/[mžŃ;dÉ:«¤´Ę×n…ě ŇŁ>çżµ ß÷®Ś~?ů2y/úůÓ#˙CŢ>çsÉ•Á§~EŢNoăüác—É}ěäÓäwçś–Ě_*jŰËůĄŇyŻüe«ĚýÝ7.ަ}E~żë¸üó.J—őgrŕČúäcą×]ř•ř)€ !„B&>Ůż; ±ŠÝş(€ř–ÁŔŻËŞ3ÓÜŚ3ZĄăWîÓňjD®śˇżĎ’Kľw‡śO["?ŐÎĺ­ČŁÇOÔŇrVVb¦Ó˛bTĺ–™ž/S-’»µLÍĎ_^Z^\“ź.îś·Î÷đfp,ż^‹“Ł­8›­ŰŢ]˛.{,šżµ^3n”çu…¸j˝şL[ţcůVţ5U´ŤżľoQňsî5“÷Ł:Züţ˙Ç˙Łv“Ł.‘ 6č‡v»¬8w­´Ţ…Ń;ä‚ě?<>/;×Eó]źüÇz{ć}O\'§eźŻYKänýŹ˘ż±WoIž'ú{\śüÇí—×Z˙QEî?h(üM]!ĂÉĚiŞ®>&Ż=˝Iž˙µţžÍs@^ÜÜľ]ô3Łéă+€_OŻ>&;7ojĎłăHü¨ćđ]VúüÍ»äč±×e8ű=ň|áJéR||‡iýţ–ü~±ţĽZŽýďňŢuZÄ^&ďűż’BWËÚ˙­EmôsĂř­Sż*‡®»UŢýĺ_Gó|N=˛C>Üţ}9tjňüţöŁÇµpŢ!ď˙ŕ˘čg `B!„iźăý§±ŠÝş(€ř–Ŕżľ1)Bł«kŹýLľ˘żź™”WG7,)OË®(<¶]Ö-]ŔY™š^5›•OgŢ$/ęĽ;ÖĘ)ńôłdĹ+úŔvą2˝7ţnŇlţ—ČƸ[zSÖÍO¦ĺľ#Ĺří'ëך7[VZW$+€§-NJ«˝ZbëcZD· ŕÖ6fűfÖŤÉväJâZňĺ ŕŞőúßé´ču§“źŢžgť·€~ă{gÇË=íj-ŕŽËń˝»JĄ_g˛ň÷żţ×˙Łv‘cňÓĄ—´>‡ŻÝ˛HVíH~Öř´ą7ĘóéŐă;ם-§]?’ŢrůĽ¶9÷ĽoË‹“ď~ćú+ÚźëÍ7Ę’¸\ÎeóurĘâźÉÎřáă˛ď‰+äÄř?hRyp»€Ť=˝%]†ŔĂ2Ľ#{ťă˛ssî÷ăÉsăŇ6W~%˙śd/ę¶ľµ=ZţHşmŃúý:›ŻÇŔZĘfN=O~Ż›‘˝_‘ß˙ä˛řçCé…ř­˘·AśÍóţÍzőp¶ěÔ•ĄĄtzęŇs!„BČÄ%ţ÷/`@4V±[0ߢpŤ ŕ•‚yŮU[ä’ěĘÄé—ČƸČÉ_ŃšW*€µŤ“•śŮ2ŰEjˇÎJč(Zécq›ź®EZĽ¬˛Ţߡ›Ŕ­‚·µúÜüĎéäŽí(-#?˝j˝žN§ĺ¶Żë;€wµoť™6÷Fy¦Ł(k'_ţfˇvcŹÉ‚¬|ŐěX+_Yµ=ůąTĆî\wEáózô•;dÁ™íŰ·>+Ń2–Ä·’.–ËY†——?÷ú·™ţťUŔVůŞI®nM;ľKžŃ7ýUstÇ&ŮřëhťZđy±\(G†GŹ•Šá$IĎÝŁŽżř§rX>őŻŁµŠräůť˛7żĎ©ůT˙ß^µŰźřŘJ˝ÍóEňnn˝>•7“uZü€|¤PB!„8Kë|ŤUěÖE Ŕ·hą['cľXoMś^Í›¸N†Ź‹ěËnGś:%.´˛˛ô¬´|Ęn#ť–Qc-€›\‰ż3·eˇ¬+ať©wp®PËŔ‘ŽőzŃş8»úÓ(€G·Ë3oE;˙Řyń–…í×č’+®¸˘PţfŃÇt™.ý­Ä˛Ű…WŔ#rĺą7FďyÖ:FźłĺŮ,p@î^ľV^‹>_ĹŰA'yţú…ąĺhÜŔńżĄŚąNoýiZî&eë[ňű…Zâę­ß”ą(ą*·Ű- ł˘Wý—I™ÜŁţôůżŠ_ď­oü4]ÖirhÓ1nM!„âI:η€>ŇXĹn]Ŕ@|ËŔ `ý®Ňô;€łârÚôłä’§ŹH|Ec|ŕ;[ÖlţAZbjQ™»8˙ݸY‰9Ö86+·ĽEr·Ţj6_ÇW:]_;^ßYň•~KÝÓő;€Ďý±ěk­S®ŤÓww¬WnZ~ű?&‡µěÎżĆő#ňĚŐé• ą×¬óÇÄeČşů e]áűl%z/ĎK6G?TŔŃßÇܵňZü>&;ź¸BNÉ_-ľů&Y˛řŠöí¤s9}Çv čšp´Ě:·€Ţ÷ĘpňýľńLŃz˝u ůĘ·€~e“l|Eż¸^¬ëóî7´¸M®ĘýôČ˙·ęUşŃc§~Eż_üŃc—É}ěä/Ę3őµčůŕ_MçýŞú†ŢŢąşÖuüç\$NŐeü™řĆ“÷uŹ˝*G˛×ýĆy\L!„â(ÉżSˇ±ŠÝş(€ř–ÁŔQŢŢ"«ÎÍn9ý×M÷n˙ŁËÖ×°^đ çĆ“‡ţ;Łţ»c±é€~ŃXĹn]zľM x.Ä”˙Ĺă§#}ôQş‡ű]&e=BÂąńäb¬A: _4V±[—žgSž 1ĺˇG˙Ľ˙ţűňÉ'ź¤{zěŃe責×BŔąńäb¬A: _4V±[—žgSž 1ĺˇG˙}řá‡ňo˙öoéŻ}Ž>×Z&"ÎŤĂb¬A: _4V±[—žgSž 1ĺˇÇ`4ýÎ,ľ›“çĆá 1Ö Đ/«Ř­KĎł)€Ď…ňżĐc°ţůź˙Y>ýôÓtďwF§é<Ös€É„săđ„kčŤUěÖĄçŮŔ€çBLů_č11>účŁÂ­ďôg}ĚšĚ87G±é€~ŃXĹn]zžM x.Ä”˙…çرc­ĎŽţlÍLś‡!ÄXt@żh¬sç&(€Ď…ë`@Y±é€~ŃXçÎMPž 1ÖÁ€˛c Ňý˘±Îť› <b¬ e!Ƥsk\öłÍr˙pÎĎ7ĘŤ—žÓšç 7?^ś{\.űJ2ýOŻ“5?űeúř/去ÖÉĽŮÝ—}ò?o-ű„éź——Ţ)ßÉ?˙ű×Éç?›MO_˙ç÷ČžŐ~L-Ľkł¬ľ4ýýłçČÂďo”ĄŻóŁź­—VüůăxŢ«euöúyw]]X^ďĺ¤f]'k˘iwÝş¨řÜl{t]qţŘ9réŃ´ź­“/Äżw®ÓŹ~ö\úµĎ§óëôö>në±-˙i™\öŁÇŰë˙ŕrŮ׿TZĚ4ÖąsŔ€çBŚu° ,ÄXtn%Ąe«HťţyůÓón•ďüü—rĂד22.`­˛TĹeč/eÍĺ_’?ŠžűÇg]$‹ż§ś÷źtziŮźý‚ĚřúťrG«Řü|´ěŤr˙Ď×Ëe_?Gţřł3äŹf-’ĹwýBîßpŹ,Ś—Ń. ôýË Ĺjľ>ăÖč9?»Cţü”hť?{†ś±ěąń›Ąóv+S;U/'1㛺ο”m¸Sţ<÷x»đţ…\B™>›®IDATőµü㑯˙}RĘ ŕÜ:ék­xH~ôóda\tWŔݶĺ 9ďGŃ~şë:™ˇú)çČźŻ¸Gn¸<_¸€ÉNcť;7A x.ÄXĘBŚ5HçVąNhéz׺¤ř¬,€ż˛Nľ?ĽQ.=ËÖeŮ˙ůű›ĺŽo.ÎşUľ3ü¸\5?»ę5óç˛X‹Ě;.ŤŹ_˙ÁőŃĽż”ŐËÎhÍ—/€őçlţNő ŕęĺ¨ErŐ†_ĘŤ__&×Ć˙›_wÝŢÇeő]ŹËŹ˘ýŐ.«“íYűŁőÝ ŕěůFŰ´¬ŰôŞÇU˛żżóÍöŐŰ`ęŃXçÎMPž 1ÖÁ€˛c Ňą5Îřł—Ę ?×+[Ë–ý—ř*Ţöôęřóz%폾iÜ.9˘WĚţüďe^ôsöú3ţf}áVĐů8ž¦·Ź^÷MůóŮĺBą~\˝śH¶^ŃvĆW n÷śŔ—ť§WEçJńŻÝ!wés.}`ŔđçeŢz+íÇeÍÍ—Ëô*ćŽyŔd§±Îť› <b¬ e!Ƥs«ł¤ýŁŮ×Éęň- Óď”mÉÂ…ďťý…¬ąy™üi<ÍXö×ÖÉé-’“’yY{9yń•ĹČÂčçv}Ž,»ż}+č|¬ĺçç/żGîĐ2:ZŹ=xŹ,<++@µ4Í­{¬{‰Ú}9IÁšăÉĚů«źÓ8Z®–ĂÉ•ÄgDëůËäŞÜĘřóňgŃô ?$çőĽtŶ|öĎeîÍÉ÷ÓőżëGëdnz+m05h¬sç&(€Ď…ë`@Y±éÜJJÚbˇř YűÍEňGéĐúÎÜűţ¸¬iÝ>şW¬>/3.˝SľółäjŮű‡)w|˙:ů|îŞbł€Žo±Ü^ö}ĺ:ąáţě{ő»{ď”˙ÜşVKÓtýňŚ+c».GoI­WúvÜj9ůľ_˝•őź– ŕ˛Ćpi}ă}Pµ-ź—?[|«¬~°˝/ż˙Ł[ĺ cťŔ䥱Ν› <b¬ e!ƤúEcť;7A x.ÄXĘBŚ5Hô‹Ć:wn‚đ\±6”…kčŤuîÜ0ŕącl( 1Ö Đ/ëÜą `Ŕs!Ć:ŘPb¬A: _4ÖąsŔ€çBŚu° ,ÄXt@żh¬sç&(€Ď…ë`38ĎĘU­ăyrר5Ź_žş!Yß«6ŮÓ`Ş1ůÁ9 ß4ÖąsŔ€çBŚu°¸M+ĺŞ{îŹě˛§{ä©VĘSĆă0Ő„kčŤuîÜ0ŕącl-)UwÉ]7Ü/;[ŹGż/Ц^ś])ś•ŻUÓ"›VĆÚŘ‚Ü2Gď—ąůÇĘż×@ ‰“śúMcť;7A x.ÄX›ÁzV®şáŮřçť÷¬ě¸ ôÎ{΋šéíˇG‹W wť¶éŮB<·đśâkXŻY…!ƤúEcť;7A x.ÄX›ŇŰ?gß§[*xUUAŰuZţ ŕHľÎÎş례DÉ˙»"ĐoëÜą `Ŕs!Ć:Ř ŇS7”ĄŰ17/€ő–Đą’Ö(•źş!˝j8_>×D ‰Sř÷O Ď4ÖąsŔ€çBŚu°śÎ+pËĄî ŕÜ2µ`.^‰KágKß9\0$BŚ5Hô‹Ć:wn‚đ\±6ˇWę¦ĹÖwëwúęcz…nnzŞ]äVMË/'zü†•27úßň•ľf1\0$BLţß#€~ÓXçÎMPž 1ÖÁf2k‘K ‰c Ňý˘±Îť› <b¬Íä±KîZ;—n?]GöťĹMż;&›Óú÷A`4ÖąsŔ€çBŚu° ,ÄXt.Ýxó­ň»C‡Óµó3~÷;Yąf­ąţ(ŇXçÎMPž 1ÖÁ€˛c Ňątěý÷Ó5ó;şžÖú Hcť;7A x.ÄXĘBŚ5HçRH±ÖEëÜą `Ŕs!Ć:ŘPb¬A:—Bеţ(ŇXçÎMPž 1ÖÁ€˛c ŇąR¬ő@‘Ć:wn‚đ\±6”…kÎ%+˙–ţßżţۿʧ˙öiLÎwkýP¤±Îť› <b¬ e!Ƥs©-xµđý—ýůđÓĺýOŢŹéĎúNë,ŹÉ‹·,”iń2Ď÷íJŹ2úcY0+y­ió×Ę‹ÇŇÇŹ“מľC.?K.y:}¬GĘë€NëÜą `Ŕs!Ć:ŘPb¬A:—ňÉĘߏ>ýHŢýř=9đŃAůÍűbúł>¦ÓĘ%đľű–Č‚űŢ”ăúËŰ#rĺÜEr÷ŰúËë˛jîą{ŻN9.oDóťrýNá«Ď’ Öm’ť.‘%Ŕ}Ł±Îť› <b¬ e!Ƥs)-uő*_-zßüçßČkďîmożÓźő1ť¦ó´ ŕ7eÝâ›äĹô7ÍÎuWČšŃč‡Ń;dÁŞíÉq¶ËŠsďťéoqžľ‚ Ź4ÖąsŔ€çBŚu° ,ÄXt.ĺŁßó«·zÖ«}µđýć?­•˙Ç˙ů>1MVýÓ­ńc:MçŃy퓟.żQžŃźľBN[—»t”ŤKŻáôç8Ŕ}Ą±Îť› <b¬ e!Ƥs)˝µł~߯ŢňYŻúýż=ö˙’÷č˙=¦?ëc:MçŃy­}úFąňéô‹~Ťxx90Ŕ i¬sç&(€Ď…ë`@Y±é\ĘgĽđѧŻů·Ł>&?]L 0HëÜą `Ŕs!Ć:ŘPb¬A:—ň)ßúş˙ď7[đµ;ľYy 裯¬• ®ß"GÓßăđŔNcť;7A x.ÄXĘBŚ5HçR>˙ýßżüëżČ»ż'oţóoâÂWŻúUúł>¦Ótť·-z—o*–żq^—Ugž-kvŹ~>.oÜ·DNą~$™”… Ż4ÖąsŔ€çBŚu° ,ÄXt.壥®ŢÚůŁO?Š‹^˝ÚWoů¬ôg}L§é<ůxxą±ěĺ›’‰Ł?–ł’ǦÍ_+/¦_Ü 0@_i¬sç&(€Ď…ë`@Y±é\*'+ő*_˝Őł~߯ҟő±rů;‘±ÖEëÜą `Ŕs!Ć:ŘLy{–ů'Í‘U/Ó8őÎöűäŕŠűämc+ÄXt.YŃ‚W˙OżçW _Ą?gʻеţ(ŇXçÎMPž 1ÖÁ}°wH®˙ćĽaMĽsŘxl żDŢ:ůĎÚfÍ–ß~^~oÍ;FGî?7ZöąrhŻ=˝—C©ëv‰2¦ Z±é\ )Öú Hcť;7A x.ÄXôÁ«kĺÔ9kĺek0ŃFꕇ‘}Ö´÷öËËĂdhGJŕ´>°r˝Ú°^~wŃ)Ńď§ČÁ'Ťyˇ»c ŇąR¬ő@‘Ć:wn‚đ\±6AzląśpńýňÜ-ĘôřŔ;SN˝ćÉVáőň-óâéC×Ě“ii1űĆđ 9ó¤ô@=óBYµeşĽ!Y<}ž¬z5yîˇn—ů3­ůJÓNš'KŮ•”żń:¤zÁńüËĺ®h}NM×gúůw·žóƦŰĺÜ93Óĺť.ó¸=}nşžŹÜÝZ‡isVČĐţýÉvvĚ9<"kÎ?˝˝¬[¶v)1©TŔ}”ŔOßţ·r@ áożýľWŻřR<]Ká+~‘\Ľ˙yůÝ-ŠŁÇĚoÍ_(jsË9ňm]Ć—äwŰ.ő9-‰§ékľł÷rp^ş¬Y_’O&«o˙â䱓ŁĺĎË-Ť„äß}üR¬ő@‘Ć:wn‚đ\±6AŇř¤™2÷†'eçá÷dß«÷Ëü“fČÜÇpt0>3ťţŢ–•2cú<ąjx—zď°ě|dąL›~ž|wT——+€÷?,ó§ź.KKç^)§ž´\ÝźM›)óďŮkúšKŻJJ¶&W§…ńô‹î——ŁĺÝ ‹ăußOůž˛*ZĎ}úúŹ]­÷…rŻľ~ĽžŃ?dć­”§ôv¸űGdŐś2cÎy2ť–}ąíŠo—»_î=?zťË†â}phôIąjÎLYüX»ĐFŕöo—ˇÇ6ČCʍ!y.ú<ď{a(ý]=+;ŁůvnÚ C›¶ĆŹ=ÍŁżë˙ęgäWŹ ÉS[žl=çŃ-Éçđ˝÷vÉs­e?żÎŁ/”>;Ąř÷–´~?ňzëf-ewČŰŹ_Ń*mßľyvűń´¨mTź<[\}…•ßťý>ďoäđë#rčjť/zţţ‡âçľuŃßËŰ#Ńs(€Ć,Ä”č\űŕÓ5ó;şžÖú Hcť;7A x.ÄX› iŢŹxďß'đĘç“ß#ńkÄëtŠ|6yŚ`ěBLÇż˙}¤±Îť› <b¬Í hl=Ţu®ÎŁM®žvŃòsď^y#ożŻîRÇWíž'k^Č^űYąŞppX—uŇ2ąw4·1n=ą–}{_—_mŇ[?wżxprµmzKćY—ȡčyGnźO;°ňrdä>9p†–¸Ýoť˝ź‘·oď|ĽŁÖ×[ ĺnş¬űŁçĚűŽiÝú>n 0N!ƤúEcť;7A x.ÄX›Axl|đ©ë’+tËđ{/ÜTüŕÇ®’é]ż8÷=żŁOĘŞkîOŠ]ă;€Ď=˙ödZ\ę^(ßݱW~µ#ů⮪ ŕř5Γ5;ô¶ľűĺĺ{.”i­Ň·a=_żxÚůÉw ż·— ݲBîĘ?KnßüTüY‰~?¬·oNľówüp4Ď–ú·€În·üÎÖż‰׫rßyoŻ^‘”ŔzEî«×'Wýî^~·ŕ”äńł´ NŠŢ÷ö˙\žˇóFţrQď+€őőöţBfËšő%9¸a4ľ řČĂÉzĹß|ţ˘˙Ą‹c Ňý˘±Îť› <b¬Í  Ľľř~yî›_•ińw¦śzÍ“­Â«ŁŽĽ1Ľ˘}kĺ™ĘŞ-Y™U,V÷mY+óg¦óťôUY>Ľ·µŚC/Ü^¶ô‘¬ěÝ%÷^tzüřôË6TßbąŞÖźxˇLomÓí˛|ÎX ŕČţ­˛ęüd˝tygFűŰ?O"úť˝ŹmoýĐ#CňÜhZGźÇçâÇ’Bx,pĽŚÖ˛źŚ_§ŁŻÜ­žÍép*Ä$˙î †Ć:wn‚đ\±62ř¸XđŽťQ¬(ĐŇxčŐ¬`î `Ż…kčŤuîÜ0ŕącl%řđa9_‘»L˛¦SÔľWźl_ń»D-}'0&żc Ňý˘±Îť› <b¬Í „P?wCr{ä3Óďî—G/¶˙ápÂśµÉwŢŰ//·o/=ôjźo˙ ď…óßĂ€>ŃXçÎMPž 1ÖÁfPZ{îĐţ˝ňĆ^ %€0„kčŤuîÜ0ŕącle*Ŕşc Ňý˘±Îť› <b¬Í P@¸BŚ5Hô‹Ć:wn‚đ\±6B á 1Ö Đ/ëÜą `Ŕs!Ć:Ř 0„+ÄXt@żh¬sç&(€Ď…ë`3(Ŕ öÉŇ™z˘4OÖě0¦· Éâ9kĺes&J±é€~ŃXçÎMPž 1ÖÁfP(€{ląś`ĄŻ®•Ĺ·l/>ćçn'ç>˛×śöčĹódŐ«ŮďţŔ;×}UÎ\·ËśVKôťęá{PG±é€~ŃXçÎMPž 1ÖÁfP(€{ląL?}ŽśY.=-€‹%oŐ´It00X±é\ű?ů¬|ćŹOŚL@-'Ęż˙ÓĎšçV®i¬sç&(€Ď…ë`3(ŔŔ€ĹĺâVyč˘óŠĹjľ><"kÎź#Óâ”™rę5OĘľtľG/^.w ŻSOJN^¦ź·ĽĽ÷IY>gfrBsŇWĺú-űÓĺî’‡.›—.çtYüűŞŘ}[ÖĘüř6Ď‘™ĘŞřůŰeŐśô1U(wKÓ.ŠÓx…ÜuË…2=~üt™˙Ă\‰:şA–fë8sąÜ;š-«íĺ[–Ëň{n’3Óm›6ď&yn{ÚU?I§ĹŻ·_žk˝–ąyçÉâDzĺćç›)g~skk_ľ‘ŰŹÓć\%Eë¤ĎŤ×1¶\MçEiźůáţTË_kP˝üű?ńŻÖXçÎMPž 1ÖÁfP(€Ë®.Ý?$‹ç­”ç˛ÇsđS×̉ËÓ¸¨<ĽKşřôVˇůčĹ3dúE÷Ë?Öß÷ĆÓ´´]óBRúî{á&9uÁÝňFĽśÓŁ×I–łDVÍ™#׿,§eôn™=˙®‡“çżzżĚźyž|7-h]<}¦Ě]—ľŢŢ ˛8Zî˝q)ű¬,źÍŰZǵręé7ÉŻŇĺd´|ťvţýňrüśýň+ýý˛'[ÓN·V~•–Ľ;xžLŹćMöĂ~yůž ez´Ý;ÓyłýĎwńŮ©óĄűrţO˘őxőv93Ú˙CŁÉvż±ie´ßnŹźĎŔ d!Ƥsé˙ýąň`¬ô\Ę:ÇrIcť;7A x.ÄX›Aˇ,W.î‹~>ó†­ÉăU·€Î=çŃ‹łRµ=mFáyzu®^ąjÜ’yËJ™żîőÜĽďÉ?®űjîjŮÄľź\(s|ďoŁřôâë=uMz•łQ¨>wĂ…˛fGűwĄWů_k«\5g…<OË_Őűş¬™Wľ:wżÜ{ţyňÝ˝ůyŤůö?,ó/2·{禭Ŕ x!ƤsÉČ@}Ö9–KëÜą `Ŕs!Ć:Ř 00`…rqż+ËO_.ŹnÉJW˝’už,ŢŐú®ÚüsŔç?Ü^F}˝¸˘Žo»ś›fé,€űpđůąŰlçXŰ}h˙~9¤?S€€…kÎ%kőYçX.i¬sç&(€Ď…ë`3(ŔŔ€Yĺâ¦2cÎ<™?®ĺćy˛&ýNŢCŁ[ĺ»çĎCś~—đ=éw żwXvoˇô»}[˛ď~5ý~ŢßüÔ5ódyë*ŢŠ8.ąŰݎßĹ;ôČ“Éí– óWpľ°Íľ8›·ę;€ĎĽ!z­ř»‚uű†äˇ-úŔkĺÔ9íďŢ÷Âí2wAşţŃűqę5Ĺ+ĄBb¬A:—¬ALÔgťcą¤±Îť› <b¬Í PÖĺęŇçnÓ~üŐ»eţĚäädÚéĘŞ[–É™c(€ß{o—çâˇč÷Ş82şA–Ι™ĽĆIóäÜ{:÷Îż|Ý 9ő¤d]¦Í»IžKżď¸\kéűÜ-&Ż™~ţÚ.ó–ć[p“ Ąó˝1ś{­9WÉC­rüYą*Ţ嫌übâsDŹX¨Ď:ÇrIcť;7A x.ÄX›AˇŕJç- Ç¦ł,:BŚ5Hç’5 €ú¬s,—4ÖąsŔ€çBŚu° `®ô§>,CϤSV±é\˛1PźuŽĺ’Ć:wn‚đ\±6B Ŕ•qŔ;n—SŁşión7ou 0„kÎ%kőYçX.i¬sç&(€Ď…ë`3(Ŕ®c Ňąd b >ëË%ŤuîÜ0ŕącl…Âb¬A:—¬ALÔgťcą¤±Îť› <b¬Í P@¸BŚ5Hç’5 €ú¬s,—4ÖąsŔ€çBŚu° `W±é\˛1PźuŽĺ’Ć:wn‚đ\±6B á 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁfP(€ \!ƤsÉÄ@}Ö9–KëÜą `Ŕs!Ć:Ř 0„+ÄXt.Y¨Ď:ÇrIcť;7A x.ÄX›Aˇ€p…kÎ%kőYçX.i¬sç&(€Ď…ë`3(Ŕ®c Ňąd b >ëË%ŤuîÜ0ŕącl…Âb¬A:—¬ALÔgťcą¤±Îť› <b¬Í P@¸BŚ5Hç’5 €ú¬s,—4ÖąsŔ€çBŚu° ``°îŢ t°ÎÇ"ÄXt.Y¨Ď:ÇrIcť;7A x.ÄX›Aˇ€p…kÎ%ksü†dô“OĺČČmĆ4€ÉĹ:ÇrIcť;7A x.ÄX›Aˇ€p…kÎ%ksÜ6îˇüS†uŽĺ’Ć:wn‚đ\±6B á 1Ö ťKÖ ć¸Q€)Ä:ÇrIcť;7A x.ÄX›Aˇ€p…kÎ%ksÜ(€Ŕbťcą¤±Îť› <b¬Í P@¸BŚ5Hç’59«GŢ•ŹßyIVÓ&#ëË%ŤuîÜ0ŕącl…Âb¬A:—¬AĚqă `0…XçX.i¬sç&(€Ď…ë`3(Ŕ®c Ňąd bŽ0B¬s,—4ÖąsŔ€çBŚu° `W±é\˛1ÇŤL!Ö9–KëÜą `Ŕs!Ć:Ř 0„+ÄXt.Yă7$Łź|J ¦ëË%ŤuîÜ0ŕącl…Âb¬A:—¬ALÔgťcą¤±Îť› <b¬Í P@¸BŚ5Hç’5 €ú¬s,—4ÖąsŔ€çBŚu° `W±é\˛1PźuŽĺ’Ć:wn‚đ\±6B á 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁfPÜŔOĘŇ“N—«¶XÓÔ,žľ\5§ő˛]VÍ™'«^µ¦č·w¶ß'WÜ'oÓ0X!ƤsÉÄ@}Ö9–KëÜą `Ŕs!Ć:Ř Š/W˙ęž«ä®ňŹQcŞ;l<6Ź_"oťügmłfËo?/ż·ćŁ#÷ź-ű\9´×žŢˡżÔu»DÓP-ÄXt.Y¨Ď:ÇrIcť;7A x.ÄX›AńĄ~ôâ˛ř±ücŔäFꕇ‘}Ö´÷öËËĂdhGJŕ´>°r˝Ú°^~wŃ)Ńď§ČÁ'Ťyˇ»c Ňąd b >ëË%ŤuîÜ0ŕącle°đvůîů§'Ý“ľ*×ßłBNm•şZđ&%­–żůsR'đ]ĂŃsNJź6ďvy9]¶>çÔ[¶§ŻyumnŮi<ĽA–žž.wć…ňÝ…đË·Ě“.ľ_†®™'Ó欍_ďĐ ·Ëü™íĺ¬Ú˛?ť?]Ç-k[Ó§ÍY!CűŰË{#Z˙3Óő/>S^eÜGi|đńô÷í+´ţö«Ńď{ĺđŠ/ĹÓµ>°âÉ•Áűź—ß-Т8z|ÁüÖü…˘6·ś#ßÖe|I~·ýçrPźsŃ’xšľć;{!çĄËšő%9řdň7đö?,J;9ZţĽÜrĐH‰˙ýČ#Ö &ęłÎ±\ŇXçÎMPž 1ÖÁfPY?uÍL™¶ŕvůŐţ÷äĐč“rŐ<=řvŔ:Ż}°>müü÷ö>+ËçĚßiÍ_]GĎ=ýBąëŐýňŢá]2tĂ<9á¤ňT6qýâĚž”ť‡ŁÇö?,ó§ź.KŰ%‡Ţ;,;‡WĘ©'EŻ—ĽŮ:®”ˇŃĂŃĽŰĺ®ógĘ î–ťşĽ-+eF´ŤW §Ď}dąL›~ž|w´ýz˘ĎĹĐcäˇGÔ<˝˙ű^JWĎĆź—ť›6ČЦ­ńcOEóčďúżz5𯒧¶<ŮzÎŁ[ö¦Ëß%ϵ–ýdü:ŹľPúŹ Jđď7,iý~äôÖÍZĘî·ż˘UÚľ}óěöăiQۨ>y¶¸ú 942*ż;?ú}ŢßČá×GäĐŐ:_ôüýĹĎ}뢿—·G˘çPŚY)Đąf b >ëË%ŤuîÜ0ŕąclepđł˛ü¤ŻĘš|ŮąeĄLoToăĽď'Ę Ĺ?÷.€gČüźä‹°ä±âktŠ ŕy·'n䍞×zÍL{]uO—«¶´§eë˝fGR€OżaknÚ{2tŮL9uÝë…Ç0ąĹĹî«É­śŤn•GŮ*oč´ŇŔ:ßC›ô?h˙Ţ.€“Ň7ž¦…ň#OʡߓÎ=çđ޸ îVÄWúî—C•Źřö°üN Ůy+Gôůą˘·vü—?O^;+z ˘ůţˇXJs h€± 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁfP´^ńw#=YĎ­¦EhVȦ %mť¸ôüÇ–7(€‹ĺ±ůCr čvá›]\6÷‡z¦±Žą˘ąs›:—ŹÉoߎäĘÝG‡ź•_˝ş·}ËgŁN ßňďÉŔń•đń´]ňÔ#úű^y.ţßâsşŔńw;˝š÷FŁi{“«sĎřy;ť÷ťřÓÇűQďýű¤^ů|ň{$~ŤxťN‘Ď&ŹQŚ]±ţË%kÓk·ľ$G>ůT>Ţ=$źŮ¸G>Ž~>2r[Ç|«GŢ5/şM¶˝-ëť—duöXÍĺŹËţˇśµîż'®ąÜžĂ:ÇrIcť;7A x.ÄX›Ańű ŕpaŮăĽ8WĐęŔÓ.zXvîÝ+oäµnÍŔ¨ă°ěŰűşüj“ŢúąűŔ,€“«mÓ[2ĎşDEĎ;rűüxÚ•ż##÷É3´Äí~ č¬č=řäĽ}{çă°ľŢ-wÓeÝ=gŢwäHëĐ÷q h€q 1Ö ťKÖ ¦ß†d4+eÓ˛vtŁ5_]·É¶Ýą¸ďË/9íoĺôoţ­üaúű~ă§ňů˙\šĹ:ÇrIcť;7A x.ÄX›AřwźżĽĽżŢwϸćIycÇvŮŮ*W»Ŕ;×}UN8ý*y4ţîÝ‘¸Üm/[Ë^ë;€Łéą˛ĚŇq…nüŔ3eţ=Űă˘n_´«®‰¶)ž®ëh|đśŰ“é/ÜTüŕÇ®’é|đ“Üľů©É- ß;¬·oNľówüp4Ď–ú·€În·üÎÖż‰׫rßyoŻ^‘”ŔzEî«×'Wýî^~·ŕ”äńł´ NŠŢ÷ö˙\žˇóFţrQď+€őőöţBfËšő%9¸a4ľ řČĂÉzĹß|ţ˘˙Ą‹c Ňąd bú-)hăR6.hß•m·ć¦§Wívżr7y~6ĎčF»îşüXzĺđ'{d}áńŢţđ?”˙ó´üc—Ëçą € YçX.i¬sç&(€Ď…ë`3(,€µýîů§'Ý“ľ*×ßł˘ë- ßۢei2ߪ˛éÝ ŕâ˛çÉňuůe§·€~XĎLú3/”ď–n m±nŃĽoËZ™ź-'ZżĺĂzűgť–¬ă]ŃşźyR2}Úś2”+™ß^Ńš¦ë°jK©śĂä§ßŮű؆ř6Đ=2$Ďé,OŰ%ĎĹŹ%…đX ŕx­e?żNG<^ą[=›ÓŕT‰˙ýČ#Ö ¦ß´|ÍJY-k»”°÷pţąŮďźo]ků}.€sW€đXçX.i¬sç&(€Ď…ë`3(-€Kô6Í3WĘsÖ´ %5ŕ–ĆCŻfsźPx-ÄXt.Y“‚Ußú’Śv”ÂC2Z(€‹€ÉÇ:ÇrIcť;7A x.ÄX›AdĽď'+dé##˛ďpz č93dĆ7GĚyĂD ·ö˝údűŠßý#ňhé;0ů…kÎ%ksRđ¶.ç/·€ tÖ9–KëÜą `Ŕs!Ć:Ř Ę ŕC;6ČŇy3ÓîL9Sżă×obiiŰůuę-ŰŤů«PõýňňpűöŇCúť×ć|¬BŚőďc.Y“B×[@oŰĽzäÝŇ- ëű- µđý?żńµÖďť…p$ţîáhů»‡ŠŹ/YçX.i¬sç&(€Ď…ë`3(z h/–}{÷Ę®śc Ňąd b†++fËrEmV®fvż”<§Q <žxşüÇkţ»śµ.e\ý—Ňźäż«řĚ:ÇrIcť;7A x.ÄX›A™z0L!ƤsÉÄ„[ëwj\˝ |eťcą¤±Îť› <b¬Í P@¸BŚ5Hç’5 —†dtŚW7¬s,—4ÖąsŔ€çBŚu° `W±é\˛1PźuŽĺ’Ć:wn‚đ\±6B řlHĎY+/›Ó*ĽşV߲ݞ†Nű‡déL=9ś'kvÓ[Ćř~ P±é\˛1PźuŽĺ’Ć:wn‚đ\±6B L€˝OĘő Noť€L›w•<4Úž>tŮLY:śüüčĹódŐ«Ů´I\ŹŢ.gλ]vęĎŃúžzń=ßxî†yrî#{Íi}y?`纯ʙëv™ÓjyląśĘ$Ŕ¤bňs>°1PźuŽĺ’Ć:wn‚đ\±6B Úł˛|ćYüČvŮ˙~XvŻ•ą§/—G÷—çťBpžă¸¸Ď«¦M˘+€)€4BŚ5Hç’5 €ú¬s,—4ÖąsŔ€çBŚu° ``°öýäBłhŰůŘMr× ÉĎ/߲\V˝ş]VÍÉť¨Ä…¨Ž+ä®[.”éńă§Ëü¦Ëę(yőůËĺŃlÚ5÷ËŞóÓ«ŽOúŞ\żenŢ”ÎwĂĂrýĽ™Ń|És÷mY+óăŰ!ë•Ę7ÉsiIýčĹËdÍO–§ë1C¦_üprőnl—^5gŽ\Ż˙qÁ«z›í•2ŻÓ{ňƦ•rę‚ô¶Ű\ Ŕ¤b¬A:—¬ALÔgťcą¤±Îť› <b¬Í P•/w»©,€O/Ţrř©kÎK¦÷(€Ď-•{ú=·Ë7µŹ•Š×\÷ŐÜUĄjżÜ{~˛L˝:µpĄčţ‡eţ‚»ĺŤřŞŘňm‘µč]!OE??uÍ™űÍűĺ©öĘľ´ŘLt+€«—×QÖ¶ÖCŹöÁ‚΢»s»’âxî“ďýmTwy?Şö]ű±ŞýX~­×eÍĽňóu™IŢ.€ŤýµeĄĚ_÷şąÝ;7mĄ`’ 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁfP(€Á*^<$‹s'"Y9WY—ʽּ= ŕňwoś*ŔĹ[g’+\;ŠËÖşE˙›[F¦=˙^ůŐ=7Éüy§Ç·(žqÍ“éU±ąç• ŕŠĺYeíĐeĘ˝š7ZÎÜôJá<ł„ĎíŁFp—÷ŁjßeóŞîű±üZŃűyq©ŘŤä_ŻUwĽî ™~ĂV{»3ŔL!¦|îâš5 €ú¬s,—4ÖąsŔ€çBŚu° ``°ôJÓ7líx<_Č拺&pń*ßę¸ŢŔÝoWÝýĘŐÎuĚ_±Ű~Lí•»Î˙Ş¬Ůˇ?GĎëVW,Ď,k7­ůëvEűĆ^˙ľ^Üĺý¨ÚwyÝ÷cůµ\lÜjZYŰ}h˙~9¤?S0i„kÎ%kőYçX.i¬sç&(€Ď…ë`3(ŔŔ i1{şĚ˙áÖÖw»Ú˙şgfňz3/”U[’ňł \GömY+óg¦ë9ó<ą~8yŢŁ/“Uů×»řáÖúż÷Ţ.yč˛lűfĘ©—µ·­°Ľ“ćÉŇG’˛łPGĎżë|]×¬íľĽne­˘3ľ9Ňńx¦¸]ĹýQU7y?şí»ĽŞýŘąűĺą[ňďńZy.˝ĄtľîŘ_ÝßZÇ7†WČ©'%Ďź6ç*y(-˝µśż*^×ňUĆ 4!&>_ň5 €ú¬s,—4ÖąsŔ€çBŚu° `ut~w­_†.›'׿`OóIżöc±SY±é\˛1˝vëKrä“OĺăÝCň™Ť{äăčç##·ŮóúhĐë?˙Yôřĺ˛ěÎŮň™KɲčçE7Ξw€¦ÝĽl0ŻëÉögťcą¤±Îť› <b¬Í P¨ĂçřĐ˝µńíą+’ýŐźýxX†.žI b!ƤsÉÄôŰŚfĄiZ¦Žn´ćóŐ ×¶ĚĎJŃ´,ť©5_w'ßąHN6÷Ăř·€~łÎ±\ŇXçÎMPž 1ÖÁfP(€Ôák¬ß©{ÂôŻĘšn·pö̸÷ăŽŰĺÔč$vÚĽŰ ·˘SW±é\˛1ý–¨qi¨ďʶ[‹ó¬ßýi|embʬ/?®Wߦʭy7yěť—duzEîčHz•néů‰äő“iéórÓł× ŢtyĹeô^˙Ďüńm˛íťňóęJ ҸŤ Ňe2{~qž“ďĽ<ľr6vç"™˙Đ92-÷ÜÖ´Tľ`Íž°é¸ËĎĆ­ÇŚ+sÓióoNŻâ-?7ö9™ýP6-Z÷K“yŰËę˝}L4ëË%ŤuîÜ0ŕącl…Âb¬A:—¬ALżi9š•¦Z¦KR-` ·TÖ’µUŇFóçĘßĚę‘=í6.msËŚ~Ď/oýîRa«ó—JŕěĘŢÖăŃďŰZWůVŻ{ž±ŔZ fĄ¨–ĄĄ‚őŇE…bVoŐĽ¬U'z^śÝ†9{^ôűěňU¸Ą×É?^.ŚóóiÁÜ.śsWűfó÷Ú>°Î±\ŇXçÎMPž 1ÖÁfP(€ \!ƤsÉÄ Wď‚wýî¤TŤŻÔŤ ÚŰdŰî\»qOń–Ě·ľ$Ł­8ąz·uőoK©¨-<Ç7ů+lUgZ§žo•»ypá–Í…eÍÎ]Ťśę¶ëË%ŤuîÜ0ŕącl…¬ű‡7¬sDZ1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁ€˛c Ňąd b >ëË%ŤuîÜ0ŕącl( 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁ€˛c Ňąd b >ëË%ŤuîÜ0ŕącl( 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁf Fď—ąńqĄëË%ŤuîÜ0ŕącl( 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁ€˛c Ňąd b >ëË%ŤuîÜ0ŕącl( 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁ€˛c Ňąd b >ëË%ŤuîÜ0ŕącl( 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁ€˛c Ňąd b >ëË%ŤuîÜ0ŕącl( 1Ö ťKÖ &ęłÎ±\ŇXçÎMPž 1ÖÁ€˛c Ňąd b >ëË%ŤuîÜ0ŕąsüřqó€@F˙Ý1ÄXt.Y^»ő%9ňɧňńî!ůĚĆ=ňqôó‘‘ŰěyÇí6ŮöNôZďĽ$«Íé†AŻßüsdŃă—˲;gËg.]$ˢźÝü9{Ţšvó˛ÁĽ®'Ű@Ö9–Këüą `Ŕs„B!„Bń'Ö ťKÖ ¦ß†d4+UÓ˛utŁ5_żÜ&Űv7(€ľ~łe~VЦeéüK­ůş;ůÎEr˛ń¸Ćż}L4ëË%ŤUę6A xŽB!„B!ţĤsÉÄô[R°ĆĄj\°ľ+Űn-ÎłzäÝřĘŰŘ;/ɶÝĹyÖďN§ĹöČúÜsłĺgÓG7– ŕâôΫ{Ż_ëĘâŽ×®#)HăR4.H—ÉěůĹyNľóňřĘŮŘť‹dţCçČ´Üs[ÓRů‚5{n\Ŕ¦Wŕ.{ůÎŇwćj|çěîóčôňUÂ+€;×Oo Ýř ŕř»•Łýg”ů¸`ťcऱJÝ&(€ĎB!„B!ÄźXt.YˇÓďůÍߢ9+ť·q.LĎĘĹĚî—’˛¶đ=Ŕąé±¦Eî ŕüíźí[@'ĄŻ5˝|űčD»Đµ§·–q©~˙oňXüśÜë´KŢä{łůÝą¨ńŔq)źű^g\łÎ±\ŇXĄnŔ€ç!„B!„âO¬A:—¬AL`Ât»’¸‚đăż €ţ±Î±\ŇXĄnŔ€ç!„B!„âO¬A:—¬AL` W)—ż¸'˝‚»˙WN0Ö9–K«Ôm‚đ!„B!„Bü‰5Hç’5 €ú¬s,—4V©Ű0ŕ9B!„B!„řkÎ%kőYçX.i¬R· `Ŕs„B!„Bń'Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç!„B!„âO¬A:—¬ALÔgťcऱJÝ&(€ĎB!„B!ÄźXt.Y¨Ď:ÇrIc•şMPž#„B!„B?±é\˛1PźuŽĺ’Ć*u› ëË%ŤUę6A xŽB!„B!ţĤsÉÄ@}Ö9–K«Ôm‚đ!„B!„Bü‰5Hç’5 €ú¬s,—4V©Ű0ŕ9B!„B!„řkÎ%kőYçX.i¬R· `Ŕs„B!„Bń'Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç!„B!„âO¬A:—¬ALŻÝú’ůäSůx÷|făů8úůČČmíéécŹ—¬y·rş·zm?pÖ9–K«Ôm‚đ!„B!„Bü‰5Hç’5é·!ÍJĎ´ ÝhĚ·qĎ$-Fkn˙8,=áe©ń8°YçX.i¬R· `Ŕs„B!„Bń'Ö ťKÖ ¦ß’4.=ăô]ŮvkyžH·¸ę átÚčHz•mlʬĎĎ“ľ~¶ŚŹßyIV7zţtYż;÷ü^Ówď‘ŃükÔÚţŰdŰ;ö˛«ý±|ď3ź‘'Jľ÷Gíy–ž<öĐţ‰|ćŹţ0ť'-ŚÓßłůĎúĂ?hĎ›>żă5ţýłZÓ“uŽĺ’Ć*u› ëË%ŤUę6A xŽB!„B!ţĤsÉÄ@}Ö9–K«Ôm‚đ!„B!„Bü‰5Hç’5 €ú¬s,—4V©Ű0ŕ9B!„B!„řkÎ%kőYçX.i¬R· `Ŕs„B!„Bń'Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç!„B!„âO¬A:—¬ALÔgťcऱJÝ&(€ĎB!„B!ÄźXt.Y¨Ď:ÇrIc•şMPž#„B!„B?±é\˛1˝vëKrä“OĺăÝCň™Ť{äăčç##·µ§§Źu<>UôÚ?}3$ŁSuPbťcऱJÝ&(€ĎB!„B!ÄźXt.Y~ËŹiŮ9şŃoăž)ZNÖÜ?ă5e÷/ť¬s,—4V©Ű0ŕ9B!„B!„řkÎ%kÓoIÁ—šqÁů®l»µëË%ŤUę6A xŽB!„B!ţĤsÉÄ@}Ö9–K«Ôm‚đ!„B!„Bü‰5Hç’5 €ú¬s,—4V©Ű0ŕ9B!„B!„řkÎ%kőYçX.i¬R· `Ŕs„B!„Bń'Ö ťKÖ &ęłÎ±\ŇXĄnŔ€ç!„B!„âO¬A:—¬ALÔgťcऱJÝ&(€ĎB!„B!ÄźXt.Y¨Ď:ÇrIc•şMPž#„B!„B?±é\˛1PźuŽĺ’Ć*u› ?Ý[Ń1VIąh¨Ű…0TN’$I’$ŐS´HWR´ Ŕä˘c¬’rŃP· `¨ś$I’$Iާh‘®¤hsę=ýFZ¸úIşrúĄô™™3éJďë…ąńľ%¬÷űŰůµ´ëĺo§˝ĎnOźypWÚŰűz×S_Ś÷łé©˝˝ý÷¦í;ăí7ÄuĽ?XŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´ÉKi~0Tm‡­ó3Ń~Ą¬÷űŰžv†Şí°uçŃ~±Űź]çđuľ?¸Ń˘c¬’rŃP· `¨ś$I’$Iާh‘®¤h“ţ€µŞ6ÖŹÓ‰§Űmí·ósíY¸Ť3éđđăgč¶–ÎÎí?ď• gŇü…öq‹ű?G»ßŔ…7Ň“‹Ű–¶‡ďoŃÁtbđ#÷O˘?`m†ŞÍ€ul ;8·5~ömÜŽţ>“?ţögŰýŢg| ĽĆű€›,:Ć*) u»0†ĘI’$I’¤zŠéJŠ1ÉĂÓÁP5[dž¨ÍxčľŢí‘K0?ýR:<4=|zř Ýńámű<˝çěsřôŘ@7żŢČxŤ÷·¸Ďµ€ż¶˙t0TÍĂÖ]éöáí;·§Ű‡®yh;|îâwqź±çčńĂŻ9ţÖxp“EÇX%墡nŔP9I’$I’TOŃ"]IŃ"&kÖ6ž~#ÍŹ|ďŘĽď`Ű`›Ŕůs|ó׋Ϲü±}×2Č]/ý3pgđfăÜáŰŤw Ýw˝Ź€şDÇX%墡nŔP9I’$I’TOŃ"]IŃ"&kXu<|vnkd˙µŔ˝ÇźżäsM†ĎľmŤ gĂĎ^Üçző‰Ž±JĘECÝ. €ˇr’$I’$©ž˘Eş’˘ELÖ°ęxhŔ;¸}µËŔ·Ą'ç>˝¤ô5ąžK@Żf{ÚůÓŻĄMĂ·3x÷.Űgp™ćky|ľĎež¨WtŚUR.ęva •“$I’$Iő-Ň•-b˛Š™üůżýË27Ű<Ämo/m‡öąrőătb®{~fčňÎyđŰ>¶y\űÁ8nđŇsd]ąë5îyp×Đĺ›÷¦íOőoç!öŽÜ·¸ĎŘż+=>ooÎyü·Ó®§ľ¸ôx¨LtŚUR.ęva •“$I’$Iő-Ň•-bBIá%  bŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´ Ą4—śů;vh¨UtŚUR.ęva •“$I’$Iő-Ň•-b0ąč«¤\4ÔíÂ*Wc§íHźýť/,óů;Hű_ţ ]n÷“$I’$éV+Z¤+)ZÄ`rŃ1VIąh¨Ű…0T®Ćú௧G_žM3‹^HűżöÍ ř¶ďţşÝS’$I’¤[«h‘®¤h€ÉEÇX%墡nŔPąë€÷§Ůööp'źřJoŰéĎ?jď$I’$é*Z¤+)ZÄ`rŃ1VIąh¨Ű…0T®ĆV§ů?M·˙ÎŇ7Ž´·s—?H3ßůzúüŕrŃ_řJúŁCoĄ‹íćÜĹ7˙4ýŃť_ęo˙ť/ĄŰďűGićýöbŇ˝çü˝ö9Ďľü'é®/ ?ĎŻÓ‡ý˝–úč×éĐ7‡_ďëéŹ˙llżĹ缔NúFş}ń9w¤}/źowę·ę{Ëő^ďŔĽŢřsŚĽďŢsÜőÍgÓk†ä’$I’´áŠéJŠ1\tŚUR.ęva •«±µŔamż÷Ň»óĐó+éŹý˘ą\ôź÷ëé¶Ţ>żwč˝ţ.—fŇőnţľ¤çËI?˙fŕúG/^ęooźów#}öK_OűźĎ—śţE:đÍ|¶qďq]&_:šľŃ Zż’ö5űő^ď;Á~ísţŢÝ;Ňçďü“ôçůuú§éŹďěh÷żŢî·Ö{ĽŢ˛÷őĄf¸Üôź~Đ Ĺođ…ćýüřĐź¤»ľô•ôŹ˙Sł$I’$iă-Ň•-b0ąč«¤\4ÔíÂ*Wc« €/ţô޶éŔ|˙öŮ?űúČíA_Ţ—>˙;ßH?Ď3Ňfűi˙›ýmËj‡µźýBď5Ű™ę ţ{YŘýN>S·}ޡ.ľřŤfż}ÇŰ;Ďy÷ź¦Sí]MíŔ÷łíß^ă˝5Ż·Ňűşóéí|ăČţŢk?~<¶Ź$I’$iă-Ň•-b0ąč«¤\4ÔíÂ*WcŃřâG¤“?ÝßśéúŮÝ3í™¶ éĎďëÝţf4*žMÜŰ·¦đŻÓţÁY´?}+ť”¶ĂÚŰg ×lűŰúĎóůďţşżm¤±mís.žÉ»XűžŕUß[[řľzĎűďěH‡Ţď}}î…ô‡ůçrçľtŕČ»éâĐŐŁ%I’$I«h‘®¤h€ÉEÇX%墡nŔPąë€żşm÷ CgÔ.˙Ľ˛ĹKE7źŰ»cństoŰý§éä`ŘÚkG>Wx±wÓ?Ηmn¶GÓ7zű-^Zz¤ö˝ŚśŮ?çěCűĺV|oý×ţ~F-ťů|ůýŮ´˙ľ?hď˙Rú˝ď̦łýM’$I’¤ T´HWR´ Ŕä˘c¬’rŃP· `¨\ŤőŔűŇŹ?ZH¶ÎĽ/éü•ôčČĄ’?H‡ňĐu÷/Ň١}‡-?öR:u䥻ň tp&ńgßöÄ[˝ÝĎžhĽŘř{ë€oâ×á÷–-~ćđ ËçÓÉç÷5ź|űwŰ;%I’$IĄh‘®¤h€ÉEÇX%墡nŔPą‹.ťŇůţĄ“Ç>SwĄĎΗZţpp†ďĄŢ×cŕćłuĎŐkWű ŕÁgűvý ŕ5ŔkĽ·•>¸y\űĺČ×M˝źŐ×V2K’$I’j.Z¤+)ZĬݓs§+WϤĂÁ6€›-:Ć*) u»0†ĘŐX<îŐUG/Á<¸ ôWŇúEšyy6Í<˙ŹŇ]_ęÝ÷ÍŮ”g«ýçűô‡ß}ˇÝ>öYÂíóŢußýĎâ}ľ·ĎËżHľů•Ţăľ>˙ŕŃĄ3m/MßČźŮŰ{˝}Í~łéĎżě7áxÍ÷6x˝Ĺ÷5›~|h_łO˙ŚĺËýçűÂŽĹď˙Çh.'í `I’$IÚxE‹t%E‹AĎĎÄŰn¦č«¤\4ÔíÂ*Wc+€{ť|"[ÇÎř˝üAšůÎ×?C÷ł_řJúŁŻ}îBzíĎöĄ»šÁmöĄt×7‘Ţśy;4¬=űňź,í×{ž?ě=Ďčٵ˝šĎě~˝Ż§?ţł_Źî7éŔk˝·\ďőěţĘČëíűé»KĂćüý÷tűZď[’$I’T}Ń"]IŃ"ć†0sƨBtŚUR.ęva •SŻU†µ’$I’$Ý̢Eş’˘EĚ Á¨DtŚUR.ęva •S/`I’$IR%E‹t%E‹ĂÁtâÂ'iaî`° ŕ扎±JĘECÝ. €ˇręe,I’$Iޤh‘®¤hsCp0P‰č«¤\4ÔíÂ*'I’$I’ę)Z¤+)ZÄÜV?ýFZ¸úIşrúĄx;Ŕ c•”‹†ş]Cĺ$I’$IR=E‹t%E‹Á“sŻ8ÎŰ®\ý8ťx:Ţp#EÇX%墡nŔP9I’$I’TOŃ"]IŃ"fíúŢ3ép°-;|Úg7OtŚUR.ęva •“$I’$Iő-Ň•-bnl/ĄůU†Ă7ZtŚUR.ęva •“$I’$Iő-Ň•-b0ąč«¤\4ÔíÂ*'I’$I’ę)Z¤+)ZÄ`rŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´ Ŕä˘c¬’rŃP· `¨ś$I’$Iާh‘®¤h€ÉEÇX%墡nŔP9I’$I’TOŃ"]IŃ"&“‹Ž±JĘECÝ. €ˇr’$I’$©ž˘Eş’˘EL&c•”‹†ş]Cĺ$I’$IR=E‹t%E‹L.:Ć*) u»0†ĘI’$I’¤zŠéJŠ1\tŚUR.ęva •“$I’$Iő-Ň•-b0ąč«¤\4ÔíÂ*'I’$I’ę)Z¤+)ZÄ`rŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´Yµ§ßH W?IWNż”>3s&]é}˝0w0Ţw=´ŻyÍŻ»Ţďç×Ň®—żťö>»=}ćÁ]ioďë]O}1Ţw̦§öööß›¶ďŚ·ß×ńţ VŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´Y·—Ňü`hÚSçg˘ýVvřô™t8¸ż“™3×8¸˝ţ÷żşíiç`¨Ú[w>í»ýŮu_çű€EÇX%墡nŔP9I’$I’TOŃ"]IŃ"fÝúÔfhÚ P?N'žÝçđéţşŤÓgŇü…7Ň“CŹ]ÜÖZŔ¶=çŕŚßĹçXş?Ź˝Ćřă&x˙źůź¦ňăŻePݰ6CŐfŔ:6ĐśŰ?ű¶?î?GźÉűłíţď3>P^ăýŔc•”‹†ş]Cĺ$I’$IR=E‹t%E‹uËĂŃÁĐ4Sdž¤cŮ'ç>^6„]ő ŕ§ßHócÝp˙Ŕ‡OŹ tóyäő×x˙‹ű\ëř‹iűOCŐß×ń2ĎÍźIďűűs€ZEÇX%墡nŔP9I’$I’TOŃ"]IŃ"ćFvřôđĄ—W˘Ś+m_Üg|ŰřĺĄăçč=¬j˝Ŕ=îş|óŢ´ý©ţí<ÄÝôÔŢ‘ű÷;ăwĄÇçíÍŔ#Ź˙vÚőÔ—?ćs›ŻŽ ň bŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´IĎjg˙˛˘đĐĺúőźE 7OtŚUR.ęva •“$I’$Iő-Ň•-bNłţ٧KgďÎĎÄű±\sůçÁ™żc—žÜKi~=Î|€uc•”‹†ş]Cĺjëň˙w9]řďŇG—`Ýäß=˙Ű'˙­ým´ž˘Eş’˘EL&c•”‹†ş]Cĺjëżü÷˙ţb7Zţ´¶˘Eş’˘EL&c•”‹†ş]Cĺj+ú…ÖKmE‹t%E‹L.:Ć*) u»0†ĘŐVôË8¬—ÚŠéJŠ1\tŚUR.ęva •«­č—qX/µ-Ň•-b0ąč«¤\4ÔíÂ*W[Ń/ă°^j+Z¤+)ZÄ`rŃ1VIąh¨Ű…0T®¶˘_Ć`˝ÔV´HWR´ Ŕä˘c¬’rŃP· `¨\mEżŚŔz©­h‘®¤h€ÉEÇX%墡nŔPąÚŠ~€őR[Ń"]IŃ"&“‹Ž±JĘECÝ. €ˇrµý2륶˘Eş’˘EL&c•”‹†ş]Cĺj+úeÖKmE‹t%E‹L.:Ć*) u»0†ĘŐVôË8¬—ÚŠéJŠ1«öôiáę'éĘé—ŇgfΤ+˝Żć.moď[v˙'ç>^uűşYëýß(‹?‡ŹÓ‰§íŔ c•”‹†ş]Cĺj+úeÖKmE‹t%E‹u{)͆¦í0u~&ŘoćL™ďš&|˙׫Úďn=Ń1VIąh¨Ű…0T®¶˘_Ć`˝ÔV´HWR´Y·ţµš6ÔÎp]işxflpćm»m~®=K·q&ާ}ýÁs\ąđFzrdűméđéˇí§Ď¤ů‘}&y˙Ó‰ ůńăŻÝ0Ü4Ń1VIąh¨Ű…0T®¶˘_ĆŻĹ™˙÷ýđţĐ…ťöůíô©ůéžż™ţĆ‘šŽ˙u»íŻ˙}z|Ĺmď§˙üţ2=~â÷ÓßţWż›öžoď`è­h‘®¤hłny8:šćaę Cҵ «‡žslżĂ§Ç¶y˙áďŘţůRÓŁCâIŢż0l$Ń1VIąh¨Ű…0T®¶˘_Ć»şî›iÓżůâ„Cŕ˙˙ß>ťţÖżűeúĎy°ű˙üŰ´÷WźNżőďţułý/NüvúÔŻľ“ţ"oűëţ¶żqâß6Ű~=÷»é·~őűé~ă›éo˙Ëżk °ŐV´HWR´ąľĂÍq×1쌬5]i{ďţ‘K2?ýFš_Üoěěßđ˝Ź7řűš”0Ü4Ń1VIąh¨Ű…0T®¶˘_Ć»ČĂßţŮşźžpü/ŇŽ_ţ~z|hxűëąż›>uě…Ţ×™öľüétÇ_ í˙W_IźúŐcé×ŰŤŇďlHµ-Ň•-bŢÖe|0ť8˝ü’ϫʗy.˝î €ŕ¦‰Ž±JĘECÝ. €ˇrµý2>©Áđ÷źý˙kcň!đ°÷Óˇ#˝Çý‡˙Řűú_¤ŻüËßN{˙ݎíµ#}ęĺďÜ"j+Z¤+)ZÄĽ%¬Ë¸IçŐžwŮ%˘óřôK#ű¬Í% `#‰Ž±JĘECÝ. €ˇrµý2>‰ááďŕľkĎg˙ţę;íçü]`€[JmE‹t%E‹×Z——^cűLţüßţ}Í8oŰŰĂĂÔ燛- jWŰ69`ŘH˘c¬’rŃP· `¨\mEżŚŻ%ţ Ç·Ť;ţľţ‡_~=ý/÷9ŕVW[Ń"]IŃ"&·`¸i˘c¬’rŃP· `¨\mEżŚŻ%yŁáďŔZŰł˙üW;Ňoý«CĂßě/Ó·5úŔgţ÷ß÷Ŕ·ÚŠéJŠ1ą,žÍ=Ń1VIąh¨Ű…0T®¶˘_Ć`˝ÔV´HWR´9ő¶ýÓô˙䟦żÓŢţ;ßüyú{l€VtŚUR.ęva •«­č—qX/µ-Ň•-bN»żóÍž~wŰđ}ßNĎYŔŔ ˘c¬’rŃP· `¨\mEżŚŔz©­h‘®¤hsÚ…ŕˇ3‚†EÇX%墡nŔPąÚZ~€ő­­h‘®¤hsÚ]DÇX%墡nŔPąÚúŻW˙křK9ÜhůwĐÚŠéJŠ1§ÝňĎüu h`eŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´É·Óď~óë‹·—„–DÇX%墡nŔP9I’$I’TOŃ"]IŃ"&·Ążű•î>Ôrö/°Šč«¤\4ÔíÂ*'I’$I’ę)Z¤+)ZÄ`rŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´ Ŕä˘c¬’rŃP· `¨ś$I’$Iާh‘®¤h€ÉEÇX%墡nŔP9I’$I’TOŃ"]IŃ"&“‹Ž±JĘECÝ. €ˇr’$I’$©ž˘Eş’˘EL&c•”‹†ş]Cĺ$I’$IR=E‹t%E‹L.:Ć*) u»0†ĘI’$I’¤zŠéJŠ1\tŚUR.ęva •“$I’$Iő-Ň•-b0ąč«¤\4ÔíÂ*'I’$I’ę)Z¤+)ZÄ`rŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´ Ŕä˘c¬’rŃP· `¨ś$I’$Iާh‘®¤h€ÉEÇX%墡nŔP9I’$I’TOŃ"]IŃ"fݦ>IW®~’ćŰn®č«¤\4ÔíÂ*'I’$I’ę)Z¤+)ZÄÜfÎUޱJĘECÝ. €ˇr’$I’$©ž˘Eş’˘EĚ Á¨DtŚUR.ęva •“$I’$Iő-Ň•-bnŔ@%˘c¬’rŃP· `¨ś$I’$Iާh‘®¤hsC0*c•”‹†ş]Cĺ$I’$IR=E‹t%E‹‚0P‰č«¤\4ÔíÂ*'I’$I’ę)Z¤+)ZÄÜV?ýFZ¸úIşrúĄx;Ŕ c•”‹†ş]Cĺ$I’$IR=E‹t%E‹Â*ŕ'ç>NW®~śN<˝|ŔŤc•”‹†ş]CĺŞëČţemÚz_Ú÷Ęů·7îy&ťęmţđőgŇ˝_Ţşx˙¦ťŹ¦™÷/7ť}hě1íçšÍý.fą/měłečµÓ{éŔ=ýűď}ńR{_ŻůgҶĽďCGű·ŰçŘĽeđw§{ÍĄó¶5Ţ˙p—ßźMűvŢąř^6}yO:đúB»µ×Ą·Ňˇo-˝×M_Ţ•Ľ×ń÷ÔvęĐŽfß=Gz7V{/CŰš}‡;ţčâkŽn»”~ľ»˙]?üĚ$I’$I]ü.V‹hsCXe|řô'. Ü4Ń1VIąh¨Ű…0T®şÚÁă¦{öĄ}Ź<Úł'ÝŃüĄ´5=üz´˝őýŁéĂw~Đî{wş7ß÷­űŇććöžôóKđÖ´í[ícvßÝ<×`{đjĽ›wćçß“¶µCÜŻ>źšKŕĎmŮ—f3ŕ‘aëŇ´˙ʦ{żÜż}Ço­ţţűĎÖďŇ/Ó˝ů9o»3ÝŐĽßÁĎáîôÝ7óKďeóýůąöĄ»¶ćŰ[Óž#˝7Öaľ—ˇđçv˙2]ě?Ľix>2ţč…ôŐÁcv>—ζwK’$I’&ońw±JD‹u;N\ř$]ąşŇ÷Ą4őL:Ľě~€őc•”‹†ş]C媫żkéľ`ű ł?ĽŻŮvÇж·Ý—6o˝3=||0¸Ü‘Ě·{ť|ěÎć1#gÄ<Ř-ʦcĂŕžMíď72l}5ík¶ďK3y[îŇlÚÓ{›ď!ýf•÷?ŇńGűŻó­ŮöŽ”.ľ˛żů^ľúüéâ‹{úďá‘WŰ­˝Î=—îĘŹé˝Î‡Ŕá{i·Ýńĺ»{˙?÷j›¶ôϲ÷ţ[Ó¶{ňĎôîôÄ;íI’$IŇÄĺßµj-b0ąč«¤\4ÔíÂ*W]ˆ’ ić[ýacsŮĺŐ†–óĎő‡žÍYľĎ¤™7ϧţĹźű-_ţ şż˙^dž|˘? ~ŕ•v{ÓŕŚŢü¸ÁxWz yOíYÉcgĎ>Ô^‚zë®ôđóséÔ`xš›t|éhÚÓž}ĽůţÇÓŹ^oä,ÜÁ{9·÷Ý^üh!}xn!]ĽAŕmíožç«Ď÷/=Ý<ßťžř~űŇëż›žhÎtŢźfßü^sćő¦ÇćÚm’$I’¤IËżkŐ$ZÄ`rŃ1VIąh¨Ű…0T®şÚÁă¸M÷żĐ˙ŚÜpűŇP·ůÜÜ{–>řs[v¤‡Ź÷'°Ńg7v>×<÷`űčPuřţÁxšś|Ď3éÔ˛aëBzíĐžöňÓ}›wOöţGúh.ŘÝôöÝ™î}ľ?¬]é˝.6xO+ŹjßË`|čŐthgďţć’Îí0Ľ÷=Ď’sËo7?ąôp^7gMK’$I’ş4ú;ZyŃ"&“‹Ž±JĘECÝ. €ˇrŐŐűźK»/ÝŐś;t âvűćo=—f^™m˝:z–mŻË—ŢMł‡öµź›»+ýčÜ`h:ôŔß!Íť%<ůŔűSľ0óŮÁĄ©ŰłdÇ϶͏=űć/ŇĂ;űéćŚŘ ß˙H—Χ“?{ĽýYôĎ:^ő ŕŹzO6oÝ5ňůľ´Ăńápř^Ŕďµ—ŕľ/zł‰é»~x~ôLâ^Çé?os–vŻ×˝-I’$Iš¬ü»TM˘EL&c•”‹†ş]CĺŞkhđ Y/'<¶}¸cŹÝ™6o˝/úěŮ·żź?ö?¨ě€W8Ű6×>÷ڟܧŢíCCź Ü €ß!}5ŢďCłKĎqy6=·ßóL:µĘűî7˝ď;ŢďžW–¨—_Ů·řŘ›őŔͶ‘ĎýÝ•~ôŃŘó¤ŁiOďë|{™áźĄ$I’$iÍÂß­ Š1\tŚUR.ęva •«®eCÉörÂů Ôs˝›íöţÂKg¶îűţŃô›Ţ¶Mů/°­÷Ąšű÷´g÷‡ľk€‡ş›w¶g oíßţęóç›íŁŕ^Ă—Zn†­KĎqÇîö¬Űťýłu7ő¶_\ĺýŘĆ~‹źg|wş·Ůgđ^¶¦=GňPxđ^Żł'mkĎn¶w‡ďeäĎaptO;Đ~žÁ0ús_>Űx_ű~Ú?7I’$IŇD5ż_U$ZÄ`rŃ1VIąh¨Ű…0T®şFŹýĎ .sĎ3Ígě~řúséö’Ë٦/ďI^_hžgípŻË¤™Gîë’ł-÷Ą}Żäáo.÷:ůÄÝý}ĂÖüŹíJw4Đlkşë‘Ůô›|­é5Ţ˙půóŚľ˙î±÷ňÁâ%«ÓĄ·ŇÝKŰ7}yWzxđ^; €—ÉďeüĎářŁÍë .éĽô<çűźÜű÷o6-68űúŽďżŰŢ#I’$IZ«ĹßÍ*-b0ąč«¤\4ÔíÂ*'I’$I’ę)Z¤+)ZÄ`rŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´ Ŕä˘c¬’rŃP· `¨ś$I’$Iާh‘®¤h€ÉEÇX%墡nŔP9I’$I’TOŃ"]IŃ"&“‹Ž±JĘECÝ. €ˇr’$I’$©ž˘Eş’˘EĚŞ=ýFZ¸úIşrúĄô™™3éJďë…ąńľ5jßó†{ßËĽ”毞I‡Ămݬ>˙?N'ž¶0U˘c¬’rŃP· `¨ś$I’$Iާh‘®¤hłnyđŘőÚaßüL´_ĺfÎlđđú9|úzË7éź~ ‰Ž±JĘECÝ. €ˇr’$I’$©ž˘Eş’˘EĚşő|ÍPŻđŤźŮß>8ËöĘ…7Ň“Á¶ĄÇŹťĹąx_ßŇŻ}ě…3iţBŢv&^Ü·?°<|:Ý{®™áçXá Ń«˝˙ŐMňúý}Úďkń,ÖŃë`źµ·Eg×®ýţźśűxdű‰Ó÷8öŘÖřwä=śÎË˙ŚWţç#;N ţ GîďŔ€!Ń1VIąh¨Ű…0TN’$I’$ŐS´HWR´Y·<ĽŽ(Ç~yČąl@8:p0>ýR:<ôř>\l_»÷}úĂÉá÷´ü=6V ®ýţW7Ńë×çíÝ>1ôţGŢWŢwĄ×ďm›űÖz˙Íđ7_žyxű˛!uđóűą5Ď7ňţV˙çci`nśč«¤\4ÔíÂ*'I’$I’ę)Z¤+)ZÄ\_á۸ëĆ-ęh×~îĽßÇiaqP8ľmôń#ࡡéÂ`93:^Úż5´}řľĺÄIß˙Ę&zý`pŰ×{ýáálëÉą3ÁĎ©gŮó¬őţ{ö§W&YýĐă˙üÜn®0C˘c¬’rŃP· `¨ś$I’$Iާh‘®¤hsăšlŔŘ oŻ~Ň €G‡Ąy¸¸ü ÖĄ}&Cĺńl{ßňâ„ď˝ţş €×z˙“}ť>8˙9¬t†ňz ˙üVŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´ą‘ĺKŻ:›É—:#őÂŘçüŽ űg´v˛ě’Íá@s…âšď ˝ţŠŕĽďřy•ˇmđIW®Ž;“‡ű/÷äÜÇéĘ…7Ň“Á6€aŃ1VIąh¨Ű…0TN’$I’$ŐS´HWR´IËŔŔ˘c¬’rŃP· `¨ś$I’$Iާh‘®¤h“–00諤\4ÔíÂ*'I’$I’ę)Z¤+)ZĤe L :Ć*) u»0†ĘMUď?—îÚ˛'ýüŁööX§íHź{čh{K’$I’¤›_´HWR´ÉŔKiţę'†ŔŔŞ˘c¬’rŃP· `¨ś–2–&érď’$I’Ö«h‘®¤h€ÉEÇX%墡nŔP9-e,­ÝŮ7gÓĚ› í­•:ź^{ĺhzűR{S’$IŇÄE‹t%E‹L.:Ć*) u»0†ĘMUóϤm·íOłíÍłŻ<š¶mé˙…·y÷ iĆXşAK’$I×Úř]iŃ"&“‹Ž±JĘECÝ. €ˇrµOmţIűU‡†ŔŻ?ž6ݶ#}÷řůć‚¶gŹ<žîČůK«vńťŁiöť<Ů˝”Ţ>r4˝öć«ić•ŮĆl>3řŇ»i¶˝ť˝v.?ęR:uüčâ}ÇŢY:řě›C÷ç}ŽĽ›.6[Χ“ÇĎs4ť<—/<Ýľćëů5 %I’tk-Ň•-b0ąč«¤\4ÔíÂ*·Q»ŢđkŹmM›źx«۱G¶Kk4:î}›Ďľô^:öĘ«éTscô ŕßěí×<&×ÜÉŹz_ľźąsélóË˝ýŕËéÔń<X’$IšÂ˘Eş’˘ELn‚§ßH W?IWNż”>3s&]é}˝0w0Ţw]˝”毞I‡ĂmSl˝˙|v~-ízůŰiďłŰÓgÜ•ööľŢőÔă}×Ѧ§ö®ĎëVňýÜ,Ń1VIąh¨Ű…0T®¶ €Ąéęâü«‹—yžúś`I’$iZ‹éJŠ1ąňŕµ*¶ĂĆů™hżŤëđéŤí·˛ŰźÝ•nîŻĂőItŚUR.ęva •«-`I’$IŇ4-Ň•-br3ôŚÍP±0~śN<Ýßvřô'éJľ=Óž…ÚXÚľ´O; lĎP˝2v&ď`źµ·Eg·ößßâ>ŢHOŽlż-=9÷ńČö§ďqě±­‰¨í÷3?7üýŹ “gč¶–ŢűÚΤů íă÷~޵ľż•˙|–L'Ż1r˙$úŇf(Ú H÷¦í;G÷ąýŮo7gÎ6žÝ•vţôkiÓĐc·µ†¬Ç6Řö Ü˝/ Śď ÎĚm·í|Ş=‹wü±Ť/¦í?lë˝÷űű.=×ÚßŔ­$:Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ1ąňđpx` hÇ–cĆÁ`s0ĽěÝ>ŃYóăG†şyß`;Ř6?6>Ľ8ĚmĺˇěĐă›áoľ<ňđöeCękڶšçz|ďöč÷óR:<ňZĂćńámű<˝çěłÖ÷·ÖźĎŇ>×:ÎÔÁP4KǬîĚćK5ď]÷­yđŕ2ĚÇőno? wěu†ďď—ĚK硳}űŻőýÜb˘c¬’rŃP· `¨\mK’$I’¦ąh‘®¤h“ňFš­ˇf#Üö˝”懇ł­'çÎŚ=–=O€şxvě˘Á ó`:qz…aňëŻţ˝.ŹKű÷¶ Ĺ?‹Ĺç\ëű«Áđ¶Ůňę$ŕťŃpwŘ*ŕ‘K6Ź<×öˇł‘[+=Ŕ”ޱJĘECÝ. €ˇrµe,I’$Išć˘Eş’˘ELĘ[v†jvÓŔk xK€‡ĎÎmŤěżÖx˛÷_•|6ď5ś|ÓŔ“ĽŔ-,:Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ1)ŻąôŘ%›— TWGäU†žÁóäK¸ůg˘÷ó ţc€Ť&:Ć*) u»0†ĘŐ–°´›&í9ô^{Ł@˝×ßöĐŃöĆú5űĐŽt`ľ˝1a§íH{Ž´7$I’¤UŠéJŠ1)ŻžÎĺĎÁ\žxř3}ÇQ#Óv(şňö!Á8ëń°ŃAçřöeĎ?đŹ]ŐĚŇ÷Ý<çĐó,ţ †öi>{¸ýYÍĎ }ßy°Ř>¶y\űÁű\ëű[Űz€‡/˙_ş?ôŤ¶Ź_>şoi o_|Žóç˙öďk3ô:KCŢţçţöŰőě®Îg7ź#=öąŃUtŚUR.ęva •«-`©îÎţđľt×Ď··ĆZÇđ±G¶¦}ÇŰ+5<>÷\şkçsél˙Ö í¦ €ŹěOŰ®óçy-ďU’$Ie‹éJŠ1)/Ľôz™9sΆeŞ­t&ń*ňŢ?wŔ­":Ć*) u»0†ĘŐ–°´sđŠK’$iҢEş’˘ELĘ93uě2Đ7ĆŘÄëňÜęFÎR˙Lŕ5ĺ3µoü™ÓĄDÇX%墡nŔPąÚ2–*ďČţˇAć{éG»ďě8lŮ‘ţáăńřÜ/Óž/o]Üoß+3/Ą“‡ö¤ÍÍÇÖt×÷ßJ›űʦ=˝~ţP~îţóÔˇý‹ĚŹ?žîÚҰlÝ“~4pŽ €ósäŻßKîi÷]4ŠNţúĂĺˇęĂ?{&Ý»µ˙|›wżNµŰҹٴďžö{Ýş?ýü\˙îáđěCűҡ÷·ŻŰ{üCż\v¦rŢéýîOłÍ˝çÓĚ#;Ҧćľ;Óžű?ÇßüpWşë‡K?÷S‡îK÷ľřöč÷˝řs‘$IRí-Ö!ZÄ`rŃ1VIąh¨Ű…0T®¶ €ĄĘżöŘťiۡwűCÓK寧ěŢś±ş~t˙}éŔüĄţÍKď¦'îŮ•~ôQJgźß•6?4›Î^îÝů|šyčÎtď‹yżŁiOpľr>ĺMąĹđGżH_˝çńtě\ËĹwžIŰîy¦?€ Ŕcőöą·w~Ď]^¸Ů‡¶¤M÷?—ŢnľĄ…ˇÇÍĄ‡·îHŢéŻÍ{űňRţ[mtĽ%m{âŐˇ×Ý_V{ě ŕŃź÷»éŔ=w§'Ţin¤źďîýLó°yţąt×î_¶lgK’$mĢEş’˘ELX?Ë?›x”łBŘx˘c¬’rŃP· `¨\mK•·8~+}wç÷ŇÉćζ.ýÚcw§Ż~˙éµwŇĹʼnęéĐÎÁ™­m—~Ů g›ě`¨Ű6|đhů ßöyÖ_ęÝ·{đĽÝ^¸Ů‡î}/Ż?žľšżďŕ’Í'źŘ“˝?>^÷ţ҇íÍĹFž/xOo~/ÝűĂú_7Ďńxzřţýi¦?n2–$IÚxE‹t%E‹L.:Ć*) u»0†ĘŐ–°Ty‹ŕ` ąÂ8ź%űöĎ~îÝygsůâ;{5] /ÍÜÓś˝şüą‡Ŕg_ytéĐŤIŔ˝×ŰÝŰoq8Úíő‡[6T|ß˝źÍ˛ç»íÎôÝ7ׯôzăŕeĎ˝%m~â­v{J'»3m~lévÎX’$iă5~ĚWZ´ Ŕä˘c¬’rŃP· `¨\mK•·8žü ŕŃŇOvß—˝˙A:´{ěń‹­2~çiŰîŇŰ—§OrđĄ4űĐž±Ah·×nµp˙RĐË»!g]ÚyY˝÷đŐ‡^H?zhW:4ôŢ €%I’6^Ń"]IŃ"&“‹Ž±JĘECÝ. €ˇrµe,UŢâxě3i/°ÂgçĎĹÝ—~Ţ~fo˙łk—>ř®Ágáöş84ÍĽ™¨« €{ŻÇ#ݶĂŇKéÔ‘ÇÓ¶5Î>uhOď=/ĚvyýáVçďőË{ŇOźw|ů|:öJďů{_^ÓgżŢűކÎčÍ—Ňľ÷gďµCŕËéěńŮt,îo‚.ý|i6íą齿öŘŽôđ›í I’$m˘Eş’˘EL&c•”‹†ş]CĺjËXŞĽˇp<ţh÷ťý‡-;ŇľCʦ‚3€/ľůLşwk{€‘÷{e0켔NÚ“6·›ď˙A:ÖĚNW÷s챻ە­é®GžKďÜ—fň¦pÜű˙öů‡őŐ“żţp+€{ť›MűîŮÚťŢ÷úŔĎú÷Ź€÷ĄĎ˝îCżl†ÄË›Kßm~n3†Ď§™Gv4—ŃÎßű¶oý˘yʧíJ{^i‡Î˝.ľ¸'Ý5x?ŻŻ˙:‹?I’$ŐŢŕµŃ"&“‹Ž±JĘECÝ. €ˇrµe,éVoůgK’$IKE‹t%E‹L.:Ć*) u»0†ĘŐ–°¤[=`I’$­V´HWR´ Ŕä˘c¬’rŃP· `¨\mKşŐ3–$IŇjE‹t%E‹L.:Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ1\tŚUR.ęva •«-`I’$IŇ4-Ň•-br<ýFZ¸úIşrúĄô™™3éJďë…ąńľ«xrîăîŹk_o~&Ř6üšW®~śN<oßnĐĎE;ż–v˝üí´÷Ůíé3îJ{{_ďzę‹ńľëhÓS{×çu+ůţjc•”‹†ş]CĺjËX’$I’4ÍE‹t%E‹Ü /ĄůÁбF^ë@v%‡OźI‡ű3g®ëőźŢŕŕu˙ůoO;CŃvXşóÁhż•Ýţě®t{p®˙ű¸•DÇX%墡nŔPąÚ2–$I’$MsŃ"]IŃ"&7CŮ ›äř@ő`:qá“ćĚÔćlŰ™ţrń,Őö¬ŐřĚŐţs¶Ś 8›đđ~CĂâ±3„űgüŽľN<üřnáçűŹkžsń{XŹ}ŢHOŽ×:ÎÔÁP4KǬîĚćK5ď]÷­yđŕ2ĚÇőno? wěu†ďď—ĚK硳}űŻőýL™č«¤\4ÔíÂ*W[Ŕ’$I’¤i.Z¤+)ZĤ´—ŇüȰ˛gĄAďJ÷÷tşôŘ€w’đČölü1kÍEý÷ŇŮ»ŁŢ•_ż÷řüŮľĂŰzžś;3:T.jř Űlůu’đÎh¸;l•đČ%›GžkűĐŮČ­•ž€FtŚUR.ęva •«-`I’$IŇ4-Ň•-bRZ0^iXZl/•Ľâ¸˙ąĂ+}_Ůň×Ď÷ ź!<> ^{¨ĽÜő\zu·?;ö™ąyüěö•÷ÉŰÇĎ^·đň÷—/ í `€•EÇX%墡nŔPąÚ2–$I’$MsŃ"]IŃ"&5č]—?^8}fhX:LŽT6Cß`ŰLţüßţýÍxhżńˇożŹÓ‰™ţ>y{Î6÷Í-=ĎčçŻ%~˙ăg7CŢ‘}ĆĽ#Ż?> ýůeťÎNn¬çxřňĎń% űCßhűřĺŁű–şńöĹçx0ţo˙ľć1CŻł4äíîď`ż]Ďîr0Ŕ*˘c¬’rŃP· `¨\mK’$I’¦ąh‘®¤h“ ­r¦ď4 /ÍúYéLbŃ1VIąh¨Ű…0T®¶ €%I’$IÓ\´HWR´IF΀˙Lŕ)ćçrsŚśĄ<ţ™ŔŚŽ±JĘECÝ. €ˇrµe,ŐŰŹgŹŔ-§¶˘Eş’˘EL&c•”‹†ş]CĺjËX’$I’4ÍE‹t%E‹pí–öî¨˙yşPZtŚUR.ęva •«-`I’$IŇ4-Ň•-b0ąč«¤\4ÔíÂ*W[Ŕ’$I’¤i.Z¤+)ZÄ`rŃ1VIąh¨Ű…0T®¶ €%I’$IÓ\´HWR´ Ŕä˘c¬’rŃP· `¨\mK’$I’¦ąh‘®¤h€ÉEÇX%墡nŔPąÚ2–$I’$MsŃ"]IŃ"&“‹Ž±JĘECÝ. €ˇrµe,I’$Išć˘Eş’˘EL&c•”‹†ş]CĺjËX’$I’4ÍE‹t%E‹L.:Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ1\tŚUR.ęva •«-`I’$IŇ4-Ň•-br[zrîătĺę™t8Ř0,:Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ1éËCŕů™xŔ@tŚUR.ęva •«-`I’$IŇ4-Ň•-bŇš9c ¬):Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ1iޱJĘECÝ. €ˇrµe,ÝŞ]n˙_’$IŇjE‹t%E‹ L'.|’ćŰú˘c¬’rŃP· `¨\mK´ssićČ»éb{s´KéÔńŮtě}C`I’$i­˘Eş’˘ELZÎ&c•”‹†ş]Cĺjk˝Ŕ<ݵĄý‹nëžtŕÍK˝{_Mű¶ěHćűűäaŐĎw÷¶ďţĺŇ0kţ™´mËŁéX:šöÜÖŰ÷•Ň˝[űĎłéžÇÓ±ü4mů5¶µŻ±éžGÓĚąţý§íHź{čéŘc;z÷?“Nőď–nŤVK’$Iš´ÁÂ\-˘ELZŔŔ˘c¬’rŃP· `¨\mM:ţÔćź´_učÍďĄ;nŰ‘ľ{ü|şÜűßŮWö§M·íJ?:—ұG¶¦Ż>żĐů/Âýi¶˝'o7=6×űŞÝ¶ó{éŘąË)]z7¸gK»­×;?HwlŮ•˝“'—ҩźíYö6ŕŢcďzâŐtÖ‰Ú¨]z/;2›f^ÉŽ¦“˝.ľs´˝ťÍĄł˝öß>r4˝öú«Í>o÷ţu8űúlz-˙Ç˝gfŹĚĄ“LJžăŁţS§t>ť\|îW›×™mţ]’$I’¦§ńşŇ˘ELúžśűŘXStŚUR.ęva •«­őżöŘÖ´ů‰·Ú[ýňŕwŰ?HéČţĄ3~ó×ý2ýd÷ÖôđëůŽ…ôŁű_çđÖ´ďxţş-ďßyókl;ô^˙ţ¦÷Ň{v¤Cď·ŕťĎĄłíi#–ąÇćű˙ĂĺsoĄŮWŢJć#gçđčđvdÜ }űĎqqţŐ4sü˝ć‚“‡ÂŻç˙@Ł×ĺ…fl,I’¤i+Z¤+)ZĤ?ü˝rőL:lc•”‹†ş]Cĺjk=ŔłmI{Ž´7Úú—e>Úű*v÷¤ź_ęqď}ńRşřâžţŔřŇ/Ó˝[OŻ5Źh/˝xąč^CŕüË˙B폗^KÚ¸]|?źŐ;›fŹĎĄ·ç–.ůĽlÜ?ówĐčŔC—Š^|ÜB:Ůž-<(?ĆX’$IÓÖňß)ËŠ1\tŚUR.ęva •«­<žÄ ?¸W@üVúîÖţ 8}ôBúęÖďĄc/îYşÄóŕć ŕďż•>ühaÄĹËŔş•şś.~ôAzűő|éç•Î6–$I’®Ąh‘®¤h€ÉEÇX%墡nŔPąÚĘĂÝIş¦ĎÎźĎ{ŰĐgy4mn?¸éČţ´éžéŽÁĄ ›K?ďHŰîľäóęŕńĎľřÎ/ŇĂßźkžĎXżţĄť_{żůćtů˝t¬ůĚß^×=îíó¦K@K’$IŃ"]IŃ"&“‹Ž±JĘECÝ. €ˇrµµ®ŕ^<ݵĄý‹nëžtŕÍááRînI_}~ˇ˝ťŇŮŢ—>·ĺŃt¬˝˝ć¸×ŮWMŰÚ×Řôĺ=éĐ;ýa™°n‰.˝—Ž™m.=“?Ë÷\; NçÓÉćľ<ľ¶pó‹Ďýjó:Ŕ’$Iš¶†çj-b0ąč«¤\4ÔíÂ*W[“€%Ýúĺˇń±ůÁ€Y’$IšŽ˘Eş’˘EL&c•”‹†ş]CĺjËXšŢ.ÎżştĆo>Sxě3%I’¤i(Z¤+)ZÄ`rŃ1VIąh¨Ű…0T®¶ €ĄiîR:u|éňŇÇćM%I’4}E‹t%E‹L.:Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ1\tŚUR.ęva •«-`I’$IŇ4-Ň•-b0ąč«¤\4ÔíÂ*W[Ŕ’$I’¤i.Z¤+)ZÄ`rŃ1VIąh¨Ű…0T®¶ €%I’$IÓ\´HWR´Y·éÄ…OŇ•«ź¤…ąÁv€›+:Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ17„™3Ŕ@˘c¬’rŃP· `¨\mK’$I’¦ąh‘®¤hsC0*c•”‹†ş]CĺjËX’$I’4ÍE‹t%E‹‚0P‰č«¤\4ÔíÂ*W[Ŕ’$I’¤i.Z¤+)ZÄÜ €€JDÇX%墡nŔPąÚ2–$I’$MsŃ"]IŃ"ć†` T":Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ17` Ń1VIąh¨Ű…0T®¶ €%I’$IÓ\´HWR´ą!•ޱJĘECÝ. €ˇrµe,ŐŰŹgŹŔ-§¶˘Eş’˘EĚ Á¨DtŚUR.ęva •«-`I’$IŇ4-Ň•-bÖí`:qá“tĺę'Ŕ@˘c¬’rŃP· `¨\mK’$I’¦ąh‘®¤h€ÉEÇX%墡nŔPąÚ2–$I’$MsŃ"]IŃ"&“‹Ž±JĘECÝ. €ˇrµe,I’$Išć˘Eş’˘EL&c•”‹†ş]CĺjËX’$I’4ÍE‹t%E‹L.:Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ1\tŚUR.ęva •«-`I’$IŇ4-Ň•-b0ąč«¤\4ÔíÂ*W[Ŕ’$I’¤i.Z¤+)ZÄ`rŃ1VIąh¨Ű…0T®¶ €%I’$IÓ\´HWR´ Ŕä˘c¬’rŃP· `¨\mK’$I’¦ąh‘®¤h€ÉEÇX%墡nŔPąÚ2–$I’$MsŃ"]IŃ"&“‹Ž±JĘECÝ. €ˇrµe,I’$Išć˘Eş’˘EĚëńäÜÇéĘŐ3ép° ŕVc•”‹†ş]Cĺjëf€Ź=˛5m~â­öÖxďĄ÷ěHćŰ›’$I’$­sŃ"]IŃ"ćőĘCŕů™xŔ­&:Ć*) u»0†ĘŐÖú€Ňě÷f?joŽ÷ŃŃôÄ÷ʦŰ›ŔŇŤěrű˙’$I’V+Z¤+)ZÄĽn3g €€©c•”‹†ş]Cĺjk}Ŕk tçźIŰîy&ťjoK:7—fŽĽ›.¶7G»”NźMÇŢ7–$I’Ö*Z¤+)ZÄĽnŔŔ‰Ž±JĘECÝ. €ˇrµµ~ŕ<ĚţK®?Řť}hKÚvč˝ţđwč/ŔĎ5ŕńđB:öŘŽ´©ŮgkÚöČl:Űn‘¦ľUŔ’$I’&mé÷Ö:D‹×ď`:qá“´0w0Řpk‰Ž±JĘECÝ. €ˇrµ5éřS›Ň~ŐĄĺgô.€skśüö÷ďN›î.˝}©wăŇ{é'»·.=Vš–z˙ě;2›f^ÉŽ¦“çRşřÎŃöv6—ΦKéí#GÓkŻżÚě“˙ť9űúlz­·oşônš=2—NzŽĹ˲źO'źűŐćufßÉ˙ÂI’$IÓS´HWR´yÝś L‘諤\4ÔíÂ*W[ő€çŇĂ[FŰß˙ąô›ö¦4 ĺAî±ůţĄś/ź{+ÍľňV˙słGÎÎŕŃáíȸúöźăâü«ićř{Í'˙&…_?ß˙´ŕË Í0ŘX’$IÓV´HWR´yÝ €€)c•”‹†ş]Cĺj«ŢđŃ´'ř‹ňs[OŻ5űJÓŃĹ÷óY˝łiöř\z{~aé’ĎËŔý3ŤžHożž/ýĽŇŔŔ’$Iҵ-Ň•-b^Ź<ü˝rőL:l¸EÇX%墡nŔPąÚĘĂÝIşöđ–tďó¤ßů ťíÝłl|ŰžôŁ÷ŇŰďźďÝ1:0>ůÄÝés÷|/;w9ĄË—ŇŰ?{<=ńşá”¦©ţĄť_{żýĎ.ż—Ž5źůŰëşŔ˝}Ţt hI’$)Z¤+)ZÄ`rŃ1VIąńî?ř˙`Ů}«Ýo •«­ő§töĹ}isţKnëŁi棱p:ź~ţ­;›ż7?2›>\vĆđů4óČŽ´©ůKrkşc÷sém§˙jÚşô^:vd¶ą ôLţ,ßüD4ťO'›űň@řÚŔÍs,>÷«ÍëK’$iÚ_ +-ZÄ`rŃ1VIąńnôŽ{Łű €ˇrµ5éXŇ­_›÷_YH’$işŠéJŠ1\tŚURn| ;öľă·ÇCĺjËXšŢ.ÎżştĆo>Sxě3%I’¤i(Z¤+)ZÄ`rŃ1VIąh¨;<ô]mř›CĺjËXšć.ĄSÇ—./}lŢôW’$IÓW´HWR´ Ŕä˘c¬’rŃP7›dř›CĺjËX’$I’4ÍE‹t%E‹L.:Ć*) uÖţfŔPąÚ2–$I’$MsŃ"]IŃ"&“‹Ž±JĘECÝ. €ˇrµe,I’$Išć˘Eş’˘EL&c•”‹†ş]CĺjËX’$I’4ÍE‹t%E‹L.:Ć*) u»0†ĘŐ–°$I’$iš‹éJŠ1\tŚUR.ęvń©˙ńo~6ťxýŤpđ”W[Ŕ’$I’¤i.Z¤+)ZÄ`rŃ1VIąh¨;ą˙;ý˙(Űn Mv`IEND®B`‚drf-yasg-1.20.1/screenshots/swagger-ui-list.png000066400000000000000000001727451416705305200214230ustar00rootroot00000000000000‰PNG  IHDR€8čÓÁCsRGB®ÎégAMA±Ź üa pHYsĂĂÇo¨dőzIDATx^ěým\őť'zĘ0sc76âNě˝1Ń»ë{cw_lĚÜClĚĆťŘćECß^ő¸Găn䶡yđ€ézŚÜ¶° Řvó`cdc0rcËcóĐ<µ0˛0 7ČŘ ÂY *„TB* IřmţO>ť»tzž`čW§ň·©l~“ Ä’źý‡řÔ·˙müĺ—fGÁ™_˙@\ňŹÇ—~n¨Ş^pľüŻV,Yů˙ŽO|ý˙ż\g<´?{Ó%""""""Ă“˛2’ŁçŇ{”ŔŔđH)şĹŇ·ř¸H Pđ©ţ—X˙ň/˛7[""""""2|)+!9z>~ÝJ?żTQJ±Đ-+{Ŕ¸ę‘Á˙’đęÚ˛IŮ<ŕŘ—>\ŠČđ¦X@rtťúĺYĄźßŞ(ĄXčö*zŔ=‹Üݬ8>-?>>wÇqńé[~|\|ńľăăňźWýĽ˝üDJcŕŘ‘>\ŠČđ¦X@rô•}~¨˘”˛Rw"ŔŔP»úávűĹ:>>ůýă⌯ŐŢT.š»jVśzŬeMíOűjíńWfĹß|çqńOŽ‹ż˙Y}]#ˇzŇKŢËGŽľ˛ĎďU”RVęN„ZW5ĘßTä~ň{ÇĹÇ®¬—ľ˝Ľţ¦ňŁ‹j˙[“ţ7MkNOep*…ĎYňřěťÇµ¶§†ęH˙­‹Čđ¦Y:2s”}~¨˘”˛Rw"ŔŔPjŢşů ÷źąi¤o«đ-yŮ’+…Oýűz|Ѳă˛29mS Őţ{‘áM×5!Žş˛ĎďU”RVęN„:Í‘ż_Ľ˙ř8íęz‰›»Ů›ÉdRÁű‘/¶ß`&éq68[¦6-ýüĺúmˇÓ­Łł8wKiŕŘ•ţ‘áMţš3CŮçw€*J)+u'B •4B7•´_Yq|ś}í˛[97Gü¦b7•Ľ§|ˇ»ümJÓçć祑Ŕ_™»zV|ö'íŰAǶôß· oZ×~1Ę>żTQĘSO=5i ``heßů›űľßTěţůĄłâüëţqŃ7˙mśzůżČ¦}$÷&3ż˙꿎O]˙żĆé˙ĘŠâlÝš´ťů_™‹0Ş ý·-""""""Ă›ćő fޞĎďU”RVěJ •ć÷ó~韎/ÜöyVüĹełâÖ•ź‹}vÇ«Ű7ÄyßřźcnŁŕmJńÍ|2öÜ[ßXźüćż­/ł¨~KčôťŔçßôÖ÷ Ç®ôßô@Ů|]śpÂu±ąńpú˛9®;ᄸ®cÇeÓŽpŽÄó?jç´WŽÂy=bôą<gÍšł’łlL®äŻ 13”}~¨˘”˛bwP ``č¤ř˘ćčßFüŃE9źźcoűwŵwĚŹS/˙—]·Neďy_˙źbŐÚd˙ßúĐçâ?]<+ćą^Ą‘Ŕ©mó+*€áX—ţ›(}ËĘ#XŇ–í·cÚTěg€mLwüŕYőR˛ˇł›Ě•–łÎŞ=ʧ׼üô˛őj9Ďńh%˙\ ç2_ô>xÖ¬8á°I'“)úďc&¦JżG""""C’ü5ˇiqËUńôÖ'âw]ľ7•-?woŢ{÷oŽÇď,ź¬(űüPE)eĹî ŔŔĐůĘĎŽŹÓż:+ć}ąýćńًދ˙üązüä†űâCź­Mk|pţMfňáKfĹ™Wţ÷ńţűďÇť«ľ’ŔévŃi^*€Óv˙î‡ř.ŕ_˙Yü|ŰŠxmß¶ŘhWĽ5ö«xmçObí+źŠ;~]_fŶڴÝÉŠxb]{Ýëźüă¸cÝźen{ňím®ż)^É–˙UlzĺĎęÓŇ~^YwŐ¦7öµ˙ĐćŮą,V¬Í­Ű´ú?Ä[ďͶłŁöa¤öżŻĽą,ÖľvS¬}ŁvĽ…cůîşOĹł;kŰŰoí«ëóiŮ×űÜv~nűŚŰ~·,6íŢcé8n¨=ç’ă¨-SŢŤçŃ8¦×v/‹űňËÁţ›(}Kť#X§ň®82łcZ ŕ4}Vîx:§cÍÂ]ç˘ÇĽÚ6ÎĘ=ÁÍםłŠű.;×ÇjňĎĄösűiŐĎQ˝ôťŠßťÉćhî[DDDD¤3ůëAÓâÎ{b´±ďάŤĺeËOŔňmi;Űâ× `€cBJY±;(00t-?>>ú•Ú›ĆÜíźSű_.™{ö˝ĎĽřłřóKŹŹy_:®1Bř1oŃńŮr©ţ‹KŹ‹sŻůżÄ{ďżw<ş(ţÓĹÇÇüË˙»l~*ŚÓ:}ĂJ÷Ýĺ©%1ň^öoyiF¶Ö—»ďÍě]z-űăµMÍő?OŽ5&×rh×§ZŰýţkSÓ6ĄęÖµŤ)eŮ×7·[łúżĆĆŤY=Ó^燵mjLí™±%Ťí˙‡XµkWcb1µmnČ•Ŕąc>´CíŮ7rđ^0G\úoz 4ĘĘëÎjޤě,$;FXžđ…řB×´ëbsĎmÔ“FcKÉ4­ŘI¶§•í»ą~~^É~ËźpÝc}¶‘KăŘłéY!Ű\ľX⎩¶Îc©lm-źqšŰfÇsOĺeÇÝú6ëĎ9ŤäÍÍËŽĄů¸ßĽBJćĎuçyŞYˇ Îć§ĺ˛rąěůf)ŽDÎźż~ózĽžŤsX˙ťj?źâsɧyśůç×Úfv^ ÓRŠűiśżërĎ5íŻ˝Íúşĺç˘ßďíč ó˛ r;çő|-űí«1Żc×""""2ŁÓĽn4mšđţGăÖ[ţ4ţľĺ?Ć'Ë–ďá“ß­­óÝÓ1­ĽţřĚ÷Çßţąßú7qnëqcťďź›6}Ę>żTQJY±;(00t>wçqqÚŐő7Ť©°ť·hVĚţ̬Xpý˙ď˝÷n<öěŹcöÂYqĘeł˛R8}7pś§ŃżéVŃg\ůßg˙˙ół?Š?ţT}ŢGoDÓ(ŕŹŐ¶_¶ď˘U»[•fÄ{űŁrwšF)Ü,€żşéW­‚ő­7#zýݱ)ßşî˙IÜŃŘî;›k®Ř}eUkűcŮݵńVný|Ü.śk9´66n[÷ĺJŰ÷ŇŕU±6m{ő’iLNő[»~kßXcąb;íoäŤúöŻĎ=—úvjÇ’ßöˇ±˘q=Kk0Ó ý÷÷ú>JŹ9[?÷üóŹűÍ+¤{p἖ť§ÜńÖdç섚ëô8‡Ů14§×źW»Nűd^:śŻg¶ýbŮ[ö{ÓLš×\ľxĚőc(}m‹űi<î8¦üüŽó×H׹Čď;Ąľ˙|áÚŇŢńŔÇXöß×@ç°ěŘSňÇßo_i^Ůú""""2cÓ,§Mł»'®íš˙ců¶tiüî±?żĽćŞř]şŔrhm,˙nłŕÝs×zn»1ţľ±~±>÷žÇ«ůëJ±+~űجďë‰úő˝[ŚßŤŐöŮ8ž®umÇď©KcÓˇěó;@Ą”»RCçÓ·󯬿iśwůqńç—| .»ůŹç~˙pěÜýj\ö'ĆU?š÷<öŐ8óĘťý|ßă×ÄÇżúŻă+?ř˙ĹOý­8ď˙S<ňô÷bĎľqëĘ…qÎ5˙׬(N#„˙2Ťľ|7¤˙.ÖîËţŻes<űTqţăúŐŤź×ý$Ţj,yh÷çëÓžĽ)v4¦Őł6žh¬×ÜśÖÆíQµ­şůő·ĹóĎ5—źĎ·Fç¶›ŰơÝ_ŤëÓŻĄ]ôŽ˝yZcůŇ;żíĆ­é»bÓ†ĆôŽ8Ý{E<˙ʧ⾧ţ]k{p¤¤#J±ÔéxÜ«Ě*Lë*†:Kľ®¤"ŞŐJ5Ň5­lßĹ0·źŇr«l…4Ź˝ďs(î·,ą}um«ťzˇvBV˛Ą°ő”Ó:˝ž[żyIÓsŰL)ž×ńÎSÚWmůtśőŐz=÷Â:“:öⶠ돳ě÷&KZŻX¦6÷‘·Őg?}ś%żżÂľÍDŽ1?/űyŔsXzě)…×rŕă‘™ž|ń8-šđˇmńjëűŚ»o)ĚűqÜ˝ˇţÇűo<÷çŮĽzÁqplmmťµ1Ú¸(óű'ęmgüçńxvígĽńâ÷ă‘ bozxčŃř^ÚOŁnćŕ®ǵ­uvĹďź»1~V['»L´ëű­’y:”}~¨˘”˛bwP ``č|ćGő8ÝŞyޢ‘}‡ď?ţâ+Ů?¨#Ł›˛Ń˝?}söř‚ëţźńĐo–f?ň›˙&îţç+łź\˙ďbÉ?ţUöóŘľńéNČF §ďÎŢÖ¶]¶ď˘ü-śă˝m±#űŢÜĎÇ]ç§â•ćÚ}7Ĺ÷Ó´üHÚ,ÍŃľą‘ÁąQÁ™Ő˙!nŰđůú÷řn»7^Ů·­˝ŤÜ-šóĹôó­ďůí,€źlnóĹU­m´Ęéšňř´Ü­Ą7ÄłŤď/Nň·…nŤ|ÎŔů¦Cúoy ô-‰Ęʬ’iýJŁ’¤r±="´žîi=öÓ(NۚˤĺŰÓë]`ŮńŇ<ö®b´ľ˝l;Ů~ËJĐ4ë„îcé:Ťtí#ť§űČ?î7Ż•ú¶;ŻĹó”­ţs«řm–­i_Í…j)}ľĄĎk€yŮóhKÇ6ÓĽÂ9ě~.)eżk…×}Ľ×6?oŹKĎE¶í˛ăÉ?ÇśćąťČ1Nö—˙xűę'""""3=ůâqZ”~pţ¶Í·nmý)äG 7 ŕß?Qü™'ë_6şáÔÜüƶnůqĽ‘î0®ĎÖ?!~öfn~ł~óĆřĚ5őíýĺŤ7Ć«iÚ®ÇőŮm©?żÍĺđżźx"Ę>żTQJY±;(00tţîÖöŕT䋿şâŚ=tIz÷ťřŢO?˙őkŚKľű‡ńŃ/sí˙˝öó˙7N˝ü_Ć9_űřÜMg]őŽŃÝŻĹ–‘ßĆ×ýŻqÚWţŹŮí¤ł7Łé,€ż˙JďďÎ=´ď'ń@spľ”}oUüĽ6­u›ćýk[ß#\˙ľßö-™ó…ě_\ůľą+­ř_ÄŠÖ-¤k9ô«xţµe±q,7- 掑ČűcÇÎeŮ- ßĘÝşő=ÄpŇضŁ(ý÷NűjíMcVţÖß<~řŇ4řřŘ»˙­řÍďţ)ţôâYńgź­ĎOßűűˇÚĎsk?˙ymą?ů»Yńń«˙Çěŕ{ţůęřŁ‹R‘||˝LNoFk˙{Ć5ľ!ý`Üö»e±iß¶Řź+L›É—žíďőÝkźlߦ9}woţ篮ż·Uôîxí?4Ö?żăű‚÷ď˙UĽňf*jst®ţęSKZĄrwöÇČÖ?l/[{äż3¸÷ćŠěA ŕÜ÷+€9ŠŇż Ą_ITKsdh>]Ó ë‹Î´|«h,+‘zK˝öťúŕYőrjóugµK·Tn5V쵍îăI%XnŮ´ŤÖ1ŐçËŰŽç™¶SRŘuí«U~¦¤ň®ąĎ’ý·ô›—ßF!%çµ×yŞ/{BÇňŮą>ˇ˝|Ďç[<†ç5öŃ: ô¸GŮX|Ü7ąB3Kź×vĽýôxüXĎsQN­} śÁŹ±ěżŻ‰žĂA~wSş–ËoODDDDf|ňĹă´·ţÎŔűŤď5Fč‘Ŕů¸ąÎŘqS6¸áű'´JäéPöů ŠRĘŠÝA)€ˇsůÇÇ©_iĽq\T˙ßy‹Ž‹9źź•}§ďSż[˙ąös*„ÓĽô˝ľ­[;×~ţ‹K?g_ý?Ä{ďż·?ňĄřĐgŹËFgerm{éű/XúŇ}Źë׼±ˇĽ”m•ˇűă•Ű·„N%o«N·|îX®ąíö¨ŕ8´"hn3WwěëŃĆĎ›·d>´9vL·§ţUĽ¶ó'±j}É÷ď>ŐĽ?Ćöo®YŻí^_;?nk•żIľ^OvĚ+ˇć(J˙Í”>%Q–¬J·-™ąiůÇůĺé(AĚŤ(m¦lZJŮľk˙7+c›Ó›ĺT*ĚšÓň#"K¶ŃqőkAÓ¨Yw|pňý¸)?ěžXŢă;€÷nűqüěąG'öŔ/n®źoń;€óđ—ţ:žÎşçý1şőžxäÉďÇŻ7×Žíą‹ŔG@JY±;(00t®xčřřŻK>§ţ}ýĐéÍăĽËŹ‹˙üąY±o˙[ńĚ‹?‹ż¸ě_d·rNĄn6Ş·!=NŁ€?ýíźý|×/®?]8+NýrŁNŰúʬ¸äžăK÷]tÇ++bÓ7eßÉ»jĂźĹë?kwmÎŔ_m/ź+kßÚµ*ŢĘ~Ú›6Ô浊ŇÍ12ÖüKĐ|Áš+€ß[«~]›öë?¬íżýý˝­ďNÖý¤±ýÚŰúťç·Źˇ‡U»›űÜkÓ¶K–iúů®ö_ަŰ\˙|}ű{€ďČľźřSíď-VsĄ˙ž§-(†ĘFG–M“ĂĎQ;Żý~&Y"őďČtŻJ^‘JĄy=hÚôąÍňň/ýÇĆ(Ýýń»Çţ ţňĆëâ÷é˘ÎˇÚĽď¶ ŕ|ön˝.>ßŘvg<+νçÇńjë˘P-‡6ÇÓ6n)]ZĎŠĎ?öhě­Ďiĺŕ®÷ľ]őPöů ŠRĘŠÝA)€ˇrő#őböâŰŹ‹ÓŻ®ŔÍŢ@~ üâÖ5Ů?¬O¬ż3Îşęą_č|“ů—ŐŢhŢöçqŕť}ďG,ąëŻbÎ%i;ÇgEqý{ÚUłâʇ+€[ßă[št«ĺć-ś“ĎÇk]·en”Ľů‘ĽÍäż§÷Ń?‹çswę•‘­Ťĺ;ľ×7eě?´«îŕ†xĺÍ%q_®čířÎŕZ˝×X¶ć­±ńěďţ8®oKٱv¤öśšË*€9ŠŇóÓ–KŁ4ę0?ú3Ąlš~¦÷Ľf#ť[#G;÷ŰoŢ`ňß°L2ůkB3]łţý“”Ýšůóß*_®ÓÄgľ?ŃŰ8˙›ř|vűç˙ź,ťd•}~¨˘”˛bwP ``¨4 ŕŻüěř8űÚú(ŕôć1ŤŢMßńűŮďüâ7/üSüň·wÄ9_űîřŇYqÝť‹g^Z™}˙ďü/˙r͢YŮö>sŰq]űíĺľ7rŁ};˛+vĽq~|·ců’·Uň~µ=·™üčášë7ü$v äC›cd_»ĽmŔŹţ»Ü¨ŢŮ˙“řÇć¶s#†Ëł?^ŰôÁÖ±üđ•U1VúĂűăСńóĆr `ަôßµ oňׄfşVÜřŕŞ*űüPE)eĹî ŔŔĐi–Ŕźżë¸řŘUłÚß\sĘfĹ˙ţwuéç4- č$Ý*úŹ?5+ţÓgó·‰>őŠYqÖ7fĹ?lôoŢőOţqű6Čëţ°PüNĄ?lîç©öwů6÷˙ĂƨŢ|Ł9viěxó¦xöÍUńZúŕ±|a˝9ž_W[~undňÁ_ĹłŻý$6ĄekväÚíC»?ßÚ_Ýăűk›Ďąóx`&H˙}‹Čđ&=h¦STKJY±;(00”®zäř¸ęáăăżÝ|\ý»€ż\ůŃEÇĹÇľňßeŇăć÷ú6ĄÇóźÍ?őňYźľhVĚOĺď×gŢĺ/gžÓbăÁě˙żDZ+:ć}0žlÝży[l\_›öJ{”îŽ× %î†ŃG<¶¤sĚpéżoŢäŻ 13”}~¨˘”˛bwP ``(ĄQŔ©ľâˇăゥy_©oű;Ç—FýÎK·}®­{ć×gĹî­—żÍĆÇ®\\ˡýkă•7—ĹÚ7VÄkąŰEÇ{żŠUiů\śÝşz÷Šxţµe±q×Úx+w›ç·Ţřł’}ÁĚ•ţ;‘áMńZG_Ůçw€*J)+vĄ†Vł¨MEđ§t\6 8ÝĆąxËç~ŇčáŹ/ů@|ńľö¶ňű8Výă¶ć- {eŚlýĂúň«?Ż”~źo.ďŤVwďf˛ô߸ oŠ×8úĘ>żTQJY±;(00ÔňŁużôOőŃŔŮ(ŕËŰo,›·n~×o6˙+łâ´«fĹgn;.ţ~e}ÇţČ߼Ć÷7,©Źâ=´+ö7ÜŻĽyS¬XűÁÎĺýgńómi„đ¶ö˛5oŤ­ç7ťvżÓŽśôß˝ oš×†9Ę>żTQJY±;(0@ÎŐź}Źď'—ç,ů@öÝľéÍev[čEłâŻľ6+Îżńńą;ŰĹo¶^ĄĘ_ ůä·ţ_ńÜďÉŢl‰ČđĄX>rtťůő”~~¨˘”˛bwP `€KVüoń×ßřźcŰΗ˛7\""""""2\)+!9z>—ŔđH)+vĄčaÉĎţ·řÔ ˙KéOŕČK#/˝[ů 0@E(€*B P `€ŠPT„ "Ŕˇ¨))€ßyçťŕčRT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¦ÍëŰއW=˙đĂ»âęëľ_řűo¶|őşȦ?ň‹_ĹČo–®@ `ŕŰőÖîřáŹďë(|Çóă;—Ç[»÷”n€r `ŕÚţćŽřú7żWZňŽçşo˙ FGß*Ý.ÝŔŔóÖ[{âkKn.-w•Jŕ={ĆJ·@'0@Ől¸#Îť;/N<ů”šyqć××ĆhŮr0 ~tÇ?•–şuďňź—n€N `€Ă˛+ž_ą4.>çě=;®m'Í9;ÎĽhq,[µ>F÷–­{$lŹegtlj'źWŻ+[–kŐqRÇkŘ0űŠx¤lů2–Ćܲm4Oo{ňŐŘ[¶ť–Ťqíüâú‹bEé˛uŻm{Ł´Ěť¬]»v—î€60Ŕ$í]·,ÎťS,Äz™s/z ž/ŮÎÔ*+éN‰ËË–e¦zä’ćîĂx-,€;ĚYׯŰ[ľ˝IŔ>ôĎĄEîdýň×kK÷@›`2&S®ť˙Ŕ´ÜŠůń®ňpaÜ5ZľěĐ] ćśł3 b٦’eŽşÚ1vĽ~ţMćw4s^\»ˇd{“(€Ż_úŁŇ"·ÔŤĆšmjoKöĆów—ĚŻYöŁ{J÷@›`Â^-ąÍňxćĹūʶu$lŽG–\/\/Z+6őŃ9|Fď^{MzťGŮňEąc,3`ˇ?é¸fî·ă™®mNĽľâšď”ą÷Ć?ż´-žř¶ÚĎĆš—·ĹÓ÷ŻŚçÇ"ŢŮ ŢéS_óÍď•î€60ŔD•kçĹe+Űßő»wôŐxfŐ˝qíEֿ˵´Pczży&Ŕ»â®óóÇxJśtÉŇřráVăçŢ˝«dÝ‚˛ßÓ…+;–Ů;ş>V,ş°s™ĚĽ¸lun[™‰ŔW]űÝŇ"÷gŻŠw^]_¸íw1»ăŮŰľ_˝ń–řęÝ/Ĺž>đ•ßXZşÚŔU2BsţŤŻ–/›Ů[¶ PŘqdmYó;^·XŹ>çvc˝]sĺéąi5çß;ţm (€›ĘľsxÎ×7–›x|ăÍ?)-rżýÔα—âöŐŰ#öż˙Řś7N|Ó÷o/Ým `€ z~Éy…ě”X°Ľ|Ůţ ßőzĆ1Ň·wÓŁŮčáŮłsógźó/˙–Î+ćÖÉ”ťĹď™my{7=Wźßąď“ć.Ën_ß:ľ2Ĺý¶ÎÉŢÍq˙• cţś\É8űě8sŃ˝ńĚHç6zŰĎÜ˝4.>çěÎsrňĽ}ƸzścY˝4Î-Ś˘-W^hެ{ ®˝dAĚÉ?‡¤öš¤ý_¶äXłĺđoµ=z{ţŐIăxž\ł;¦_ËĆ;w(€ßY}E}¤zße'^Ż|dui‘[/z·ÇĆ—ÔGwLď]?ň‹_•î€60ŔD•Ś>é˘úĺĘJŘ]±ćëe·äí4IqtfŰä ŕúHÓçoYĐ]ćťńíXÓăűg‹ű=é’5ńΆ;â̎¶č¸úÉţŁŁGź°Ľťł ®_W,a7ĆmçFĎöU,47Ʋ ¬Ň•±·cý‰čľýs»„]—Îă™·lĎ­[b"đ@ËNĽŢ6˛˝´ČýÂß˙"~({ŰźJßÜ>NĽýÍĄű -Ą¬Ř”>#wÄ™%XĂÜ+âţqFçvę.aĎ=Aîq?eßŃZ7ą8Ťň=»ůŰtƱĄc[u]űť}vĚé[ţ6]˶to/]}MĚ)]§—âsí~žýĺ Í]µçÔ}kä~únŢ^J~ŻňŰ{Ľx›ć3–•ľ-)€Kţ¨áÄ…Ź–›xśüčŽ*-s'ęÎ{V”n€N `€Ič*ărfźqMÜża"pĽrr^ĚžszďR6wËčĽÉŔy'Őö;»x»ă–y±`y÷óëŢoNşUrźç’FÎv}§í裱 ¤@ž}Ćqíí+ăţĺËâęóĎîšâÜű¦µťőqŰÂEqqÍ™s ËŐžÇÜ‹ęóÚîgZűż·đ}ĽŤuÎo.{im›ąs4űŠx¤µß‰Űrcqä÷¸+?Úşë6ÍĆő=ŠóĚŔđć¸ţŚÂr5Ý#Ś'WŹŽľ_˝îJKÝA}ă[ߏ·vď)Ý>ťŔ“RV†Ś;"¸W {^|yuľ|ŰĎ|˝ű{‡{•o‡UĎ_Źçż[vďć¸íü’"řü{» Űň¸űąĽtűÂ’"¸PvÖt˘§ÄÜŻŻďşĹňčňE]Ű+‰;ŘyÉ))Pç|˝äÖŰ{_Ť5·_ܸľ{ŢŔ^í.a»Îq÷m çöąřřđ®ě»Ť/;٬č/+—'W'#oĽ_[|sią;žëľýرc´t»tSLÚć¸ë˘ńżv΢G{|?py {îíeه×Ć—»ľ·ĽŔś||v\˝®¸\Íč%#a/Ťű Ë•Ŕsľ^VŠ–|×mÍËóË”•ŤÝ%q]IyÚuűâ©)€Oś˝ ®í(´§Č–e1ż°Ż˛ßGŠ#Ďç~»=bą¨ěřtRíüuŤČ>Ś8ÝőVüŕ¶{KKŢ^ŇíŁwů 0! `€Ă4˛î޸x~ŻŰ%7ś±4žďZ·¬„íUr^`Nşž“żur^YaŰ˝Íîýž_~˛s™¦ŃŰ–-Śf-»ýrŹ[^']űžß}ľ'\—ڏm™ł .»}mléńZMÔóKŠ#Ľ/Śeů‘ŘM«Š·îQÚ'“-€KÎ]ÝáŔM[_Ű?{řńřî˛;ăękżŰQř¦[E˙ĂîŠG~ń«lÔpŮúô§"ŁŇít{Źîľ]oI ;÷Ű=Ę·i(€{ďÄš+»ź×‚Ž»,Xź\ł;–­Éßžř0FŻf¦¤.ż˝tŃěs®çVßăŕvâ}”ʞ®™Ä9śsÉńŇŢ’me¦¦ŕČRL±Ń ÷Ć]·k®™}E<ޱěÄJŘŁYwŹP≠¬śśp2úäŇ8·ěő,łhuÉm“°îŰ1§d{ë5r{ s8/fĎ]/y ÖlŻÄV ŔGÂčĘXĐuűŕóâúMů厝řńâwĎÖ,Xٹ̄ ÖŐĹ[×äż·wŔu{cË“÷Ćeçô˙ÎçîQŢă{ćëg—nkpóâ˛Ő%ŰŻdź00Ŕ±@ p„tß6ąX8ΰ¸k„rÓdż¸G1Y3©ďľčŢŮňę`Fvuě/9Ľ8gtc¬Xriů¨Ýžç°—µńĺFŹç¤KÖto[ 0”ŔôČ’KăÚ•ÇąÝoyi:ŁGź®>ÜB´ä»KËÜ%çföńHq90ŔPRLP»HśóĎ_ËV­ďqşwt}¬Xta®$kűíx&·ť™W×Ě^·mČŤžY_î*ýjΠ«/+€Ó9:÷ö|Yľ=ż˛űű„OÎXXŰ×5qíí+cŮ•‹â‚Ú>»¶uĆĄĺsą˛ç×]„—*ýĺBą«J `€ šL|Ň9÷–”’3ąîí¤…+KGÄNćĽdf/Š˝JĎ KKn?=Ž^çpËqfŮňzŔčýťÇĄV•”¸çß;έśĘ^żBy¬J `€ zĽëö»ýÍYôhŹQˇ3«ž}壵uű?·“Îącđ㛳8Yľ¨ë;n;Ě^ËJžC‡M+ăâą%ëöŇç>ż¤Ç(ŕ–ÉŔgǂ囻ö×Ď#%·>ó–íĄËv+űŽéSâÜ»s·ďV %0Ŕ$dß5{ăâ¸ŕśł»o•śn)|ƸlÉŁń|ßŰůΰŔŤrpdő˛¸¸öĽÚŁSÓíŹ/ŤkWnŽ˝ŰčÔ˝ßF98˛&®żdAĚÉÝîř¤9ƵóÓďű|‹FÖ=צí”Üš:Ý^zţů×ĵwŻŤ-ălsdÝ˝qYÇó«iĽfW߸&¶ä–ݰ:–]yiś97w‹é®uVOčyÔ•Ťŕ-={)˝Ąuţ»™ŔCI 0”ĘËç—J—LYń|ý¦ňe€#C 0”&6úxŽPŽ0ŔPR@)€†’ŞH 0”ŔPE `€ˇ¤€*R %0T‘`()€ ŠŔˇ¨0@E(€*B P `€Ix~Éyqâɧd,/_†™cĹÂúkuâüĄń|Éü©±24~'ć.ŮX2ćx~ɢ¸vCůĽ– KcnăůŮóŔTRLÂóËW^ĺ‹´dáĘň厔ÚţŻí(©WƵ͂rů˘öqŐä‹Ëç—,Ť­ußÔn/÷&`EíŽ|‘9±cË˙1Á‰'/ę8G­âúäó: ŰÜëV,›Űëtn«mcíř&ö;8=ç €© „‰ŔůvŞ‹Őqő-€kórĹ⊅íŇPŰŻUç±ő=żăę|=W,lßęą~¬őŇ8;ŽfÜř߬¸Î^űňýuţn5MŃy`ĆRLÂáŔéń‚V W/řšlůH×\‘W[·ßhÚR} ŕF©XR NGÜw4oîąvŤšť˘"3_Ć×Ő^ŹĆ÷ăö/=WćFhG OŕŘş^›öţ»Î׸#€ŰÓŇyí<¦†Öë=1 `€c‡`opsdi*Ű#>;GźćËżürÝ#~źß0^ŮŘ9Ę´cdk®,–ˇÓQw°µçR?ÎÎRł=Úµąě$ ŕâ¨Ř ŚÎ°s;nŐÜ=:yÜQŮ-ĹesŻUDZĺ_ĂÎ×3?j8›×UH·M¶ČU;Ŕ“0UßÜ1váŇX±ĽQ>ÖÖÉŹ0í廼ó¶Íf/ůuň…cÇĐ4ą]&fĄkn?ť#ŤűŤĄ:ÎCîvĘąĐ'ÎŻMĎJÖŤ±˘°˙âľňç.˛ăî8ÖśÖyčń< ĹmçëÓśWµť^·ö:ëuG}˝®×«ăőě,¨ŰűĎ—Ľťë´·W8—™üö&Wš' `€c‡`&TĂL0ÉŰ?' `€c‡`ňŁF'4 ŽŠÎŰF$?b{˘ëpÔ(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B 0[ŢłîŘQ>oĘěŽnz5nŘŇëń›ňç´#.ąéŤxˇkzz[âC‹rű|áˇW[ÓĎzhw{ť§_/]ţÁ;Ó ÓëŽđů:RŇs˝c¤Ç9ŞťÓĆ´ŽóCéw{ńëń`Ů<€ŠRLDź˛ô…‡^ď,mď(+APÜGîqç>&˘ĎńLWśśíý¤÷’§k?§ý·–Ď—·©ôl—wůĺ/i• őR9›ŢXnęźĎôxđŽîŇş9-äG§ř­˝Çŕąf `€‰ČĘĹ×[Ł1?´¸QÚĺGŞ.~=ľQˇš•–5ąeňĹfľMe_ľĐl=.ě#[??­U˘¶G‹fjŰî;b¶Ł0­ŞÍe{ŽĆmě«c»ůý7ÎÖikÚOÇ1Ö§—=ßlżµu»ö_<öšžç«ösÇńĄýulł~žZë¶¶ßyÚű,LoÎKĎ+?­¦ľÍÎĺ›űÉJü§딝łśT_u_{ttéëŢśVÓ˝íÚvďx#wµeóÇ›Űg÷kŮçwˇD:ďťë×§?Xűďĺ†ÜĽń~§˛sŃq̹רp®;ÎiMszű5+?ŻU¦¬€jnůR˛sgˇxęł^§Tşĺ–+<îŘGÚfnÍâ´U 6¦×ő)ÂŇvZĎ!_ĐĄ}7öW<ţícg_YI—Ną‚/iś›®çQxľu}ÎWŮňůiµýde~ců⸭˝˝Îăi>ÇÜ9JÓÓ6Ët>ŻÚňŤçś¶“/H‹ëĺ§5G:ö]|- Ëun;í·}|Ůü~çľ5=÷şç~Oëë· Ř$;®t ąý揷ďďTé:ťÇ\ú:6§çźwî8ŰĎ«Ďď"@E)€&˘PĺŹ[ç×Ë‚íi5ą2ŻěqÇ>ŇĽBW_6m»ösGńŐ§k[±LÍ•rµ}µKĽ¶T´µ÷ß<¶űJűiMOÇX_ľ«„l<ç|‰Ř˝~]ç9Żé:_ůăJÚϱľnóXóEnú9˙ĽęËwOŮz5­óTÜFR_.m§łt-lٱťüóčŘw×k‘Îeű;·]x-J¶Ű\ľôµěú˝-×µßÜkU|ŤZĎ%KÇů©ÉöU8ćüă´Ý®ĺKößzžĹmTź`"Š…XîńTŔĹ2´űqn…2ŻKŁ,«—…}аֱĄ"rđ8ÍËďż}lĺű*+zÓ6[űhLď(óĎŻđ¸k{=¦µĘŘĆ1Ő—icg\źß>žü9é,u[űiśçúôü˛ťĹgSWY™Ö/śŻžĄizÜőZ´—ş¶]|- ç°ą|úßŇײđ{›-×z®uéXşö›{N=źKńőm)ţţ4§ç™ŰVîŘşößÚvq[Ő§B!–ÜY>¦˛*W¦¦ĺňŹKËŻ^ĹW{™Ž}dŰ,/[ZÇW8žŇeęŰď,?sE`aýV‘—=NŰoK÷qw/źŰWÚvků|qÚyĚůçŢy®›Ę÷[—+rSš»ősö¸¶Ďć±uźăĆząó”×U>6¤í”śĹĺ{­ź×qEîw©{[…sRř˝k.ß±ýükŮńÚô‘¶›[.ż˝ÖëśÍ+ţN5_ëĽâëŘ|śŽ«ýĽÓ>ňĎ;˙ĽÚŻaq[Ő§b śJ°Ü(ЬLŹÓülą×#»5sn™´^«(LEd«(«oŻăqcZÇú­ÇuÍ2Ż=­]°uOľäk=§TĐ5×Íw…}µ ąć˛ŻÇ ŐdűĘ•nŮ:ÍçÚąí|a—?ćžűl,ßůürójËv¬›=Çö2íyőănĄ…ÇůőjĎă†ÚëVzüůóךVÓ* Ë7¦§ăoď;-Óţ]hOË_}ťžç%÷»Ôąí¤P€¦ő 罾|Ż×˛ý:ö_˘ăuÉí3Ťľ¤¦9Ż÷óčUÚ¶ç÷qÖCoÔ¶Űţť¸¤ö:µ¶ŐzŽĹmTź`:t”¬{RZ­š çűŇčá΂±xËăa7磻ř^ `€ hŤ0Ž)e˙=T‘`:|ě+Ü®¸y›áÖ­µŚDíd0ŔôRT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPS6ƵóĎ‹k7”͆ť``+cÁɧĉeć/ŤçK×ߊ…)t§ł®?ßËËću{~Éy˦LJs^€‰SLƆĄ1÷äE±˘lŢ„L´Đťą#€W,Ľ,Ž 0Ŕdô(€łQŻ­‘Áůů©¸ÍŤÎFÖG—»©Xm-łpiˇîÜĆÜ%Ë×ëWŘiéřjÇ›=Ż4={gŮ\áŰąn˝đ-{nµéË5¶Ý^żk™l^cßiůÖü™YrŔL§ڞ8+0ŰӲ³Q€¦źóĺl[*T{—ťŮ6ň·QÎöŃ\ľ^Ľv»Ťy…ňµ­¸NçôîŇşłîźťÎcéś?†Âą)[·«,vűh00Ŕd”ŔiÄmg±š ŮĆ2Ĺ´c™vÉÚ©¤TÍ/_r ­˘ąŁ`Í)Y§®l_Ýp±8n?çţp÷ąÉoŻdÝžÇ ôŁŚ®‚˛^bćoqÜ}+ăTŢÖ§·ËÎ~pŮĽ\)›•ĘĹýŐ´FŇ¶Ź©Uľ¦uJGÖć¶ŰcZYśŤÔÍöWßWy\2ŻkÝÂľŔ0) `€É()(Ó(×bÉY._Ntp®,MÇ0ŕm’[#p{«%%laZ»°m/3u#€Ŕ0Ŕ“QVPf#r+-Űeq}TpŻâ8+]ţŕŢ:ËÖ˛uJJŘ´ěXňĎ/;}Ž%Wwť›®u űVŔ¤(€&ŁWA™ťąŰ17ĘŰzyš›žIŰžW,`ëRYś_oĹÂürőâµ5ż&+“{G}ťö­¨3ٱ VĎ]˛´cÝ®żůéů¸0żs]0L0iŹ".ź} `˘€™O Ŕ@Ŕ0ó)€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„`ČĽđĐ«ńˇĹ[j^Ť¶”/›ŔŰ—dĹi‰›ŢJ×™a¶Ľg-~=,›7 ĽŁv®îŘQ:8| `€É8ĘEꤥă>VĘj`ÂŔ“ŃŁnß^9ÉĎß—¤âőé×s#†ëÓĚŻ“¦gŰnn#w›ćŽéIŹş¸\cÄmç±µ§·íŽnĘÍŻąäéňm¶¦w=Ż×âS]·–N#§ëÓŇ1śőĐîÖĽlDpk»íçÓ1=;Wůí˝(€&٬ÎJĐö´¬pm•¬ŤŰGw”™őiíB´YŔ¶‘­“ć ňť˝őm¶ Úú6[űHÇÝŁP-–łm…mv<÷îç•ĘŰŽí¤óŇźßGűą5–k(NďÚĐ“`2J ŕî˘2•Łů˘´÷ČŘć´®mä ŰlTěxßź›+[[ÓňĄoź¸X`wL/¬“ŽĄ^—<ŻÂ>ÚËć ŕz1Ý.Ş›J¦÷;f `2R)ŮQ–6Gď5ËŃ|ÜÔ=­_ś=ÎJÚ´Ý’˘¶&=[,‰óÇ:n™šŽ©~ěůҶó9ŐŐŹłěyĺG+wÎoŔiz±o.ß˝Ż^Ď褌®¸s¤k·˛˘´{Ú¸p~zY)z8#€;äFâ¦möy\öĽrEoaÝÁF—ĂŔ Ŕ“QVŔfŁsKJŮĚŔ=Š×úô|±Z/Z[۸ÎÚĹmćő8ŽĆ~n(”âí¸1˛¸äXzMƧڞ8iݢąˇUd–ĄÝÓzŔő"7żíňB6©¶­eóŁwűŔYńÚk˝â6űŢÚş.=—b‘›/€[Ë´¶ŮŢN˙czQT„`:FĄ2­Ę^ “ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B 0ä^xčŐ8ëˇÝĄóĎî¸á¦Wă†-eóß‘;n8v)€&cËqÖâ-ńˇś©(#Ľc Ótlwě(źW“ŠÓKžî|¬€jPLP*?´řH›ST>ýz|¨Oüŕ[ŔPQ `€ Ů—,î,P‹ęq{dp±l˝äéú6:GwNkĚĹ‘Ć7˝/äö•ĘÜö:ŻÇ űî,‚S!››W“Ž­^¤ľQrLÍőĘŽ·9ŻSÇńÜńFˇ.ŰNý:Ďgç´Žmćž±î}ŢÓö^ŹS1Ţš_{ÜX/S8ĎíukÇśöŮ\·pţ`¦QLD*ű•€YQ+łb±]‚ÖKĘ^óSAZ1»;^h=®ŁÍŇ3ŰVɱdÓ{Žî.\ëÇ”ŰoÇ1uîłü뺎';ăo§ëxłý×ĎQq›© Î?˙Ööúž÷úľóűčÜn˝nť“Üţ›óúľć0(€&bś8_P6ĺ‹Ę®˛łŁí]®6µ·Ő]äć—™pÜë:ĘĐöňĹçX~<ąçÓw;iąöĽľĎ1m§qţóÇŃ˙Ľ§íĎkîŘJ^Ó´˝ú~ÇM`&QLD߸¬­‘Í‚5_ZÖĺ×)+Ó´ö­‰“úú˝‹ÉüţşucßcĘFÖvî?Óµý˛ăÉŻăl§]¸ćÖ)yîuő˛¸łŕíwŢóŰljŻ“-W˛źöyî,®`&SLHďâ5dpϲµkŰő4_lŽWz6—™˛87â¶=żLŮń¤iŤç3ŢvRAśŽącąÜúĹĺkňÇ=ţŕâ±ĺÎusßąu;—SpěPLPV°ö*ł‘®ąÂ0»őq{ŮľekWá[^7×ĎŽŁ¤Tí5˝®ľżü1ô?¦îĺ{éÚov.šÇ?ŢvęEë …cé÷\:Ž»ďyŻď;_ňvn·xŢóęÇĄŕXˇڬpěĽep«@,ĚË‹ýËÖF1™­W//ŰŹ“×ăÁÚ¶óë§‘ŻółéőB3›V6˛5w|iżăS«@mnł±^{ů¶Žă©íűÁ;ňv˙íÔźkwŮÚyjĎ©ë¸{ž÷´ßÚq<”ź_ÜOîśešÇ­ŕآ âp«€ęRL@{„(ĂŞě÷f 0g0ĂC P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "ŔU1ş6n»}mŚ–Í†‚`B6ƵóO‰OΙ}zĚżhY¬Í-·ie\|ĆĽÜ2gÇ™7®wŹŹä¶QbĹÂSbî’ŤĄóŢYą¨¶ťkâń˛yŔPPLH˝Ľ]°Ľ=mď–ŐńĺÚ´“.Yݶ&.›}JĚýúÚÝ›u«ăţ'·7ćwoctËÚ¸máŮqâěE±"_$ô-€€ˇ§îň6y~ÉyqâüĄńRzĽaiĚ=yQ¬ČÍďTľŤTßŃĽ8ńüzŢĆąoĽ|Qv Ď·¦mŽű/ą0NjŤ2ľ4îjŽ0]מzcňĽ{ÉĘŘŇZ/ßŮqíęŐqYkóĽżhuî¸vĹ#‹ňŰÎŹp~'Fź\çÎiÎ;/.^ľą58rŔR28•©µigŢňjcZůҸż8˝a"đă—Ě«=ţv<“Ť(ŢŁ›^m¸ŻĆ˛3Ňĺő±7=Ţ»9–ť?/NşdMc[őă;qÎĄqۦ˝ői#ĵçtŮę4˙ť˝{a}ŰŮçtÖÇó›ę?żłĺŽ8óäóâÚuőu÷nş#ÎÍ­ 9 `€ i”ŁÍ‘Ż™ÓăÜ×wŚÚ}ňŰ1?Í›ł .»}mliĄům”Ŕ#ŤňtCÉĽš ŕŃâÜ^ŰI#”ç,Ž5ůiéű[ÓęÇWÜO~ߣ·wŔyi4ôě+×vLKë§SO 0!%ĺíčƸ-Ť ]¸˛pëć]ńüĘĄqÁütĺłă˛U»Ó§ˇîwę´\GÝÔ\ľüř:÷˝9îş(ÝBúô8sŃ˝±fKc¤pcąŇí×ÎOsŕČPLHŹň6+\/ŚeÍďŘ-Řră‚8qî·ă™ěqźxőqRźďž˛¸ă»‚‹)€ëönY·-ş0fźŻď1G”`BzŔߎ9} ŕÎB¶WĽ+î:˙”8é’Ő…émŔŁ÷öľôşt¬ ă®ě»Ë ^·¬ş"Njěű™Żź'žoa440ŔRRŽ6n}âwÄ–ôxÝʸíÉÍ1Ň,X›óĎ QŠ·±7F×=Wźszś8{Q¬čYĚN ~gWmŮyqŇËâ™ĆöF·lŚ-ŮϯƲ3N‰“Îż7žoĚŰ;ş9Ö¬{µľť Ŕ{ăĄ4Âůś{c$=Ţ’nc=/ν}căů֞ߦµńĚ–ü:Ŕ‘ z9Úůý¶óbÎůKcMł¸]·,Îś›ľ÷·1öé1˙’⥽}¶1űě8sQ~™r©„íX/ÓYÜukçÍq˙%ĆIÍĺf_·5G(ď]·]t^n^m˙7®o¬7~’-Ű‘śö-"""""""""""Ăś˛bwP `˛ŚĆK/‹ŹÍ®—´'Îľ<+»Ýs~Ú޸ç‚Ú˛óoŽ—łÂöôřÜĂoÄŽmŹĹçćÔ—©ŔµmĄUĽĽöóy±řĹÚĎc÷Ç'jŰ9ëGŁńĐŵmśűĂظíŤŘ¸ôSőĺ}Uś\›˙_Ü·?Ü,¤EDDDDDDDDDDdSVěJ,"C›żţzüéɧÄß=X/{?qçŢĆś”ÎR8+oçßNĺn~ÄîéqÖŹ¶ö.€[Űy"nźJçy­őęŁ}߇ľü©ř/­BúŞx"­&"""""""""""C›˛bwP `Şěyńéxú•4z÷ŤříŹ>›Ťľý»‡źŽ/Î>%Nľŕă·µé;¶íŤ˝ ŕWę·l>ké Ů6’=›·€îW˙ľľŤąWĹCŤýďŘą7bě÷ńŰőőÇőQÁçĹ Ż¤őDDDDDDDDDDDdXSVěJ,"C•ćw7ýé‚ńzmúĆë˙67=ą= ŕŘ[űůôܲ§Ä笎oŽŹĺÖ;ńĚĆËŤBą9íOĎ˝ż¶ć”»R‹ČPfĎÎúČÝÎěŤc~ ďÁ ,[ČžťŁ±§ńs3ĆިmŻń@DDDDDDDDDDD†:eĹî Ŕ""""""""""""""3(eĹî Ŕ""""""""""""""3(eĹî Ŕ"2ty˙ý÷3ď˝÷Ç ćë'""""""ĂťćçCf®#ť˛}R-""Ăś˛bwP `š¤7Ť©@ű)˙Ží¤×/˝Žéő,KżŘŚ÷;$"Rµ”»R‹Hĺ“ĘÁ·ß~;FFFŔ’^Ëôš¦×V,"""""Rͤ;>Ą˛'}öSţŰIŻ_zÓëYv'Ż^°ßifĽß!‘ŞĄ¬Ř”XD*p5)€EDDDDDŞĺ_u˘–ĂŤXD†-eĹî Ŕ"Rů(€«I,"""""Rý(˙ްnŔ"2l)+vĄ‘ĘG\M `‘ęGůWť(€«“±wÄM[~‘˝M·ľţ«ĆÜ#—ń~‡DDŞ–˛bwP `©|ŔŐ¤©~”ŐÉxĺťřŘÉ-Ż=‘˝g={s\üÂťń‘µ7dŹWîXßXâČdĽß!‘ŞĄ¬Ř”XD*p5)€EDDDDDŞĺ_u2^y§>vň—koĚĘß48%ýo*/\˙Łěń‘ŠXD†-eĹî Ŕ"Rů(€«I,"""""Rý(˙Şpu’^‡4ň7źôřHż>ăý‰T-eĹî Ŕ"Rů(€«I,"""""Rý(˙Ş“ńĘ;đ±‘4ÚwÝž­ńŇŰŰSęQ‹L}ĘŠÝA)€E¤ň™Šřç_:=fĎYßŰX6í±¸tNúąŰüĎ\X:}öśŻĹĎ÷wŻ7眯Žą}Đ›XDDDDD¤ú™ŽňoËË·Ć_®˝!çćXđâşŘŇř¨ąrĂâھő‡G%żÜŽëÖ¸}OcÂaäh=ź™_oŤď<›ű=xa°ďł۵>Vn}:ÖŤ5&ĽőpśU;Îł6˝Ţ0ŮĽßy¦öZ=ópĽÔ2“Ł™ú”»R‹Hĺ3đO?sJśxň'âż-›Ö.rO:9M;%Njő¦x®1íWWÔKŕ‹V4—9öÍš5+–.]Ú5=MKóŠÓĄ©~¦łnxďmŽo¬M…ë­qĎBa:¶9VnţiíqšvO\µůĄŘ™>’î[߬=ţĆËëăžTÚm¸?ľ·}wZ#ËÁ·ÖÇw6Ö×ůĆć§ëŰxyk׼«6­Ź-‡˛ÉéYďŰÚŘ_Í‹kbĂľĆôZvî\ßHÓkÇňť-OÇ=›îŹonŰÝů|v>ž­ű˝­Ícři<đVÉLAĆ+ďŽzŻYýuiJŻuţĐëâ˛ÖĽ†lúXµˇľť×~'ł×Ľ¶ŻŰ›·ŁžÂ(€ED¦?eĹî Ŕ"RůL]\f ŕą×Ĺ?gĄňSqŐ©=Ö?Ć5Kŕ3Î8#ţęŻţę°ËßD,"""""Rý̸8źfŃ·a]ëçÓ·ými4éΗý\/Ä=ĎŐ··Şö¨^:ŢW˝™ć5÷ŐyÚNţxšiîăÂ-{łÇ­ç1Ť¬ő23˘1˘ů™‡cKíQÇóiŔőckĎ7ŽŔ=‡Ó~ú•wG·Ţ·?Ű~]šŻç‡_xˇö O\{4Ţ- óż ý^łúërC,Řôt¬Űł7–~p»đͶ`M,¨ýśý¦ŚÜ“•ŔgmÚ^<…Q‹LĘŠÝA)€E¤ň™şřô¸ŕ†qďýu—źŃ]ÖNŞ.][ćÍüşŃ,§˘üMŔ""""""ŐĎŚ+€w= ZŁxrpë{_Ĺjö¸qkáŻ8VnůiÇ÷ËÖ·ý“XŮřX[v,)ůăi¦ľlłä­%·Ď-›n®˙üšXąůÎ8­öó‡ž[“}§qÇói¬ÓÜ_ŻýOEŇvű•wGµ~Ż1Âö™źĹ†}»cdßÓŤÇ©4?Ľ8˙şô{Í:^—,ÝđXmůTđ~¸ö;— ňmě«=*=WOqŔ""Óź˛bwP `©|¦®żěťT<ç’řVŁTţçßîČÍŻžŰoż=S6o˘Ŕ""""""ŐĎQ)€ß{)®Ęľ¸^̶‹ąćčÝĄqŐöí1˛ý§őbuĽ8ö6Ö«űđÚÄ7Fę#@ëŰnŹř­K÷ÜŢpí¸›÷‹Ţú“ěqiÚ~Ť}>{gÜÓ(Ŕ%ŮůÓřËÚ¶Óö;ĄďŢÝ<5půk6nĽ«Qö¦ÇÍË Ť}}řąźĹĘ­O·Q‹LĘŠÝA)€E¤ň™ńpî;€śXDDDDD¤ú™Îř´çî‰Ë6Ü ˛ŃžíQ–íbnwŁüA|g×öX÷ňťőŇpýÓq°oĽľ>štýšÉF—¨/SËΗë·>mĂŞXąőáX}?ěOâö"YęÇđ­8k}ý“Ű_ľż>ôŮźĆ=[×ÄUŮqßßLĺńžúńśöâKő}î?TßP- ŕî4oÓý‰Ťíő{ëÓí°ż—ooŢRű[Ůí™Wnľ?ÎJŻSłm”¸Ůhë‘×c¬ßď›˝_łţđKqUö»‘űxq}ěŚâň4ý©[ă›[šÇľ&~™űC©ŠXDdúSVěJ,"•ʏšŔ""""""ŐĎtŔmߊOlXëö×ç狹ć-x›ËýeVĘŐćő-€wÇíąŔu7Äĺ#i¤îëµy©hĚMßVśOý:]V[î—óÇ^;îćţÓŕěŘržúA|ŻxKkp–ú9ůAÜľŻ1!Ąqëîě5lŽľÍ¤[-×ţ·YŹ=6ç=ółx©ďďBď׬ܸEu^c˙éw˛sôň·jż[ő-LeŔ""Óź˛bwP `©|¦˘fćQ‹T?ÓQţőĎÎř^Çík9´·cďŘľ˝q°ńsYĆFęĄń‚—7Ç/ÓÍćwň¦[G7óNÜ;=“ĎîË}4~)űŕâŞm›cUÚç‹ő®­Rň(dĽňîhŔĺ˝±ł×k”Íë| ú¦ä5;¬4öźé=ŐąüĄűłó?¨ŻoţYcÍ©KÚnżß!‘ŞĄ¬Ř”XD*p5)€EDDDDDŞźŁ[ţíŽU/ÔGk~xĂúěvГɖ¬Ś]§­8îI·~áćúm€7făGŹHVeŁIżźŘn-˝&ľ“ÝÎxq\řňîĆÓźńĘ»_yĆŢ=ßٲ*.X_żmy/iäď=o<ť-?ŐIŰď÷;$"Rµ”»R‹H壮&°Hős´Ëż—6ý ÎÚ¸>vÎÇÎý/ĹwÖ/í¸uô'6¬‰ Gn°fÄžuqůł7´÷ůÔҸ0}gěQüř<^y§–ń2ŢďHŐRVěJ,"•ʏšŔ""""""ŐŹňŻ:QËáF,"Ă–˛bwP `©|ŔŐ¤©~”Ő‰X7 `¶”»R‹H壮&°HőŁü«NŔr¸Q‹Č°Ą¬Ř”XD*p5)€EDDDDDŞĺ_u˘–ĂŤXD†-eĹî Ŕ"Rů(€«I,"""""Rý(˙ްnŔ"2l)+vĄ‘Ę'•©0Üľ}{ü×s˙6~őëßt•‰[V˙ň×qîyźĚ^ÓôX,"""""Rݤ˛'}ö;˙··Ä3{¶6¦Ę±”§vż®ż5{ÓëY–^pŠßäwHD¤j)+vĄ‘Ę'ýEŕÁctt4\ńP|tţÇă÷żßś˝aäŘłqăK1÷ŁgĆĎV>ś˝¦éµőWź""""""ŐMúŁßÄŁŰźŹ3ÖýCĽ~ŕ­Ć9˛e˙hś¶niübű ŮëŘ돸űŔ~†;ţ‰T-eĹî Ŕ"Rů¤rđСC166۶mËŠĂOüÍ‚ěÂ{ţúüOĹĂŹü"{-Ókš^[°HuÓü\źnýúŘöâż­˙Qv+XŽ ź\[<±}cöúőű ߯ö;0Üý©ZĘŠÝA)€Ed(ŇüKŃÝ»wgĹáË/ż7nŚ^x!6lŘŔ1 ˝Vé5KŻ]z ÓkéŻ>EDDDDDŞźTö¤Ď~ďĽóNVĄ?N5wíÚĹ —^§ôzĄ×-˝~éuśLyçw`xMŐďȱ˛bwP `Ф7†éűARaŢ4¦[§ďŹá’^łôÚĄ×0˝–é5ő¦_DDDDD¤úi€iô_ú<ľ"(BĚléuJŻWzÝ·¸ó;0ś¦ňwHDäXKY±;(° MňŇ÷Ćú pěIŻYzíĽéľ¤Ď€ÍĎöé‚964?żOĹgxżĂi*‡DDŽĄ”»R‹ČĐ%˙acŹ7ü""""""’Ňü|ČĚu¤S¶OŞEDdSVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVěJ,"""""""""""""2RVě*+€ß|óÍxýő×cëÖ­±e˦IęiS_›zŰ))€÷ěŮŁŁŁ±sçN¦YękSo;%đţýűăí·ßŽ}űö0ÍR_›zŰ))€<]SRżóÎ;ŔŃĄ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ8–mş#ÎśszĚN­._¦§Őq٤×f"0Ŕڶ+ž_µ2î_ž¬Ť-Ĺů–ĆÜ“O‰“…+;çŤke,ôşSëć›o.ť>ž´ŢöíŰKçŔ0RĚhăÚůŤ’öäE±˘8ż"đżúW˙*ţčŹţhBeî™gž™­·qăĆŇů0ŚŔ3Ú8đ;»bdË«uŁ{ óĆ3s ŕ'ź|2+sO8á„Jŕfů›Ö+›ĂJ pŚnX÷߸8.^xiś9·ţ=»óĎż&®]ą9öć—y4®^¸¨¶\Í-ëkÓöĆ–'Ď_ŹĽł>n«­?wvł>;ÎěX¶lýü¶×ÇýK®‰sĎHűŻ­{Qm™+—ĹŠu»Ëô/€GÖŐŽcáÂźľ#řŚ…µuďŤgF:—ÉŚnڵý\pÎٵý\çÖŽĺ˛%÷Ćý«6ĆhqŮ>ŇHŢ˙ď˙ý¸%°ňzSLąü¨Ýn'-|´]Śćoá<Aś;§ą\í›+h‹š…mŻ[@oXóóËçĚ]ŇĽerŻxW<ľčě®őę΋k74—«ÉďżKa٤â·_ ¬ü€ţŔSns,;§>ęwöÜqAť{ţyqR«]wŤ6–íY ¦xu\VŰF{˝S⤴ÍdŃęîő[%ëüö:'ž<ŻľNĂüń ŕŐW´÷9çÂĆńç áąßŽg˛e·Ç˛3Ó’Ůí}Ôןxśô*•ż0>0Ŕ4ą˙˘fYš+F; ŕy17Ý&úöŐńĚHó6Íă|piühnäđ¸­ě¶Í™ňřńKć5Ö˝0®ßŇ^ţ‘ÖôłÇż>®žŰXÎ5±¦±ÜTČ—ŔéÖĐôG¤ü€(€Ž˝Ł›cÍĘ•q˙ň•±ěĘEqfł,íUw܆ąip~Úů÷öů޲xs\ßÚߥqŰ–Wc¤áń+ŰŁ€,OËvŢęú¤4ÚyŃҸmĺÚŘŇá|š%đ¬Ył”ż0 0Ŕ”Űw]tz«í6Ťpé6›Ę ŕţß_Ü´`e}Ď/9Żt~2gŃę>ĺó`R üáXů RL±Ń»¶‹ĐŮé;tDzĺ+ăË­ďË=Ö ŕüwűV.Ť‹Ď9;fĎî^¶>R. `€)–{A®]±°YŚáxäŽ8ł9mÎâ>ßÍ;ţ- ďďZgŁŻĆ#‹ÚĎî’ŤĺËG„`Šĺ ŕ3oŮžMŮËÎi«§Ç—źl,?ŔhÝű/j®wv,¸{}ŚlŮĎoÚUź_şţú¸şő}çĜ…ËbĹ“›ăĄ'ÍľŹř‘ ŤuK ŕwbÍ•íŰWźtţ˛Xł©ý=Ŕ#ëV×¶±6¶4–}ć–kâÚŰÓ÷?Z_®6ŮÂöwĎ]˛ąµ]ŕČSLµŐWÄIŤ´§ůKăů´ěpŮ÷ě¶FÖöXË-v­ÓÔ•[^wlłT{$r{Ts™ü­˘€é r»â‘EíQ°uóbîů—Ćü9ŤÇ(€ß] šë—íą~:†óJ‹čq ŕšŃU×ÄÜ’ďôMĎcöÜĹńxcąGÍ+Y¦föyqŮĘúčg`ú(€Ž”ŃíŤ['oŹŃÖô˝1š¦Ť4oĂ<¸Ń‘Ćm'˛îŢ]íŰ7Î>“Ń˝ĄË${GsËMb?ŔÔPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„ "Ŕˇ¨0@E(€*B P `€ŠPT„`VýóCă±ŐkJ§TŐăżüMét€Şň~6e×űŞH p<Ě@e×ó†`ŇÇdöďßźyűí·€¤yí®y-O! 0Ŕ€Ň›Äô¦qßľ}166{öě‰Ý»wgŇ?†ŔŃ׼f—®ßĄëxéz^ş®§†…`éÍaúËÁô†1ýĂ·cÇŽŘľ}{ŚŚŚd¶mŰĚÍkvéú]şŽ—®çĄëzéúž `€q4Gţ¦7‰ŁŁŁń‹ßŤĹe?7>~ĎűŔ –®ă=öbýş^şľg$00 ŔăHß’n“ţÁűĺKcqŃOß‹G6˝ŰvŠ7Ç€™čő݇˛ëx˙í÷ă×›ę_ă–®óĄë}eתB 0Žô†0ýu`ş]Ě~7~˝őÝŇ7”ŔĚóřËďĆW=”]ßK×ůŔ@Ő)€Ć‘n łgĎžě;CŇmcĘŢD3׹÷˝ź]ßK×ůŇőľ˛ë€UˇčŁůýż»w‘0Ňu˝t}/]çó=Ŕ@Ő)€úHoß~űm0ĂňpşŢ§ŞL ĐGłN˙Řm۶­´~yôP,ţĺ»ń×÷˝źÍçýě\¤s’ÎMń|ŔtK׬Ňő˝tťO Tť ŹA ŕ%ż|·Łü¤íú_˝Űuľ`şĄkU ``X(€ú¤ţo”—źĽźť›âů€é–®U)€aˇčc8_xŇ­xľ`şĄëT ``X(€úPľâů€é–®S)€aˇčC|řŠç ¦[şNĄ†… đá+ž/né:• `€>Ŕ‡Żxľ`şĄëT ``X(€úPľâů€é–®S)€aˇčC|řŠç ¦[şNĄ†… đá+žŻA­ąöĽ8ńäEqwÉĽéńb\}ę)µc8/®^W6ż·»?ťÖkšřú“vď˘éÝpD4Ż-üí˝ĺó»¬űnśŇş1ő× űm.węwcMŮüi®S)€aˇčcFŔ?}?~¶óý¨˙Ó]Ď;Oüľ>Cíç}EoľżÚW2˝1ŻkG@ń| ćˇřŰÚ‡‚S®}±dŢáË>DŤűŁ~ ‡óˇ©^bOW!Ű(¬?ýPÉ<`ć¨_sčw˝aÂpSŁhť¶¸iĽýNş˙\ *]§RĂ"Ą¬Ř”¨´™T˙`äýěí8t(6żq06&;ŢŤ×^IóĹËŮĚ÷ăŕ÷boÓȡxb¬ţóÁCٵő›óŢéÚÇ‘P<_ÉF˛ąŃżŔ‡oZ ŕě”Ńż0ăÉ’v¦Ŕ“5…ŰMשŔŔ°H)+vĄ*m&ŔŢÍÚŰXyďhśvkÎíi~ŁŢ·?ďő8µéÖ·ăŚ[ë?/~9Ű@lţm{^Ů~¦Zń| "+hKF˛6˙úµĄ¸L®­—ŻťËu­ß”+;ÖËô(Uł’:ż\wa=^\ÜWׇ™®}Śł­Łx%ŤR˛ýy=M ~‡®tWłüçţú]Κ_7UÔüĽßľYçôśľűnĎ/+Lű^‡ŕ:G_=ö[Üg×µśžűď\M\şNĄ†EJY±;(0Pi3©®Ľăú’y­řŕ»qçę÷ăÉcďÇEąen|ő˝´DĽü»üzG^ń|ŤŻÇ­}Ň‚ü‡„Ć„ŽŰDç>őľ}tăÄeiýCJ÷‹ć‡—ü1Ţ];ž»K?ä”0éš—=źÜăĆséxĹsĐŇţpŮ=:é3xwáŰţĽŢ..{~NďSҶŻ´¦unwMm[×#ú±ąăΖknż~-¦x bB×Ć}NĹó” °ßAÎŐ€Ňu*00,RĘŠÝA)€J›1đšwcWúűíwăĆĆ´ćwţľą5=nŢ:—ýď·–MŽ•¸ëIOŤżŠÍph|(č˙ĄńcŇpÉ~{č]—mŁđˇ§ń\:e €#¦ë.c­ë eEgÁ ĄfÉgýľŇŞtŰíRş¨ą\ýFç´ ÷9•ź—q÷;ČąPşNĄ†EJY±;(0Pi3gpŁŕmŔďÄúCőďŢőjnţˇwbő†˝±2ůíÁřbnÇF\˙0ĐłŔm•˘9Ó]´ŹşžpŮóhęř Tü€V^÷şe60ŐşŻ+tłĺEg‡AJÍ#Qp-¤őGë5\űh÷9Ťw^zěws5 tťJ ‹”˛bwP ` ŇfNüNl’µůˇí7ü%Łh Žh\:z·\ĎxŰhk¬ÓuÜőéSńAOńsxńóúpcťľ×/Ęîö•Më\oÍ˝u^'čQv_W©M[×ÜNí?ťżŢ0‘¸aRđ űŕ\ (]§RĂ"Ą¬Ř”¨´™Sż?~Ł>â÷ŕž÷ă±ßżŹl}/ÖwŔᆵď|?^jzĄ˝ţ±P÷űKÖl^~lăCĎÄ ŕ’mőĐ«Ŕ-űĐt÷§K¶×8Ʋ?eŰxłöÁ«őÜÓsé8ŤA…ă®ogüçLŤćgúşEquz<ˇ¸¦y]َëZFYÜšŢ^/)^wč8ľÜµ…ÎăNŰż7]ČOO&~­ˇ×~ëJÎË űď\ (]§RĂ"Ą¬Ř”¨´™TüÁ·bížz śOG\Ěh{ý™_Ź7’µńµMµ Y‘;‰¸]¦6•ŤŇm~pé7/żŤňýÖËć†Â‡ź˛m4ź˙Ý×.Šż÷CPýyLöŔ°HשŔŔ°H)+vĄ*mFŔ5§ÝúzśúŹoĆ•?ŰWţÓqę÷^ŹÓ˛[=ż§Ő~NŹ;Üúv{ýŰGsËOźâůę)űkN#Y'$+ĽË j€ĂWü#ú¶ŢÄ?3ĄëT ``X(€úiđ±¨xľĘ5F÷Žw{$rŔşn©@QşNĄ†… đá+ž/né:• `€>Ŕ‡Żxľ`şĄëT ``X(€úPľâů€é–®S)€aˇčC|řŠç ¦[şNĄ†… đá+ž/né:• `€>Ŕ‡Żxľ`şĄëT ``X(€ú¤^üËw; OÚ–ÔÎMń|ŔtKתŔŔ°Pô1HĽyg˝ţëűĘKĐa”ÎE:'/Źvž+8Ň5+00,Ŕ}4 ŕÝ»wÇČČHöF±ě $0sĄëzéú^şÎ§ŞN ĐGz#¸˙~0ĂňpşŢ§ŞL 0Žô†pĎž=±}űv0Ňu˝t}/]çK×űĘ®T…`±±±Ř±cG\˛ňÝřŐ–wKßD3Ď/_y7.{čÝěú^şÎ—®÷•]¨ 0Ŕ8ŇÂ}űöe˙ŕ=ú»˝ń©ß‹¶+`¦[˙Ć»ńÉŢĎ®ëĄë{é:ź¨:0Ŕ8šßśţ:ptt4~±q,ľđówłŰĆ3×~7VżTż®—®ďůţ_`(€ŢľýöŰŮ›Äô_ş]LúΑ‘‘̶mŰ€ yÍ.]żK×ńŇőĽt]/]ßSţĂ@ 0 ćHŕt›ô†qĎž=±{÷îLúÇ8úš×ěŇő»t/]Ď3ň& `€ HoÓw„$éMc’ţr9š×îš×ň”żŔ0Q†ôĆyĘ®ç 0@E(€*B P `€ŠPT„ŕ0»ľ—®óĄë}eתB 0Žô†0ýu`ş]Ě…ż˝5~±ăwĄo(€™çˇ7źŹż[˙ăěú^şÎ§ŞN 0Žt[={ödß’nSö&ąţËSßĘ®ďĄë|éz_Ůu@€ŞPôŃüţßÝ»wÇČČŽAŮu˝‘‘ě:źďŞN ĐGz#řöŰo+€ŕ–/€Óő>0Pe `€>špúÇn۶mĄđ‹c#ńĄŤ÷Ĺ_<}}6źĹŮąHç$ť›âů€é–®YĄë{é:ź¨:0@Ŕ—oĽŻŁü¤íď_\Ţuľ`şĄkU ``X(€ú¤>uíMĄ'méÜĎL·t­J 0@Ŕů“nĹóÓ-]§RĂB ЇřđĎL·tťJ 0@ ŕĂW<_0ÝŇu*00,Ŕ}(€_ń|ŔtKשŔŔ°Pôˇ>|ĹóÓ-]§RĂB ЇřđĎL·tťJ 0@ ŕĂW<_0ÝŇu*00,Ŕ}(€_ń|ŔtKשŔŔ°Pôq4 ŕ«vCröĆK;WĹ‚ĆüÓ^|:6Ľs(ű‡<ĺ࡝ńË-?i¬˙“řήť1ö^cfŞÍ?OnYë:¶Ů6˛ó§­}OĄâůÔ‹ĎŤOţBÜU2oz<WžzJíÎŤ+[6ż·»>ťÖkšřú“v˙¦w@ËăÂěşŔ®müö†ř‹Öő„SâÂűK–aŇŇu*00,RĘŠÝA)€J;Şđޱěé±··Ćú]oĆÎwł‡±s×OăCë×ÄKŤrwl¬6÷®8=Ú«^\§m{˝ţřÝ]ńâ®´~ÍŘX<łíWńĚ;űc¬¦ľ|ÄÁw돷˝9“ ŕú‡¤żXülÉĽĂ—´§ŢO”Ěkk~P›ü®z‰=]…lٰţôň’yŔ”Ęţ»_ą;‰¸©QKś]?÷:ÍáKשŔŔ°H)+vĄ*m&Ŕ/n˝*ţäŃšŐż‰WŇ„/Ĺ7GŢČćÜą">šćŐ\řę®lZ*[ënn¬Ű´úšř“_Ž?®ąkwZb,{¦ţřOV—Çá*žŻŚű!ęđ Vľi-€ł‡F˙Ŕt8˘w.˛xş®Ó¤ëT ``X¤”»R•6# ŕךÓ~/¦ 7Ć˝­r8·Î ż‹ťiâާăÂm;˛ůńŢŢxi×ÓńŤ ?h/×pw¶‰±X˝©súT+žŻAdoüKF˛vŢZąd™\ Z˙ Öą\×úMąëez”ŞYIť_®űCßxpq_]ěşö1ζ¦áĂTBávËťźëëwŮJw&ËvĎîTÖµ^Có3yńł|ŮgőľűnĎ/+€ű^KŕZE?Ĺë&í;łŐG3§}ĺ—iď»}µLÇsn~ĹV[k˝®ămČ]ď÷ÚɤëT ``X¤”»R•6 ŕW޸'.ŰxO\µýŤúm›Ç~÷íÍfĺĘášMëpmţ‡V˙ nŰ9ÖşÍsĘÁý/Ä7ži/?s ŕö‡ŠŽééCAľđm|Hč¸MtîTďŰG7>x P–Ö?dt—®ÍůcĽ«vűŘU1»6Ży‹çťoŢßZţ´ć÷ďz¸c;Jßűű»#míŕžÇ[Ógf\sßłŔm•˘9Ó]´ŹşžpŮóhęřpYü°SţÁ2ű 4@! $Ý×:KČĆü™Xp=Łő‡ç5\ż(ß_ŢřpŻu»®Ť”ü{ßx ç;tťJ ‹”˛bwP ` ŇfBüâÖkböę$7ĂúŘ–Í=/í\Ľą9FŢKŹ÷ÇŻW›˙ňúŘ0¶9VmŻÍŰľ>žV›÷č5ëĎ~´6Eý–ŇůéS­xľz«X(+Kóó[ořk$˛R“(€»?X”x¨Čč7/żŤňýv|,|č+ŰFóůßµř qá¸ÜęĎcüç 0ÜŇu*00,Ŕ}Ő¸"Šç«§ěŻ_Ťdť¬đžü_ľĂ dtoCď?ÄŻžtťJ 0@ ŕĂW<_ĺŁ{ÇąµyŤoe·’ CşNĄ†… đá+ž/né:• `€>Ŕ‡Żxľ`şĄëT ``X(€úPľâů€é–®S)€aˇčC|řŠç ¦[şNĄ†… đá+ž/né:• `€>Ŕ‡Żxľ`şĄëT ``X(€ú¤ţŇĆű: OÚ.Żť›âů€é–®U)€aˇčŁYďŢ˝;FFF˛7ŠĹ7ŹǶe%đ_<}}Gů9ĚŇąHçäű‘®óÓ-]łJ×÷Ňu>0Pu `€>ŇÁýű÷÷-€€™-_§ë} ` ĘŔăHo÷ěŮŰ·oWŔ1(]×K×÷Ňuľt˝Żě: @U(€ĆqŕŔ‹;vÄyĎý ÝńBé›H`ćůů›ĎÇ_?÷ěú^şÎ—®÷•]¨ 0Ŕ8ŇÂ}űöe˙ŕýôŐ§ă´g–Ćłom-}3 ĚkßÚóźůN<¸umv}/]çSU§Gó{€Ó_ŽŽŽĆĘWź‰óźűavŰ`ćşŕą[âá­Ďe×őŇő=ß˙ 0Ŕқ·ß~;{“ţáK·‹Iß222’ٶm04ŻŮĄëwé:^şž—®ëĄë{Ę_`(€Ô śn“Ţ0îŮł'vďŢťI˙G_óš]ş~—®ăĄëyFţĂD 0éMbúŽ$˝iLŇ_3GóÚ]óZžň& `€ĂŢ83OŮő<€a ¨0@E(€*B P `€ŠP†3PŮő<€a €ôĆńŔ™ýű÷gŢ~űm`i^»k^ËSĂD 0 ô&1˝iÜ·o_ŚŤŤĹž={b÷îÝ™ôŹ!pô5ŻŮĄëwé:^şž—®ë)aˇ@zsţr0˝aL˙đíر#¶oß###™m۶3@óš]ş~—®ăĄëyéş^şľ§†`Í‘żéMâččhüâwcqŮĎߍŹßó>0ĄëxŹ˝Xż®—®ď 0Ŕ8Ňw„¤ŰĤđ~ůŇX\ôÓ÷â‘˙{˙ú$ŰYßßůňňyţ€çU*Îýć©rWbWp‚ěŰQ@plÉ,c*ŚśÄ@‚- ?Ä8ĆńmĹ渲HI N’‘耎hFű0bf´gĎě™=×Ó×:tŻĂµV÷ĚěÝ»§×§«>Ĺî^§k]­Öď÷íŐýř…°˛ľNm‹čąőݬŹ÷·î‡Ż?ž˙Ś[ěóĹ~_ް,ŔSÄ ÂřéŔřu1żű…˝đőgö’”Ŕâůę“{áżŢą›ő÷bźO ,;0Ŕńka666˛ß ‰_“ş×ë?˝źő÷bź/öűR}@€e!čQţţďúúzX]]Ŕ1űz±żű|~Xv`€ńBpkkK ÇX5Žý>0°ĚŔ=Ę8ţ±[YYIŔO®í†îŮ żúéýl9űŮ\Ä9‰sÓś/·ŘłŠý˝ŘçË.>âß»ŁKk–řý÷ěŐÂO&>đµ˝Ö|ŔĽĹ^• 0@ŹYŕ߸5~˛źÍMsľ`ŢbŻJ … Ç,p5đ¤­9_0o±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎĚ[ěS €ˇô]sľ`ŢbźJ … ‡řčšóóűT``(Ŕ=ŔGל/·Ř§C!č!>şć|ŔĽĹ>• 0@đŃ5ç ć-ö©ŔŔP€z,Tü™ýpŰ™ý˙éÎçĎ~/xôďłM§öĂ×Î&^/–µŽq 4çkV÷]˙†đ’—^N$–ÍÇŁá˝W^1ĂÂ{H-ďvâÚ¸]éŕŰÚM×ÍçxŮq®×Ü”Xv]ţ˙ŕyŕCáŠŘ7¸ňCáľÔň„ZżáŰ-’ËYëÇ>•Šř¨†ą‡!–Ö"ŔµşźýŃ»»á‰çwÂ#Ńé˝đ٧âňÝđd¶p?ěl_/–VwĂ˝›ůżwvłFŰ—ËηŽq)4çk6w„kFĹĚ×?šXvtYÁ4µPĘÇp” 3/jćőµw´—]ě`x.đĄýo.ťĽFď­i—fëk\lyť~Ô^€`>âŁć†XZ‹?Ľ—Ą·áö›ÖÂU7V|4./ŕłç ń\¸˛tăVxŐŤůżox2ŰAxâÁɲÔq.¶ć|Í$ /]10ŻBi®pV8vë8Ŕ—řż¸táíYX €އř¨†ą‡!–Ö"ŔyŔ»>X6€wöÂÇďŢݵŢXYçĎ^k„'PÝîŇkÎ×,˛B&q'közütl©ąN%Í Šúz­íK•˘©¶]¦/T­®×.^¦ŔÍcµŠ¨Ö1¦ě«Yüµ¶ďŘOc˝v1W~v±üÚ|ýęz­yKĚi}żĹ>; Ö®˙`š=„Z;ţĐňäŰĂĘľ@W‰[őó ýŹfś-OÖÓŐń4ש×ö©ý¦µ·ËUz ĺÝĚ…äx‹eyOˇŇCiö.Ę1ű¬ď«8żCö bźJ E|TĂÜĂKkaŕűö ń/öÖ^ř`ńZů›ż§ž‰ĎËŻ€®<ÎíŹ×ŤŽOÜń•B± ¨^ŕB­¨ÝELđX•eíĐ5hžŤçDcĚ]Ű'—eçÓ.žjçŃś±üśşÎąoĺ<ŽĎ%1Żyˇ6)ÎĘÂmĽMku>Ë÷a<ÖÄśë´ŢçLÇ0ŁÚ¸UŹ·jřz­\—׵ݽ‰¨¨•ku~¶V÷űh8qýµF:n3[ŻŘިď÷˝WvŤ?ˇ«Žoő/ęăH÷ĘçŁukçQß¶5ćlŢ0ć†Ř§CŐ0÷0ŔŔŇZś;€‹€wźíćż üÂł•ĺ»çĂÝżnŹÜ ż[ŮÇq €ŰI—Ľ(¨J­˘#%FvH§‰ăvč^Sű¨9ău–ąh˘ ÝăHÍEăµÔś…nw@›ŘocŚŮ:ŢŮ˙€Kd\—OŚëŕ)ux«ĆO*jçD_cÚ˘“pQ«·Ś×+zµ× cl©žĂd|íţG»ć/ćˇ[mýę<&ćë€bźJ E|TĂÜĂKkqŕóá‘ÝŃ_ě˝ á–ĎÄç[áŞ;Ďew×ŕřŃÝ ŻĘT·?.p~1ßY %ŠŻTˇ4S5C±“ Ng:F.ą}”:ŹR­iAéP´ú‰Ţ”Îq$ ±¨öiÜTŘ› €+…d©6ÇŐB­ZŔU÷1Yo–ů€K˘Y÷6ĂĎ€§mĺ}‚X»ŕĂ×cKő&}…vß!_ż&ŠmZăÎ_ď+đşÇ‘š‹Ćk©9m•ĹóÉ:é9ÎÇ1*ňú ĺ‹PĐŔQdőkĄ¦ÍëŮfÜW»¶Ě¶Ô:Ĺkµ`öŽÖON%ŕdßŕŃp_9ĆŃk˝fm?Uľ˙VĎĄŐ7¨ŻWűyóyłPě«>'Ĺţ®¬ż'‡űT``(âŁć†XZ‹żöł?ßŮČCŕęŁ7k“íŹCś.`*ËŞPQ¨ÔŠ‚TX™ĐÚW‡®ŕ´UřŤś¸6±żžb*µŹSŚ łńżGçŇ(ÚÚE`ąź)çŇWÔ5—Ď[aîřĺóÉ6­y* ¶®b4ę(‚űţ€ů¨ÔŻ#W\˙ˇěy˝vžňáĺ˛6.µęŕT\y˝şm_}=2©÷ëŻg˛ýŹöyíęă™Ö?i)z­í{ϵ~>׌ćňŠJ#ďŃFçůŢřĽ1'eĺŔăm}*00ńQ sC ,­… €G®şńąpĺ'O…wßv&ĽűďžWţĹsáŞě«ž·ÂUŁÇç57nM¶˙čZeýůiÎW·ĽHI†”•ĺă˘`T dEBµ(1nS颭l¶–U÷‘>nł©l©}”çâúëÂ5Í‚Żôćç1KÔü>اC!č±hđqÔśŻNYyô‹ůAÉď)ź8^0˝E›˙`ţ K|°{ţň‹őîß(ö©ŔŔP€z€Ź®9_iŦŤŻřˇOq×íBcłę+Úü7”*ß6v‘z±O%†B ĐC|tÍůbŠpWŔ \&±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎĚ[ěS €ˇô]sľ`ŢbźJ … ‡řčšóóűT``(Ŕ=ŔGל/·Ř§C!č1K|Ă={µŔ“‰÷Źć¦9_0o±W%†B ĐŁ €×××ĂęęjvˇŘĽx|âL˙ę§Ó!čĹąsňäZ}®ŕr=«Řß‹}>0°ěŔ=â…ŕąsçz``±UŕŘďËL 0EĽ ÜŘŘ'OžŔ1űz±żű|±ß—ę, 0ŔŰŰŰass3ś>}:Ľíö˝đµ§ý®-÷<µŢqÇ^Öß‹}ľŘďKő–…`ŠxAxöěŮěŢť?x1ĽůłÂ÷O `Ń=ôü^řÍ[÷łľ^ěďĹ>źXv`€)Ęߎź\[[ _~d3Ľóó{Ů×Ć‹ëť_Ř w?–÷őbĎď˙C AĽ(ÜÚÚĘ.ăľřu1ń7CVWW3+++Ŕ({v±űx±źűz±ż'ü†@ 0ŁňNŕř51ń‚qcc#¬ŻŻgR€ů+{v±űx±źçÎ_`HŔ/ăo„Dń˘1ŠźGŮ»+{yÂ_`HŔG/€Ĺ“ęç `I€–„`I€–„`I€–„ŕvvv€”ęç ŕâ…ăöövćÜąs™­­-`”˝»˛—'†D 0Łx‘/Ďž=677ĂĆĆFX__Ϥţ8óWöěb˙.öńb?/öő„ŔŔP€f/ă'ăcüĂwúôépňäɰşşšYYY@Ůł‹ý»ŘÇ‹ýĽŘ׋ý=!00`€)Ę;ăEâÚÚZřň6Ă;>ż^ű©}`Ĺ>Ţ]Źć}˝Řßs'00`€)âo„ÄŻ‰‰đîyl3Ľń3ÂżVÖwĂ©M`=·ľ›őń~ăÖýđőÇóźq‹}ľŘďKő–…`ŠxA?ż.ćwż°ľţĚ^ň‚X<_}r/ü×;włţ^ěó €e'"~-ĚĆĆFö›!ńkcR‘Ŕâzý§÷łţ^ěóĹ~_ް,Ŕ=Ęß˙]__«««`8†b_/ö÷bźĎďËN Đ#^nmmőŔO®í†îŮ żúéýl9űŮ\Ä9‰sÓś/·Řł*ŕŘďËL ĐŁ €ă»•••ěB±yńřţ{öjá'řšßKŕň‹˝ŞŘß‹}>0°ěŔ=f €ăÖtřÉ~67Íů€y‹˝*00`€łŔŐŔ“¶ć|ŔĽĹ>• 0@đŃ5ç ć-ö©ŔŔP€z€Ź®9_0o±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎĚ[ěS €ˇô]sľ`ŢbźJ … ‡řčšóóűT``(Ŕ=ŔGל/·Ř§C!č±PđgöĂmgöCţ§;ś?żžúaľüáŃżĎ6ťÚ_;›x˝XÖ:Ć%ĐśŻYÝwýÂK^z]8‘X6ʆ÷^yĹh oď} µĽŰ‰kăvĄoh7]×}Ľ>®(Çtĺ‡Â}Íĺťî׌Ďĺ ŰLuŢ®ą)˝N]>¶+®4± ŽŻ˛Fž­>©ÖýŮî9jŻ(ö©ŔŔPÄG5Ě= 0°´)ţ«ŐýěŹvŘÝ O<ż‰Nď…=—ď†'ł…űagűBx±´şîÝĚ˙˝ł›­0Úľ\vľuŚKˇ9_łą´Á^VDM 2'Áça‹¦Ľ0™W\Ö×Ţ‘XVśsDzŮűż„pi¶÷g>$‡‘÷úú €KE,n‹}*00ńQ sC ,­E €ŢËŇŰpűMkáŞ+>—đŮsᆿx.\Yşq+ĽęĆüß7<™í <ńŕdYę8[sľf’ÝÉzé‚˝YĆŁškśxÝÇ:Np6oSŹ“ŹÇÝż;—2¤wŠ}*00ńQ sC ,­E €ó€w'| ±lďě…Źß˝ţ0şk?Ľ±˛Îź˝×Oţ şÝĄ×śŻYt…•ĺ§_ÇšëTBĐĽ(¨Ż×ÚľT kŰe:BŐ,¤®®×.@¦ŔÍcµŠłÖ1¦ě«'4í €Űçś*¦şŕöy¦ďFNĎÇĽuŚulJŕ —L˛¦kŰÉ–«ővţć˘^®m•őmăgRuoď±'ËSpłţŻ­3CźŁK¶ßŘ/¨Ž­§×Ň{ÜFߡÚK¸ćÚŁÝ0űT``(âŁć†XZ ß·^±·ö‹×Ęßü=őL|^~tĺqnĽnt|யAŠA5, „Ú •BŁűÎĐî ł)/PÚĹVY¸TÇxb4žŤ1wmź\–ťOĺyq.µóhÎÁؤ¸l/ËuŔĹÝóÖ>ĎŽâ·rľYŃÖqĚé˙ 4ć ć,#+Ć5n»néikµ~_-=–Üw1¦ęx ĺzy-^mVÝuüôă&×Éć®Ý;™Ţ/čűT``(âŁć†XZ‹źŹěŽţbď]·|&>ß WÝy.»+¸ÇŻţčVxU¦şýq €ó‹ţÎ`oŠ6‹‚úňKĎtŚ\rű(uĄZŘ,‚ŇENVv–eAÚ_ĽEU)97ÝóÖ>ĎbÝĘňq”ăź!Ŕ-éÔyeË_đŔáµëăz0Ű®‰[’!mĂĄ€§m›™ôfýŕőÔ¸ó¸Í·:w`€ŁŹj{``i-NĽţöůüŽßťŤýp×÷ĂźąvFĎkđŢ~xîĚ~x¬ôÔdűcgEJ"0É/ň«L»-śť˝čI¸‰ăvHoÍľŹ‰b›Ö¸ó×űŢŠĎRN·Öíž·öy¦ŽWŚżÔ3˙Ůţz–÷Ţpi5ëđf˝>K žo3ýŃŤžBńaéęv÷ÝtG˝~î—Ű}•Ńk”űŤůÚjŢÝHÉ÷ťf{ŹŰě5ző“·źTěS €ˇŹj{``i-RüÚĎţ8|g#«ŹZÜ|¬M¶?pß'Y[ů©;Dg €g/ÚÁfőőzńrâÚÄţŠ16‹®(µŹSŁh|îń\jsQ_Ťq÷YUŮ9§ŠĎ8ĆÚëÍÂu˘sŢçYž[użqŰY?9Ü9֍ـy×˝™ëÂ{ăóŔ#e_ŁĐŞ™łĺ‰•7¶‹š5rm|•úľ>î¨Ř˙M±Q}=šŢk(MëMtw´,ď5Fc}o­'PöBr×\{łŹ«)ö©ŔŔPÄG5Ě= 0°´*ąęĆ畟<Ţ}Ű™đîż{>\ůĎ…«˛ŻzŢ WŤţź×ܸ5ŮţŁk•őç§9_Ýšź m*‚ÉҨh…3ŔÍ"YPŤäJ߲ę>ŇÇm2ŐP5µŹňüO\]¸fjń•źÇ,Áj:TmŹS;ĆH"üÍŐßÉqëó_oŻńţUÖť¬“ËćĄc }ËşÄ>• 0@ŹE €ŹŁć|uĘ>ÁzřOqRx§ę¦tşć|ŔĽĹ>• 0@đŃ5ç ć-ö©ŔŔP€z€Ź®9_0o±O%†B ĐC|tÍů€y‹}*00`€łŔ7ÜłW <™x˙hnšóó{U``(Ŕ=Ęx}}=¬®®fŠÍ‹Ç'Îä!đŻ~:‚Qś‹8'O®Őç .‡ŘłŠý˝ŘçËN Đ#^ž;w®7[5Žý>0°ĚŔSÄ ÂŤŤŤpňäI0C±Żű{±Ďű}©> Ŕ˛L±˝˝677ĂéÓ§ĂŰnß _{ÚďÚŔqqĎS{áwěeý˝Řç‹ýľT`Y€¦„gĎžÍţŕÝůĂ›?{!|˙¤ÝCĎď…߼u?ëëĹţ^ěó €e'˘üŕřéŔµµµđĺG6Ă;?ż—}m °¸Ţů…˝p÷cy_/ö÷üţ/0`€ċ­­­ě"1ţá‹_3duu5ł˛˛,€˛gűw±Źűy±Żű{Â_`Ŕ3*ďŽ_/766Âúúz&őÇż˛gűw±Źűyîü†D pń"1ţFH/ŁřÉA`q”˝»˛—'ü†D pńÂX<©~Ŕ€–„`I€–„`I€–„`I€Ž`ggX@©~Ŕ€ ^8noogÎť;—ŮÚÚHŮ»+{ya`HŔ3Љń˘ńěŮłass3lll„őőőLęŹ#0eĎ.öďb/öób_O …`ńâ0~r0^0Ć?|§Oź'Ož «««™••`”=»Řż‹}ĽŘĎ‹}˝ŘßC ˘Ľó7^$®­­…Ť‡>Îßô‡˝żúż€vţ¦_ ßű»¬Żű{î†@ 0EüŤř51ńŢĆ÷?v?ňłaďᏅݵ'ĂîúsŔ"Z{"ëăí}ägÂú#_Čú{±Ďű}©> Ŕ˛L/ă§ă×Ĺśżůʰ÷ĂŰŇ”Ŕâyäćpţ–Wgý˝ŘçËN 0EüZŤŤŤě7Câ×Ć$/"€…µ÷á˙oÖß‹}ľŘďKő–… GůűżëëëauuU ÇPěëĹţ^ěóů``Ů €zÄ Á­­­ţřÔĂa÷óżönüÉl9#Łąs’ÍMsľ`ÎbĎŞ €cżO ,30@Ź2ŽěVVV˛ ĹÖäŢT?Űýâo·ç ć,öŞb/öůŔŔ˛ô%ŢűČĎÔBO*FsÓś/·Ř«C!č1S\ şć|ŔĽĹ>• 0@đŃ5ç ć-ö©ŔŔP€z€Ź®9_0o±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎ׬ľţuá%/}[¸-±l>î tĺŁ1Ľ.üŃý©ĺÝnű­¸]éŕŰÚ§ŢÖ}Ľű˙8üR9¦+˙8<Ü\ŢéDxóř\şíÁTçíÍźJŻS—Źí—®ż/± .§˛ž>@oŁZ»Ď\/šĹ­ŐcźJ … ÇâŔ˙;ěďlÔm~#\řâ?-{k¸°_=Ż_yíďżQßněGᗫǸ4šó5›K[,dAăÔ s|¶ŕĘCěyŔE`ý['ËŠsîX6›b˙—0.Íöţ,‡¬ěCŘ}5é!ŕR%Îęű9ôbźJ … ÇâŔ»ń/öî©pţąűĂÎúzö<ě}?\¸ů­a÷l|ňp8?^żňÚý÷… Űë#Űń…Ńc;ěgĎź »‹O-˘ŽfÖ€ń¨ćgĹa÷±ŽS<[á—ŹÇÝż\—ôCÉ €çŐ§‰}*00ńQ sC ,­… €_üBŘř“N˙É? /<“ş{?%ţĐ?Ďľ˙Ťüu؉/˝řůp&{ţŹĂ‹µc\ÍůšEWX™˝ž}z¶Đ\§‚ć…X}˝ÖöĄJ‘QŰ.ÓŞf!uu˝vŃ7-n«UصŽ1e_=ĹR_Ü>çTŰ·Ď3}7rzţ;ć­c¬cSočU„¬éútňˇăjÍś…š­í e˝Ü¬ĺSµzď±'ËSpł†Ż­3CŻ")Ű®Zc×CÜĽ§đÇy­_ě»đVĎçĘ·…7×>°]ôĘĺ#ă1·Ć[¨ôzĎ÷€bźJ E|TĂÜĂKkáŕł_Íó…žĘţď~wJ<~­˝ŹyhÎ×ty‘‘ C«ˇ`Q$tµ×kşĚ¦v°Y}˝>ĆŰFăą­1ć®í“ËšĹVq.µóhÎÁؤ0m/ËuŔĹ…Zq.3ÍE«PkĘĎ99/Eá9}>şç­}ž…sĺ|»Š»húŤą€CČÍŠqťÚ®c›fé_¤jßľzx¬č ÔŕbLŐńĘőň1Ő_›É,puĚ•ţK»'¨ŮËŢĂX˝‡‘ž“éç{P±O%†">Şaîa€Ąµppă±ňĂa+ö×8ż¸ď öơhEµ›G<Ó1rÉíŁÔy”jĹełŘI–YˇÔQ”fËFŰöGE ]JÎM÷ĽµĎłX·řŽÇ?C€[‡©óĘ–ÍŚ@R»Ć­‡íş¶)Ż…/CÎţýG‹#?ľýĂsňŁeż>G\řĂpţćrý˙ö⻄ťć>9Î zPĘ †jńS3Őbl¦pvö˘]ÄD‰ăvHoÍľŹ‰b›Ö¸ó×űŢé…ëXN·Öíž·öy¦ŽWŚżÔ3˙Ůţz–g…á檚µtłćžˇŽN™MÉ`łřŔsµwńđ§NÔ×IŔeý]ýáűËýŚĆü[Őcu×ń-Ťă•Ç©Ŕ•sÍźáwłÓxެá›űŠňăµĂôţó=¸Ř§CŐ0÷0ŔŔŇZ¸řĹ/„sú‰đâHuůöSYö7ż.|˙cᙍěy8óŃĘz‹' Łę˛j1PLµb¬Ytthí«C^h´‹ąTrŰo%öWڱY°E©}쎊ńąÇs©ÍEQ¸5ĆÝU$55 ®±8ĆÚë]AsĎĽ5Îł<·f7í})uŽ5jĄpăÚ5ó¶đGńů¸ž!ÉëäR»-Oő9ĘžFEłÎ­ŤŻ˛Źú¸Łâ¸źŠ}„ęëŃô~A©z.±~ŻÖńůyĽ.«ÇóuçZ=źŃX˙¨˛mYÇ—Ëß|}|Ţś«˛çQšŚ»ó|ÇŰÎ.ö©ŔŔPÄG5Ě= 0°´.î o˙ź·…łg¶ł?ęăÇö}aăŐ xŃŕiw˛6î aYR-Ćf €Ű…EşxČ‹ŚľeŐ}¤Ź[- šE_jĺůßvýŰ›§nůyL?ßb­Âu´}ţµxěS €ˇŹj{``i-Nüáôű˙Qx6űĘçÔň˙+Ľř'Łĺýo©O˝!śü?˙t´î?/ÖÖ™ľŹKˇ9_ť˛O‹ÎţÉTF˛Ŕ{¶Oľ¦ŕyI‡űy8Ţ~Ď»CŢŮo Ôü üÄ,ß°%8~Ŕ='>ľšó•VÜzŮĘă¨(Ţf-Ŕ_Ç4ע-ygvű=Ďá\ŞÍď>üW='8~Ŕ=ŔGל/*ńűFîäć%ö©ŔŔP€z€Ź®9_0o±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎĚ[ěS €ˇô]sľ`ŢbźJ … ‡řčšóóűT``(Ŕ=f €w?˙›µŔ“‰Ý/Ľ©=_0g±W%†B ĐŁ €×××Ăęęjj6/ O~/oüÉZř9hŁąs˛{ęáö|ŔśĹžUěďĹ>źXv`€ńBđÜąsý0°ĐŞpě÷ €e&"^nll„“'O €ŕŠ}˝Řß‹}ľŘďKő–…`Šííí°ąąNź>Îꊰűřç’‘ŔzěÖpţ¦_Ęú{±Ďű}©> Ŕ˛L/Ďž=›ýÁŰ|đ“a÷Ł?öžűVúbX{Ď~=ě}ôĄaóÁOeý˝ŘçËN 0Eů;ŔńÓkkka㡛ĂůO˙röµ1Ŕâ:˙é_ ß˙LÖ׋ý=ż˙ `ń˘pkk+»HŚřâ×ĹÄß Y]]ͬ¬¬  ěŮĹţ]ěăĹ~^ěëĹţžđ0ŔŚĘ;ă×ÄÄ ĆŤŤŤ°ľľžIýqćŻěŮĹţ]ěăĹ~ž;!@ĽHŚżĹ‹Ć(~rXeď®ěĺ !AĽpOŞź0`€%!X`€%!X`€%!X`€#ŘŮŮPŞź0`€ŽŰŰŰ™sçÎe¶¶¶€RöîĘ^ž@0ŔŚâEbĽh<{ölŘÜÜ a}}=“úăĚ_Ůł‹ý»ŘÇ‹ýĽŘ×C!AĽ8ŚźŚŚńßéÓ§ĂÉ“'ĂęęjfeeXeĎ.öďb/öób_/ö÷„ŔŔ€¦(ďüŤ‰kkkaýÖ[Ăöż˙÷açźţS`mżöµaýłźÍúz±żçN``ŔSÄ߉_˙ŕmÜqGŘţW˙*ě~ęSa÷é§ĂîĘ °ž|2ěŢtSŘů…_?ţŇ—˛ţ^ěóĹ~_ް,ŔSÄ ÂřéŔřu1Ű˙á?„Ý/~1}A ,žĎ~6śűő_Ďú{±Ď'–ť`Šřµ0Ůo†ÄŻŤI^D kçź˙ó¬żű|±ß—ę, 0@Źň÷×××ĂęęŞގŘ׋ý˝Řçó;ŔŔ˛ô‚[[[ýđ#Ź„ť·ľ5ěĽěeŮrFâ\Ść$ÎMkľ`ÎbĎŞ €cżO ,30@Ź2ŽěVŠ ĹÖĹăţĎőđ“‰wľł5_0o±Wű{±Ď'–ť ÇLđ/üB=ôdb47Íů€y‹˝*00`€3ŔŐŔ“–ć|ŔĽĹ>• 0@đŃ5ç ć-ö©ŔŔP€z€Ź®9_0o±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎĚ[ěS €ˇô]sľ`ŢbźJ … ‡řčšóóűT``(Ŕ=ŔGל/·Ř§C!č!>şć|Íęá˙ţşđ’—ľ=Ü–X6÷…?úĺ+Fcx]řŁ{SË»ÝöƸ]éŕŰÚGŢŢ}Ľ{˙8üR9¦_ţăđpsy§áÍăs9č¶Sť·7$˝N]>¶_úď÷%–ŔĺTÖÓčmTk÷™kăKáőöÂŚyşŘ§C!č1ŹxďŰaŁęąpáóÎw.ŹľöĆËž {×MŰgôĂpáąÔë#ßľ1ě\÷ůô˛Ď_WŰ÷A5çk6—6Ř˂ƩAć$ř.Ä—6î [•ĺŰďúé°ţÓąÎmݧ¶‰zŕG>2Ţ&ţÎpu»ĂhÎWݬXH¦#y1R-$Šb¦ZŚÍÎÎ^@¤ÜÄq;¤·ŹfßÇD±MkÜůëýoqÎłŻ §[ëvĎ[ű×Â3Ŕ#yť\j÷˛ĺ©>GŮÓ¨hÖąµńUöQwT÷#±ŹP}=šŢ/«ŽitĽ?jÔńťÇ­ěăŔco[ö•Šř¨†ą‡!–ÖüŕĘc{#ě~ëoĂ ˙Şcyöx$ěu,ŰűX˙6qź3˙đč±÷•ë&ëBsľşM»“µqé¨k…3ŔíÂ"]<äEF߲ę>ŇÇ­Ť˘/µŹňüoűďoožZ¸ĺç1K°šUGŰÇăÔŽ1’*N3ő÷`rÜú|Ć×ŰÇkĽ•u'ëä˛yéCß2€.±O%†">Şaîa€Ą5Źxý§~2<ő“uĎ˙Ôä+›SËźúɟʾž9ąíO÷o“í÷§*{-®[gçźţtxľµMsťkÎW§ě“¦řd*Eŕ=Ű'_ÓđĽ¤Ăý<ożçÝ!ďě7Pj~~bHß°űT``(Ŕ=ć/»ć|Ąw‡^¶€ň8*Š·Yď†m|•Ó\ď MŢ™Ý~Ď«wK§ ĐüŽéĂŐ0\±O%†B ĐC|tÍůb żoäN^`^bźJ … ‡řčšóóűT``(Ŕ=ŔGל/·Ř§C!č!>şć|ŔĽĹ>• 0@đŃ5ç ć-ö©ŔŔP€z€Ź®9_0o±O%†B Đc¦ř­o­žTüç˙Üš/·Ř«C!č1KĽűýďç!đË^V?‡,ÎĹhNvy¤=_0g±g%†B ĐŁ €×××Ăęęjvˇş€WěëĹţ^ěó €e'č/Ďť;'€c¬Ç~źXf`€)âáĆĆF8yň¤ގŘ׋ý˝Řç‹ýľT`Y€¦ŘŢŢ›››áôéÓaűßý»°{ÇÉ‹H`Ýv[Ř~ő«łţ^ěóĹ~_ް,ŔSÄ ÂłgĎfđ6nľ9lżâaď;ßI_L‹ă›ß ;˙ę_…Ťżű»¬żű|``Ů €¦(8~:pmm-¬ć3aű5ŻÉľ6X\ŰŻ}mظýö¬Żű{~˙0Ŕ âEáÖÖVv‘˙đĹŻ‹‰ż˛şşšYYY@Ůł‹ý»ŘÇ‹ýĽŘ׋ý=á/0`€•wÇŻ‰‰Śa}}=“úăĚ_Ůł‹ý»ŘÇ‹ý0°ĚŔ=Ę8ţ±[YYÉ.›Źżň»µđ“‰˙~ňˇÖ|ŔĽĹ^UěďĹ>źXv`€łŔŻzöžZčÉDś›ć|ŔĽĹ^• 0@ŹYŕjŕI[sľ`ŢbźJ … ‡řčšóóűT``(Ŕ=ŔGל/·Ř§C!č!>şć|ŔĽĹ>• 0@đŃ5ç ć-ö©ŔŔP€z€Ź®9_0o±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎĚ[ěS €ˇô]sľfőµ÷˙Çđ’—ľ+|2±l>ľŢsĺŁ1üÇđž‡RË»}ň·ăvĄoh÷®îă=ô§áĺ®üÓđµćňNź WŹĎĺ ŰLuŢ®ţ»ô:uůŘ^ńţď%–°XĘúröZ?ď ”µâĺěĚ_Y#ĎVŹTëţlwŃ-n­űT``(Ŕ=ć?ľ{a7ĽXµűB¸ůÔ˝ĹňGÂ×ö*˶źŻ˝ţgĎŐ·{!|â™{ĂŰ×_kűŮßű챳żľőÂd»ď®OĆzí¨šó5›K[,dEÔÔ s|¶hĘ ŐyŔE`ýŰźM,+ÎącŮlŠý_¸4Űűł`,űPr_Ťvđ¸´|ő_>}ý†ŔĄ">NpöţΡßűT``(âŁć†XZó €ź ŹÇżĘÎ…§_<ŰÎ˙H‡ýÍđ‰ŐŃň“'ĂęčéÎůłáĚ…Ń?.¬…?m÷gĂćîů°ya/[=„˝üůîéđńS'ĂóĹkgÎť ßí÷{gφo®Ź¶ŰÜΖ<ţÂd ©×ŽŞ9_3™Z4ͬăQÍ5Î Ľîc§x¶Â/Ź»ĂĄ i—.ľ”!í1 €çŐ§‰}*00ńQ sC ,­Ëź_ ď}đÖđ/üTřÓŤ<Ô}<Ţ‘»ľ‘ýűé3_ ˙Ď‹ńőíđµÓŁ×˝5ü‹o}*ü‹>ÎÄÎ>–?˙Ö­á77_ŚŻ„Íg´ż¸ĎÂŁ‹w…•ĺ§_ÇšëTBĐĽ8¬Ż×ÚľT)2jŰe:BŐ,¤®®×.Dó}u‡˛ÍcµŠłÖ1¦ě«§Xę €Űçś*Ş»ŕöyë6Ž—ž˙ŽyëëŘ”Ŕ€jÖ µúoň!Üj ™…|EŕXŰ6*·ďÝo®U—6jÂ|yO­:޶ľÎÔ>B‡ěxŁqľ§ş}uŰÖ9WŹŰ3W­ń–Ęúvňmdő×ëű®nŰę%&ÎŢŁę±ę!nŢSÍGĺŘĺ˛Lu>®|W¸ş8˙|yĎ[}ŹBe®›˙m%ŘŽ}*00ńQ sC ,­Ë?ţ xíÖĎe¨c űç[1ô=ľąú•đ¦3yüřFůőĐ#§źkńĹ­§ĆŻ•îc1(.×k,{zý»á÷Nćţz+˙?†Ëw| R, ŞĹVQ$tµ×kŠÂ#Qp6ĺEF;d,‹Źę?9Ď'cîÚ>ą¬YlçR;ŹćŚĺçÔ}Î=p1ŹŐs‰ckď«{ŢÚçY¬Ű*ŘĘ‚¸(h“çŇ3ÖŠl3Ľ‡ĚbT§Őj¬zX ńşjĎzÝ—–Ő{ŤZ.ië5ĺ×Ţ˙ŮÚ~Ňűî¨=Ëý7ëě‘Oţvýy—üxí 2ŹŰ|'ă>W3…´‰ńÇq5ë÷ÖĽ\޸˛Şaîa€ĄuYŕĆcçěõ?z¶¸;řdřźY8üLńüÔřnáĂŔ«? ·śĚ}élń•Ó—-Î/î; żTqW-¨*Hm»š˘€č«ÚEĚČLÇČ%·ŹRçQŞÍb']°f…RGaY¤ýĹQQČ–’sÓ=oíó,ÖmĆĺřg(đËâ0u^ٲďôiśÍş®]ç5µCÓ¶vĐ7C}8’Ü÷ęóI™¨ŃÚÇ«Žł]×Ďkú\•c?hÜŞżëĚ´ď¦Ö~ęďKë}«ŁÝ¨o;ËŰ˙]Díy>ŞŘ§CŐ0÷0ŔŔŇş,đ…‡/ě˙~â‹áß˙ŢĆŮl­µŤ‡ĆŻ•Ćáđé;Â/<šű•Żśn®XÍůꕍ¥ Ő¦YśŽĚTüÍ^@´‹(qÜéíŁŮ÷1QlÓwţza7CńY*ć°˝n÷ĽµĎ3uĽbüĄžůĎö׳<+ 4wôjÖă­Úp†ş2F6¤‚ľěµFMůÉż«×őyÝŮ —‹1Ő^˙^řZĺ®®öfęäňăMjízÝ۬Ûőú,5xľMďXş‚ŇĘ~Űs7Rśgź ˇ±Myţµ¸rśüy1ďÍym<źeĚé÷·ý>dŻ=4ýýëűT``(âŁć†XZ—%>żţGČ–Ë~ďlä¶ďÖÝ ß˙q±}"~Ĺs?Ęľ*:„ÝđĂ­ŐđŮÍç¶^_XKßÜwÇđa5ç«OVtµâ"Ę ˇz1k1×ÚW‡z×|˝^€|ň·ű+Ć*şRűx~TÄŚĎ=žKm.R…mąźéçŇ,¸ĆâkŻ7 ׉ÎykśgynÍoÚűRękÔ(J¸8ňšŻ0Ş ßS«Íf 5űHÔÓŮňÎzłŞY{–5qnR_Ö_Ďű˙ä¨6ŤőcmŮ”ń—Ę~Ŕ+*ű®Öˇăş7ó®đžř||^łÍŐ¸ŻQhŐĚŮňt¸[nsőűăóîľE&1ß)Ő÷ Ž%>/Ç”żoŐůlłz.Ĺ;ăó™iĚÍ÷qňţ×ç:jźď¬bźJ E|TĂÜĂKëňŔĎOľÖ9so¸9Ëeφ/?9ą[÷Nţ8ľÖ¶ľ—Ż— €źůr¸ţĚFëîáÇ×1n~‚¶©&KŁB*+@ŞŐŚp»°HeÁ×˝¬şŹôqkElŁčJíŁ<˙Oľ˙]áęfŰQO?ßb­âs´}źńőöńď_eÝÉ:ąl^:ĆĐ· .†Ľ^źţaëˇČŕă_‹Ç>•Šř¨†ą‡!–Ö|ŕ;ÂżüÖ§Âż_ůÜXö Ž^˙֭᪯?zëčµO…ůhůZÇöŮzw„7=zwxűŁ_ Ż/·imßńÚ5ç«SöiQĹŐd÷lź|MŔó’÷ópĽýžw‡ĽłŢĐ©qWęD^Ł._\˙ŕvŐ,ß°%8~Ŕ=ć/§ć|Ąw‡^¶€ň8*Š·Y °Ć×1͵hKŢ™Ý~Ďó@8—*@óüđ_őłppťŕřô]sľ¨ĆoEîäć%ö©ŔŔP€z€Ź®9_0o±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎĚ[ěS €ˇô]sľ`ŢbźJ … ‡řčšóóűT``(Ŕ=f €˙Űóß­žLüţÉď¶ć ć-öŞŔŔP€zĚ?vn= Ż|ö®Zř9dq.âś<>š›ć|ŔĽĹž• 0@Ź2^__«««Ů…bęX\±Żű{±Ď'–ť GĽwęÉđš}-‘ő÷bźO ,;0ŔĺďÇO®­­…Ďźz2űÄ`üÚ`q˝iĺ›áK§žĘúz±żç÷!Ě ^nmme‰ń_üşř›!«««™••`”=»Řż‹}ĽŘĎ‹}˝ŘßţC Qy'püšxÁ¸±±Ö××3©?ŽŔü•=»Řż‹}ĽŘĎsç/0$`€‰ń7B˘xŃĹO‹ŁěÝ•˝<á/0$`€#ŽŔâIőó†@ °$ŔKB °$ŔKB °$ŔG°łł, T?`Ŕ/···3çÎťËlmm ¤ěÝ•˝<00$`€Ĺ‹ÄxŃxöěٰąą666Âúúz&őÇż˛gűw±Źűy±Ż'†B 0xq?9/ăľÓ§O‡“'O†ŐŐŐĚĘĘ °Ęž]ěßĹ>^ěçĹľ^ěď !LQŢů/×ÖÖ—°Ţńů˝đÚOí ,öńîz4ďëĹţž;!L#$~MLüwĎc›áŤźąľřř…°˛ľNm‹čąőݬŹ÷·î‡Ż?ž˙Ś[ěóĹ~_ް,ŔSÄ ÂřéŔřu1żű…˝đőgö’”Ŕâůę“{áżŢą›ő÷bźO ,;0Ŕńka666˛ß ‰_“ş×ë?˝źő÷bź/öűR}@€e!čQţţďúúzX]]Ŕ1űz±żű|~Xv`€ńBpkkK ÇX5Žý>0°ĚŔ=Ę8ţ±[YYIŔO®í†îŮ żúéýl9űŮ\Ä9‰sÓś/·ŘłŠý˝ŘçËN Đc–řý÷ěŐÂO&>đµ˝Ö|ŔĽĹ^• 0@ŹYŕ߸5~˛źÍMsľ`ŢbŻJ … Ç,p5đ¤­9_0o±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎĚ[ěS €ˇô]sľ`ŢbźJ … ‡řčšóóűT``(Ŕ=ŔGל/·Ř§C!č!>şć|ŔĽĹ>• 0@đŃ5çkV÷]˙†đ’—^N$–ÍÇŁá˝W^1ĂÂ{H-ďvâÚ¸]éŕŰÚM×uď…+Ę1]ůˇp_sy§;Â5ăs9č¶Sť·knJŻS—ŹíŠëm/+Ď÷Ž÷˘ë{˙8¤˛®ť˝Ç÷$Ęőňô&Ęy¶úxŽÚ+Š}*00`€ f?Üvf?äşóÇůóűá©ćËýűlÓ©ý𵳉׋e­c\ÍůšMO°wdEÔÔ`p|¶ŘĘ “yzE`}í‰eĹ9w,›M±˙9Şł˝?S ż,LŤďßĺüÁAôżtČężľÚďŕpér~8]Ü&]|TĂÜĂKk‘ŕżZÝĎţh‡ÝÝđÄó;á‘čô^řŃSqůnx2[¸v¶/„K«»áŢÍüß;»Ů ŁíËeç[Ǹšó5“©ĹŰŃĚ0Ő\ŕěŽ×îc§8›·©ÇÉÇs©>$0wSŢ?Ň.eH{9`ÚŔł‹Źj{``i-Rüđ^–ކŰoZ WÝXńѸĽ€Ďž 7üĹsáĘŇŤ[áU7ć˙ľáÉlá‰'ËRǹؚó5‹®°˛üôëXsťJ–őőZŰ—*acm»LG(7ľĂ´Ô.@ň}u‡zÍcµ>ŐŰ:Ć”}ő„¦}pűśSĹTwÜ>Ďôݬéůď·Ž±Ž%Óâ¸Őý×Ć[„Ć×^—=tÜţúԝ“»żKíO\'ŽUŹW~ u©çś¦˝K«Y;Őęł˘Ž»ţŃZíš}¸µ]ˇ¬­š5ug=[Y§Q·ĺË{jäń¶őu¦ö/:5ëŃjÝ—˝!\sm1ćk?4øfťrÎÉş|<¶Ć±PŁŽkÚę{RŮľ9ϵűcľfTϧߏŮÄ>•Šř¨†ą‡!–Ö"ŔyŔ»>X6€wöÂÇďŢݵŢXYçĎ^k„'PÝîŇkÎ×tyÁ‘ C«SQ Ôî­Ýw†EÚ …L^ ´Cײp©ŽńÄh<'cîÚ>ą,;źĘóâ\jçŃś±IAÜ^–ë €‹y¬žK[{_ÝóÖ>ĎbÝĘńňuĘ"­(*“çŇ3ÖŠl˝ďajĽŐ×*c,ćşśxüÚ{››ő÷1{­Üwę˝j˝–źsú=ĘÇŇ÷ţ,§XU˝J­V}ŢYO5ëÍ´Z W}­QËŢwýµý¤÷ÝcŁFmÖ÷#'®­?źIk?•şrĽ¬:–ŃňÚ9ÖëĐúąäŰMć´]łfó3Ą6/ĺűnĎńdYełzą<Żţ1çďŃdŰćóŠ}*00ńQ sC ,­… €ďŰ /ÄżŘ[{áĹkĺoţžz&>/żşň8·?^7:.pş¸JÉ‹‚Z1’ âZŠâ(Q”4ĺcii‰ăvHoĄöQ/rĘs™i.Ĺe]ł°«(ŕéóŃ=oíó¬ ©çEŃÖqĚé˙ 4ć*)5Ţę8ňgAo1×ŐĐ·¦ŁÉňćń;ÎŻqťç<őýXny U1®ťÚőVÓ,}„v=6K]ٱďq˝ŢT®WŚąöÚ!´jĹ|ĚYm—瓝[łţ®Ž«XV?—ĆĽ–˝¦T ›Đý$ĆSÔŘ]cÎĎ·úŢĎň^÷‰}*00ńQ sC ,­Ĺą¸xÇđůđĐnţ›Ŕ/<[Yľ{>Üýđ‹áöčÁťđ»•}Ź8żčď,ŔREVĄK<Ó1rÉíŁÎbq¤z>­"(]äÔ‹˝Ä˛Ń¶ťáf¦(ŞJÉąéž·öyëVĆ”ŹŁ˙ …vY|¦Î+[6­ŕKŤ·:®üßŮĽďGuŽňsŠcžh§ĺľ[ŰËŰçÚăî{˙–[»vËj¤ńójWÝnb–P°ľĎččđ,}I°zýfŰ$n¦ÍąkÔŞŐů(ĆY­‹˘ű=hżżu}cn.›í˝îűT``(âŁć†XZ‹źŹěŽţbď]·|&>ß WÝy.»+¸ÇŻţčVxU¦şý1 €ł"*]•ܤiłaÓŠŹ‰üÍń$ŽŰ!˝}4ű>&ŠmZăÎ_ď/ŇšE_ŹbŰëvĎ[űs!쌞×ŕ˝ýđÜ™ýđXé©ÉöÇ!NdµeŐ‹ü"”«/3Uł y‘Ň."SĹˉkűK‡…Ô>NŤ  ńąÇsi^íłÜĎôsÉÎ9UčĹ1Ö^O}ąÎykśgynŐýĆmg-v;ÇďqjNëŠůJÍa¶ďüßŮ~jű,Îż1öú{UŮvĽď†FŃškĎłľËj\Cf® ďŤĎǵ\µŽko[*ë¶\»ŽĎ–wÖąUÍú¬8~±|R×Ö_Ďű?1VVMRVk .˙]s´ü˝•eăz·aRŰ&–Ď8îiµmý=Ž&çŐ?ćú<_s}¬µ_CÇ>•Šř¨†ą‡!–Ö"ŔŻýěŹĂw6ň¸ú¨ŔÍÇÚdűĹ€+…LĎňqQ0*ŞENfƸ]¨µ‹Ă(/Pú–U÷‘>nł©›©}”çâúëÂ5Íb˛Łť%XmÍUf´}^şĐLŤ=›—Ž1ô-«+ĆT[·x-Wţďlľ›ˇrh—®ą)ńßfđ6L]§6'ůfy˙ŕ(bťŢ¬?Ó˝‚ĺűT``(âŁć†XZ Ź\uăsáĘOž ďľíLx÷ß=®ü‹çÂUŮW=o…«F˙ŽĎknÜšl˙ѵĘúóÓśŻNYčćNČÉĆt@Ýty‹şt¸źŤ)ńžw‡Ľ &ç=8Oq€÷€ePÔŽÍ 'jć‹«8nµ/P|hyzŤ}ąĆ|ńĹ>• 0@ŹE €ŹŁć|Ąw‡čS§GwŔŔ±zWëABĘ‹!YT¶ßó<ÎĄŠČüŽéL‹ąLÝí;{8}Ŕ«¨[Ç˝f];±O%†B ĐC|tÍůb _«]ö;yŹ ď뻀ĹűT``(Ŕ=ŔGל/·Ř§C!č!>şć|ŔĽĹ>• 0@đŃ5ç ć-ö©ŔŔP€z€Ź®9_0o±O%†B ĐC|tÍů€y‹}*00`€łŔ7ÜłW <™x˙hnšóó{U``(Ŕ=f €ź8“‡Ŕżúét:Dq.âś<ąVź+¸bĎJ … GŻŻŻ‡ŐŐŐěB1u ,®Ř׋ý˝ŘçËN Đ#^ž;wN ÇX5Žý>0°ĚŔSÄ ÂŤŤŤpňäI0C±Żű{±Ďű}©> Ŕ˛L±˝˝677ĂéÓ§ĂŰnß _{z/y ,ž{žÚ ď¸c/ëďĹ>_ě÷Ąú€ËB 0EĽ <{ölöďÎĽŢüŮ áű'…Ŕ°čz~/üć­űY_/ö÷bźO ,;0ŔĺďÇO®­­…/?˛Ţůů˝ěkc€ĹőÎ/ě…»Ëűz±żç÷!Ě ^nmme‰ń_üşř›!«««™••`”=»Řż‹}ĽŘĎ‹}˝ŘßţC Qy'püšxÁ¸±±Ö××3©?ŽŔü•=»Řż‹}ĽŘĎsç/0$`€‰ń7B˘xŃĹO‹ŁěÝ•˝<á/0$`€#ŽŔâIőó†@ °$ŔKB °$ŔKB °$ŔG°łł, T?`Ŕ/···3çÎťËlmm ¤ěÝ•˝<00$`€Ĺ‹ÄxŃxöěٰąą666Âúúz&őÇż˛gűw±Źűy±Ż'†B 0xq?9/ăľÓ§O‡“'O†ŐŐŐĚĘĘ °Ęž]ěßĹ>^ěçĹľ^ěď !LQŢů/×ÖÖÂçžą?ü§ďţuřůoŢ,°_űî‡Ăçźy ëëĹţž;!L#$~MLü÷ĹgżţÍý˙+ܲzxćěZXÝú1°€ž~ńL¸eőpĺwţW¸ëGeý˝Řç‹ýľT`Y€¦„ńÓńëb®~đĆđĺÓ?H^P‹çŽSß żőĐßfý˝ŘçËN 0EüZŤŤŤě7Câ×Ƥ."€Ĺő ßú˙eý˝Řç‹ýľT`Y€z”ż˙»ľľVWWŔp e}˝ŐŐ¬Ďçw€e'č/·¶¶ŔpŚUŕŘďËL ĐŁ €ă»•••düčćjx×#źŻřö˛ĺÜÍEś“87Íů€y‹=«Řß‹}>0°ěŔ=f €ď‘O×ÂO&ţŰŁ·´ć ć-öŞŔŔP€zĚ_ůť˙U =™sÓś/·Ř«C!č1K\ şć|ŔĽĹ>• 0@đŃ5ç ć-ö©ŔŔP€z€Ź®9_0o±O%†B ĐC|tÍů€y‹}*00`€—3~Ď™ő°ą»]ńbxě̗›ŠĺW=úíđđůÝěy|ěěž ÷<ý‘bűŹ„?}áLŘĽP, »ŁĺŰáOߨísbőĚgĆÇľšó5«{ox}xÉKß>‘X6Ţ}ĺŁ1Ľ>ĽűÁÔňnź¸6nW:řö‡vó;»Ź÷ŕź„W”cşňO½Íĺťn WŹĎĺ ŰLuŢ®ľ9˝N]>¶WÜđ÷íeĺů^Âń^t}ďŔ •µéě}‚ĽŻPÖ™—Łżpđ1siĹ>•Šř¨†ą‡!–Öe €Oof¤7·ž ˝p*śŮËž†3/|&üüC÷…ÇŠpwss´|ý…°“=[_zô†pŐĘsůó˝ÂŁ/ÄíG67Ăý+_ ÷ź?6GňőCŘŮËźŻśZ¤¸'Ř»˛ qj08 >g #Űňbs^^X_{KbYqÎËfSěęlďĎ” daj|˙ŽKˇÝ˙ţ,µ¬†ë«ß¦^ľ €g•˝Gsč7Ä>•Šř¨†ą‡!–Ö"ŔŹ>óžđswŽÜýÍđT|aç±đÇ«ĎgËvÎ|.ür\6rőł/dŻĹ€xĽíŶĄ»ß~îs˙%üěČ'Öă›á®űóç?wwzGŐśŻ™L-üŽfÖ€ń¨ćgwĽvë8Ŕł~ůx.Ő‡ćnĘű°Ě.eH{ů`f5Ż>MěS €ˇŹj{``i-DüŁňµo†Gă ;Ź„›Ćápe›ď˙ ś‰/ľřípőĘély¸đbxě…o‡?|řŻ&ëNd»Ř w?^ýbkÎ×,şÂĘěőâ®ÜLsťJ–xőőZŰ—*EFm»LG(7ľĂ´Ô.&ó}u‡zÍcµî4ncĘľzŠĄľ¸}Ω¸;nźgúnÖôüwĚ[ÇXÇ’iqÜęţkă-Băkß™=tÜţ†ÔťÂ“»żKí»ŔÇŠŞÇ+ż†şÔsNÓŢ?€…Ö¬j5VQ‹Ýđ÷µú3ű@ok»BY5ëâΚ´˛NŁöĘ—÷ÔąămëëLíAtés¬7_®ľ¶óµ2øîśrÎÉÚz<¶F={Ŕ:łąďɇ®óýĆ1V×™ÔĘ}Çm×ĎťçZŞĚuóým×çł‹}*00ńQ sC ,­E€źzţSáŹ|*Ľçäóů×6o~3|úĹlQ%yü‘<-˙ů»˙*üÍ™Íń×<ÇÇÎąď‡?Ľ˛ţâŔ“˘˘öz, ŞĹVQ$Ôî­ŽÝw†…Ç EP^d´Cײř¨ŽńŁń|˘1ć®í“˲ó©Fu,Łĺ]돞×Ď%ßn2§íş3;ţ”ú:WľGő÷ńŁąĚÇ’ď»Ů?Čő7ŽąŮshľ©÷6ąnVkü}(Ĺ>•Šř¨†ą‡!–Ö"ŔőÇf¸ëá˙~˙TqpWđôĂáŃüď}ţűÁĹú‹§ ´˘ř¨2© ®Ą(j…ES>–fa‘8n‡ôöQjŤ‚©8—™ć"QÖ5‹ÂŠ"ž>ÝóÖ>ĎbÝńů5źwwŃô˙ÚĹe[jĽŐqä˙ΊĐb®ŰElˇ’7Źßq~3´Óß?€Ĺ—×Aăú§]35ÍŇ h×TłÔ†ű×ÜMĺzĹkŻ\׳ú2ւŲl˝f ]W±¬~.Ťy-ëű¦TÚ4­.î›ëYŽŰZ§^§ëĺÄ<şÇŮ/ö©ŔŔPÄG5Ě= 0°´!^9óÍpóÓ#Ź.Ľő®÷„—Ť–•_ń|ćÔÍăőŻ*ř…/Ôöóóńwđh{ŰŮřęřőĹ €ó‹űÎâ-U U ČbůÁÁ´v°92Ó1rÉíŁÎBs¤V7‹ťtŃY/ËFŰöGy!7>Nrnşç­}žĹş•1ĺă(Ç?C‘^‡©óĘ–M+ŔSă­Ž+˙w6/‰B7?§8ć‰ÉňĆľ[ŰËŰçÚăî{˙_»ţŞzŐZ¬şÝD=ŘL«ď3:zŞaîa€ĄµđŁĎĽ/Ľěüá‡ÂJ¶t;·bYű=ëzŹĘ×ë5ó˝ě=¨Š}*00ńQ sC ,­…€«_ó<öľpÍăOdwőNçÂSĎÝ~y´ü?®ţ¨öűżń±yć«ášJĽp»0j,«E(W+|f,ČZűęí4U€|âÚÄţRÁa!µŹŐQ3>÷x.Ťâ©]Ś•ű™~.Í‚k,ޱözŞpËuÎ[ă<ËskxłĘťcŤŠ÷85§uĹ|Ąć0Űwţďl?µ}çß{ý˝Şl;ŢwCŁHϵ ďYß?€E6®3ď ďŽĎÇőXµko[*kŻ\»Ď–wÖŞUÍ«8~±|R›Ö_Ďű˙ÄhüYMW5eü)í1ç5gVO¦ŕňßĺ1GËß]Y6®Y&őibůĚărżÝu}ĎqËú¸pő ńyóým{ňÖ˙ŰŠÚ˙mĚ*ö©ŔŔPÄG5Ě= 0°´.güówż'üěçţKřąęťżŤĺ?÷ą? ˙ńë˙'Ľőë˙+üRuÝbŰź˝ë‡·~ă˙„«ď-»ó}µí_vçhůçňŻ”®ľ~±5ç«[ĄęY>ľŕŐ)SÓĆfa‘.ň"ŁoYuéă6 ·jˇšÚGyţź¸áťáęfáŐQÄά¶ć*3Ú>§vŚ‘Ć8'ęďAWŃ_o/Q ëNÖÉeóŇ1†ľeuĹjëŻeăĘ˙ťÍw3T.?\P¸úćÄ›Ťv˛î”ujs’Źa–÷b­Ý¬!Óő>)±O%†B Đă˛ŔK˘9_ť˛ĐÍť’Śł}ňőň„ép?Sâ=ďy$0MÎ{*pžâď ˘ăÁ—ľ§QýPsńZ1–éur±mkĚíZ}™Ĺ>• 0@đŃ5ç+­¸;Ô'Vŕ€cő®Ö„”C˛ mżçy śK ůÓ 6ľň:3sŃ]:D` Ŕ°%Âç!¸GűT``(Ŕ=ŔGל/ŞńµĘŃeż“÷úľľX<±O%†B ĐC|tÍů€y‹}*00`€ŕŁkÎĚ[ěS €ˇô]sľ`ŢbźJ … ‡řčšóóűT``(Ŕ=f €ßőȧk'ż7š›ć|ŔĽĹ^• 0@ŹYŕG6W˛řßţ@-ü˛8qNÝ\mÍĚ[ěY €ˇô(ŕőőő°şşš](¦. €Ĺ•őőVWł>źXv`€ńBđÜąs`8ĆŞpě÷ €e&"^nll„“'O €ŕŠ}˝Řß‹}ľŘďKő–…`Šííí°ąąNź>ŢđÝż wžţ~ň"X<ź?ő˝đ«ßý«¬żű|±ß—ę, 0Ŕń‚đěٳټĎ<űípŐýţţÇĎ$/&€Ĺńť?^y˙ź†Ď>󝬿ű|``Ů €¦(8~:pmm-Üţěýá׾ű×Ů×Ć‹ë׿űáđ…gľ›őőbĎď˙C AĽ(ÜÚÚĘ.ăľřu1ń7CVWW3+++Ŕ({v±űx±źűz±ż'ü†@ 0ŁňNŕř51ń‚qcc#¬ŻŻgR€ů+{v±űx±źçÎ_`HŔ/ăo„Dń˘1ŠźGŮ»+{yÂ_`HŔG/€Ĺ“ęç `I€–„`I€–„`I€–„`I€–„`I€–„`I€–„`I€–„`I€–„`I€–„`I€–„`I€–„`I€–„`I€–„`I€–„ŕŘx"üĺëţmxŮËŁ÷…/&׆L pl<®ĺá%/Ť® źK®s9˝ľ÷ĄŰĂÍ·Dß O'×.%0Ŕ±±čđ|Ć÷ĎţŮ? ßřĆ7’Ëşś÷ţ÷…_ÝkÂË^~uxýhů;ŢS¸ůKŹ„µńľ¦+CŕŹüăÉĺĄ 0ŔE÷BřÜ[~ĄBŢr{±^őŽŮ´WřŮĘ~;î°˝ĺşÚ6-/˙ýđąµrçGcK¬Sń˛·ÝY cż÷Ń7…źI¬÷’—ţJxÓ-/ëÝŢ”\g¤<߇˙,übjyć áú‡'ÇśE ˙Á?řáĎ˙üĎ“ËcřCbá/C"¸ŘîţýJ`ú+áe/˙·…"î €‹uÇwŃŽĽü†pßxß3Ŕ/««đĘN‚äfü3Ícľôęđ§‹}?ý±đęńëŻÉîŘýť7^^6~í-áY¸|wxÇh?Ő 8ŰotÝÝŁĺ'Ă_ľj˛,c.ßćŕpÔ *0ŔEö≷ŚÎW´ĽC6Ąë7sżţË/–Żż!|ŕń)ëWŕ—˙Á#ĹşçĂÚ-oź˛ŻúXX-^źŔŻ©„®/„›ß8 Ť_ýá<4]ýđŐĹkż~çKĺşçĂÓ,_ż"üú-ĺë]ç=Ţ[žÓËßW µŹ® 20ŔĹV»#÷WÂ+íşđŢŢľúŔ Ťß×íLżú¶2Ś­Ţ;=ţĹ÷OŕřµĚż^Ľ^˝“x7îş˝ĺíăýĽěÝßi¬űšđ_î~6¬>]řčdÝÉ1űŕę˛+ÂĎż#ü7·'<]ůzęĂ*CŕwľóťÂ_M p±­ÝŢTűJ劗ż)üĺ´@wä{ďĂx›7M»Ă¶3­?ľ“x˛~güđ˙ //öS~Muóë˘S~ńýOűč €ëçÔôňëî®ýîđa”!°đ€!\ «…ży÷[Â+żĹ›yĺź…ďeë]ęřÎđ¦âő™ŕŰ+w. ž:ľ±Ăc·˙Yřť×˝¦ń›ĂąÉ~ďă˙¸đ€A\r/†µ>^?=ËpôŔ« Ż.^ź„ÎÝđä÷~'ű™¬[ý˝ŕ.Óŕ†µgĂŻ›śg=ĽC p±­ŢŢűîż 7ßr{¸ůK…Ő§ź÷ť¸!ĽzđËß}_ţ˝Ź'üĺŻUî>.î荪ˇnů»ľŹ}ă/+őäk}Ëřµ—Ľň}ásT~xtŚĎÝrwř^ĺ7|o~cąŹ×„7ťČĎý{Źż-»˙Ăď ×t4'·Üî{|´ýw‡ż|ËkĆűź|•4pX`€‹íá? żX†¦ ?ó–ۋ߻˝řpÚŻ„wÜ]îc†Żu~Ů–űîű=ăLý.âÔďü¶ď&Ni|5p(`€‹íńŹUîö­{ŮŻýe¸˙ĹrÝ9Ŕ/{Cřť[ęwÖö±?óĘß7?>Y7óđÇÂë_ޱţËßţfµ˛îÚíáMÍu‹»Źżx]â÷ŁŃßq»ß퀋A pÉĽ0ůşä‘µqđ{‘Ąľ:ZÍżzą)őĐ™ĘW9§Ľ¸VY·cߥµŐîő˛ŕ`ŔÇ]%.żnąĎ$öµË°lŔÇť(€Ž;0PwO'Ü|Ëí™/><ý7uźţFľîÍ·Üľ7ĺw€ăE °$ŔKB °$ŔKB °$ŔKB °$ŔKB °$ŔKB °$ŔKB °$ŔđĄŻÜ 0wÝ}_ňu€eőŐ{ľ™|`YąŢ†&ŐďXF`€%!8‚ťť`ĄúyC 8€xḽ˝ť9wî\fkk X eď®ěĺ „!Ě(^$ƋƳgφÍÍͰ±±Ö××3©?ŽŔü•=»Řż‹}ĽŘĎ‹}=!00`€Ä‹ĂřÉÁxÁ˙đť>}:śşć|ŔĽĹ>•ŠTüš×Ľ¦őZßë``i €Ź®9_0o±O%†˘+n†˝©×J``i €Ź®9_łşďú7„—Ľôşp"±ěb8qíŁý_®ą)˝üXşéşŃ9˝!Ľ÷Ä2`q<đˇpĹKŻ/ąňCáľÔňă˘<ŹBgźeÎ7ö©ŔŔPôŔeŕŰ|Ţ$–ÖBŔźŮ·ťŮůźîüqţü~xę‡ůň‡G˙>Űtj?|ílâőbYë—@sľfsG¸fT\qýىeĂŁá˝Wć…ÉĄ;Ć Šâçâ„ĐĹ9]{Gb°P.K š÷[.ɇá§ő8}ľo̱O%†">Şan©úö…ż‘XZ‹˙Őę~öG;ěî†'žß ŹD§÷ÂŹžŠËwĂ“ŮÂý°ł}!ĽXZÝ ÷nć˙ŢŮÍVm_.;ß:ĆĄĐśŻ™dw˛^ş»ĆĹ €ł}ąűčp1űM—jßqż±O%†">ŞanŐ,áo$–Ö"Ŕďeém¸ý¦µpŐŤŤË‹řěąpĂ_<®,ݸ^ucţďžĚvžxp˛,uś‹­9_łČľž9q'kţµĐůť»ąjHśßďč­­WÝO,W·oٶW~(ś¨îŁöéÔň“§ů˙ví§,PĆű¨ŽŁą¬˘¶źÖx»ŢrÜÇúkŁŕ8hŐő“z}\źWkúJ˝Ţęm´úŁ}]_íLzyżäCăo5‹ęßlVďULŽ;ů&´şJźˇŐ8ŕó;‚ÚŢóŤ:Ź;Ă(ö©ŔŔPÄG5ĚmšţF``i-RśĽ;á‰eăxg/|üîýđ‡Ń]űፕu>řě…¸FxňŐí.˝ć|M×ńŐ>EAP}=“B'ńµÎ‰mĆ:–•…ÉxeQ7.PĘbŞQ€U b›ÉŘňmęEŮHßřZű‰ë7 ĄĚ$ün/.ž˘˙Đ n‹çăŔł\ŢYűwě§şmŮ(ž7űů±ĘçíŢCëöĹţŰcIô-Fă>PźˇsߥÄůÎrÜ©űť]ěS €ˇŹj{``i-L|ß^x!ţĹŢÚ ,^+ó÷Ô3ńyůЕǹýńşŃq €óâ%ń)Ó˘`ęľËµ($ŞË‹"!Y°t`őâ)*ö;S˝řĘű*Ź“dősČ^kŽ˝c ™˛čKÍES¶źĂ8€˛GQé”Z}ŤÎŢDw\íT{ ­ŢBuß•1Ő$ÖOő!ĆÁuÇň©zöťKŔ3wę~gűT``(âŁć†XZ‹spđŽŕóáˇÝü7_x¶˛|÷|¸űáĂíŃ;áw+ű8p^ $ŰLľ–jęĄ €›n"®§ ŚSan_śiî+găkPŔĄV©Ű‹şü’ŔEŻŁ+ÎÖźÚcIěżmŇ{éîĎ$LÝwâ|k:Ž;ÓgűT``(âŁć†XZ‹źŹěŽţbď]·|&>ß WÝy.»+¸ÇŻţčVxU¦şý1 €ł‹úďd- €IáP=nî·űŕr_őŔ¸Ç,ĹŮXqÜęůU^ż…0݉kë5µp1ŕńkŤmóăLzőţCŞođh¸ŻÖcÉ×IŽĺÚúv­Ë4ĹX»ű‰óťé¸]c>¸Ř§CŐ0÷0ţÁ˙ë˙ý˙ _˝űëÉg‹}>żăwgc?ÜőĂýđĹg.„ťŃóZĽ·ž;ł+=5Ůţ8Ŕ­O˛VŰ´V$4 ›D‘pč¸ňz±ŢdÇMw͢¦^tŤôŤ/.«ÍEâ8#­Â¸tFőú5W潉I({1ŕ+ŞűŻ,Ďű&oČ{™ć‡č‹žEU­71Rô9JٸnŠ=Ę6™÷ĘžJ¦ŐßIśď¬ÇMŤąąÎ bźJ E|TĂÜűqř˙5‡=•%d*IEND®B`‚drf-yasg-1.20.1/screenshots/swagger-ui-models.png000066400000000000000000001456051416705305200217260ustar00rootroot00000000000000‰PNG  IHDR€8čÓÁCsRGB®ÎégAMA±Ź üa pHYsĂĂÇo¨dËIDATx^ěý_k]Ůŕý×U_őĹĽŔĽ‚™`p˝)AŮ´/¦ş ŃŤˇ’ ©‹'NhĘq 1j@eRŽ-d‹v0ç©Çq~˛éé§L»ÜŘně1vüŚÂˇ©éÍúťýçśł÷Ń:’Ö.Ő±tÖ§áCI{íçČë;kźwz˙˙öo˙x»Š˙űß˙ű+0Ŕ L `JŔSB0Ŕ”Ř-˙÷˙ţߣۛ`€`§\ÄßľŘxź pŚ ŔÍř»[€€XŤľŁżŹ€€ťđnŰú`€`\ݶÓvŕŕT0Ŕ L `JŔSB0Ŕ”€¦„ 0%`€)!$úý›˙/Ü{đ˙„Ű˙×]ŕ»˙ŕ˙ oţż˙ťçV0@‚˙µő‡p÷·«׿˙ç˙üźč>ŔŰ÷Í7˙§śÇűÍoď—óz±}¦‘ ŕÁĆ˙ţ×˙ÚŠŽOńDżßmţżŃ1€i$$(Ű\˙×˙ý˙‹nF0@óz@N`€>(Ŕác^ȉ ŔE8|Ěë9€ř ‡Źy= '0@ŕđ1ŻäDHŕ">ćő€śŔ |P€ĂÇĽ Špř×r"$đAóz@N`€>(Ŕác^ȉ ŔE8|Ěë9€ř ‡Źy= '0@ŕđ1ŻäDH°çŠŻ×ĂŇĎ~^Z ży={˝ľToďYZŻ›ÇíŃ˙\ůqřŃŹ~ţn=>Ţň?WÂŹ{űţčďÖăă0ĺ` '0@‚=PüçK᣿ú«đWµżąőu=öu¸ő7ĂíőŃĄđĎŁÇîÁ?_ú¨<ţooéßËßţ&>ßÇŹ‡˙ú_˙kxóćMt|śb˙>ř ů¸ťŔ@N`€ÉřŻ˙:üuńßź÷Wß®‡ź7·Źŕů:Ľ~ý:l}ÝŘÖđőÖëđúë€Ëń­~l®E𿄯{×)ÎŐÚöIp˙ÓúOá?˙ç˙Ľç{ďŢ˝đ˙ă,Ź‹Ťw%9€$ŕŹÂÂÇ˝˙ţh)üc±ý—ÂŹzŰ?^X¨Çűx+üîďć†+{~ôă•đOýómý&üüGñľAţ§â1ĎŤ±ý8¬üS=6€·~÷wa®ż_éŻĂĎ#°˙R"p˙Ăřĺţűąú· 9€¤ŕKá7ĺjÝŹĂĘë ŻW>îýüQ¸ô›áx€·P­žűyXůőJř»Ź˙şŚł?ţŐëŢůľż®ýŁż] żľu)üüŁjĽ ŔŻĂJ™˙j.ü|ĺ×á×—˙¦:׏U}żp+˙.,üuµďŹßQü7áŇ^ľK:ŘKîÇß˙ň_ţËľÇß‚ äDHĐ%˙s˝ę÷onm…_˙mo[±¸9ŢŰ˙w uĐýu}|}Lm˙1,•«{˙6üş>ëĐ_ß Sěűă•đĎĹcť_˙.üÝ\µ˙oš÷Rž«~u‹÷O[áëúśđ]éGŕ"ň±·9ÖŹż˙íżý·Ööý$9€t ŔőŞŰż^XŞ˙ű»‘ń ż)Âđ_Í…KŁŹm.Çţ¶Ś¶uĐíiŕţľŰü<¬7ĎU?ú/µ5]¬NľÜż.|Gbxń· 9€t ŔýŔ[)WůŽŚďĽ¸˙Řć1+€_Ż„Źësýcą¸¶őuű^ę\úz+üÓď~VţöGĺyĘ(Ý€ďH3˙Ź˙ń?& 0 A×üő­ż)Ck˙»€GÇGżřçĺ#ś#ßüńß–ßŰűăzĽúŕ Kĺď>ţůĄpë×·ÂĄżűyřůĘ?¶ďĄ Ŕ˙3ÜZ¨ÎQúq€´Tď ß±~~çťw& 0 A×üoŻ×ĂR\—~^ÇĆ˙m+üîďÚŹfţŃßŢ ˙łľş\­ň­ýuą"¸€˙-lýîďÂ\cĽÜçÇ+Őń#xĺăö~őŁź‡ßlŐ×€ ("đąsç˘cßȉ ŕ;˙ ř/_—Źoţú_"c˙ö/áë±c…jüőëŻĂżDÇęëĽţú_âă0E` '0@ŕđ1ŻäDHŕ">ćő€śŔ |P€ĂÇĽ Špř×r"$đAóz@N`€>(Ŕác^ȉ ŔE8|Ěë9€ř ‡Źy= '0@ŕđ1ŻäDHŕ">ćő€śŔ |P€ĂÇĽ Špř×r"$đAóz@N`€>(Ŕác^ȉ  ř “/î¬G·LŁ˙ű7÷ŁŰ¦‘Ďy@Žbó}ÓHHŕ">ćő€śŔ |P€ĂÇĽ Špř×r"$đAóz@N`€>(Ŕác^ȉ ŔE8|Ěë9€ř ‡Źy= '0@ŕđ1ŻäDHŕ">ćő€śŔ |P€ĂÇĽ Špř×r"$đAóz@N`€>(Ŕác^ȉ ŔE8|Ěë9€ř ‡Źy= '0@ŕđ1ŻäDHŕ">ćő€śŔ |P€ĂÇĽ Á~Püć›oĘ˙!ÝÚÚzŠů˛bŢ,6źÖ• äDH°ź‹±±¸ŔÖľF`ȉ `??(~ýő×ѶŔV9›WëBr"$ŘĎŠřâl€­rţ,6ŻÖ… äDH°źcj€ˇŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€ĽťĽ~ůń\›«,­ÇöŮÝ—K§Â‰‡›‘±¦Őą÷Â{~6"c0I±yµ.` '0@‚·€ź.…Ů÷Ţ ď˝"ĽßűlÄ÷kŘřäĂđŢ{†O6†Ű`›ŘĽZ0 ÁŰŔ/.ý ŽąOĂŇě{á˝ŮĄđ4˛_éőëňż±÷"<ýę«đâőp[4ż~ľúęixŃÜ6!÷Îť GŽÎôĚ…«‘q¦Wl^­ ȉ ŕmŕŰ˝Ţ;ń“p§÷óĆO?ď˝7Vă«aî˝÷Âs? }ŘŰŻ·«s˝}Ţk¨öŻ˘đđŘŤOfËĹýćVËííü"Üůéěpź÷Ţł{XĽ6ÂŮă3áÔĺŘÓ.6ŻÖ… äDH0ůĽ~úÁ0ÎnÝţ(Ľ˙ŢűáŁŰýń*qöÄ©ŹÂ'«áĹëáöOŠPüAřÉíŻÂW_˝Ż{ű¶pýXé÷0î|YěóUř˛·_qÎV^˙iř w˝,­—űÜůéŢV˙ţ÷żkkkÉc1WO ŔąŠÍ«u!9€L<סvvéiőű‹Ká˝ß‡ß\ŕŃďŽ=ş€ËUÂ'ÂOî ÇűšxtŐđÖĆ'áĂŢőćVŰÇ4÷łĎ> ögţň/˙˛5öâĹ‹đţűď‡?˙ó?żúŐŻZcqVä,6ŻÖ… äDH0ńĽúĂ2Ôţđ“Ő°şZ?<ń^ă{€żMŽŻäÝ€«ĆM;ŕB?ô6#psۇ~¸ím.Ď•ßý+ţä+6ŻÖ… äDH0é\~˙o$ŔWĺĆđÓĄâ{{÷kđĂĄŻŞÇD÷˝x˝ý¸QÍŕűńińwŔ `€śĹćŐş€śŔ &€ëď˙ýÁĄđ˘ą˝Ś·ýďŽŕ~ŕýřćŢżx˝÷ßâŘÖw߬ľsxö§7Ă—ü´}?;čGŕwŢy§Cü­ř`€|ĹćŐş€śŔ &€Gż˙·Żő=Ŕcđ‹żsď÷W ˙°Śľ­\ţ^¬îďÓ3·Znoŕ­˝ßO´÷{o6ĚٸÖ.Š|âĉNń·Z|2ś˝`ÚĹćŐş€śŔ &»řŰz^ěú¸ćáé^éüúEąú÷é‹ČŘwĘ# r›WëBr"$8\x:Ü;w29:Ó3®FĆ^±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€ä€ďť;Ž=ÎŢŹŹm„łÇgzűö˛?ŮŮü"ĚűE˝đ4>°ŘĽZ0 Á4ŕ«§g©ËăÇbAwě1÷χxĘ= fWÂ…ÍŘŘ®ßÇ` ŁŘĽZ0 ÁôŕjĺĂ1ťđÝđŻß{7|ăŕŮgŽuŔßBl^­ ȉ `*đĺąú‘Í Çχ{˝±ęŃĎýísáęŽ)ÇÇŕÖqĂó}óî÷ÂżŢ-pńß…đ§w„ŕˇ~\s±b·ąjwóÂĘ`ŰŔ™Ťá1ł_„ÍzĄoáĚőíç*·•×)V÷~żĐďź«ŚĚĂcÚc@Žbój]Ŕ@N`€٬.n#—W—ńwxŽ2.ź^íý|7ü±Śżď„đNˇżĹ¶Ć±Ľ×Ď´ëő37ÂőÁřŔýĐ;6ÔÖÁw$+˘qń{y|uŢ24÷ĎSĺţ>@¶bój]Ŕ@N`€đŢp{5q­±jřŹß˙^ř÷wß ˙ţ˝ď‡?ÖŰxűĘ\ŻľFŰÂN¸ŠGĹđŕ;x‡ëëűŢ` 6ŻÖ… äDH0mxćÜU›;ŕč1{XÜr÷űáßß](.Cđ÷ďn߇‰ŰĽľŃXq;|«Ç3·ŁpĎ>ŕb°č 4ĹćŐş€śŔ ¦'÷Śů~ŢR4÷ěpĚŐÓýíŤU­ýwÎáÂěČwýŽ<Öąő]Ŕ­G8ďÓ ŕňçĆő{aČ[l^­ ȉ `Ş0(En?bş Îľ˛›WëBr"$€á»ÓZa\ {±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€ÉÚýóaćčL9·oş<Žôö-ť^Ťď3A÷ÎťÜý>şÜsyĚ\¸瀽7pĹćŐş€śŔ `¦^'ÇEÉ:\n Ŕ;sőô! Ŕµ¤{î€kűůŢç:u9>–l§0a±yµ.` '0@i—Jűv:Fo˙Ţ›Ťpöřţŕ.˙ŕ»›WëBr"$€™^«áT˙±Ä'ĂŮű˝±úŃĎýíĂиĂ1őy㑳 –ýcv{¤t$gŽź¬ö?=W_ł]Çź« ™ýíĹńŤű(ď«˝ż.řÔŕ|Í׿óëÜvťň}nžkQ·Ľţp˙Ňńóá^={ťý÷Ą:wý7,Çv˙{Ŕ¤ĹćŐş€śŔ `¦ÝΫ?ă+Mw:f{L­Î1ڎEtÜ92–ç/˘fHŻ6ŽiťżŐĺý•?ĎŰÜŻ}OŰ_Óö{ŢA`űÇŹÝýun»Nóţ{ż^w|¬řßeÇ×Ů ×#Żuç0Y±yµ.` '0@i÷ÝŕŘ*Óíçlśż¤eíÇÔę\Ăc‡Ńu4žď±ÚgôúÍŐąéxřčá±»żÎxnDâ‘sŹű»ěö:űăŰĎżóż¬ŘĽZ0 Ě´ §m±Đ¸ó1ŰcjuŽfpÝÍ Hn Ŕ#ço® -ăé^Vo·ŰxËŘĽűëÜvť‘\ŽŹý[4ĹŻµÓëč˙ÍÎFöŮůßLVl^­ ȉ @fúµW®ĆV•ŽŕŹ©Łl96ŠŐyúűď¶Ęu§sncp\}űۏ׸<×öăËăî~?üű» e˝˙ţńűß‚şúqÍĹŠÝćŞÝÍ +mgęĹ1ł_„ÍzĄoáĚőíç*·•×)V÷~żĐďź«ŚĚĂcÚc@Žbój]Ŕ@N`€Ó€‡Ń¶ »Çχ{˝źŻžž®ěmî7˛j¸ą_k5đĺąÁą¶îŢ ,âď;řűÇ޶r?¤ëgÚÁőú™áú`|Ě ŕ~čjëŕ;€ŹѸř˝<ľ:ošűç)‚r [±yµ.` '0@‚iZV’a¸ýé28ű`ČZl^­ ȉ @U­ü-Vż;şi­0.ż˝ŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€ŔLŻŤpöřL9·ŰŁűçĂĚŃąp56öÖ¬†SGg‘ӫ‘±—ç‘bßöżzşźük,Ż»—×ĐPÝkĺÔĺř>pĐĹćŐş€śŔ `¦×”ŕňžŇâéřŘZ˝G‡%WŞľ?¸xý'ĂŮű±±tĹk¦ŘMl^­ ȉ @fzMë ŕtÝcëwç`ŕâ\ű€«o0»‰Í«u!9€ŔLŻ:?9xlp38Ţ;×Ř~ü|¸×?®żÂ¶Ü~r€Ë`ŮÜŻ|Ľňnq¸~\s_3x6ŻÓŠĹ1˝ó6Ć«Ý>W+l·ÎŐ3Vc±µÜÖßżůşFďą08¶żb¸ŇĽ‡â|§.7Ć[çÜ®ş§ąáµĆý ¶ÚęţZˇµř[ďťkpo»GÝÖßżo—×Ů?¦şvý>Ç4µÝ·Ëë _±yµ.` '0@éUGĽ~Ô+Łb[ń¶ą_őó l¶ö+‚_?,Vűí¶Úł †ŤxďÜ\u|ó^б2`ö÷«Ăâ±§ÍřzďňęHě[.~űŢTš»ňšŰîy/źJüßAüu–÷<8w˝ĎŘ÷nď÷@^bój]Ŕ@N`€0¤i‡K„2Ľ ®±yµ.` '0@öf°Rtt-oßŘ\­,®Ę­´ů “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 Á´ŕ«§gÂ‘Ł•S—ăű@’Í/Âě±_„Ů OăăÉî†Ď~öiX{ÔŢţhíÓđŮÝö¶qî~öłđłźUözĚNŠó}şö(:|;±yµ.` '0@‚m=šyl…»wŹhŢö˝cp?×+Š›+€wŽ»Łńرyµ.` '0@‚©Ŕ—χ™ăĂ»±U»Íď®ďĽÎŽ™ g›Źz.r˝oź |m„ ł#ßő;ňXçÖw·áĽO+€Ëź×ďiá"Đn{ôrĄx,s;ć®…O?†áŘŞÝćwWˇ·±Ę÷Óµ°Öxěs‡‡ç*l‹Ç­Ŕ ě‡ŘĽZ0 Át¬ŢOĹjŕö#¤Űʇ†˝*ÂpűÓepŢö=Ŕń•¸Űđľ*ÂpűŇĹŠŕaŚŽ¬&öEl^­ ȉ @Ţ® ľÍŔâ/µVZń·ď톺už*ä–ŰŹ÷ŽoFÍÖ덝đéąáůšďĂŘ{ë‰ŕ2äÎ…Sĺk-ěb«ëŻQÜ{ôuöŹ©ď§ľÇâ{çŞ÷¶ĺ@‡}r›WëBr"$€™fŁ÷ęévĚL Ŕe”ěż—զà [\§że¨,®7QËű¨W¶ßhx-Łksőlz߲šu4J–±±«ănsě©sĹřHŘěďß8¦uÎp1ŢZéÚ ­{Úé;€{F^OóŢq7j‡\ü>˛ wô\UŻ”Áud˙rKű=mßOă|ĺë¬ďŕ5×ű4ď­ůú÷´ނؼZ0 {SÄĹVŤ¦9‹­ä˘bój]Ŕ@N`€0ěŃčŞTńwh\޶2¸ ·ŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH0ŤřŢą“áČéŐčXîĽ7ű`ó‹0{ěaöÂÓřx˛»áłź}Öµ·?Zű4|v·˝­©˙ŮgwŁcoÍŁµđéĎ~>]{ߣůÚ`źÄćŐş€śŔ rŔWOĎ„S—ăcŐ·ąg¸éi¸0».lĆĆvpýF8¶ořQXűôg#ˇ·ÚöłźŐƄнGŇâ|Űsgw?Ýbl?đŁ»ĺ{đmĎQl^­ ȉ ďĽÎ?lřŰݳܴÎë€÷S,¦Ű>] Źęß­­…»ÍńÁö˝ŕř ă®&¶:·\MüYôµŔa›WëBr"$–\†ÍŁ3Ą™ăŤČy˙|©·—úŰ/Ď ·ő?î•ç«"kűĚąŤÁuvR¬ĚÝ~®ţŠÝĆ9w»N§{ą~#ňŽ}orP?®ąX±Ű\µ»yae°mŕLýţÇĚ~6땾…3×·ź«ÜV^§XIÜűýBcĽ®22ŹiŹm…»źŤ®ţ-Á¶Zý;:VĆ×zěÓO!¶~ôr¬ż˝ą˙čŘčJăÝWŰďk¨Ë#×ďßwqýň>‹íź}V?ŚşĹëśk[TŽ­Ž€Ă/6ŻÖ… äDH0¸ ¦'ĂŮűŐďe­#ç˝Ë«@:ş_|5mµm}WĂ©Ö1qĺ51öŢĺóájó~¶ťcüuŇďąýš[űěđŢäŕú™vp˝~ćF¸>ł¸zǵŐÁw$+˘qń{y|uŢ24÷ĎSĺţ>Ą]Í<Şu0-î_ĆÓ~č˝{w°bxtżř ŕ*®Łocźú1ÎMÍ8Ľó ŕv´-÷-V3—÷TĽŽáuš÷?.öűx 4Ó&6ŻÖ… äDH0 ¸\áÚŚŻ­ÇW1t°2¶gOc1µ±íýŰÇÄŚĆܶ"şnŰé:©÷Ľ}˙BqÍťß›<”¸^};ڶ…ťp3ŹŠŕÁw7đ ××oođ|w-o1µŢŻb«€ÚڶĂ ŔŶöţícĆKŔĹľE.ď˝/Űď·0{`¦Ql^­ ȉ `*V—ŹFŽŻrmĹ×úŃĘŁ1µgwŽąă”×l„Ö­űźăxüuŇďąýš[vxor°y}ٱâv4řVŹgnGáž} ŔĹ ŕvôm+ç¶UŻkź¶§< ĺĘÜaČm® m…Ňzĺp;Ź^§ °]âęhnŰknß\ű\0-bój]Ŕ@N`€S€{ʰŮ_ůÚüžŰć÷ćź §ŽŹ¬žm}Żî\¸Zn]QŰßľ“Ńc†×‰ŕŘ1őu:Ýsű=Ř}ëíy}đF¸0»2X}[y¬s뻀[ŹpާŔĺĎŤë÷´‚puÇDĐ"žn‹ĂE4í‡áćw7Űüégáł‘pZ†ŘÁx?ŢŽ®Â~7ďÎÚ«‡cay/¸oľžfÜ. ÝŘS 6ŻÖ… äDH0-ž" ·1]çmß_ĺ Ŕů¨ŢŹ`ĹćŐş€śŔ ŕ˝+ż?w°Â¶Ö|ě3Śh­0.´âo_{U,{y<4^±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€áŰy|ób_ľžEĆv·VćĂü|áJXŹîL“ŘĽZ0 ßĆóp{y>\Ľů¸úýŮzXYZ¨‚îÂr¸ůxt˙¸‡k‹aţŇťđ*2¶ŠŘĽn=‹Ť“›WëBr"$€á[x~;,Ď/†Źz??ľ–ć•őç˝±çáöĄů0ĺÁöc¶yn,·Kw^EĆĆyî\Y Kk›{ŹĆëWÂüĹ›áql ŘĽZ0 Ěô{Ö/†µőßVç^ĽQ­Ř}ód¸m~ľ·Ďfaź­‡µKKaˇÜ>–o Âéłő•°T?¶yiy)Ě/®…‡[ĎĘ•Ŕ‹këkn…Ík˝ó^Y[×ÂâĹ+áƵĺ°X_çfŚëýŠp|q~9Ü~>ÜöäfďĽË·Ăóú÷—럇…ĄFĽ-bnq_Wě€ËóW÷;ÔÜô÷ćŐťpi~1¬=¬ÎńęÎĄF<~ţáćçábý,^ş-*@‚ŘĽZ0 ĚÔ«čŕ߆ǯÚŰ—ŠG"?¬˘o]‹`[Ś˝|>zŢô~~ó`%,Ôöĺú•°PóčMożGáĆĹů°pmłľĆĹĆ#źź…[őَËÇ;/|î<)ŽYź÷îĺĘzż­đěÖňöď޼ֻε°Yüü˛±—Âť—Ťń­Wáůóęţ†Űv˛®4‚îŔ¸÷¦ĚeŘ.~î\ęÇí—aýĘBX\yž˝éŤ˝y®,4_7°›ŘĽZ0 Ě´{|óâöŔşő*üöóŃU±óańĆŁŢŘ›đäÁͰ˛|1,Ö«\ço„G[ŹĂÍ‹UÔ­ÎQDŐ…pmł÷są"·żŞ¶§Xő[DăgŐ1Ë·‹ÇB÷¶—ÁµąÚwä;„űĘGK_ w^+‹Ă•ő—íńTĹýőrCü˝Ů ëWę°]ţŢxťŹnÔ«›>żmĆc`G±yµ.` '0@é6&°n= 7—zŰo<¬ˇüćexôäY9öüvń¸ă•đŕÉóđüŮf¸v±żúµˇóaůÖ“ŢĎŻÂĂ[Ëaˇ}x9ÜzŇűůů°˛8–ŠkŽßrµoë{x«s~^¬~󦱢·wÝ…‹aĄxlô ÄÖŠ•ËEx]Ůľrr˙‘ŇŻ^Ő×÷Ţ×îÝ˙­ŢűńćYxpíâ0ŻłXÍü¬XÍĽ^={ž‰ż$6ŻÖ… äDH 3ŐĘﲍ?˘řĺ?ÜËýľ KáĘíGe ~ő`Ą^ĺş–®¬„K‹őę×­Wasíbµ˙ârř|yqřČč­ÇáöĄŢďőąVÖ«ÜľĂÇBďăq¸µÔż‡ć Ýę±ËóÍďý­•z>mUđ«×+wëëŚ}ožő^K˝ďŇJ¸u­ńhěŢŘť+ëďF^—×ÂĆw»‹Í«u!9€ŔpđĽyr'|ľ¸ä»u` ĹćŐş€śŔ `8@žßý[­Ľ]˝ŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Lcľwîd8rz5:v`Ý?fŽÎ…«Ťmĺë8z2ś˝ßŘŻvőôLo¬ręňpűNÇěl5śęt\†6żłÇ~f/<ŤŹ'»>ű٧aíQ{űٵOĂgwŰŰšŠńź}v7:öÖýŮHč­¶ýěgµ1!tď‘´8ßöŔÜŮÝĎĆ_·ŰŹüčnů|ŰóŔA›WëBr"$Č;o„łÇn§|}Çχ{‘±îr Ŕá̱x?Ĺbj±íÓµđ¨ţýŃÚZ¸ŰlßkŽŻ0îjb«sËŐÄźE_;f±yµ.` '0@‚i ŔŐŁŹ«G"Ďoŕ2¬—<Ř^®˘ml/ ˘j†űŰgÎm ®U\ŁwÍę:sáTýxć~XnŢ[+Ü6ď­<ľ Ŕ­ý[Q¸´ýíµú|㏹N+ň6ÎW^ pý¸ćbĹnsŐîć…•Á¶3őßą8fö‹°YŻô-śąľý\ĺ¶ň:ĹJâŢďăýs•‘yxL{l+Üýltőoˇ¶Őęßѱ2ľÖcź~Ú±őŁ—űcýíÍýGÇFWďľÚvx_CuXą~˙ľ‹ë—÷Yl˙ěłúřaÔ-^˙ŕ\ۢrlu4~±yµ.` '0@‚©ŔeŕĆËň1Čuč˝wyu$¸6#glpµm}÷°2vpŢáůŠ{(ĎŃz\s–Ë{ąNě±ÎĺyG¶őě¸xôŃ×\\§>¶ů>mo¦Ăő3íŕzýĚŤp}0>fp?ô6Žk«ďH>VDăâ÷ňřęĽehîź§Ęý}J»<šyUë`Zţ>ÜżŚ§ýĐ{÷î`Ĺđč~ńŔU\FßĆ>őcś›šqxçŔíh[î[¬f.ď©xĂë4ď\ě-öńh¦Ml^­ ȉ `đh-ď‡Í~t¬€mßa°íź+şĘ¶uLÄ şç«"j?·"kĎŕ^Gëh¸·­')ÇV:—ăŐëľ®=„îCŞŚŔőęŰa´-쀛ˇxT<ľ¸€q¸ľ~ű{Çŕ»kŃx;©ő~í[Ôf´ĆÔX.¶µ÷o3^r.ö-pyďý{Ů~ż…ŃŘ+0Ťbój]Ŕ@N`€S±¸ŚśĂxŮŚ®•¸Ĺ~eÝ€‡«}ÇmŰĹ şnŔăWWvpťI­hŢËNűn›×7+nGoőxćvîŮÇ\¬nGß¶"pn[őşöiëqĘZ®Ě†Üć ÚV(­W·đčuŞŰ%®Ž†č¶˝ŕöýǵĎÓ"6ŻÖ… äDH0¸§Śľő ×Öw7WŔź §FWü¶VČŽ„ÚmŰÇŘ)÷ĆË`Ű?W3ܶîmřŔŰĎŰŘÖ“€ŰęëZŃ·yýi ŔáÂěĘ`őmiä±Î­ďn=ÂyźV—?7®ßÓ ÂEÔA‹xş-Ń´†›ßÜ|ló§ź…ĎFÂibăýx;ş wřÝĽ;kŻŽ…ĺ˝ŕbĽůzšq»4xltcLŘĽZ0 Á´`8xŠ0Ü~Ätś·}p|•k,çŁz_<ţ€i›WëBr"$€÷®µ’w°rvĚJ\či­0.´âo_{U,{y<4^±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€áŰy|ób_ľžEĆv·VćĂü|áJXŹîL“ŘĽZ0 ßĆóp{y>\Ľů¸úýŮzXYZ¨‚îÂr¸ůxt˙¸‡k‹aţŇťđ*2¶ŠŘĽn=‹Ť“›WëBr"$€á[x~;,Ď/†Źz??ľ–ć•őç˝±çáöĄů0ĺÁöc¶yn,·Kw^EĆĆyî\Y Kk›{ŹĆëWÂüĹ›áql ŘĽZ0 Ěô{Ö/†µőßVç^ĽQ­Ř}ód¸m~ľ·Ďfaź­‡µKKaˇÜ>–o Âéłő•°T?¶yiy)Ě/®…‡[ĎĘ•Ŕ‹këkn…Ík˝ó^Y[×ÂâĹ+áƵĺ°X_çfŚëýŠp|q~9Ü~>ÜöäfďĽË·Ăóú÷—럇…ĄFĽ-bnq_Wě€ËóW÷;ÔÜô÷ćŐťpi~1¬=¬ÎńęÎĄF<~ţáćçábý,^ş-*@‚ŘĽZ0 ĚÔ«čŕ߆ǯÚŰ—ŠG"?¬˘o]‹`[Ś˝|>zŢô~~ó`%,Ôöĺú•°PóčMożGáĆĹů°pmłľĆĹĆ#źź…[őَËÇ;/|î<)ŽYź÷îĺĘzż­đěÖňöď޼ֻε°Yüü˛±—Âť—Ťń­Wáůóęţ†Űv˛®4‚îŔ¸÷¦ĚeŘ.~î\ęÇí—aýĘBX\yž˝éŤ˝y®,4_7°›ŘĽZ0 Ě´{|óâöŔşő*üöóŃU±óańĆŁŢŘ›đäÁͰ˛|1,Ö«\ço„G[ŹĂÍ‹UÔ­ÎQDŐ…pmł÷są"·żŞ¶§Xő[DăgŐ1Ë·‹ÇB÷¶—ÁµąÚwä;„űĘGK_ w^+‹Ă•ő—íńTĹýőrCü˝Ů ëWę°]ţŢxťŹnÔ«›>żmĆc`G±yµ.` '0@é6&°n= 7—zŰo<¬ˇüćexôäY9öüvń¸ă•đŕÉóđüŮf¸v±żúµˇóaůÖ“ŢĎŻÂĂ[Ëaˇ}x9ÜzŇűůů°˛8–ŠkŽßrµoë{x«s~^¬~󦱢·wÝ…‹aĄxlô ÄÖŠ•ËEx]Ůľrr˙‘ŇŻ^Ő×÷Ţ×îÝ˙­ŢűńćYxpíâ0ŻłXÍü¬XÍĽ^={ž‰ż$6ŻÖ… äDH 3ŐĘﲍ?˘řĺ?ÜËýľ KáĘíGe ~ő`Ą^ĺş–®¬„K‹őę×­Wasíbµ˙ârř|yqřČč­ÇáöĄŢďőąVÖ«ÜľĂÇBďăq¸µÔż‡ć Ýę±ËóÍďý­•z>mUđ«×+wëëŚ}ožő^K˝ďŇJ¸u­ńhěŢŘť+ëďF^—×ÂĆw»‹Í«u!9€ŔpđĽyr'|ľ¸ä»u` ĹćŐş€śŔ `8@žßý[­Ľ]˝ŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ &€/Ď…#GgzN†ł÷#ă0Ĺbój]Ŕ@N`€okđŐÓ3aćÜFt ¦Ul^­ ȉ ŕmŕS—ăc0­bój]Ŕ@N`€0LNl^­ ȉ ŕmŕBŹ?îEĆ`ĹćŐş€śŔ Ţć `ß @nbój]Ŕ@N`€o3{4ą‰Í«u!9€Ŕ09±yµ.` '0@‚·€=€ÜÄćŐş€śŔ &€/Ď…#GgzćÂŐŘ8L±ŘĽZ0 ÁŰZ 9ŠÍ«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€ěçĹâ@cj€­rţ,6ŻÖ… äDH°źżůć›č[`«ś?‹Í«u!9€ě÷ĹâClń?¤±¸Łbľl?ăoAr"$đAóz@N`€>(Ŕác^ȉ ŔE8|Ěë9€ř ‡Źy= '0@ŕđ1ŻäDHŕ">ćő€śŔ |P€ĂÇĽ Špř×r"$đAóz@N`€>(Ŕác^ȉ ŔE8|Ěë9€ř ‡Źy= '0@ŕđ1ŻäDHŕ">ćő€śŔ |P€ĂÇĽ Špř×r"$đAóz@N`€>(Ŕác^ȉ `ż?(~óÍ7ĺ˙nmm=Ĺ|Y1o›OëJr"$ŘϊŇŘŘ\`k_#° äDH°źżţúëč[`«ś?‹Í«u!9€ěçĹ?üáѶŔV9›WëBr"$ŘĎбµŔPl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ &€×—ÂÜÜ\ĂÇá“_®‡§±}÷ęËĄpęĉđńÍČ ±yµ.` '0@‚‰ŕŐąđŢ{ď…÷Oś'Jď—żż÷á'a#¶˙^ěK^ sĹ}Ě­FĆ`ÄćŐş€śŔ ŢNţ0|˛1ÜöŐüloŰűáŁŰŤýú^żnüţ:Ľřę«đôEc|/ž~ľzŃ<~čő‹ŢŘÓŤmo/_==Ží9~>Ü‹Ś0=bój]Ŕ@N`€!omü4|đŢ{anµř˝ ±Ěý4|ôáű•ÁK§Â‰"ĐÖŢźm¬Ţř$|88ľç«_†žîűމŹÂj?żX 5ÇĘ{Ůź|ŘÜö^řđ“Ťj˙ďÜj8uôd8{?6Ŕ´‰Í«u!9€\?zîď‹ß땸='N}>YÝ/ž^ §zżż?÷ËđĺW_…/o~\ß~ş^ß Ŕ/Â/Đ;ţĂŹĂÍ/ż _}ůË0÷~ď÷zeď폊GN>ţűőđUď\…bEqqŤ×ýáĄÁ¶ÁýEüţ÷żkkkÉcŰm„łÇ`€\ÄćŐş€śŔ ŢN>~8żVW ź„öýąz•n€[+pËc>?Dă§ai¶wĚěRxZüŢ ŔŰŹ_ť+‚p±b¸^éűKáE=6´÷G@÷łĎ> ögţň/˙˛5öâĹ‹đţűď‡?˙ó?żúŐŻZcqVä$6ŻÖ… äDHđvđ{-ďđ0żŢ˙®Ţq¸˝jxu{żGđč5Z8y÷€ ýĐŰŚŔÍm~řá¶cFÝ;w2˛›WëBr"$x;xäĐ-ăpÚ ŕ~r{đçŇÓ˝±ťVß5˝ÍŕűńIńwČ `€śÄćŐş€śŔ E~şf{ŰööŔ_…ů"0~ąŢŔ/ŞĆŰľřËŤđeůčé:źš/ݱŰw÷ő#đ;ďĽÓ!ţ|0@Nbój]Ŕ@N`€‡"÷l,ť 'zŰűŹt~¶~üsˇ€«ß‹`ÜzôG7«±˝óźhŽ ďeă“Ű?řiűú;)"đ‰':ÄßB±x.\ŤŽ0mbój]Ŕ@N`€ŔßĘëđ"¶:÷|"üäN{ű‹§Ĺęßáuc[ßë˝±ň±Đ#c/žĆ·g< '±yµ.` '0@‚Ă€#žţ}řč÷Â{ďnÇĆ«§g‘Ł=Çχ{‘q¦Gl^­ ȉ ŕ°ŕň±Í|VżŚŹŔA›WëBr"$8ô+€ŕ‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€Ç»zz&9:®FĆČŘćaöŘ/Âě…§ńq€ÄćŐş€śŔ ŕq6ÂŮăű€‹sť gďÇĆx{ž† ł+áÂfll×o„c0ĐQl^­ ȉ @ž„ŐpęčÁ Ŕ߼ű˝đŻwăcÓm#ś9Ö!| ±yµ.` '0@‚©Ŕ÷χ™ŁsáTůČćĘ©Ëýń"ľÎ…«ĺ>ŐŘĚąŤjěňÜ`˙ćJßęŃϵăçĂ˝zűNÇŚ;îŢą“Ťýk§W‡ç‹(Î3sî|ďľëý÷ĐşĆ *Wy¦\±|˛÷>T׼ÎĆkłţřýď…?-řťŢď†ýކŕúqÍĹŠÝćŞÝÍ +mgę÷«8fö‹°YŻô-śąľý\ĺ¶ň:ĹJâŢďăýs•‘yxL{ ČQl^­ ȉ `zđ0ú–ŃuM‹8:ł=ä–Ç chVc±·ą­ŚżĂč[^§ŽąŁÇß»|>\¬řM[\EŢţuŞűŻ^Űj¸:Űő~ĺő‡űŰŠđ;¸·‘×Ů|MĽ{·ŚżáťBďö¶ Ď? ®źi×ëgn„ëń1+€űˇwl¨­ďH>VDăâ÷ňřęĽehîź§Ęý}€lĹćŐş€śŔ ¦'ŹDÎV@Ý_Ű‘¸g$î¶5Łnl5o9^}_đ`Ĺí6đ`•p3÷”÷9zýáů‹c‹}xt˙Rău.Ľ»ď†?˝ónř¦żmĘ”¸^};ڶ…ťp3ŹŠŕÁw7đ ××÷˝Á@l^­ ȉ `pPávL|݇ŔMŰŽżżŃ8×HÄÝĹŘ\ŢóđúĂkî€GăxËBřÓ÷ľţXü\†ŕ…Č>‡ŰćőŤĆŠŰŃŕ[=žą…{ö1+€E_ )6ŻÖ… äDH0=x¦±Âµ<ÇŕBkul$ěŽŕţ¶Ćµ†«~«UŔͱfđm­=ç±xä§N÷ďo‡\ścôýś{Úm„ ł+Ő·Ą‘Ç:·ľ ¸őç}Z\ţܸ~Ź y‹Í«u!9€Lă ŕýRFÔ]b-ŚW„áö#¦Ëŕě{€ k±yµ.` '0@xDkµěţGĺˇjeď`Un­ąjĂŻµÂ¸ ţ@öbój]Ŕ@N`€S€ŕÍ«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `x»®žž GŽVN]Žďł›ň§WŁcĂj8UĽĆ}Ź0±yµ.` '0@éµÎoDÇűçĂĚŃ“áěýŃýޢËsáČŃąp566F{GCńŔĺ{żO÷Xśëřůp/6‡@l^­ ȉ @fzřdé)Łď Ŕ÷Îť G’bfµ]ŢOE4€8Äbój]Ŕ@N`€0Ó«ŽĄ§çŞ8Ú ŔőęŕúŃËU¸ĺęŇ“ŐjŐ޶Sőă™Áµ\±;rĚŽÚ×™9·Qoܴ݉[Ôl]»}L€{÷;˛}űq{¸ç2°öÎ5¸ďF4ﯾmśł˙Ţ”1»ťÁőŰŻsřú+ĺ}÷Ç[;vÜč߬Ňő±Ůđ¶ÄćŐş€śŔ `¦Wµlńß“áěĺFľż®VWű•‘q‰űÇV‘˛+Łç0 –Ás—U·­•ąĺąŰÁr_Wî­Š§ĺ>îą:f}cŻaŰ9ZשîqtźÁűŘř}¸OóuU÷?Üw#\=·ÚÚIď,±yµ.` '0@éŐŠ—çÂĚąóáT#l¶V¬öŁf8‹Y[íŰ—Űö/ě"!¶ü˝şźfÝ×<©Ăë¦ßsO,÷ŹĽ?Ťý{Ú׏ż®v®^Ç轕ă?<¶Eŕ‹Í«u!9€ŔLŻf,íý|şx´s[±Ž‘»ŕŃ0ş­0ZŻžmĆŰ®¸‘ ăp—{nÓxoŠßÇŕŹ©µđč=7Ť®î˝O÷Ż·Ëk€$6ŻÖ… äDH 3˝ŞŮ®ŐjŘţĘŇ*2V+OO†S§{cEŚÜ)ç,ăc˙¸í!v»:†ŽŮ?=÷´îˇ ˇcđ¶ý÷pĎ#ű·bë¸ÜS˝żő1‘×4€űۆ×i¬ú­cůp¬yÍťßS8čbój]Ŕ@N`€0Đňť¬°­˘­X 0@0@hŮÇĽŰŞ`ČQl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€ąŕ{çN†#GO†ł÷ăăCáěń™0sn#26N—c8´6żłÇ~f/<ŤŹě 6ŻÖ… äDHKľzz&€‹í§.7· Ŕůx.Ě®„ ›±±\żŽ Ŕ@G±yµ.` '0@‚\p\nłŔwżţýÝ…řX¶6™c0Ŕ·›WëBr"$–\=âąXĺŰW­ömoź WűÇ\žklŻ?îőcîéą0Óß~zuxLąOqŽfô­>޸V˙ťÜ?ß;¦wľĆ˝ôctµbyä\Ĺţ˝×pŞ16Ś×Ő=ô·côBřÓ÷ľţXŕâż ď†S®×\¬Řm®ÚÝĽ°2Ř6p¦~ĎŠcfż›őJß™ëŰĎUn+ŻS¬$îý~ˇ1Ţ?W™‡Ç´Ç€ĹćŐş€śŔ ¦#݆SÇ;W!´˝Ş·§Ž§\Ší[‡Ô~č-Ź«Ď˝Kn‡Ú=|ßpą_ă¸ZŰ÷Xďßżß2n×÷Ó:¦ąßÝ»Uü}çť Eü-¶•çž~×Ď´ëő37ÂőÁřŔýĐ;6ÔÖÁw$+˘qń{y|uŢ24÷ĎSĺţ>@¶bój]Ŕ@N`€Ó˛¸˝˘w4ôö”Qtďx°‚¶sw[ŕb°č 4ĹćŐş€śŔ ¦ep@ëŐ˛•‘°:&¶n_9ĽC®WÚ–ű?Îö®Ů ŔÍďŢuőoaÜ=ő´_O}ý:ěnŰ^SGčz¬µsµ.Ě® Vß–FëÜú.ŕÖ#ś÷ipůsăú=‚0ä-6ŻÖ… äDH0¸¸­ł{|óaÓŠŃ|En?bş Îľ˛›WëBr"$ŽŔŤ•ąµďť® |Źp"řĐi­0.ż˝ŘĽZ0 Át`8bój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@¬Ý?fŽÎ„™sńń¦ËsáČŃąp566ĆŐÓ3áČéŐčŘ—ňŢáěńŢ{Ţ»ď#GO†ł÷cűě¦:ÇÁ~Ý«áTńëż-€ĚĹćŐş€śŔ `¦]aË Řsü|¸×/Łn$öŰGăZn8ĺ˝9 îť;ąýoĽŁ"öކâC€ë8ż/‡ü÷V±yµ.` '0@iVŘFĽwů|¸ş‡UˇeHĚ=Ź}oô÷»XI{đ>:ČO€i›WëBr"$€™^ŐcrO]ŽŚőWPÖ†űÔŹÖm©a€O V÷Ăa çh„â*@ź^kO«S‹{č߸ÇAŚlÝ÷0\×™9=˝Nř"ŰGßř5öřŢěpťb{qîň˝(Ç‹÷¦:W3˛î-ŢVďu˙:ăîą´ËąZ÷Ű:¦ŔÍ÷ły®ňďŰ?f÷˙»ým¶ż7ĹŘ×9ň7hľăŹé‰ţMwţ{đ݉ͫu!9€ŔL­2zŐA«ŔÚAx$ŢÖĘ88ëđ×ßw,Gα-÷_ÜFݵ]ćš±¶Đ|=ĹďĹuę}Ć^§q/@Xż®áýWç»zz4f¦ľ7ńëôCë¶×ݸ˙굍^»Ö=×ÓćyG_ÓîŠ÷j4zÖ÷ßş·zźÖëó^ŚŘéßŔ¸÷f·×Ůßgy«{n‡âöżýáń˝}Ď ďy/Ż€ý›WëBr"$€™^íŘš±m{‰śÍH7rŽĆ~í 9éƉEÉžňĽ˝óµě|ťööúu bd}\}®Ń÷ ĺ˝Ůé:ăăđüă÷iŠ˙=›ďçč}ě.ö^Źś·€ËűĽ÷µĆű3îoSüÝ»żÎBqŢá¶ęŃ{+Ď1ňďvÔŢŢ{öSl^­ ȉ @fš•ńmč†Áq¸Ol[ĹFĂŢ.¸ăĘíÍ0Ű?Ď•śŰŤ ŔÍ•¨Íí=Ă{éď‹Ő}ö÷»wyµńúƇĐô÷fä:;Ćâ¸Óç{űÇ_ר±Ż36ľ'ٱµĐţ{¶Ţ÷]bjĚN÷<î˝Ůíuö÷ŕ‘{nÚvüF¸×xŻŁOľS±yµ.` '0@iWôٵmˇ+9GWT–ăcpŃúűž+‚Ű0ĎŽEÝ6cpˇŽyýóőŻßzŤŤí…ć˝ _˙j]ÇSIxozŰă×9+íXĽ»z˙ú:Łďgóo˛WŰď{$¦6pń{ůď`ü=ŚÚőo˝ßť_gˇü·ŐÚŢ>¦ŞGîąý˙âOľ;±yµ.` '0@ż.áó`­Ŕť.ßÍßf$Rp¨ÄćŐş€śŔ `8ü_®Vťöąź›q«¬8\bój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€L<_ž GŽÎôś gďGĆ`ŠĹćŐş€śŔ ŢÖ ŕ«§gÂĚąŤčL«ŘĽZ0 ÁŰ Ŕ§.ÇÇ`ZĹćŐş€śŔ `śŘĽZ0 ÁŰ Ŕ…"9~>Ü‹ŚŔ4ŠÍ«u!9€ĽÍŔľ€ÜÄćŐş€śŔ Ţföhr›WëBr"$€`rbój]Ŕ@N`€o3{4ą‰Í«u!9€L<_ž GŽÎôĚ…«±qb±yµ.` '0@‚·µr›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$ŘĎŠĹ˙€Ć>Ô[ĺüYl^­ ȉ `??(~óÍ7ѶŔV9›WëBr"$ŘďŠĹ‡ŘâHcp GĹ|Ů~Ćß‚ äDHŕ">ćő€śŔ |P€ĂÇĽ Špř×r"$đAóz@N`€>(Ŕác^ȉ ŔE8|Ěë9€ř ‡Źy= '0@ŕđ1ŻäDHŕ">ćő€śŔ |P€ĂÇĽ Špř×r"$đAóz@N`€>(Ŕác^ȉ `ż?(~óÍ7ĺ˙nmm=Ĺ|Y1o›OëJr"$ŘϊŇŘŘ\`k_#° äDH°źżţúëč[`«ś?‹Í«u!9€ěçĹ?üáѶŔV9›WëBr"$ŘĎбµŔPl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ &€_„őK? ?=Nś8>8őĂ0÷ń'áćW±}·»ůqď¸SKáËČt±yµ.` '0@‚Iŕ;?ů Ľ÷Ţ{áÄěĂÜÜ\űá©đÁ‰Sa~#ľ˙¨IŕŤO>ěÝç‡á“=ŢěEl^­ ȉ `˛x#|ňá{á˝\ /˘ăm/ž~^ĽŽŹŤÚyß×áĹWOÇ\óExúŐöcßZľ>Ěť GzN]ŽŚp¨ĹćŐş€śŔ ŢJţđ§a}L¬]ťëŤż"śxż÷ß÷*łźl´Ç?ü$lô~®"íűáĉáľüäö ôn?׉pęŇđ\_ýň‡áD}\áÄG«Ő±«sm•ą°Zóűß˙>¬­­%ŹĹÜ;w29˝ŕđ‹Í«u!9€L6o…ŤůŮ:Şľ>8őQřäď7Z+s«hű0çËđŐWwÂO‹`üţGávsĽ€? ýýzoßőpéď—ż÷Wí¶ÎőĺÍđ“â\ýűâ—á˝űřđă›áËŻľ _ţr.Ľßű}nµ7öúE¸]>Şúđ“Ű_őÎý"Ľ®Ż?ŞĽź}öYřł?űłđ—ů—­±/^„÷ß?üůź˙yřŐŻ~Őëňś 0Ĺbój]Ŕ@N`€“Ŕ…ż ?ůÁěpe°ú˘kŢâ÷§KE0ţ0|ňĺöń*7VçŢůIą˘·Ś¸#űżż¸ôę\E .Wů6ńĽćŠ \Ż6Nyt?ô6#psۇ~¸íq¬n±yµ.` '0@‚·€‡^‡Żę•·~ňeąm4ÚŽ†ÚđĆ'áĂŢąfçżÚá\ď…ŹnŐ%šÁ÷/ţâ/:ÄßŐpŞřî_ń`ŞĹćŐş€śŔ Ţnîyq©zs^żUN^ÜÄóĐÓz%ň`ĺńpˇßyçťä•ż}VL·ŘĽZ0 Á¤đWwVĂęßß)żw·řŢŢ_Îßµű~µ*·7ž€.ŐçŠ~đ? ·‹ńŃďţj>Ěľ÷^ř`î—a˝Žż…Ż›×=>ľYl˙ŔŁŠ|âĉNń·ä;€¦Zl^­ ȉ `˛ř«°tŞ´Eí{?ĚţôNxQď“€GÎUŻ$ěŰ?>Z}1ßř¤XĺŰާ˘·^ü}ëGń{?®2ţŽ+€gÎ _Ó%6ŻÖ… äDH0éŔ}/ž+kźÂoG@żx=W?ŻżŘiď‹đ´XýűâuděuxŃ\< 0Ýbój]Ŕ@N`€o+ď‡mß›u„}¶Ö.-……rű|XXľ5§ĎÖWÂRýŘćĄĺĄ0ż¸n=+W/®=¬Żą6ŻőÎ{e=l=\ ‹Ż„×–Ăb}ť›E0®÷+ÂńĹůĺpűůpŰ“›˝ó.ßĎëß_®–ń¶ąĹ}]y°{.Ď_ÝďP˙qÓcŢ›WwÂĄůŰö°:Ç«;—ńřyř‡›ź‡‹ő{°x鶨 bój]Ŕ@N`€0SŻ W~żjo_*‰ü°Šľet-‚m1öňQxřčexÓűůÍ•°PÚ—ëWÂBqĚŁ7˝ý…çõÍúŹ|~nŐŹ†.ďĽđy¸ó¤8f=|Ţ»—+ëýý¶Âł[ËŰżCxóZď:×ÂfńóË"Ć^ w^6Ć·^…çĎ«űnŰÉz¸ŇşăŢ›"0—a»řýU¸s©·_†ő+ aqĺAxö¦7öćA¸˛Đ|ÝŔnbój]Ŕ@N`€0ÓîńÍ‹ŰëÖ«đŰĎGWĹ·ĹŹzco“7ĂĘňŰXŻrť_Ľm=7/VQ·:GUµÍŢĎĺŠÜţŞÚžbŐoŤźUÇ,ß. ÝŰ^×ćjß‘ďî+-})ÜyU¬,^ WÖ_¶ÇS÷×Ę ń÷f+¬_©Ăvů{ău>şQŻbnú<ü¶Ź€ĹćŐş€śŔ `¦ŰŔşő$Ü\ęmżń°z„ň›—áŃ“gĺŘóŰĹăŽWÂ'ĎĂóg›áÚĹţę×"„·ĺ[Oz?ż o-‡…~ô}PŕĺpëIďççÂĘâ|X*®9|ËŐľ­ďá­Îůy±"ř͛ƊŢŢu.†•â±Ń[+V.áuedűĘUČýGJżzU_gÜ{S\»w˙·zďÇ›gáÁµ‹Ăx\ĽÎb5ółb5óVxőěqx&ţ@’ŘĽZ0 ĚT+żË6ţâ—˙p#,÷Wř.,…+·•1řŐ•z•ëBXş˛.-Ö«_·^…͵‹Őţ‹ËáóĺĹá#Ł·‡Ű—zż×çZYŻbr;ř =ĽŹÇáÖR˙š+t«Ç.Ď7ż÷·Vęů´UÁŻ\¬Ü]X¬Ż3ö˝yÖ{-őľK+áֵƣ±{cw®\¬ży!\\^ ß] ě.6ŻÖ… äDH ĂÁóćÉťđůâ’ďÖ€)›WëBr"$€áyV|÷oµňvýYd8ôbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH “«§g‘Łsájd¬?>sn#:öÝZ §ŽöîíôjdlÄýóa¦Ř·pü|¸ŮçŢą“˝ń“áěýícß©Ës;ľż1Őߤręr|F±yµ.` '0@é·Î/Bă Ŕý¨»—\+#ď\EŐĂ€+Ußź\üť÷ńµŻ)áď{›WëBr"$€ám®N·S~kD.ε¸|ź`ľ±yµ.` '0@iÖ|Ěđh4Žť 3Ç÷€[çkĎţ*ăĘđ\E”ěí×x|s5V?úyŰţ=ÍG=F"d,WŹ~îÓĽŻöuÚçwĎŐëŕâ÷:boż~Ą ­őXyÍŃýwy˙ššçţ˝ăŻłĽÇÁ=×ű´ţŤ4ßçŃżt›WëBr"$€e×UĂp¸ĹćŐş€śŔ `ŕ@€r±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@&'6ŻÖ… äDH ŔäÄćŐş€śŔ `śŘĽZ0 “›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕhó‹0{ěaöÂÓř8Ŕbój]Ŕ@N`€0ůz.Ě®„ ›±±\żŽ Ŕ@G±yµ.` '0@|m„3Ç:`€o!6ŻÖ… äDH05řň\8rt¦6®ö¶Ý;w29~>Üëý|őôL9·¶îź3ĹxýßłĹ>őq§.÷Ď·Îďź«>®ľNqžS—ăőů÷ÁÁR?®ąX±Ű\µ»yae°mŕLýw.Ž™ý"lÖ+} g®o?Wą­ĽN±’¸÷ű…Ćx˙\edÓr›WëBr"$Š\ĆÜ“áěýę÷"Ň–av°}5ś*bíéŐ*˙-džqw‹«¸;ŚľĹ±#çnüÎÁvýL;¸^?s#\ŚŹYÜ˝cCm|Gđ±"ż—ÇWç-Cs˙ż7ľăwä|đa˛.Ě® Vß–FëÜú.ŕÖ#ś÷ipůsăú=‚0ä-6ŻÖ… äDH05ś" ·1]gß Y‹Í«u!9€ŔđÝi­0.ż˝ŘĽZ0“â˙®~¶V–Ş »°n>Ý?îáÚbżt'ĽŠŚíź"6/‡[ĎbcŔ¤ÄćŐş€śŔ `řžßËó‹áĆŁŢĎŹo†Ąů…peýyoěy¸}i>Ě_y°ým…‹óáŇťW‘±q‡;W–ÂŇÚćŢŁńú•0ńfx&&6ŻÖ… äDH 3ý†µĹ‹amý·ŐąoT+vß<n›źďíłYGŘgëaíŇRX(·Ď‡…ĺ[púl}%,ŐŹm^Z^ ó‹kááÖłr%đâÚĂúš[aóZďĽWÖĂÖõ°xńJ¸qm9,Ö׹Yăzż"_ś_·ź·=ąŮ;ďňíđĽţýĺúçaa©o‹[Üו»ŕňüŐýő7=ć˝yu'\š_ k«sĽşs©Źź‡¸ůy¸Xż‹—n‹Ę 6ŻÖ… äDH 3őęzqĺ·áń«ööĄâ‘Č«č[F×"Řc/…‡Ź^†7˝źß,\۬Żq±ńČçgáVýhčňńÎ ź‡;OŠcÖĂç˝{ą˛Ţßo+<»µĽý;„7Żő®s-l?ż,běĄpçec|ëUxţĽşżá¶ť¬‡+Ť ;0î˝)s¶‹ß_…;—úqűeXż˛W„gozco„+ Í× ě&6ŻÖ… äDH 3í߼¸=°n˝ żý|tUě|XĽń¨7ö&_^>2zëq¸}©÷{}®•ő*&·ďđ±ĐĂűxn-őB·zěň|ó{ke žO[üęÁµÁĘÝ…Ĺú:cß›g˝×Rď»´n]k<»7vçĘĹú»‘ÂĹĺµđ ńÝĹŔîbój]Ŕ@N`€0®îár|\n×8Sý¸ćbĹnsŐîć…•Á¶3Ăcfż›őJß™ëŰĎUn+ŻS¬$îý~ˇ1Ţ?W™‡Ç´Ç€ĹćŐş€śŔ ˛Y\ÝŃ`›¸¸ŚżĂs”qůôępśçú™vp˝~ćF¸>ł¸zdžÚ:řŽŕcE4.~/ŹŻÎ[†ćţyŠ ÜßČVl^­ ȉ @Ţ{nŻ&®5W s •¸^};ڶ…ťp3ŹŠŕÁw7đ ××÷˝Á@l^­ ȉ `ÚđĚą1«6wŔŃcö°oóúFcĹíhđ­ĎÜŽÂ=ű€‹Ŕ˘/Đ›WëBr"$žÜłÓ÷óFpĎÇ\=ÝßŢX%ÜÚ‡ŕ̰.ĚŽ|×ďČcť[ßÜz„ó>­.n\żG€ĽĹćŐş€śŔ ¦*ĂR„áö#¦Ëŕě{€ k±yµ.` '0@ľ;­Ćń˛›WëBr"$€`rbój]Ŕ@N`€0LNl^­ ȉ @€É‰Í«u!9€Ŕ09±yµ.` '0@¸rďÜÉpäôjt Z6żłÇ~f/<ŤŹě 6ŻÖ… äDH Wŕ= fWÂ…ÍŘŘ®ßÇ` ŁŘĽZ0 \I Ŕ ď†˙ţÝř‡ČF8s¬Cřbój]Ŕ@N`€Ó€WĂ©Ł3áHmćÜF˝}#ś=Ű^GßţöăÍ<ć»ß˙ţîB€Cďżüţ÷„ŕ®~\s±b·ąjwóÂĘ`ŰŔ™úď\3űEجWúÎ\ß~®r[yťb%qď÷ ŤńţąĘČ<<¦=ä(6ŻÖ… äDH0¸ŠżÍč{őÜj¸×űůęé™aŘ˝>Ěôö;uą˙óÉpö~uŽá~Uüž«8w˝ßÝ»áŹEü}çťR˙ŘŰVíÇAtýL;¸^?s#\ŚŹYÜ˝cCm|Gđ±"ż—ÇWç-Cs˙÷Ν썟 gďocZ= ff/<ŤŚupýF8vě•3ń}v›WëBr"$¦Ŕe䀯ž.±ś—}Ŕµëg` »ŘĽZ0 A. ŔŔÁ›WëBr"$ö\=úą~<ôŃąpµ?V>6z.śmŚźşÜ?n#ś=Ţ?f&Ěś«cßĺąňügËŐÄ…ćŠâŐpŞŢż}®ţęăľĆ=đ«đěJôŃÍ›Űgż›ă6™ţöž3×űŰ+ń\]«Ě :o~fçWnż.4îaô:đ˙oď~Zäş…_k”Q>Ŕ˝ď§ĐHţi°…59ĽÄkŇÎäť43ŕL"„Ŕ1Gş–Ň’8 Â`Čöµdş118[`a”ür_20!„ukí?U{WŻęîµÜÚęîő¬Ţ˙wUuë§µ‹“)5®VBj"d¨fp|Çxwű¶ńw}›°Ű…Ţ€q· »[ł?/íÓl×íÓśgŠg?ŻĎŹÍ«ŐEŮQt˝®ěĚţÜ|źďĂp×vKł†›íş}şăîŔKű4ąÝgçţö",Ďß…á~ź&FŹ"4pRĄĆŐJŔ@M`€ uŕE]ě;žÉŰk˘ovÇŕĺČŰc> ¸YßkŐőń ¤Âl;Óv9âÎě0Ň.íÓo»;Źg ŹgôvqyyůŇy`¨Gj\­„ ÔDČ ·?Żž<°*/ď3śüăV¸3xtsžfźĹ2^•áĚŢŮĎĂŮĽŻtđxŰůňnÖŻ uKŤ«•€šŔNRď öFŔńçńwĎŹµ2ÇźÓßüäŇfXk8SW« łďÎä-ýŕ>äŽ÷ë"ň|ż..7ąßöax¶Ť uKŤ«•€šŔNV€Ł-5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2śüôrX;łNGg/‡'©mŕHŤ«•€šŔNŇ ŕ'—Î Ŕi©qµ0P |týôć៦×p<ĄĆŐJŔ@M`€ '>ml –o†‹qźnÝúíű̬]Ú?ŢŢ;\<Ű-Ź?ÇuËŰ7ŰýîlŚŹuzvŢ;c,ďó÷÷Ţ˙Ľđ©Ů? ˙xC8)Răj%` &0@†“€źÜŢZüÜ„ÝóáâÓţĎ‹č:Ü7ŰŃň>ď€ďĚÎÓlÓo×GŢ.4·Áw+¬÷ç_Ču˙ôÓ&ţ†SQŚżźÎ–Ĺm8îRăj%` &0@†?xi–mÔĚôĆŕ]űĆ»´}\ľ× ŕĄ}N/»_ľâ˝ůą®˝›o†žz3üÔlŔIW+!5€2śô<śÍŰĎúÝ/Ç}ć!vh×ĚŢţŘm …âţŘq»Ąkj-äˇkáźoĽţ˙Ü„ŕk‰m8ŽRăj%` &0@†“€Çłj»PŰÄŘnŮŮͰއڽf÷é´qwpüٶ—ÝŻŰťg~ěÝ3‘zy]˙¨hŽ•îÄ÷0ůRăj%` &0@†“€CŚĽăgĎż8S ĂŁYľKá™×ăoű[xđŕAöş”&ţ~>€ú¤ĆŐJŔ@M`€ đnMđťĎĘ-ŹżŤÁěĐ–řűşĹŔűűß˙>üâżżţőŻGëž?Ţzë­đË_ţ2üńŹ­[)΀€JŤ«•€šŔ`jÔ‡Ţa.{÷ÝwwíłŠŔ@ŽÔ¸Z ¨‰ A¦VĂŕűÎ;ďÄßî;ˇĹ_ Cj\­„ ÔDČ Sł>ź:u*{ćoĎ ` Gj\­„ ÔDČ S»Ďť;WľČW+!5€2ŔđóÄŔk—¶“ë–ĄĆŐJŔ@M`€ 0ü< äHŤ«•€šŔ`ř™ž^kgÖÂé™őۉő©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕp8ľyt#\ýŕăđ,±îŐú!|ţŃőpőćŁđmr}¦o…›WŻ†ŹľH¬ăŮ wŻ] WgďŐŐ«…Ď“Ű\űůý$|źX·ĘÎÝkÝůgź—ĎÓŰ?߇/îÝ ×šűşn}öCb›rĎ>ţ`ţšÝxôMrŕäKŤ«•€šŔ`8 ߇O>x]Aç‹đŃŐ«áćĎý,|üÁµpw'µîÇđíŁ›áęőŹÂç?¤×sĎ>woöqôz¸őčËđCj»CđŐëáꇏË募‰«áOľO¬ŰÇWÂő«†Ç/ëríÜ ×íQěý9_Ąy=o> _żśýüňex™Řćg{ń8|8ű\<ř*±¨Bj\­„ ÔDČ Ă!řţ“đÁŐëáá׉uGÍ7ŹÂŤC1şŻvÂn†[źT6ËńĹáŁkqćhS_~;ű ć×/wow(ľŻ_ >~‘X—ˇůü~>~–X·ŹŻF€n}ţŃ!ţ#Š˘ĎůçᣠÂě‹Ďn…«×„Żë€:¤ĆŐJŔ@M`€ 0”yöůÝpł{ďÍâ¬Ů>č|ľ|t+ÜčÖ]˙đ“đMbź«×n†Ź÷±ëeřöł{áݬŃŮş_¶ŃđĹăĂŐ[‡ťů1o…Ď_ľŹ?ěŽ cRś‘yýĂđŃ­íclgţ䛸.Ć­Á>ŤáQ\×Ěâ\,Ĺ—ß~¶Í:»®{;í#q›ëúŕ^řřŁîqą×> źf6Źž-?řĚäâË{ł×ăZřŕáNxg‘Î×˝_}rwń_˝î}1{ťc|˝v#ÜĽ—ÍŢ·»×g˙˝î}9Űgĺ{Ůi"çá“ďËšĎŇŕsvăAŘŮgvnó^޸î%ŢËŃű?űĽ<ŘĆćoÂŁŮuŹg\ż>ü¨˙ĽÎţĽĎ?č?+#}Ţ®˙ţËđ¨ż˙á±~łh»ľ?ě„{7®‡[ŹźÍÖíń9śs¬ť=ާ‹Ç/ż źÝ]<ú潝ůlîôďćđ¸i1t_›g¸ěŮç‡ó×yöůů¸»Ďř¸ńQxxďîwtv/Ý?4ůáËGáÖüóÔşţ૥YáńýčŃ˝â3·űař:wş˙_Ůű3”HŤ«•€šŔ`Č÷Ăç…k×>73;żoôA'~ďµpýîmü{gvńé‡OšÇľŢý˘ ¨_í„/›Ç,ż_ÄčwóAŘyŹ÷2|˝óĺü»Xc,ŠáďŃÎłäăhăú}úź›řsă^{¬—ź…[W݆›Ç0×·ÁnĺŚŃ&(çŰ|pŚŃ1đ˝ _Ţ‹Ç~ľ™]s g×üeŚŹß<śí·Ů^ţľ˙ľĆPôCřňч]¬»>šýěëŻÂłćµý¶ Žń3óý'Ě^Ó‡áëo?\»>ű>ĚkáŢÎ~ďe÷}˛KŹLţćŃÍć1Ę_uçytsżďçÝ㽌ďüśŐľŹÍăÁű0=›]óňĚáćÜ]üĽľ źÝŠÇ>ŔcťgżS»fĹţ0{-®Ĺß™öł˙ň‹Ůď]óůk×ďܻքë[7®Ďîqˇ÷ůśŻĐoxń8ł×ďćö÷ńĺ—÷š{ë?çűýn¦ĹďnŢýhęfźŤŻh˙żß­Ü}só}.×}Ţ|Ú÷3>ú=ľ6ł{|ůUx0»ßöK÷ŢĽ‹ßéÔg0.˙"ţ˙Čě˙·^ĚÎ˙ŐáęÝ.Pď÷ФĆŐJŔ@M`€ 0äjËâQµ‹`÷ă×»đ7t+|Ö—Á,ßk7Â÷>oŁX÷řčôcgŰcŻţÓÁą›źŰk›ĎČlľkt°>9ctˇ™‰Ů…§řs¸±§‰QÍúĄóĆxwí^Řé¶cćĺł°s/Îlíf’~˙uxüŕĂpóúőů,Ëřč_ăg)Î&mb\ v×îÎ^Ë}ŢËÔ÷Nżh#ńřó·ßŁÉW˝—/Úx»tĽëżžďŰĆëEŤĆźˇ6./ĎvMIÍŠm/˝tţ«·>›?núűÇ·š×rĹű|ÎÓ†3e;ńµ>Fş‰©ýq÷űÝ\a'Î3zůmřâQś™»řl´ŻóŇg`t_łu7ű×ĺZ¸y·ű˙“Ą{˝ÉĎ`vă?č_ăk7ď†Ď›¨ż˙g(“W+!5€2Ŕ+†ź«áŹżťýůEřęăAç‹Ďn…ÇÍLŢĂ‹gßtłí~_>~ÜÍđť-˙ňŢ"Ň4Áfńť±/ľ™ý…¤źI›ŠECËë›™×Ă˝řřč—ĎÂgµ3 űŮ—Í#kŻß _Ćź_ľXúŢÖĺ Řţ|íÖçÍ#o_|ő0ÜěCáRđ݉3ˇ8ÎŽ!üfóµËŞđÍ'áî~öwűú_ű(ÎŞü2Ü»ëűuřţűďĂן|8{ßâ¬ĚřYjg”Ć™ă1&6‘=ľ–űĽ—ýçđV –/_¶3PżŤ3¶o„‡ÝlÍ—?|ľÝď{}wî†kÉ÷˛ť=|ăáWíçäĺáëoǡµůłĎGüÇ /›G·ŹRľ~ďËföďłĎ>šÝçěsľďw ·ńµť/^´ż'qVęµ[Ź»GiżĎľy6˙Ě>{|+\żů0<ŽłŇ—fAďý9_ˇůÇŮď3Mŕžý>gężř*<ś˝óH˝ßďć M˝ń°‰ćík6ű=‹˙ŕîáŰŮgăŮě¸7ú˛s›ß]pŹqüF"Ķ×|7|1űó‹Ż>^ë_×UźÁŮ~ńŢă,ôĄcä3”IŤ«•€šŔ`Čő"ěÄG¤ĆŮp×?·>č‚]łîYxüQ˙=š×ÂŤ„/šxó,|>˙Ń«áÚŤ½ĎűňCŘą7X7ź}7ósŹ-?˛¶‰?×o†®·çży÷łđm™:ßÄÇ ·çązíĂđÉ·uÍLäńcś_ě<—ěµ›…Źżl_=ľń‘¶ă™“_ĆëşzsüHč Śż“őúb–÷Źß„ŹűŮšłĎĚ˝[7ŰY™1¤7Ź=ŽŻaډíŚĎ8+sß÷rxĚyŔý!|ů0ţ„vy|Ď>ůş{đ {˝—?|ůpđyą>úäëQLýćă~Öh÷şŮě7ăďDsţ»áłćŃĹ‹}Ň^„/bČíŽu˝Ź¬Ď‡Źú×3ΚđEřţÇ—áëŹ? ×ă#«c~pĽ˝>ç+4avţ˝ąť;áÁŕűŻ?úřËů÷˙î÷»ąĘ‹/îvO ¸>ř¤ýG$Í#ŕűsÜťÝ[÷~o×ű Ń<Ž˝9N'Ţgü˙Ťťřę¸ěz¸őča¸Ő?‚~Őg0»y´u·®q-|řIű˙Oű}€2©qµ0P 'Eű¸ÝŃ#9¦Žç{ŮĚĽ]z$4‡ďűOfŻó Ę+MÄ×űďÂíŠŔ}č]DÜ%]đॸ|áOa§˙sţűçËçÇŕHHŤ«•€šŔ`Č4»ńçanîb6o?;¸™#oÜ7n;ŔËŰ·ú¸ĚńłÉ»u÷Ŕ{ÍŇMŕĹq†¸ýžáĹůűH ŔŃ’W+!5€2ŔiengóÎămłÝ~xy0ÇŮÎýíÁŚŰĺŕŰ>žyy¦ďaŕřgŃŕčKŤ«•€šŔ`Č´Ç ŕ'—ÚďůmllÎçĽ:ÇcŚżxxlŽ“ípĺÂÝůěŰĆRŘmbmż.őŘ攜ŔÍşÁůga€Ł'5®VBj"d€N‚řřçń#¦Gq€##5®VBj"d€N†Ń ăHü8’Răj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€^±Ű›áô™Íp'µîDÚĎ®Íî9:.>MmłŹ§—ĂZéľŐŘ ëń5ŢŘJ¬;Íç¶{_Ő9 R©qµ0P p†±l`íŇvuřÉĄóáôŮËáIb]RŚ˝ËŰ Ŕűk^ŁWgďlĽús@mRăj%` &0@ŕ0µł2×o–U€ła|}ŕ#K€Ă—W+!5€2Ŕ‡iu^Ź!­™<›ý,Îĺĺ«4Űo†‹q–m·ßü\ŁcÍtŃ.Ľµłíök›í6óŕ:|\s7cą?×JÝŁ‡;+ĎíÇçî5ÇëđúFâ>gš(ŮďłoślĎł>»÷Ô>ńXë·×2mVÜg·ĎüXŤ.đÇëŽűf„/îg°}wţ8[şoNĎ®Ż=_ا˙Ľ·űt÷Đ˝ďýďÁřš‡żă× Ń_ăčÚęů‡/©qµ0P pÚ05Ś…}ę—ÍÚRěJ΄]Ö…Ä> ·üäöÖbßÁ±ççëŹß¬‹a¬ †‹€ŘFÇEdKYÚ§ą·ń>óóÍ÷ŮGęľ÷¸Ďńń»č9|˝wéânżĎŇëŢFĆĺűŢă>çŻ_Üné5ë®{ůţW˝7óűšł?ŢâsŻ/^GłíŇqűuíĎÝ}öŻĺđ>÷şć}¤ŢĎ;łű™˙ÜĽ6í±Ű×rxžţ˝žsüžŤîaxÍł}î Ţ×áuŚ^‹áçgp-»¶€#$5®VBj"d€Ó0zu–˘Ôműýzé÷f(ă~Íqâyâyű˙¶×7ÚvpÜńµ/Ýgę5L]ó>Ňďgűz,îgq­‹mÇŻŮřó>ţ}XuÍ»~Gć×=~=űýG÷Ř˸WJj\­„ ÔDČ ¦Ąč5+€wEĆHE˝.píiíuĚ—ď ŔËaô –öiîm|ăxKŻOcźűĚ:ţ>×[q)đí2Śzłź‡a´=Owśł›a˝‹tń|M,‹ëăńGa­ŤyóýĎÚ{ě÷ÝëĚ8ÄřškÝë>gšsĚŻa±]Úň=Łéŕőí­şĎÝÇ›_ŰR´ś[ńŢĚŁnÜŻ9FhĐ€# 5®VBj"d€8Ů7ďž}z´ăoăµ_óx6uT[ŁČ‘ř Ŕ1“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ‡ăÉĄóáô™µÍp'±uKŤ«•€šŔ`€ĂŃ೗ÓĺĂvgŁŤĚë·Óë8şRăj%` &0@ŕp¬ Ŕ·7›ĺ»h{úĚůpńélůÓËam0K¸‰ş[ł?o…őŮ6kgŰm×7Ú™Ĺk—¶»cn‡‹Í:ŕ8JŤ«•€šŔ`€Ă±üčy°ŤxkçˇwĎÜn—Ĺă4ÇnÖ-ÎŔń”W+!5€2Ŕ‡cĎŔ©Đ»Ď ŕ8K8.‹!X89Răj%` &0@ŕp”ŕîqĐݬßŕćYĹ©qµ0P p8šH#î\wWŕÁwůĆőç‘wżě;€ŽłÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`€éüáH. ©qµ0P 0ŤOť:Îť;—\¬ÝŢ §Ď¬µÎ^ORŰLn+¬÷×tć|¸ř4µ ŔôRăj%` &0@`:ďĽóNy~z9¬Ĺౕ^˙:Ĺś}]ŰáâŮg7Ăť~YŹťőŰĂíŁÄ>űŠűŔŔŃ‘W+!5€2ŔÓ*ŤŔO.ť§76ĂzVüśHAŽ÷łvéňč~îl Bm3«x|Ż©}ö'GKj\­„ ÔDČ L/?·3_×o÷˙]¬kŁčv¸łŃĎśíâhśMÇŹ€ŽŽÔ¸Z ¨‰ Ać${ré|8}f-ś>{9MmCŐvţ.Ľý_á•ďŇëöW+!5€2T€ź^kg/‡'©u«Ä}ŕî»pĺÂÝpe'µn÷†·` Pj\­„ ÔDČPEľ˝N Ŕě˛Ţ» ü ©qµ0P ĂI ŔO.ťďŰ<|tóđqÎ ë·űí7ĂťţËÁwUŽ1y~¬ÁţMÝăšăŚÝá¬Ýť+wçËćŢß^ěsáOa§›é˝÷±šeÍyâLâŮĎWëűc5‘y±ĎxPŁÔ¸Z ¨‰ ádŕ­°Ţ…ÝůĎ[‹őÉŔmî÷ął±Ö. Â\*7ńw}›<<GÎý÷ÇÁőţűĂýůú3€űĐ»2ÔvÁw)żŁqüąŮż=nšűăÄ ÜoT+5®VBj"d8)3€űśś™»ęĐóĺqߥ؛ŔăYĆťÜGK3ą&włoŃ6Ú+Cń˛tž'đ Ďăpw~ß ¤ĆŐJŔ@M`€ '#o‡;·ł5—ďŇĚÝ…8 ř|¸xi¶~y&ďfsôíÜß̸]ľíă™ÇQxćpś,úC©qµ0P ÉŔ·/‡µĄďú]<:đčQĎMÔ] ˝ťřXč]Çk¶_q,ŽípĺÂÝůěŰĆŇcťGß“×#ťyuF3Ś#ńŞ—W+!5€2Ô>¦”W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ĚIöäŇůpúĚÚŔf¸“Ř`*©qµ0P ĚIÖ೗ÓĺCw{łŤĚ[éő3©qµ0P ĚI¶2ÇX;[~qŁź|>\|×m‡‹g×ÂúíÁvݬá;łm×ζ3Š×66ĂZÜopěůlcŘCj\­„ ÔDČ s’-?zíŇv»®›­Ű‡ŢwŰp»wn¶éâń“§—ĂšGJ™Răj%` &0@“lĎŔx{ĐÜä¸,n+Răj%` &0@“¬4÷3…›ĺ ŔÍ1űătË–¤ĆŐJŔ@M`€ 0'Ůň# çßő»2Ź÷Yż´Ľűŕů~0°‡Ô¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`j÷‡?ü!ąŕUHŤ«•€šŔ`jăď©S§Âąsç’돵ۛáô™µÖŮËáIj›WĺužŽ¸Ô¸Z ¨‰ A¦vďĽóÎĎŔŰáâŮ:7Ăťäú×(FŘŤ­ôş”a´]şź;ýňµ°vi{Ľß^ž^k0ڤĆŐJŔ@M`€ 0üŚç™Í°ľ±Öo'ÖżNYx+¬˘o|»}ź\:?ĹŰďß« »¤ĆŐJŔ@M`€ 0´J"pG7¶ć˙.Ź3e3gű¸Ú…Ö&ŹgÔgŮž>s>\|Úo?žu;Śł{Ęť<0ŚľăĽ¸çĺ}’`Ř%5®VBj"d€ˇŐŕřßÔúÝła»™Ŕý Ú&’žIÍ”mîîďĹÝ wŰŽ"o ąýöKçŮSqnŻqqíýc®`(–W+!5€2ŔPgłx{}4]=K6ĆŐ~vď’ŃwđÎĚĂé"4gÍľ- Ŕíąöúžß§ü=Ŕ0ě’W+!5€2ŔÔ®(ţÎěőhäěĽ4ł·™< §MĚ˝.ž]ŹS˛đîÇM·¶Ă“ţśÍuf\ »¤ĆŐJŔ@M`€ 05űĂţP“±´™ÁŰĆŃüŔăÇ,ŻoĚŽ5 §Ýúś ›€ŰűÍ@ąŻĹňÝŹµŢ »¤ĆŐJŔ@M`€ 0µ‹8µühimV|Ížü Ŕ°Kj\­„ ÔDČ ĂQ¶|ŕďÝí gîNa_çąŕKŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ áDŕ§—ĂÚ™µp::{9óč;Ü&î?ľíňöĎ‹ó·ëŻańó.0ĽR©qµ0P LÍú|ęÔ©‚řŕyĚ=Hn—-fř¶ćÇ͇ĺáöQÜĺkÚE€W*5®VBj"d€©]ŚŔçÎť+żŃáŕĺ8;Ţg(îßGߡôqz0Ľ^©qµ0P ?Çaŕ™äŚŢnżůňĺÇ9őű,ĎK€×'5®VBj"d€áçŘ;żR1Źf'‚r ^©Ô¸Z ¨‰ A†ź#ŕµpúLkývj›We÷wýţśřűäŇůů}Ŕđę¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ †ípńěZ8}&:.>Mmóşm…őx}[‰uL%5®VBj"d€ŃÓËaí¨ŕćÚ)ßŢ’ ĄĆŐJŔ@M`€ đ!:Ęř=ątľ ţńĆ›á§ä:€z¤ĆŐJŔ@M`€ '&÷3\GŹaîÍĽîÄmâĚŐŮúőŰí>w6úíűÄăś=ßk3¬wŰ4űÄýĎΖ­zÜóŞÜť·Ő]Ëâu­ml.îçěĺđ¤[ăëÚĄíÁµ÷Ç>†z¶˙l›öxÝŁźw-_ś«_7ŠşŁ×łÍĆÇj-îwüz.îó§7ß˙ř4ŕřßkáź§„` ^©qµ0P ÉŔËáµ µ‹hÚ„ÉŤÍ&^öń7ĆĚ;ó?÷Űl ŽŐŐ¸}\ׄÓ&ä.Ď]Ńt)7ű,bčAfĎ6Çť_]űënöÝÇ`źţ¸]ĽMm3 Ŕăë_Üďîýgë.-®9yË÷>űy˝9×§áďMü=©(Ć߸l°/@ERăj%` &0@†€G3l{™¶]ĐÜ-—÷‹ŃµŮ6îh4çá4sˇyWí·žŁ?OżOB*Ěöá6Ç‘xyźŢ8·Ű,_[ę>—ĄŻa¦ťŁĄ{üű{o„˝ůfř×ď…ż–źLß…˙ţĎͰą9đWĂŁ?˙5±íÁ=úíąpnýfřsbp|¤ĆŐJŔ@M`€ 'rđHC/Ź#é<ô¶?7Ń5+wuBS×±OLMŕ.Şö×˝*ľîµĎp›aí3´k˙íŮë˛Xż+|7Ć3ŞG×ůé{á_o^kţÜ„ŕ÷>ťow2m‡ß˝ű«đ«_˝Îť;×z«ýyóżź'¶?ĂŔŰż{wvď†ßm§×Ż^j\­„ ÔDČp"pÔEËůlÖ&>vßY»FŰ:ž»ľ±yŔĽŘ'v›¨Úł˘Kű #lĘđŤA¤]9űvé~RçXŔý˛Ĺąńzů^GÁwü]Ŕń>ź\Ú kŁĹ«‚üIłô9jŢó.oß§Gáßcľp3|7Ú?úkřë_‡??ßýĺ/áůhŮ }ţň—ďÂóĺĺŤÝÇymxđűąü 6©qµ0P É ŔS(Í[˘‰˛ÉČűs´ˇrżř\‹żýíoáÁŮëv[üCá˛Ýřǰő?gËŢý]Řžýą ±ëá·żűM8÷«_…Í­¸Íóđč·˙6[g ·ÎýűÖ<înm.öŹŰ>ţĎ mß ~·xo·w!Ľ58Ns-[›íŁÍ°ŐmźrxŻŃ^˙pę“W+!5€2Ŕ5ŹgŃgfnÂ[ü]Źm®SŚ—ż˙ýďĂ/~ń‹đë_˙z´îůóçá­·Ţ żüĺ/Ă˙řÇŃş´ŕnŮ»żkáÜŕŮĎo˝~óWĂăżĚ¶ůä·M´}÷?‡żüĺ/áó›żi~ţÍ˙Ý>6z€?˙Ďđożz+üććçͶŹ˙s0ł÷»›áÂlż·~3;îź˙Ҭ˙ó_fÇřëóđÉÄŔüoá?>‰Ëź‡żÎŻoěp_Ł™ř»#@#5®VBj"d€©Q1‡s¸ěÝwßݵOÚř„­­­Ć‡żmď»Ý,Ý6Źgŕ¶Ëţç`Ů'ÍcŁßú÷Ošź‡x×ţŰż ďÎŽßĚ$nfúž ˙ń¸?ÎB»ßÁ}xŻ‘Ŕ0”W+!5€2ŔÔj3ßy睢°ągţŐĐ[áÂo˙{ţýż«đpŮx&ńî<<~k€Ó‘7'G?˙5Zún 9®VBj"d€©Y8Oť:UŁđĐęś3ř†˙Ň>âą÷üŻłýöüÝÍř˝ÁŔŃĎŤĚ€ˇÔ¸Z ¨‰ A¦v1pž;w®(lfţń“?řw?ŠŰľ.üçŁđçyţ.<ŹëßüůěżÍ9ş8üŰGqůęď^öó^Łß s©qµ0P ?Ç!ŕź‡Gżý·ŮňŮľťs˙ľŐFÝ™Qžm»µyn´íŻ~u!\ýs»íöďâLßÁşţZž˙wŘ|«_>śmüjĹŔk—Úď?€ÚĄĆŐJŔ@M`€ 0ü©üs=ßőŹsž/űs•óá<7ţúĽ™áűÝóÁ˛ąÔq˘ż†çÉ寎G@ŔBj\­„ ÔDČ ĂĎđZ8}¦µ~;µÍĎő×đůŐőćqĐnvŹr>nž^kŻô5€ă#5®VBj"d€á{ľ6ß:Ö÷x<ű8–Răj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`8îl¬…Óg6ĂťÄ:ęµsĺnxűí»áĘNz=ÇOj\­„ ÔDČ ĂQ°.ž=¤üôrX;{9íÖőłoă6Íşµ°~»]÷äŇůů˛a mýĽ{ůü\ýşŃěŕ­°>_ľÖ.mĎ–őłÇúóŻĎżvéňâx«®­żĎćχµfŮěuč¶™źgĹ5˙ôćáźĆ˙{-üóÔ Á; ŢŽ3v[®|×,oăĽXŢx?ľgíş¸];Ó7zîďÚ§]¶8ÇĂpe°ţýűý5ÄČÜďÓéÎŔŃ‘W+!5€2Ŕ© ś‹čŰDŇŤ­v]ŚŁ1|ö?ŹöéchjSŰ đhź. 7ű´ń·ŤľqÝv¸sikĽßrHŢĂř»‡Űc·1w+ÜÄăů}6÷ďż˝Ź¸m‘g׳ňš? oâď©NE1ţĆe‹ăźMÄ×űďÂíŠŔ}č]DÜ%]đॸ|áOa§˙sţűçËçÇŕHHŤ«•€šŔ`Č”Šś}pmâčb]o‰gFűô–ÂíhĆp/®źŘÁľC%x~mĂ<ÓÜkęüńcnŻŁŔ+Żą;×ßß{#üëÍ7ĂżŢx/ü˝[vŇ,fň.GÝ=đ^łt“xqśanżgxqţ>p´¤ĆŐJŔ@M`€ 0dŕĄŮĽ+đžű ·†ŰŃ>CË3€ OžâĘýŇVŕĄ{i¶Ű'ďyîOß ˙zóZóç&ż÷éîmŽąťűŰ·ËÁ·}<óňLßĂ ŔńϢ/ŔŃ—W+!5€2Ŕ©‰śkŕą*ĎŚfǦfč.ŕ~Ůŕ\óčŰśg±|]»ŔĽĽĎ «gŹŹłľŃ]ß^8cŐ5źxŰáĘ…»óŮ·ŤĄ°ŰÄÚ~]ę±Í)93€›uóĎÂGOj\­„ ÔDČ C¦˝fąţ ÉÇBĂĹÇ?Ź1=ŠĂ©qµ0P ™3Źfňîń˝ľ?×ҬÜÖáGl^ŻŃ ăHü8’Răj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€j±.ž] §ĎDçĂŧ©möÓcíŇvbÝQ±Öă=nl%ÖĽ~©qµ0P pş¸ÚGǧ—ĂZqd}5ž\:Nź˝ž$ÖĄĹ{Zľ‡c€›×ţđíM!8t©qµ0P pÚXşÖÓ#€ďläFŃ8“öŕCÔDs8d©qµ0P pÚ0şľŃÍŕv]űčĺh3Ü™íăb ĆͲŮ~Íc‹»uńM°í÷9P„źgiű±CűŻ źÉ}ş<»Ţů1‡ÇŠ3fçű,îe•xŹŁc f(7ŻĎěŻCĽ÷Ů?úy×ň˝ö™Yz}Öoď>Vëh}ŕřJŤ«•€šŔ`€ĂĐĆőŰńżçĂĹŰüt+Ü™‡Ă. ^Ú^<’ą 1n.fÜŽgëöÇ6Ú§‹šĂ}ĆÇ<Ő3€çˇvş›ř»ľ™=Ű\Ó<ú¶Ńµżć>B/ß÷~÷ŮołĽ‹×Ľýyp_»öźm{iqÍą€\©qµ0P p‘ööfX»tyOű9·±µ‹1B6´“]dn?3žŃşlOwGĎĂ Ŕóăđ®{Ś3zSĆ×4>v:ľîźŃ8·ű,_[˙^í5SY^…Ô¸Z ¨‰ A8 mlĂäěĎçÇ3cç!´Ý.FĹŐ¸$Ö.í“[€ÇÇŘ\xżš˛×5ŻŠŻűÝgżÍ"§#qc×ţŰáÉ x7×°OÄČ•W+!5€2Ŕ‡a€űٰýěŮá Ôóa}Ł ›{ŕxŚ&töë—ŻÖĹĺnźÔ¬ŘTPÝK{Ý1›kÜ#Çź›Ľú–Ťďqfp}«đ~÷Ťđî}FˇzéšÇÁw<{x94”HŤ«•€šŔ`^—’(˝żĄH pĤĆŐJŔ@M`€ 0ŻËaŕÝł•ÓŰĽn©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0ľ;káô™Íp'±nl;\<»Ö.m'Ö­đôrX;s>\|šXljłsĺnxűí»áĘNz=ÇOj\­„ ÔDČ ĂakŁîî—/‡[¸ß…+ňCîý÷˙K8aRăj%` &0@¦˛Öw…Ű€Ż˝ţőާéuŐÚď ąĚ¤ĆŐJŔ@M`€ 0äkń<ÔÎö-?{9<é¶réü`ŰÎĆÖl]€76ĂÚhůlżŰ›c Bq€×šYĆ­őŰ‹k[%^CÜqŤ‹ĘŁëîĎßśg3¬Ö-Îcvbů§ď…˝y­ Ŕaößżż÷F]!xçOáÂŰqĆnë•ďšĺícśËď·Ń?®‹Űµ3}هáţ®}Úe‹s< Wëßżß_CŚĚý>ťî<©qµ0P ™ş0ÚĆÓԬޙQĽí­ž<ßv8»wĎĽ®M\Ţu®Ýú˝‹›řŰGßî<Í6+Ď3¸–¸OĽÎţš?ý4ü=ĆßS§1ţţ}¶¬?×I×DÜAp˝˙ţ Ü6qv÷ ŕ>ô."î’.řŽđR\ľđ§°Ó˙ą?˙ý‡óĺócp$¤ĆŐJŔ@M`€ 0äÍčMĹ×Ě<Ź©Ŕă4vůű†wk®yz{íqç÷ŇŮó<ËË»ŮŔ‹°|-üóÔ›áźož ˙ĽÖ/«Çb&ďrÔÝ#ď5K7€Çŕö{†çď#1GKj\­„ ÔDČ C¦@÷›q»2/ĎŔÝ'÷a·Y> ł‹ă43x÷»ž™t^ž<°zçŮcđěçźŢ|#üăÓřç6˙ÔŻ;÷·3n—oűxć噾‡€ăźE_€Ł/5®VBj"d€!WbÖěr€MŕÔĚá=pŚűm/nŚgć.ľx˙ٿѪŤľ¸?šw-oö\ŰĚ8j×j;\ąpw>ű¶±v›XŰŻK=¶9%gpłnpţAŕčIŤ«•€šŔ`ČCę<ŘFK3eOŚ“z_'V|üóřÓŁ8 Ŕ‘‘W+!5€2ŔiĎ™±ŻÓßç›Ü~đ±3ša‰żGRj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0ŔDž^kgÖÂÚĄíôú;káôĆVrÝ*%űO.ť§Ďśź¦×MŰáâŮŮk>{O‹Ż˝ůLńűÎřÜ“W+!5€2Ŕ‡§‰°Mś9{9<®ż˝Ů,_iqźőŰíşe5ŕöuŰBSŻÍQŃDëĺ÷x/1¤.ođŠĎm‰Łü~Ŕ”Răj%` &0@ŕp4sřžÜľîěöÚY¤µŕ´ôksTdżŢ1¤Ç|hŽöű SJŤ«•€šŔ`€Ă°ÖϬ[Ý#tű™Áómş™•#] lăâfsĚáňöX›áNwěa„lţ|öüâ\˱1Ąź•:¸–ôőőçě"ŢěÚćë´}”s·|pţŃňAđ/_Ü×^ŻÍřŃË㙩ńxńçćµhÖĎŽŮ˝ţ‹÷¦Ý˙­í{Úźgľ˙ŇűŮŘ3ŹŻ·×Ż9ÖůŮëąx×Ů˝§ý>űĆć˝ß›x¬őŰk™żž»Ďáuí÷ôËçďéžď'Ô'5®VBj˙#îĎ!Ő€Aňš°9g©h¶˙˛>üőAt—›c/BiłÝ(ŹŁŢňqwéŻu9.6Ánqž&ę5ŰtáŻß~xߣ}†Ű-_Ëěçĺó-ÝWkŹ×ftţĹ6}|\ŢgqýłźăuîŰsĎĂfso㙺Łë8Ôy»ëďĎÓ\g·Ířřé×blŹ÷fössĽĄ{8Č}î>÷Ň>ÍűŰîÓľţ÷qv —öŰű ©qµ0P p–#g*vtŮrü{)”·KĂáĚ̤Ąăőú:Ň„Éĺă.®m|ţqĚě·kʵű|éëH˝6é×yP×°÷k#eĽÎ˝.Ăş|ŢÝ÷»Ż•xqžĹkÖŢ×ň{°÷uŻ~oâĎÉű>Ŕ}î~Úm–Ż-®ßű5I˝źP§Ô¸Z ¨‰ A8MüšľTěZ˝l9ĚŤCÚ ĘŤ‚]âşíFço¶;@lk¶KŮf&hbůňőgŚŽöi·kŻm;Üą=¸ż•!4€÷|m–îsun×­]ş<{ÍR÷µlŹűě¶Ů;v&¤^ÓŃű9ŽćŮÇßçšăń–_ËÜgżÍâł”~_˘ćú‡÷řt{đ>ŻŢj“W+!5€2Ŕ‡§‰v1ĘFË‘sWHë4ѭ߯Ťgăř7ś•ŮŁßöâ x6ďl píú…¶U8]WĽáůwź§ €ÝşţţoĎα´Ď®×`ĎÝďׯ_î󯌦íëxđ9žéş|ÍĄvtÝ{ŕřóčó´+Ě.Űű˝i>É{ßű>ű㎗/źkńŢŤŻyéśÉ÷ę“W+!5€2Ŕ\ţQŹĄŘzňĽŞ÷fř€ĂW+!5€2ŔÜq Ŕ‹®';bî{3šÉ›5ÓŘOj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€©Ý“KçĂé3k3›áÎhÝVXo–GçĂŧĂueRăj%` &0@˘ípńěZXż˝jť ŽÔ¸Z ¨‰ A†hŻČ+‡'5®VBj"d€!€€i¤ĆŐJŔ@M`€ 0ôbč] §7¶Ë`ŕp¤ĆŐJŔ@M`€ 0DmüőŔŔ«–W+!5€2Ŕíy`ŕđ¤ĆŐJŔ@M`€ 0D00ŤÔ¸Z ¨‰ A†(F^Ź€^˝Ô¸Z ¨‰ A¦vO.ť§Ď¬…Óg/‡'Łu[a=.oŔŔáHŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P ÓIŤ«•€šŔ`Nj\­„ ÔDČ ŔtRăj%` &0@¦“W+!5€2Ŕ0ťÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ 0L'5®VBj"d€`:©qµ0P Ăäřöf8}fmć|¸ř4±N°Ô¸Z ¨‰ áuÍľł±Ö.m'×ŔI•W+!5€2ĽÎĽ~;˝NŞÔ¸Z ¨‰ A€é¤ĆŐJŔ@M`€ Ż+G1ź>{9ô†ünIEND®B`‚drf-yasg-1.20.1/setup.cfg000066400000000000000000000001031416705305200151250ustar00rootroot00000000000000[bdist_wheel] universal = 1 [metadata] license_file = LICENSE.rst drf-yasg-1.20.1/setup.py000077500000000000000000000067551416705305200150440ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import print_function import io import os import sys from setuptools import find_packages, setup def read_req(req_file): with open(os.path.join('requirements', req_file)) as req: return [line.strip() for line in req.readlines() if line.strip() and not line.strip().startswith('#')] with io.open('README.rst', encoding='utf-8') as readme: description = readme.read() requirements = read_req('base.txt') requirements_validation = read_req('validation.txt') def find_versions_from_readme(prefix): for line in description.splitlines(): line = line.strip() if line.startswith(prefix): versions = [v.strip() for v in line[len(prefix):].split(',')] if versions: return versions raise RuntimeError("failed to find supported versions list for '{}'".format(prefix)) python_versions = find_versions_from_readme("- **Python**: ") django_versions = find_versions_from_readme("- **Django**: ") python_requires = ">=" + python_versions[0] python_classifiers = [ 'Programming Language :: Python', 'Programming Language :: Python :: 3', ] + ['Programming Language :: Python :: {}'.format(v) for v in python_versions] django_classifiers = [ 'Framework :: Django', ] + ['Framework :: Django :: {}'.format(v) for v in django_versions] def drf_yasg_setup(**kwargs): setup( name='drf-yasg', packages=find_packages('src'), package_dir={'': 'src'}, include_package_data=True, install_requires=requirements, extras_require={ 'validation': requirements_validation, }, license='BSD License', description='Automated generation of real Swagger/OpenAPI 2.0 schemas from Django Rest Framework code.', long_description=description, long_description_content_type='text/x-rst', url='https://github.com/axnsan12/drf-yasg', author='Cristi V.', author_email='cristi@cvjd.me', keywords='drf django django-rest-framework schema swagger openapi codegen swagger-codegen ' 'documentation drf-yasg django-rest-swagger drf-openapi', python_requires=python_requires, classifiers=[ 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Development Status :: 5 - Production/Stable', 'Operating System :: OS Independent', 'Environment :: Web Environment', 'Topic :: Documentation', 'Topic :: Software Development :: Code Generators', ] + python_classifiers + django_classifiers, **kwargs ) try: # noinspection PyUnresolvedReferences import setuptools_scm # noqa: F401 drf_yasg_setup(use_scm_version=True) except (ImportError, LookupError) as e: if os.getenv('CI', 'false') == 'true': # don't silently fail on CI - we don't want to accidentally push a dummy version to PyPI raise err_msg = str(e) if 'setuptools-scm' in err_msg or 'setuptools_scm' in err_msg: import time import traceback timestamp_ms = int(time.time() * 1000) timestamp_str = hex(timestamp_ms)[2:].zfill(16) dummy_version = '1!0.0.0.dev0+noscm.' + timestamp_str drf_yasg_setup(version=dummy_version) traceback.print_exc(file=sys.stderr) print("failed to detect version, package was built with dummy version " + dummy_version, file=sys.stderr) else: raise drf-yasg-1.20.1/src/000077500000000000000000000000001416705305200141015ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/000077500000000000000000000000001416705305200156775ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/__init__.py000066400000000000000000000004371416705305200200140ustar00rootroot00000000000000# coding=utf-8 from pkg_resources import DistributionNotFound, get_distribution __author__ = """Cristi V.""" __email__ = 'cristi@cvjd.me' try: __version__ = get_distribution(__name__).version except DistributionNotFound: # pragma: no cover # package is not installed pass drf-yasg-1.20.1/src/drf_yasg/app_settings.py000066400000000000000000000075411416705305200207600ustar00rootroot00000000000000from django.conf import settings from rest_framework.settings import perform_import SWAGGER_DEFAULTS = { 'DEFAULT_GENERATOR_CLASS': 'drf_yasg.generators.OpenAPISchemaGenerator', 'DEFAULT_AUTO_SCHEMA_CLASS': 'drf_yasg.inspectors.SwaggerAutoSchema', 'DEFAULT_FIELD_INSPECTORS': [ 'drf_yasg.inspectors.CamelCaseJSONFilter', 'drf_yasg.inspectors.RecursiveFieldInspector', 'drf_yasg.inspectors.ReferencingSerializerInspector', 'drf_yasg.inspectors.ChoiceFieldInspector', 'drf_yasg.inspectors.FileFieldInspector', 'drf_yasg.inspectors.DictFieldInspector', 'drf_yasg.inspectors.JSONFieldInspector', 'drf_yasg.inspectors.HiddenFieldInspector', 'drf_yasg.inspectors.RelatedFieldInspector', 'drf_yasg.inspectors.SerializerMethodFieldInspector', 'drf_yasg.inspectors.SimpleFieldInspector', 'drf_yasg.inspectors.StringDefaultFieldInspector', ], 'DEFAULT_FILTER_INSPECTORS': [ 'drf_yasg.inspectors.CoreAPICompatInspector', ], 'DEFAULT_PAGINATOR_INSPECTORS': [ 'drf_yasg.inspectors.DjangoRestResponsePagination', 'drf_yasg.inspectors.CoreAPICompatInspector', ], 'EXCLUDED_MEDIA_TYPES': ['html'], 'DEFAULT_INFO': None, 'DEFAULT_API_URL': None, 'USE_SESSION_AUTH': True, 'SECURITY_DEFINITIONS': { 'Basic': { 'type': 'basic' } }, 'SECURITY_REQUIREMENTS': None, 'LOGIN_URL': getattr(settings, 'LOGIN_URL', None), 'LOGOUT_URL': '/accounts/logout/', 'SPEC_URL': None, 'VALIDATOR_URL': '', 'PERSIST_AUTH': False, 'REFETCH_SCHEMA_WITH_AUTH': False, 'REFETCH_SCHEMA_ON_LOGOUT': False, 'FETCH_SCHEMA_WITH_QUERY': True, 'OPERATIONS_SORTER': None, 'TAGS_SORTER': None, 'DOC_EXPANSION': 'list', 'DEEP_LINKING': False, 'SHOW_EXTENSIONS': True, 'DEFAULT_MODEL_RENDERING': 'model', 'DEFAULT_MODEL_DEPTH': 3, 'SHOW_COMMON_EXTENSIONS': True, 'OAUTH2_REDIRECT_URL': None, 'OAUTH2_CONFIG': {}, 'SUPPORTED_SUBMIT_METHODS': [ 'get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace' ], 'DISPLAY_OPERATION_ID': True, } REDOC_DEFAULTS = { 'SPEC_URL': None, 'LAZY_RENDERING': False, 'HIDE_HOSTNAME': False, 'EXPAND_RESPONSES': 'all', 'PATH_IN_MIDDLE': False, 'NATIVE_SCROLLBARS': False, 'REQUIRED_PROPS_FIRST': False, 'FETCH_SCHEMA_WITH_QUERY': True, } IMPORT_STRINGS = [ 'DEFAULT_GENERATOR_CLASS', 'DEFAULT_AUTO_SCHEMA_CLASS', 'DEFAULT_FIELD_INSPECTORS', 'DEFAULT_FILTER_INSPECTORS', 'DEFAULT_PAGINATOR_INSPECTORS', 'DEFAULT_INFO', ] class AppSettings(object): """ Stolen from Django Rest Framework, removed caching for easier testing """ def __init__(self, user_settings, defaults, import_strings=None): self._user_settings = user_settings self.defaults = defaults self.import_strings = import_strings or [] @property def user_settings(self): return getattr(settings, self._user_settings, {}) def __getattr__(self, attr): if attr not in self.defaults: raise AttributeError("Invalid setting: '%s'" % attr) # pragma: no cover try: # Check if present in user settings val = self.user_settings[attr] except KeyError: # Fall back to defaults val = self.defaults[attr] # Coerce import strings into classes if attr in self.import_strings: val = perform_import(val, attr) return val #: swagger_settings = AppSettings( user_settings='SWAGGER_SETTINGS', defaults=SWAGGER_DEFAULTS, import_strings=IMPORT_STRINGS, ) #: redoc_settings = AppSettings( user_settings='REDOC_SETTINGS', defaults=REDOC_DEFAULTS, import_strings=IMPORT_STRINGS, ) drf-yasg-1.20.1/src/drf_yasg/codecs.py000066400000000000000000000171161416705305200175170ustar00rootroot00000000000000import copy import json import logging from collections import OrderedDict from django.utils.encoding import force_bytes from ruamel import yaml from . import openapi from .errors import SwaggerValidationError logger = logging.getLogger(__name__) def _validate_flex(spec): try: from flex.core import parse as validate_flex from flex.exceptions import ValidationError except ImportError: return try: validate_flex(spec) except ValidationError as ex: raise SwaggerValidationError(str(ex)) from ex def _validate_swagger_spec_validator(spec): from swagger_spec_validator.common import SwaggerValidationError as SSVErr from swagger_spec_validator.validator20 import validate_spec as validate_ssv try: validate_ssv(spec) except SSVErr as ex: raise SwaggerValidationError(str(ex)) from ex #: VALIDATORS = { 'flex': _validate_flex, 'ssv': _validate_swagger_spec_validator, } class _OpenAPICodec(object): media_type = None def __init__(self, validators): self._validators = validators @property def validators(self): """List of validator names to apply""" return self._validators def encode(self, document): """Transform an :class:`.Swagger` object to a sequence of bytes. Also performs validation and applies settings. :param openapi.Swagger document: Swagger spec object as generated by :class:`.OpenAPISchemaGenerator` :return: binary encoding of ``document`` :rtype: bytes """ if not isinstance(document, openapi.Swagger): raise TypeError('Expected a `openapi.Swagger` instance') spec = self.generate_swagger_object(document) errors = {} for validator in self.validators: try: # validate a deepcopy of the spec to prevent the validator from messing with it # for example, swagger_spec_validator adds an x-scope property to all references VALIDATORS[validator](copy.deepcopy(spec)) except SwaggerValidationError as e: errors[validator] = str(e) if errors: exc = SwaggerValidationError("spec validation failed: {}".format(errors), errors, spec, self) logger.warning(str(exc)) raise exc return force_bytes(self._dump_dict(spec)) def encode_error(self, err): """Dump an error message into an encoding-appropriate sequence of bytes""" return force_bytes(self._dump_dict(err)) def _dump_dict(self, spec): """Dump the given dictionary into its string representation. :param dict spec: a python dict :return: string representation of ``spec`` :rtype: str or bytes """ raise NotImplementedError("override this method") def generate_swagger_object(self, swagger): """Generates the root Swagger object. :param openapi.Swagger swagger: Swagger spec object as generated by :class:`.OpenAPISchemaGenerator` :return: swagger spec as dict :rtype: OrderedDict """ return swagger.as_odict() class OpenAPICodecJson(_OpenAPICodec): media_type = 'application/json' def __init__(self, validators, pretty=False, media_type='application/json'): super(OpenAPICodecJson, self).__init__(validators) self.pretty = pretty self.media_type = media_type def _dump_dict(self, spec): """Dump ``spec`` into JSON. :rtype: str""" if self.pretty: out = json.dumps(spec, indent=4, separators=(',', ': ')) if out[-1] != '\n': out += '\n' return out else: return json.dumps(spec) YAML_MAP_TAG = u'tag:yaml.org,2002:map' class SaneYamlDumper(yaml.SafeDumper): """YamlDumper class usable for dumping ``OrderedDict`` and list instances in a standard way.""" def ignore_aliases(self, data): """Disable YAML references.""" return True def increase_indent(self, flow=False, indentless=False, **kwargs): """https://stackoverflow.com/a/39681672 Indent list elements. """ return super(SaneYamlDumper, self).increase_indent(flow=flow, indentless=False, **kwargs) def represent_odict(self, mapping, flow_style=None): # pragma: no cover """https://gist.github.com/miracle2k/3184458 Make PyYAML output an OrderedDict. It will do so fine if you use yaml.dump(), but that generates ugly, non-standard YAML code. To use yaml.safe_dump(), you need the following. """ tag = YAML_MAP_TAG value = [] node = yaml.MappingNode(tag, value, flow_style=flow_style) if self.alias_key is not None: self.represented_objects[self.alias_key] = node best_style = True if hasattr(mapping, 'items'): mapping = mapping.items() for item_key, item_value in mapping: node_key = self.represent_data(item_key) node_value = self.represent_data(item_value) if not (isinstance(node_key, yaml.ScalarNode) and not node_key.style): best_style = False if not (isinstance(node_value, yaml.ScalarNode) and not node_value.style): best_style = False value.append((node_key, node_value)) if flow_style is None: if self.default_flow_style is not None: node.flow_style = self.default_flow_style else: node.flow_style = best_style return node def represent_text(self, text): if "\n" in text: return self.represent_scalar('tag:yaml.org,2002:str', text, style='|') return self.represent_scalar('tag:yaml.org,2002:str', text) SaneYamlDumper.add_representer(bytes, SaneYamlDumper.represent_text) SaneYamlDumper.add_representer(str, SaneYamlDumper.represent_text) SaneYamlDumper.add_representer(OrderedDict, SaneYamlDumper.represent_odict) SaneYamlDumper.add_multi_representer(OrderedDict, SaneYamlDumper.represent_odict) def yaml_sane_dump(data, binary): """Dump the given data dictionary into a sane format: * OrderedDicts are dumped as regular mappings instead of non-standard !!odict * multi-line mapping style instead of json-like inline style * list elements are indented into their parents * YAML references/aliases are disabled :param dict data: the data to be dumped :param bool binary: True to return a utf-8 encoded binary object, False to return a string :return: the serialized YAML :rtype: str or bytes """ return yaml.dump(data, Dumper=SaneYamlDumper, default_flow_style=False, encoding='utf-8' if binary else None) class SaneYamlLoader(yaml.SafeLoader): def construct_odict(self, node, deep=False): self.flatten_mapping(node) return OrderedDict(self.construct_pairs(node)) SaneYamlLoader.add_constructor(YAML_MAP_TAG, SaneYamlLoader.construct_odict) def yaml_sane_load(stream): """Load the given YAML stream while preserving the input order for mapping items. :param stream: YAML stream (can be a string or a file-like object) :rtype: OrderedDict """ return yaml.load(stream, Loader=SaneYamlLoader) class OpenAPICodecYaml(_OpenAPICodec): media_type = 'application/yaml' def __init__(self, validators, media_type='application/yaml'): super(OpenAPICodecYaml, self).__init__(validators) self.media_type = media_type def _dump_dict(self, spec): """Dump ``spec`` into YAML. :rtype: bytes""" return yaml_sane_dump(spec, binary=True) drf-yasg-1.20.1/src/drf_yasg/errors.py000066400000000000000000000005741416705305200175730ustar00rootroot00000000000000class SwaggerError(Exception): pass class SwaggerValidationError(SwaggerError): def __init__(self, msg, errors=None, spec=None, source_codec=None, *args): super(SwaggerValidationError, self).__init__(msg, *args) self.errors = errors self.spec = spec self.source_codec = source_codec class SwaggerGenerationError(SwaggerError): pass drf-yasg-1.20.1/src/drf_yasg/generators.py000066400000000000000000000561541416705305200204350ustar00rootroot00000000000000import copy import logging import re import urllib.parse as urlparse from collections import OrderedDict, defaultdict import uritemplate from django.urls import URLPattern, URLResolver from rest_framework import versioning from rest_framework.schemas import SchemaGenerator from rest_framework.schemas.generators import EndpointEnumerator as _EndpointEnumerator from rest_framework.schemas.generators import endpoint_ordering, get_pk_name from rest_framework.schemas.utils import get_pk_description from rest_framework.settings import api_settings from . import openapi from .app_settings import swagger_settings from .errors import SwaggerGenerationError from .inspectors.field import get_basic_type_info, get_queryset_field, get_queryset_from_view from .openapi import ReferenceResolver, SwaggerDict from .utils import force_real_str, get_consumes, get_produces logger = logging.getLogger(__name__) PATH_PARAMETER_RE = re.compile(r'{(?P\w+)}') class EndpointEnumerator(_EndpointEnumerator): def __init__(self, patterns=None, urlconf=None, request=None): super(EndpointEnumerator, self).__init__(patterns, urlconf) self.request = request def get_path_from_regex(self, path_regex): if path_regex.endswith(')'): logger.warning("url pattern does not end in $ ('%s') - unexpected things might happen", path_regex) return self.unescape_path(super(EndpointEnumerator, self).get_path_from_regex(path_regex)) def should_include_endpoint(self, path, callback, app_name='', namespace='', url_name=None): if not super(EndpointEnumerator, self).should_include_endpoint(path, callback): return False version = getattr(self.request, 'version', None) versioning_class = getattr(callback.cls, 'versioning_class', None) if versioning_class is not None and issubclass(versioning_class, versioning.NamespaceVersioning): if version and version not in namespace.split(':'): return False if getattr(callback.cls, 'swagger_schema', object()) is None: return False return True def replace_version(self, path, callback): """If ``request.version`` is not ``None`` and `callback` uses ``URLPathVersioning``, this function replaces the ``version`` parameter in `path` with the actual version. :param str path: the templated path :param callback: the view callback :rtype: str """ versioning_class = getattr(callback.cls, 'versioning_class', None) if versioning_class is not None and issubclass(versioning_class, versioning.URLPathVersioning): version = getattr(self.request, 'version', None) if version: version_param = getattr(versioning_class, 'version_param', 'version') version_param = '{%s}' % version_param if version_param not in path: logger.info("view %s uses URLPathVersioning but URL %s has no param %s" % (callback.cls, path, version_param)) path = path.replace(version_param, version) return path def get_api_endpoints(self, patterns=None, prefix='', app_name=None, namespace=None, ignored_endpoints=None): """ Return a list of all available API endpoints by inspecting the URL conf. Copied entirely from super. """ if patterns is None: patterns = self.patterns api_endpoints = [] if ignored_endpoints is None: ignored_endpoints = set() for pattern in patterns: path_regex = prefix + str(pattern.pattern) if isinstance(pattern, URLPattern): try: path = self.get_path_from_regex(path_regex) callback = pattern.callback url_name = pattern.name if self.should_include_endpoint(path, callback, app_name or '', namespace or '', url_name): path = self.replace_version(path, callback) # avoid adding endpoints that have already been seen, # as Django resolves urls in top-down order if path in ignored_endpoints: continue ignored_endpoints.add(path) for method in self.get_allowed_methods(callback): endpoint = (path, method, callback) api_endpoints.append(endpoint) except Exception: # pragma: no cover logger.warning('failed to enumerate view', exc_info=True) elif isinstance(pattern, URLResolver): nested_endpoints = self.get_api_endpoints( patterns=pattern.url_patterns, prefix=path_regex, app_name="%s:%s" % (app_name, pattern.app_name) if app_name else pattern.app_name, namespace="%s:%s" % (namespace, pattern.namespace) if namespace else pattern.namespace, ignored_endpoints=ignored_endpoints ) api_endpoints.extend(nested_endpoints) else: logger.warning("unknown pattern type {}".format(type(pattern))) api_endpoints = sorted(api_endpoints, key=endpoint_ordering) return api_endpoints def unescape(self, s): """Unescape all backslash escapes from `s`. :param str s: string with backslash escapes :rtype: str """ # unlike .replace('\\', ''), this corectly transforms a double backslash into a single backslash return re.sub(r'\\(.)', r'\1', s) def unescape_path(self, path): """Remove backslashe escapes from all path components outside {parameters}. This is needed because ``simplify_regex`` does not handle this correctly. **NOTE:** this might destructively affect some url regex patterns that contain metacharacters (e.g. \\w, \\d) outside path parameter groups; if you are in this category, God help you :param str path: path possibly containing :return: the unescaped path :rtype: str """ clean_path = '' while path: match = PATH_PARAMETER_RE.search(path) if not match: clean_path += self.unescape(path) break clean_path += self.unescape(path[:match.start()]) clean_path += match.group() path = path[match.end():] return clean_path class OpenAPISchemaGenerator(object): """ This class iterates over all registered API endpoints and returns an appropriate OpenAPI 2.0 compliant schema. Method implementations shamelessly stolen and adapted from rest-framework ``SchemaGenerator``. """ endpoint_enumerator_class = EndpointEnumerator reference_resolver_class = ReferenceResolver def __init__(self, info, version='', url=None, patterns=None, urlconf=None): """ :param openapi.Info info: information about the API :param str version: API version string; if omitted, `info.default_version` will be used :param str url: API scheme, host and port; if ``None`` is passed and ``DEFAULT_API_URL`` is not set, the url will be inferred from the request made against the schema view, so you should generally not need to set this parameter explicitly; if the empty string is passed, no host and scheme will be emitted If `url` is not ``None`` or the empty string, it must be a scheme-absolute uri (i.e. starting with http:// or https://), and any path component is ignored; See also: :ref:`documentation on base URL construction ` :param patterns: if given, only these patterns will be enumerated for inclusion in the API spec :param urlconf: if patterns is not given, use this urlconf to enumerate patterns; if not given, the default urlconf is used """ self._gen = SchemaGenerator(info.title, url, info.get('description', ''), patterns, urlconf) self.info = info self.version = version self.consumes = [] self.produces = [] if url is None and swagger_settings.DEFAULT_API_URL is not None: url = swagger_settings.DEFAULT_API_URL if url: parsed_url = urlparse.urlparse(url) if parsed_url.scheme not in ('http', 'https') or not parsed_url.netloc: raise SwaggerGenerationError("`url` must be an absolute HTTP(S) url") if parsed_url.path: logger.warning("path component of api base URL %s is ignored; use FORCE_SCRIPT_NAME instead" % url) @property def url(self): return self._gen.url def get_security_definitions(self): """Get the security schemes for this API. This determines what is usable in security requirements, and helps clients configure their authorization credentials. :return: the security schemes usable with this API :rtype: dict[str,dict] or None """ security_definitions = swagger_settings.SECURITY_DEFINITIONS if security_definitions is not None: security_definitions = SwaggerDict._as_odict(security_definitions, {}) return security_definitions def get_security_requirements(self, security_definitions): """Get the base (global) security requirements of the API. This is never called if :meth:`.get_security_definitions` returns `None`. :param security_definitions: security definitions as returned by :meth:`.get_security_definitions` :return: the security schemes accepted by default :rtype: list[dict[str,list[str]]] or None """ security_requirements = swagger_settings.SECURITY_REQUIREMENTS if security_requirements is None: security_requirements = [{security_scheme: []} for security_scheme in security_definitions] security_requirements = [SwaggerDict._as_odict(sr, {}) for sr in security_requirements] security_requirements = sorted(security_requirements, key=list) return security_requirements def get_schema(self, request=None, public=False): """Generate a :class:`.Swagger` object representing the API schema. :param request: the request used for filtering accessible endpoints and finding the spec URI :type request: rest_framework.request.Request or None :param bool public: if True, all endpoints are included regardless of access through `request` :return: the generated Swagger specification :rtype: openapi.Swagger """ endpoints = self.get_endpoints(request) components = self.reference_resolver_class(openapi.SCHEMA_DEFINITIONS, force_init=True) self.consumes = get_consumes(api_settings.DEFAULT_PARSER_CLASSES) self.produces = get_produces(api_settings.DEFAULT_RENDERER_CLASSES) paths, prefix = self.get_paths(endpoints, components, request, public) security_definitions = self.get_security_definitions() if security_definitions: security_requirements = self.get_security_requirements(security_definitions) else: security_requirements = None url = self.url if url is None and request is not None: url = request.build_absolute_uri() return openapi.Swagger( info=self.info, paths=paths, consumes=self.consumes or None, produces=self.produces or None, security_definitions=security_definitions, security=security_requirements, _url=url, _prefix=prefix, _version=self.version, **dict(components) ) def create_view(self, callback, method, request=None): """Create a view instance from a view callback as registered in urlpatterns. :param callback: view callback registered in urlpatterns :param str method: HTTP method :param request: request to bind to the view :type request: rest_framework.request.Request or None :return: the view instance """ view = self._gen.create_view(callback, method, request) overrides = getattr(callback, '_swagger_auto_schema', None) if overrides is not None: # decorated function based view must have its decorator information passed on to the re-instantiated view for method, _ in overrides.items(): view_method = getattr(view, method, None) if view_method is not None: # pragma: no cover setattr(view_method.__func__, '_swagger_auto_schema', overrides) setattr(view, 'swagger_fake_view', True) return view def coerce_path(self, path, view): """Coerce {pk} path arguments into the name of the model field, where possible. This is cleaner for an external representation (i.e. "this is an identifier", not "this is a database primary key"). :param str path: the path :param rest_framework.views.APIView view: associated view :rtype: str """ if '{pk}' not in path: return path model = getattr(get_queryset_from_view(view), 'model', None) if model: field_name = get_pk_name(model) else: field_name = 'id' return path.replace('{pk}', '{%s}' % field_name) def get_endpoints(self, request): """Iterate over all the registered endpoints in the API and return a fake view with the right parameters. :param request: request to bind to the endpoint views :type request: rest_framework.request.Request or None :return: {path: (view_class, list[(http_method, view_instance)]) :rtype: dict[str,(type,list[(str,rest_framework.views.APIView)])] """ enumerator = self.endpoint_enumerator_class(self._gen.patterns, self._gen.urlconf, request=request) endpoints = enumerator.get_api_endpoints() view_paths = defaultdict(list) view_cls = {} for path, method, callback in endpoints: view = self.create_view(callback, method, request) path = self.coerce_path(path, view) view_paths[path].append((method, view)) view_cls[path] = callback.cls return {path: (view_cls[path], methods) for path, methods in view_paths.items()} def get_operation_keys(self, subpath, method, view): """Return a list of keys that should be used to group an operation within the specification. :: /users/ ("users", "list"), ("users", "create") /users/{pk}/ ("users", "read"), ("users", "update"), ("users", "delete") /users/enabled/ ("users", "enabled") # custom viewset list action /users/{pk}/star/ ("users", "star") # custom viewset detail action /users/{pk}/groups/ ("users", "groups", "list"), ("users", "groups", "create") /users/{pk}/groups/{pk}/ ("users", "groups", "read"), ("users", "groups", "update") :param str subpath: path to the operation with any common prefix/base path removed :param str method: HTTP method :param view: the view associated with the operation :rtype: list[str] """ return self._gen.get_keys(subpath, method, view) def determine_path_prefix(self, paths): """ Given a list of all paths, return the common prefix which should be discounted when generating a schema structure. This will be the longest common string that does not include that last component of the URL, or the last component before a path parameter. For example: :: /api/v1/users/ /api/v1/users/{pk}/ The path prefix is ``/api/v1/``. :param list[str] paths: list of paths :rtype: str """ return self._gen.determine_path_prefix(paths) def should_include_endpoint(self, path, method, view, public): """Check if a given endpoint should be included in the resulting schema. :param str path: request path :param str method: http request method :param view: instantiated view callback :param bool public: if True, all endpoints are included regardless of access through `request` :returns: true if the view should be excluded :rtype: bool """ return public or self._gen.has_view_permissions(path, method, view) def get_paths_object(self, paths): """Construct the Swagger Paths object. :param OrderedDict[str,openapi.PathItem] paths: mapping of paths to :class:`.PathItem` objects :returns: the :class:`.Paths` object :rtype: openapi.Paths """ return openapi.Paths(paths=paths) def get_paths(self, endpoints, components, request, public): """Generate the Swagger Paths for the API from the given endpoints. :param dict endpoints: endpoints as returned by get_endpoints :param ReferenceResolver components: resolver/container for Swagger References :param Request request: the request made against the schema view; can be None :param bool public: if True, all endpoints are included regardless of access through `request` :returns: the :class:`.Paths` object and the longest common path prefix, as a 2-tuple :rtype: tuple[openapi.Paths,str] """ if not endpoints: return openapi.Paths(paths={}), '' prefix = self.determine_path_prefix(list(endpoints.keys())) or '' assert '{' not in prefix, "base path cannot be templated in swagger 2.0" paths = OrderedDict() for path, (view_cls, methods) in sorted(endpoints.items()): operations = {} for method, view in methods: if not self.should_include_endpoint(path, method, view, public): continue operation = self.get_operation(view, path, prefix, method, components, request) if operation is not None: operations[method.lower()] = operation if operations: # since the common prefix is used as the API basePath, it must be stripped # from individual paths when writing them into the swagger document path_suffix = path[len(prefix):] if not path_suffix.startswith('/'): path_suffix = '/' + path_suffix paths[path_suffix] = self.get_path_item(path, view_cls, operations) return self.get_paths_object(paths), prefix def get_operation(self, view, path, prefix, method, components, request): """Get an :class:`.Operation` for the given API endpoint (path, method). This method delegates to :meth:`~.inspectors.ViewInspector.get_operation` of a :class:`~.inspectors.ViewInspector` determined according to settings and :func:`@swagger_auto_schema <.swagger_auto_schema>` overrides. :param view: the view associated with this endpoint :param str path: the path component of the operation URL :param str prefix: common path prefix among all endpoints :param str method: the http method of the operation :param openapi.ReferenceResolver components: referenceable components :param Request request: the request made against the schema view; can be None :rtype: openapi.Operation """ operation_keys = self.get_operation_keys(path[len(prefix):], method, view) overrides = self.get_overrides(view, method) # the inspector class can be specified, in decreasing order of priorty, # 1. globaly via DEFAULT_AUTO_SCHEMA_CLASS view_inspector_cls = swagger_settings.DEFAULT_AUTO_SCHEMA_CLASS # 2. on the view/viewset class view_inspector_cls = getattr(view, 'swagger_schema', view_inspector_cls) # 3. on the swagger_auto_schema decorator view_inspector_cls = overrides.get('auto_schema', view_inspector_cls) if view_inspector_cls is None: return None view_inspector = view_inspector_cls(view, path, method, components, request, overrides, operation_keys) operation = view_inspector.get_operation(operation_keys) if operation is None: return None if 'consumes' in operation and set(operation.consumes) == set(self.consumes): del operation.consumes if 'produces' in operation and set(operation.produces) == set(self.produces): del operation.produces return operation def get_path_item(self, path, view_cls, operations): """Get a :class:`.PathItem` object that describes the parameters and operations related to a single path in the API. :param str path: the path :param type view_cls: the view that was bound to this path in urlpatterns :param dict[str,openapi.Operation] operations: operations defined on this path, keyed by lowercase HTTP method :rtype: openapi.PathItem """ path_parameters = self.get_path_parameters(path, view_cls) return openapi.PathItem(parameters=path_parameters, **operations) def get_overrides(self, view, method): """Get overrides specified for a given operation. :param view: the view associated with the operation :param str method: HTTP method :return: a dictionary containing any overrides set by :func:`@swagger_auto_schema <.swagger_auto_schema>` :rtype: dict """ method = method.lower() action = getattr(view, 'action', method) action_method = getattr(view, action, None) overrides = getattr(action_method, '_swagger_auto_schema', {}) if method in overrides: overrides = overrides[method] return copy.deepcopy(overrides) def get_path_parameters(self, path, view_cls): """Return a list of Parameter instances corresponding to any templated path variables. :param str path: templated request path :param type view_cls: the view class associated with the path :return: path parameters :rtype: list[openapi.Parameter] """ parameters = [] queryset = get_queryset_from_view(view_cls) for variable in sorted(uritemplate.variables(path)): model, model_field = get_queryset_field(queryset, variable) attrs = get_basic_type_info(model_field) or {'type': openapi.TYPE_STRING} if getattr(view_cls, 'lookup_field', None) == variable and attrs['type'] == openapi.TYPE_STRING: attrs['pattern'] = getattr(view_cls, 'lookup_value_regex', attrs.get('pattern', None)) if model_field and getattr(model_field, 'help_text', False): description = model_field.help_text elif model_field and getattr(model_field, 'primary_key', False): description = get_pk_description(model, model_field) else: description = None field = openapi.Parameter( name=variable, description=force_real_str(description), required=True, in_=openapi.IN_PATH, **attrs ) parameters.append(field) return parameters drf-yasg-1.20.1/src/drf_yasg/inspectors/000077500000000000000000000000001416705305200200705ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/inspectors/__init__.py000066400000000000000000000032711416705305200222040ustar00rootroot00000000000000from ..app_settings import swagger_settings from .base import ( BaseInspector, FieldInspector, FilterInspector, NotHandled, PaginatorInspector, SerializerInspector, ViewInspector ) from .field import ( CamelCaseJSONFilter, ChoiceFieldInspector, DictFieldInspector, FileFieldInspector, HiddenFieldInspector, InlineSerializerInspector, JSONFieldInspector, RecursiveFieldInspector, ReferencingSerializerInspector, RelatedFieldInspector, SerializerMethodFieldInspector, SimpleFieldInspector, StringDefaultFieldInspector ) from .query import CoreAPICompatInspector, DjangoRestResponsePagination from .view import SwaggerAutoSchema # these settings must be accessed only after defining/importing all the classes in this module to avoid ImportErrors ViewInspector.field_inspectors = swagger_settings.DEFAULT_FIELD_INSPECTORS ViewInspector.filter_inspectors = swagger_settings.DEFAULT_FILTER_INSPECTORS ViewInspector.paginator_inspectors = swagger_settings.DEFAULT_PAGINATOR_INSPECTORS __all__ = [ # base inspectors 'BaseInspector', 'FilterInspector', 'PaginatorInspector', 'FieldInspector', 'SerializerInspector', 'ViewInspector', # filter and pagination inspectors 'CoreAPICompatInspector', 'DjangoRestResponsePagination', # field inspectors 'InlineSerializerInspector', 'RecursiveFieldInspector', 'ReferencingSerializerInspector', 'RelatedFieldInspector', 'SimpleFieldInspector', 'FileFieldInspector', 'ChoiceFieldInspector', 'DictFieldInspector', 'JSONFieldInspector', 'StringDefaultFieldInspector', 'CamelCaseJSONFilter', 'HiddenFieldInspector', 'SerializerMethodFieldInspector', # view inspectors 'SwaggerAutoSchema', # module constants 'NotHandled', ] drf-yasg-1.20.1/src/drf_yasg/inspectors/base.py000066400000000000000000000513251416705305200213620ustar00rootroot00000000000000import inspect import logging from rest_framework import serializers from .. import openapi from ..utils import force_real_str, get_field_default, get_object_classes, is_list_view #: Sentinel value that inspectors must return to signal that they do not know how to handle an object NotHandled = object() logger = logging.getLogger(__name__) def is_callable_method(cls_or_instance, method_name): method = getattr(cls_or_instance, method_name) if inspect.ismethod(method) and getattr(method, '__self__', None): # bound classmethod or instance method return method, True from inspect import getattr_static return method, isinstance(getattr_static(cls_or_instance, method_name, None), staticmethod) def call_view_method(view, method_name, fallback_attr=None, default=None): """Call a view method which might throw an exception. If an exception is thrown, log an informative error message and return the value of fallback_attr, or default if not present. The method must be callable without any arguments except cls or self. :param view: view class or instance; if a class is passed, instance methods won't be called :type view: rest_framework.views.APIView or type[rest_framework.views.APIView] :param str method_name: name of a method on the view :param str fallback_attr: name of an attribute on the view to fall back on, if calling the method fails :param default: default value if all else fails :return: view method's return value, or value of view's fallback_attr, or default :rtype: any or None """ if hasattr(view, method_name): try: view_method, is_callabale = is_callable_method(view, method_name) if is_callabale: return view_method() except Exception: # pragma: no cover logger.warning("view's %s raised exception during schema generation; use " "`getattr(self, 'swagger_fake_view', False)` to detect and short-circuit this", type(view).__name__, exc_info=True) if fallback_attr and hasattr(view, fallback_attr): return getattr(view, fallback_attr) return default class BaseInspector(object): def __init__(self, view, path, method, components, request): """ :param rest_framework.views.APIView view: the view associated with this endpoint :param str path: the path component of the operation URL :param str method: the http method of the operation :param openapi.ReferenceResolver components: referenceable components :param rest_framework.request.Request request: the request made against the schema view; can be None """ self.view = view self.path = path self.method = method self.components = components self.request = request def process_result(self, result, method_name, obj, **kwargs): """After an inspector handles an object (i.e. returns a value other than :data:`.NotHandled`), all inspectors that were probed get the chance to alter the result, in reverse order. The inspector that handled the object is the first to receive a ``process_result`` call with the object it just returned. This behaviour is similar to the Django request/response middleware processing. If this inspector has no post-processing to do, it should just ``return result`` (the default implementation). :param result: the return value of the winning inspector, or ``None`` if no inspector handled the object :param str method_name: name of the method that was called on the inspector :param obj: first argument passed to inspector method :param kwargs: additional arguments passed to inspector method :return: """ return result def probe_inspectors(self, inspectors, method_name, obj, initkwargs=None, **kwargs): """Probe a list of inspectors with a given object. The first inspector in the list to return a value that is not :data:`.NotHandled` wins. :param list[type[BaseInspector]] inspectors: list of inspectors to probe :param str method_name: name of the target method on the inspector :param obj: first argument to inspector method :param dict initkwargs: extra kwargs for instantiating inspector class :param kwargs: additional arguments to inspector method :return: the return value of the winning inspector, or ``None`` if no inspector handled the object """ initkwargs = initkwargs or {} tried_inspectors = [] for inspector in inspectors: assert inspect.isclass(inspector), "inspector must be a class, not an object" assert issubclass(inspector, BaseInspector), "inspectors must subclass BaseInspector" inspector = inspector(self.view, self.path, self.method, self.components, self.request, **initkwargs) tried_inspectors.append(inspector) method = getattr(inspector, method_name, None) if method is None: continue result = method(obj, **kwargs) if result is not NotHandled: break else: # pragma: no cover logger.warning("%s ignored because no inspector in %s handled it (operation: %s)", obj, inspectors, method_name) result = None for inspector in reversed(tried_inspectors): result = inspector.process_result(result, method_name, obj, **kwargs) return result def get_renderer_classes(self): """Get the renderer classes of this view by calling `get_renderers`. :return: renderer classes :rtype: list[type[rest_framework.renderers.BaseRenderer]] """ return get_object_classes(call_view_method(self.view, 'get_renderers', 'renderer_classes', [])) def get_parser_classes(self): """Get the parser classes of this view by calling `get_parsers`. :return: parser classes :rtype: list[type[rest_framework.parsers.BaseParser]] """ return get_object_classes(call_view_method(self.view, 'get_parsers', 'parser_classes', [])) class PaginatorInspector(BaseInspector): """Base inspector for paginators. Responisble for determining extra query parameters and response structure added by given paginators. """ def get_paginator_parameters(self, paginator): """Get the pagination parameters for a single paginator **instance**. Should return :data:`.NotHandled` if this inspector does not know how to handle the given `paginator`. :param BasePagination paginator: the paginator :rtype: list[openapi.Parameter] """ return NotHandled def get_paginated_response(self, paginator, response_schema): """Add appropriate paging fields to a response :class:`.Schema`. Should return :data:`.NotHandled` if this inspector does not know how to handle the given `paginator`. :param BasePagination paginator: the paginator :param openapi.Schema response_schema: the response schema that must be paged. :rtype: openapi.Schema """ return NotHandled class FilterInspector(BaseInspector): """Base inspector for filter backends. Responsible for determining extra query parameters added by given filter backends. """ def get_filter_parameters(self, filter_backend): """Get the filter parameters for a single filter backend **instance**. Should return :data:`.NotHandled` if this inspector does not know how to handle the given `filter_backend`. :param BaseFilterBackend filter_backend: the filter backend :rtype: list[openapi.Parameter] """ return NotHandled class FieldInspector(BaseInspector): """Base inspector for serializers and serializer fields. """ def __init__(self, view, path, method, components, request, field_inspectors): super(FieldInspector, self).__init__(view, path, method, components, request) self.field_inspectors = field_inspectors def add_manual_fields(self, serializer_or_field, schema): """Set fields from the ``swagger_schem_fields`` attribute on the Meta class. This method is called only for serializers or fields that are converted into ``openapi.Schema`` objects. :param serializer_or_field: serializer or field instance :param openapi.Schema schema: the schema object to be modified in-place """ meta = getattr(serializer_or_field, 'Meta', None) swagger_schema_fields = getattr(meta, 'swagger_schema_fields', {}) if swagger_schema_fields: for attr, val in swagger_schema_fields.items(): setattr(schema, attr, val) def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): """Convert a drf Serializer or Field instance into a Swagger object. Should return :data:`.NotHandled` if this inspector does not know how to handle the given `field`. :param rest_framework.serializers.Field field: the source field :param type[openapi.SwaggerDict] swagger_object_type: should be one of Schema, Parameter, Items :param bool use_references: if False, forces all objects to be declared inline instead of by referencing other components :param kwargs: extra attributes for constructing the object; if swagger_object_type is Parameter, ``name`` and ``in_`` should be provided :return: the swagger object :rtype: openapi.Parameter or openapi.Items or openapi.Schema or openapi.SchemaRef """ return NotHandled def probe_field_inspectors(self, field, swagger_object_type, use_references, **kwargs): """Helper method for recursively probing `field_inspectors` to handle a given field. All arguments are the same as :meth:`.field_to_swagger_object`. :rtype: openapi.Parameter or openapi.Items or openapi.Schema or openapi.SchemaRef """ return self.probe_inspectors( self.field_inspectors, 'field_to_swagger_object', field, {'field_inspectors': self.field_inspectors}, swagger_object_type=swagger_object_type, use_references=use_references, **kwargs ) def _get_partial_types(self, field, swagger_object_type, use_references, **kwargs): """Helper method to extract generic information from a field and return a partial constructor for the appropriate openapi object. All arguments are the same as :meth:`.field_to_swagger_object`. The return value is a tuple consisting of: * a function for constructing objects of `swagger_object_type`; its prototype is: :: def SwaggerType(existing_object=None, **instance_kwargs): This function creates an instance of `swagger_object_type`, passing the following attributes to its init, in order of precedence: - arguments specified by the ``kwargs`` parameter of :meth:`._get_partial_types` - ``instance_kwargs`` passed to the constructor function - ``title``, ``description``, ``required``, ``x-nullable`` and ``default`` inferred from the field, where appropriate If ``existing_object`` is not ``None``, it is updated instead of creating a new object. * a type that should be used for child objects if `field` is of an array type. This can currently have two values: - :class:`.Schema` if `swagger_object_type` is :class:`.Schema` - :class:`.Items` if `swagger_object_type` is :class:`.Parameter` or :class:`.Items` :rtype: (function,type[openapi.Schema] or type[openapi.Items]) """ assert swagger_object_type in (openapi.Schema, openapi.Parameter, openapi.Items) assert not isinstance(field, openapi.SwaggerDict), "passed field is already a SwaggerDict object" title = force_real_str(field.label) if field.label else None title = title if swagger_object_type == openapi.Schema else None # only Schema has title help_text = getattr(field, 'help_text', None) description = force_real_str(help_text) if help_text else None description = description if swagger_object_type != openapi.Items else None # Items has no description either def SwaggerType(existing_object=None, use_field_title=True, **instance_kwargs): if 'required' not in instance_kwargs and swagger_object_type == openapi.Parameter: instance_kwargs['required'] = field.required if 'default' not in instance_kwargs and swagger_object_type != openapi.Items: default = get_field_default(field) if default not in (None, serializers.empty): instance_kwargs['default'] = default if use_field_title and instance_kwargs.get('type', None) != openapi.TYPE_ARRAY: instance_kwargs.setdefault('title', title) if description is not None: instance_kwargs.setdefault('description', description) if field.allow_null: instance_kwargs['x_nullable'] = True instance_kwargs.update(kwargs) if existing_object is not None: assert isinstance(existing_object, swagger_object_type) for key, val in sorted(instance_kwargs.items()): setattr(existing_object, key, val) result = existing_object else: result = swagger_object_type(**instance_kwargs) # Provide an option to add manual paremeters to a schema # for example, to add examples if swagger_object_type == openapi.Schema: self.add_manual_fields(field, result) return result # arrays in Schema have Schema elements, arrays in Parameter and Items have Items elements child_swagger_type = openapi.Schema if swagger_object_type == openapi.Schema else openapi.Items return SwaggerType, child_swagger_type class SerializerInspector(FieldInspector): def get_schema(self, serializer): """Convert a DRF Serializer instance to an :class:`.openapi.Schema`. Should return :data:`.NotHandled` if this inspector does not know how to handle the given `serializer`. :param serializers.BaseSerializer serializer: the ``Serializer`` instance :rtype: openapi.Schema """ return NotHandled def get_request_parameters(self, serializer, in_): """Convert a DRF serializer into a list of :class:`.Parameter`\\ s. Should return :data:`.NotHandled` if this inspector does not know how to handle the given `serializer`. :param serializers.BaseSerializer serializer: the ``Serializer`` instance :param str in_: the location of the parameters, one of the `openapi.IN_*` constants :rtype: list[openapi.Parameter] """ return NotHandled class ViewInspector(BaseInspector): body_methods = ('PUT', 'PATCH', 'POST', 'DELETE') #: methods that are allowed to have a request body #: methods that are assumed to require a request body determined by the view's ``serializer_class`` implicit_body_methods = ('PUT', 'PATCH', 'POST') #: methods which are assumed to return a list of objects when present on non-detail endpoints implicit_list_response_methods = ('GET',) # real values set in __init__ to prevent import errors field_inspectors = [] #: filter_inspectors = [] #: paginator_inspectors = [] #: def __init__(self, view, path, method, components, request, overrides): """ Inspector class responsible for providing :class:`.Operation` definitions given a view, path and method. :param dict overrides: manual overrides as passed to :func:`@swagger_auto_schema <.swagger_auto_schema>` """ super(ViewInspector, self).__init__(view, path, method, components, request) self.overrides = overrides self._prepend_inspector_overrides('field_inspectors') self._prepend_inspector_overrides('filter_inspectors') self._prepend_inspector_overrides('paginator_inspectors') def _prepend_inspector_overrides(self, inspectors): extra_inspectors = self.overrides.get(inspectors, None) if extra_inspectors: default_inspectors = [insp for insp in getattr(self, inspectors) if insp not in extra_inspectors] setattr(self, inspectors, extra_inspectors + default_inspectors) def get_operation(self, operation_keys): """Get an :class:`.Operation` for the given API endpoint (path, method). This includes query, body parameters and response schemas. :param tuple[str] operation_keys: an array of keys describing the hierarchical layout of this view in the API; e.g. ``('snippets', 'list')``, ``('snippets', 'retrieve')``, etc. :rtype: openapi.Operation """ raise NotImplementedError("ViewInspector must implement get_operation()!") def is_list_view(self): """Determine whether this view is a list or a detail view. The difference between the two is that detail views depend on a pk/id path parameter. Note that a non-detail view does not necessarily imply a list reponse (:meth:`.has_list_response`), nor are list responses limited to non-detail views. For example, one might have a `/topic//posts` endpoint which is a detail view that has a list response. :rtype: bool""" return is_list_view(self.path, self.method, self.view) def has_list_response(self): """Determine whether this view returns multiple objects. By default this is any non-detail view (see :meth:`.is_list_view`) whose request method is one of :attr:`.implicit_list_response_methods`. :rtype: bool """ return self.is_list_view() and (self.method.upper() in self.implicit_list_response_methods) def should_filter(self): """Determine whether filter backend parameters should be included for this request. :rtype: bool """ return getattr(self.view, 'filter_backends', None) and self.has_list_response() def get_filter_parameters(self): """Return the parameters added to the view by its filter backends. :rtype: list[openapi.Parameter] """ if not self.should_filter(): return [] fields = [] for filter_backend in getattr(self.view, 'filter_backends'): fields += self.probe_inspectors(self.filter_inspectors, 'get_filter_parameters', filter_backend()) or [] return fields def should_page(self): """Determine whether paging parameters and structure should be added to this operation's request and response. :rtype: bool """ return getattr(self.view, 'paginator', None) and self.has_list_response() def get_pagination_parameters(self): """Return the parameters added to the view by its paginator. :rtype: list[openapi.Parameter] """ if not self.should_page(): return [] return self.probe_inspectors(self.paginator_inspectors, 'get_paginator_parameters', getattr(self.view, 'paginator')) or [] def serializer_to_schema(self, serializer): """Convert a serializer to an OpenAPI :class:`.Schema`. :param serializers.BaseSerializer serializer: the ``Serializer`` instance :returns: the converted :class:`.Schema`, or ``None`` in case of an unknown serializer :rtype: openapi.Schema or openapi.SchemaRef """ return self.probe_inspectors( self.field_inspectors, 'get_schema', serializer, {'field_inspectors': self.field_inspectors} ) def serializer_to_parameters(self, serializer, in_): """Convert a serializer to a possibly empty list of :class:`.Parameter`\\ s. :param serializers.BaseSerializer serializer: the ``Serializer`` instance :param str in_: the location of the parameters, one of the `openapi.IN_*` constants :rtype: list[openapi.Parameter] """ return self.probe_inspectors( self.field_inspectors, 'get_request_parameters', serializer, {'field_inspectors': self.field_inspectors}, in_=in_ ) or [] def get_paginated_response(self, response_schema): """Add appropriate paging fields to a response :class:`.Schema`. :param openapi.Schema response_schema: the response schema that must be paged. :returns: the paginated response class:`.Schema`, or ``None`` in case of an unknown pagination scheme :rtype: openapi.Schema """ return self.probe_inspectors(self.paginator_inspectors, 'get_paginated_response', getattr(self.view, 'paginator'), response_schema=response_schema) drf-yasg-1.20.1/src/drf_yasg/inspectors/field.py000066400000000000000000001032311416705305200215250ustar00rootroot00000000000000import datetime import inspect import logging import operator import typing import uuid from collections import OrderedDict from decimal import Decimal from inspect import signature as inspect_signature from django.core import validators from django.db import models from rest_framework import serializers from rest_framework.settings import api_settings as rest_framework_settings from .. import openapi from ..errors import SwaggerGenerationError from ..utils import ( decimal_as_float, field_value_to_representation, filter_none, get_serializer_class, get_serializer_ref_name ) from .base import FieldInspector, NotHandled, SerializerInspector, call_view_method logger = logging.getLogger(__name__) class InlineSerializerInspector(SerializerInspector): """Provides serializer conversions using :meth:`.FieldInspector.field_to_swagger_object`.""" #: whether to output :class:`.Schema` definitions inline or into the ``definitions`` section use_definitions = False def get_schema(self, serializer): return self.probe_field_inspectors(serializer, openapi.Schema, self.use_definitions) def add_manual_parameters(self, serializer, parameters): """Add/replace parameters from the given list of automatically generated request parameters. This method is called only when the serializer is converted into a list of parameters for use in a form data request. :param serializer: serializer instance :param list[openapi.Parameter] parameters: genereated parameters :return: modified parameters :rtype: list[openapi.Parameter] """ return parameters def get_request_parameters(self, serializer, in_): fields = getattr(serializer, 'fields', {}) parameters = [ self.probe_field_inspectors( value, openapi.Parameter, self.use_definitions, name=self.get_parameter_name(key), in_=in_ ) for key, value in fields.items() if not getattr(value, 'read_only', False) ] return self.add_manual_parameters(serializer, parameters) def get_property_name(self, field_name): return field_name def get_parameter_name(self, field_name): return field_name def get_serializer_ref_name(self, serializer): return get_serializer_ref_name(serializer) def _has_ref_name(self, serializer): serializer_meta = getattr(serializer, 'Meta', None) return hasattr(serializer_meta, 'ref_name') def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) if isinstance(field, (serializers.ListSerializer, serializers.ListField)): child_schema = self.probe_field_inspectors(field.child, ChildSwaggerType, use_references) limits = find_limits(field) or {} return SwaggerType( type=openapi.TYPE_ARRAY, items=child_schema, **limits ) elif isinstance(field, serializers.Serializer): if swagger_object_type != openapi.Schema: raise SwaggerGenerationError("cannot instantiate nested serializer as " + swagger_object_type.__name__) ref_name = self.get_serializer_ref_name(field) def make_schema_definition(serializer=field): properties = OrderedDict() required = [] for property_name, child in serializer.fields.items(): property_name = self.get_property_name(property_name) prop_kwargs = { 'read_only': bool(child.read_only) or None } prop_kwargs = filter_none(prop_kwargs) child_schema = self.probe_field_inspectors( child, ChildSwaggerType, use_references, **prop_kwargs ) properties[property_name] = child_schema if child.required and not getattr(child_schema, 'read_only', False): required.append(property_name) result = SwaggerType( # the title is derived from the field name and is better to # be omitted from models use_field_title=False, type=openapi.TYPE_OBJECT, properties=properties, required=required or None, ) setattr(result, '_NP_serializer', get_serializer_class(serializer)) return result if not ref_name or not use_references: return make_schema_definition() definitions = self.components.with_scope(openapi.SCHEMA_DEFINITIONS) actual_schema = definitions.setdefault(ref_name, make_schema_definition) actual_schema._remove_read_only() actual_serializer = getattr(actual_schema, '_NP_serializer', None) this_serializer = get_serializer_class(field) if actual_serializer and actual_serializer != this_serializer: # pragma: no cover explicit_refs = self._has_ref_name(actual_serializer) and self._has_ref_name(this_serializer) if not explicit_refs: raise SwaggerGenerationError( "Schema for %s would override distinct serializer %s because they implicitly share the same " "ref_name; explicitly set the ref_name attribute on both serializers' Meta classes" % (actual_serializer, this_serializer)) return openapi.SchemaRef(definitions, ref_name) return NotHandled class ReferencingSerializerInspector(InlineSerializerInspector): use_definitions = True def get_queryset_field(queryset, field_name): """Try to get information about a model and model field from a queryset. :param queryset: the queryset :param field_name: target field name :returns: the model and target field from the queryset as a 2-tuple; both elements can be ``None`` :rtype: tuple """ model = getattr(queryset, 'model', None) model_field = get_model_field(model, field_name) return model, model_field def get_model_field(model, field_name): """Try to get the given field from a django db model. :param model: the model :param field_name: target field name :return: model field or ``None`` """ try: if field_name == 'pk': return model._meta.pk else: return model._meta.get_field(field_name) except Exception: # pragma: no cover return None def get_queryset_from_view(view, serializer=None): """Try to get the queryset of the given view :param view: the view instance or class :param serializer: if given, will check that the view's get_serializer_class return matches this serialzier :return: queryset or ``None`` """ try: queryset = call_view_method(view, 'get_queryset', 'queryset') if queryset is not None and serializer is not None: # make sure the view is actually using *this* serializer assert type(serializer) == call_view_method(view, 'get_serializer_class', 'serializer_class') return queryset except Exception: # pragma: no cover return None def get_parent_serializer(field): """Get the nearest parent ``Serializer`` instance for the given field. :return: ``Serializer`` or ``None`` """ while field is not None: if isinstance(field, serializers.Serializer): return field field = field.parent return None # pragma: no cover def get_related_model(model, source): """Try to find the other side of a model relationship given the name of a related field. :param model: one side of the relationship :param str source: related field name :return: related model or ``None`` """ try: descriptor = getattr(model, source) try: return descriptor.rel.related_model except Exception: return descriptor.field.remote_field.model except Exception: # pragma: no cover return None class RelatedFieldInspector(FieldInspector): """Provides conversions for ``RelatedField``\\ s.""" def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) if isinstance(field, serializers.ManyRelatedField): child_schema = self.probe_field_inspectors(field.child_relation, ChildSwaggerType, use_references) return SwaggerType( type=openapi.TYPE_ARRAY, items=child_schema, unique_items=True, ) if not isinstance(field, serializers.RelatedField): return NotHandled field_queryset = getattr(field, 'queryset', None) if isinstance(field, (serializers.PrimaryKeyRelatedField, serializers.SlugRelatedField)): if getattr(field, 'pk_field', ''): # a PrimaryKeyRelatedField can have a `pk_field` attribute which is a # serializer field that will convert the PK value result = self.probe_field_inspectors(field.pk_field, swagger_object_type, use_references, **kwargs) # take the type, format, etc from `pk_field`, and the field-level information # like title, description, default from the PrimaryKeyRelatedField return SwaggerType(existing_object=result) target_field = getattr(field, 'slug_field', 'pk') if field_queryset is not None: # if the RelatedField has a queryset, try to get the related model field from there model, model_field = get_queryset_field(field_queryset, target_field) else: # if the RelatedField has no queryset (e.g. read only), try to find the target model # from the view queryset or ModelSerializer model, if present parent_serializer = get_parent_serializer(field) serializer_meta = getattr(parent_serializer, 'Meta', None) this_model = getattr(serializer_meta, 'model', None) if not this_model: view_queryset = get_queryset_from_view(self.view, parent_serializer) this_model = getattr(view_queryset, 'model', None) source = getattr(field, 'source', '') or field.field_name if not source and isinstance(field.parent, serializers.ManyRelatedField): source = field.parent.field_name model = get_related_model(this_model, source) model_field = get_model_field(model, target_field) attrs = get_basic_type_info(model_field) or {'type': openapi.TYPE_STRING} return SwaggerType(**attrs) elif isinstance(field, serializers.HyperlinkedRelatedField): return SwaggerType(type=openapi.TYPE_STRING, format=openapi.FORMAT_URI) return SwaggerType(type=openapi.TYPE_STRING) def find_regex(regex_field): """Given a ``Field``, look for a ``RegexValidator`` and try to extract its pattern and return it as a string. :param serializers.Field regex_field: the field instance :return: the extracted pattern, or ``None`` :rtype: str """ regex_validator = None for validator in regex_field.validators: if isinstance(validator, validators.RegexValidator): if isinstance(validator, validators.URLValidator) or validator == validators.validate_ipv4_address: # skip the default url and IP regexes because they are complex and unhelpful # validate_ipv4_address is a RegexValidator instance in Django 1.11 continue if regex_validator is not None: # bail if multiple validators are found - no obvious way to choose return None # pragma: no cover regex_validator = validator # regex_validator.regex should be a compiled re object... try: pattern = getattr(getattr(regex_validator, 'regex', None), 'pattern', None) except Exception: # pragma: no cover logger.warning('failed to compile regex validator of ' + str(regex_field), exc_info=True) return None if pattern: # attempt some basic cleanup to remove regex constructs not supported by JavaScript # -- swagger uses javascript-style regexes - see https://github.com/swagger-api/swagger-editor/issues/1601 if pattern.endswith('\\Z') or pattern.endswith('\\z'): pattern = pattern[:-2] + '$' return pattern numeric_fields = (serializers.IntegerField, serializers.FloatField, serializers.DecimalField) limit_validators = [ # minimum and maximum apply to numbers (validators.MinValueValidator, numeric_fields, 'minimum', operator.__gt__), (validators.MaxValueValidator, numeric_fields, 'maximum', operator.__lt__), # minLength and maxLength apply to strings (validators.MinLengthValidator, serializers.CharField, 'min_length', operator.__gt__), (validators.MaxLengthValidator, serializers.CharField, 'max_length', operator.__lt__), # minItems and maxItems apply to lists (validators.MinLengthValidator, (serializers.ListField, serializers.ListSerializer), 'min_items', operator.__gt__), (validators.MaxLengthValidator, (serializers.ListField, serializers.ListSerializer), 'max_items', operator.__lt__), ] def find_limits(field): """Given a ``Field``, look for min/max value/length validators and return appropriate limit validation attributes. :param serializers.Field field: the field instance :return: the extracted limits :rtype: OrderedDict """ limits = {} applicable_limits = [ (validator, attr, improves) for validator, field_class, attr, improves in limit_validators if isinstance(field, field_class) ] if isinstance(field, serializers.DecimalField) and not decimal_as_float(field): return limits for validator in field.validators: if not hasattr(validator, 'limit_value'): continue limit_value = validator.limit_value if isinstance(limit_value, Decimal) and decimal_as_float(field): limit_value = float(limit_value) for validator_class, attr, improves in applicable_limits: if isinstance(validator, validator_class): if attr not in limits or improves(limit_value, limits[attr]): limits[attr] = limit_value if hasattr(field, "allow_blank") and not field.allow_blank: if limits.get('min_length', 0) < 1: limits['min_length'] = 1 return OrderedDict(sorted(limits.items())) def decimal_field_type(field): return openapi.TYPE_NUMBER if decimal_as_float(field) else openapi.TYPE_STRING model_field_to_basic_type = [ (models.AutoField, (openapi.TYPE_INTEGER, None)), (models.BinaryField, (openapi.TYPE_STRING, openapi.FORMAT_BINARY)), (models.BooleanField, (openapi.TYPE_BOOLEAN, None)), (models.NullBooleanField, (openapi.TYPE_BOOLEAN, None)), (models.DateTimeField, (openapi.TYPE_STRING, openapi.FORMAT_DATETIME)), (models.DateField, (openapi.TYPE_STRING, openapi.FORMAT_DATE)), (models.DecimalField, (decimal_field_type, openapi.FORMAT_DECIMAL)), (models.DurationField, (openapi.TYPE_STRING, None)), (models.FloatField, (openapi.TYPE_NUMBER, None)), (models.IntegerField, (openapi.TYPE_INTEGER, None)), (models.IPAddressField, (openapi.TYPE_STRING, openapi.FORMAT_IPV4)), (models.GenericIPAddressField, (openapi.TYPE_STRING, openapi.FORMAT_IPV6)), (models.SlugField, (openapi.TYPE_STRING, openapi.FORMAT_SLUG)), (models.TextField, (openapi.TYPE_STRING, None)), (models.TimeField, (openapi.TYPE_STRING, None)), (models.UUIDField, (openapi.TYPE_STRING, openapi.FORMAT_UUID)), (models.CharField, (openapi.TYPE_STRING, None)), ] ip_format = {'ipv4': openapi.FORMAT_IPV4, 'ipv6': openapi.FORMAT_IPV6} serializer_field_to_basic_type = [ (serializers.EmailField, (openapi.TYPE_STRING, openapi.FORMAT_EMAIL)), (serializers.SlugField, (openapi.TYPE_STRING, openapi.FORMAT_SLUG)), (serializers.URLField, (openapi.TYPE_STRING, openapi.FORMAT_URI)), (serializers.IPAddressField, (openapi.TYPE_STRING, lambda field: ip_format.get(field.protocol, None))), (serializers.UUIDField, (openapi.TYPE_STRING, openapi.FORMAT_UUID)), (serializers.RegexField, (openapi.TYPE_STRING, None)), (serializers.CharField, (openapi.TYPE_STRING, None)), (serializers.BooleanField, (openapi.TYPE_BOOLEAN, None)), (serializers.NullBooleanField, (openapi.TYPE_BOOLEAN, None)), (serializers.IntegerField, (openapi.TYPE_INTEGER, None)), (serializers.FloatField, (openapi.TYPE_NUMBER, None)), (serializers.DecimalField, (decimal_field_type, openapi.FORMAT_DECIMAL)), (serializers.DurationField, (openapi.TYPE_STRING, None)), (serializers.DateField, (openapi.TYPE_STRING, openapi.FORMAT_DATE)), (serializers.DateTimeField, (openapi.TYPE_STRING, openapi.FORMAT_DATETIME)), (serializers.ModelField, (openapi.TYPE_STRING, None)), ] basic_type_info = serializer_field_to_basic_type + model_field_to_basic_type def get_basic_type_info(field): """Given a serializer or model ``Field``, return its basic type information - ``type``, ``format``, ``pattern``, and any applicable min/max limit values. :param field: the field instance :return: the extracted attributes as a dictionary, or ``None`` if the field type is not known :rtype: OrderedDict """ if field is None: return None for field_class, type_format in basic_type_info: if isinstance(field, field_class): swagger_type, format = type_format if callable(swagger_type): swagger_type = swagger_type(field) if callable(format): format = format(field) break else: # pragma: no cover return None pattern = None if swagger_type == openapi.TYPE_STRING: pattern = find_regex(field) limits = find_limits(field) result = OrderedDict([ ('type', swagger_type), ('format', format), ('pattern', pattern) ]) result.update(limits) result = filter_none(result) return result def decimal_return_type(): return openapi.TYPE_STRING if rest_framework_settings.COERCE_DECIMAL_TO_STRING else openapi.TYPE_NUMBER def get_origin_type(hint_class): return getattr(hint_class, '__origin__', None) or hint_class def hint_class_issubclass(hint_class, check_class): origin_type = get_origin_type(hint_class) return inspect.isclass(origin_type) and issubclass(origin_type, check_class) hinting_type_info = [ (bool, (openapi.TYPE_BOOLEAN, None)), (int, (openapi.TYPE_INTEGER, None)), (str, (openapi.TYPE_STRING, None)), (float, (openapi.TYPE_NUMBER, None)), (dict, (openapi.TYPE_OBJECT, None)), (Decimal, (decimal_return_type, openapi.FORMAT_DECIMAL)), (uuid.UUID, (openapi.TYPE_STRING, openapi.FORMAT_UUID)), (datetime.datetime, (openapi.TYPE_STRING, openapi.FORMAT_DATETIME)), (datetime.date, (openapi.TYPE_STRING, openapi.FORMAT_DATE)), ] if hasattr(typing, 'get_args'): # python >=3.8 typing_get_args = typing.get_args else: # python <3.8 def typing_get_args(tp): return getattr(tp, '__args__', ()) def inspect_collection_hint_class(hint_class): args = typing_get_args(hint_class) child_class = args[0] if args else str child_type_info = get_basic_type_info_from_hint(child_class) or {'type': openapi.TYPE_STRING} return OrderedDict([ ('type', openapi.TYPE_ARRAY), ('items', openapi.Items(**child_type_info)), ]) hinting_type_info.append(((typing.Sequence, typing.AbstractSet), inspect_collection_hint_class)) def _get_union_types(hint_class): origin_type = get_origin_type(hint_class) if origin_type is typing.Union: return hint_class.__args__ def get_basic_type_info_from_hint(hint_class): """Given a class (eg from a SerializerMethodField's return type hint, return its basic type information - ``type``, ``format``, ``pattern``, and any applicable min/max limit values. :param hint_class: the class :return: the extracted attributes as a dictionary, or ``None`` if the field type is not known :rtype: OrderedDict """ union_types = _get_union_types(hint_class) if union_types: # Optional is implemented as Union[T, None] if len(union_types) == 2 and isinstance(None, union_types[1]): result = get_basic_type_info_from_hint(union_types[0]) if result: result['x-nullable'] = True return result return None for check_class, info in hinting_type_info: if hint_class_issubclass(hint_class, check_class): if callable(info): return info(hint_class) swagger_type, format = info if callable(swagger_type): swagger_type = swagger_type() return OrderedDict([ ('type', swagger_type), ('format', format), ]) return None class SerializerMethodFieldInspector(FieldInspector): """Provides conversion for SerializerMethodField, optionally using information from the swagger_serializer_method decorator. """ def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): if not isinstance(field, serializers.SerializerMethodField): return NotHandled method = getattr(field.parent, field.method_name, None) if method is None: return NotHandled # attribute added by the swagger_serializer_method decorator serializer = getattr(method, "_swagger_serializer", None) if serializer: # in order of preference for description, use: # 1) field.help_text from SerializerMethodField(help_text) # 2) serializer.help_text from swagger_serializer_method(serializer) # 3) method's docstring description = field.help_text if description is None: description = getattr(serializer, 'help_text', None) if description is None: description = method.__doc__ label = field.label if label is None: label = getattr(serializer, 'label', None) if inspect.isclass(serializer): serializer_kwargs = { "help_text": description, "label": label, "read_only": True, } serializer = method._swagger_serializer(**serializer_kwargs) else: serializer.help_text = description serializer.label = label serializer.read_only = True return self.probe_field_inspectors(serializer, swagger_object_type, use_references, read_only=True) else: # look for Python 3.5+ style type hinting of the return value hint_class = inspect_signature(method).return_annotation if not inspect.isclass(hint_class) and hasattr(hint_class, '__args__'): hint_class = hint_class.__args__[0] if inspect.isclass(hint_class) and not issubclass(hint_class, inspect._empty): type_info = get_basic_type_info_from_hint(hint_class) if type_info is not None: SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) return SwaggerType(**type_info) return NotHandled class SimpleFieldInspector(FieldInspector): """Provides conversions for fields which can be described using just ``type``, ``format``, ``pattern`` and min/max validators. """ def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): type_info = get_basic_type_info(field) if type_info is None: return NotHandled SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) return SwaggerType(**type_info) class ChoiceFieldInspector(FieldInspector): """Provides conversions for ``ChoiceField`` and ``MultipleChoiceField``.""" def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) if isinstance(field, serializers.ChoiceField): enum_type = openapi.TYPE_STRING enum_values = [] for choice in field.choices.keys(): if isinstance(field, serializers.MultipleChoiceField): choice = field_value_to_representation(field, [choice])[0] else: choice = field_value_to_representation(field, choice) enum_values.append(choice) # for ModelSerializer, try to infer the type from the associated model field serializer = get_parent_serializer(field) if isinstance(serializer, serializers.ModelSerializer): model = getattr(getattr(serializer, 'Meta'), 'model') # Use the parent source for nested fields model_field = get_model_field(model, field.source or field.parent.source) # If the field has a base_field its type must be used if getattr(model_field, "base_field", None): model_field = model_field.base_field if model_field: model_type = get_basic_type_info(model_field) if model_type: enum_type = model_type.get('type', enum_type) else: # Try to infer field type based on enum values enum_value_types = {type(v) for v in enum_values} if len(enum_value_types) == 1: values_type = get_basic_type_info_from_hint(next(iter(enum_value_types))) if values_type: enum_type = values_type.get('type', enum_type) if isinstance(field, serializers.MultipleChoiceField): result = SwaggerType( type=openapi.TYPE_ARRAY, items=ChildSwaggerType( type=enum_type, enum=enum_values ) ) if swagger_object_type == openapi.Parameter: if result['in'] in (openapi.IN_FORM, openapi.IN_QUERY): result.collection_format = 'multi' else: result = SwaggerType(type=enum_type, enum=enum_values) return result return NotHandled class FileFieldInspector(FieldInspector): """Provides conversions for ``FileField``\\ s.""" def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) if isinstance(field, serializers.FileField): # swagger 2.0 does not support specifics about file fields, so ImageFile gets no special treatment # OpenAPI 3.0 does support it, so a future implementation could handle this better err = SwaggerGenerationError("FileField is supported only in a formData Parameter or response Schema") if swagger_object_type == openapi.Schema: # FileField.to_representation returns URL or file name result = SwaggerType(type=openapi.TYPE_STRING, read_only=True) if getattr(field, 'use_url', rest_framework_settings.UPLOADED_FILES_USE_URL): result.format = openapi.FORMAT_URI return result elif swagger_object_type == openapi.Parameter: param = SwaggerType(type=openapi.TYPE_FILE) if param['in'] != openapi.IN_FORM: raise err # pragma: no cover return param else: raise err # pragma: no cover return NotHandled class DictFieldInspector(FieldInspector): """Provides conversion for ``DictField``.""" def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) if isinstance(field, serializers.DictField) and swagger_object_type == openapi.Schema: child_schema = self.probe_field_inspectors(field.child, ChildSwaggerType, use_references) return SwaggerType( type=openapi.TYPE_OBJECT, additional_properties=child_schema ) return NotHandled class HiddenFieldInspector(FieldInspector): """Hide ``HiddenField``.""" def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): if isinstance(field, serializers.HiddenField): return None return NotHandled class JSONFieldInspector(FieldInspector): """Provides conversion for ``JSONField``.""" def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) if isinstance(field, serializers.JSONField) and swagger_object_type == openapi.Schema: return SwaggerType(type=openapi.TYPE_OBJECT) return NotHandled class StringDefaultFieldInspector(FieldInspector): """For otherwise unhandled fields, return them as plain :data:`.TYPE_STRING` objects.""" def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): # pragma: no cover # TODO unhandled fields: TimeField SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) return SwaggerType(type=openapi.TYPE_STRING) try: from djangorestframework_camel_case.parser import CamelCaseJSONParser from djangorestframework_camel_case.render import CamelCaseJSONRenderer, camelize except ImportError: # pragma: no cover CamelCaseJSONParser = CamelCaseJSONRenderer = None def camelize(data): return data class CamelCaseJSONFilter(FieldInspector): """Converts property names to camelCase if ``djangorestframework_camel_case`` is used.""" def camelize_string(self, s): """Hack to force ``djangorestframework_camel_case`` to camelize a plain string. :param str s: the string :return: camelized string :rtype: str """ return next(iter(camelize({s: ''}))) def camelize_schema(self, schema): """Recursively camelize property names for the given schema using ``djangorestframework_camel_case``. The target schema object must be modified in-place. :param openapi.Schema schema: the :class:`.Schema` object """ if getattr(schema, 'properties', {}): schema.properties = OrderedDict( (self.camelize_string(key), self.camelize_schema(openapi.resolve_ref(val, self.components)) or val) for key, val in schema.properties.items() ) if getattr(schema, 'required', []): schema.required = [self.camelize_string(p) for p in schema.required] def process_result(self, result, method_name, obj, **kwargs): if isinstance(result, openapi.Schema.OR_REF) and self.is_camel_case(): schema = openapi.resolve_ref(result, self.components) self.camelize_schema(schema) return result if CamelCaseJSONParser and CamelCaseJSONRenderer: def is_camel_case(self): return ( any(issubclass(parser, CamelCaseJSONParser) for parser in self.get_parser_classes()) or any(issubclass(renderer, CamelCaseJSONRenderer) for renderer in self.get_renderer_classes()) ) else: def is_camel_case(self): return False try: from rest_framework_recursive.fields import RecursiveField except ImportError: # pragma: no cover class RecursiveFieldInspector(FieldInspector): """Provides conversion for RecursiveField (https://github.com/heywbj/django-rest-framework-recursive)""" pass else: class RecursiveFieldInspector(FieldInspector): """Provides conversion for RecursiveField (https://github.com/heywbj/django-rest-framework-recursive)""" def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): if isinstance(field, RecursiveField) and swagger_object_type == openapi.Schema: assert use_references is True, "Can not create schema for RecursiveField when use_references is False" proxied = field.proxied if isinstance(field.proxied, serializers.ListSerializer): proxied = proxied.child ref_name = get_serializer_ref_name(proxied) assert ref_name is not None, "Can't create RecursiveField schema for inline " + str(type(proxied)) definitions = self.components.with_scope(openapi.SCHEMA_DEFINITIONS) ref = openapi.SchemaRef(definitions, ref_name, ignore_unresolved=True) if isinstance(field.proxied, serializers.ListSerializer): ref = openapi.Items(type=openapi.TYPE_ARRAY, items=ref) return ref return NotHandled drf-yasg-1.20.1/src/drf_yasg/inspectors/query.py000066400000000000000000000066251416705305200216200ustar00rootroot00000000000000from collections import OrderedDict import coreschema from rest_framework.pagination import CursorPagination, LimitOffsetPagination, PageNumberPagination from .. import openapi from ..utils import force_real_str from .base import FilterInspector, PaginatorInspector class CoreAPICompatInspector(PaginatorInspector, FilterInspector): """Converts ``coreapi.Field``\\ s to :class:`.openapi.Parameter`\\ s for filters and paginators that implement a ``get_schema_fields`` method. """ def get_paginator_parameters(self, paginator): fields = [] if hasattr(paginator, 'get_schema_fields'): fields = paginator.get_schema_fields(self.view) return [self.coreapi_field_to_parameter(field) for field in fields] def get_filter_parameters(self, filter_backend): fields = [] if hasattr(filter_backend, 'get_schema_fields'): fields = filter_backend.get_schema_fields(self.view) return [self.coreapi_field_to_parameter(field) for field in fields] def coreapi_field_to_parameter(self, field): """Convert an instance of `coreapi.Field` to a swagger :class:`.Parameter` object. :param coreapi.Field field: :rtype: openapi.Parameter """ location_to_in = { 'query': openapi.IN_QUERY, 'path': openapi.IN_PATH, 'form': openapi.IN_FORM, 'body': openapi.IN_FORM, } coreapi_types = { coreschema.Integer: openapi.TYPE_INTEGER, coreschema.Number: openapi.TYPE_NUMBER, coreschema.String: openapi.TYPE_STRING, coreschema.Boolean: openapi.TYPE_BOOLEAN, } coreschema_attrs = ['format', 'pattern', 'enum', 'min_length', 'max_length'] schema = field.schema return openapi.Parameter( name=field.name, in_=location_to_in[field.location], required=field.required, description=force_real_str(schema.description) if schema else None, type=coreapi_types.get(type(schema), openapi.TYPE_STRING), **OrderedDict((attr, getattr(schema, attr, None)) for attr in coreschema_attrs) ) class DjangoRestResponsePagination(PaginatorInspector): """Provides response schema pagination warpping for django-rest-framework's LimitOffsetPagination, PageNumberPagination and CursorPagination """ def get_paginated_response(self, paginator, response_schema): assert response_schema.type == openapi.TYPE_ARRAY, "array return expected for paged response" paged_schema = None if isinstance(paginator, (LimitOffsetPagination, PageNumberPagination, CursorPagination)): has_count = not isinstance(paginator, CursorPagination) paged_schema = openapi.Schema( type=openapi.TYPE_OBJECT, properties=OrderedDict(( ('count', openapi.Schema(type=openapi.TYPE_INTEGER) if has_count else None), ('next', openapi.Schema(type=openapi.TYPE_STRING, format=openapi.FORMAT_URI, x_nullable=True)), ('previous', openapi.Schema(type=openapi.TYPE_STRING, format=openapi.FORMAT_URI, x_nullable=True)), ('results', response_schema), )), required=['results'] ) if has_count: paged_schema.required.insert(0, 'count') return paged_schema drf-yasg-1.20.1/src/drf_yasg/inspectors/view.py000066400000000000000000000422111416705305200214140ustar00rootroot00000000000000import logging from collections import OrderedDict from rest_framework.request import is_form_media_type from rest_framework.schemas import AutoSchema from rest_framework.status import is_success from .. import openapi from ..errors import SwaggerGenerationError from ..utils import ( filter_none, force_real_str, force_serializer_instance, get_consumes, get_produces, guess_response_status, merge_params, no_body, param_list_to_odict ) from .base import ViewInspector, call_view_method logger = logging.getLogger(__name__) class SwaggerAutoSchema(ViewInspector): def __init__(self, view, path, method, components, request, overrides, operation_keys=None): super(SwaggerAutoSchema, self).__init__(view, path, method, components, request, overrides) self._sch = AutoSchema() self._sch.view = view self.operation_keys = operation_keys def get_operation(self, operation_keys=None): operation_keys = operation_keys or self.operation_keys consumes = self.get_consumes() produces = self.get_produces() body = self.get_request_body_parameters(consumes) query = self.get_query_parameters() parameters = body + query parameters = filter_none(parameters) parameters = self.add_manual_parameters(parameters) operation_id = self.get_operation_id(operation_keys) summary, description = self.get_summary_and_description() security = self.get_security() assert security is None or isinstance(security, list), "security must be a list of security requirement objects" deprecated = self.is_deprecated() tags = self.get_tags(operation_keys) responses = self.get_responses() return openapi.Operation( operation_id=operation_id, description=force_real_str(description), summary=force_real_str(summary), responses=responses, parameters=parameters, consumes=consumes, produces=produces, tags=tags, security=security, deprecated=deprecated ) def get_request_body_parameters(self, consumes): """Return the request body parameters for this view. |br| This is either: - a list with a single object Parameter with a :class:`.Schema` derived from the request serializer - a list of primitive Parameters parsed as form data :param list[str] consumes: a list of accepted MIME types as returned by :meth:`.get_consumes` :return: a (potentially empty) list of :class:`.Parameter`\\ s either ``in: body`` or ``in: formData`` :rtype: list[openapi.Parameter] """ serializer = self.get_request_serializer() schema = None if serializer is None: return [] if isinstance(serializer, openapi.Schema.OR_REF): schema = serializer if any(is_form_media_type(encoding) for encoding in consumes): if schema is not None: raise SwaggerGenerationError("form request body cannot be a Schema") return self.get_request_form_parameters(serializer) else: if schema is None: schema = self.get_request_body_schema(serializer) return [self.make_body_parameter(schema)] if schema is not None else [] def get_view_serializer(self): """Return the serializer as defined by the view's ``get_serializer()`` method. :return: the view's ``Serializer`` :rtype: rest_framework.serializers.Serializer """ return call_view_method(self.view, 'get_serializer') def _get_request_body_override(self): """Parse the request_body key in the override dict. This method is not public API.""" body_override = self.overrides.get('request_body', None) if body_override is not None: if body_override is no_body: return no_body if self.method not in self.body_methods: raise SwaggerGenerationError("request_body can only be applied to (" + ','.join(self.body_methods) + "); are you looking for query_serializer or manual_parameters?") if isinstance(body_override, openapi.Schema.OR_REF): return body_override return force_serializer_instance(body_override) return body_override def get_request_serializer(self): """Return the request serializer (used for parsing the request payload) for this endpoint. :return: the request serializer, or one of :class:`.Schema`, :class:`.SchemaRef`, ``None`` :rtype: rest_framework.serializers.Serializer """ body_override = self._get_request_body_override() if body_override is None and self.method in self.implicit_body_methods: return self.get_view_serializer() if body_override is no_body: return None return body_override def get_request_form_parameters(self, serializer): """Given a Serializer, return a list of ``in: formData`` :class:`.Parameter`\\ s. :param serializer: the view's request serializer as returned by :meth:`.get_request_serializer` :rtype: list[openapi.Parameter] """ return self.serializer_to_parameters(serializer, in_=openapi.IN_FORM) def get_request_body_schema(self, serializer): """Return the :class:`.Schema` for a given request's body data. Only applies to PUT, PATCH and POST requests. :param serializer: the view's request serializer as returned by :meth:`.get_request_serializer` :rtype: openapi.Schema """ return self.serializer_to_schema(serializer) def make_body_parameter(self, schema): """Given a :class:`.Schema` object, create an ``in: body`` :class:`.Parameter`. :param openapi.Schema schema: the request body schema :rtype: openapi.Parameter """ return openapi.Parameter(name='data', in_=openapi.IN_BODY, required=True, schema=schema) def add_manual_parameters(self, parameters): """Add/replace parameters from the given list of automatically generated request parameters. :param list[openapi.Parameter] parameters: genereated parameters :return: modified parameters :rtype: list[openapi.Parameter] """ manual_parameters = self.overrides.get('manual_parameters', None) or [] if any(param.in_ == openapi.IN_BODY for param in manual_parameters): # pragma: no cover raise SwaggerGenerationError("specify the body parameter as a Schema or Serializer in request_body") if any(param.in_ == openapi.IN_FORM for param in manual_parameters): # pragma: no cover has_body_parameter = any(param.in_ == openapi.IN_BODY for param in parameters) if has_body_parameter or not any(is_form_media_type(encoding) for encoding in self.get_consumes()): raise SwaggerGenerationError("cannot add form parameters when the request has a request body; " "did you forget to set an appropriate parser class on the view?") if self.method not in self.body_methods: raise SwaggerGenerationError("form parameters can only be applied to " "(" + ','.join(self.body_methods) + ") HTTP methods") return merge_params(parameters, manual_parameters) def get_responses(self): """Get the possible responses for this view as a swagger :class:`.Responses` object. :return: the documented responses :rtype: openapi.Responses """ response_serializers = self.get_response_serializers() return openapi.Responses( responses=self.get_response_schemas(response_serializers) ) def get_default_response_serializer(self): """Return the default response serializer for this endpoint. This is derived from either the ``request_body`` override or the request serializer (:meth:`.get_view_serializer`). :return: response serializer, :class:`.Schema`, :class:`.SchemaRef`, ``None`` """ body_override = self._get_request_body_override() if body_override and body_override is not no_body: return body_override return self.get_view_serializer() def get_default_responses(self): """Get the default responses determined for this view from the request serializer and request method. :type: dict[str, openapi.Schema] """ method = self.method.lower() default_status = guess_response_status(method) default_schema = '' if method in ('get', 'post', 'put', 'patch'): default_schema = self.get_default_response_serializer() default_schema = default_schema or '' if default_schema and not isinstance(default_schema, openapi.Schema): default_schema = self.serializer_to_schema(default_schema) or '' if default_schema: if self.has_list_response(): default_schema = openapi.Schema(type=openapi.TYPE_ARRAY, items=default_schema) if self.should_page(): default_schema = self.get_paginated_response(default_schema) or default_schema return OrderedDict({str(default_status): default_schema}) def get_response_serializers(self): """Return the response codes that this view is expected to return, and the serializer for each response body. The return value should be a dict where the keys are possible status codes, and values are either strings, ``Serializer``\\ s, :class:`.Schema`, :class:`.SchemaRef` or :class:`.Response` objects. See :func:`@swagger_auto_schema <.swagger_auto_schema>` for more details. :return: the response serializers :rtype: dict """ manual_responses = self.overrides.get('responses', None) or {} manual_responses = OrderedDict((str(sc), resp) for sc, resp in manual_responses.items()) responses = OrderedDict() if not any(is_success(int(sc)) for sc in manual_responses if sc != 'default'): responses = self.get_default_responses() responses.update((str(sc), resp) for sc, resp in manual_responses.items()) return responses def get_response_schemas(self, response_serializers): """Return the :class:`.openapi.Response` objects calculated for this view. :param dict response_serializers: response serializers as returned by :meth:`.get_response_serializers` :return: a dictionary of status code to :class:`.Response` object :rtype: dict[str, openapi.Response] """ responses = OrderedDict() for sc, serializer in response_serializers.items(): if isinstance(serializer, str): response = openapi.Response( description=force_real_str(serializer) ) elif not serializer: continue elif isinstance(serializer, openapi.Response): response = serializer if hasattr(response, 'schema') and not isinstance(response.schema, openapi.Schema.OR_REF): serializer = force_serializer_instance(response.schema) response.schema = self.serializer_to_schema(serializer) elif isinstance(serializer, openapi.Schema.OR_REF): response = openapi.Response( description='', schema=serializer, ) else: serializer = force_serializer_instance(serializer) response = openapi.Response( description='', schema=self.serializer_to_schema(serializer), ) responses[str(sc)] = response return responses def get_query_serializer(self): """Return the query serializer (used for parsing query parameters) for this endpoint. :return: the query serializer, or ``None`` """ query_serializer = self.overrides.get('query_serializer', None) if query_serializer is not None: query_serializer = force_serializer_instance(query_serializer) return query_serializer def get_query_parameters(self): """Return the query parameters accepted by this view. :rtype: list[openapi.Parameter] """ natural_parameters = self.get_filter_parameters() + self.get_pagination_parameters() query_serializer = self.get_query_serializer() serializer_parameters = [] if query_serializer is not None: serializer_parameters = self.serializer_to_parameters(query_serializer, in_=openapi.IN_QUERY) if len(set(param_list_to_odict(natural_parameters)) & set(param_list_to_odict(serializer_parameters))) != 0: raise SwaggerGenerationError( "your query_serializer contains fields that conflict with the " "filter_backend or paginator_class on the view - %s %s" % (self.method, self.path) ) return natural_parameters + serializer_parameters def get_operation_id(self, operation_keys=None): """Return an unique ID for this operation. The ID must be unique across all :class:`.Operation` objects in the API. :param tuple[str] operation_keys: an array of keys derived from the pathdescribing the hierarchical layout of this view in the API; e.g. ``('snippets', 'list')``, ``('snippets', 'retrieve')``, etc. :rtype: str """ operation_keys = operation_keys or self.operation_keys operation_id = self.overrides.get('operation_id', '') if not operation_id: operation_id = '_'.join(operation_keys) return operation_id def split_summary_from_description(self, description): """Decide if and how to split a summary out of the given description. The default implementation uses the first paragraph of the description as a summary if it is less than 120 characters long. :param description: the full description to be analyzed :return: summary and description :rtype: (str,str) """ # https://www.python.org/dev/peps/pep-0257/#multi-line-docstrings summary = None summary_max_len = 120 # OpenAPI 2.0 spec says summary should be under 120 characters sections = description.split('\n\n', 1) if len(sections) == 2: sections[0] = sections[0].strip() if len(sections[0]) < summary_max_len: summary, description = sections description = description.strip() return summary, description def get_summary_and_description(self): """Return an operation summary and description determined from the view's docstring. :return: summary and description :rtype: (str,str) """ description = self.overrides.get('operation_description', None) summary = self.overrides.get('operation_summary', None) if description is None: description = self._sch.get_description(self.path, self.method) or '' description = description.strip().replace('\r', '') if description and (summary is None): # description from docstring... do summary magic summary, description = self.split_summary_from_description(description) return summary, description def get_security(self): """Return a list of security requirements for this operation. Returning an empty list marks the endpoint as unauthenticated (i.e. removes all accepted authentication schemes). Returning ``None`` will inherit the top-level secuirty requirements. :return: security requirements :rtype: list[dict[str,list[str]]]""" return self.overrides.get('security', None) def is_deprecated(self): """Return ``True`` if this operation is to be marked as deprecated. :return: deprecation status :rtype: bool """ return self.overrides.get('deprecated', None) def get_tags(self, operation_keys=None): """Get a list of tags for this operation. Tags determine how operations relate with each other, and in the UI each tag will show as a group containing the operations that use it. If not provided in overrides, tags will be inferred from the operation url. :param tuple[str] operation_keys: an array of keys derived from the pathdescribing the hierarchical layout of this view in the API; e.g. ``('snippets', 'list')``, ``('snippets', 'retrieve')``, etc. :rtype: list[str] """ operation_keys = operation_keys or self.operation_keys tags = self.overrides.get('tags') if not tags: tags = [operation_keys[0]] return tags def get_consumes(self): """Return the MIME types this endpoint can consume. :rtype: list[str] """ return get_consumes(self.get_parser_classes()) def get_produces(self): """Return the MIME types this endpoint can produce. :rtype: list[str] """ return get_produces(self.get_renderer_classes()) drf-yasg-1.20.1/src/drf_yasg/management/000077500000000000000000000000001416705305200200135ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/management/__init__.py000066400000000000000000000000001416705305200221120ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/management/commands/000077500000000000000000000000001416705305200216145ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/management/commands/__init__.py000066400000000000000000000000001416705305200237130ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/management/commands/generate_swagger.py000066400000000000000000000145711416705305200255070ustar00rootroot00000000000000import logging import os from django.contrib.auth import get_user_model from django.core.exceptions import ImproperlyConfigured from django.core.management.base import BaseCommand from django.utils.module_loading import import_string from rest_framework.settings import api_settings from rest_framework.test import APIRequestFactory, force_authenticate from rest_framework.views import APIView from ... import openapi from ...app_settings import swagger_settings from ...codecs import OpenAPICodecJson, OpenAPICodecYaml class Command(BaseCommand): help = 'Write the Swagger schema to disk in JSON or YAML format.' def add_arguments(self, parser): parser.add_argument( 'output_file', metavar='output-file', nargs='?', default='-', type=str, help='Output path for generated swagger document, or "-" for stdout.' ) parser.add_argument( '-o', '--overwrite', default=False, action='store_true', help='Overwrite the output file if it already exists. ' 'Default behavior is to stop if the output file exists.' ) parser.add_argument( '-f', '--format', dest='format', default='', choices=['json', 'yaml'], type=str, help='Output format. If not given, it is guessed from the output file extension and defaults to json.' ) parser.add_argument( '-u', '--url', dest='api_url', default='', type=str, help='Base API URL - sets the host and scheme attributes of the generated document.' ) parser.add_argument( '-m', '--mock-request', dest='mock', default=False, action='store_true', help='Use a mock request when generating the swagger schema. This is useful if your views or serializers ' 'depend on context from a request in order to function.' ) parser.add_argument( '--api-version', dest='api_version', type=str, help='Version to use to generate schema. This option implies --mock-request.' ) parser.add_argument( '--user', dest='user', help='Username of an existing user to use for mocked authentication. This option implies --mock-request.' ) parser.add_argument( '-p', '--private', default=False, action="store_true", help='Hides endpoints not accesible to the target user. If --user is not given, only shows endpoints that ' 'are accesible to unauthenticated users.\n' 'This has the same effect as passing public=False to get_schema_view() or ' 'OpenAPISchemaGenerator.get_schema().\n' 'This option implies --mock-request.' ) parser.add_argument( '-g', '--generator-class', dest='generator_class_name', default='', help='Import string pointing to an OpenAPISchemaGenerator subclass to use for schema generation.' ) def write_schema(self, schema, stream, format): if format == 'json': codec = OpenAPICodecJson(validators=[], pretty=True) swagger_json = codec.encode(schema).decode('utf-8') stream.write(swagger_json) elif format == 'yaml': codec = OpenAPICodecYaml(validators=[]) swagger_yaml = codec.encode(schema).decode('utf-8') # YAML is already pretty! stream.write(swagger_yaml) else: # pragma: no cover raise ValueError("unknown format %s" % format) def get_mock_request(self, url, format, user=None): factory = APIRequestFactory() request = factory.get(url + '/swagger.' + format) if user is not None: force_authenticate(request, user=user) request = APIView().initialize_request(request) return request def get_schema_generator(self, generator_class_name, api_info, api_version, api_url): generator_class = swagger_settings.DEFAULT_GENERATOR_CLASS if generator_class_name: generator_class = import_string(generator_class_name) return generator_class( info=api_info, version=api_version, url=api_url, ) def get_schema(self, generator, request, public): return generator.get_schema(request=request, public=public) def handle(self, output_file, overwrite, format, api_url, mock, api_version, user, private, generator_class_name, *args, **kwargs): # disable logs of WARNING and below logging.disable(logging.WARNING) info = getattr(swagger_settings, 'DEFAULT_INFO', None) if not isinstance(info, openapi.Info): raise ImproperlyConfigured( 'settings.SWAGGER_SETTINGS["DEFAULT_INFO"] should be an ' 'import string pointing to an openapi.Info object' ) if not format: if os.path.splitext(output_file)[1] in ('.yml', '.yaml'): format = 'yaml' format = format or 'json' api_url = api_url or swagger_settings.DEFAULT_API_URL if user: # Only call get_user_model if --user was passed in order to # avoid crashing if auth is not configured in the project user = get_user_model().objects.get(**{get_user_model().USERNAME_FIELD: user}) mock = mock or private or (user is not None) or (api_version is not None) if mock and not api_url: raise ImproperlyConfigured( '--mock-request requires an API url; either provide ' 'the --url argument or set the DEFAULT_API_URL setting' ) request = None if mock: request = self.get_mock_request(api_url, format, user) api_version = api_version or api_settings.DEFAULT_VERSION if request and api_version: request.version = api_version generator = self.get_schema_generator(generator_class_name, info, api_version, api_url) schema = self.get_schema(generator, request, not private) if output_file == '-': self.write_schema(schema, self.stdout, format) else: flags = "w" if overwrite else "x" with open(output_file, flags) as stream: self.write_schema(schema, stream, format) drf-yasg-1.20.1/src/drf_yasg/middleware.py000066400000000000000000000014471416705305200203740ustar00rootroot00000000000000from django.http import HttpResponse from .codecs import _OpenAPICodec from .errors import SwaggerValidationError class SwaggerExceptionMiddleware(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): return self.get_response(request) def process_exception(self, request, exception): if isinstance(exception, SwaggerValidationError): err = {'errors': exception.errors, 'message': str(exception)} codec = exception.source_codec if isinstance(codec, _OpenAPICodec): err = codec.encode_error(err) content_type = codec.media_type return HttpResponse(err, status=500, content_type=content_type) return None # pragma: no cover drf-yasg-1.20.1/src/drf_yasg/openapi.py000066400000000000000000000745161416705305200177210ustar00rootroot00000000000000import collections import logging import re import urllib.parse as urlparse from collections import OrderedDict from django.urls import get_script_prefix from django.utils.functional import Promise from inflection import camelize from .utils import dict_has_ordered_keys, filter_none, force_real_str try: from collections import abc as collections_abc except ImportError: collections_abc = collections logger = logging.getLogger(__name__) TYPE_OBJECT = "object" #: TYPE_STRING = "string" #: TYPE_NUMBER = "number" #: TYPE_INTEGER = "integer" #: TYPE_BOOLEAN = "boolean" #: TYPE_ARRAY = "array" #: TYPE_FILE = "file" #: # officially supported by Swagger 2.0 spec FORMAT_DATE = "date" #: FORMAT_DATETIME = "date-time" #: FORMAT_PASSWORD = "password" #: FORMAT_BINARY = "binary" #: FORMAT_BASE64 = "bytes" #: FORMAT_FLOAT = "float" #: FORMAT_DOUBLE = "double" #: FORMAT_INT32 = "int32" #: FORMAT_INT64 = "int64" #: # defined in JSON-schema FORMAT_EMAIL = "email" #: FORMAT_IPV4 = "ipv4" #: FORMAT_IPV6 = "ipv6" #: FORMAT_URI = "uri" #: # pulled out of my ass FORMAT_UUID = "uuid" #: FORMAT_SLUG = "slug" #: FORMAT_DECIMAL = "decimal" IN_BODY = 'body' #: IN_PATH = 'path' #: IN_QUERY = 'query' #: IN_FORM = 'formData' #: IN_HEADER = 'header' #: SCHEMA_DEFINITIONS = 'definitions' #: def make_swagger_name(attribute_name): """ Convert a python variable name into a Swagger spec attribute name. In particular, * if name starts with ``x_``, return ``x-{camelCase}`` * if name is ``ref``, return ``$ref`` * else return the name converted to camelCase, with trailing underscores stripped :param str attribute_name: python attribute name :return: swagger name """ if attribute_name == 'ref': return "$ref" if attribute_name.startswith("x_"): return "x-" + camelize(attribute_name[2:], uppercase_first_letter=False) return camelize(attribute_name.rstrip('_'), uppercase_first_letter=False) def _bare_SwaggerDict(cls): assert issubclass(cls, SwaggerDict) result = cls.__new__(cls) OrderedDict.__init__(result) # no __init__ called for SwaggerDict subclasses! return result class SwaggerDict(OrderedDict): """A particular type of OrderedDict, which maps all attribute accesses to dict lookups using :func:`.make_swagger_name`. Attribute names starting with ``_`` are set on the object as-is and are not included in the specification output. Used as a base class for all Swagger helper models. """ def __init__(self, **attrs): super(SwaggerDict, self).__init__() self._extras__ = attrs if type(self) == SwaggerDict: self._insert_extras__() def __setattr__(self, key, value): if key.startswith('_'): super(SwaggerDict, self).__setattr__(key, value) return if value is not None: self[make_swagger_name(key)] = value def __getattr__(self, item): if item.startswith('_'): raise AttributeError try: return self[make_swagger_name(item)] except KeyError: # raise_from is EXTREMELY slow, replaced with plain raise raise AttributeError("object of class " + type(self).__name__ + " has no attribute " + item) def __delattr__(self, item): if item.startswith('_'): super(SwaggerDict, self).__delattr__(item) return del self[make_swagger_name(item)] def _insert_extras__(self): """ From an ordering perspective, it is desired that extra attributes such as vendor extensions stay at the bottom of the object. However, python2.7's OrderdDict craps out if you try to insert into it before calling init. This means that subclasses must call super().__init__ as the first statement of their own __init__, which would result in the extra attributes being added first. For this reason, we defer the insertion of the attributes and require that subclasses call ._insert_extras__ at the end of their __init__ method. """ for attr, val in sorted(self._extras__.items()): setattr(self, attr, val) @staticmethod def _as_odict(obj, memo): """Implementation detail of :meth:`.as_odict`""" if id(obj) in memo: return memo[id(obj)] if isinstance(obj, Promise) and hasattr(obj, '_proxy____cast'): # handle __proxy__ objects from django.utils.functional.lazy obj = obj._proxy____cast() if isinstance(obj, collections_abc.Mapping): result = OrderedDict() memo[id(obj)] = result items = obj.items() if not dict_has_ordered_keys(obj): items = sorted(items) for attr, val in items: result[attr] = SwaggerDict._as_odict(val, memo) return result elif isinstance(obj, str): return force_real_str(obj) elif isinstance(obj, collections_abc.Iterable) and not isinstance(obj, collections_abc.Iterator): return type(obj)(SwaggerDict._as_odict(elem, memo) for elem in obj) return obj def as_odict(self): """Convert this object into an ``OrderedDict`` instance. :rtype: OrderedDict """ return SwaggerDict._as_odict(self, {}) def __reduce__(self): # for pickle supprt; this skips calls to all SwaggerDict __init__ methods and relies # on the already set attributes instead attrs = {k: v for k, v in vars(self).items() if not k.startswith('_NP_')} return _bare_SwaggerDict, (type(self),), attrs, None, iter(self.items()) class Contact(SwaggerDict): def __init__(self, name=None, url=None, email=None, **extra): """Swagger Contact object At least one of the following fields is required: :param str name: contact name :param str url: contact url :param str email: contact e-mail """ super(Contact, self).__init__(**extra) if name is None and url is None and email is None: raise AssertionError("one of name, url or email is requires for Swagger Contact object") self.name = name self.url = url self.email = email self._insert_extras__() class License(SwaggerDict): def __init__(self, name, url=None, **extra): """Swagger License object :param str name: Required. License name :param str url: link to detailed license information """ super(License, self).__init__(**extra) if name is None: raise AssertionError("name is required for Swagger License object") self.name = name self.url = url self._insert_extras__() class Info(SwaggerDict): def __init__(self, title, default_version, description=None, terms_of_service=None, contact=None, license=None, **extra): """Swagger Info object :param str title: Required. API title. :param str default_version: Required. API version string (not to be confused with Swagger spec version) :param str description: API description; markdown supported :param str terms_of_service: API terms of service; should be a URL :param Contact contact: contact object :param License license: license object """ super(Info, self).__init__(**extra) if title is None or default_version is None: raise AssertionError("title and version are required for Swagger info object") if contact is not None and not isinstance(contact, Contact): raise AssertionError("contact must be a Contact object") if license is not None and not isinstance(license, License): raise AssertionError("license must be a License object") self.title = title self._default_version = default_version self.description = description self.terms_of_service = terms_of_service self.contact = contact self.license = license self._insert_extras__() class Swagger(SwaggerDict): def __init__(self, info=None, _url=None, _prefix=None, _version=None, consumes=None, produces=None, security_definitions=None, security=None, paths=None, definitions=None, **extra): """Root Swagger object. :param .Info info: info object :param str _url: URL used for setting the API host and scheme :param str _prefix: api path prefix to use in setting basePath; this will be appended to the wsgi SCRIPT_NAME prefix or Django's FORCE_SCRIPT_NAME if applicable :param str _version: version string to override Info :param dict[str,dict] security_definitions: list of supported authentication mechanisms :param list[dict[str,list[str]]] security: authentication mechanisms accepted globally :param list[str] consumes: consumed MIME types; can be overriden in Operation :param list[str] produces: produced MIME types; can be overriden in Operation :param Paths paths: paths object :param dict[str,Schema] definitions: named models """ super(Swagger, self).__init__(**extra) self.swagger = '2.0' self.info = info self.info.version = _version or info._default_version if _url: url = urlparse.urlparse(_url) assert url.netloc and url.scheme, "if given, url must have both schema and netloc" self.host = url.netloc self.schemes = [url.scheme] self.base_path = self.get_base_path(get_script_prefix(), _prefix) self.consumes = consumes self.produces = produces self.security_definitions = filter_none(security_definitions) self.security = filter_none(security) self.paths = paths self.definitions = filter_none(definitions) self._insert_extras__() @classmethod def get_base_path(cls, script_prefix, api_prefix): """Determine an appropriate value for ``basePath`` based on the SCRIPT_NAME and the api common prefix. :param str script_prefix: script prefix as defined by django ``get_script_prefix`` :param str api_prefix: api common prefix :return: joined base path """ # avoid double slash when joining script_name with api_prefix if script_prefix and script_prefix.endswith('/'): script_prefix = script_prefix[:-1] if not api_prefix.startswith('/'): api_prefix = '/' + api_prefix base_path = script_prefix + api_prefix # ensure that the base path has a leading slash and no trailing slash if base_path and base_path.endswith('/'): base_path = base_path[:-1] if not base_path.startswith('/'): base_path = '/' + base_path return base_path class Paths(SwaggerDict): def __init__(self, paths, **extra): """A listing of all the paths in the API. :param dict[str,PathItem] paths: """ super(Paths, self).__init__(**extra) for path, path_obj in paths.items(): assert path.startswith("/") if path_obj is not None: # pragma: no cover self[path] = path_obj self._insert_extras__() class PathItem(SwaggerDict): OPERATION_NAMES = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch'] def __init__(self, get=None, put=None, post=None, delete=None, options=None, head=None, patch=None, parameters=None, **extra): """Information about a single path :param Operation get: operation for GET :param Operation put: operation for PUT :param Operation post: operation for POST :param Operation delete: operation for DELETE :param Operation options: operation for OPTIONS :param Operation head: operation for HEAD :param Operation patch: operation for PATCH :param list[Parameter] parameters: parameters that apply to all operations """ super(PathItem, self).__init__(**extra) self.get = get self.head = head self.post = post self.put = put self.patch = patch self.delete = delete self.options = options self.parameters = filter_none(parameters) self._insert_extras__() @property def operations(self): """A list of all standard Operations on this PathItem object. See :attr:`.OPERATION_NAMES`. :return: list of (method name, Operation) tuples :rtype: list[tuple[str,Operation]] """ return [(k, v) for k, v in self.items() if k in PathItem.OPERATION_NAMES and v] class Operation(SwaggerDict): def __init__(self, operation_id, responses, parameters=None, consumes=None, produces=None, summary=None, description=None, tags=None, security=None, **extra): """Information about an API operation (path + http method combination) :param str operation_id: operation ID, should be unique across all operations :param Responses responses: responses returned :param list[Parameter] parameters: parameters accepted :param list[str] consumes: content types accepted :param list[str] produces: content types produced :param str summary: operation summary; should be < 120 characters :param str description: operation description; can be of any length and supports markdown :param list[str] tags: operation tags :param list[dict[str,list[str]]] security: list of security requirements """ super(Operation, self).__init__(**extra) self.operation_id = operation_id self.summary = summary self.description = description self.parameters = filter_none(parameters) self.responses = responses self.consumes = filter_none(consumes) self.produces = filter_none(produces) self.tags = filter_none(tags) self.security = filter_none(security) self._insert_extras__() def _check_type(type, format, enum, pattern, items, _obj_type): if items and type != TYPE_ARRAY: raise AssertionError("items can only be used when type is array") if type == TYPE_ARRAY and not items: raise AssertionError("TYPE_ARRAY requires the items attribute") if pattern and type != TYPE_STRING: raise AssertionError("pattern can only be used when type is string") if (format or enum or pattern) and type in (TYPE_OBJECT, TYPE_ARRAY, None): raise AssertionError("[format, enum, pattern] can only be applied to primitive " + _obj_type) class Items(SwaggerDict): def __init__(self, type=None, format=None, enum=None, pattern=None, items=None, **extra): """Used when defining an array :class:`.Parameter` to describe the array elements. :param str type: type of the array elements; must not be ``object`` :param str format: value format, see OpenAPI spec :param list enum: restrict possible values :param str pattern: pattern if type is ``string`` :param .Items items: only valid if `type` is ``array`` """ super(Items, self).__init__(**extra) assert type is not None, "type is required!" self.type = type self.format = format self.enum = enum self.pattern = pattern self.items_ = items self._insert_extras__() _check_type(type, format, enum, pattern, items, self.__class__) class Parameter(SwaggerDict): def __init__(self, name, in_, description=None, required=None, schema=None, type=None, format=None, enum=None, pattern=None, items=None, default=None, **extra): """Describe parameters accepted by an :class:`.Operation`. Each parameter should be a unique combination of (`name`, `in_`). ``body`` and ``form`` parameters in the same operation are mutually exclusive. :param str name: parameter name :param str in_: parameter location :param str description: parameter description :param bool required: whether the parameter is required for the operation :param schema: required if `in_` is ``body`` :type schema: Schema or SchemaRef :param str type: parameter type; required if `in_` is not ``body``; must not be ``object`` :param str format: value format, see OpenAPI spec :param list enum: restrict possible values :param str pattern: pattern if type is ``string`` :param .Items items: only valid if `type` is ``array`` :param default: default value if the parameter is not provided; must conform to parameter type """ super(Parameter, self).__init__(**extra) self.name = name self.in_ = in_ self.description = description self.required = required self.schema = schema self.type = type self.format = format self.enum = enum self.pattern = pattern self.items_ = items self.default = default self._insert_extras__() if (not schema and not type) or (schema and type): raise AssertionError("either schema or type are required for Parameter object (not both)!") if schema and isinstance(schema, Schema): schema._remove_read_only() if self['in'] == IN_PATH: # path parameters must always be required assert required is not False, "path parameter cannot be optional" self.required = True if self['in'] != IN_BODY and schema is not None: raise AssertionError("schema can only be applied to a body Parameter, not %s" % type) if default and not type: raise AssertionError("default can only be applied to a non-body Parameter") _check_type(type, format, enum, pattern, items, self.__class__) class Schema(SwaggerDict): OR_REF = () #: useful for type-checking, e.g ``isinstance(obj, openapi.Schema.OR_REF)`` def __init__(self, title=None, description=None, type=None, format=None, enum=None, pattern=None, properties=None, additional_properties=None, required=None, items=None, default=None, read_only=None, **extra): """Describes a complex object accepted as parameter or returned as a response. :param str title: schema title :param str description: schema description :param str type: value type; required :param str format: value format, see OpenAPI spec :param list enum: restrict possible values :param str pattern: pattern if type is ``string`` :param properties: object properties; required if `type` is ``object`` :type properties: dict[str,Schema or SchemaRef] :param additional_properties: allow wildcard properties not listed in `properties` :type additional_properties: bool or Schema or SchemaRef :param list[str] required: list of required property names :param items: type of array items, only valid if `type` is ``array`` :type items: Schema or SchemaRef :param default: only valid when insider another ``Schema``\\ 's ``properties``; the default value of this property if it is not provided, must conform to the type of this Schema :param read_only: only valid when insider another ``Schema``\\ 's ``properties``; declares the property as read only - it must only be sent as part of responses, never in requests """ super(Schema, self).__init__(**extra) if required is True or required is False: # common error raise AssertionError("the `required` attribute of schema must be an " "array of required property names, not a boolean!") assert type, "type is required!" self.title = title self.description = description self.required = filter_none(required) self.type = type self.properties = filter_none(properties) self.additional_properties = additional_properties self.format = format self.enum = enum self.pattern = pattern self.items_ = items self.read_only = read_only self.default = default self._insert_extras__() if (properties or (additional_properties is not None)) and type != TYPE_OBJECT: raise AssertionError("only object Schema can have properties") _check_type(type, format, enum, pattern, items, self.__class__) def _remove_read_only(self): # readOnly is only valid for Schemas inside another Schema's properties; # when placing Schema elsewhere we must take care to remove the readOnly flag self.pop('readOnly', '') class _Ref(SwaggerDict): ref_name_re = re.compile(r"#/(?P.+)/(?P[^/]+)$") def __init__(self, resolver, name, scope, expected_type, ignore_unresolved=False): """Base class for all reference types. A reference object has only one property, ``$ref``, which must be a JSON reference to a valid object in the specification, e.g. ``#/definitions/Article`` to refer to an article model. :param .ReferenceResolver resolver: component resolver which must contain the referneced object :param str name: referenced object name, e.g. "Article" :param str scope: reference scope, e.g. "definitions" :param type[.SwaggerDict] expected_type: the expected type that will be asserted on the object found in resolver :param bool ignore_unresolved: do not throw if the referenced object does not exist """ super(_Ref, self).__init__() assert not type(self) == _Ref, "do not instantiate _Ref directly" ref_name = "#/{scope}/{name}".format(scope=scope, name=name) if not ignore_unresolved: obj = resolver.get(name, scope) assert isinstance(obj, expected_type), ref_name + " is a {actual}, not a {expected}" \ .format(actual=type(obj).__name__, expected=expected_type.__name__) self.ref = ref_name def resolve(self, resolver): """Get the object targeted by this reference from the given component resolver. :param .ReferenceResolver resolver: component resolver which must contain the referneced object :returns: the target object """ ref_match = self.ref_name_re.match(self.ref) return resolver.get(ref_match.group('name'), scope=ref_match.group('scope')) def __setitem__(self, key, value): if key == "$ref": return super(_Ref, self).__setitem__(key, value) raise NotImplementedError("only $ref can be set on Reference objects (not %s)" % key) def __delitem__(self, key): raise NotImplementedError("cannot delete property of Reference object") class SchemaRef(_Ref): def __init__(self, resolver, schema_name, ignore_unresolved=False): """Adds a reference to a named Schema defined in the ``#/definitions/`` object. :param .ReferenceResolver resolver: component resolver which must contain the definition :param str schema_name: schema name :param bool ignore_unresolved: do not throw if the referenced object does not exist """ assert SCHEMA_DEFINITIONS in resolver.scopes super(SchemaRef, self).__init__(resolver, schema_name, SCHEMA_DEFINITIONS, Schema, ignore_unresolved) Schema.OR_REF = (Schema, SchemaRef) def resolve_ref(ref_or_obj, resolver): """Resolve `ref_or_obj` if it is a reference type. Return it unchaged if not. :param ref_or_obj: object to derefernece :type ref_or_obj: SwaggerDict or _Ref :param resolver: component resolver which must contain the referenced object """ if isinstance(ref_or_obj, _Ref): return ref_or_obj.resolve(resolver) return ref_or_obj class Responses(SwaggerDict): def __init__(self, responses, default=None, **extra): """Describes the expected responses of an :class:`.Operation`. :param responses: mapping of status code to response definition :type responses: dict[str or int,Response] :param Response default: description of the response structure to expect if another status code is returned """ super(Responses, self).__init__(**extra) for status, response in responses.items(): if response is not None: # pragma: no cover self[str(status)] = response self.default = default self._insert_extras__() class Response(SwaggerDict): def __init__(self, description, schema=None, examples=None, **extra): """Describes the structure of an operation's response. :param str description: response description :param schema: structure of the response body :type schema: Schema or SchemaRef or rest_framework.serializers.Serializer or type[rest_framework.serializers.Serializer] :param dict examples: example bodies mapped by mime type """ super(Response, self).__init__(**extra) self.description = description self.schema = schema self.examples = examples self._insert_extras__() if schema and isinstance(schema, Schema): schema._remove_read_only() class ReferenceResolver(object): """A mapping type intended for storing objects pointed at by Swagger Refs. Provides support and checks for different refernce scopes, e.g. 'definitions'. For example: :: > components = ReferenceResolver('definitions', 'parameters') > definitions = components.with_scope('definitions') > definitions.set('Article', Schema(...)) > print(components) {'definitions': OrderedDict([('Article', Schema(...)]), 'parameters': OrderedDict()} """ def __init__(self, *scopes, **kwargs): """ :param str scopes: an enumeration of the valid scopes this resolver will contain """ force_init = kwargs.pop('force_init', False) if not force_init: raise AssertionError( "Creating an instance of ReferenceResolver almost certainly won't do what you want it to do.\n" "See https://github.com/axnsan12/drf-yasg/issues/211, " "https://github.com/axnsan12/drf-yasg/issues/271, " "https://github.com/axnsan12/drf-yasg/issues/325.\n" "Pass `force_init=True` to override this." ) self._objects = OrderedDict() self._force_scope = None for scope in scopes: assert isinstance(scope, str), "scope names must be strings" self._objects[scope] = OrderedDict() def with_scope(self, scope): """Return a view into this :class:`.ReferenceResolver` whose scope is defaulted and forced to `scope`. :param str scope: target scope, must be in this resolver's `scopes` :return: the bound resolver :rtype: .ReferenceResolver """ assert scope in self.scopes, "unknown scope %s" % scope ret = ReferenceResolver(force_init=True) ret._objects = self._objects ret._force_scope = scope return ret def _check_scope(self, scope): real_scope = self._force_scope or scope if scope is not None: assert not self._force_scope or scope == self._force_scope, "cannot overrride forced scope" assert real_scope and real_scope in self._objects, "invalid scope %s" % scope return real_scope def set(self, name, obj, scope=None): """Set an object in the given scope, raise an error if it already exists. :param str name: reference name :param obj: referenced object :param str scope: reference scope """ scope = self._check_scope(scope) assert obj is not None, "referenced objects cannot be None/null" assert name not in self._objects[scope], "#/%s/%s already exists" % (scope, name) self._objects[scope][name] = obj def setdefault(self, name, maker, scope=None): """Set an object in the given scope only if it does not exist. :param str name: reference name :param function maker: object factory, called only if necessary :param str scope: reference scope """ scope = self._check_scope(scope) assert callable(maker), "setdefault expects a callable, not %s" % type(maker).__name__ ret = self.getdefault(name, None, scope) if ret is None: ret = maker() value = self.getdefault(name, None, scope) assert ret is not None, "maker returned None; referenced objects cannot be None/null" if value is None: self.set(name, ret, scope) elif value != ret: logger.debug("during setdefault, maker for %s inserted a value and returned a different value", name) ret = value return ret def get(self, name, scope=None): """Get an object from the given scope, raise an error if it does not exist. :param str name: reference name :param str scope: reference scope :return: the object """ scope = self._check_scope(scope) assert name in self._objects[scope], "#/%s/%s is not defined" % (scope, name) return self._objects[scope][name] def getdefault(self, name, default=None, scope=None): """Get an object from the given scope or a default value if it does not exist. :param str name: reference name :param default: the default value :param str scope: reference scope :return: the object or `default` """ scope = self._check_scope(scope) return self._objects[scope].get(name, default) def has(self, name, scope=None): """Check if an object exists in the given scope. :param str name: reference name :param str scope: reference scope :return: True if the object exists :rtype: bool """ scope = self._check_scope(scope) return name in self._objects[scope] def __iter__(self): if self._force_scope: return iter(self._objects[self._force_scope]) return iter(self._objects) @property def scopes(self): if self._force_scope: return [self._force_scope] return list(self._objects.keys()) # act as mapping def keys(self): if self._force_scope: return self._objects[self._force_scope].keys() return self._objects.keys() def __getitem__(self, item): if self._force_scope: return self._objects[self._force_scope][item] return self._objects[item] def __str__(self): return str(dict(self)) drf-yasg-1.20.1/src/drf_yasg/renderers.py000066400000000000000000000171431416705305200202500ustar00rootroot00000000000000from django.shortcuts import resolve_url from django.template.loader import render_to_string from django.utils.encoding import force_str from django.utils.functional import Promise from rest_framework.renderers import BaseRenderer, JSONRenderer, TemplateHTMLRenderer from rest_framework.utils import encoders, json from .app_settings import redoc_settings, swagger_settings from .codecs import VALIDATORS, OpenAPICodecJson, OpenAPICodecYaml from .openapi import Swagger from .utils import filter_none class _SpecRenderer(BaseRenderer): """Base class for text renderers. Handles encoding and validation.""" charset = 'utf-8' validators = [] codec_class = None @classmethod def with_validators(cls, validators): assert all(vld in VALIDATORS for vld in validators), "allowed validators are " + ", ".join(VALIDATORS) return type(cls.__name__, (cls,), {'validators': validators}) def render(self, data, media_type=None, renderer_context=None): assert self.codec_class, "must override codec_class" codec = self.codec_class(self.validators) if not isinstance(data, Swagger): # pragma: no cover # if `swagger` is not a ``Swagger`` object, it means we somehow got a non-success ``Response`` # in that case, it's probably better to let the default ``JSONRenderer`` render it # see https://github.com/axnsan12/drf-yasg/issues/58 return JSONRenderer().render(data, media_type, renderer_context) return codec.encode(data) class OpenAPIRenderer(_SpecRenderer): """Renders the schema as a JSON document with the ``application/openapi+json`` specific mime type.""" media_type = 'application/openapi+json' format = 'openapi' codec_class = OpenAPICodecJson class SwaggerJSONRenderer(_SpecRenderer): """Renders the schema as a JSON document with the generic ``application/json`` mime type.""" media_type = 'application/json' format = '.json' codec_class = OpenAPICodecJson class SwaggerYAMLRenderer(_SpecRenderer): """Renders the schema as a YAML document.""" media_type = 'application/yaml' format = '.yaml' codec_class = OpenAPICodecYaml class _UIRenderer(BaseRenderer): """Base class for web UI renderers. Handles loading and passing settings to the appropriate template.""" media_type = 'text/html' charset = 'utf-8' template = '' def render(self, swagger, accepted_media_type=None, renderer_context=None): if not isinstance(swagger, Swagger): # pragma: no cover # if `swagger` is not a ``Swagger`` object, it means we somehow got a non-success ``Response`` # in that case, it's probably better to let the default ``TemplateHTMLRenderer`` render it # see https://github.com/axnsan12/drf-yasg/issues/58 return TemplateHTMLRenderer().render(swagger, accepted_media_type, renderer_context) self.set_context(renderer_context, swagger) return render_to_string(self.template, renderer_context, renderer_context['request']) def set_context(self, renderer_context, swagger=None): renderer_context['title'] = swagger.info.title or '' if swagger else '' renderer_context['version'] = swagger.info.version or '' if swagger else '' renderer_context['oauth2_config'] = json.dumps(self.get_oauth2_config(), cls=encoders.JSONEncoder) renderer_context['USE_SESSION_AUTH'] = swagger_settings.USE_SESSION_AUTH renderer_context.update(self.get_auth_urls()) def resolve_url(self, to): if isinstance(to, Promise): to = str(to) if to is None: return None args, kwargs = None, None if not isinstance(to, str): if len(to) > 2: to, args, kwargs = to elif len(to) == 2: to, kwargs = to args = args or () kwargs = kwargs or {} return resolve_url(to, *args, **kwargs) def get_auth_urls(self): urls = { 'LOGIN_URL': self.resolve_url(swagger_settings.LOGIN_URL), 'LOGOUT_URL': self.resolve_url(swagger_settings.LOGOUT_URL), } return filter_none(urls) def get_oauth2_config(self): data = swagger_settings.OAUTH2_CONFIG assert isinstance(data, dict), "OAUTH2_CONFIG must be a dict" return data class SwaggerUIRenderer(_UIRenderer): """Renders a swagger-ui web interface for schema browisng.""" template = 'drf-yasg/swagger-ui.html' format = 'swagger' def set_context(self, renderer_context, swagger=None): super(SwaggerUIRenderer, self).set_context(renderer_context, swagger) swagger_ui_settings = self.get_swagger_ui_settings() request = renderer_context.get('request', None) oauth_redirect_url = force_str(swagger_ui_settings.get('oauth2RedirectUrl', '')) if request and oauth_redirect_url: swagger_ui_settings['oauth2RedirectUrl'] = request.build_absolute_uri(oauth_redirect_url) renderer_context['swagger_settings'] = json.dumps(swagger_ui_settings, cls=encoders.JSONEncoder) def get_swagger_ui_settings(self): data = { 'url': self.resolve_url(swagger_settings.SPEC_URL), 'operationsSorter': swagger_settings.OPERATIONS_SORTER, 'tagsSorter': swagger_settings.TAGS_SORTER, 'docExpansion': swagger_settings.DOC_EXPANSION, 'deepLinking': swagger_settings.DEEP_LINKING, 'showExtensions': swagger_settings.SHOW_EXTENSIONS, 'defaultModelRendering': swagger_settings.DEFAULT_MODEL_RENDERING, 'defaultModelExpandDepth': swagger_settings.DEFAULT_MODEL_DEPTH, 'defaultModelsExpandDepth': swagger_settings.DEFAULT_MODEL_DEPTH, 'showCommonExtensions': swagger_settings.SHOW_COMMON_EXTENSIONS, 'oauth2RedirectUrl': swagger_settings.OAUTH2_REDIRECT_URL, 'supportedSubmitMethods': swagger_settings.SUPPORTED_SUBMIT_METHODS, 'displayOperationId': swagger_settings.DISPLAY_OPERATION_ID, 'persistAuth': swagger_settings.PERSIST_AUTH, 'refetchWithAuth': swagger_settings.REFETCH_SCHEMA_WITH_AUTH, 'refetchOnLogout': swagger_settings.REFETCH_SCHEMA_ON_LOGOUT, 'fetchSchemaWithQuery': swagger_settings.FETCH_SCHEMA_WITH_QUERY, } data = filter_none(data) if swagger_settings.VALIDATOR_URL != '': data['validatorUrl'] = self.resolve_url(swagger_settings.VALIDATOR_URL) return data class ReDocRenderer(_UIRenderer): """Renders a ReDoc web interface for schema browisng.""" template = 'drf-yasg/redoc.html' format = 'redoc' def set_context(self, renderer_context, swagger=None): super(ReDocRenderer, self).set_context(renderer_context, swagger) renderer_context['redoc_settings'] = json.dumps(self.get_redoc_settings(), cls=encoders.JSONEncoder) def get_redoc_settings(self): data = { 'url': self.resolve_url(redoc_settings.SPEC_URL), 'lazyRendering': redoc_settings.LAZY_RENDERING, 'hideHostname': redoc_settings.HIDE_HOSTNAME, 'expandResponses': redoc_settings.EXPAND_RESPONSES, 'pathInMiddlePanel': redoc_settings.PATH_IN_MIDDLE, 'nativeScrollbars': redoc_settings.NATIVE_SCROLLBARS, 'requiredPropsFirst': redoc_settings.REQUIRED_PROPS_FIRST, 'fetchSchemaWithQuery': redoc_settings.FETCH_SCHEMA_WITH_QUERY, } return filter_none(data) class ReDocOldRenderer(ReDocRenderer): """Renders a ReDoc 1.x.x web interface for schema browisng.""" template = 'drf-yasg/redoc-old.html' drf-yasg-1.20.1/src/drf_yasg/static/000077500000000000000000000000001416705305200171665ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/000077500000000000000000000000001416705305200207025ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/README000066400000000000000000000010101416705305200215520ustar00rootroot00000000000000Information about external resources The following files are taken from external resources or trees. Files: insQ.js insQ.min.js License: MIT Copyright: Zbyszek Tenerowicz Eryk NapieraĹ‚a Askar Yusupov Dan Dascalescu Source: https://github.com/naugtur/insertionQuery v1.0.3 Files: immutable.js immutable.min.js License: MIT Copyright: 2014-present, Facebook, Inc Source: https://github.com/immutable-js/immutable-js/releases/tag/v3.8.2 drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/immutable.js000066400000000000000000004260201416705305200232230ustar00rootroot00000000000000/** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.Immutable = factory()); }(this, function () { 'use strict';var SLICE$0 = Array.prototype.slice; function createClass(ctor, superClass) { if (superClass) { ctor.prototype = Object.create(superClass.prototype); } ctor.prototype.constructor = ctor; } function Iterable(value) { return isIterable(value) ? value : Seq(value); } createClass(KeyedIterable, Iterable); function KeyedIterable(value) { return isKeyed(value) ? value : KeyedSeq(value); } createClass(IndexedIterable, Iterable); function IndexedIterable(value) { return isIndexed(value) ? value : IndexedSeq(value); } createClass(SetIterable, Iterable); function SetIterable(value) { return isIterable(value) && !isAssociative(value) ? value : SetSeq(value); } function isIterable(maybeIterable) { return !!(maybeIterable && maybeIterable[IS_ITERABLE_SENTINEL]); } function isKeyed(maybeKeyed) { return !!(maybeKeyed && maybeKeyed[IS_KEYED_SENTINEL]); } function isIndexed(maybeIndexed) { return !!(maybeIndexed && maybeIndexed[IS_INDEXED_SENTINEL]); } function isAssociative(maybeAssociative) { return isKeyed(maybeAssociative) || isIndexed(maybeAssociative); } function isOrdered(maybeOrdered) { return !!(maybeOrdered && maybeOrdered[IS_ORDERED_SENTINEL]); } Iterable.isIterable = isIterable; Iterable.isKeyed = isKeyed; Iterable.isIndexed = isIndexed; Iterable.isAssociative = isAssociative; Iterable.isOrdered = isOrdered; Iterable.Keyed = KeyedIterable; Iterable.Indexed = IndexedIterable; Iterable.Set = SetIterable; var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@'; var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@'; var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@'; var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@'; // Used for setting prototype methods that IE8 chokes on. var DELETE = 'delete'; // Constants describing the size of trie nodes. var SHIFT = 5; // Resulted in best performance after ______? var SIZE = 1 << SHIFT; var MASK = SIZE - 1; // A consistent shared value representing "not set" which equals nothing other // than itself, and nothing that could be provided externally. var NOT_SET = {}; // Boolean references, Rough equivalent of `bool &`. var CHANGE_LENGTH = { value: false }; var DID_ALTER = { value: false }; function MakeRef(ref) { ref.value = false; return ref; } function SetRef(ref) { ref && (ref.value = true); } // A function which returns a value representing an "owner" for transient writes // to tries. The return value will only ever equal itself, and will not equal // the return of any subsequent call of this function. function OwnerID() {} // http://jsperf.com/copy-array-inline function arrCopy(arr, offset) { offset = offset || 0; var len = Math.max(0, arr.length - offset); var newArr = new Array(len); for (var ii = 0; ii < len; ii++) { newArr[ii] = arr[ii + offset]; } return newArr; } function ensureSize(iter) { if (iter.size === undefined) { iter.size = iter.__iterate(returnTrue); } return iter.size; } function wrapIndex(iter, index) { // This implements "is array index" which the ECMAString spec defines as: // // A String property name P is an array index if and only if // ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal // to 2^32â’1. // // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects if (typeof index !== 'number') { var uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32 if ('' + uint32Index !== index || uint32Index === 4294967295) { return NaN; } index = uint32Index; } return index < 0 ? ensureSize(iter) + index : index; } function returnTrue() { return true; } function wholeSlice(begin, end, size) { return (begin === 0 || (size !== undefined && begin <= -size)) && (end === undefined || (size !== undefined && end >= size)); } function resolveBegin(begin, size) { return resolveIndex(begin, size, 0); } function resolveEnd(end, size) { return resolveIndex(end, size, size); } function resolveIndex(index, size, defaultIndex) { return index === undefined ? defaultIndex : index < 0 ? Math.max(0, size + index) : size === undefined ? index : Math.min(size, index); } /* global Symbol */ var ITERATE_KEYS = 0; var ITERATE_VALUES = 1; var ITERATE_ENTRIES = 2; var REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; var ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL; function Iterator(next) { this.next = next; } Iterator.prototype.toString = function() { return '[Iterator]'; }; Iterator.KEYS = ITERATE_KEYS; Iterator.VALUES = ITERATE_VALUES; Iterator.ENTRIES = ITERATE_ENTRIES; Iterator.prototype.inspect = Iterator.prototype.toSource = function () { return this.toString(); } Iterator.prototype[ITERATOR_SYMBOL] = function () { return this; }; function iteratorValue(type, k, v, iteratorResult) { var value = type === 0 ? k : type === 1 ? v : [k, v]; iteratorResult ? (iteratorResult.value = value) : (iteratorResult = { value: value, done: false }); return iteratorResult; } function iteratorDone() { return { value: undefined, done: true }; } function hasIterator(maybeIterable) { return !!getIteratorFn(maybeIterable); } function isIterator(maybeIterator) { return maybeIterator && typeof maybeIterator.next === 'function'; } function getIterator(iterable) { var iteratorFn = getIteratorFn(iterable); return iteratorFn && iteratorFn.call(iterable); } function getIteratorFn(iterable) { var iteratorFn = iterable && ( (REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) || iterable[FAUX_ITERATOR_SYMBOL] ); if (typeof iteratorFn === 'function') { return iteratorFn; } } function isArrayLike(value) { return value && typeof value.length === 'number'; } createClass(Seq, Iterable); function Seq(value) { return value === null || value === undefined ? emptySequence() : isIterable(value) ? value.toSeq() : seqFromValue(value); } Seq.of = function(/*...values*/) { return Seq(arguments); }; Seq.prototype.toSeq = function() { return this; }; Seq.prototype.toString = function() { return this.__toString('Seq {', '}'); }; Seq.prototype.cacheResult = function() { if (!this._cache && this.__iterateUncached) { this._cache = this.entrySeq().toArray(); this.size = this._cache.length; } return this; }; // abstract __iterateUncached(fn, reverse) Seq.prototype.__iterate = function(fn, reverse) { return seqIterate(this, fn, reverse, true); }; // abstract __iteratorUncached(type, reverse) Seq.prototype.__iterator = function(type, reverse) { return seqIterator(this, type, reverse, true); }; createClass(KeyedSeq, Seq); function KeyedSeq(value) { return value === null || value === undefined ? emptySequence().toKeyedSeq() : isIterable(value) ? (isKeyed(value) ? value.toSeq() : value.fromEntrySeq()) : keyedSeqFromValue(value); } KeyedSeq.prototype.toKeyedSeq = function() { return this; }; createClass(IndexedSeq, Seq); function IndexedSeq(value) { return value === null || value === undefined ? emptySequence() : !isIterable(value) ? indexedSeqFromValue(value) : isKeyed(value) ? value.entrySeq() : value.toIndexedSeq(); } IndexedSeq.of = function(/*...values*/) { return IndexedSeq(arguments); }; IndexedSeq.prototype.toIndexedSeq = function() { return this; }; IndexedSeq.prototype.toString = function() { return this.__toString('Seq [', ']'); }; IndexedSeq.prototype.__iterate = function(fn, reverse) { return seqIterate(this, fn, reverse, false); }; IndexedSeq.prototype.__iterator = function(type, reverse) { return seqIterator(this, type, reverse, false); }; createClass(SetSeq, Seq); function SetSeq(value) { return ( value === null || value === undefined ? emptySequence() : !isIterable(value) ? indexedSeqFromValue(value) : isKeyed(value) ? value.entrySeq() : value ).toSetSeq(); } SetSeq.of = function(/*...values*/) { return SetSeq(arguments); }; SetSeq.prototype.toSetSeq = function() { return this; }; Seq.isSeq = isSeq; Seq.Keyed = KeyedSeq; Seq.Set = SetSeq; Seq.Indexed = IndexedSeq; var IS_SEQ_SENTINEL = '@@__IMMUTABLE_SEQ__@@'; Seq.prototype[IS_SEQ_SENTINEL] = true; createClass(ArraySeq, IndexedSeq); function ArraySeq(array) { this._array = array; this.size = array.length; } ArraySeq.prototype.get = function(index, notSetValue) { return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue; }; ArraySeq.prototype.__iterate = function(fn, reverse) { var array = this._array; var maxIndex = array.length - 1; for (var ii = 0; ii <= maxIndex; ii++) { if (fn(array[reverse ? maxIndex - ii : ii], ii, this) === false) { return ii + 1; } } return ii; }; ArraySeq.prototype.__iterator = function(type, reverse) { var array = this._array; var maxIndex = array.length - 1; var ii = 0; return new Iterator(function() {return ii > maxIndex ? iteratorDone() : iteratorValue(type, ii, array[reverse ? maxIndex - ii++ : ii++])} ); }; createClass(ObjectSeq, KeyedSeq); function ObjectSeq(object) { var keys = Object.keys(object); this._object = object; this._keys = keys; this.size = keys.length; } ObjectSeq.prototype.get = function(key, notSetValue) { if (notSetValue !== undefined && !this.has(key)) { return notSetValue; } return this._object[key]; }; ObjectSeq.prototype.has = function(key) { return this._object.hasOwnProperty(key); }; ObjectSeq.prototype.__iterate = function(fn, reverse) { var object = this._object; var keys = this._keys; var maxIndex = keys.length - 1; for (var ii = 0; ii <= maxIndex; ii++) { var key = keys[reverse ? maxIndex - ii : ii]; if (fn(object[key], key, this) === false) { return ii + 1; } } return ii; }; ObjectSeq.prototype.__iterator = function(type, reverse) { var object = this._object; var keys = this._keys; var maxIndex = keys.length - 1; var ii = 0; return new Iterator(function() { var key = keys[reverse ? maxIndex - ii : ii]; return ii++ > maxIndex ? iteratorDone() : iteratorValue(type, key, object[key]); }); }; ObjectSeq.prototype[IS_ORDERED_SENTINEL] = true; createClass(IterableSeq, IndexedSeq); function IterableSeq(iterable) { this._iterable = iterable; this.size = iterable.length || iterable.size; } IterableSeq.prototype.__iterateUncached = function(fn, reverse) { if (reverse) { return this.cacheResult().__iterate(fn, reverse); } var iterable = this._iterable; var iterator = getIterator(iterable); var iterations = 0; if (isIterator(iterator)) { var step; while (!(step = iterator.next()).done) { if (fn(step.value, iterations++, this) === false) { break; } } } return iterations; }; IterableSeq.prototype.__iteratorUncached = function(type, reverse) { if (reverse) { return this.cacheResult().__iterator(type, reverse); } var iterable = this._iterable; var iterator = getIterator(iterable); if (!isIterator(iterator)) { return new Iterator(iteratorDone); } var iterations = 0; return new Iterator(function() { var step = iterator.next(); return step.done ? step : iteratorValue(type, iterations++, step.value); }); }; createClass(IteratorSeq, IndexedSeq); function IteratorSeq(iterator) { this._iterator = iterator; this._iteratorCache = []; } IteratorSeq.prototype.__iterateUncached = function(fn, reverse) { if (reverse) { return this.cacheResult().__iterate(fn, reverse); } var iterator = this._iterator; var cache = this._iteratorCache; var iterations = 0; while (iterations < cache.length) { if (fn(cache[iterations], iterations++, this) === false) { return iterations; } } var step; while (!(step = iterator.next()).done) { var val = step.value; cache[iterations] = val; if (fn(val, iterations++, this) === false) { break; } } return iterations; }; IteratorSeq.prototype.__iteratorUncached = function(type, reverse) { if (reverse) { return this.cacheResult().__iterator(type, reverse); } var iterator = this._iterator; var cache = this._iteratorCache; var iterations = 0; return new Iterator(function() { if (iterations >= cache.length) { var step = iterator.next(); if (step.done) { return step; } cache[iterations] = step.value; } return iteratorValue(type, iterations, cache[iterations++]); }); }; // # pragma Helper functions function isSeq(maybeSeq) { return !!(maybeSeq && maybeSeq[IS_SEQ_SENTINEL]); } var EMPTY_SEQ; function emptySequence() { return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([])); } function keyedSeqFromValue(value) { var seq = Array.isArray(value) ? new ArraySeq(value).fromEntrySeq() : isIterator(value) ? new IteratorSeq(value).fromEntrySeq() : hasIterator(value) ? new IterableSeq(value).fromEntrySeq() : typeof value === 'object' ? new ObjectSeq(value) : undefined; if (!seq) { throw new TypeError( 'Expected Array or iterable object of [k, v] entries, '+ 'or keyed object: ' + value ); } return seq; } function indexedSeqFromValue(value) { var seq = maybeIndexedSeqFromValue(value); if (!seq) { throw new TypeError( 'Expected Array or iterable object of values: ' + value ); } return seq; } function seqFromValue(value) { var seq = maybeIndexedSeqFromValue(value) || (typeof value === 'object' && new ObjectSeq(value)); if (!seq) { throw new TypeError( 'Expected Array or iterable object of values, or keyed object: ' + value ); } return seq; } function maybeIndexedSeqFromValue(value) { return ( isArrayLike(value) ? new ArraySeq(value) : isIterator(value) ? new IteratorSeq(value) : hasIterator(value) ? new IterableSeq(value) : undefined ); } function seqIterate(seq, fn, reverse, useKeys) { var cache = seq._cache; if (cache) { var maxIndex = cache.length - 1; for (var ii = 0; ii <= maxIndex; ii++) { var entry = cache[reverse ? maxIndex - ii : ii]; if (fn(entry[1], useKeys ? entry[0] : ii, seq) === false) { return ii + 1; } } return ii; } return seq.__iterateUncached(fn, reverse); } function seqIterator(seq, type, reverse, useKeys) { var cache = seq._cache; if (cache) { var maxIndex = cache.length - 1; var ii = 0; return new Iterator(function() { var entry = cache[reverse ? maxIndex - ii : ii]; return ii++ > maxIndex ? iteratorDone() : iteratorValue(type, useKeys ? entry[0] : ii - 1, entry[1]); }); } return seq.__iteratorUncached(type, reverse); } function fromJS(json, converter) { return converter ? fromJSWith(converter, json, '', {'': json}) : fromJSDefault(json); } function fromJSWith(converter, json, key, parentJSON) { if (Array.isArray(json)) { return converter.call(parentJSON, key, IndexedSeq(json).map(function(v, k) {return fromJSWith(converter, v, k, json)})); } if (isPlainObj(json)) { return converter.call(parentJSON, key, KeyedSeq(json).map(function(v, k) {return fromJSWith(converter, v, k, json)})); } return json; } function fromJSDefault(json) { if (Array.isArray(json)) { return IndexedSeq(json).map(fromJSDefault).toList(); } if (isPlainObj(json)) { return KeyedSeq(json).map(fromJSDefault).toMap(); } return json; } function isPlainObj(value) { return value && (value.constructor === Object || value.constructor === undefined); } /** * An extension of the "same-value" algorithm as [described for use by ES6 Map * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality) * * NaN is considered the same as NaN, however -0 and 0 are considered the same * value, which is different from the algorithm described by * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). * * This is extended further to allow Objects to describe the values they * represent, by way of `valueOf` or `equals` (and `hashCode`). * * Note: because of this extension, the key equality of Immutable.Map and the * value equality of Immutable.Set will differ from ES6 Map and Set. * * ### Defining custom values * * The easiest way to describe the value an object represents is by implementing * `valueOf`. For example, `Date` represents a value by returning a unix * timestamp for `valueOf`: * * var date1 = new Date(1234567890000); // Fri Feb 13 2009 ... * var date2 = new Date(1234567890000); * date1.valueOf(); // 1234567890000 * assert( date1 !== date2 ); * assert( Immutable.is( date1, date2 ) ); * * Note: overriding `valueOf` may have other implications if you use this object * where JavaScript expects a primitive, such as implicit string coercion. * * For more complex types, especially collections, implementing `valueOf` may * not be performant. An alternative is to implement `equals` and `hashCode`. * * `equals` takes another object, presumably of similar type, and returns true * if the it is equal. Equality is symmetrical, so the same result should be * returned if this and the argument are flipped. * * assert( a.equals(b) === b.equals(a) ); * * `hashCode` returns a 32bit integer number representing the object which will * be used to determine how to store the value object in a Map or Set. You must * provide both or neither methods, one must not exist without the other. * * Also, an important relationship between these methods must be upheld: if two * values are equal, they *must* return the same hashCode. If the values are not * equal, they might have the same hashCode; this is called a hash collision, * and while undesirable for performance reasons, it is acceptable. * * if (a.equals(b)) { * assert( a.hashCode() === b.hashCode() ); * } * * All Immutable collections implement `equals` and `hashCode`. * */ function is(valueA, valueB) { if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { return true; } if (!valueA || !valueB) { return false; } if (typeof valueA.valueOf === 'function' && typeof valueB.valueOf === 'function') { valueA = valueA.valueOf(); valueB = valueB.valueOf(); if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { return true; } if (!valueA || !valueB) { return false; } } if (typeof valueA.equals === 'function' && typeof valueB.equals === 'function' && valueA.equals(valueB)) { return true; } return false; } function deepEqual(a, b) { if (a === b) { return true; } if ( !isIterable(b) || a.size !== undefined && b.size !== undefined && a.size !== b.size || a.__hash !== undefined && b.__hash !== undefined && a.__hash !== b.__hash || isKeyed(a) !== isKeyed(b) || isIndexed(a) !== isIndexed(b) || isOrdered(a) !== isOrdered(b) ) { return false; } if (a.size === 0 && b.size === 0) { return true; } var notAssociative = !isAssociative(a); if (isOrdered(a)) { var entries = a.entries(); return b.every(function(v, k) { var entry = entries.next().value; return entry && is(entry[1], v) && (notAssociative || is(entry[0], k)); }) && entries.next().done; } var flipped = false; if (a.size === undefined) { if (b.size === undefined) { if (typeof a.cacheResult === 'function') { a.cacheResult(); } } else { flipped = true; var _ = a; a = b; b = _; } } var allEqual = true; var bSize = b.__iterate(function(v, k) { if (notAssociative ? !a.has(v) : flipped ? !is(v, a.get(k, NOT_SET)) : !is(a.get(k, NOT_SET), v)) { allEqual = false; return false; } }); return allEqual && a.size === bSize; } createClass(Repeat, IndexedSeq); function Repeat(value, times) { if (!(this instanceof Repeat)) { return new Repeat(value, times); } this._value = value; this.size = times === undefined ? Infinity : Math.max(0, times); if (this.size === 0) { if (EMPTY_REPEAT) { return EMPTY_REPEAT; } EMPTY_REPEAT = this; } } Repeat.prototype.toString = function() { if (this.size === 0) { return 'Repeat []'; } return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]'; }; Repeat.prototype.get = function(index, notSetValue) { return this.has(index) ? this._value : notSetValue; }; Repeat.prototype.includes = function(searchValue) { return is(this._value, searchValue); }; Repeat.prototype.slice = function(begin, end) { var size = this.size; return wholeSlice(begin, end, size) ? this : new Repeat(this._value, resolveEnd(end, size) - resolveBegin(begin, size)); }; Repeat.prototype.reverse = function() { return this; }; Repeat.prototype.indexOf = function(searchValue) { if (is(this._value, searchValue)) { return 0; } return -1; }; Repeat.prototype.lastIndexOf = function(searchValue) { if (is(this._value, searchValue)) { return this.size; } return -1; }; Repeat.prototype.__iterate = function(fn, reverse) { for (var ii = 0; ii < this.size; ii++) { if (fn(this._value, ii, this) === false) { return ii + 1; } } return ii; }; Repeat.prototype.__iterator = function(type, reverse) {var this$0 = this; var ii = 0; return new Iterator(function() {return ii < this$0.size ? iteratorValue(type, ii++, this$0._value) : iteratorDone()} ); }; Repeat.prototype.equals = function(other) { return other instanceof Repeat ? is(this._value, other._value) : deepEqual(other); }; var EMPTY_REPEAT; function invariant(condition, error) { if (!condition) throw new Error(error); } createClass(Range, IndexedSeq); function Range(start, end, step) { if (!(this instanceof Range)) { return new Range(start, end, step); } invariant(step !== 0, 'Cannot step a Range by 0'); start = start || 0; if (end === undefined) { end = Infinity; } step = step === undefined ? 1 : Math.abs(step); if (end < start) { step = -step; } this._start = start; this._end = end; this._step = step; this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1); if (this.size === 0) { if (EMPTY_RANGE) { return EMPTY_RANGE; } EMPTY_RANGE = this; } } Range.prototype.toString = function() { if (this.size === 0) { return 'Range []'; } return 'Range [ ' + this._start + '...' + this._end + (this._step !== 1 ? ' by ' + this._step : '') + ' ]'; }; Range.prototype.get = function(index, notSetValue) { return this.has(index) ? this._start + wrapIndex(this, index) * this._step : notSetValue; }; Range.prototype.includes = function(searchValue) { var possibleIndex = (searchValue - this._start) / this._step; return possibleIndex >= 0 && possibleIndex < this.size && possibleIndex === Math.floor(possibleIndex); }; Range.prototype.slice = function(begin, end) { if (wholeSlice(begin, end, this.size)) { return this; } begin = resolveBegin(begin, this.size); end = resolveEnd(end, this.size); if (end <= begin) { return new Range(0, 0); } return new Range(this.get(begin, this._end), this.get(end, this._end), this._step); }; Range.prototype.indexOf = function(searchValue) { var offsetValue = searchValue - this._start; if (offsetValue % this._step === 0) { var index = offsetValue / this._step; if (index >= 0 && index < this.size) { return index } } return -1; }; Range.prototype.lastIndexOf = function(searchValue) { return this.indexOf(searchValue); }; Range.prototype.__iterate = function(fn, reverse) { var maxIndex = this.size - 1; var step = this._step; var value = reverse ? this._start + maxIndex * step : this._start; for (var ii = 0; ii <= maxIndex; ii++) { if (fn(value, ii, this) === false) { return ii + 1; } value += reverse ? -step : step; } return ii; }; Range.prototype.__iterator = function(type, reverse) { var maxIndex = this.size - 1; var step = this._step; var value = reverse ? this._start + maxIndex * step : this._start; var ii = 0; return new Iterator(function() { var v = value; value += reverse ? -step : step; return ii > maxIndex ? iteratorDone() : iteratorValue(type, ii++, v); }); }; Range.prototype.equals = function(other) { return other instanceof Range ? this._start === other._start && this._end === other._end && this._step === other._step : deepEqual(this, other); }; var EMPTY_RANGE; createClass(Collection, Iterable); function Collection() { throw TypeError('Abstract'); } createClass(KeyedCollection, Collection);function KeyedCollection() {} createClass(IndexedCollection, Collection);function IndexedCollection() {} createClass(SetCollection, Collection);function SetCollection() {} Collection.Keyed = KeyedCollection; Collection.Indexed = IndexedCollection; Collection.Set = SetCollection; var imul = typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2 ? Math.imul : function imul(a, b) { a = a | 0; // int b = b | 0; // int var c = a & 0xffff; var d = b & 0xffff; // Shift by 0 fixes the sign on the high part. return (c * d) + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0) | 0; // int }; // v8 has an optimization for storing 31-bit signed numbers. // Values which have either 00 or 11 as the high order bits qualify. // This function drops the highest order bit in a signed number, maintaining // the sign bit. function smi(i32) { return ((i32 >>> 1) & 0x40000000) | (i32 & 0xBFFFFFFF); } function hash(o) { if (o === false || o === null || o === undefined) { return 0; } if (typeof o.valueOf === 'function') { o = o.valueOf(); if (o === false || o === null || o === undefined) { return 0; } } if (o === true) { return 1; } var type = typeof o; if (type === 'number') { if (o !== o || o === Infinity) { return 0; } var h = o | 0; if (h !== o) { h ^= o * 0xFFFFFFFF; } while (o > 0xFFFFFFFF) { o /= 0xFFFFFFFF; h ^= o; } return smi(h); } if (type === 'string') { return o.length > STRING_HASH_CACHE_MIN_STRLEN ? cachedHashString(o) : hashString(o); } if (typeof o.hashCode === 'function') { return o.hashCode(); } if (type === 'object') { return hashJSObj(o); } if (typeof o.toString === 'function') { return hashString(o.toString()); } throw new Error('Value type ' + type + ' cannot be hashed.'); } function cachedHashString(string) { var hash = stringHashCache[string]; if (hash === undefined) { hash = hashString(string); if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) { STRING_HASH_CACHE_SIZE = 0; stringHashCache = {}; } STRING_HASH_CACHE_SIZE++; stringHashCache[string] = hash; } return hash; } // http://jsperf.com/hashing-strings function hashString(string) { // This is the hash from JVM // The hash code for a string is computed as // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1], // where s[i] is the ith character of the string and n is the length of // the string. We "mod" the result to make it between 0 (inclusive) and 2^31 // (exclusive) by dropping high bits. var hash = 0; for (var ii = 0; ii < string.length; ii++) { hash = 31 * hash + string.charCodeAt(ii) | 0; } return smi(hash); } function hashJSObj(obj) { var hash; if (usingWeakMap) { hash = weakMap.get(obj); if (hash !== undefined) { return hash; } } hash = obj[UID_HASH_KEY]; if (hash !== undefined) { return hash; } if (!canDefineProperty) { hash = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY]; if (hash !== undefined) { return hash; } hash = getIENodeHash(obj); if (hash !== undefined) { return hash; } } hash = ++objHashUID; if (objHashUID & 0x40000000) { objHashUID = 0; } if (usingWeakMap) { weakMap.set(obj, hash); } else if (isExtensible !== undefined && isExtensible(obj) === false) { throw new Error('Non-extensible objects are not allowed as keys.'); } else if (canDefineProperty) { Object.defineProperty(obj, UID_HASH_KEY, { 'enumerable': false, 'configurable': false, 'writable': false, 'value': hash }); } else if (obj.propertyIsEnumerable !== undefined && obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable) { // Since we can't define a non-enumerable property on the object // we'll hijack one of the less-used non-enumerable properties to // save our hash on it. Since this is a function it will not show up in // `JSON.stringify` which is what we want. obj.propertyIsEnumerable = function() { return this.constructor.prototype.propertyIsEnumerable.apply(this, arguments); }; obj.propertyIsEnumerable[UID_HASH_KEY] = hash; } else if (obj.nodeType !== undefined) { // At this point we couldn't get the IE `uniqueID` to use as a hash // and we couldn't use a non-enumerable property to exploit the // dontEnum bug so we simply add the `UID_HASH_KEY` on the node // itself. obj[UID_HASH_KEY] = hash; } else { throw new Error('Unable to set a non-enumerable property on object.'); } return hash; } // Get references to ES5 object methods. var isExtensible = Object.isExtensible; // True if Object.defineProperty works as expected. IE8 fails this test. var canDefineProperty = (function() { try { Object.defineProperty({}, '@', {}); return true; } catch (e) { return false; } }()); // IE has a `uniqueID` property on DOM nodes. We can construct the hash from it // and avoid memory leaks from the IE cloneNode bug. function getIENodeHash(node) { if (node && node.nodeType > 0) { switch (node.nodeType) { case 1: // Element return node.uniqueID; case 9: // Document return node.documentElement && node.documentElement.uniqueID; } } } // If possible, use a WeakMap. var usingWeakMap = typeof WeakMap === 'function'; var weakMap; if (usingWeakMap) { weakMap = new WeakMap(); } var objHashUID = 0; var UID_HASH_KEY = '__immutablehash__'; if (typeof Symbol === 'function') { UID_HASH_KEY = Symbol(UID_HASH_KEY); } var STRING_HASH_CACHE_MIN_STRLEN = 16; var STRING_HASH_CACHE_MAX_SIZE = 255; var STRING_HASH_CACHE_SIZE = 0; var stringHashCache = {}; function assertNotInfinite(size) { invariant( size !== Infinity, 'Cannot perform this action with an infinite size.' ); } createClass(Map, KeyedCollection); // @pragma Construction function Map(value) { return value === null || value === undefined ? emptyMap() : isMap(value) && !isOrdered(value) ? value : emptyMap().withMutations(function(map ) { var iter = KeyedIterable(value); assertNotInfinite(iter.size); iter.forEach(function(v, k) {return map.set(k, v)}); }); } Map.of = function() {var keyValues = SLICE$0.call(arguments, 0); return emptyMap().withMutations(function(map ) { for (var i = 0; i < keyValues.length; i += 2) { if (i + 1 >= keyValues.length) { throw new Error('Missing value for key: ' + keyValues[i]); } map.set(keyValues[i], keyValues[i + 1]); } }); }; Map.prototype.toString = function() { return this.__toString('Map {', '}'); }; // @pragma Access Map.prototype.get = function(k, notSetValue) { return this._root ? this._root.get(0, undefined, k, notSetValue) : notSetValue; }; // @pragma Modification Map.prototype.set = function(k, v) { return updateMap(this, k, v); }; Map.prototype.setIn = function(keyPath, v) { return this.updateIn(keyPath, NOT_SET, function() {return v}); }; Map.prototype.remove = function(k) { return updateMap(this, k, NOT_SET); }; Map.prototype.deleteIn = function(keyPath) { return this.updateIn(keyPath, function() {return NOT_SET}); }; Map.prototype.update = function(k, notSetValue, updater) { return arguments.length === 1 ? k(this) : this.updateIn([k], notSetValue, updater); }; Map.prototype.updateIn = function(keyPath, notSetValue, updater) { if (!updater) { updater = notSetValue; notSetValue = undefined; } var updatedValue = updateInDeepMap( this, forceIterator(keyPath), notSetValue, updater ); return updatedValue === NOT_SET ? undefined : updatedValue; }; Map.prototype.clear = function() { if (this.size === 0) { return this; } if (this.__ownerID) { this.size = 0; this._root = null; this.__hash = undefined; this.__altered = true; return this; } return emptyMap(); }; // @pragma Composition Map.prototype.merge = function(/*...iters*/) { return mergeIntoMapWith(this, undefined, arguments); }; Map.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1); return mergeIntoMapWith(this, merger, iters); }; Map.prototype.mergeIn = function(keyPath) {var iters = SLICE$0.call(arguments, 1); return this.updateIn( keyPath, emptyMap(), function(m ) {return typeof m.merge === 'function' ? m.merge.apply(m, iters) : iters[iters.length - 1]} ); }; Map.prototype.mergeDeep = function(/*...iters*/) { return mergeIntoMapWith(this, deepMerger, arguments); }; Map.prototype.mergeDeepWith = function(merger) {var iters = SLICE$0.call(arguments, 1); return mergeIntoMapWith(this, deepMergerWith(merger), iters); }; Map.prototype.mergeDeepIn = function(keyPath) {var iters = SLICE$0.call(arguments, 1); return this.updateIn( keyPath, emptyMap(), function(m ) {return typeof m.mergeDeep === 'function' ? m.mergeDeep.apply(m, iters) : iters[iters.length - 1]} ); }; Map.prototype.sort = function(comparator) { // Late binding return OrderedMap(sortFactory(this, comparator)); }; Map.prototype.sortBy = function(mapper, comparator) { // Late binding return OrderedMap(sortFactory(this, comparator, mapper)); }; // @pragma Mutability Map.prototype.withMutations = function(fn) { var mutable = this.asMutable(); fn(mutable); return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this; }; Map.prototype.asMutable = function() { return this.__ownerID ? this : this.__ensureOwner(new OwnerID()); }; Map.prototype.asImmutable = function() { return this.__ensureOwner(); }; Map.prototype.wasAltered = function() { return this.__altered; }; Map.prototype.__iterator = function(type, reverse) { return new MapIterator(this, type, reverse); }; Map.prototype.__iterate = function(fn, reverse) {var this$0 = this; var iterations = 0; this._root && this._root.iterate(function(entry ) { iterations++; return fn(entry[1], entry[0], this$0); }, reverse); return iterations; }; Map.prototype.__ensureOwner = function(ownerID) { if (ownerID === this.__ownerID) { return this; } if (!ownerID) { this.__ownerID = ownerID; this.__altered = false; return this; } return makeMap(this.size, this._root, ownerID, this.__hash); }; function isMap(maybeMap) { return !!(maybeMap && maybeMap[IS_MAP_SENTINEL]); } Map.isMap = isMap; var IS_MAP_SENTINEL = '@@__IMMUTABLE_MAP__@@'; var MapPrototype = Map.prototype; MapPrototype[IS_MAP_SENTINEL] = true; MapPrototype[DELETE] = MapPrototype.remove; MapPrototype.removeIn = MapPrototype.deleteIn; // #pragma Trie Nodes function ArrayMapNode(ownerID, entries) { this.ownerID = ownerID; this.entries = entries; } ArrayMapNode.prototype.get = function(shift, keyHash, key, notSetValue) { var entries = this.entries; for (var ii = 0, len = entries.length; ii < len; ii++) { if (is(key, entries[ii][0])) { return entries[ii][1]; } } return notSetValue; }; ArrayMapNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { var removed = value === NOT_SET; var entries = this.entries; var idx = 0; for (var len = entries.length; idx < len; idx++) { if (is(key, entries[idx][0])) { break; } } var exists = idx < len; if (exists ? entries[idx][1] === value : removed) { return this; } SetRef(didAlter); (removed || !exists) && SetRef(didChangeSize); if (removed && entries.length === 1) { return; // undefined } if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) { return createNodes(ownerID, entries, key, value); } var isEditable = ownerID && ownerID === this.ownerID; var newEntries = isEditable ? entries : arrCopy(entries); if (exists) { if (removed) { idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop()); } else { newEntries[idx] = [key, value]; } } else { newEntries.push([key, value]); } if (isEditable) { this.entries = newEntries; return this; } return new ArrayMapNode(ownerID, newEntries); }; function BitmapIndexedNode(ownerID, bitmap, nodes) { this.ownerID = ownerID; this.bitmap = bitmap; this.nodes = nodes; } BitmapIndexedNode.prototype.get = function(shift, keyHash, key, notSetValue) { if (keyHash === undefined) { keyHash = hash(key); } var bit = (1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK)); var bitmap = this.bitmap; return (bitmap & bit) === 0 ? notSetValue : this.nodes[popCount(bitmap & (bit - 1))].get(shift + SHIFT, keyHash, key, notSetValue); }; BitmapIndexedNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { if (keyHash === undefined) { keyHash = hash(key); } var keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; var bit = 1 << keyHashFrag; var bitmap = this.bitmap; var exists = (bitmap & bit) !== 0; if (!exists && value === NOT_SET) { return this; } var idx = popCount(bitmap & (bit - 1)); var nodes = this.nodes; var node = exists ? nodes[idx] : undefined; var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter); if (newNode === node) { return this; } if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) { return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode); } if (exists && !newNode && nodes.length === 2 && isLeafNode(nodes[idx ^ 1])) { return nodes[idx ^ 1]; } if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) { return newNode; } var isEditable = ownerID && ownerID === this.ownerID; var newBitmap = exists ? newNode ? bitmap : bitmap ^ bit : bitmap | bit; var newNodes = exists ? newNode ? setIn(nodes, idx, newNode, isEditable) : spliceOut(nodes, idx, isEditable) : spliceIn(nodes, idx, newNode, isEditable); if (isEditable) { this.bitmap = newBitmap; this.nodes = newNodes; return this; } return new BitmapIndexedNode(ownerID, newBitmap, newNodes); }; function HashArrayMapNode(ownerID, count, nodes) { this.ownerID = ownerID; this.count = count; this.nodes = nodes; } HashArrayMapNode.prototype.get = function(shift, keyHash, key, notSetValue) { if (keyHash === undefined) { keyHash = hash(key); } var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; var node = this.nodes[idx]; return node ? node.get(shift + SHIFT, keyHash, key, notSetValue) : notSetValue; }; HashArrayMapNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { if (keyHash === undefined) { keyHash = hash(key); } var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; var removed = value === NOT_SET; var nodes = this.nodes; var node = nodes[idx]; if (removed && !node) { return this; } var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter); if (newNode === node) { return this; } var newCount = this.count; if (!node) { newCount++; } else if (!newNode) { newCount--; if (newCount < MIN_HASH_ARRAY_MAP_SIZE) { return packNodes(ownerID, nodes, newCount, idx); } } var isEditable = ownerID && ownerID === this.ownerID; var newNodes = setIn(nodes, idx, newNode, isEditable); if (isEditable) { this.count = newCount; this.nodes = newNodes; return this; } return new HashArrayMapNode(ownerID, newCount, newNodes); }; function HashCollisionNode(ownerID, keyHash, entries) { this.ownerID = ownerID; this.keyHash = keyHash; this.entries = entries; } HashCollisionNode.prototype.get = function(shift, keyHash, key, notSetValue) { var entries = this.entries; for (var ii = 0, len = entries.length; ii < len; ii++) { if (is(key, entries[ii][0])) { return entries[ii][1]; } } return notSetValue; }; HashCollisionNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { if (keyHash === undefined) { keyHash = hash(key); } var removed = value === NOT_SET; if (keyHash !== this.keyHash) { if (removed) { return this; } SetRef(didAlter); SetRef(didChangeSize); return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]); } var entries = this.entries; var idx = 0; for (var len = entries.length; idx < len; idx++) { if (is(key, entries[idx][0])) { break; } } var exists = idx < len; if (exists ? entries[idx][1] === value : removed) { return this; } SetRef(didAlter); (removed || !exists) && SetRef(didChangeSize); if (removed && len === 2) { return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]); } var isEditable = ownerID && ownerID === this.ownerID; var newEntries = isEditable ? entries : arrCopy(entries); if (exists) { if (removed) { idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop()); } else { newEntries[idx] = [key, value]; } } else { newEntries.push([key, value]); } if (isEditable) { this.entries = newEntries; return this; } return new HashCollisionNode(ownerID, this.keyHash, newEntries); }; function ValueNode(ownerID, keyHash, entry) { this.ownerID = ownerID; this.keyHash = keyHash; this.entry = entry; } ValueNode.prototype.get = function(shift, keyHash, key, notSetValue) { return is(key, this.entry[0]) ? this.entry[1] : notSetValue; }; ValueNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { var removed = value === NOT_SET; var keyMatch = is(key, this.entry[0]); if (keyMatch ? value === this.entry[1] : removed) { return this; } SetRef(didAlter); if (removed) { SetRef(didChangeSize); return; // undefined } if (keyMatch) { if (ownerID && ownerID === this.ownerID) { this.entry[1] = value; return this; } return new ValueNode(ownerID, this.keyHash, [key, value]); } SetRef(didChangeSize); return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]); }; // #pragma Iterators ArrayMapNode.prototype.iterate = HashCollisionNode.prototype.iterate = function (fn, reverse) { var entries = this.entries; for (var ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) { if (fn(entries[reverse ? maxIndex - ii : ii]) === false) { return false; } } } BitmapIndexedNode.prototype.iterate = HashArrayMapNode.prototype.iterate = function (fn, reverse) { var nodes = this.nodes; for (var ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) { var node = nodes[reverse ? maxIndex - ii : ii]; if (node && node.iterate(fn, reverse) === false) { return false; } } } ValueNode.prototype.iterate = function (fn, reverse) { return fn(this.entry); } createClass(MapIterator, Iterator); function MapIterator(map, type, reverse) { this._type = type; this._reverse = reverse; this._stack = map._root && mapIteratorFrame(map._root); } MapIterator.prototype.next = function() { var type = this._type; var stack = this._stack; while (stack) { var node = stack.node; var index = stack.index++; var maxIndex; if (node.entry) { if (index === 0) { return mapIteratorValue(type, node.entry); } } else if (node.entries) { maxIndex = node.entries.length - 1; if (index <= maxIndex) { return mapIteratorValue(type, node.entries[this._reverse ? maxIndex - index : index]); } } else { maxIndex = node.nodes.length - 1; if (index <= maxIndex) { var subNode = node.nodes[this._reverse ? maxIndex - index : index]; if (subNode) { if (subNode.entry) { return mapIteratorValue(type, subNode.entry); } stack = this._stack = mapIteratorFrame(subNode, stack); } continue; } } stack = this._stack = this._stack.__prev; } return iteratorDone(); }; function mapIteratorValue(type, entry) { return iteratorValue(type, entry[0], entry[1]); } function mapIteratorFrame(node, prev) { return { node: node, index: 0, __prev: prev }; } function makeMap(size, root, ownerID, hash) { var map = Object.create(MapPrototype); map.size = size; map._root = root; map.__ownerID = ownerID; map.__hash = hash; map.__altered = false; return map; } var EMPTY_MAP; function emptyMap() { return EMPTY_MAP || (EMPTY_MAP = makeMap(0)); } function updateMap(map, k, v) { var newRoot; var newSize; if (!map._root) { if (v === NOT_SET) { return map; } newSize = 1; newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]); } else { var didChangeSize = MakeRef(CHANGE_LENGTH); var didAlter = MakeRef(DID_ALTER); newRoot = updateNode(map._root, map.__ownerID, 0, undefined, k, v, didChangeSize, didAlter); if (!didAlter.value) { return map; } newSize = map.size + (didChangeSize.value ? v === NOT_SET ? -1 : 1 : 0); } if (map.__ownerID) { map.size = newSize; map._root = newRoot; map.__hash = undefined; map.__altered = true; return map; } return newRoot ? makeMap(newSize, newRoot) : emptyMap(); } function updateNode(node, ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { if (!node) { if (value === NOT_SET) { return node; } SetRef(didAlter); SetRef(didChangeSize); return new ValueNode(ownerID, keyHash, [key, value]); } return node.update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter); } function isLeafNode(node) { return node.constructor === ValueNode || node.constructor === HashCollisionNode; } function mergeIntoNode(node, ownerID, shift, keyHash, entry) { if (node.keyHash === keyHash) { return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]); } var idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK; var idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; var newNode; var nodes = idx1 === idx2 ? [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)] : ((newNode = new ValueNode(ownerID, keyHash, entry)), idx1 < idx2 ? [node, newNode] : [newNode, node]); return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes); } function createNodes(ownerID, entries, key, value) { if (!ownerID) { ownerID = new OwnerID(); } var node = new ValueNode(ownerID, hash(key), [key, value]); for (var ii = 0; ii < entries.length; ii++) { var entry = entries[ii]; node = node.update(ownerID, 0, undefined, entry[0], entry[1]); } return node; } function packNodes(ownerID, nodes, count, excluding) { var bitmap = 0; var packedII = 0; var packedNodes = new Array(count); for (var ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) { var node = nodes[ii]; if (node !== undefined && ii !== excluding) { bitmap |= bit; packedNodes[packedII++] = node; } } return new BitmapIndexedNode(ownerID, bitmap, packedNodes); } function expandNodes(ownerID, nodes, bitmap, including, node) { var count = 0; var expandedNodes = new Array(SIZE); for (var ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) { expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined; } expandedNodes[including] = node; return new HashArrayMapNode(ownerID, count + 1, expandedNodes); } function mergeIntoMapWith(map, merger, iterables) { var iters = []; for (var ii = 0; ii < iterables.length; ii++) { var value = iterables[ii]; var iter = KeyedIterable(value); if (!isIterable(value)) { iter = iter.map(function(v ) {return fromJS(v)}); } iters.push(iter); } return mergeIntoCollectionWith(map, merger, iters); } function deepMerger(existing, value, key) { return existing && existing.mergeDeep && isIterable(value) ? existing.mergeDeep(value) : is(existing, value) ? existing : value; } function deepMergerWith(merger) { return function(existing, value, key) { if (existing && existing.mergeDeepWith && isIterable(value)) { return existing.mergeDeepWith(merger, value); } var nextValue = merger(existing, value, key); return is(existing, nextValue) ? existing : nextValue; }; } function mergeIntoCollectionWith(collection, merger, iters) { iters = iters.filter(function(x ) {return x.size !== 0}); if (iters.length === 0) { return collection; } if (collection.size === 0 && !collection.__ownerID && iters.length === 1) { return collection.constructor(iters[0]); } return collection.withMutations(function(collection ) { var mergeIntoMap = merger ? function(value, key) { collection.update(key, NOT_SET, function(existing ) {return existing === NOT_SET ? value : merger(existing, value, key)} ); } : function(value, key) { collection.set(key, value); } for (var ii = 0; ii < iters.length; ii++) { iters[ii].forEach(mergeIntoMap); } }); } function updateInDeepMap(existing, keyPathIter, notSetValue, updater) { var isNotSet = existing === NOT_SET; var step = keyPathIter.next(); if (step.done) { var existingValue = isNotSet ? notSetValue : existing; var newValue = updater(existingValue); return newValue === existingValue ? existing : newValue; } invariant( isNotSet || (existing && existing.set), 'invalid keyPath' ); var key = step.value; var nextExisting = isNotSet ? NOT_SET : existing.get(key, NOT_SET); var nextUpdated = updateInDeepMap( nextExisting, keyPathIter, notSetValue, updater ); return nextUpdated === nextExisting ? existing : nextUpdated === NOT_SET ? existing.remove(key) : (isNotSet ? emptyMap() : existing).set(key, nextUpdated); } function popCount(x) { x = x - ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0f0f0f0f; x = x + (x >> 8); x = x + (x >> 16); return x & 0x7f; } function setIn(array, idx, val, canEdit) { var newArray = canEdit ? array : arrCopy(array); newArray[idx] = val; return newArray; } function spliceIn(array, idx, val, canEdit) { var newLen = array.length + 1; if (canEdit && idx + 1 === newLen) { array[idx] = val; return array; } var newArray = new Array(newLen); var after = 0; for (var ii = 0; ii < newLen; ii++) { if (ii === idx) { newArray[ii] = val; after = -1; } else { newArray[ii] = array[ii + after]; } } return newArray; } function spliceOut(array, idx, canEdit) { var newLen = array.length - 1; if (canEdit && idx === newLen) { array.pop(); return array; } var newArray = new Array(newLen); var after = 0; for (var ii = 0; ii < newLen; ii++) { if (ii === idx) { after = 1; } newArray[ii] = array[ii + after]; } return newArray; } var MAX_ARRAY_MAP_SIZE = SIZE / 4; var MAX_BITMAP_INDEXED_SIZE = SIZE / 2; var MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4; createClass(List, IndexedCollection); // @pragma Construction function List(value) { var empty = emptyList(); if (value === null || value === undefined) { return empty; } if (isList(value)) { return value; } var iter = IndexedIterable(value); var size = iter.size; if (size === 0) { return empty; } assertNotInfinite(size); if (size > 0 && size < SIZE) { return makeList(0, size, SHIFT, null, new VNode(iter.toArray())); } return empty.withMutations(function(list ) { list.setSize(size); iter.forEach(function(v, i) {return list.set(i, v)}); }); } List.of = function(/*...values*/) { return this(arguments); }; List.prototype.toString = function() { return this.__toString('List [', ']'); }; // @pragma Access List.prototype.get = function(index, notSetValue) { index = wrapIndex(this, index); if (index >= 0 && index < this.size) { index += this._origin; var node = listNodeFor(this, index); return node && node.array[index & MASK]; } return notSetValue; }; // @pragma Modification List.prototype.set = function(index, value) { return updateList(this, index, value); }; List.prototype.remove = function(index) { return !this.has(index) ? this : index === 0 ? this.shift() : index === this.size - 1 ? this.pop() : this.splice(index, 1); }; List.prototype.insert = function(index, value) { return this.splice(index, 0, value); }; List.prototype.clear = function() { if (this.size === 0) { return this; } if (this.__ownerID) { this.size = this._origin = this._capacity = 0; this._level = SHIFT; this._root = this._tail = null; this.__hash = undefined; this.__altered = true; return this; } return emptyList(); }; List.prototype.push = function(/*...values*/) { var values = arguments; var oldSize = this.size; return this.withMutations(function(list ) { setListBounds(list, 0, oldSize + values.length); for (var ii = 0; ii < values.length; ii++) { list.set(oldSize + ii, values[ii]); } }); }; List.prototype.pop = function() { return setListBounds(this, 0, -1); }; List.prototype.unshift = function(/*...values*/) { var values = arguments; return this.withMutations(function(list ) { setListBounds(list, -values.length); for (var ii = 0; ii < values.length; ii++) { list.set(ii, values[ii]); } }); }; List.prototype.shift = function() { return setListBounds(this, 1); }; // @pragma Composition List.prototype.merge = function(/*...iters*/) { return mergeIntoListWith(this, undefined, arguments); }; List.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1); return mergeIntoListWith(this, merger, iters); }; List.prototype.mergeDeep = function(/*...iters*/) { return mergeIntoListWith(this, deepMerger, arguments); }; List.prototype.mergeDeepWith = function(merger) {var iters = SLICE$0.call(arguments, 1); return mergeIntoListWith(this, deepMergerWith(merger), iters); }; List.prototype.setSize = function(size) { return setListBounds(this, 0, size); }; // @pragma Iteration List.prototype.slice = function(begin, end) { var size = this.size; if (wholeSlice(begin, end, size)) { return this; } return setListBounds( this, resolveBegin(begin, size), resolveEnd(end, size) ); }; List.prototype.__iterator = function(type, reverse) { var index = 0; var values = iterateList(this, reverse); return new Iterator(function() { var value = values(); return value === DONE ? iteratorDone() : iteratorValue(type, index++, value); }); }; List.prototype.__iterate = function(fn, reverse) { var index = 0; var values = iterateList(this, reverse); var value; while ((value = values()) !== DONE) { if (fn(value, index++, this) === false) { break; } } return index; }; List.prototype.__ensureOwner = function(ownerID) { if (ownerID === this.__ownerID) { return this; } if (!ownerID) { this.__ownerID = ownerID; return this; } return makeList(this._origin, this._capacity, this._level, this._root, this._tail, ownerID, this.__hash); }; function isList(maybeList) { return !!(maybeList && maybeList[IS_LIST_SENTINEL]); } List.isList = isList; var IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@'; var ListPrototype = List.prototype; ListPrototype[IS_LIST_SENTINEL] = true; ListPrototype[DELETE] = ListPrototype.remove; ListPrototype.setIn = MapPrototype.setIn; ListPrototype.deleteIn = ListPrototype.removeIn = MapPrototype.removeIn; ListPrototype.update = MapPrototype.update; ListPrototype.updateIn = MapPrototype.updateIn; ListPrototype.mergeIn = MapPrototype.mergeIn; ListPrototype.mergeDeepIn = MapPrototype.mergeDeepIn; ListPrototype.withMutations = MapPrototype.withMutations; ListPrototype.asMutable = MapPrototype.asMutable; ListPrototype.asImmutable = MapPrototype.asImmutable; ListPrototype.wasAltered = MapPrototype.wasAltered; function VNode(array, ownerID) { this.array = array; this.ownerID = ownerID; } // TODO: seems like these methods are very similar VNode.prototype.removeBefore = function(ownerID, level, index) { if (index === level ? 1 << level : 0 || this.array.length === 0) { return this; } var originIndex = (index >>> level) & MASK; if (originIndex >= this.array.length) { return new VNode([], ownerID); } var removingFirst = originIndex === 0; var newChild; if (level > 0) { var oldChild = this.array[originIndex]; newChild = oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index); if (newChild === oldChild && removingFirst) { return this; } } if (removingFirst && !newChild) { return this; } var editable = editableVNode(this, ownerID); if (!removingFirst) { for (var ii = 0; ii < originIndex; ii++) { editable.array[ii] = undefined; } } if (newChild) { editable.array[originIndex] = newChild; } return editable; }; VNode.prototype.removeAfter = function(ownerID, level, index) { if (index === (level ? 1 << level : 0) || this.array.length === 0) { return this; } var sizeIndex = ((index - 1) >>> level) & MASK; if (sizeIndex >= this.array.length) { return this; } var newChild; if (level > 0) { var oldChild = this.array[sizeIndex]; newChild = oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index); if (newChild === oldChild && sizeIndex === this.array.length - 1) { return this; } } var editable = editableVNode(this, ownerID); editable.array.splice(sizeIndex + 1); if (newChild) { editable.array[sizeIndex] = newChild; } return editable; }; var DONE = {}; function iterateList(list, reverse) { var left = list._origin; var right = list._capacity; var tailPos = getTailOffset(right); var tail = list._tail; return iterateNodeOrLeaf(list._root, list._level, 0); function iterateNodeOrLeaf(node, level, offset) { return level === 0 ? iterateLeaf(node, offset) : iterateNode(node, level, offset); } function iterateLeaf(node, offset) { var array = offset === tailPos ? tail && tail.array : node && node.array; var from = offset > left ? 0 : left - offset; var to = right - offset; if (to > SIZE) { to = SIZE; } return function() { if (from === to) { return DONE; } var idx = reverse ? --to : from++; return array && array[idx]; }; } function iterateNode(node, level, offset) { var values; var array = node && node.array; var from = offset > left ? 0 : (left - offset) >> level; var to = ((right - offset) >> level) + 1; if (to > SIZE) { to = SIZE; } return function() { do { if (values) { var value = values(); if (value !== DONE) { return value; } values = null; } if (from === to) { return DONE; } var idx = reverse ? --to : from++; values = iterateNodeOrLeaf( array && array[idx], level - SHIFT, offset + (idx << level) ); } while (true); }; } } function makeList(origin, capacity, level, root, tail, ownerID, hash) { var list = Object.create(ListPrototype); list.size = capacity - origin; list._origin = origin; list._capacity = capacity; list._level = level; list._root = root; list._tail = tail; list.__ownerID = ownerID; list.__hash = hash; list.__altered = false; return list; } var EMPTY_LIST; function emptyList() { return EMPTY_LIST || (EMPTY_LIST = makeList(0, 0, SHIFT)); } function updateList(list, index, value) { index = wrapIndex(list, index); if (index !== index) { return list; } if (index >= list.size || index < 0) { return list.withMutations(function(list ) { index < 0 ? setListBounds(list, index).set(0, value) : setListBounds(list, 0, index + 1).set(index, value) }); } index += list._origin; var newTail = list._tail; var newRoot = list._root; var didAlter = MakeRef(DID_ALTER); if (index >= getTailOffset(list._capacity)) { newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter); } else { newRoot = updateVNode(newRoot, list.__ownerID, list._level, index, value, didAlter); } if (!didAlter.value) { return list; } if (list.__ownerID) { list._root = newRoot; list._tail = newTail; list.__hash = undefined; list.__altered = true; return list; } return makeList(list._origin, list._capacity, list._level, newRoot, newTail); } function updateVNode(node, ownerID, level, index, value, didAlter) { var idx = (index >>> level) & MASK; var nodeHas = node && idx < node.array.length; if (!nodeHas && value === undefined) { return node; } var newNode; if (level > 0) { var lowerNode = node && node.array[idx]; var newLowerNode = updateVNode(lowerNode, ownerID, level - SHIFT, index, value, didAlter); if (newLowerNode === lowerNode) { return node; } newNode = editableVNode(node, ownerID); newNode.array[idx] = newLowerNode; return newNode; } if (nodeHas && node.array[idx] === value) { return node; } SetRef(didAlter); newNode = editableVNode(node, ownerID); if (value === undefined && idx === newNode.array.length - 1) { newNode.array.pop(); } else { newNode.array[idx] = value; } return newNode; } function editableVNode(node, ownerID) { if (ownerID && node && ownerID === node.ownerID) { return node; } return new VNode(node ? node.array.slice() : [], ownerID); } function listNodeFor(list, rawIndex) { if (rawIndex >= getTailOffset(list._capacity)) { return list._tail; } if (rawIndex < 1 << (list._level + SHIFT)) { var node = list._root; var level = list._level; while (node && level > 0) { node = node.array[(rawIndex >>> level) & MASK]; level -= SHIFT; } return node; } } function setListBounds(list, begin, end) { // Sanitize begin & end using this shorthand for ToInt32(argument) // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 if (begin !== undefined) { begin = begin | 0; } if (end !== undefined) { end = end | 0; } var owner = list.__ownerID || new OwnerID(); var oldOrigin = list._origin; var oldCapacity = list._capacity; var newOrigin = oldOrigin + begin; var newCapacity = end === undefined ? oldCapacity : end < 0 ? oldCapacity + end : oldOrigin + end; if (newOrigin === oldOrigin && newCapacity === oldCapacity) { return list; } // If it's going to end after it starts, it's empty. if (newOrigin >= newCapacity) { return list.clear(); } var newLevel = list._level; var newRoot = list._root; // New origin might need creating a higher root. var offsetShift = 0; while (newOrigin + offsetShift < 0) { newRoot = new VNode(newRoot && newRoot.array.length ? [undefined, newRoot] : [], owner); newLevel += SHIFT; offsetShift += 1 << newLevel; } if (offsetShift) { newOrigin += offsetShift; oldOrigin += offsetShift; newCapacity += offsetShift; oldCapacity += offsetShift; } var oldTailOffset = getTailOffset(oldCapacity); var newTailOffset = getTailOffset(newCapacity); // New size might need creating a higher root. while (newTailOffset >= 1 << (newLevel + SHIFT)) { newRoot = new VNode(newRoot && newRoot.array.length ? [newRoot] : [], owner); newLevel += SHIFT; } // Locate or create the new tail. var oldTail = list._tail; var newTail = newTailOffset < oldTailOffset ? listNodeFor(list, newCapacity - 1) : newTailOffset > oldTailOffset ? new VNode([], owner) : oldTail; // Merge Tail into tree. if (oldTail && newTailOffset > oldTailOffset && newOrigin < oldCapacity && oldTail.array.length) { newRoot = editableVNode(newRoot, owner); var node = newRoot; for (var level = newLevel; level > SHIFT; level -= SHIFT) { var idx = (oldTailOffset >>> level) & MASK; node = node.array[idx] = editableVNode(node.array[idx], owner); } node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail; } // If the size has been reduced, there's a chance the tail needs to be trimmed. if (newCapacity < oldCapacity) { newTail = newTail && newTail.removeAfter(owner, 0, newCapacity); } // If the new origin is within the tail, then we do not need a root. if (newOrigin >= newTailOffset) { newOrigin -= newTailOffset; newCapacity -= newTailOffset; newLevel = SHIFT; newRoot = null; newTail = newTail && newTail.removeBefore(owner, 0, newOrigin); // Otherwise, if the root has been trimmed, garbage collect. } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) { offsetShift = 0; // Identify the new top root node of the subtree of the old root. while (newRoot) { var beginIndex = (newOrigin >>> newLevel) & MASK; if (beginIndex !== (newTailOffset >>> newLevel) & MASK) { break; } if (beginIndex) { offsetShift += (1 << newLevel) * beginIndex; } newLevel -= SHIFT; newRoot = newRoot.array[beginIndex]; } // Trim the new sides of the new root. if (newRoot && newOrigin > oldOrigin) { newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift); } if (newRoot && newTailOffset < oldTailOffset) { newRoot = newRoot.removeAfter(owner, newLevel, newTailOffset - offsetShift); } if (offsetShift) { newOrigin -= offsetShift; newCapacity -= offsetShift; } } if (list.__ownerID) { list.size = newCapacity - newOrigin; list._origin = newOrigin; list._capacity = newCapacity; list._level = newLevel; list._root = newRoot; list._tail = newTail; list.__hash = undefined; list.__altered = true; return list; } return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail); } function mergeIntoListWith(list, merger, iterables) { var iters = []; var maxSize = 0; for (var ii = 0; ii < iterables.length; ii++) { var value = iterables[ii]; var iter = IndexedIterable(value); if (iter.size > maxSize) { maxSize = iter.size; } if (!isIterable(value)) { iter = iter.map(function(v ) {return fromJS(v)}); } iters.push(iter); } if (maxSize > list.size) { list = list.setSize(maxSize); } return mergeIntoCollectionWith(list, merger, iters); } function getTailOffset(size) { return size < SIZE ? 0 : (((size - 1) >>> SHIFT) << SHIFT); } createClass(OrderedMap, Map); // @pragma Construction function OrderedMap(value) { return value === null || value === undefined ? emptyOrderedMap() : isOrderedMap(value) ? value : emptyOrderedMap().withMutations(function(map ) { var iter = KeyedIterable(value); assertNotInfinite(iter.size); iter.forEach(function(v, k) {return map.set(k, v)}); }); } OrderedMap.of = function(/*...values*/) { return this(arguments); }; OrderedMap.prototype.toString = function() { return this.__toString('OrderedMap {', '}'); }; // @pragma Access OrderedMap.prototype.get = function(k, notSetValue) { var index = this._map.get(k); return index !== undefined ? this._list.get(index)[1] : notSetValue; }; // @pragma Modification OrderedMap.prototype.clear = function() { if (this.size === 0) { return this; } if (this.__ownerID) { this.size = 0; this._map.clear(); this._list.clear(); return this; } return emptyOrderedMap(); }; OrderedMap.prototype.set = function(k, v) { return updateOrderedMap(this, k, v); }; OrderedMap.prototype.remove = function(k) { return updateOrderedMap(this, k, NOT_SET); }; OrderedMap.prototype.wasAltered = function() { return this._map.wasAltered() || this._list.wasAltered(); }; OrderedMap.prototype.__iterate = function(fn, reverse) {var this$0 = this; return this._list.__iterate( function(entry ) {return entry && fn(entry[1], entry[0], this$0)}, reverse ); }; OrderedMap.prototype.__iterator = function(type, reverse) { return this._list.fromEntrySeq().__iterator(type, reverse); }; OrderedMap.prototype.__ensureOwner = function(ownerID) { if (ownerID === this.__ownerID) { return this; } var newMap = this._map.__ensureOwner(ownerID); var newList = this._list.__ensureOwner(ownerID); if (!ownerID) { this.__ownerID = ownerID; this._map = newMap; this._list = newList; return this; } return makeOrderedMap(newMap, newList, ownerID, this.__hash); }; function isOrderedMap(maybeOrderedMap) { return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap); } OrderedMap.isOrderedMap = isOrderedMap; OrderedMap.prototype[IS_ORDERED_SENTINEL] = true; OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove; function makeOrderedMap(map, list, ownerID, hash) { var omap = Object.create(OrderedMap.prototype); omap.size = map ? map.size : 0; omap._map = map; omap._list = list; omap.__ownerID = ownerID; omap.__hash = hash; return omap; } var EMPTY_ORDERED_MAP; function emptyOrderedMap() { return EMPTY_ORDERED_MAP || (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList())); } function updateOrderedMap(omap, k, v) { var map = omap._map; var list = omap._list; var i = map.get(k); var has = i !== undefined; var newMap; var newList; if (v === NOT_SET) { // removed if (!has) { return omap; } if (list.size >= SIZE && list.size >= map.size * 2) { newList = list.filter(function(entry, idx) {return entry !== undefined && i !== idx}); newMap = newList.toKeyedSeq().map(function(entry ) {return entry[0]}).flip().toMap(); if (omap.__ownerID) { newMap.__ownerID = newList.__ownerID = omap.__ownerID; } } else { newMap = map.remove(k); newList = i === list.size - 1 ? list.pop() : list.set(i, undefined); } } else { if (has) { if (v === list.get(i)[1]) { return omap; } newMap = map; newList = list.set(i, [k, v]); } else { newMap = map.set(k, list.size); newList = list.set(list.size, [k, v]); } } if (omap.__ownerID) { omap.size = newMap.size; omap._map = newMap; omap._list = newList; omap.__hash = undefined; return omap; } return makeOrderedMap(newMap, newList); } createClass(ToKeyedSequence, KeyedSeq); function ToKeyedSequence(indexed, useKeys) { this._iter = indexed; this._useKeys = useKeys; this.size = indexed.size; } ToKeyedSequence.prototype.get = function(key, notSetValue) { return this._iter.get(key, notSetValue); }; ToKeyedSequence.prototype.has = function(key) { return this._iter.has(key); }; ToKeyedSequence.prototype.valueSeq = function() { return this._iter.valueSeq(); }; ToKeyedSequence.prototype.reverse = function() {var this$0 = this; var reversedSequence = reverseFactory(this, true); if (!this._useKeys) { reversedSequence.valueSeq = function() {return this$0._iter.toSeq().reverse()}; } return reversedSequence; }; ToKeyedSequence.prototype.map = function(mapper, context) {var this$0 = this; var mappedSequence = mapFactory(this, mapper, context); if (!this._useKeys) { mappedSequence.valueSeq = function() {return this$0._iter.toSeq().map(mapper, context)}; } return mappedSequence; }; ToKeyedSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this; var ii; return this._iter.__iterate( this._useKeys ? function(v, k) {return fn(v, k, this$0)} : ((ii = reverse ? resolveSize(this) : 0), function(v ) {return fn(v, reverse ? --ii : ii++, this$0)}), reverse ); }; ToKeyedSequence.prototype.__iterator = function(type, reverse) { if (this._useKeys) { return this._iter.__iterator(type, reverse); } var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); var ii = reverse ? resolveSize(this) : 0; return new Iterator(function() { var step = iterator.next(); return step.done ? step : iteratorValue(type, reverse ? --ii : ii++, step.value, step); }); }; ToKeyedSequence.prototype[IS_ORDERED_SENTINEL] = true; createClass(ToIndexedSequence, IndexedSeq); function ToIndexedSequence(iter) { this._iter = iter; this.size = iter.size; } ToIndexedSequence.prototype.includes = function(value) { return this._iter.includes(value); }; ToIndexedSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this; var iterations = 0; return this._iter.__iterate(function(v ) {return fn(v, iterations++, this$0)}, reverse); }; ToIndexedSequence.prototype.__iterator = function(type, reverse) { var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); var iterations = 0; return new Iterator(function() { var step = iterator.next(); return step.done ? step : iteratorValue(type, iterations++, step.value, step) }); }; createClass(ToSetSequence, SetSeq); function ToSetSequence(iter) { this._iter = iter; this.size = iter.size; } ToSetSequence.prototype.has = function(key) { return this._iter.includes(key); }; ToSetSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this; return this._iter.__iterate(function(v ) {return fn(v, v, this$0)}, reverse); }; ToSetSequence.prototype.__iterator = function(type, reverse) { var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); return new Iterator(function() { var step = iterator.next(); return step.done ? step : iteratorValue(type, step.value, step.value, step); }); }; createClass(FromEntriesSequence, KeyedSeq); function FromEntriesSequence(entries) { this._iter = entries; this.size = entries.size; } FromEntriesSequence.prototype.entrySeq = function() { return this._iter.toSeq(); }; FromEntriesSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this; return this._iter.__iterate(function(entry ) { // Check if entry exists first so array access doesn't throw for holes // in the parent iteration. if (entry) { validateEntry(entry); var indexedIterable = isIterable(entry); return fn( indexedIterable ? entry.get(1) : entry[1], indexedIterable ? entry.get(0) : entry[0], this$0 ); } }, reverse); }; FromEntriesSequence.prototype.__iterator = function(type, reverse) { var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); return new Iterator(function() { while (true) { var step = iterator.next(); if (step.done) { return step; } var entry = step.value; // Check if entry exists first so array access doesn't throw for holes // in the parent iteration. if (entry) { validateEntry(entry); var indexedIterable = isIterable(entry); return iteratorValue( type, indexedIterable ? entry.get(0) : entry[0], indexedIterable ? entry.get(1) : entry[1], step ); } } }); }; ToIndexedSequence.prototype.cacheResult = ToKeyedSequence.prototype.cacheResult = ToSetSequence.prototype.cacheResult = FromEntriesSequence.prototype.cacheResult = cacheResultThrough; function flipFactory(iterable) { var flipSequence = makeSequence(iterable); flipSequence._iter = iterable; flipSequence.size = iterable.size; flipSequence.flip = function() {return iterable}; flipSequence.reverse = function () { var reversedSequence = iterable.reverse.apply(this); // super.reverse() reversedSequence.flip = function() {return iterable.reverse()}; return reversedSequence; }; flipSequence.has = function(key ) {return iterable.includes(key)}; flipSequence.includes = function(key ) {return iterable.has(key)}; flipSequence.cacheResult = cacheResultThrough; flipSequence.__iterateUncached = function (fn, reverse) {var this$0 = this; return iterable.__iterate(function(v, k) {return fn(k, v, this$0) !== false}, reverse); } flipSequence.__iteratorUncached = function(type, reverse) { if (type === ITERATE_ENTRIES) { var iterator = iterable.__iterator(type, reverse); return new Iterator(function() { var step = iterator.next(); if (!step.done) { var k = step.value[0]; step.value[0] = step.value[1]; step.value[1] = k; } return step; }); } return iterable.__iterator( type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES, reverse ); } return flipSequence; } function mapFactory(iterable, mapper, context) { var mappedSequence = makeSequence(iterable); mappedSequence.size = iterable.size; mappedSequence.has = function(key ) {return iterable.has(key)}; mappedSequence.get = function(key, notSetValue) { var v = iterable.get(key, NOT_SET); return v === NOT_SET ? notSetValue : mapper.call(context, v, key, iterable); }; mappedSequence.__iterateUncached = function (fn, reverse) {var this$0 = this; return iterable.__iterate( function(v, k, c) {return fn(mapper.call(context, v, k, c), k, this$0) !== false}, reverse ); } mappedSequence.__iteratorUncached = function (type, reverse) { var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse); return new Iterator(function() { var step = iterator.next(); if (step.done) { return step; } var entry = step.value; var key = entry[0]; return iteratorValue( type, key, mapper.call(context, entry[1], key, iterable), step ); }); } return mappedSequence; } function reverseFactory(iterable, useKeys) { var reversedSequence = makeSequence(iterable); reversedSequence._iter = iterable; reversedSequence.size = iterable.size; reversedSequence.reverse = function() {return iterable}; if (iterable.flip) { reversedSequence.flip = function () { var flipSequence = flipFactory(iterable); flipSequence.reverse = function() {return iterable.flip()}; return flipSequence; }; } reversedSequence.get = function(key, notSetValue) {return iterable.get(useKeys ? key : -1 - key, notSetValue)}; reversedSequence.has = function(key ) {return iterable.has(useKeys ? key : -1 - key)}; reversedSequence.includes = function(value ) {return iterable.includes(value)}; reversedSequence.cacheResult = cacheResultThrough; reversedSequence.__iterate = function (fn, reverse) {var this$0 = this; return iterable.__iterate(function(v, k) {return fn(v, k, this$0)}, !reverse); }; reversedSequence.__iterator = function(type, reverse) {return iterable.__iterator(type, !reverse)}; return reversedSequence; } function filterFactory(iterable, predicate, context, useKeys) { var filterSequence = makeSequence(iterable); if (useKeys) { filterSequence.has = function(key ) { var v = iterable.get(key, NOT_SET); return v !== NOT_SET && !!predicate.call(context, v, key, iterable); }; filterSequence.get = function(key, notSetValue) { var v = iterable.get(key, NOT_SET); return v !== NOT_SET && predicate.call(context, v, key, iterable) ? v : notSetValue; }; } filterSequence.__iterateUncached = function (fn, reverse) {var this$0 = this; var iterations = 0; iterable.__iterate(function(v, k, c) { if (predicate.call(context, v, k, c)) { iterations++; return fn(v, useKeys ? k : iterations - 1, this$0); } }, reverse); return iterations; }; filterSequence.__iteratorUncached = function (type, reverse) { var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse); var iterations = 0; return new Iterator(function() { while (true) { var step = iterator.next(); if (step.done) { return step; } var entry = step.value; var key = entry[0]; var value = entry[1]; if (predicate.call(context, value, key, iterable)) { return iteratorValue(type, useKeys ? key : iterations++, value, step); } } }); } return filterSequence; } function countByFactory(iterable, grouper, context) { var groups = Map().asMutable(); iterable.__iterate(function(v, k) { groups.update( grouper.call(context, v, k, iterable), 0, function(a ) {return a + 1} ); }); return groups.asImmutable(); } function groupByFactory(iterable, grouper, context) { var isKeyedIter = isKeyed(iterable); var groups = (isOrdered(iterable) ? OrderedMap() : Map()).asMutable(); iterable.__iterate(function(v, k) { groups.update( grouper.call(context, v, k, iterable), function(a ) {return (a = a || [], a.push(isKeyedIter ? [k, v] : v), a)} ); }); var coerce = iterableClass(iterable); return groups.map(function(arr ) {return reify(iterable, coerce(arr))}); } function sliceFactory(iterable, begin, end, useKeys) { var originalSize = iterable.size; // Sanitize begin & end using this shorthand for ToInt32(argument) // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 if (begin !== undefined) { begin = begin | 0; } if (end !== undefined) { if (end === Infinity) { end = originalSize; } else { end = end | 0; } } if (wholeSlice(begin, end, originalSize)) { return iterable; } var resolvedBegin = resolveBegin(begin, originalSize); var resolvedEnd = resolveEnd(end, originalSize); // begin or end will be NaN if they were provided as negative numbers and // this iterable's size is unknown. In that case, cache first so there is // a known size and these do not resolve to NaN. if (resolvedBegin !== resolvedBegin || resolvedEnd !== resolvedEnd) { return sliceFactory(iterable.toSeq().cacheResult(), begin, end, useKeys); } // Note: resolvedEnd is undefined when the original sequence's length is // unknown and this slice did not supply an end and should contain all // elements after resolvedBegin. // In that case, resolvedSize will be NaN and sliceSize will remain undefined. var resolvedSize = resolvedEnd - resolvedBegin; var sliceSize; if (resolvedSize === resolvedSize) { sliceSize = resolvedSize < 0 ? 0 : resolvedSize; } var sliceSeq = makeSequence(iterable); // If iterable.size is undefined, the size of the realized sliceSeq is // unknown at this point unless the number of items to slice is 0 sliceSeq.size = sliceSize === 0 ? sliceSize : iterable.size && sliceSize || undefined; if (!useKeys && isSeq(iterable) && sliceSize >= 0) { sliceSeq.get = function (index, notSetValue) { index = wrapIndex(this, index); return index >= 0 && index < sliceSize ? iterable.get(index + resolvedBegin, notSetValue) : notSetValue; } } sliceSeq.__iterateUncached = function(fn, reverse) {var this$0 = this; if (sliceSize === 0) { return 0; } if (reverse) { return this.cacheResult().__iterate(fn, reverse); } var skipped = 0; var isSkipping = true; var iterations = 0; iterable.__iterate(function(v, k) { if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) { iterations++; return fn(v, useKeys ? k : iterations - 1, this$0) !== false && iterations !== sliceSize; } }); return iterations; }; sliceSeq.__iteratorUncached = function(type, reverse) { if (sliceSize !== 0 && reverse) { return this.cacheResult().__iterator(type, reverse); } // Don't bother instantiating parent iterator if taking 0. var iterator = sliceSize !== 0 && iterable.__iterator(type, reverse); var skipped = 0; var iterations = 0; return new Iterator(function() { while (skipped++ < resolvedBegin) { iterator.next(); } if (++iterations > sliceSize) { return iteratorDone(); } var step = iterator.next(); if (useKeys || type === ITERATE_VALUES) { return step; } else if (type === ITERATE_KEYS) { return iteratorValue(type, iterations - 1, undefined, step); } else { return iteratorValue(type, iterations - 1, step.value[1], step); } }); } return sliceSeq; } function takeWhileFactory(iterable, predicate, context) { var takeSequence = makeSequence(iterable); takeSequence.__iterateUncached = function(fn, reverse) {var this$0 = this; if (reverse) { return this.cacheResult().__iterate(fn, reverse); } var iterations = 0; iterable.__iterate(function(v, k, c) {return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$0)} ); return iterations; }; takeSequence.__iteratorUncached = function(type, reverse) {var this$0 = this; if (reverse) { return this.cacheResult().__iterator(type, reverse); } var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse); var iterating = true; return new Iterator(function() { if (!iterating) { return iteratorDone(); } var step = iterator.next(); if (step.done) { return step; } var entry = step.value; var k = entry[0]; var v = entry[1]; if (!predicate.call(context, v, k, this$0)) { iterating = false; return iteratorDone(); } return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); }); }; return takeSequence; } function skipWhileFactory(iterable, predicate, context, useKeys) { var skipSequence = makeSequence(iterable); skipSequence.__iterateUncached = function (fn, reverse) {var this$0 = this; if (reverse) { return this.cacheResult().__iterate(fn, reverse); } var isSkipping = true; var iterations = 0; iterable.__iterate(function(v, k, c) { if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) { iterations++; return fn(v, useKeys ? k : iterations - 1, this$0); } }); return iterations; }; skipSequence.__iteratorUncached = function(type, reverse) {var this$0 = this; if (reverse) { return this.cacheResult().__iterator(type, reverse); } var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse); var skipping = true; var iterations = 0; return new Iterator(function() { var step, k, v; do { step = iterator.next(); if (step.done) { if (useKeys || type === ITERATE_VALUES) { return step; } else if (type === ITERATE_KEYS) { return iteratorValue(type, iterations++, undefined, step); } else { return iteratorValue(type, iterations++, step.value[1], step); } } var entry = step.value; k = entry[0]; v = entry[1]; skipping && (skipping = predicate.call(context, v, k, this$0)); } while (skipping); return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); }); }; return skipSequence; } function concatFactory(iterable, values) { var isKeyedIterable = isKeyed(iterable); var iters = [iterable].concat(values).map(function(v ) { if (!isIterable(v)) { v = isKeyedIterable ? keyedSeqFromValue(v) : indexedSeqFromValue(Array.isArray(v) ? v : [v]); } else if (isKeyedIterable) { v = KeyedIterable(v); } return v; }).filter(function(v ) {return v.size !== 0}); if (iters.length === 0) { return iterable; } if (iters.length === 1) { var singleton = iters[0]; if (singleton === iterable || isKeyedIterable && isKeyed(singleton) || isIndexed(iterable) && isIndexed(singleton)) { return singleton; } } var concatSeq = new ArraySeq(iters); if (isKeyedIterable) { concatSeq = concatSeq.toKeyedSeq(); } else if (!isIndexed(iterable)) { concatSeq = concatSeq.toSetSeq(); } concatSeq = concatSeq.flatten(true); concatSeq.size = iters.reduce( function(sum, seq) { if (sum !== undefined) { var size = seq.size; if (size !== undefined) { return sum + size; } } }, 0 ); return concatSeq; } function flattenFactory(iterable, depth, useKeys) { var flatSequence = makeSequence(iterable); flatSequence.__iterateUncached = function(fn, reverse) { var iterations = 0; var stopped = false; function flatDeep(iter, currentDepth) {var this$0 = this; iter.__iterate(function(v, k) { if ((!depth || currentDepth < depth) && isIterable(v)) { flatDeep(v, currentDepth + 1); } else if (fn(v, useKeys ? k : iterations++, this$0) === false) { stopped = true; } return !stopped; }, reverse); } flatDeep(iterable, 0); return iterations; } flatSequence.__iteratorUncached = function(type, reverse) { var iterator = iterable.__iterator(type, reverse); var stack = []; var iterations = 0; return new Iterator(function() { while (iterator) { var step = iterator.next(); if (step.done !== false) { iterator = stack.pop(); continue; } var v = step.value; if (type === ITERATE_ENTRIES) { v = v[1]; } if ((!depth || stack.length < depth) && isIterable(v)) { stack.push(iterator); iterator = v.__iterator(type, reverse); } else { return useKeys ? step : iteratorValue(type, iterations++, v, step); } } return iteratorDone(); }); } return flatSequence; } function flatMapFactory(iterable, mapper, context) { var coerce = iterableClass(iterable); return iterable.toSeq().map( function(v, k) {return coerce(mapper.call(context, v, k, iterable))} ).flatten(true); } function interposeFactory(iterable, separator) { var interposedSequence = makeSequence(iterable); interposedSequence.size = iterable.size && iterable.size * 2 -1; interposedSequence.__iterateUncached = function(fn, reverse) {var this$0 = this; var iterations = 0; iterable.__iterate(function(v, k) {return (!iterations || fn(separator, iterations++, this$0) !== false) && fn(v, iterations++, this$0) !== false}, reverse ); return iterations; }; interposedSequence.__iteratorUncached = function(type, reverse) { var iterator = iterable.__iterator(ITERATE_VALUES, reverse); var iterations = 0; var step; return new Iterator(function() { if (!step || iterations % 2) { step = iterator.next(); if (step.done) { return step; } } return iterations % 2 ? iteratorValue(type, iterations++, separator) : iteratorValue(type, iterations++, step.value, step); }); }; return interposedSequence; } function sortFactory(iterable, comparator, mapper) { if (!comparator) { comparator = defaultComparator; } var isKeyedIterable = isKeyed(iterable); var index = 0; var entries = iterable.toSeq().map( function(v, k) {return [k, v, index++, mapper ? mapper(v, k, iterable) : v]} ).toArray(); entries.sort(function(a, b) {return comparator(a[3], b[3]) || a[2] - b[2]}).forEach( isKeyedIterable ? function(v, i) { entries[i].length = 2; } : function(v, i) { entries[i] = v[1]; } ); return isKeyedIterable ? KeyedSeq(entries) : isIndexed(iterable) ? IndexedSeq(entries) : SetSeq(entries); } function maxFactory(iterable, comparator, mapper) { if (!comparator) { comparator = defaultComparator; } if (mapper) { var entry = iterable.toSeq() .map(function(v, k) {return [v, mapper(v, k, iterable)]}) .reduce(function(a, b) {return maxCompare(comparator, a[1], b[1]) ? b : a}); return entry && entry[0]; } else { return iterable.reduce(function(a, b) {return maxCompare(comparator, a, b) ? b : a}); } } function maxCompare(comparator, a, b) { var comp = comparator(b, a); // b is considered the new max if the comparator declares them equal, but // they are not equal and b is in fact a nullish value. return (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) || comp > 0; } function zipWithFactory(keyIter, zipper, iters) { var zipSequence = makeSequence(keyIter); zipSequence.size = new ArraySeq(iters).map(function(i ) {return i.size}).min(); // Note: this a generic base implementation of __iterate in terms of // __iterator which may be more generically useful in the future. zipSequence.__iterate = function(fn, reverse) { /* generic: var iterator = this.__iterator(ITERATE_ENTRIES, reverse); var step; var iterations = 0; while (!(step = iterator.next()).done) { iterations++; if (fn(step.value[1], step.value[0], this) === false) { break; } } return iterations; */ // indexed: var iterator = this.__iterator(ITERATE_VALUES, reverse); var step; var iterations = 0; while (!(step = iterator.next()).done) { if (fn(step.value, iterations++, this) === false) { break; } } return iterations; }; zipSequence.__iteratorUncached = function(type, reverse) { var iterators = iters.map(function(i ) {return (i = Iterable(i), getIterator(reverse ? i.reverse() : i))} ); var iterations = 0; var isDone = false; return new Iterator(function() { var steps; if (!isDone) { steps = iterators.map(function(i ) {return i.next()}); isDone = steps.some(function(s ) {return s.done}); } if (isDone) { return iteratorDone(); } return iteratorValue( type, iterations++, zipper.apply(null, steps.map(function(s ) {return s.value})) ); }); }; return zipSequence } // #pragma Helper Functions function reify(iter, seq) { return isSeq(iter) ? seq : iter.constructor(seq); } function validateEntry(entry) { if (entry !== Object(entry)) { throw new TypeError('Expected [K, V] tuple: ' + entry); } } function resolveSize(iter) { assertNotInfinite(iter.size); return ensureSize(iter); } function iterableClass(iterable) { return isKeyed(iterable) ? KeyedIterable : isIndexed(iterable) ? IndexedIterable : SetIterable; } function makeSequence(iterable) { return Object.create( ( isKeyed(iterable) ? KeyedSeq : isIndexed(iterable) ? IndexedSeq : SetSeq ).prototype ); } function cacheResultThrough() { if (this._iter.cacheResult) { this._iter.cacheResult(); this.size = this._iter.size; return this; } else { return Seq.prototype.cacheResult.call(this); } } function defaultComparator(a, b) { return a > b ? 1 : a < b ? -1 : 0; } function forceIterator(keyPath) { var iter = getIterator(keyPath); if (!iter) { // Array might not be iterable in this environment, so we need a fallback // to our wrapped type. if (!isArrayLike(keyPath)) { throw new TypeError('Expected iterable or array-like: ' + keyPath); } iter = getIterator(Iterable(keyPath)); } return iter; } createClass(Record, KeyedCollection); function Record(defaultValues, name) { var hasInitialized; var RecordType = function Record(values) { if (values instanceof RecordType) { return values; } if (!(this instanceof RecordType)) { return new RecordType(values); } if (!hasInitialized) { hasInitialized = true; var keys = Object.keys(defaultValues); setProps(RecordTypePrototype, keys); RecordTypePrototype.size = keys.length; RecordTypePrototype._name = name; RecordTypePrototype._keys = keys; RecordTypePrototype._defaultValues = defaultValues; } this._map = Map(values); }; var RecordTypePrototype = RecordType.prototype = Object.create(RecordPrototype); RecordTypePrototype.constructor = RecordType; return RecordType; } Record.prototype.toString = function() { return this.__toString(recordName(this) + ' {', '}'); }; // @pragma Access Record.prototype.has = function(k) { return this._defaultValues.hasOwnProperty(k); }; Record.prototype.get = function(k, notSetValue) { if (!this.has(k)) { return notSetValue; } var defaultVal = this._defaultValues[k]; return this._map ? this._map.get(k, defaultVal) : defaultVal; }; // @pragma Modification Record.prototype.clear = function() { if (this.__ownerID) { this._map && this._map.clear(); return this; } var RecordType = this.constructor; return RecordType._empty || (RecordType._empty = makeRecord(this, emptyMap())); }; Record.prototype.set = function(k, v) { if (!this.has(k)) { throw new Error('Cannot set unknown key "' + k + '" on ' + recordName(this)); } if (this._map && !this._map.has(k)) { var defaultVal = this._defaultValues[k]; if (v === defaultVal) { return this; } } var newMap = this._map && this._map.set(k, v); if (this.__ownerID || newMap === this._map) { return this; } return makeRecord(this, newMap); }; Record.prototype.remove = function(k) { if (!this.has(k)) { return this; } var newMap = this._map && this._map.remove(k); if (this.__ownerID || newMap === this._map) { return this; } return makeRecord(this, newMap); }; Record.prototype.wasAltered = function() { return this._map.wasAltered(); }; Record.prototype.__iterator = function(type, reverse) {var this$0 = this; return KeyedIterable(this._defaultValues).map(function(_, k) {return this$0.get(k)}).__iterator(type, reverse); }; Record.prototype.__iterate = function(fn, reverse) {var this$0 = this; return KeyedIterable(this._defaultValues).map(function(_, k) {return this$0.get(k)}).__iterate(fn, reverse); }; Record.prototype.__ensureOwner = function(ownerID) { if (ownerID === this.__ownerID) { return this; } var newMap = this._map && this._map.__ensureOwner(ownerID); if (!ownerID) { this.__ownerID = ownerID; this._map = newMap; return this; } return makeRecord(this, newMap, ownerID); }; var RecordPrototype = Record.prototype; RecordPrototype[DELETE] = RecordPrototype.remove; RecordPrototype.deleteIn = RecordPrototype.removeIn = MapPrototype.removeIn; RecordPrototype.merge = MapPrototype.merge; RecordPrototype.mergeWith = MapPrototype.mergeWith; RecordPrototype.mergeIn = MapPrototype.mergeIn; RecordPrototype.mergeDeep = MapPrototype.mergeDeep; RecordPrototype.mergeDeepWith = MapPrototype.mergeDeepWith; RecordPrototype.mergeDeepIn = MapPrototype.mergeDeepIn; RecordPrototype.setIn = MapPrototype.setIn; RecordPrototype.update = MapPrototype.update; RecordPrototype.updateIn = MapPrototype.updateIn; RecordPrototype.withMutations = MapPrototype.withMutations; RecordPrototype.asMutable = MapPrototype.asMutable; RecordPrototype.asImmutable = MapPrototype.asImmutable; function makeRecord(likeRecord, map, ownerID) { var record = Object.create(Object.getPrototypeOf(likeRecord)); record._map = map; record.__ownerID = ownerID; return record; } function recordName(record) { return record._name || record.constructor.name || 'Record'; } function setProps(prototype, names) { try { names.forEach(setProp.bind(undefined, prototype)); } catch (error) { // Object.defineProperty failed. Probably IE8. } } function setProp(prototype, name) { Object.defineProperty(prototype, name, { get: function() { return this.get(name); }, set: function(value) { invariant(this.__ownerID, 'Cannot set on an immutable record.'); this.set(name, value); } }); } createClass(Set, SetCollection); // @pragma Construction function Set(value) { return value === null || value === undefined ? emptySet() : isSet(value) && !isOrdered(value) ? value : emptySet().withMutations(function(set ) { var iter = SetIterable(value); assertNotInfinite(iter.size); iter.forEach(function(v ) {return set.add(v)}); }); } Set.of = function(/*...values*/) { return this(arguments); }; Set.fromKeys = function(value) { return this(KeyedIterable(value).keySeq()); }; Set.prototype.toString = function() { return this.__toString('Set {', '}'); }; // @pragma Access Set.prototype.has = function(value) { return this._map.has(value); }; // @pragma Modification Set.prototype.add = function(value) { return updateSet(this, this._map.set(value, true)); }; Set.prototype.remove = function(value) { return updateSet(this, this._map.remove(value)); }; Set.prototype.clear = function() { return updateSet(this, this._map.clear()); }; // @pragma Composition Set.prototype.union = function() {var iters = SLICE$0.call(arguments, 0); iters = iters.filter(function(x ) {return x.size !== 0}); if (iters.length === 0) { return this; } if (this.size === 0 && !this.__ownerID && iters.length === 1) { return this.constructor(iters[0]); } return this.withMutations(function(set ) { for (var ii = 0; ii < iters.length; ii++) { SetIterable(iters[ii]).forEach(function(value ) {return set.add(value)}); } }); }; Set.prototype.intersect = function() {var iters = SLICE$0.call(arguments, 0); if (iters.length === 0) { return this; } iters = iters.map(function(iter ) {return SetIterable(iter)}); var originalSet = this; return this.withMutations(function(set ) { originalSet.forEach(function(value ) { if (!iters.every(function(iter ) {return iter.includes(value)})) { set.remove(value); } }); }); }; Set.prototype.subtract = function() {var iters = SLICE$0.call(arguments, 0); if (iters.length === 0) { return this; } iters = iters.map(function(iter ) {return SetIterable(iter)}); var originalSet = this; return this.withMutations(function(set ) { originalSet.forEach(function(value ) { if (iters.some(function(iter ) {return iter.includes(value)})) { set.remove(value); } }); }); }; Set.prototype.merge = function() { return this.union.apply(this, arguments); }; Set.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1); return this.union.apply(this, iters); }; Set.prototype.sort = function(comparator) { // Late binding return OrderedSet(sortFactory(this, comparator)); }; Set.prototype.sortBy = function(mapper, comparator) { // Late binding return OrderedSet(sortFactory(this, comparator, mapper)); }; Set.prototype.wasAltered = function() { return this._map.wasAltered(); }; Set.prototype.__iterate = function(fn, reverse) {var this$0 = this; return this._map.__iterate(function(_, k) {return fn(k, k, this$0)}, reverse); }; Set.prototype.__iterator = function(type, reverse) { return this._map.map(function(_, k) {return k}).__iterator(type, reverse); }; Set.prototype.__ensureOwner = function(ownerID) { if (ownerID === this.__ownerID) { return this; } var newMap = this._map.__ensureOwner(ownerID); if (!ownerID) { this.__ownerID = ownerID; this._map = newMap; return this; } return this.__make(newMap, ownerID); }; function isSet(maybeSet) { return !!(maybeSet && maybeSet[IS_SET_SENTINEL]); } Set.isSet = isSet; var IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@'; var SetPrototype = Set.prototype; SetPrototype[IS_SET_SENTINEL] = true; SetPrototype[DELETE] = SetPrototype.remove; SetPrototype.mergeDeep = SetPrototype.merge; SetPrototype.mergeDeepWith = SetPrototype.mergeWith; SetPrototype.withMutations = MapPrototype.withMutations; SetPrototype.asMutable = MapPrototype.asMutable; SetPrototype.asImmutable = MapPrototype.asImmutable; SetPrototype.__empty = emptySet; SetPrototype.__make = makeSet; function updateSet(set, newMap) { if (set.__ownerID) { set.size = newMap.size; set._map = newMap; return set; } return newMap === set._map ? set : newMap.size === 0 ? set.__empty() : set.__make(newMap); } function makeSet(map, ownerID) { var set = Object.create(SetPrototype); set.size = map ? map.size : 0; set._map = map; set.__ownerID = ownerID; return set; } var EMPTY_SET; function emptySet() { return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap())); } createClass(OrderedSet, Set); // @pragma Construction function OrderedSet(value) { return value === null || value === undefined ? emptyOrderedSet() : isOrderedSet(value) ? value : emptyOrderedSet().withMutations(function(set ) { var iter = SetIterable(value); assertNotInfinite(iter.size); iter.forEach(function(v ) {return set.add(v)}); }); } OrderedSet.of = function(/*...values*/) { return this(arguments); }; OrderedSet.fromKeys = function(value) { return this(KeyedIterable(value).keySeq()); }; OrderedSet.prototype.toString = function() { return this.__toString('OrderedSet {', '}'); }; function isOrderedSet(maybeOrderedSet) { return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet); } OrderedSet.isOrderedSet = isOrderedSet; var OrderedSetPrototype = OrderedSet.prototype; OrderedSetPrototype[IS_ORDERED_SENTINEL] = true; OrderedSetPrototype.__empty = emptyOrderedSet; OrderedSetPrototype.__make = makeOrderedSet; function makeOrderedSet(map, ownerID) { var set = Object.create(OrderedSetPrototype); set.size = map ? map.size : 0; set._map = map; set.__ownerID = ownerID; return set; } var EMPTY_ORDERED_SET; function emptyOrderedSet() { return EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap())); } createClass(Stack, IndexedCollection); // @pragma Construction function Stack(value) { return value === null || value === undefined ? emptyStack() : isStack(value) ? value : emptyStack().unshiftAll(value); } Stack.of = function(/*...values*/) { return this(arguments); }; Stack.prototype.toString = function() { return this.__toString('Stack [', ']'); }; // @pragma Access Stack.prototype.get = function(index, notSetValue) { var head = this._head; index = wrapIndex(this, index); while (head && index--) { head = head.next; } return head ? head.value : notSetValue; }; Stack.prototype.peek = function() { return this._head && this._head.value; }; // @pragma Modification Stack.prototype.push = function(/*...values*/) { if (arguments.length === 0) { return this; } var newSize = this.size + arguments.length; var head = this._head; for (var ii = arguments.length - 1; ii >= 0; ii--) { head = { value: arguments[ii], next: head }; } if (this.__ownerID) { this.size = newSize; this._head = head; this.__hash = undefined; this.__altered = true; return this; } return makeStack(newSize, head); }; Stack.prototype.pushAll = function(iter) { iter = IndexedIterable(iter); if (iter.size === 0) { return this; } assertNotInfinite(iter.size); var newSize = this.size; var head = this._head; iter.reverse().forEach(function(value ) { newSize++; head = { value: value, next: head }; }); if (this.__ownerID) { this.size = newSize; this._head = head; this.__hash = undefined; this.__altered = true; return this; } return makeStack(newSize, head); }; Stack.prototype.pop = function() { return this.slice(1); }; Stack.prototype.unshift = function(/*...values*/) { return this.push.apply(this, arguments); }; Stack.prototype.unshiftAll = function(iter) { return this.pushAll(iter); }; Stack.prototype.shift = function() { return this.pop.apply(this, arguments); }; Stack.prototype.clear = function() { if (this.size === 0) { return this; } if (this.__ownerID) { this.size = 0; this._head = undefined; this.__hash = undefined; this.__altered = true; return this; } return emptyStack(); }; Stack.prototype.slice = function(begin, end) { if (wholeSlice(begin, end, this.size)) { return this; } var resolvedBegin = resolveBegin(begin, this.size); var resolvedEnd = resolveEnd(end, this.size); if (resolvedEnd !== this.size) { // super.slice(begin, end); return IndexedCollection.prototype.slice.call(this, begin, end); } var newSize = this.size - resolvedBegin; var head = this._head; while (resolvedBegin--) { head = head.next; } if (this.__ownerID) { this.size = newSize; this._head = head; this.__hash = undefined; this.__altered = true; return this; } return makeStack(newSize, head); }; // @pragma Mutability Stack.prototype.__ensureOwner = function(ownerID) { if (ownerID === this.__ownerID) { return this; } if (!ownerID) { this.__ownerID = ownerID; this.__altered = false; return this; } return makeStack(this.size, this._head, ownerID, this.__hash); }; // @pragma Iteration Stack.prototype.__iterate = function(fn, reverse) { if (reverse) { return this.reverse().__iterate(fn); } var iterations = 0; var node = this._head; while (node) { if (fn(node.value, iterations++, this) === false) { break; } node = node.next; } return iterations; }; Stack.prototype.__iterator = function(type, reverse) { if (reverse) { return this.reverse().__iterator(type); } var iterations = 0; var node = this._head; return new Iterator(function() { if (node) { var value = node.value; node = node.next; return iteratorValue(type, iterations++, value); } return iteratorDone(); }); }; function isStack(maybeStack) { return !!(maybeStack && maybeStack[IS_STACK_SENTINEL]); } Stack.isStack = isStack; var IS_STACK_SENTINEL = '@@__IMMUTABLE_STACK__@@'; var StackPrototype = Stack.prototype; StackPrototype[IS_STACK_SENTINEL] = true; StackPrototype.withMutations = MapPrototype.withMutations; StackPrototype.asMutable = MapPrototype.asMutable; StackPrototype.asImmutable = MapPrototype.asImmutable; StackPrototype.wasAltered = MapPrototype.wasAltered; function makeStack(size, head, ownerID, hash) { var map = Object.create(StackPrototype); map.size = size; map._head = head; map.__ownerID = ownerID; map.__hash = hash; map.__altered = false; return map; } var EMPTY_STACK; function emptyStack() { return EMPTY_STACK || (EMPTY_STACK = makeStack(0)); } /** * Contributes additional methods to a constructor */ function mixin(ctor, methods) { var keyCopier = function(key ) { ctor.prototype[key] = methods[key]; }; Object.keys(methods).forEach(keyCopier); Object.getOwnPropertySymbols && Object.getOwnPropertySymbols(methods).forEach(keyCopier); return ctor; } Iterable.Iterator = Iterator; mixin(Iterable, { // ### Conversion to other types toArray: function() { assertNotInfinite(this.size); var array = new Array(this.size || 0); this.valueSeq().__iterate(function(v, i) { array[i] = v; }); return array; }, toIndexedSeq: function() { return new ToIndexedSequence(this); }, toJS: function() { return this.toSeq().map( function(value ) {return value && typeof value.toJS === 'function' ? value.toJS() : value} ).__toJS(); }, toJSON: function() { return this.toSeq().map( function(value ) {return value && typeof value.toJSON === 'function' ? value.toJSON() : value} ).__toJS(); }, toKeyedSeq: function() { return new ToKeyedSequence(this, true); }, toMap: function() { // Use Late Binding here to solve the circular dependency. return Map(this.toKeyedSeq()); }, toObject: function() { assertNotInfinite(this.size); var object = {}; this.__iterate(function(v, k) { object[k] = v; }); return object; }, toOrderedMap: function() { // Use Late Binding here to solve the circular dependency. return OrderedMap(this.toKeyedSeq()); }, toOrderedSet: function() { // Use Late Binding here to solve the circular dependency. return OrderedSet(isKeyed(this) ? this.valueSeq() : this); }, toSet: function() { // Use Late Binding here to solve the circular dependency. return Set(isKeyed(this) ? this.valueSeq() : this); }, toSetSeq: function() { return new ToSetSequence(this); }, toSeq: function() { return isIndexed(this) ? this.toIndexedSeq() : isKeyed(this) ? this.toKeyedSeq() : this.toSetSeq(); }, toStack: function() { // Use Late Binding here to solve the circular dependency. return Stack(isKeyed(this) ? this.valueSeq() : this); }, toList: function() { // Use Late Binding here to solve the circular dependency. return List(isKeyed(this) ? this.valueSeq() : this); }, // ### Common JavaScript methods and properties toString: function() { return '[Iterable]'; }, __toString: function(head, tail) { if (this.size === 0) { return head + tail; } return head + ' ' + this.toSeq().map(this.__toStringMapper).join(', ') + ' ' + tail; }, // ### ES6 Collection methods (ES6 Array and Map) concat: function() {var values = SLICE$0.call(arguments, 0); return reify(this, concatFactory(this, values)); }, includes: function(searchValue) { return this.some(function(value ) {return is(value, searchValue)}); }, entries: function() { return this.__iterator(ITERATE_ENTRIES); }, every: function(predicate, context) { assertNotInfinite(this.size); var returnValue = true; this.__iterate(function(v, k, c) { if (!predicate.call(context, v, k, c)) { returnValue = false; return false; } }); return returnValue; }, filter: function(predicate, context) { return reify(this, filterFactory(this, predicate, context, true)); }, find: function(predicate, context, notSetValue) { var entry = this.findEntry(predicate, context); return entry ? entry[1] : notSetValue; }, forEach: function(sideEffect, context) { assertNotInfinite(this.size); return this.__iterate(context ? sideEffect.bind(context) : sideEffect); }, join: function(separator) { assertNotInfinite(this.size); separator = separator !== undefined ? '' + separator : ','; var joined = ''; var isFirst = true; this.__iterate(function(v ) { isFirst ? (isFirst = false) : (joined += separator); joined += v !== null && v !== undefined ? v.toString() : ''; }); return joined; }, keys: function() { return this.__iterator(ITERATE_KEYS); }, map: function(mapper, context) { return reify(this, mapFactory(this, mapper, context)); }, reduce: function(reducer, initialReduction, context) { assertNotInfinite(this.size); var reduction; var useFirst; if (arguments.length < 2) { useFirst = true; } else { reduction = initialReduction; } this.__iterate(function(v, k, c) { if (useFirst) { useFirst = false; reduction = v; } else { reduction = reducer.call(context, reduction, v, k, c); } }); return reduction; }, reduceRight: function(reducer, initialReduction, context) { var reversed = this.toKeyedSeq().reverse(); return reversed.reduce.apply(reversed, arguments); }, reverse: function() { return reify(this, reverseFactory(this, true)); }, slice: function(begin, end) { return reify(this, sliceFactory(this, begin, end, true)); }, some: function(predicate, context) { return !this.every(not(predicate), context); }, sort: function(comparator) { return reify(this, sortFactory(this, comparator)); }, values: function() { return this.__iterator(ITERATE_VALUES); }, // ### More sequential methods butLast: function() { return this.slice(0, -1); }, isEmpty: function() { return this.size !== undefined ? this.size === 0 : !this.some(function() {return true}); }, count: function(predicate, context) { return ensureSize( predicate ? this.toSeq().filter(predicate, context) : this ); }, countBy: function(grouper, context) { return countByFactory(this, grouper, context); }, equals: function(other) { return deepEqual(this, other); }, entrySeq: function() { var iterable = this; if (iterable._cache) { // We cache as an entries array, so we can just return the cache! return new ArraySeq(iterable._cache); } var entriesSequence = iterable.toSeq().map(entryMapper).toIndexedSeq(); entriesSequence.fromEntrySeq = function() {return iterable.toSeq()}; return entriesSequence; }, filterNot: function(predicate, context) { return this.filter(not(predicate), context); }, findEntry: function(predicate, context, notSetValue) { var found = notSetValue; this.__iterate(function(v, k, c) { if (predicate.call(context, v, k, c)) { found = [k, v]; return false; } }); return found; }, findKey: function(predicate, context) { var entry = this.findEntry(predicate, context); return entry && entry[0]; }, findLast: function(predicate, context, notSetValue) { return this.toKeyedSeq().reverse().find(predicate, context, notSetValue); }, findLastEntry: function(predicate, context, notSetValue) { return this.toKeyedSeq().reverse().findEntry(predicate, context, notSetValue); }, findLastKey: function(predicate, context) { return this.toKeyedSeq().reverse().findKey(predicate, context); }, first: function() { return this.find(returnTrue); }, flatMap: function(mapper, context) { return reify(this, flatMapFactory(this, mapper, context)); }, flatten: function(depth) { return reify(this, flattenFactory(this, depth, true)); }, fromEntrySeq: function() { return new FromEntriesSequence(this); }, get: function(searchKey, notSetValue) { return this.find(function(_, key) {return is(key, searchKey)}, undefined, notSetValue); }, getIn: function(searchKeyPath, notSetValue) { var nested = this; // Note: in an ES6 environment, we would prefer: // for (var key of searchKeyPath) { var iter = forceIterator(searchKeyPath); var step; while (!(step = iter.next()).done) { var key = step.value; nested = nested && nested.get ? nested.get(key, NOT_SET) : NOT_SET; if (nested === NOT_SET) { return notSetValue; } } return nested; }, groupBy: function(grouper, context) { return groupByFactory(this, grouper, context); }, has: function(searchKey) { return this.get(searchKey, NOT_SET) !== NOT_SET; }, hasIn: function(searchKeyPath) { return this.getIn(searchKeyPath, NOT_SET) !== NOT_SET; }, isSubset: function(iter) { iter = typeof iter.includes === 'function' ? iter : Iterable(iter); return this.every(function(value ) {return iter.includes(value)}); }, isSuperset: function(iter) { iter = typeof iter.isSubset === 'function' ? iter : Iterable(iter); return iter.isSubset(this); }, keyOf: function(searchValue) { return this.findKey(function(value ) {return is(value, searchValue)}); }, keySeq: function() { return this.toSeq().map(keyMapper).toIndexedSeq(); }, last: function() { return this.toSeq().reverse().first(); }, lastKeyOf: function(searchValue) { return this.toKeyedSeq().reverse().keyOf(searchValue); }, max: function(comparator) { return maxFactory(this, comparator); }, maxBy: function(mapper, comparator) { return maxFactory(this, comparator, mapper); }, min: function(comparator) { return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator); }, minBy: function(mapper, comparator) { return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator, mapper); }, rest: function() { return this.slice(1); }, skip: function(amount) { return this.slice(Math.max(0, amount)); }, skipLast: function(amount) { return reify(this, this.toSeq().reverse().skip(amount).reverse()); }, skipWhile: function(predicate, context) { return reify(this, skipWhileFactory(this, predicate, context, true)); }, skipUntil: function(predicate, context) { return this.skipWhile(not(predicate), context); }, sortBy: function(mapper, comparator) { return reify(this, sortFactory(this, comparator, mapper)); }, take: function(amount) { return this.slice(0, Math.max(0, amount)); }, takeLast: function(amount) { return reify(this, this.toSeq().reverse().take(amount).reverse()); }, takeWhile: function(predicate, context) { return reify(this, takeWhileFactory(this, predicate, context)); }, takeUntil: function(predicate, context) { return this.takeWhile(not(predicate), context); }, valueSeq: function() { return this.toIndexedSeq(); }, // ### Hashable Object hashCode: function() { return this.__hash || (this.__hash = hashIterable(this)); } // ### Internal // abstract __iterate(fn, reverse) // abstract __iterator(type, reverse) }); // var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@'; // var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@'; // var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@'; // var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@'; var IterablePrototype = Iterable.prototype; IterablePrototype[IS_ITERABLE_SENTINEL] = true; IterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.values; IterablePrototype.__toJS = IterablePrototype.toArray; IterablePrototype.__toStringMapper = quoteString; IterablePrototype.inspect = IterablePrototype.toSource = function() { return this.toString(); }; IterablePrototype.chain = IterablePrototype.flatMap; IterablePrototype.contains = IterablePrototype.includes; mixin(KeyedIterable, { // ### More sequential methods flip: function() { return reify(this, flipFactory(this)); }, mapEntries: function(mapper, context) {var this$0 = this; var iterations = 0; return reify(this, this.toSeq().map( function(v, k) {return mapper.call(context, [k, v], iterations++, this$0)} ).fromEntrySeq() ); }, mapKeys: function(mapper, context) {var this$0 = this; return reify(this, this.toSeq().flip().map( function(k, v) {return mapper.call(context, k, v, this$0)} ).flip() ); } }); var KeyedIterablePrototype = KeyedIterable.prototype; KeyedIterablePrototype[IS_KEYED_SENTINEL] = true; KeyedIterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.entries; KeyedIterablePrototype.__toJS = IterablePrototype.toObject; KeyedIterablePrototype.__toStringMapper = function(v, k) {return JSON.stringify(k) + ': ' + quoteString(v)}; mixin(IndexedIterable, { // ### Conversion to other types toKeyedSeq: function() { return new ToKeyedSequence(this, false); }, // ### ES6 Collection methods (ES6 Array and Map) filter: function(predicate, context) { return reify(this, filterFactory(this, predicate, context, false)); }, findIndex: function(predicate, context) { var entry = this.findEntry(predicate, context); return entry ? entry[0] : -1; }, indexOf: function(searchValue) { var key = this.keyOf(searchValue); return key === undefined ? -1 : key; }, lastIndexOf: function(searchValue) { var key = this.lastKeyOf(searchValue); return key === undefined ? -1 : key; }, reverse: function() { return reify(this, reverseFactory(this, false)); }, slice: function(begin, end) { return reify(this, sliceFactory(this, begin, end, false)); }, splice: function(index, removeNum /*, ...values*/) { var numArgs = arguments.length; removeNum = Math.max(removeNum | 0, 0); if (numArgs === 0 || (numArgs === 2 && !removeNum)) { return this; } // If index is negative, it should resolve relative to the size of the // collection. However size may be expensive to compute if not cached, so // only call count() if the number is in fact negative. index = resolveBegin(index, index < 0 ? this.count() : this.size); var spliced = this.slice(0, index); return reify( this, numArgs === 1 ? spliced : spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum)) ); }, // ### More collection methods findLastIndex: function(predicate, context) { var entry = this.findLastEntry(predicate, context); return entry ? entry[0] : -1; }, first: function() { return this.get(0); }, flatten: function(depth) { return reify(this, flattenFactory(this, depth, false)); }, get: function(index, notSetValue) { index = wrapIndex(this, index); return (index < 0 || (this.size === Infinity || (this.size !== undefined && index > this.size))) ? notSetValue : this.find(function(_, key) {return key === index}, undefined, notSetValue); }, has: function(index) { index = wrapIndex(this, index); return index >= 0 && (this.size !== undefined ? this.size === Infinity || index < this.size : this.indexOf(index) !== -1 ); }, interpose: function(separator) { return reify(this, interposeFactory(this, separator)); }, interleave: function(/*...iterables*/) { var iterables = [this].concat(arrCopy(arguments)); var zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, iterables); var interleaved = zipped.flatten(true); if (zipped.size) { interleaved.size = zipped.size * iterables.length; } return reify(this, interleaved); }, keySeq: function() { return Range(0, this.size); }, last: function() { return this.get(-1); }, skipWhile: function(predicate, context) { return reify(this, skipWhileFactory(this, predicate, context, false)); }, zip: function(/*, ...iterables */) { var iterables = [this].concat(arrCopy(arguments)); return reify(this, zipWithFactory(this, defaultZipper, iterables)); }, zipWith: function(zipper/*, ...iterables */) { var iterables = arrCopy(arguments); iterables[0] = this; return reify(this, zipWithFactory(this, zipper, iterables)); } }); IndexedIterable.prototype[IS_INDEXED_SENTINEL] = true; IndexedIterable.prototype[IS_ORDERED_SENTINEL] = true; mixin(SetIterable, { // ### ES6 Collection methods (ES6 Array and Map) get: function(value, notSetValue) { return this.has(value) ? value : notSetValue; }, includes: function(value) { return this.has(value); }, // ### More sequential methods keySeq: function() { return this.valueSeq(); } }); SetIterable.prototype.has = IterablePrototype.includes; SetIterable.prototype.contains = SetIterable.prototype.includes; // Mixin subclasses mixin(KeyedSeq, KeyedIterable.prototype); mixin(IndexedSeq, IndexedIterable.prototype); mixin(SetSeq, SetIterable.prototype); mixin(KeyedCollection, KeyedIterable.prototype); mixin(IndexedCollection, IndexedIterable.prototype); mixin(SetCollection, SetIterable.prototype); // #pragma Helper functions function keyMapper(v, k) { return k; } function entryMapper(v, k) { return [k, v]; } function not(predicate) { return function() { return !predicate.apply(this, arguments); } } function neg(predicate) { return function() { return -predicate.apply(this, arguments); } } function quoteString(value) { return typeof value === 'string' ? JSON.stringify(value) : String(value); } function defaultZipper() { return arrCopy(arguments); } function defaultNegComparator(a, b) { return a < b ? 1 : a > b ? -1 : 0; } function hashIterable(iterable) { if (iterable.size === Infinity) { return 0; } var ordered = isOrdered(iterable); var keyed = isKeyed(iterable); var h = ordered ? 1 : 0; var size = iterable.__iterate( keyed ? ordered ? function(v, k) { h = 31 * h + hashMerge(hash(v), hash(k)) | 0; } : function(v, k) { h = h + hashMerge(hash(v), hash(k)) | 0; } : ordered ? function(v ) { h = 31 * h + hash(v) | 0; } : function(v ) { h = h + hash(v) | 0; } ); return murmurHashOfSize(size, h); } function murmurHashOfSize(size, h) { h = imul(h, 0xCC9E2D51); h = imul(h << 15 | h >>> -15, 0x1B873593); h = imul(h << 13 | h >>> -13, 5); h = (h + 0xE6546B64 | 0) ^ size; h = imul(h ^ h >>> 16, 0x85EBCA6B); h = imul(h ^ h >>> 13, 0xC2B2AE35); h = smi(h ^ h >>> 16); return h; } function hashMerge(a, b) { return a ^ b + 0x9E3779B9 + (a << 6) + (a >> 2) | 0; // int } var Immutable = { Iterable: Iterable, Seq: Seq, Collection: Collection, Map: Map, OrderedMap: OrderedMap, List: List, Stack: Stack, Set: Set, OrderedSet: OrderedSet, Record: Record, Range: Range, Repeat: Repeat, is: is, fromJS: fromJS }; return Immutable; })); drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/immutable.min.js000066400000000000000000001571101416705305200240060ustar00rootroot00000000000000/** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Immutable=e()}(this,function(){"use strict";function t(t,e){e&&(t.prototype=Object.create(e.prototype)),t.prototype.constructor=t}function e(t){return o(t)?t:O(t)}function r(t){return u(t)?t:x(t)}function n(t){return s(t)?t:k(t)}function i(t){return o(t)&&!a(t)?t:A(t)}function o(t){return!(!t||!t[ar])}function u(t){return!(!t||!t[hr])}function s(t){return!(!t||!t[fr])}function a(t){return u(t)||s(t)}function h(t){return!(!t||!t[cr])}function f(t){return t.value=!1,t}function c(t){t&&(t.value=!0)}function _(){}function p(t,e){e=e||0;for(var r=Math.max(0,t.length-e),n=Array(r),i=0;r>i;i++)n[i]=t[i+e];return n}function v(t){return void 0===t.size&&(t.size=t.__iterate(y)),t.size}function l(t,e){if("number"!=typeof e){var r=e>>>0;if(""+r!==e||4294967295===r)return NaN;e=r}return 0>e?v(t)+e:e}function y(){return!0}function d(t,e,r){return(0===t||void 0!==r&&-r>=t)&&(void 0===e||void 0!==r&&e>=r)}function m(t,e){return w(t,e,0)}function g(t,e){return w(t,e,e)}function w(t,e,r){return void 0===t?r:0>t?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}function S(t){this.next=t}function z(t,e,r,n){var i=0===t?e:1===t?r:[e,r];return n?n.value=i:n={value:i,done:!1},n}function I(){return{value:void 0,done:!0}}function b(t){return!!M(t)}function q(t){return t&&"function"==typeof t.next}function D(t){var e=M(t);return e&&e.call(t)}function M(t){var e=t&&(zr&&t[zr]||t[Ir]);return"function"==typeof e?e:void 0}function E(t){return t&&"number"==typeof t.length}function O(t){return null===t||void 0===t?T():o(t)?t.toSeq():C(t)}function x(t){return null===t||void 0===t?T().toKeyedSeq():o(t)?u(t)?t.toSeq():t.fromEntrySeq():B(t)}function k(t){return null===t||void 0===t?T():o(t)?u(t)?t.entrySeq():t.toIndexedSeq():W(t)}function A(t){return(null===t||void 0===t?T():o(t)?u(t)?t.entrySeq():t:W(t)).toSetSeq()}function j(t){this._array=t,this.size=t.length}function R(t){var e=Object.keys(t);this._object=t,this._keys=e, this.size=e.length}function U(t){this._iterable=t,this.size=t.length||t.size}function K(t){this._iterator=t,this._iteratorCache=[]}function L(t){return!(!t||!t[qr])}function T(){return Dr||(Dr=new j([]))}function B(t){var e=Array.isArray(t)?new j(t).fromEntrySeq():q(t)?new K(t).fromEntrySeq():b(t)?new U(t).fromEntrySeq():"object"==typeof t?new R(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function W(t){var e=J(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function C(t){var e=J(t)||"object"==typeof t&&new R(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}function J(t){return E(t)?new j(t):q(t)?new K(t):b(t)?new U(t):void 0}function N(t,e,r,n){var i=t._cache;if(i){for(var o=i.length-1,u=0;o>=u;u++){var s=i[r?o-u:u];if(e(s[1],n?s[0]:u,t)===!1)return u+1}return u}return t.__iterateUncached(e,r)}function P(t,e,r,n){var i=t._cache;if(i){var o=i.length-1,u=0;return new S(function(){var t=i[r?o-u:u];return u++>o?I():z(e,n?t[0]:u-1,t[1])})}return t.__iteratorUncached(e,r)}function H(t,e){return e?V(e,t,"",{"":t}):Y(t)}function V(t,e,r,n){return Array.isArray(e)?t.call(n,r,k(e).map(function(r,n){return V(t,r,n,e)})):Q(e)?t.call(n,r,x(e).map(function(r,n){return V(t,r,n,e)})):e}function Y(t){return Array.isArray(t)?k(t).map(Y).toList():Q(t)?x(t).map(Y).toMap():t}function Q(t){return t&&(t.constructor===Object||void 0===t.constructor)}function X(t,e){if(t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1}return"function"==typeof t.equals&&"function"==typeof e.equals&&t.equals(e)?!0:!1}function F(t,e){if(t===e)return!0;if(!o(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||u(t)!==u(e)||s(t)!==s(e)||h(t)!==h(e))return!1;if(0===t.size&&0===e.size)return!0; var r=!a(t);if(h(t)){var n=t.entries();return e.every(function(t,e){var i=n.next().value;return i&&X(i[1],t)&&(r||X(i[0],e))})&&n.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var f=t;t=e,e=f}var c=!0,_=e.__iterate(function(e,n){return(r?t.has(e):i?X(e,t.get(n,yr)):X(t.get(n,yr),e))?void 0:(c=!1,!1)});return c&&t.size===_}function G(t,e){if(!(this instanceof G))return new G(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(Mr)return Mr;Mr=this}}function Z(t,e){if(!t)throw Error(e)}function $(t,e,r){if(!(this instanceof $))return new $(t,e,r);if(Z(0!==r,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),r=void 0===r?1:Math.abs(r),t>e&&(r=-r),this._start=t,this._end=e,this._step=r,this.size=Math.max(0,Math.ceil((e-t)/r-1)+1),0===this.size){if(Er)return Er;Er=this}}function tt(){throw TypeError("Abstract")}function et(){}function rt(){}function nt(){}function it(t){return t>>>1&1073741824|3221225471&t}function ot(t){if(t===!1||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(t=t.valueOf(),t===!1||null===t||void 0===t))return 0;if(t===!0)return 1;var e=typeof t;if("number"===e){if(t!==t||t===1/0)return 0;var r=0|t;for(r!==t&&(r^=4294967295*t);t>4294967295;)t/=4294967295,r^=t;return it(r)}if("string"===e)return t.length>Kr?ut(t):st(t);if("function"==typeof t.hashCode)return t.hashCode();if("object"===e)return at(t);if("function"==typeof t.toString)return st(""+t);throw Error("Value type "+e+" cannot be hashed.")}function ut(t){var e=Br[t];return void 0===e&&(e=st(t),Tr===Lr&&(Tr=0,Br={}),Tr++,Br[t]=e),e}function st(t){for(var e=0,r=0;t.length>r;r++)e=31*e+t.charCodeAt(r)|0;return it(e)}function at(t){var e;if(jr&&(e=Or.get(t),void 0!==e))return e;if(e=t[Ur],void 0!==e)return e;if(!Ar){if(e=t.propertyIsEnumerable&&t.propertyIsEnumerable[Ur],void 0!==e)return e;if(e=ht(t),void 0!==e)return e}if(e=++Rr,1073741824&Rr&&(Rr=0),jr)Or.set(t,e);else{if(void 0!==kr&&kr(t)===!1)throw Error("Non-extensible objects are not allowed as keys."); if(Ar)Object.defineProperty(t,Ur,{enumerable:!1,configurable:!1,writable:!1,value:e});else if(void 0!==t.propertyIsEnumerable&&t.propertyIsEnumerable===t.constructor.prototype.propertyIsEnumerable)t.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},t.propertyIsEnumerable[Ur]=e;else{if(void 0===t.nodeType)throw Error("Unable to set a non-enumerable property on object.");t[Ur]=e}}return e}function ht(t){if(t&&t.nodeType>0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}function ft(t){Z(t!==1/0,"Cannot perform this action with an infinite size.")}function ct(t){return null===t||void 0===t?zt():_t(t)&&!h(t)?t:zt().withMutations(function(e){var n=r(t);ft(n.size),n.forEach(function(t,r){return e.set(r,t)})})}function _t(t){return!(!t||!t[Wr])}function pt(t,e){this.ownerID=t,this.entries=e}function vt(t,e,r){this.ownerID=t,this.bitmap=e,this.nodes=r}function lt(t,e,r){this.ownerID=t,this.count=e,this.nodes=r}function yt(t,e,r){this.ownerID=t,this.keyHash=e,this.entries=r}function dt(t,e,r){this.ownerID=t,this.keyHash=e,this.entry=r}function mt(t,e,r){this._type=e,this._reverse=r,this._stack=t._root&&wt(t._root)}function gt(t,e){return z(t,e[0],e[1])}function wt(t,e){return{node:t,index:0,__prev:e}}function St(t,e,r,n){var i=Object.create(Cr);return i.size=t,i._root=e,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function zt(){return Jr||(Jr=St(0))}function It(t,e,r){var n,i;if(t._root){var o=f(dr),u=f(mr);if(n=bt(t._root,t.__ownerID,0,void 0,e,r,o,u),!u.value)return t;i=t.size+(o.value?r===yr?-1:1:0)}else{if(r===yr)return t;i=1,n=new pt(t.__ownerID,[[e,r]])}return t.__ownerID?(t.size=i,t._root=n,t.__hash=void 0,t.__altered=!0,t):n?St(i,n):zt()}function bt(t,e,r,n,i,o,u,s){return t?t.update(e,r,n,i,o,u,s):o===yr?t:(c(s),c(u),new dt(e,n,[i,o]))}function qt(t){return t.constructor===dt||t.constructor===yt}function Dt(t,e,r,n,i){if(t.keyHash===n)return new yt(e,n,[t.entry,i]);var o,u=(0===r?t.keyHash:t.keyHash>>>r)&lr,s=(0===r?n:n>>>r)&lr,a=u===s?[Dt(t,e,r+pr,n,i)]:(o=new dt(e,n,i), s>u?[t,o]:[o,t]);return new vt(e,1<o;o++){var u=e[o];i=i.update(t,0,void 0,u[0],u[1])}return i}function Et(t,e,r,n){for(var i=0,o=0,u=Array(r),s=0,a=1,h=e.length;h>s;s++,a<<=1){var f=e[s];void 0!==f&&s!==n&&(i|=a,u[o++]=f)}return new vt(t,i,u)}function Ot(t,e,r,n,i){for(var o=0,u=Array(vr),s=0;0!==r;s++,r>>>=1)u[s]=1&r?e[o++]:void 0;return u[n]=i,new lt(t,o+1,u)}function xt(t,e,n){for(var i=[],u=0;n.length>u;u++){var s=n[u],a=r(s);o(s)||(a=a.map(function(t){return H(t)})),i.push(a)}return jt(t,e,i)}function kt(t,e,r){return t&&t.mergeDeep&&o(e)?t.mergeDeep(e):X(t,e)?t:e}function At(t){return function(e,r,n){if(e&&e.mergeDeepWith&&o(r))return e.mergeDeepWith(t,r);var i=t(e,r,n);return X(e,i)?e:i}}function jt(t,e,r){return r=r.filter(function(t){return 0!==t.size}),0===r.length?t:0!==t.size||t.__ownerID||1!==r.length?t.withMutations(function(t){for(var n=e?function(r,n){t.update(n,yr,function(t){return t===yr?r:e(t,r,n)})}:function(e,r){t.set(r,e)},i=0;r.length>i;i++)r[i].forEach(n)}):t.constructor(r[0])}function Rt(t,e,r,n){var i=t===yr,o=e.next();if(o.done){var u=i?r:t,s=n(u);return s===u?t:s}Z(i||t&&t.set,"invalid keyPath");var a=o.value,h=i?yr:t.get(a,yr),f=Rt(h,e,r,n);return f===h?t:f===yr?t.remove(a):(i?zt():t).set(a,f)}function Ut(t){return t-=t>>1&1431655765,t=(858993459&t)+(t>>2&858993459),t=t+(t>>4)&252645135,t+=t>>8,t+=t>>16,127&t}function Kt(t,e,r,n){var i=n?t:p(t);return i[e]=r,i}function Lt(t,e,r,n){var i=t.length+1;if(n&&e+1===i)return t[e]=r,t;for(var o=Array(i),u=0,s=0;i>s;s++)s===e?(o[s]=r,u=-1):o[s]=t[s+u];return o}function Tt(t,e,r){var n=t.length-1;if(r&&e===n)return t.pop(),t;for(var i=Array(n),o=0,u=0;n>u;u++)u===e&&(o=1),i[u]=t[u+o];return i}function Bt(t){var e=Pt();if(null===t||void 0===t)return e;if(Wt(t))return t;var r=n(t),i=r.size;return 0===i?e:(ft(i),i>0&&vr>i?Nt(0,i,pr,null,new Ct(r.toArray())):e.withMutations(function(t){t.setSize(i),r.forEach(function(e,r){return t.set(r,e)})}))}function Wt(t){ return!(!t||!t[Vr])}function Ct(t,e){this.array=t,this.ownerID=e}function Jt(t,e){function r(t,e,r){return 0===e?n(t,r):i(t,e,r)}function n(t,r){var n=r===s?a&&a.array:t&&t.array,i=r>o?0:o-r,h=u-r;return h>vr&&(h=vr),function(){if(i===h)return Xr;var t=e?--h:i++;return n&&n[t]}}function i(t,n,i){var s,a=t&&t.array,h=i>o?0:o-i>>n,f=(u-i>>n)+1;return f>vr&&(f=vr),function(){for(;;){if(s){var t=s();if(t!==Xr)return t;s=null}if(h===f)return Xr;var o=e?--f:h++;s=r(a&&a[o],n-pr,i+(o<=t.size||0>e)return t.withMutations(function(t){0>e?Xt(t,e).set(0,r):Xt(t,0,e+1).set(e,r)});e+=t._origin;var n=t._tail,i=t._root,o=f(mr);return e>=Gt(t._capacity)?n=Vt(n,t.__ownerID,0,e,r,o):i=Vt(i,t.__ownerID,t._level,e,r,o),o.value?t.__ownerID?(t._root=i,t._tail=n,t.__hash=void 0,t.__altered=!0,t):Nt(t._origin,t._capacity,t._level,i,n):t}function Vt(t,e,r,n,i,o){var u=n>>>r&lr,s=t&&t.array.length>u;if(!s&&void 0===i)return t;var a;if(r>0){var h=t&&t.array[u],f=Vt(h,e,r-pr,n,i,o);return f===h?t:(a=Yt(t,e),a.array[u]=f,a)}return s&&t.array[u]===i?t:(c(o),a=Yt(t,e),void 0===i&&u===a.array.length-1?a.array.pop():a.array[u]=i,a)}function Yt(t,e){return e&&t&&e===t.ownerID?t:new Ct(t?t.array.slice():[],e)}function Qt(t,e){if(e>=Gt(t._capacity))return t._tail;if(1<e){for(var r=t._root,n=t._level;r&&n>0;)r=r.array[e>>>n&lr],n-=pr;return r}}function Xt(t,e,r){void 0!==e&&(e=0|e),void 0!==r&&(r=0|r);var n=t.__ownerID||new _,i=t._origin,o=t._capacity,u=i+e,s=void 0===r?o:0>r?o+r:i+r;if(u===i&&s===o)return t;if(u>=s)return t.clear();for(var a=t._level,h=t._root,f=0;0>u+f;)h=new Ct(h&&h.array.length?[void 0,h]:[],n),a+=pr,f+=1<=1<p?Qt(t,s-1):p>c?new Ct([],n):v;if(v&&p>c&&o>u&&v.array.length){h=Yt(h,n);for(var y=h,d=a;d>pr;d-=pr){var m=c>>>d&lr;y=y.array[m]=Yt(y.array[m],n)}y.array[c>>>pr&lr]=v}if(o>s&&(l=l&&l.removeAfter(n,0,s)),u>=p)u-=p,s-=p,a=pr,h=null,l=l&&l.removeBefore(n,0,u);else if(u>i||c>p){for(f=0;h;){var g=u>>>a&lr;if(g!==p>>>a&lr)break;g&&(f+=(1<i&&(h=h.removeBefore(n,a,u-f)),h&&c>p&&(h=h.removeAfter(n,a,p-f)),f&&(u-=f,s-=f)}return t.__ownerID?(t.size=s-u,t._origin=u,t._capacity=s,t._level=a,t._root=h,t._tail=l,t.__hash=void 0,t.__altered=!0,t):Nt(u,s,a,h,l)}function Ft(t,e,r){for(var i=[],u=0,s=0;r.length>s;s++){var a=r[s],h=n(a);h.size>u&&(u=h.size),o(a)||(h=h.map(function(t){return H(t)})),i.push(h)}return u>t.size&&(t=t.setSize(u)),jt(t,e,i)}function Gt(t){return vr>t?0:t-1>>>pr<=vr&&u.size>=2*o.size?(i=u.filter(function(t,e){return void 0!==t&&s!==e}),n=i.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(n.__ownerID=i.__ownerID=t.__ownerID)):(n=o.remove(e),i=s===u.size-1?u.pop():u.set(s,void 0))}else if(a){if(r===u.get(s)[1])return t;n=o,i=u.set(s,[e,r])}else n=o.set(e,u.size),i=u.set(u.size,[e,r]);return t.__ownerID?(t.size=n.size,t._map=n,t._list=i,t.__hash=void 0,t):te(n,i)}function ne(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function ie(t){this._iter=t,this.size=t.size}function oe(t){this._iter=t,this.size=t.size}function ue(t){this._iter=t,this.size=t.size}function se(t){var e=Ee(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this); return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=Oe,e.__iterateUncached=function(e,r){var n=this;return t.__iterate(function(t,r){return e(r,t,n)!==!1},r)},e.__iteratorUncached=function(e,r){if(e===Sr){var n=t.__iterator(e,r);return new S(function(){var t=n.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===wr?gr:wr,r)},e}function ae(t,e,r){var n=Ee(t);return n.size=t.size,n.has=function(e){return t.has(e)},n.get=function(n,i){var o=t.get(n,yr);return o===yr?i:e.call(r,o,n,t)},n.__iterateUncached=function(n,i){var o=this;return t.__iterate(function(t,i,u){return n(e.call(r,t,i,u),i,o)!==!1},i)},n.__iteratorUncached=function(n,i){var o=t.__iterator(Sr,i);return new S(function(){var i=o.next();if(i.done)return i;var u=i.value,s=u[0];return z(n,s,e.call(r,u[1],s,t),i)})},n}function he(t,e){var r=Ee(t);return r._iter=t,r.size=t.size,r.reverse=function(){return t},t.flip&&(r.flip=function(){var e=se(t);return e.reverse=function(){return t.flip()},e}),r.get=function(r,n){return t.get(e?r:-1-r,n)},r.has=function(r){return t.has(e?r:-1-r)},r.includes=function(e){return t.includes(e)},r.cacheResult=Oe,r.__iterate=function(e,r){var n=this;return t.__iterate(function(t,r){return e(t,r,n)},!r)},r.__iterator=function(e,r){return t.__iterator(e,!r)},r}function fe(t,e,r,n){var i=Ee(t);return n&&(i.has=function(n){var i=t.get(n,yr);return i!==yr&&!!e.call(r,i,n,t)},i.get=function(n,i){var o=t.get(n,yr);return o!==yr&&e.call(r,o,n,t)?o:i}),i.__iterateUncached=function(i,o){var u=this,s=0;return t.__iterate(function(t,o,a){return e.call(r,t,o,a)?(s++,i(t,n?o:s-1,u)):void 0},o),s},i.__iteratorUncached=function(i,o){var u=t.__iterator(Sr,o),s=0;return new S(function(){for(;;){var o=u.next();if(o.done)return o;var a=o.value,h=a[0],f=a[1];if(e.call(r,f,h,t))return z(i,n?h:s++,f,o)}})},i}function ce(t,e,r){var n=ct().asMutable();return t.__iterate(function(i,o){n.update(e.call(r,i,o,t),0,function(t){ return t+1})}),n.asImmutable()}function _e(t,e,r){var n=u(t),i=(h(t)?Zt():ct()).asMutable();t.__iterate(function(o,u){i.update(e.call(r,o,u,t),function(t){return t=t||[],t.push(n?[u,o]:o),t})});var o=Me(t);return i.map(function(e){return be(t,o(e))})}function pe(t,e,r,n){var i=t.size;if(void 0!==e&&(e=0|e),void 0!==r&&(r=r===1/0?i:0|r),d(e,r,i))return t;var o=m(e,i),u=g(r,i);if(o!==o||u!==u)return pe(t.toSeq().cacheResult(),e,r,n);var s,a=u-o;a===a&&(s=0>a?0:a);var h=Ee(t);return h.size=0===s?s:t.size&&s||void 0,!n&&L(t)&&s>=0&&(h.get=function(e,r){return e=l(this,e),e>=0&&s>e?t.get(e+o,r):r}),h.__iterateUncached=function(e,r){var i=this;if(0===s)return 0;if(r)return this.cacheResult().__iterate(e,r);var u=0,a=!0,h=0;return t.__iterate(function(t,r){return a&&(a=u++s)return I();var t=i.next();return n||e===wr?t:e===gr?z(e,a-1,void 0,t):z(e,a-1,t.value[1],t)})},h}function ve(t,e,r){var n=Ee(t);return n.__iterateUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterate(n,i);var u=0;return t.__iterate(function(t,i,s){return e.call(r,t,i,s)&&++u&&n(t,i,o)}),u},n.__iteratorUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterator(n,i);var u=t.__iterator(Sr,i),s=!0;return new S(function(){if(!s)return I();var t=u.next();if(t.done)return t;var i=t.value,a=i[0],h=i[1];return e.call(r,h,a,o)?n===Sr?t:z(n,a,h,t):(s=!1,I())})},n}function le(t,e,r,n){var i=Ee(t);return i.__iterateUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterate(i,o);var s=!0,a=0;return t.__iterate(function(t,o,h){return s&&(s=e.call(r,t,o,h))?void 0:(a++,i(t,n?o:a-1,u))}),a},i.__iteratorUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterator(i,o);var s=t.__iterator(Sr,o),a=!0,h=0;return new S(function(){var t,o,f;do{if(t=s.next(),t.done)return n||i===wr?t:i===gr?z(i,h++,void 0,t):z(i,h++,t.value[1],t); var c=t.value;o=c[0],f=c[1],a&&(a=e.call(r,f,o,u))}while(a);return i===Sr?t:z(i,o,f,t)})},i}function ye(t,e){var n=u(t),i=[t].concat(e).map(function(t){return o(t)?n&&(t=r(t)):t=n?B(t):W(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===i.length)return t;if(1===i.length){var a=i[0];if(a===t||n&&u(a)||s(t)&&s(a))return a}var h=new j(i);return n?h=h.toKeyedSeq():s(t)||(h=h.toSetSeq()),h=h.flatten(!0),h.size=i.reduce(function(t,e){if(void 0!==t){var r=e.size;if(void 0!==r)return t+r}},0),h}function de(t,e,r){var n=Ee(t);return n.__iterateUncached=function(n,i){function u(t,h){var f=this;t.__iterate(function(t,i){return(!e||e>h)&&o(t)?u(t,h+1):n(t,r?i:s++,f)===!1&&(a=!0),!a},i)}var s=0,a=!1;return u(t,0),s},n.__iteratorUncached=function(n,i){var u=t.__iterator(n,i),s=[],a=0;return new S(function(){for(;u;){var t=u.next();if(t.done===!1){var h=t.value;if(n===Sr&&(h=h[1]),e&&!(e>s.length)||!o(h))return r?t:z(n,a++,h,t);s.push(u),u=h.__iterator(n,i)}else u=s.pop()}return I()})},n}function me(t,e,r){var n=Me(t);return t.toSeq().map(function(i,o){return n(e.call(r,i,o,t))}).flatten(!0)}function ge(t,e){var r=Ee(t);return r.size=t.size&&2*t.size-1,r.__iterateUncached=function(r,n){var i=this,o=0;return t.__iterate(function(t,n){return(!o||r(e,o++,i)!==!1)&&r(t,o++,i)!==!1},n),o},r.__iteratorUncached=function(r,n){var i,o=t.__iterator(wr,n),u=0;return new S(function(){return(!i||u%2)&&(i=o.next(),i.done)?i:u%2?z(r,u++,e):z(r,u++,i.value,i)})},r}function we(t,e,r){e||(e=xe);var n=u(t),i=0,o=t.toSeq().map(function(e,n){return[n,e,i++,r?r(e,n,t):e]}).toArray();return o.sort(function(t,r){return e(t[3],r[3])||t[2]-r[2]}).forEach(n?function(t,e){o[e].length=2}:function(t,e){o[e]=t[1]}),n?x(o):s(t)?k(o):A(o)}function Se(t,e,r){if(e||(e=xe),r){var n=t.toSeq().map(function(e,n){return[e,r(e,n,t)]}).reduce(function(t,r){return ze(e,t[1],r[1])?r:t});return n&&n[0]}return t.reduce(function(t,r){return ze(e,t,r)?r:t})}function ze(t,e,r){var n=t(r,e);return 0===n&&r!==e&&(void 0===r||null===r||r!==r)||n>0}function Ie(t,r,n){ var i=Ee(t);return i.size=new j(n).map(function(t){return t.size}).min(),i.__iterate=function(t,e){for(var r,n=this.__iterator(wr,e),i=0;!(r=n.next()).done&&t(r.value,i++,this)!==!1;);return i},i.__iteratorUncached=function(t,i){var o=n.map(function(t){return t=e(t),D(i?t.reverse():t)}),u=0,s=!1;return new S(function(){var e;return s||(e=o.map(function(t){return t.next()}),s=e.some(function(t){return t.done})),s?I():z(t,u++,r.apply(null,e.map(function(t){return t.value})))})},i}function be(t,e){return L(t)?e:t.constructor(e)}function qe(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function De(t){return ft(t.size),v(t)}function Me(t){return u(t)?r:s(t)?n:i}function Ee(t){return Object.create((u(t)?x:s(t)?k:A).prototype)}function Oe(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):O.prototype.cacheResult.call(this)}function xe(t,e){return t>e?1:e>t?-1:0}function ke(t){var r=D(t);if(!r){if(!E(t))throw new TypeError("Expected iterable or array-like: "+t);r=D(e(t))}return r}function Ae(t,e){var r,n=function(o){if(o instanceof n)return o;if(!(this instanceof n))return new n(o);if(!r){r=!0;var u=Object.keys(t);Ue(i,u),i.size=u.length,i._name=e,i._keys=u,i._defaultValues=t}this._map=ct(o)},i=n.prototype=Object.create(Gr);return i.constructor=n,n}function je(t,e,r){var n=Object.create(Object.getPrototypeOf(t));return n._map=e,n.__ownerID=r,n}function Re(t){return t._name||t.constructor.name||"Record"}function Ue(t,e){try{e.forEach(Ke.bind(void 0,t))}catch(r){}}function Ke(t,e){Object.defineProperty(t,e,{get:function(){return this.get(e)},set:function(t){Z(this.__ownerID,"Cannot set on an immutable record."),this.set(e,t)}})}function Le(t){return null===t||void 0===t?Ce():Te(t)&&!h(t)?t:Ce().withMutations(function(e){var r=i(t);ft(r.size),r.forEach(function(t){return e.add(t)})})}function Te(t){return!(!t||!t[Zr])}function Be(t,e){return t.__ownerID?(t.size=e.size,t._map=e,t):e===t._map?t:0===e.size?t.__empty():t.__make(e)}function We(t,e){var r=Object.create($r); return r.size=t?t.size:0,r._map=t,r.__ownerID=e,r}function Ce(){return tn||(tn=We(zt()))}function Je(t){return null===t||void 0===t?He():Ne(t)?t:He().withMutations(function(e){var r=i(t);ft(r.size),r.forEach(function(t){return e.add(t)})})}function Ne(t){return Te(t)&&h(t)}function Pe(t,e){var r=Object.create(en);return r.size=t?t.size:0,r._map=t,r.__ownerID=e,r}function He(){return rn||(rn=Pe(ee()))}function Ve(t){return null===t||void 0===t?Xe():Ye(t)?t:Xe().unshiftAll(t)}function Ye(t){return!(!t||!t[nn])}function Qe(t,e,r,n){var i=Object.create(on);return i.size=t,i._head=e,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function Xe(){return un||(un=Qe(0))}function Fe(t,e){var r=function(r){t.prototype[r]=e[r]};return Object.keys(e).forEach(r),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(e).forEach(r),t}function Ge(t,e){return e}function Ze(t,e){return[e,t]}function $e(t){return function(){return!t.apply(this,arguments)}}function tr(t){return function(){return-t.apply(this,arguments)}}function er(t){return"string"==typeof t?JSON.stringify(t):t+""}function rr(){return p(arguments)}function nr(t,e){return e>t?1:t>e?-1:0}function ir(t){if(t.size===1/0)return 0;var e=h(t),r=u(t),n=e?1:0,i=t.__iterate(r?e?function(t,e){n=31*n+ur(ot(t),ot(e))|0}:function(t,e){n=n+ur(ot(t),ot(e))|0}:e?function(t){n=31*n+ot(t)|0}:function(t){n=n+ot(t)|0});return or(i,n)}function or(t,e){return e=xr(e,3432918353),e=xr(e<<15|e>>>-15,461845907),e=xr(e<<13|e>>>-13,5),e=(e+3864292196|0)^t,e=xr(e^e>>>16,2246822507),e=xr(e^e>>>13,3266489909),e=it(e^e>>>16)}function ur(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}var sr=Array.prototype.slice;t(r,e),t(n,e),t(i,e),e.isIterable=o,e.isKeyed=u,e.isIndexed=s,e.isAssociative=a,e.isOrdered=h,e.Keyed=r,e.Indexed=n,e.Set=i;var ar="@@__IMMUTABLE_ITERABLE__@@",hr="@@__IMMUTABLE_KEYED__@@",fr="@@__IMMUTABLE_INDEXED__@@",cr="@@__IMMUTABLE_ORDERED__@@",_r="delete",pr=5,vr=1<=i;i++)if(t(r[e?n-i:i],i,this)===!1)return i+1;return i},j.prototype.__iterator=function(t,e){var r=this._array,n=r.length-1,i=0;return new S(function(){return i>n?I():z(t,i,r[e?n-i++:i++])})},t(R,x),R.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},R.prototype.has=function(t){return this._object.hasOwnProperty(t)},R.prototype.__iterate=function(t,e){for(var r=this._object,n=this._keys,i=n.length-1,o=0;i>=o;o++){var u=n[e?i-o:o];if(t(r[u],u,this)===!1)return o+1}return o},R.prototype.__iterator=function(t,e){var r=this._object,n=this._keys,i=n.length-1,o=0;return new S(function(){var u=n[e?i-o:o];return o++>i?I():z(t,u,r[u])})},R.prototype[cr]=!0,t(U,k),U.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e); var r=this._iterable,n=D(r),i=0;if(q(n))for(var o;!(o=n.next()).done&&t(o.value,i++,this)!==!1;);return i},U.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var r=this._iterable,n=D(r);if(!q(n))return new S(I);var i=0;return new S(function(){var e=n.next();return e.done?e:z(t,i++,e.value)})},t(K,k),K.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var r=this._iterator,n=this._iteratorCache,i=0;n.length>i;)if(t(n[i],i++,this)===!1)return i;for(var o;!(o=r.next()).done;){var u=o.value;if(n[i]=u,t(u,i++,this)===!1)break}return i},K.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var r=this._iterator,n=this._iteratorCache,i=0;return new S(function(){if(i>=n.length){var e=r.next();if(e.done)return e;n[i]=e.value}return z(t,i,n[i++])})};var Dr;t(G,k),G.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},G.prototype.get=function(t,e){return this.has(t)?this._value:e},G.prototype.includes=function(t){return X(this._value,t)},G.prototype.slice=function(t,e){var r=this.size;return d(t,e,r)?this:new G(this._value,g(e,r)-m(t,r))},G.prototype.reverse=function(){return this},G.prototype.indexOf=function(t){return X(this._value,t)?0:-1},G.prototype.lastIndexOf=function(t){return X(this._value,t)?this.size:-1},G.prototype.__iterate=function(t,e){for(var r=0;this.size>r;r++)if(t(this._value,r,this)===!1)return r+1;return r},G.prototype.__iterator=function(t,e){var r=this,n=0;return new S(function(){return r.size>n?z(t,n++,r._value):I()})},G.prototype.equals=function(t){return t instanceof G?X(this._value,t._value):F(t)};var Mr;t($,k),$.prototype.toString=function(){return 0===this.size?"Range []":"Range [ "+this._start+"..."+this._end+(1!==this._step?" by "+this._step:"")+" ]"},$.prototype.get=function(t,e){return this.has(t)?this._start+l(this,t)*this._step:e},$.prototype.includes=function(t){var e=(t-this._start)/this._step;return e>=0&&this.size>e&&e===Math.floor(e); },$.prototype.slice=function(t,e){return d(t,e,this.size)?this:(t=m(t,this.size),e=g(e,this.size),t>=e?new $(0,0):new $(this.get(t,this._end),this.get(e,this._end),this._step))},$.prototype.indexOf=function(t){var e=t-this._start;if(e%this._step===0){var r=e/this._step;if(r>=0&&this.size>r)return r}return-1},$.prototype.lastIndexOf=function(t){return this.indexOf(t)},$.prototype.__iterate=function(t,e){for(var r=this.size-1,n=this._step,i=e?this._start+r*n:this._start,o=0;r>=o;o++){if(t(i,o,this)===!1)return o+1;i+=e?-n:n}return o},$.prototype.__iterator=function(t,e){var r=this.size-1,n=this._step,i=e?this._start+r*n:this._start,o=0;return new S(function(){var u=i;return i+=e?-n:n,o>r?I():z(t,o++,u)})},$.prototype.equals=function(t){return t instanceof $?this._start===t._start&&this._end===t._end&&this._step===t._step:F(this,t)};var Er;t(tt,e),t(et,tt),t(rt,tt),t(nt,tt),tt.Keyed=et,tt.Indexed=rt,tt.Set=nt;var Or,xr="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(t,e){t=0|t,e=0|e;var r=65535&t,n=65535&e;return r*n+((t>>>16)*n+r*(e>>>16)<<16>>>0)|0},kr=Object.isExtensible,Ar=function(){try{return Object.defineProperty({},"@",{}),!0}catch(t){return!1}}(),jr="function"==typeof WeakMap;jr&&(Or=new WeakMap);var Rr=0,Ur="__immutablehash__";"function"==typeof Symbol&&(Ur=Symbol(Ur));var Kr=16,Lr=255,Tr=0,Br={};t(ct,et),ct.of=function(){var t=sr.call(arguments,0);return zt().withMutations(function(e){for(var r=0;t.length>r;r+=2){if(r+1>=t.length)throw Error("Missing value for key: "+t[r]);e.set(t[r],t[r+1])}})},ct.prototype.toString=function(){return this.__toString("Map {","}")},ct.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},ct.prototype.set=function(t,e){return It(this,t,e)},ct.prototype.setIn=function(t,e){return this.updateIn(t,yr,function(){return e})},ct.prototype.remove=function(t){return It(this,t,yr)},ct.prototype.deleteIn=function(t){return this.updateIn(t,function(){return yr})},ct.prototype.update=function(t,e,r){return 1===arguments.length?t(this):this.updateIn([t],e,r); },ct.prototype.updateIn=function(t,e,r){r||(r=e,e=void 0);var n=Rt(this,ke(t),e,r);return n===yr?void 0:n},ct.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):zt()},ct.prototype.merge=function(){return xt(this,void 0,arguments)},ct.prototype.mergeWith=function(t){var e=sr.call(arguments,1);return xt(this,t,e)},ct.prototype.mergeIn=function(t){var e=sr.call(arguments,1);return this.updateIn(t,zt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,e):e[e.length-1]})},ct.prototype.mergeDeep=function(){return xt(this,kt,arguments)},ct.prototype.mergeDeepWith=function(t){var e=sr.call(arguments,1);return xt(this,At(t),e)},ct.prototype.mergeDeepIn=function(t){var e=sr.call(arguments,1);return this.updateIn(t,zt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,e):e[e.length-1]})},ct.prototype.sort=function(t){return Zt(we(this,t))},ct.prototype.sortBy=function(t,e){return Zt(we(this,e,t))},ct.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},ct.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new _)},ct.prototype.asImmutable=function(){return this.__ensureOwner()},ct.prototype.wasAltered=function(){return this.__altered},ct.prototype.__iterator=function(t,e){return new mt(this,t,e)},ct.prototype.__iterate=function(t,e){var r=this,n=0;return this._root&&this._root.iterate(function(e){return n++,t(e[1],e[0],r)},e),n},ct.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?St(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},ct.isMap=_t;var Wr="@@__IMMUTABLE_MAP__@@",Cr=ct.prototype;Cr[Wr]=!0,Cr[_r]=Cr.remove,Cr.removeIn=Cr.deleteIn,pt.prototype.get=function(t,e,r,n){for(var i=this.entries,o=0,u=i.length;u>o;o++)if(X(r,i[o][0]))return i[o][1];return n},pt.prototype.update=function(t,e,r,n,i,o,u){for(var s=i===yr,a=this.entries,h=0,f=a.length;f>h&&!X(n,a[h][0]);h++); var _=f>h;if(_?a[h][1]===i:s)return this;if(c(u),(s||!_)&&c(o),!s||1!==a.length){if(!_&&!s&&a.length>=Nr)return Mt(t,a,n,i);var v=t&&t===this.ownerID,l=v?a:p(a);return _?s?h===f-1?l.pop():l[h]=l.pop():l[h]=[n,i]:l.push([n,i]),v?(this.entries=l,this):new pt(t,l)}},vt.prototype.get=function(t,e,r,n){void 0===e&&(e=ot(r));var i=1<<((0===t?e:e>>>t)&lr),o=this.bitmap;return 0===(o&i)?n:this.nodes[Ut(o&i-1)].get(t+pr,e,r,n)},vt.prototype.update=function(t,e,r,n,i,o,u){void 0===r&&(r=ot(n));var s=(0===e?r:r>>>e)&lr,a=1<=Pr)return Ot(t,_,h,s,v);if(f&&!v&&2===_.length&&qt(_[1^c]))return _[1^c];if(f&&v&&1===_.length&&qt(v))return v;var l=t&&t===this.ownerID,y=f?v?h:h^a:h|a,d=f?v?Kt(_,c,v,l):Tt(_,c,l):Lt(_,c,v,l);return l?(this.bitmap=y,this.nodes=d,this):new vt(t,y,d)},lt.prototype.get=function(t,e,r,n){void 0===e&&(e=ot(r));var i=(0===t?e:e>>>t)&lr,o=this.nodes[i];return o?o.get(t+pr,e,r,n):n},lt.prototype.update=function(t,e,r,n,i,o,u){void 0===r&&(r=ot(n));var s=(0===e?r:r>>>e)&lr,a=i===yr,h=this.nodes,f=h[s];if(a&&!f)return this;var c=bt(f,t,e+pr,r,n,i,o,u);if(c===f)return this;var _=this.count;if(f){if(!c&&(_--,Hr>_))return Et(t,h,_,s)}else _++;var p=t&&t===this.ownerID,v=Kt(h,s,c,p);return p?(this.count=_,this.nodes=v,this):new lt(t,_,v)},yt.prototype.get=function(t,e,r,n){for(var i=this.entries,o=0,u=i.length;u>o;o++)if(X(r,i[o][0]))return i[o][1];return n},yt.prototype.update=function(t,e,r,n,i,o,u){void 0===r&&(r=ot(n));var s=i===yr;if(r!==this.keyHash)return s?this:(c(u),c(o),Dt(this,t,e,r,[n,i]));for(var a=this.entries,h=0,f=a.length;f>h&&!X(n,a[h][0]);h++);var _=f>h;if(_?a[h][1]===i:s)return this;if(c(u),(s||!_)&&c(o),s&&2===f)return new dt(t,this.keyHash,a[1^h]);var v=t&&t===this.ownerID,l=v?a:p(a);return _?s?h===f-1?l.pop():l[h]=l.pop():l[h]=[n,i]:l.push([n,i]),v?(this.entries=l,this):new yt(t,this.keyHash,l)},dt.prototype.get=function(t,e,r,n){return X(r,this.entry[0])?this.entry[1]:n; },dt.prototype.update=function(t,e,r,n,i,o,u){var s=i===yr,a=X(n,this.entry[0]);return(a?i===this.entry[1]:s)?this:(c(u),s?void c(o):a?t&&t===this.ownerID?(this.entry[1]=i,this):new dt(t,this.keyHash,[n,i]):(c(o),Dt(this,t,e,ot(n),[n,i])))},pt.prototype.iterate=yt.prototype.iterate=function(t,e){for(var r=this.entries,n=0,i=r.length-1;i>=n;n++)if(t(r[e?i-n:n])===!1)return!1},vt.prototype.iterate=lt.prototype.iterate=function(t,e){for(var r=this.nodes,n=0,i=r.length-1;i>=n;n++){var o=r[e?i-n:n];if(o&&o.iterate(t,e)===!1)return!1}},dt.prototype.iterate=function(t,e){return t(this.entry)},t(mt,S),mt.prototype.next=function(){for(var t=this._type,e=this._stack;e;){var r,n=e.node,i=e.index++;if(n.entry){if(0===i)return gt(t,n.entry)}else if(n.entries){if(r=n.entries.length-1,r>=i)return gt(t,n.entries[this._reverse?r-i:i])}else if(r=n.nodes.length-1,r>=i){var o=n.nodes[this._reverse?r-i:i];if(o){if(o.entry)return gt(t,o.entry);e=this._stack=wt(o,e)}continue}e=this._stack=this._stack.__prev}return I()};var Jr,Nr=vr/4,Pr=vr/2,Hr=vr/4;t(Bt,rt),Bt.of=function(){return this(arguments)},Bt.prototype.toString=function(){return this.__toString("List [","]")},Bt.prototype.get=function(t,e){if(t=l(this,t),t>=0&&this.size>t){t+=this._origin;var r=Qt(this,t);return r&&r.array[t&lr]}return e},Bt.prototype.set=function(t,e){return Ht(this,t,e)},Bt.prototype.remove=function(t){return this.has(t)?0===t?this.shift():t===this.size-1?this.pop():this.splice(t,1):this},Bt.prototype.insert=function(t,e){return this.splice(t,0,e)},Bt.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=pr,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):Pt()},Bt.prototype.push=function(){var t=arguments,e=this.size;return this.withMutations(function(r){Xt(r,0,e+t.length);for(var n=0;t.length>n;n++)r.set(e+n,t[n])})},Bt.prototype.pop=function(){return Xt(this,0,-1)},Bt.prototype.unshift=function(){var t=arguments;return this.withMutations(function(e){Xt(e,-t.length);for(var r=0;t.length>r;r++)e.set(r,t[r]); })},Bt.prototype.shift=function(){return Xt(this,1)},Bt.prototype.merge=function(){return Ft(this,void 0,arguments)},Bt.prototype.mergeWith=function(t){var e=sr.call(arguments,1);return Ft(this,t,e)},Bt.prototype.mergeDeep=function(){return Ft(this,kt,arguments)},Bt.prototype.mergeDeepWith=function(t){var e=sr.call(arguments,1);return Ft(this,At(t),e)},Bt.prototype.setSize=function(t){return Xt(this,0,t)},Bt.prototype.slice=function(t,e){var r=this.size;return d(t,e,r)?this:Xt(this,m(t,r),g(e,r))},Bt.prototype.__iterator=function(t,e){var r=0,n=Jt(this,e);return new S(function(){var e=n();return e===Xr?I():z(t,r++,e)})},Bt.prototype.__iterate=function(t,e){for(var r,n=0,i=Jt(this,e);(r=i())!==Xr&&t(r,n++,this)!==!1;);return n},Bt.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Nt(this._origin,this._capacity,this._level,this._root,this._tail,t,this.__hash):(this.__ownerID=t,this)},Bt.isList=Wt;var Vr="@@__IMMUTABLE_LIST__@@",Yr=Bt.prototype;Yr[Vr]=!0,Yr[_r]=Yr.remove,Yr.setIn=Cr.setIn,Yr.deleteIn=Yr.removeIn=Cr.removeIn,Yr.update=Cr.update,Yr.updateIn=Cr.updateIn,Yr.mergeIn=Cr.mergeIn,Yr.mergeDeepIn=Cr.mergeDeepIn,Yr.withMutations=Cr.withMutations,Yr.asMutable=Cr.asMutable,Yr.asImmutable=Cr.asImmutable,Yr.wasAltered=Cr.wasAltered,Ct.prototype.removeBefore=function(t,e,r){if(r===e?1<>>e&lr;if(n>=this.array.length)return new Ct([],t);var i,o=0===n;if(e>0){var u=this.array[n];if(i=u&&u.removeBefore(t,e-pr,r),i===u&&o)return this}if(o&&!i)return this;var s=Yt(this,t);if(!o)for(var a=0;n>a;a++)s.array[a]=void 0;return i&&(s.array[n]=i),s},Ct.prototype.removeAfter=function(t,e,r){if(r===(e?1<>>e&lr;if(n>=this.array.length)return this;var i;if(e>0){var o=this.array[n];if(i=o&&o.removeAfter(t,e-pr,r),i===o&&n===this.array.length-1)return this}var u=Yt(this,t);return u.array.splice(n+1),i&&(u.array[n]=i),u};var Qr,Xr={};t(Zt,ct),Zt.of=function(){return this(arguments)},Zt.prototype.toString=function(){return this.__toString("OrderedMap {","}"); },Zt.prototype.get=function(t,e){var r=this._map.get(t);return void 0!==r?this._list.get(r)[1]:e},Zt.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):ee()},Zt.prototype.set=function(t,e){return re(this,t,e)},Zt.prototype.remove=function(t){return re(this,t,yr)},Zt.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},Zt.prototype.__iterate=function(t,e){var r=this;return this._list.__iterate(function(e){return e&&t(e[1],e[0],r)},e)},Zt.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},Zt.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),r=this._list.__ensureOwner(t);return t?te(e,r,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=r,this)},Zt.isOrderedMap=$t,Zt.prototype[cr]=!0,Zt.prototype[_r]=Zt.prototype.remove;var Fr;t(ne,x),ne.prototype.get=function(t,e){return this._iter.get(t,e)},ne.prototype.has=function(t){return this._iter.has(t)},ne.prototype.valueSeq=function(){return this._iter.valueSeq()},ne.prototype.reverse=function(){var t=this,e=he(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},ne.prototype.map=function(t,e){var r=this,n=ae(this,t,e);return this._useKeys||(n.valueSeq=function(){return r._iter.toSeq().map(t,e)}),n},ne.prototype.__iterate=function(t,e){var r,n=this;return this._iter.__iterate(this._useKeys?function(e,r){return t(e,r,n)}:(r=e?De(this):0,function(i){return t(i,e?--r:r++,n)}),e)},ne.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var r=this._iter.__iterator(wr,e),n=e?De(this):0;return new S(function(){var i=r.next();return i.done?i:z(t,e?--n:n++,i.value,i)})},ne.prototype[cr]=!0,t(ie,k),ie.prototype.includes=function(t){return this._iter.includes(t)},ie.prototype.__iterate=function(t,e){var r=this,n=0;return this._iter.__iterate(function(e){return t(e,n++,r)},e)},ie.prototype.__iterator=function(t,e){var r=this._iter.__iterator(wr,e),n=0; return new S(function(){var e=r.next();return e.done?e:z(t,n++,e.value,e)})},t(oe,A),oe.prototype.has=function(t){return this._iter.includes(t)},oe.prototype.__iterate=function(t,e){var r=this;return this._iter.__iterate(function(e){return t(e,e,r)},e)},oe.prototype.__iterator=function(t,e){var r=this._iter.__iterator(wr,e);return new S(function(){var e=r.next();return e.done?e:z(t,e.value,e.value,e)})},t(ue,x),ue.prototype.entrySeq=function(){return this._iter.toSeq()},ue.prototype.__iterate=function(t,e){var r=this;return this._iter.__iterate(function(e){if(e){qe(e);var n=o(e);return t(n?e.get(1):e[1],n?e.get(0):e[0],r)}},e)},ue.prototype.__iterator=function(t,e){var r=this._iter.__iterator(wr,e);return new S(function(){for(;;){var e=r.next();if(e.done)return e;var n=e.value;if(n){qe(n);var i=o(n);return z(t,i?n.get(0):n[0],i?n.get(1):n[1],e)}}})},ie.prototype.cacheResult=ne.prototype.cacheResult=oe.prototype.cacheResult=ue.prototype.cacheResult=Oe,t(Ae,et),Ae.prototype.toString=function(){return this.__toString(Re(this)+" {","}")},Ae.prototype.has=function(t){return this._defaultValues.hasOwnProperty(t)},Ae.prototype.get=function(t,e){if(!this.has(t))return e;var r=this._defaultValues[t];return this._map?this._map.get(t,r):r},Ae.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var t=this.constructor;return t._empty||(t._empty=je(this,zt()))},Ae.prototype.set=function(t,e){if(!this.has(t))throw Error('Cannot set unknown key "'+t+'" on '+Re(this));if(this._map&&!this._map.has(t)){var r=this._defaultValues[t];if(e===r)return this}var n=this._map&&this._map.set(t,e);return this.__ownerID||n===this._map?this:je(this,n)},Ae.prototype.remove=function(t){if(!this.has(t))return this;var e=this._map&&this._map.remove(t);return this.__ownerID||e===this._map?this:je(this,e)},Ae.prototype.wasAltered=function(){return this._map.wasAltered()},Ae.prototype.__iterator=function(t,e){var n=this;return r(this._defaultValues).map(function(t,e){return n.get(e)}).__iterator(t,e)},Ae.prototype.__iterate=function(t,e){ var n=this;return r(this._defaultValues).map(function(t,e){return n.get(e)}).__iterate(t,e)},Ae.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map&&this._map.__ensureOwner(t);return t?je(this,e,t):(this.__ownerID=t,this._map=e,this)};var Gr=Ae.prototype;Gr[_r]=Gr.remove,Gr.deleteIn=Gr.removeIn=Cr.removeIn,Gr.merge=Cr.merge,Gr.mergeWith=Cr.mergeWith,Gr.mergeIn=Cr.mergeIn,Gr.mergeDeep=Cr.mergeDeep,Gr.mergeDeepWith=Cr.mergeDeepWith,Gr.mergeDeepIn=Cr.mergeDeepIn,Gr.setIn=Cr.setIn,Gr.update=Cr.update,Gr.updateIn=Cr.updateIn,Gr.withMutations=Cr.withMutations,Gr.asMutable=Cr.asMutable,Gr.asImmutable=Cr.asImmutable,t(Le,nt),Le.of=function(){return this(arguments)},Le.fromKeys=function(t){return this(r(t).keySeq())},Le.prototype.toString=function(){return this.__toString("Set {","}")},Le.prototype.has=function(t){return this._map.has(t)},Le.prototype.add=function(t){return Be(this,this._map.set(t,!0))},Le.prototype.remove=function(t){return Be(this,this._map.remove(t))},Le.prototype.clear=function(){return Be(this,this._map.clear())},Le.prototype.union=function(){var t=sr.call(arguments,0);return t=t.filter(function(t){return 0!==t.size}),0===t.length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations(function(e){for(var r=0;t.length>r;r++)i(t[r]).forEach(function(t){return e.add(t)})}):this.constructor(t[0])},Le.prototype.intersect=function(){var t=sr.call(arguments,0);if(0===t.length)return this;t=t.map(function(t){return i(t)});var e=this;return this.withMutations(function(r){e.forEach(function(e){t.every(function(t){return t.includes(e)})||r.remove(e)})})},Le.prototype.subtract=function(){var t=sr.call(arguments,0);if(0===t.length)return this;t=t.map(function(t){return i(t)});var e=this;return this.withMutations(function(r){e.forEach(function(e){t.some(function(t){return t.includes(e)})&&r.remove(e)})})},Le.prototype.merge=function(){return this.union.apply(this,arguments)},Le.prototype.mergeWith=function(t){var e=sr.call(arguments,1);return this.union.apply(this,e)}, Le.prototype.sort=function(t){return Je(we(this,t))},Le.prototype.sortBy=function(t,e){return Je(we(this,e,t))},Le.prototype.wasAltered=function(){return this._map.wasAltered()},Le.prototype.__iterate=function(t,e){var r=this;return this._map.__iterate(function(e,n){return t(n,n,r)},e)},Le.prototype.__iterator=function(t,e){return this._map.map(function(t,e){return e}).__iterator(t,e)},Le.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t);return t?this.__make(e,t):(this.__ownerID=t,this._map=e,this)},Le.isSet=Te;var Zr="@@__IMMUTABLE_SET__@@",$r=Le.prototype;$r[Zr]=!0,$r[_r]=$r.remove,$r.mergeDeep=$r.merge,$r.mergeDeepWith=$r.mergeWith,$r.withMutations=Cr.withMutations,$r.asMutable=Cr.asMutable,$r.asImmutable=Cr.asImmutable,$r.__empty=Ce,$r.__make=We;var tn;t(Je,Le),Je.of=function(){return this(arguments)},Je.fromKeys=function(t){return this(r(t).keySeq())},Je.prototype.toString=function(){return this.__toString("OrderedSet {","}")},Je.isOrderedSet=Ne;var en=Je.prototype;en[cr]=!0,en.__empty=He,en.__make=Pe;var rn;t(Ve,rt),Ve.of=function(){return this(arguments)},Ve.prototype.toString=function(){return this.__toString("Stack [","]")},Ve.prototype.get=function(t,e){var r=this._head;for(t=l(this,t);r&&t--;)r=r.next;return r?r.value:e},Ve.prototype.peek=function(){return this._head&&this._head.value},Ve.prototype.push=function(){if(0===arguments.length)return this;for(var t=this.size+arguments.length,e=this._head,r=arguments.length-1;r>=0;r--)e={value:arguments[r],next:e};return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):Qe(t,e)},Ve.prototype.pushAll=function(t){if(t=n(t),0===t.size)return this;ft(t.size);var e=this.size,r=this._head;return t.reverse().forEach(function(t){e++,r={value:t,next:r}}),this.__ownerID?(this.size=e,this._head=r,this.__hash=void 0,this.__altered=!0,this):Qe(e,r)},Ve.prototype.pop=function(){return this.slice(1)},Ve.prototype.unshift=function(){return this.push.apply(this,arguments)},Ve.prototype.unshiftAll=function(t){ return this.pushAll(t)},Ve.prototype.shift=function(){return this.pop.apply(this,arguments)},Ve.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Xe()},Ve.prototype.slice=function(t,e){if(d(t,e,this.size))return this;var r=m(t,this.size),n=g(e,this.size);if(n!==this.size)return rt.prototype.slice.call(this,t,e);for(var i=this.size-r,o=this._head;r--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):Qe(i,o)},Ve.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Qe(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ve.prototype.__iterate=function(t,e){if(e)return this.reverse().__iterate(t);for(var r=0,n=this._head;n&&t(n.value,r++,this)!==!1;)n=n.next;return r},Ve.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var r=0,n=this._head;return new S(function(){if(n){var e=n.value;return n=n.next,z(t,r++,e)}return I()})},Ve.isStack=Ye;var nn="@@__IMMUTABLE_STACK__@@",on=Ve.prototype;on[nn]=!0,on.withMutations=Cr.withMutations,on.asMutable=Cr.asMutable,on.asImmutable=Cr.asImmutable,on.wasAltered=Cr.wasAltered;var un;e.Iterator=S,Fe(e,{toArray:function(){ft(this.size);var t=Array(this.size||0);return this.valueSeq().__iterate(function(e,r){t[r]=e}),t},toIndexedSeq:function(){return new ie(this)},toJS:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJS?t.toJS():t}).__toJS()},toJSON:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJSON?t.toJSON():t}).__toJS()},toKeyedSeq:function(){return new ne(this,!0)},toMap:function(){return ct(this.toKeyedSeq())},toObject:function(){ft(this.size);var t={};return this.__iterate(function(e,r){t[r]=e}),t},toOrderedMap:function(){return Zt(this.toKeyedSeq())},toOrderedSet:function(){return Je(u(this)?this.valueSeq():this)},toSet:function(){return Le(u(this)?this.valueSeq():this)},toSetSeq:function(){return new oe(this); },toSeq:function(){return s(this)?this.toIndexedSeq():u(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Ve(u(this)?this.valueSeq():this)},toList:function(){return Bt(u(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(t,e){return 0===this.size?t+e:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+e},concat:function(){var t=sr.call(arguments,0);return be(this,ye(this,t))},includes:function(t){return this.some(function(e){return X(e,t)})},entries:function(){return this.__iterator(Sr)},every:function(t,e){ft(this.size);var r=!0;return this.__iterate(function(n,i,o){return t.call(e,n,i,o)?void 0:(r=!1,!1)}),r},filter:function(t,e){return be(this,fe(this,t,e,!0))},find:function(t,e,r){var n=this.findEntry(t,e);return n?n[1]:r},forEach:function(t,e){return ft(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){ft(this.size),t=void 0!==t?""+t:",";var e="",r=!0;return this.__iterate(function(n){r?r=!1:e+=t,e+=null!==n&&void 0!==n?""+n:""}),e},keys:function(){return this.__iterator(gr)},map:function(t,e){return be(this,ae(this,t,e))},reduce:function(t,e,r){ft(this.size);var n,i;return arguments.length<2?i=!0:n=e,this.__iterate(function(e,o,u){i?(i=!1,n=e):n=t.call(r,n,e,o,u)}),n},reduceRight:function(t,e,r){var n=this.toKeyedSeq().reverse();return n.reduce.apply(n,arguments)},reverse:function(){return be(this,he(this,!0))},slice:function(t,e){return be(this,pe(this,t,e,!0))},some:function(t,e){return!this.every($e(t),e)},sort:function(t){return be(this,we(this,t))},values:function(){return this.__iterator(wr)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(t,e){return v(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return ce(this,t,e)},equals:function(t){return F(this,t)},entrySeq:function(){var t=this;if(t._cache)return new j(t._cache);var e=t.toSeq().map(Ze).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){ return this.filter($e(t),e)},findEntry:function(t,e,r){var n=r;return this.__iterate(function(r,i,o){return t.call(e,r,i,o)?(n=[i,r],!1):void 0}),n},findKey:function(t,e){var r=this.findEntry(t,e);return r&&r[0]},findLast:function(t,e,r){return this.toKeyedSeq().reverse().find(t,e,r)},findLastEntry:function(t,e,r){return this.toKeyedSeq().reverse().findEntry(t,e,r)},findLastKey:function(t,e){return this.toKeyedSeq().reverse().findKey(t,e)},first:function(){return this.find(y)},flatMap:function(t,e){return be(this,me(this,t,e))},flatten:function(t){return be(this,de(this,t,!0))},fromEntrySeq:function(){return new ue(this)},get:function(t,e){return this.find(function(e,r){return X(r,t)},void 0,e)},getIn:function(t,e){for(var r,n=this,i=ke(t);!(r=i.next()).done;){var o=r.value;if(n=n&&n.get?n.get(o,yr):yr,n===yr)return e}return n},groupBy:function(t,e){return _e(this,t,e)},has:function(t){return this.get(t,yr)!==yr},hasIn:function(t){return this.getIn(t,yr)!==yr},isSubset:function(t){return t="function"==typeof t.includes?t:e(t),this.every(function(e){return t.includes(e)})},isSuperset:function(t){return t="function"==typeof t.isSubset?t:e(t),t.isSubset(this)},keyOf:function(t){return this.findKey(function(e){return X(e,t)})},keySeq:function(){return this.toSeq().map(Ge).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(t){return this.toKeyedSeq().reverse().keyOf(t)},max:function(t){return Se(this,t)},maxBy:function(t,e){return Se(this,e,t)},min:function(t){return Se(this,t?tr(t):nr)},minBy:function(t,e){return Se(this,e?tr(e):nr,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return be(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return be(this,le(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile($e(t),e)},sortBy:function(t,e){return be(this,we(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return be(this,this.toSeq().reverse().take(t).reverse()); },takeWhile:function(t,e){return be(this,ve(this,t,e))},takeUntil:function(t,e){return this.takeWhile($e(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=ir(this))}});var sn=e.prototype;sn[ar]=!0,sn[br]=sn.values,sn.__toJS=sn.toArray,sn.__toStringMapper=er,sn.inspect=sn.toSource=function(){return""+this},sn.chain=sn.flatMap,sn.contains=sn.includes,Fe(r,{flip:function(){return be(this,se(this))},mapEntries:function(t,e){var r=this,n=0;return be(this,this.toSeq().map(function(i,o){return t.call(e,[o,i],n++,r)}).fromEntrySeq())},mapKeys:function(t,e){var r=this;return be(this,this.toSeq().flip().map(function(n,i){return t.call(e,n,i,r)}).flip())}});var an=r.prototype;an[hr]=!0,an[br]=sn.entries,an.__toJS=sn.toObject,an.__toStringMapper=function(t,e){return JSON.stringify(e)+": "+er(t)},Fe(n,{toKeyedSeq:function(){return new ne(this,!1)},filter:function(t,e){return be(this,fe(this,t,e,!1))},findIndex:function(t,e){var r=this.findEntry(t,e);return r?r[0]:-1},indexOf:function(t){var e=this.keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.lastKeyOf(t);return void 0===e?-1:e},reverse:function(){return be(this,he(this,!1))},slice:function(t,e){return be(this,pe(this,t,e,!1))},splice:function(t,e){var r=arguments.length;if(e=Math.max(0|e,0),0===r||2===r&&!e)return this;t=m(t,0>t?this.count():this.size);var n=this.slice(0,t);return be(this,1===r?n:n.concat(p(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var r=this.findLastEntry(t,e);return r?r[0]:-1},first:function(){return this.get(0)},flatten:function(t){return be(this,de(this,t,!1))},get:function(t,e){return t=l(this,t),0>t||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find(function(e,r){return r===t},void 0,e)},has:function(t){return t=l(this,t),t>=0&&(void 0!==this.size?this.size===1/0||this.size>t:-1!==this.indexOf(t))},interpose:function(t){return be(this,ge(this,t))},interleave:function(){var t=[this].concat(p(arguments)),e=Ie(this.toSeq(),k.of,t),r=e.flatten(!0);return e.size&&(r.size=e.size*t.length), be(this,r)},keySeq:function(){return $(0,this.size)},last:function(){return this.get(-1)},skipWhile:function(t,e){return be(this,le(this,t,e,!1))},zip:function(){var t=[this].concat(p(arguments));return be(this,Ie(this,rr,t))},zipWith:function(t){var e=p(arguments);return e[0]=this,be(this,Ie(this,t,e))}}),n.prototype[fr]=!0,n.prototype[cr]=!0,Fe(i,{get:function(t,e){return this.has(t)?t:e},includes:function(t){return this.has(t)},keySeq:function(){return this.valueSeq()}}),i.prototype.has=sn.includes,i.prototype.contains=i.prototype.includes,Fe(x,r.prototype),Fe(k,n.prototype),Fe(A,i.prototype),Fe(et,r.prototype),Fe(rt,n.prototype),Fe(nt,i.prototype);var hn={Iterable:e,Seq:O,Collection:tt,Map:ct,OrderedMap:Zt,List:Bt,Stack:Ve,Set:Le,OrderedSet:Je,Record:Ae,Range:$,Repeat:G,is:X,fromJS:H};return hn});drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/insQ.js000066400000000000000000000124061416705305200221550ustar00rootroot00000000000000var insertionQ = (function () { "use strict"; var sequence = 100, isAnimationSupported = false, animationstring = 'animationName', keyframeprefix = '', domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), pfx = '', elm = document.createElement('div'), options = { strictlyNew: true, timeout: 20 }; if (elm.style.animationName) { isAnimationSupported = true; } if (isAnimationSupported === false) { for (var i = 0; i < domPrefixes.length; i++) { if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) { pfx = domPrefixes[i]; animationstring = pfx + 'AnimationName'; keyframeprefix = '-' + pfx.toLowerCase() + '-'; isAnimationSupported = true; break; } } } function listen(selector, callback) { var styleAnimation, animationName = 'insQ_' + (sequence++); var eventHandler = function (event) { if (event.animationName === animationName || event[animationstring] === animationName) { if (!isTagged(event.target)) { callback(event.target); } } }; styleAnimation = document.createElement('style'); styleAnimation.innerHTML = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { outline: 1px solid transparent } to { outline: 0px solid transparent } }' + "\n" + selector + ' { animation-duration: 0.001s; animation-name: ' + animationName + '; ' + keyframeprefix + 'animation-duration: 0.001s; ' + keyframeprefix + 'animation-name: ' + animationName + '; ' + ' } '; document.head.appendChild(styleAnimation); var bindAnimationLater = setTimeout(function () { document.addEventListener('animationstart', eventHandler, false); document.addEventListener('MSAnimationStart', eventHandler, false); document.addEventListener('webkitAnimationStart', eventHandler, false); //event support is not consistent with DOM prefixes }, options.timeout); //starts listening later to skip elements found on startup. this might need tweaking return { destroy: function () { clearTimeout(bindAnimationLater); if (styleAnimation) { document.head.removeChild(styleAnimation); styleAnimation = null; } document.removeEventListener('animationstart', eventHandler); document.removeEventListener('MSAnimationStart', eventHandler); document.removeEventListener('webkitAnimationStart', eventHandler); } }; } function tag(el) { el.QinsQ = true; //bug in V8 causes memory leaks when weird characters are used as field names. I don't want to risk leaking DOM trees so the key is not '-+-' anymore } function isTagged(el) { return (options.strictlyNew && (el.QinsQ === true)); } function topmostUntaggedParent(el) { if (isTagged(el.parentNode)) { return el; } else { return topmostUntaggedParent(el.parentNode); } } function tagAll(e) { tag(e); e = e.firstChild; for (; e; e = e.nextSibling) { if (e !== undefined && e.nodeType === 1) { tagAll(e); } } } //aggregates multiple insertion events into a common parent function catchInsertions(selector, callback) { var insertions = []; //throttle summary var sumUp = (function () { var to; return function () { clearTimeout(to); to = setTimeout(function () { insertions.forEach(tagAll); callback(insertions); insertions = []; }, 10); }; })(); return listen(selector, function (el) { if (isTagged(el)) { return; } tag(el); var myparent = topmostUntaggedParent(el); if (insertions.indexOf(myparent) < 0) { insertions.push(myparent); } sumUp(); }); } //insQ function var exports = function (selector) { if (isAnimationSupported && selector.match(/[^{}]/)) { if (options.strictlyNew) { tagAll(document.body); //prevents from catching things on show } return { every: function (callback) { return listen(selector, callback); }, summary: function (callback) { return catchInsertions(selector, callback); } }; } else { return false; } }; //allows overriding defaults exports.config = function (opt) { for (var o in opt) { if (opt.hasOwnProperty(o)) { options[o] = opt[o]; } } }; return exports; })(); if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { module.exports = insertionQ; } drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/insQ.min.js000066400000000000000000000040551416705305200227400ustar00rootroot00000000000000// insertion-query v1.0.3 (2016-01-20) // license:MIT // Zbyszek Tenerowicz (http://naugtur.pl/) var insertionQ=function(){"use strict";function a(a,b){var d,e="insQ_"+g++,f=function(a){(a.animationName===e||a[i]===e)&&(c(a.target)||b(a.target))};d=document.createElement("style"),d.innerHTML="@"+j+"keyframes "+e+" { from { outline: 1px solid transparent } to { outline: 0px solid transparent } }\n"+a+" { animation-duration: 0.001s; animation-name: "+e+"; "+j+"animation-duration: 0.001s; "+j+"animation-name: "+e+"; } ",document.head.appendChild(d);var h=setTimeout(function(){document.addEventListener("animationstart",f,!1),document.addEventListener("MSAnimationStart",f,!1),document.addEventListener("webkitAnimationStart",f,!1)},n.timeout);return{destroy:function(){clearTimeout(h),d&&(document.head.removeChild(d),d=null),document.removeEventListener("animationstart",f),document.removeEventListener("MSAnimationStart",f),document.removeEventListener("webkitAnimationStart",f)}}}function b(a){a.QinsQ=!0}function c(a){return n.strictlyNew&&a.QinsQ===!0}function d(a){return c(a.parentNode)?a:d(a.parentNode)}function e(a){for(b(a),a=a.firstChild;a;a=a.nextSibling)void 0!==a&&1===a.nodeType&&e(a)}function f(f,g){var h=[],i=function(){var a;return function(){clearTimeout(a),a=setTimeout(function(){h.forEach(e),g(h),h=[]},10)}}();return a(f,function(a){if(!c(a)){b(a);var e=d(a);h.indexOf(e)<0&&h.push(e),i()}})}var g=100,h=!1,i="animationName",j="",k="Webkit Moz O ms Khtml".split(" "),l="",m=document.createElement("div"),n={strictlyNew:!0,timeout:20};if(m.style.animationName&&(h=!0),h===!1)for(var o=0;o // This file is licensed under the BSD 3-Clause License. // License text available at https://opensource.org/licenses/BSD-3-Clause "use strict"; var currentPath = window.location.protocol + "//" + window.location.host + window.location.pathname; var specURL = currentPath + '?format=openapi'; var redoc = document.createElement("redoc"); var redocSettings = JSON.parse(document.getElementById('redoc-settings').innerHTML); if (redocSettings.url) { specURL = redocSettings.url; } delete redocSettings.url; if (redocSettings.fetchSchemaWithQuery) { var query = new URLSearchParams(window.location.search || '').entries(); var url = specURL.split('?'); var usp = new URLSearchParams(url[1] || ''); for (var it = query.next(); !it.done; it = query.next()) { usp.set(it.value[0], it.value[1]); } url[1] = usp.toString(); specURL = url[1] ? url.join('?') : url[0]; } delete redocSettings.fetchSchemaWithQuery; redoc.setAttribute("spec-url", specURL); function camelToKebab(str) { return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); } for (var p in redocSettings) { if (redocSettings.hasOwnProperty(p)) { if (redocSettings[p] !== null && redocSettings[p] !== undefined && redocSettings[p] !== false) { redoc.setAttribute(camelToKebab(p), redocSettings[p].toString()); } } } document.body.replaceChild(redoc, document.getElementById('redoc-placeholder')); function hideEmptyVersion() { // 'span.api-info-version' is for redoc 1.x, 'div.api-info span' is for redoc 2-alpha var apiVersion = document.querySelector('span.api-info-version') || document.querySelector('div.api-info span'); if (!apiVersion) { console.log("WARNING: could not find API versionString element (span.api-info-version)"); return; } var versionString = apiVersion.innerText; if (versionString) { // trim spaces and surrounding () versionString = versionString.replace(/ /g, ''); versionString = versionString.replace(/(^\()|(\)$)/g, ''); } if (!versionString) { // hide version element if empty apiVersion.classList.add("hidden"); } } if (document.querySelector('span.api-info-version') || document.querySelector('div.api-info span')) { hideEmptyVersion(); } else { insertionQ('span.api-info-version').every(hideEmptyVersion); insertionQ('div.api-info span').every(hideEmptyVersion); } drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/redoc-old/000077500000000000000000000000001416705305200225525ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/redoc-old/LICENSE000066400000000000000000000020731416705305200235610ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2015, Rebilly, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/redoc-old/redoc.min.js000066400000000000000000041241341416705305200247770ustar00rootroot00000000000000/*! * ReDoc - OpenAPI/Swagger-generated API Reference Documentation * ------------------------------------------------------------- * Version: "1.22.3" * Repo: https://github.com/Rebilly/ReDoc */ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(function(){try{return require("esprima")}catch(e){}}(),function(){try{return require("jquery")}catch(e){}}()):"function"==typeof define&&define.amd?define("Redoc",["esprima","jquery"],t):"object"==typeof exports?exports.Redoc=t(function(){try{return require("esprima")}catch(e){}}(),function(){try{return require("jquery")}catch(e){}}()):e.Redoc=t(e.esprima,e.jquery)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=249)}([function(e,t,n){var r=n(5),o=n(8),i=n(25),a=n(20),s=n(58),l=function(e,t,n){var u,c,p,d,f=e&l.F,h=e&l.G,g=e&l.S,m=e&l.P,y=e&l.B,v=h?r:g?r[t]||(r[t]={}):(r[t]||{}).prototype,b=h?o:o[t]||(o[t]={}),_=b.prototype||(b.prototype={});h&&(n=t);for(u in n)c=!f&&v&&void 0!==v[u],p=(c?v:n)[u],d=y&&c?s(p,r):m&&"function"==typeof p?s(Function.call,p):p,v&&a(v,u,p,e&l.U),b[u]!=p&&i(b,u,d),m&&_[u]!=p&&(_[u]=p)};r.core=o,l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){function r(){if(!Do){var e=jo.Symbol;if(e&&e.iterator)Do=e.iterator;else for(var t=Object.getOwnPropertyNames(Map.prototype),n=0;n-1)return t.push(e[n]),t;t.push(e[n])}return t}function k(e){if(e.length>1){return" ("+x(e.slice().reverse()).map(function(e){return a(e.token)}).join(" -> ")+")"}return""}function C(e,t,n,r){var o=[t],i=n(o),a=r?w(i,r):Error(i);return a.addKey=S,a.keys=o,a.injectors=[e],a.constructResolvingMessage=n,a[_i]=r,a}function S(e,t){this.injectors.push(e),this.keys.push(t),this.message=this.constructResolvingMessage(this.keys)}function O(e,t){return C(e,t,function(e){return"No provider for "+a(e[0].token)+"!"+k(e)})}function P(e,t){return C(e,t,function(e){return"Cannot instantiate cyclic dependency!"+k(e)})}function M(e,t,n,r){return C(e,r,function(e){var n=a(e[0].token);return t.message+": Error during instantiation of "+n+"!"+k(e)+"."},t)}function E(e){return Error("Invalid provider - only instances of Provider and Type are allowed, got: "+e)}function T(e,t){for(var n=[],r=0,o=t.length;r-1&&e.splice(n,1)}function ve(e,t){var n=Fa.get(e);if(n)throw new Error("Duplicate module registered for "+e+" - "+n.moduleType.name+" vs "+t.moduleType.name);Fa.set(e,t)}function be(e){var t=Fa.get(e);if(!t)throw new Error("No module with ID "+e+" loaded");return t}function _e(e){return e.reduce(function(e,t){var n=Array.isArray(t)?_e(t):t;return e.concat(n)},[])}function we(e,t,n){if(!e)throw new Error("Cannot find '"+n+"' in '"+t+"'");return e}function xe(e){return e.map(function(e){return e.nativeElement})}function ke(e,t,n){e.childNodes.forEach(function(e){e instanceof Ga&&(t(e)&&n.push(e),ke(e,t,n))})}function Ce(e,t,n){e instanceof Ga&&e.childNodes.forEach(function(e){t(e)&&n.push(e),e instanceof Ga&&Ce(e,t,n)})}function Se(e){return Ja.get(e)||null}function Oe(e){Ja.set(e.nativeNode,e)}function Pe(e){Ja.delete(e.nativeNode)}function Me(e,t){var n=Ee(e),r=Ee(t);if(n&&r)return Te(e,t,Me);var o=e&&("object"==typeof e||"function"==typeof e),a=t&&("object"==typeof t||"function"==typeof t);return!(n||!o||r||!a)||i(e,t)}function Ee(e){return!!Ae(e)&&(Array.isArray(e)||!(e instanceof Map)&&r()in e)}function Te(e,t,n){for(var o=e[r()](),i=t[r()]();;){var a=o.next(),s=i.next();if(a.done&&s.done)return!0;if(a.done||s.done)return!1;if(!n(a.value,s.value))return!1}}function Ie(e,t){if(Array.isArray(e))for(var n=0;n0&&jt(e,t,0,n)&&(f=!0),d>1&&jt(e,t,1,r)&&(f=!0),d>2&&jt(e,t,2,o)&&(f=!0),d>3&&jt(e,t,3,i)&&(f=!0),d>4&&jt(e,t,4,a)&&(f=!0),d>5&&jt(e,t,5,s)&&(f=!0),d>6&&jt(e,t,6,l)&&(f=!0),d>7&&jt(e,t,7,u)&&(f=!0),d>8&&jt(e,t,8,c)&&(f=!0),d>9&&jt(e,t,9,p)&&(f=!0),f}function Nt(e,t,n){for(var r=!1,o=0;o0?o[n-1]:null,r)}function Xt(e,t){var n=at(t);if(n&&n!==e&&!(16&t.state)){t.state|=16;var r=n.template._projectedViews;r||(r=n.template._projectedViews=[]),r.push(t),Gt(t.parent.def,t.parentNodeDef)}}function Gt(e,t){if(!(4&t.flags)){e.nodeFlags|=4,t.flags|=4;for(var n=t.parent;n;)n.childFlags|=4,n=n.parent}}function Jt(e,t){var n=e.viewContainer._embeddedViews;if((null==t||t>=n.length)&&(t=n.length-1),t<0)return null;var r=n[t];return r.viewContainerParent=null,rn(n,t),Os.dirtyParentQueries(r),tn(r),r}function Kt(e){if(16&e.state){var t=at(e);if(t){var n=t.template._projectedViews;n&&(rn(n,n.indexOf(e)),Os.dirtyParentQueries(e))}}}function Qt(e,t,n){var r=e.viewContainer._embeddedViews,o=r[t];return rn(r,t),null==n&&(n=r.length),nn(r,n,o),Os.dirtyParentQueries(o),tn(o),en(e,n>0?r[n-1]:null,o),o}function en(e,t,n){var r=t?lt(t,t.def.lastRenderRootNode):e.renderElement;vt(n,2,n.renderer.parentNode(r),n.renderer.nextSibling(r),void 0)}function tn(e){vt(e,3,null,null,void 0)}function nn(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function rn(e,t){t>=e.length-1?e.pop():e.splice(t,1)}function on(e,t,n,r,o,i){return new Vs(e,t,n,r,o,i)}function an(e){return e.viewDefFactory}function sn(e,t,n){return new Hs(e,t,n)}function ln(e){return new qs(e)}function un(e,t){return new Us(e,t)}function cn(e,t){return new $s(e,t)}function pn(e,t){var n=e.def.nodes[t];if(1&n.flags){var r=Ve(e,n.nodeIndex);return n.element.template?r.template:r.renderElement}if(2&n.flags)return ze(e,n.nodeIndex).renderText;if(20240&n.flags)return Be(e,n.nodeIndex).instance;throw new Error("Illegal state: read nodeValue for node index "+t)}function dn(e){return new Ys(e.renderer)}function fn(e,t,n,r){return new Ws(e,t,n,r)}function hn(e,t,n,r,o,i,a,s){var l=[];if(a)for(var u in a){var c=a[u],p=c[0],d=c[1];l[p]={flags:8,name:u,nonMinifiedName:d,ns:null,securityContext:null,suffix:null}}var f=[];if(s)for(var h in s)f.push({type:1,propName:h,target:null,eventName:s[h]});return t|=16384,yn(e,t,n,r,o,o,i,l,f)}function gn(e,t,n){return e|=16,yn(-1,e,null,0,t,t,n)}function mn(e,t,n,r,o){return yn(-1,e,t,0,n,r,o)}function yn(e,t,n,r,o,i,a,s,l){var u=ft(n),c=u.matchedQueries,p=u.references,d=u.matchedQueryIds;l||(l=[]),s||(s=[]);var f=ht(a);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:c,matchedQueryIds:d,references:p,ngContentIndex:-1,childCount:r,bindings:s,bindingFlags:Ct(s),outputs:l,element:null,provider:{token:o,value:i,deps:f},text:null,query:null,ngContent:null}}function vn(e,t){return Cn(e,t)}function bn(e,t){for(var n=e;n.parent&&!ct(n);)n=n.parent;return Sn(n.parent,st(n),!0,t.provider.value,t.provider.deps)}function _n(e,t){var n=(32768&t.flags)>0,r=Sn(e,t.parent,n,t.provider.value,t.provider.deps);if(t.outputs.length)for(var o=0;o0&&et(e,t,0,n)&&(h=!0,g=En(e,d,t,0,n,g)),m>1&&et(e,t,1,r)&&(h=!0,g=En(e,d,t,1,r,g)),m>2&&et(e,t,2,o)&&(h=!0,g=En(e,d,t,2,o,g)),m>3&&et(e,t,3,i)&&(h=!0,g=En(e,d,t,3,i,g)),m>4&&et(e,t,4,a)&&(h=!0,g=En(e,d,t,4,a,g)),m>5&&et(e,t,5,s)&&(h=!0,g=En(e,d,t,5,s,g)),m>6&&et(e,t,6,l)&&(h=!0,g=En(e,d,t,6,l,g)),m>7&&et(e,t,7,u)&&(h=!0,g=En(e,d,t,7,u,g)),m>8&&et(e,t,8,c)&&(h=!0,g=En(e,d,t,8,c,g)),m>9&&et(e,t,9,p)&&(h=!0,g=En(e,d,t,9,p,g)),g&&f.ngOnChanges(g),2&e.state&&65536&t.flags&&f.ngOnInit(),262144&t.flags&&f.ngDoCheck(),h}function kn(e,t,n){for(var r=Be(e,t.nodeIndex),o=r.instance,i=!1,a=void 0,s=0;s0,r=t.provider;switch(201347067&t.flags){case 512:return Sn(e,t.parent,n,r.value,r.deps);case 1024:return On(e,t.parent,n,r.value,r.deps);case 2048:return Pn(e,t.parent,n,r.deps[0]);case 256:return r.value}}function Sn(e,t,n,r,o){var i=o.length;switch(i){case 0:return new r;case 1:return new r(Pn(e,t,n,o[0]));case 2:return new r(Pn(e,t,n,o[0]),Pn(e,t,n,o[1]));case 3:return new r(Pn(e,t,n,o[0]),Pn(e,t,n,o[1]),Pn(e,t,n,o[2]));default:for(var a=new Array(i),s=0;s0&&tt(e,t,0,n)&&(f=!0),h>1&&tt(e,t,1,r)&&(f=!0),h>2&&tt(e,t,2,o)&&(f=!0),h>3&&tt(e,t,3,i)&&(f=!0),h>4&&tt(e,t,4,a)&&(f=!0),h>5&&tt(e,t,5,s)&&(f=!0),h>6&&tt(e,t,6,l)&&(f=!0),h>7&&tt(e,t,7,u)&&(f=!0),h>8&&tt(e,t,8,c)&&(f=!0),h>9&&tt(e,t,9,p)&&(f=!0),f){var g=He(e,t.nodeIndex),m=void 0;switch(201347067&t.flags){case 32:m=new Array(d.length),h>0&&(m[0]=n),h>1&&(m[1]=r),h>2&&(m[2]=o),h>3&&(m[3]=i),h>4&&(m[4]=a),h>5&&(m[5]=s),h>6&&(m[6]=l),h>7&&(m[7]=u),h>8&&(m[8]=c),h>9&&(m[9]=p);break;case 64:m={},h>0&&(m[d[0].name]=n),h>1&&(m[d[1].name]=r),h>2&&(m[d[2].name]=o),h>3&&(m[d[3].name]=i),h>4&&(m[d[4].name]=a),h>5&&(m[d[5].name]=s),h>6&&(m[d[6].name]=l),h>7&&(m[d[7].name]=u),h>8&&(m[d[8].name]=c),h>9&&(m[d[9].name]=p);break;case 128:var y=n;switch(h){case 1:m=y.transform(n);break;case 2:m=y.transform(r);break;case 3:m=y.transform(r,o);break;case 4:m=y.transform(r,o,i);break;case 5:m=y.transform(r,o,i,a);break;case 6:m=y.transform(r,o,i,a,s);break;case 7:m=y.transform(r,o,i,a,s,l);break;case 8:m=y.transform(r,o,i,a,s,l,u);break;case 9:m=y.transform(r,o,i,a,s,l,u,c);break;case 10:m=y.transform(r,o,i,a,s,l,u,c,p)}}g.value=m}return f}function Wn(e,t,n){for(var r=t.bindings,o=!1,i=0;i0&&tt(e,t,0,n)&&(d=!0),h>1&&tt(e,t,1,r)&&(d=!0),h>2&&tt(e,t,2,o)&&(d=!0),h>3&&tt(e,t,3,i)&&(d=!0),h>4&&tt(e,t,4,a)&&(d=!0),h>5&&tt(e,t,5,s)&&(d=!0),h>6&&tt(e,t,6,l)&&(d=!0),h>7&&tt(e,t,7,u)&&(d=!0),h>8&&tt(e,t,8,c)&&(d=!0),h>9&&tt(e,t,9,p)&&(d=!0),d){var g=t.text.prefix;h>0&&(g+=Kn(n,f[0])),h>1&&(g+=Kn(r,f[1])),h>2&&(g+=Kn(o,f[2])),h>3&&(g+=Kn(i,f[3])),h>4&&(g+=Kn(a,f[4])),h>5&&(g+=Kn(s,f[5])),h>6&&(g+=Kn(l,f[6])),h>7&&(g+=Kn(u,f[7])),h>8&&(g+=Kn(c,f[8])),h>9&&(g+=Kn(p,f[9]));var m=ze(e,t.nodeIndex).renderText;e.renderer.setValue(m,g)}return d}function Jn(e,t,n){for(var r=t.bindings,o=!1,i=0;i0)u=g,er(g)||(c=g);else for(;u&&h===u.nodeIndex+u.childCount;){var b=u.parent;b&&(b.childFlags|=u.childFlags,b.childMatchedQueries|=u.childMatchedQueries),u=b,c=u&&er(u)?u.renderParent:u}}var _=function(e,n,r,o){return t[n].element.handleEvent(e,r,o)};return{factory:null,nodeFlags:a,rootNodeFlags:s,nodeMatchedQueries:l,flags:e,nodes:t,updateDirectives:n||Ps,updateRenderer:r||Ps,handleEvent:_,bindingCount:o,outputCount:i,lastRenderRootNode:f}}function er(e){return 0!=(1&e.flags)&&null===e.element.name}function tr(e,t,n){var r=t.element&&t.element.template;if(r){if(!r.lastRenderRootNode)throw new Error("Illegal State: Embedded templates without nodes are not allowed!");if(r.lastRenderRootNode&&16777216&r.lastRenderRootNode.flags)throw new Error("Illegal State: Last root node of a template can't have embedded views, at index "+t.nodeIndex+"!")}if(20224&t.flags){if(0==(1&(e?e.flags:0)))throw new Error("Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index "+t.nodeIndex+"!")}if(t.query){if(67108864&t.flags&&(!e||0==(16384&e.flags)))throw new Error("Illegal State: Content Query nodes need to be children of directives, at index "+t.nodeIndex+"!");if(134217728&t.flags&&e)throw new Error("Illegal State: View Query nodes have to be top level nodes, at index "+t.nodeIndex+"!")}if(t.childCount){var o=e?e.nodeIndex+e.childCount:n-1;if(t.nodeIndex<=o&&t.nodeIndex+t.childCount>o)throw new Error("Illegal State: childCount of node leads outside of parent, at index "+t.nodeIndex+"!")}}function nr(e,t,n,r){var o=ir(e.root,e.renderer,e,t,n);return ar(o,e.component,r),sr(o),o}function rr(e,t,n){var r=ir(e,e.renderer,null,null,t);return ar(r,n,n),sr(r),r}function or(e,t,n,r){var o,i=t.element.componentRendererType;return o=i?e.root.rendererFactory.createRenderer(r,i):e.root.renderer,ir(e.root,o,e,t.element.componentProvider,n)}function ir(e,t,n,r,o){var i=new Array(o.nodes.length),a=o.outputCount?new Array(o.outputCount):null;return{def:o,parent:n,viewContainerParent:null,parentNodeDef:r,context:null,component:null,nodes:i,state:13,root:e,renderer:t,oldValues:new Array(o.bindingCount),disposables:a}}function ar(e,t,n){e.component=t,e.context=n}function sr(e){var t;if(ct(e)){var n=e.parentNodeDef;t=Ve(e.parent,n.parent.nodeIndex).renderElement}for(var r=e.def,o=e.nodes,i=0;i0&&nt(e,t,0,n),d>1&&nt(e,t,1,r),d>2&&nt(e,t,2,o),d>3&&nt(e,t,3,i),d>4&&nt(e,t,4,a),d>5&&nt(e,t,5,s),d>6&&nt(e,t,6,l),d>7&&nt(e,t,7,u),d>8&&nt(e,t,8,c),d>9&&nt(e,t,9,p)}function mr(e,t,n){for(var r=0;r=this._providers.length)throw I(e);return this._providers[e]},e.prototype._new=function(e){if(this._constructionCounter++>this._getMaxNumberOfObjects())throw P(this,e.key);return this._instantiateProvider(e)},e.prototype._getMaxNumberOfObjects=function(){return this.objs.length},e.prototype._instantiateProvider=function(e){if(e.multiProvider){for(var t=new Array(e.resolvedFactories.length),n=0;n0)e._bootstrapComponents.forEach(function(e){return t.bootstrap(e)});else{if(!e.instance.ngDoBootstrap)throw new Error("The module "+a(e.instance.constructor)+' was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.');e.instance.ngDoBootstrap(t)}this._modules.push(e)},t}(Sa);Oa.decorators=[{type:ci}],Oa.ctorParameters=function(){return[{type:yi}]};var Pa=function(){function e(){}return e.prototype.bootstrap=function(e,t){},e.prototype.tick=function(){},e.prototype.componentTypes=function(){},e.prototype.components=function(){},e.prototype.attachView=function(e){},e.prototype.detachView=function(e){},e.prototype.viewCount=function(){},e.prototype.isStable=function(){},e}(),Ma=function(e){function t(t,n,r,i,a,s){var l=e.call(this)||this;l._zone=t,l._console=n,l._injector=r,l._exceptionHandler=i,l._componentFactoryResolver=a,l._initStatus=s,l._bootstrapListeners=[],l._rootComponents=[],l._rootComponentTypes=[],l._views=[],l._runningTick=!1,l._enforceNoNewChanges=!1,l._stable=!0,l._enforceNoNewChanges=ce(),l._zone.onMicrotaskEmpty.subscribe({next:function(){l._zone.run(function(){l.tick()})}});var u=new Oo.Observable(function(e){l._stable=l._zone.isStable&&!l._zone.hasPendingMacrotasks&&!l._zone.hasPendingMicrotasks,l._zone.runOutsideAngular(function(){e.next(l._stable),e.complete()})}),c=new Oo.Observable(function(e){var t;l._zone.runOutsideAngular(function(){t=l._zone.onStable.subscribe(function(){ga.assertNotInAngularZone(),o(function(){l._stable||l._zone.hasPendingMacrotasks||l._zone.hasPendingMicrotasks||(l._stable=!0,e.next(!0))})})});var n=l._zone.onUnstable.subscribe(function(){ga.assertInAngularZone(),l._stable&&(l._stable=!1,l._zone.runOutsideAngular(function(){e.next(!1)}))});return function(){t.unsubscribe(),n.unsubscribe()}});return l._isStable=Object(Po.merge)(u,Mo.share.call(c)),l}return So.a(t,e),t.prototype.attachView=function(e){var t=e;this._views.push(t),t.attachToAppRef(this)},t.prototype.detachView=function(e){var t=e;ye(this._views,t),t.detachFromAppRef()},t.prototype.bootstrap=function(e,t){var n=this;if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");var r;r=e instanceof Qi?e:this._componentFactoryResolver.resolveComponentFactory(e),this._rootComponentTypes.push(r.componentType);var o=r instanceof aa?null:this._injector.get(sa),i=t||r.selector,a=r.create(yi.NULL,[],i,o);a.onDestroy(function(){n._unloadComponent(a)});var s=a.injector.get(ma,null);return s&&a.injector.get(ya).registerApplication(a.location.nativeElement,s),this._loadComponent(a),ce()&&this._console.log("Angular is running in the development mode. Call enableProdMode() to enable the production mode."),a},t.prototype._loadComponent=function(e){this.attachView(e.hostView),this.tick(),this._rootComponents.push(e),this._injector.get($i,[]).concat(this._bootstrapListeners).forEach(function(t){return t(e)})},t.prototype._unloadComponent=function(e){this.detachView(e.hostView),ye(this._rootComponents,e)},t.prototype.tick=function(){var e=this;if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");var n=t._tickScope();try{this._runningTick=!0,this._views.forEach(function(e){return e.detectChanges()}),this._enforceNoNewChanges&&this._views.forEach(function(e){return e.checkNoChanges()})}catch(t){this._zone.runOutsideAngular(function(){return e._exceptionHandler.handleError(t)})}finally{this._runningTick=!1,pa(n)}},t.prototype.ngOnDestroy=function(){this._views.slice().forEach(function(e){return e.destroy()})},Object.defineProperty(t.prototype,"viewCount",{get:function(){return this._views.length},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentTypes",{get:function(){return this._rootComponentTypes},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"components",{get:function(){return this._rootComponents},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isStable",{get:function(){return this._isStable},enumerable:!0,configurable:!0}),t}(Pa);Ma._tickScope=ca("ApplicationRef#tick()"),Ma.decorators=[{type:ci}],Ma.ctorParameters=function(){return[{type:ga},{type:Wi},{type:yi},{type:xi},{type:na},{type:Vi}]};var Ea=function(){function e(e,t,n,r,o,i){this.id=e,this.templateUrl=t,this.slotCount=n,this.encapsulation=r,this.styles=o,this.animations=i}return e}(),Ta=function(){function e(){}return e.prototype.injector=function(){},e.prototype.component=function(){},e.prototype.providerTokens=function(){},e.prototype.references=function(){},e.prototype.context=function(){},e.prototype.source=function(){},e}(),Ia=function(){function e(){}return e.prototype.selectRootElement=function(e,t){},e.prototype.createElement=function(e,t,n){},e.prototype.createViewRoot=function(e){},e.prototype.createTemplateAnchor=function(e,t){},e.prototype.createText=function(e,t,n){},e.prototype.projectNodes=function(e,t){},e.prototype.attachViewAfter=function(e,t){},e.prototype.detachView=function(e){},e.prototype.destroyView=function(e,t){},e.prototype.listen=function(e,t,n){},e.prototype.listenGlobal=function(e,t,n){},e.prototype.setElementProperty=function(e,t,n){},e.prototype.setElementAttribute=function(e,t,n){},e.prototype.setBindingDebugInfo=function(e,t,n){},e.prototype.setElementClass=function(e,t,n){},e.prototype.setElementStyle=function(e,t,n){},e.prototype.invokeElementMethod=function(e,t,n){},e.prototype.setText=function(e,t){},e.prototype.animate=function(e,t,n,r,o,i,a){},e}(),Aa=(new Io("Renderer2Interceptor"),function(){function e(){}return e.prototype.renderComponent=function(e){},e}()),Ra=function(){function e(){}return e.prototype.createRenderer=function(e,t){},e.prototype.begin=function(){},e.prototype.end=function(){},e.prototype.whenRenderingDone=function(){},e}(),Na={};Na.Important=1,Na.DashCase=2,Na[Na.Important]="Important",Na[Na.DashCase]="DashCase";var ja=function(){function e(){}return e.prototype.data=function(){},e.prototype.destroy=function(){},e.prototype.createElement=function(e,t){},e.prototype.createComment=function(e){},e.prototype.createText=function(e){},e.prototype.appendChild=function(e,t){},e.prototype.insertBefore=function(e,t,n){},e.prototype.removeChild=function(e,t){},e.prototype.selectRootElement=function(e){},e.prototype.parentNode=function(e){},e.prototype.nextSibling=function(e){},e.prototype.setAttribute=function(e,t,n,r){},e.prototype.removeAttribute=function(e,t,n){},e.prototype.addClass=function(e,t){},e.prototype.removeClass=function(e,t){},e.prototype.setStyle=function(e,t,n,r){},e.prototype.removeStyle=function(e,t,n){},e.prototype.setProperty=function(e,t,n){},e.prototype.setValue=function(e,t){},e.prototype.listen=function(e,t,n){},e}(),Da=function(){function e(e){this.nativeElement=e}return e}(),La=function(){function e(){}return e.prototype.load=function(e){},e}(),Fa=new Map,za=function(){function e(){this._dirty=!0,this._results=[],this._emitter=new ha}return Object.defineProperty(e.prototype,"changes",{get:function(){return this._emitter},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._results.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"first",{get:function(){return this._results[0]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"last",{get:function(){return this._results[this.length-1]},enumerable:!0,configurable:!0}),e.prototype.map=function(e){return this._results.map(e)},e.prototype.filter=function(e){return this._results.filter(e)},e.prototype.find=function(e){return this._results.find(e)},e.prototype.reduce=function(e,t){return this._results.reduce(e,t)},e.prototype.forEach=function(e){this._results.forEach(e)},e.prototype.some=function(e){return this._results.some(e)},e.prototype.toArray=function(){return this._results.slice()},e.prototype[r()]=function(){return this._results[r()]()},e.prototype.toString=function(){return this._results.toString()},e.prototype.reset=function(e){this._results=_e(e),this._dirty=!1},e.prototype.notifyOnChanges=function(){this._emitter.emit(this)},e.prototype.setDirty=function(){this._dirty=!0},Object.defineProperty(e.prototype,"dirty",{get:function(){return this._dirty},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){this._emitter.complete(),this._emitter.unsubscribe()},e}(),Va=function(){function e(){}return e}(),Ba={factoryPathPrefix:"",factoryPathSuffix:".ngfactory"},Ha=function(){function e(e,t){this._compiler=e,this._config=t||Ba}return e.prototype.load=function(e){return this._compiler instanceof Xi?this.loadFactory(e):this.loadAndCompile(e)},e.prototype.loadAndCompile=function(e){var t=this,r=e.split("#"),o=r[0],i=r[1];return void 0===i&&(i="default"),n(216)(o).then(function(e){return e[i]}).then(function(e){return we(e,o,i)}).then(function(e){return t._compiler.compileModuleAsync(e)})},e.prototype.loadFactory=function(e){var t=e.split("#"),r=t[0],o=t[1],i="NgFactory";return void 0===o&&(o="default",i=""),n(216)(this._config.factoryPathPrefix+r+this._config.factoryPathSuffix).then(function(e){return e[o+i]}).then(function(e){return we(e,r,o)})},e}();Ha.decorators=[{type:ci}],Ha.ctorParameters=function(){return[{type:Xi},{type:Va,decorators:[{type:ui}]}]};var qa=function(){function e(){}return e.prototype.elementRef=function(){},e.prototype.createEmbeddedView=function(e){},e}(),Ua=function(){function e(){}return e.prototype.element=function(){},e.prototype.injector=function(){},e.prototype.parentInjector=function(){},e.prototype.clear=function(){},e.prototype.get=function(e){},e.prototype.length=function(){},e.prototype.createEmbeddedView=function(e,t,n){},e.prototype.createComponent=function(e,t,n,r,o){},e.prototype.insert=function(e,t){},e.prototype.move=function(e,t){},e.prototype.indexOf=function(e){},e.prototype.remove=function(e){},e.prototype.detach=function(e){},e}(),$a=function(){function e(){}return e.prototype.markForCheck=function(){},e.prototype.detach=function(){},e.prototype.detectChanges=function(){},e.prototype.checkNoChanges=function(){},e.prototype.reattach=function(){},e}(),Ya=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return So.a(t,e),t.prototype.destroy=function(){},t.prototype.destroyed=function(){},t.prototype.onDestroy=function(e){},t}($a),Wa=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return So.a(t,e),t.prototype.context=function(){},t.prototype.rootNodes=function(){},t}(Ya),Za=function(){function e(e,t){this.name=e,this.callback=t}return e}(),Xa=function(){function e(e,t,n){this._debugContext=n,this.nativeNode=e,t&&t instanceof Ga?t.addChild(this):this.parent=null,this.listeners=[]}return Object.defineProperty(e.prototype,"injector",{get:function(){return this._debugContext.injector},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentInstance",{get:function(){return this._debugContext.component},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this._debugContext.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"references",{get:function(){return this._debugContext.references},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"providerTokens",{get:function(){return this._debugContext.providerTokens},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"source",{get:function(){return"Deprecated since v4"},enumerable:!0,configurable:!0}),e}(),Ga=function(e){function t(t,n,r){var o=e.call(this,t,n,r)||this;return o.properties={},o.attributes={},o.classes={},o.styles={},o.childNodes=[],o.nativeElement=t,o}return So.a(t,e),t.prototype.addChild=function(e){e&&(this.childNodes.push(e),e.parent=this)},t.prototype.removeChild=function(e){var t=this.childNodes.indexOf(e);-1!==t&&(e.parent=null,this.childNodes.splice(t,1))},t.prototype.insertChildrenAfter=function(e,t){var n=this,r=this.childNodes.indexOf(e);-1!==r&&((o=this.childNodes).splice.apply(o,[r+1,0].concat(t)),t.forEach(function(e){e.parent&&e.parent.removeChild(e),e.parent=n}));var o},t.prototype.insertBefore=function(e,t){var n=this.childNodes.indexOf(e);-1===n?this.addChild(t):(t.parent&&t.parent.removeChild(t),t.parent=this,this.childNodes.splice(n,0,t))},t.prototype.query=function(e){return this.queryAll(e)[0]||null},t.prototype.queryAll=function(e){var t=[];return ke(this,e,t),t},t.prototype.queryAllNodes=function(e){var t=[];return Ce(this,e,t),t},Object.defineProperty(t.prototype,"children",{get:function(){return this.childNodes.filter(function(e){return e instanceof t})},enumerable:!0,configurable:!0}),t.prototype.triggerEventHandler=function(e,t){this.listeners.forEach(function(n){n.name==e&&n.callback(t)})},t}(Xa),Ja=new Map,Ka=function(){function e(e){this.wrapped=e}return e.wrap=function(t){return new e(t)},e}(),Qa=function(){function e(){this.hasWrappedValue=!1}return e.prototype.unwrap=function(e){return e instanceof Ka?(this.hasWrappedValue=!0,e.wrapped):e},e.prototype.reset=function(){this.hasWrappedValue=!1},e}(),es=function(){function e(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}return e.prototype.isFirstChange=function(){return this.firstChange},e}(),ts=function(){function e(){}return e.prototype.supports=function(e){return Ee(e)},e.prototype.create=function(e,t){return new rs(t||e)},e}(),ns=function(e,t){return t},rs=function(){function e(e){this._length=0,this._collection=null,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=e||ns}return Object.defineProperty(e.prototype,"collection",{get:function(){return this._collection},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._length},enumerable:!0,configurable:!0}),e.prototype.forEachItem=function(e){var t;for(t=this._itHead;null!==t;t=t._next)e(t)},e.prototype.forEachOperation=function(e){for(var t=this._itHead,n=this._removalsHead,r=0,o=null;t||n;){var i=!n||t&&t.currentIndex"+a(this.currentIndex)+"]"},e}(),is=function(){function e(){this._head=null,this._tail=null}return e.prototype.add=function(e){null===this._head?(this._head=this._tail=e,e._nextDup=null,e._prevDup=null):(this._tail._nextDup=e,e._prevDup=this._tail,e._nextDup=null,this._tail=e)},e.prototype.get=function(e,t){var n;for(n=this._head;null!==n;n=n._nextDup)if((null===t||t<=n.currentIndex)&&i(n.trackById,e))return n;return null},e.prototype.remove=function(e){var t=e._prevDup,n=e._nextDup;return null===t?this._head=n:t._nextDup=n,null===n?this._tail=t:n._prevDup=t,null===this._head},e}(),as=function(){function e(){this.map=new Map}return e.prototype.put=function(e){var t=e.trackById,n=this.map.get(t);n||(n=new is,this.map.set(t,n)),n.add(e)},e.prototype.get=function(e,t){var n=e,r=this.map.get(n);return r?r.get(e,t):null},e.prototype.remove=function(e){var t=e.trackById;return this.map.get(t).remove(e)&&this.map.delete(t),e},Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0===this.map.size},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.map.clear()},e.prototype.toString=function(){return"_DuplicateMap("+a(this.map)+")"},e}(),ss=function(){function e(){}return e.prototype.supports=function(e){return e instanceof Map||Ae(e)},e.prototype.create=function(e){return new ls},e}(),ls=function(){function e(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}return Object.defineProperty(e.prototype,"isDirty",{get:function(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead},enumerable:!0,configurable:!0}),e.prototype.forEachItem=function(e){var t;for(t=this._mapHead;null!==t;t=t._next)e(t)},e.prototype.forEachPreviousItem=function(e){var t;for(t=this._previousMapHead;null!==t;t=t._nextPrevious)e(t)},e.prototype.forEachChangedItem=function(e){var t;for(t=this._changesHead;null!==t;t=t._nextChanged)e(t)},e.prototype.forEachAddedItem=function(e){var t;for(t=this._additionsHead;null!==t;t=t._nextAdded)e(t)},e.prototype.forEachRemovedItem=function(e){var t;for(t=this._removalsHead;null!==t;t=t._nextRemoved)e(t)},e.prototype.diff=function(e){if(e){if(!(e instanceof Map||Ae(e)))throw new Error("Error trying to diff '"+a(e)+"'. Only maps and objects are allowed")}else e=new Map;return this.check(e)?this:null},e.prototype.onDestroy=function(){},e.prototype.check=function(e){var t=this;this._reset();var n=this._mapHead;if(this._appendAfter=null,this._forEach(e,function(e,r){if(n&&n.key===r)t._maybeAddToChanges(n,e),t._appendAfter=n,n=n._next;else{var o=t._getOrCreateRecordForKey(r,e);n=t._insertBeforeOrAppend(n,o)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(var r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty},e.prototype._insertBeforeOrAppend=function(e,t){if(e){var n=e._prev;return t._next=e,t._prev=n,e._prev=t,n&&(n._next=t),e===this._mapHead&&(this._mapHead=t),this._appendAfter=e,e}return this._appendAfter?(this._appendAfter._next=t,t._prev=this._appendAfter):this._mapHead=t,this._appendAfter=t,null},e.prototype._getOrCreateRecordForKey=function(e,t){if(this._records.has(e)){var n=this._records.get(e);this._maybeAddToChanges(n,t);var r=n._prev,o=n._next;return r&&(r._next=o),o&&(o._prev=r),n._next=null,n._prev=null,n}var i=new us(e);return this._records.set(e,i),i.currentValue=t,this._addToAdditions(i),i},e.prototype._reset=function(){if(this.isDirty){var e=void 0;for(this._previousMapHead=this._mapHead,e=this._previousMapHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._changesHead;null!==e;e=e._nextChanged)e.previousValue=e.currentValue;for(e=this._additionsHead;null!=e;e=e._nextAdded)e.previousValue=e.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}},e.prototype._maybeAddToChanges=function(e,t){i(t,e.currentValue)||(e.previousValue=e.currentValue,e.currentValue=t,this._addToChanges(e))},e.prototype._addToAdditions=function(e){null===this._additionsHead?this._additionsHead=this._additionsTail=e:(this._additionsTail._nextAdded=e,this._additionsTail=e)},e.prototype._addToChanges=function(e){null===this._changesHead?this._changesHead=this._changesTail=e:(this._changesTail._nextChanged=e,this._changesTail=e)},e.prototype._forEach=function(e,t){e instanceof Map?e.forEach(t):Object.keys(e).forEach(function(n){return t(e[n],n)})},e}(),us=function(){function e(e){this.key=e,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}return e}(),cs=function(){function e(e){this.factories=e}return e.create=function(t,n){if(null!=n){var r=n.factories.slice();return t=t.concat(r),new e(t)}return new e(t)},e.extend=function(t){return{provide:e,useFactory:function(n){if(!n)throw new Error("Cannot extend IterableDiffers without a parent injector");return e.create(t,n)},deps:[[e,new di,new ui]]}},e.prototype.find=function(e){var t=this.factories.find(function(t){return t.supports(e)});if(null!=t)return t;throw new Error("Cannot find a differ supporting object '"+e+"' of type '"+Ne(e)+"'")},e}(),ps=function(){function e(e){this.factories=e}return e.create=function(t,n){if(n){var r=n.factories.slice();t=t.concat(r)}return new e(t)},e.extend=function(t){return{provide:e,useFactory:function(n){if(!n)throw new Error("Cannot extend KeyValueDiffers without a parent injector");return e.create(t,n)},deps:[[e,new di,new ui]]}},e.prototype.find=function(e){var t=this.factories.find(function(t){return t.supports(e)});if(t)return t;throw new Error("Cannot find a differ supporting object '"+e+"'")},e}(),ds=[new ss],fs=[new ts],hs=new cs(fs),gs=new ps(ds),ms=[{provide:Ui,useValue:"unknown"},Oa,{provide:Sa,useExisting:Oa},{provide:Ei,useFactory:je,deps:[]},ya,Wi],ys=de(null,"core",ms),vs=new Io("LocaleId"),bs=new Io("Translations"),_s=new Io("TranslationsFormat"),ws={};ws.Error=0,ws.Warning=1,ws.Ignore=2,ws[ws.Error]="Error",ws[ws.Warning]="Warning",ws[ws.Ignore]="Ignore";var xs=function(){function e(e){}return e}();xs.decorators=[{type:ri,args:[{providers:[Ma,{provide:Pa,useExisting:Ma},Vi,Xi,Hi,{provide:cs,useFactory:De},{provide:ps,useFactory:Le},{provide:vs,useFactory:Fe,deps:[[new li(vs),new ui,new di]]}]}]}],xs.ctorParameters=function(){return[{type:Pa}]};var ks={};ks.NONE=0,ks.HTML=1,ks.STYLE=2,ks.SCRIPT=3,ks.URL=4,ks.RESOURCE_URL=5,ks[ks.NONE]="NONE",ks[ks.HTML]="HTML",ks[ks.STYLE]="STYLE",ks[ks.SCRIPT]="SCRIPT",ks[ks.URL]="URL",ks[ks.RESOURCE_URL]="RESOURCE_URL";var Cs=function(){function e(){}return e.prototype.sanitize=function(e,t){},e}(),Ss=function(){function e(){}return e.prototype.view=function(){},e.prototype.nodeIndex=function(){},e.prototype.injector=function(){},e.prototype.component=function(){},e.prototype.providerTokens=function(){},e.prototype.references=function(){},e.prototype.context=function(){},e.prototype.componentRenderElement=function(){},e.prototype.renderNode=function(){},e.prototype.logError=function(e){for(var t=[],n=1;n=0;t--){var n=Jt(this._data,t);Os.destroyView(n)}},e.prototype.get=function(e){var t=this._embeddedViews[e];if(t){var n=new qs(t);return n.attachToViewContainerRef(this),n}return null},Object.defineProperty(e.prototype,"length",{get:function(){return this._embeddedViews.length},enumerable:!0,configurable:!0}),e.prototype.createEmbeddedView=function(e,t,n){var r=e.createEmbeddedView(t||{});return this.insert(r,n),r},e.prototype.createComponent=function(e,t,n,r,o){var i=n||this.parentInjector;o||e instanceof aa||(o=i.get(sa));var a=e.create(i,r,void 0,o);return this.insert(a.hostView,t),a},e.prototype.insert=function(e,t){if(e.destroyed)throw new Error("Cannot insert a destroyed View in a ViewContainer!");var n=e,r=n._view;return Zt(this._view,this._data,t,r),n.attachToViewContainerRef(this),e},e.prototype.move=function(e,t){if(e.destroyed)throw new Error("Cannot move a destroyed View in a ViewContainer!");var n=this._embeddedViews.indexOf(e._view);return Qt(this._data,n,t),e},e.prototype.indexOf=function(e){return this._embeddedViews.indexOf(e._view)},e.prototype.remove=function(e){var t=Jt(this._data,e);t&&Os.destroyView(t)},e.prototype.detach=function(e){var t=Jt(this._data,e);return t?new qs(t):null},e}(),qs=function(){function e(e){this._view=e,this._viewContainerRef=null,this._appRef=null}return Object.defineProperty(e.prototype,"rootNodes",{get:function(){return yt(this._view)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this._view.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"destroyed",{get:function(){return 0!=(128&this._view.state)},enumerable:!0,configurable:!0}),e.prototype.markForCheck=function(){rt(this._view)},e.prototype.detach=function(){this._view.state&=-5},e.prototype.detectChanges=function(){var e=this._view.root.rendererFactory;e.begin&&e.begin(),Os.checkAndUpdateView(this._view),e.end&&e.end()},e.prototype.checkNoChanges=function(){Os.checkNoChangesView(this._view)},e.prototype.reattach=function(){this._view.state|=4},e.prototype.onDestroy=function(e){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(e)},e.prototype.destroy=function(){this._appRef?this._appRef.detachView(this):this._viewContainerRef&&this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),Os.destroyView(this._view)},e.prototype.detachFromAppRef=function(){this._appRef=null,tn(this._view),Os.dirtyParentQueries(this._view)},e.prototype.attachToAppRef=function(e){if(this._viewContainerRef)throw new Error("This view is already attached to a ViewContainer!");this._appRef=e},e.prototype.attachToViewContainerRef=function(e){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._viewContainerRef=e},e}(),Us=function(e){function t(t,n){var r=e.call(this)||this;return r._parentView=t,r._def=n,r}return So.a(t,e),t.prototype.createEmbeddedView=function(e){return new qs(Os.createEmbeddedView(this._parentView,this._def,this._def.element.template,e))},Object.defineProperty(t.prototype,"elementRef",{get:function(){return new Da(Ve(this._parentView,this._def.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),t}(qa),$s=function(){function e(e,t){this.view=e,this.elDef=t}return e.prototype.get=function(e,t){void 0===t&&(t=yi.THROW_IF_NOT_FOUND);var n=!!this.elDef&&0!=(33554432&this.elDef.flags);return Os.resolveDep(this.view,this.elDef,n,{flags:0,token:e,tokenKey:Ge(e)},t)},e}(),Ys=function(){function e(e){this.delegate=e}return e.prototype.selectRootElement=function(e){return this.delegate.selectRootElement(e)},e.prototype.createElement=function(e,t){var n=kt(t),r=n[0],o=n[1],i=this.delegate.createElement(o,r);return e&&this.delegate.appendChild(e,i),i},e.prototype.createViewRoot=function(e){return e},e.prototype.createTemplateAnchor=function(e){var t=this.delegate.createComment("");return e&&this.delegate.appendChild(e,t),t},e.prototype.createText=function(e,t){var n=this.delegate.createText(t);return e&&this.delegate.appendChild(e,n),n},e.prototype.projectNodes=function(e,t){for(var n=0;n-1)return r;if(r=n.getPluralCategory(e),t.indexOf(r)>-1)return r;if(t.indexOf("other")>-1)return"other";throw new Error('No plural message found for value "'+e+'"')}function a(e,t){"string"==typeof t&&(t=parseInt(t,10));var n=t,r=n.toString().replace(/^[^.]*\.?/,""),o=Math.floor(Math.abs(n)),i=r.length,a=parseInt(r,10),s=parseInt(n.toString().replace(/^[^.]*\.?|0+$/g,""),10)||0;switch(e.split("-")[0].toLowerCase()){case"af":case"asa":case"az":case"bem":case"bez":case"bg":case"brx":case"ce":case"cgg":case"chr":case"ckb":case"ee":case"el":case"eo":case"es":case"eu":case"fo":case"fur":case"gsw":case"ha":case"haw":case"hu":case"jgo":case"jmc":case"ka":case"kk":case"kkj":case"kl":case"ks":case"ksb":case"ky":case"lb":case"lg":case"mas":case"mgo":case"ml":case"mn":case"nb":case"nd":case"ne":case"nn":case"nnh":case"nyn":case"om":case"or":case"os":case"ps":case"rm":case"rof":case"rwk":case"saq":case"seh":case"sn":case"so":case"sq":case"ta":case"te":case"teo":case"tk":case"tr":case"ug":case"uz":case"vo":case"vun":case"wae":case"xog":return 1===n?U.One:U.Other;case"ak":case"ln":case"mg":case"pa":case"ti":return n===Math.floor(n)&&n>=0&&n<=1?U.One:U.Other;case"am":case"as":case"bn":case"fa":case"gu":case"hi":case"kn":case"mr":case"zu":return 0===o||1===n?U.One:U.Other;case"ar":return 0===n?U.Zero:1===n?U.One:2===n?U.Two:n%100===Math.floor(n%100)&&n%100>=3&&n%100<=10?U.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=99?U.Many:U.Other;case"ast":case"ca":case"de":case"en":case"et":case"fi":case"fy":case"gl":case"it":case"nl":case"sv":case"sw":case"ur":case"yi":return 1===o&&0===i?U.One:U.Other;case"be":return n%10==1&&n%100!=11?U.One:n%10===Math.floor(n%10)&&n%10>=2&&n%10<=4&&!(n%100>=12&&n%100<=14)?U.Few:n%10==0||n%10===Math.floor(n%10)&&n%10>=5&&n%10<=9||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=14?U.Many:U.Other;case"br":return n%10==1&&n%100!=11&&n%100!=71&&n%100!=91?U.One:n%10==2&&n%100!=12&&n%100!=72&&n%100!=92?U.Two:n%10===Math.floor(n%10)&&(n%10>=3&&n%10<=4||n%10==9)&&!(n%100>=10&&n%100<=19||n%100>=70&&n%100<=79||n%100>=90&&n%100<=99)?U.Few:0!==n&&n%1e6==0?U.Many:U.Other;case"bs":case"hr":case"sr":return 0===i&&o%10==1&&o%100!=11||a%10==1&&a%100!=11?U.One:0===i&&o%10===Math.floor(o%10)&&o%10>=2&&o%10<=4&&!(o%100>=12&&o%100<=14)||a%10===Math.floor(a%10)&&a%10>=2&&a%10<=4&&!(a%100>=12&&a%100<=14)?U.Few:U.Other;case"cs":case"sk":return 1===o&&0===i?U.One:o===Math.floor(o)&&o>=2&&o<=4&&0===i?U.Few:0!==i?U.Many:U.Other;case"cy":return 0===n?U.Zero:1===n?U.One:2===n?U.Two:3===n?U.Few:6===n?U.Many:U.Other;case"da":return 1===n||0!==s&&(0===o||1===o)?U.One:U.Other;case"dsb":case"hsb":return 0===i&&o%100==1||a%100==1?U.One:0===i&&o%100==2||a%100==2?U.Two:0===i&&o%100===Math.floor(o%100)&&o%100>=3&&o%100<=4||a%100===Math.floor(a%100)&&a%100>=3&&a%100<=4?U.Few:U.Other;case"ff":case"fr":case"hy":case"kab":return 0===o||1===o?U.One:U.Other;case"fil":return 0===i&&(1===o||2===o||3===o)||0===i&&o%10!=4&&o%10!=6&&o%10!=9||0!==i&&a%10!=4&&a%10!=6&&a%10!=9?U.One:U.Other;case"ga":return 1===n?U.One:2===n?U.Two:n===Math.floor(n)&&n>=3&&n<=6?U.Few:n===Math.floor(n)&&n>=7&&n<=10?U.Many:U.Other;case"gd":return 1===n||11===n?U.One:2===n||12===n?U.Two:n===Math.floor(n)&&(n>=3&&n<=10||n>=13&&n<=19)?U.Few:U.Other;case"gv":return 0===i&&o%10==1?U.One:0===i&&o%10==2?U.Two:0!==i||o%100!=0&&o%100!=20&&o%100!=40&&o%100!=60&&o%100!=80?0!==i?U.Many:U.Other:U.Few;case"he":return 1===o&&0===i?U.One:2===o&&0===i?U.Two:0!==i||n>=0&&n<=10||n%10!=0?U.Other:U.Many;case"is":return 0===s&&o%10==1&&o%100!=11||0!==s?U.One:U.Other;case"ksh":return 0===n?U.Zero:1===n?U.One:U.Other;case"kw":case"naq":case"se":case"smn":return 1===n?U.One:2===n?U.Two:U.Other;case"lag":return 0===n?U.Zero:0!==o&&1!==o||0===n?U.Other:U.One;case"lt":return n%10!=1||n%100>=11&&n%100<=19?n%10===Math.floor(n%10)&&n%10>=2&&n%10<=9&&!(n%100>=11&&n%100<=19)?U.Few:0!==a?U.Many:U.Other:U.One;case"lv":case"prg":return n%10==0||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19||2===i&&a%100===Math.floor(a%100)&&a%100>=11&&a%100<=19?U.Zero:n%10==1&&n%100!=11||2===i&&a%10==1&&a%100!=11||2!==i&&a%10==1?U.One:U.Other;case"mk":return 0===i&&o%10==1||a%10==1?U.One:U.Other;case"mt":return 1===n?U.One:0===n||n%100===Math.floor(n%100)&&n%100>=2&&n%100<=10?U.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19?U.Many:U.Other;case"pl":return 1===o&&0===i?U.One:0===i&&o%10===Math.floor(o%10)&&o%10>=2&&o%10<=4&&!(o%100>=12&&o%100<=14)?U.Few:0===i&&1!==o&&o%10===Math.floor(o%10)&&o%10>=0&&o%10<=1||0===i&&o%10===Math.floor(o%10)&&o%10>=5&&o%10<=9||0===i&&o%100===Math.floor(o%100)&&o%100>=12&&o%100<=14?U.Many:U.Other;case"pt":return n===Math.floor(n)&&n>=0&&n<=2&&2!==n?U.One:U.Other;case"ro":return 1===o&&0===i?U.One:0!==i||0===n||1!==n&&n%100===Math.floor(n%100)&&n%100>=1&&n%100<=19?U.Few:U.Other;case"ru":case"uk":return 0===i&&o%10==1&&o%100!=11?U.One:0===i&&o%10===Math.floor(o%10)&&o%10>=2&&o%10<=4&&!(o%100>=12&&o%100<=14)?U.Few:0===i&&o%10==0||0===i&&o%10===Math.floor(o%10)&&o%10>=5&&o%10<=9||0===i&&o%100===Math.floor(o%100)&&o%100>=11&&o%100<=14?U.Many:U.Other;case"shi":return 0===o||1===n?U.One:n===Math.floor(n)&&n>=2&&n<=10?U.Few:U.Other;case"si":return 0===n||1===n||0===o&&1===a?U.One:U.Other;case"sl":return 0===i&&o%100==1?U.One:0===i&&o%100==2?U.Two:0===i&&o%100===Math.floor(o%100)&&o%100>=3&&o%100<=4||0!==i?U.Few:U.Other;case"tzm":return n===Math.floor(n)&&n>=0&&n<=1||n===Math.floor(n)&&n>=11&&n<=99?U.One:U.Other;default:return U.Other}}function s(e,t){t=encodeURIComponent(t);for(var n=0,r=e.split(";");n1?"short":"narrow":"long",n}function v(e){return e.reduce(function(e,t){return Object.assign({},e,t)},{})}function b(e){return function(t,n){return f(t,n,e)}}function _(e,t,n){var r=be[e];if(r)return r(t,n);var o=e,i=we.get(o);if(!i){i=[];var a=void 0;ve.exec(e);for(var s=e;s;)a=ve.exec(s),a?(i=i.concat(a.slice(1)),s=i.pop()):(i.push(s),s=null);we.set(o,i)}return i.reduce(function(e,r){var o=_e[r];return e+(o?o(t,n):w(r))},"")}function w(e){return"''"===e?"'":e.replace(/(^'|'$)/g,"").replace(/''/g,"'")}function x(e,t,n,r,o,i,a){if(void 0===i&&(i=null),void 0===a&&(a=!1),null==n)return null;if("number"!=typeof(n="string"==typeof n&&C(n)?+n:n))throw u(e,n);var s=void 0,l=void 0,c=void 0;if(r!==me.Currency&&(s=1,l=0,c=3),o){var p=o.match(ke);if(null===p)throw new Error(o+" is not a valid digit info for number pipes");null!=p[1]&&(s=k(p[1])),null!=p[3]&&(l=k(p[3])),null!=p[5]&&(c=k(p[5]))}return ye.format(n,t,r,{minimumIntegerDigits:s,minimumFractionDigits:l,maximumFractionDigits:c,currency:i,currencyAsSymbol:a})}function k(e){var t=parseInt(e);if(isNaN(t))throw new Error("Invalid integer literal when parsing "+e);return t}function C(e){return!isNaN(e-parseFloat(e))}function S(e){return null==e||""===e}function O(e){return e instanceof Date&&!isNaN(e.valueOf())}function P(e){var t=new Date(0),n=0,r=0,o=e[8]?t.setUTCFullYear:t.setFullYear,i=e[8]?t.setUTCHours:t.setHours;e[9]&&(n=M(e[9]+e[10]),r=M(e[9]+e[11])),o.call(t,M(e[1]),M(e[2])-1,M(e[3]));var a=M(e[4]||"0")-n,s=M(e[5]||"0")-r,l=M(e[6]||"0"),u=Math.round(1e3*parseFloat("0."+(e[7]||0)));return i.call(t,a,s,l,u),t}function M(e){return parseInt(e,10)}function E(e){return e===Fe}function T(e){return e===ze}function I(e){return e===Ve}function A(e){return e===Be}Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"NgLocaleLocalization",function(){return q}),n.d(t,"NgLocalization",function(){return H}),n.d(t,"ɵparseCookieValue",function(){return s}),n.d(t,"CommonModule",function(){return je}),n.d(t,"DeprecatedI18NPipesModule",function(){return De}),n.d(t,"NgClass",function(){return $}),n.d(t,"NgFor",function(){return G}),n.d(t,"NgForOf",function(){return Z}),n.d(t,"NgForOfContext",function(){return W}),n.d(t,"NgIf",function(){return J}),n.d(t,"NgIfContext",function(){return K}),n.d(t,"NgPlural",function(){return re}),n.d(t,"NgPluralCase",function(){return oe}),n.d(t,"NgStyle",function(){return ie}),n.d(t,"NgSwitch",function(){return ee}),n.d(t,"NgSwitchCase",function(){return te}),n.d(t,"NgSwitchDefault",function(){return ne}),n.d(t,"NgTemplateOutlet",function(){return ae}),n.d(t,"NgComponentOutlet",function(){return Y}),n.d(t,"DOCUMENT",function(){return Le}),n.d(t,"AsyncPipe",function(){return de}),n.d(t,"DatePipe",function(){return Me}),n.d(t,"I18nPluralPipe",function(){return Te}),n.d(t,"I18nSelectPipe",function(){return Ie}),n.d(t,"JsonPipe",function(){return Ae}),n.d(t,"LowerCasePipe",function(){return fe}),n.d(t,"CurrencyPipe",function(){return Oe}),n.d(t,"DecimalPipe",function(){return Ce}),n.d(t,"PercentPipe",function(){return Se}),n.d(t,"SlicePipe",function(){return Re}),n.d(t,"UpperCasePipe",function(){return ge}),n.d(t,"TitleCasePipe",function(){return he}),n.d(t,"ɵPLATFORM_BROWSER_ID",function(){return Fe}),n.d(t,"ɵPLATFORM_SERVER_ID",function(){return ze}),n.d(t,"ɵPLATFORM_WORKER_APP_ID",function(){return Ve}),n.d(t,"ɵPLATFORM_WORKER_UI_ID",function(){return Be}),n.d(t,"isPlatformBrowser",function(){return E}),n.d(t,"isPlatformServer",function(){return T}),n.d(t,"isPlatformWorkerApp",function(){return I}),n.d(t,"isPlatformWorkerUi",function(){return A}),n.d(t,"VERSION",function(){return He}),n.d(t,"PlatformLocation",function(){return j}),n.d(t,"LOCATION_INITIALIZED",function(){return D}),n.d(t,"LocationStrategy",function(){return L}),n.d(t,"APP_BASE_HREF",function(){return F}),n.d(t,"HashLocationStrategy",function(){return V}),n.d(t,"PathLocationStrategy",function(){return B}),n.d(t,"Location",function(){return z}),n.d(t,"ɵa",function(){return se}),n.d(t,"ɵb",function(){return Ne});var R=n(142),N=n(1),j=function(){function e(){}return e.prototype.getBaseHrefFromDOM=function(){},e.prototype.onPopState=function(e){},e.prototype.onHashChange=function(e){},e.prototype.pathname=function(){},e.prototype.search=function(){},e.prototype.hash=function(){},e.prototype.replaceState=function(e,t,n){},e.prototype.pushState=function(e,t,n){},e.prototype.forward=function(){},e.prototype.back=function(){},e}(),D=new N.InjectionToken("Location Initialized"),L=function(){function e(){}return e.prototype.path=function(e){},e.prototype.prepareExternalUrl=function(e){},e.prototype.pushState=function(e,t,n,r){},e.prototype.replaceState=function(e,t,n,r){},e.prototype.forward=function(){},e.prototype.back=function(){},e.prototype.onPopState=function(e){},e.prototype.getBaseHref=function(){},e}(),F=new N.InjectionToken("appBaseHref"),z=function(){function e(t){var n=this;this._subject=new N.EventEmitter,this._platformStrategy=t;var r=this._platformStrategy.getBaseHref();this._baseHref=e.stripTrailingSlash(o(r)),this._platformStrategy.onPopState(function(e){n._subject.emit({url:n.path(!0),pop:!0,type:e.type})})}return e.prototype.path=function(e){return void 0===e&&(e=!1),this.normalize(this._platformStrategy.path(e))},e.prototype.isCurrentPathEqualTo=function(t,n){return void 0===n&&(n=""),this.path()==this.normalize(t+e.normalizeQueryParams(n))},e.prototype.normalize=function(t){return e.stripTrailingSlash(r(this._baseHref,o(t)))},e.prototype.prepareExternalUrl=function(e){return e&&"/"!==e[0]&&(e="/"+e),this._platformStrategy.prepareExternalUrl(e)},e.prototype.go=function(e,t){void 0===t&&(t=""),this._platformStrategy.pushState(null,"",e,t)},e.prototype.replaceState=function(e,t){void 0===t&&(t=""),this._platformStrategy.replaceState(null,"",e,t)},e.prototype.forward=function(){this._platformStrategy.forward()},e.prototype.back=function(){this._platformStrategy.back()},e.prototype.subscribe=function(e,t,n){return this._subject.subscribe({next:e,error:t,complete:n})},e.normalizeQueryParams=function(e){return e&&"?"!==e[0]?"?"+e:e},e.joinWithSlash=function(e,t){if(0==e.length)return t;if(0==t.length)return e;var n=0;return e.endsWith("/")&&n++,t.startsWith("/")&&n++,2==n?e+t.substring(1):1==n?e+t:e+"/"+t},e.stripTrailingSlash=function(e){var t=e.match(/#|\?|$/),n=t&&t.index||e.length,r=n-("/"===e[n-1]?1:0);return e.slice(0,r)+e.slice(n)},e}();z.decorators=[{type:N.Injectable}],z.ctorParameters=function(){return[{type:L}]};var V=function(e){function t(t,n){var r=e.call(this)||this;return r._platformLocation=t,r._baseHref="",null!=n&&(r._baseHref=n),r}return R.a(t,e),t.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},t.prototype.getBaseHref=function(){return this._baseHref},t.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.hash;return null==t&&(t="#"),t.length>0?t.substring(1):t},t.prototype.prepareExternalUrl=function(e){var t=z.joinWithSlash(this._baseHref,e);return t.length>0?"#"+t:t},t.prototype.pushState=function(e,t,n,r){var o=this.prepareExternalUrl(n+z.normalizeQueryParams(r));0==o.length&&(o=this._platformLocation.pathname),this._platformLocation.pushState(e,t,o)},t.prototype.replaceState=function(e,t,n,r){var o=this.prepareExternalUrl(n+z.normalizeQueryParams(r));0==o.length&&(o=this._platformLocation.pathname),this._platformLocation.replaceState(e,t,o)},t.prototype.forward=function(){this._platformLocation.forward()},t.prototype.back=function(){this._platformLocation.back()},t}(L);V.decorators=[{type:N.Injectable}],V.ctorParameters=function(){return[{type:j},{type:void 0,decorators:[{type:N.Optional},{type:N.Inject,args:[F]}]}]};var B=function(e){function t(t,n){var r=e.call(this)||this;if(r._platformLocation=t,null==n&&(n=r._platformLocation.getBaseHrefFromDOM()),null==n)throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");return r._baseHref=n,r}return R.a(t,e),t.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},t.prototype.getBaseHref=function(){return this._baseHref},t.prototype.prepareExternalUrl=function(e){return z.joinWithSlash(this._baseHref,e)},t.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.pathname+z.normalizeQueryParams(this._platformLocation.search),n=this._platformLocation.hash;return n&&e?""+t+n:t},t.prototype.pushState=function(e,t,n,r){var o=this.prepareExternalUrl(n+z.normalizeQueryParams(r));this._platformLocation.pushState(e,t,o)},t.prototype.replaceState=function(e,t,n,r){var o=this.prepareExternalUrl(n+z.normalizeQueryParams(r));this._platformLocation.replaceState(e,t,o)},t.prototype.forward=function(){this._platformLocation.forward()},t.prototype.back=function(){this._platformLocation.back()},t}(L);B.decorators=[{type:N.Injectable}],B.ctorParameters=function(){return[{type:j},{type:void 0,decorators:[{type:N.Optional},{type:N.Inject,args:[F]}]}]};var H=function(){function e(){}return e.prototype.getPluralCategory=function(e){},e}(),q=function(e){function t(t){var n=e.call(this)||this;return n.locale=t,n}return R.a(t,e),t.prototype.getPluralCategory=function(e){switch(a(this.locale,e)){case U.Zero:return"zero";case U.One:return"one";case U.Two:return"two";case U.Few:return"few";case U.Many:return"many";default:return"other"}},t}(H);q.decorators=[{type:N.Injectable}],q.ctorParameters=function(){return[{type:void 0,decorators:[{type:N.Inject,args:[N.LOCALE_ID]}]}]};var U={};U.Zero=0,U.One=1,U.Two=2,U.Few=3,U.Many=4,U.Other=5,U[U.Zero]="Zero",U[U.One]="One",U[U.Two]="Two",U[U.Few]="Few",U[U.Many]="Many",U[U.Other]="Other";var $=function(){function e(e,t,n,r){this._iterableDiffers=e,this._keyValueDiffers=t,this._ngEl=n,this._renderer=r,this._initialClasses=[]}return Object.defineProperty(e.prototype,"klass",{set:function(e){this._applyInitialClasses(!0),this._initialClasses="string"==typeof e?e.split(/\s+/):[],this._applyInitialClasses(!1),this._applyClasses(this._rawClass,!1)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClass",{set:function(e){this._cleanupClasses(this._rawClass),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof e?e.split(/\s+/):e,this._rawClass&&(Object(N["ɵisListLikeIterable"])(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){if(this._iterableDiffer){var e=this._iterableDiffer.diff(this._rawClass);e&&this._applyIterableChanges(e)}else if(this._keyValueDiffer){var t=this._keyValueDiffer.diff(this._rawClass);t&&this._applyKeyValueChanges(t)}},e.prototype._cleanupClasses=function(e){this._applyClasses(e,!0),this._applyInitialClasses(!1)},e.prototype._applyKeyValueChanges=function(e){var t=this;e.forEachAddedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachRemovedItem(function(e){e.previousValue&&t._toggleClass(e.key,!1)})},e.prototype._applyIterableChanges=function(e){var t=this;e.forEachAddedItem(function(e){if("string"!=typeof e.item)throw new Error("NgClass can only toggle CSS classes expressed as strings, got "+Object(N["ɵstringify"])(e.item));t._toggleClass(e.item,!0)}),e.forEachRemovedItem(function(e){return t._toggleClass(e.item,!1)})},e.prototype._applyInitialClasses=function(e){var t=this;this._initialClasses.forEach(function(n){return t._toggleClass(n,!e)})},e.prototype._applyClasses=function(e,t){var n=this;e&&(Array.isArray(e)||e instanceof Set?e.forEach(function(e){return n._toggleClass(e,!t)}):Object.keys(e).forEach(function(r){null!=e[r]&&n._toggleClass(r,!t)}))},e.prototype._toggleClass=function(e,t){var n=this;(e=e.trim())&&e.split(/\s+/g).forEach(function(e){n._renderer.setElementClass(n._ngEl.nativeElement,e,!!t)})},e}();$.decorators=[{type:N.Directive,args:[{selector:"[ngClass]"}]}],$.ctorParameters=function(){return[{type:N.IterableDiffers},{type:N.KeyValueDiffers},{type:N.ElementRef},{type:N.Renderer}]},$.propDecorators={klass:[{type:N.Input,args:["class"]}],ngClass:[{type:N.Input}]};var Y=function(){function e(e){this._viewContainerRef=e,this._componentRef=null,this._moduleRef=null}return e.prototype.ngOnChanges=function(e){if(this._viewContainerRef.clear(),this._componentRef=null,this.ngComponentOutlet){var t=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;if(e.ngComponentOutletNgModuleFactory)if(this._moduleRef&&this._moduleRef.destroy(),this.ngComponentOutletNgModuleFactory){var n=t.get(N.NgModuleRef);this._moduleRef=this.ngComponentOutletNgModuleFactory.create(n.injector)}else this._moduleRef=null;var r=this._moduleRef?this._moduleRef.componentFactoryResolver:t.get(N.ComponentFactoryResolver),o=r.resolveComponentFactory(this.ngComponentOutlet);this._componentRef=this._viewContainerRef.createComponent(o,this._viewContainerRef.length,t,this.ngComponentOutletContent)}},e.prototype.ngOnDestroy=function(){this._moduleRef&&this._moduleRef.destroy()},e}();Y.decorators=[{type:N.Directive,args:[{selector:"[ngComponentOutlet]"}]}],Y.ctorParameters=function(){return[{type:N.ViewContainerRef}]},Y.propDecorators={ngComponentOutlet:[{type:N.Input}],ngComponentOutletInjector:[{type:N.Input}],ngComponentOutletContent:[{type:N.Input}],ngComponentOutletNgModuleFactory:[{type:N.Input}]};var W=function(){function e(e,t,n,r){this.$implicit=e,this.ngForOf=t,this.index=n,this.count=r}return Object.defineProperty(e.prototype,"first",{get:function(){return 0===this.index},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"last",{get:function(){return this.index===this.count-1},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"even",{get:function(){return this.index%2==0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"odd",{get:function(){return!this.even},enumerable:!0,configurable:!0}),e}(),Z=function(){function e(e,t,n){this._viewContainer=e,this._template=t,this._differs=n,this._differ=null}return Object.defineProperty(e.prototype,"ngForTrackBy",{get:function(){return this._trackByFn},set:function(e){Object(N.isDevMode)()&&null!=e&&"function"!=typeof e&&console&&console.warn&&console.warn("trackBy must be a function, but received "+JSON.stringify(e)+". See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information."),this._trackByFn=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngForTemplate",{set:function(e){e&&(this._template=e)},enumerable:!0,configurable:!0}),e.prototype.ngOnChanges=function(e){if("ngForOf"in e){var t=e.ngForOf.currentValue;if(!this._differ&&t)try{this._differ=this._differs.find(t).create(this.ngForTrackBy)}catch(e){throw new Error("Cannot find a differ supporting object '"+t+"' of type '"+l(t)+"'. NgFor only supports binding to Iterables such as Arrays.")}}},e.prototype.ngDoCheck=function(){if(this._differ){var e=this._differ.diff(this.ngForOf);e&&this._applyChanges(e)}},e.prototype._applyChanges=function(e){var t=this,n=[];e.forEachOperation(function(e,r,o){if(null==e.previousIndex){var i=t._viewContainer.createEmbeddedView(t._template,new W(null,t.ngForOf,-1,-1),o),a=new X(e,i);n.push(a)}else if(null==o)t._viewContainer.remove(r);else{var i=t._viewContainer.get(r);t._viewContainer.move(i,o);var a=new X(e,i);n.push(a)}});for(var r=0;r/g,">")}function S(e){Ie.attributeMap(e).forEach(function(t,n){"xmlns:ns1"!==n&&0!==n.indexOf("ns1:")||Ie.removeAttribute(e,n)});for(var t=0,n=Ie.childNodesAsList(e);t0},t.prototype.tagName=function(e){return e.tagName},t.prototype.attributeMap=function(e){for(var t=new Map,n=e.attributes,r=0;r-1},t}(le);Ce.decorators=[{type:L.Injectable}],Ce.ctorParameters=function(){return[{type:void 0,decorators:[{type:L.Inject,args:[W]}]},{type:ke,decorators:[{type:L.Inject,args:[xe]}]}]};var Se=["alt","control","meta","shift"],Oe={alt:function(e){return e.altKey},control:function(e){return e.ctrlKey},meta:function(e){return e.metaKey},shift:function(e){return e.shiftKey}},Pe=function(e){function t(t){return e.call(this,t)||this}return j.a(t,e),t.prototype.supports=function(e){return null!=t.parseEventName(e)},t.prototype.addEventListener=function(e,n,o){var i=t.parseEventName(n),a=t.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(function(){return r().onAndCancel(e,i.domEventName,a)})},t.parseEventName=function(e){var n=e.toLowerCase().split("."),r=n.shift();if(0===n.length||"keydown"!==r&&"keyup"!==r)return null;var o=t._normalizeKey(n.pop()),i="";if(Se.forEach(function(e){var t=n.indexOf(e);t>-1&&(n.splice(t,1),i+=e+".")}),i+=o,0!=n.length||0===o.length)return null;var a={};return a.domEventName=r,a.fullKey=i,a},t.getEventFullKey=function(e){var t="",n=r().getEventKey(e);return n=n.toLowerCase()," "===n?n="space":"."===n&&(n="dot"),Se.forEach(function(r){if(r!=n){(0,Oe[r])(e)&&(t+=r+".")}}),t+=n},t.eventCallback=function(e,n,r){return function(o){t.getEventFullKey(o)===e&&r.runGuarded(function(){return n(o)})}},t._normalizeKey=function(e){switch(e){case"esc":return"escape";default:return e}},t}(le);Pe.decorators=[{type:L.Injectable}],Pe.ctorParameters=function(){return[{type:void 0,decorators:[{type:L.Inject,args:[W]}]}]};var Me=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:\/?#]*(?:[\/?#]|$))/gi,Ee=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i,Te=null,Ie=null,Ae=w("area,br,col,hr,img,wbr"),Re=w("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),Ne=w("rp,rt"),je=x(Ne,Re),De=x(Re,w("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),Le=x(Ne,w("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),Fe=x(Ae,De,Le,je),ze=w("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),Ve=w("srcset"),Be=w("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),He=x(ze,Ve,Be),qe=function(){function e(){this.sanitizedSomething=!1,this.buf=[]}return e.prototype.sanitizeChildren=function(e){for(var t=e.firstChild;t;)if(Ie.isElementNode(t)?this.startElement(t):Ie.isTextNode(t)?this.chars(Ie.nodeValue(t)):this.sanitizedSomething=!0,Ie.firstChild(t))t=Ie.firstChild(t);else for(;t;){Ie.isElementNode(t)&&this.endElement(t);var n=k(t,Ie.nextSibling(t));if(n){t=n;break}t=k(t,Ie.parentElement(t))}return this.buf.join("")},e.prototype.startElement=function(e){var t=this,n=Ie.nodeName(e).toLowerCase();if(!Fe.hasOwnProperty(n))return void(this.sanitizedSomething=!0);this.buf.push("<"),this.buf.push(n),Ie.attributeMap(e).forEach(function(e,n){var r=n.toLowerCase();if(!He.hasOwnProperty(r))return void(t.sanitizedSomething=!0);ze[r]&&(e=v(e)),Ve[r]&&(e=b(e)),t.buf.push(" "),t.buf.push(n),t.buf.push('="'),t.buf.push(C(e)),t.buf.push('"')}),this.buf.push(">")},e.prototype.endElement=function(e){var t=Ie.nodeName(e).toLowerCase();Fe.hasOwnProperty(t)&&!Ae.hasOwnProperty(t)&&(this.buf.push(""))},e.prototype.chars=function(e){this.buf.push(C(e))},e}(),Ue=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,$e=/([^\#-~ |!])/g,Ye=new RegExp("^([-,.\"'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\\([-0-9.%, #a-zA-Z]+\\))$","g"),We=/^url\(([^)]+)\)$/,Ze=function(){function e(){}return e.prototype.sanitize=function(e,t){},e.prototype.bypassSecurityTrustHtml=function(e){},e.prototype.bypassSecurityTrustStyle=function(e){},e.prototype.bypassSecurityTrustScript=function(e){},e.prototype.bypassSecurityTrustUrl=function(e){},e.prototype.bypassSecurityTrustResourceUrl=function(e){},e}(),Xe=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n}return j.a(t,e),t.prototype.sanitize=function(e,t){if(null==t)return null;switch(e){case L.SecurityContext.NONE:return t;case L.SecurityContext.HTML:return t instanceof Je?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"HTML"),O(this._doc,String(t)));case L.SecurityContext.STYLE:return t instanceof Ke?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"Style"),M(t));case L.SecurityContext.SCRIPT:if(t instanceof Qe)return t.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(t,"Script"),new Error("unsafe value used in a script context");case L.SecurityContext.URL:return t instanceof tt||t instanceof et?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"URL"),v(String(t)));case L.SecurityContext.RESOURCE_URL:if(t instanceof tt)return t.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(t,"ResourceURL"),new Error("unsafe value used in a resource URL context (see http://g.co/ng/security#xss)");default:throw new Error("Unexpected SecurityContext "+e+" (see http://g.co/ng/security#xss)")}},t.prototype.checkNotSafeValue=function(e,t){if(e instanceof Ge)throw new Error("Required a safe "+t+", got a "+e.getTypeName()+" (see http://g.co/ng/security#xss)")},t.prototype.bypassSecurityTrustHtml=function(e){return new Je(e)},t.prototype.bypassSecurityTrustStyle=function(e){return new Ke(e)},t.prototype.bypassSecurityTrustScript=function(e){return new Qe(e)},t.prototype.bypassSecurityTrustUrl=function(e){return new et(e)},t.prototype.bypassSecurityTrustResourceUrl=function(e){return new tt(e)},t}(Ze);Xe.decorators=[{type:L.Injectable}],Xe.ctorParameters=function(){return[{type:void 0,decorators:[{type:L.Inject,args:[W]}]}]};var Ge=function(){function e(e){this.changingThisBreaksApplicationSecurity=e}return e.prototype.getTypeName=function(){},e.prototype.toString=function(){return"SafeValue must use [property]=binding: "+this.changingThisBreaksApplicationSecurity+" (see http://g.co/ng/security#xss)"},e}(),Je=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return j.a(t,e),t.prototype.getTypeName=function(){return"HTML"},t}(Ge),Ke=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return j.a(t,e),t.prototype.getTypeName=function(){return"Style"},t}(Ge),Qe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return j.a(t,e),t.prototype.getTypeName=function(){return"Script"},t}(Ge),et=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return j.a(t,e),t.prototype.getTypeName=function(){return"URL"},t}(Ge),tt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return j.a(t,e),t.prototype.getTypeName=function(){return"ResourceURL"},t}(Ge),nt=[{provide:L.PLATFORM_ID,useValue:D["ɵPLATFORM_BROWSER_ID"]},{provide:L.PLATFORM_INITIALIZER,useValue:E,multi:!0},{provide:D.PlatformLocation,useClass:Z},{provide:W,useFactory:I,deps:[]}],rt=[{provide:L.Sanitizer,useExisting:Ze},{provide:Ze,useClass:Xe}],ot=Object(L.createPlatformFactory)(L.platformCore,"browser",nt),it=function(){function e(e){if(e)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}return e.withServerTransition=function(t){return{ngModule:e,providers:[{provide:L.APP_ID,useValue:t.appId},{provide:G,useExisting:L.APP_ID},J]}},e}();it.decorators=[{type:L.NgModule,args:[{providers:[rt,{provide:L.ErrorHandler,useFactory:T,deps:[]},{provide:ae,useClass:_e,multi:!0},{provide:ae,useClass:Pe,multi:!0},{provide:ae,useClass:Ce,multi:!0},{provide:xe,useClass:ke},ge,{provide:L.RendererFactory2,useExisting:ge},{provide:ue,useExisting:ce},ce,L.Testability,se,ie,X,Q],exports:[D.CommonModule,L.ApplicationModule]}]}],it.ctorParameters=function(){return[{type:it,decorators:[{type:L.Optional},{type:L.SkipSelf}]}]};var at="undefined"!=typeof window&&window||{},st=function(){function e(e,t){this.msPerTick=e,this.numTicks=t}return e}(),lt=function(){function e(e){this.appRef=e.injector.get(L.ApplicationRef)}return e.prototype.timeChangeDetection=function(e){var t=e&&e.record,n=null!=at.console.profile;t&&n&&at.console.profile("Change Detection");for(var o=r().performanceNow(),i=0;i<5||r().performanceNow()-o<500;)this.appRef.tick(),i++;var a=r().performanceNow();t&&n&&at.console.profileEnd("Change Detection");var s=(a-o)/i;return at.console.log("ran "+i+" change detection cycles"),at.console.log(s.toFixed(2)+" ms per check"),new st(s,i)},e}(),ut="profiler",ct=function(){function e(){}return e.all=function(){return function(e){return!0}},e.css=function(e){return function(t){return null!=t.nativeElement&&r().elementMatches(t.nativeElement,e)}},e.directive=function(e){return function(t){return-1!==t.providerTokens.indexOf(e)}},e}(),pt=new L.Version("4.4.6")},function(e,t,n){"use strict";function r(e){return e.discriminator||e["x-extendedDiscriminator"]}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=n(443),a=n(41),s=n(88),l=n(91),u=n(231),c=n(29),p=n(7),d=n(73),f=function(){function e(e){this._schema={},this.spec=new l.BehaviorSubject(null),this.options=e.options}return e.prototype.load=function(e){var t=this;return new Promise(function(n,r){t.parser=new i,t.parser.bundle(e,{http:{withCredentials:!1}}).then(function(o){"string"==typeof e&&(t.specUrl=e),t.rawSpec=o,t._schema=c.snapshot(o);try{t.init(),t.spec.next(t._schema),n(t._schema)}catch(e){r(e)}},function(e){return r(e)})})},e.prototype.init=function(){var e,t=this.specUrl?s.parse(s.resolve(window.location.href,this.specUrl)):{protocol:window.location.protocol,host:window.location.host},n=this._schema.schemes;n&&n.length?"http"===(e=n[0])&&n.indexOf("https")>=0&&(e="https"):e=t.protocol?t.protocol.slice(0,-1):"http";var r=this._schema.host||t.host;this.basePath=this._schema.basePath||"",this.apiUrl=e+"://"+r+this.basePath,this.apiProtocol=e,this.apiUrl.endsWith("/")&&(this.apiUrl=this.apiUrl.substr(0,this.apiUrl.length-1)),this.preprocess()},e.prototype.preprocess=function(){var e=new u.MdRenderer;if(!this._schema.info)throw Error('Specification Error: Required field "info" is not specified at the top level of the specification');if(this._schema.info.description||(this._schema.info.description=""),this._schema.securityDefinitions&&!this.options.noAutoAuth){var t=n(148).SecurityDefinitions;e.addPreprocessor(t.insertTagIntoDescription)}this._schema.info["x-redoc-html-description"]=e.renderMd(this._schema.info.description),this._schema.info["x-redoc-markdown-headers"]=e.headings},Object.defineProperty(e.prototype,"schema",{get:function(){return this._schema},set:function(e){this._schema=e,this.spec.next(this._schema)},enumerable:!0,configurable:!0}),e.prototype.byPointer=function(e){var t=null;if(void 0==e)return null;try{t=a.JsonPointer.get(this._schema,decodeURIComponent(e))}catch(n){"#"!==e.charAt(0)&&(e="#"+e);try{t=this.parser.$refs.get(decodeURIComponent(e))}catch(e){}}return t},e.prototype.resolveRefs=function(e){var t=this;return Object.keys(e).forEach(function(n){if(e[n].$ref){var r=t.byPointer(e[n].$ref);r._pointer=e[n].$ref,e[n]=r}}),e},e.prototype.getOperationParams=function(e){function t(e,t){if(!Array.isArray(e))throw new Error("parameters must be an array. Got "+typeof e+" at "+t);return e.map(function(e,n){return e._pointer=a.JsonPointer.join(t,n),e})}"parameters"===a.JsonPointer.baseName(e)&&(e=a.JsonPointer.dirName(e));var n=a.JsonPointer.join(a.JsonPointer.dirName(e),["parameters"]),r=this.byPointer(n)||[],o=a.JsonPointer.join(e,["parameters"]),i=this.byPointer(o)||[],s={};return i.forEach(function(e){return s[e.name]=!0}),r=r.filter(function(e){return!s[e.name]}),r=t(r,n),i=t(i,o),i=this.resolveRefs(i),r=this.resolveRefs(r),i.concat(r)},e.prototype.getTagsMap=function(){for(var e=this._schema.tags||[],t={},n=0,r=e;n-1&&i.push({name:a.JsonPointer.baseName(e),$ref:e})}var l,u=r["x-extendedDiscriminator"];if(r["x-derived-from"]){l=[e].concat(r["x-derived-from"].filter(function(e){if(!e)return!1;var t=n.byPointer(e);return t&&t.discriminator}))}else l=[e];for(var c=0,p=Object.keys(o);c=0)return"break"}(b))break}if(!(m<0)){var _=void 0;if(u){for(var w=h.allOf||[],x=0,k=w;x0?o(r(e),9007199254740991):0}},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(11);t.SpecManager=r.SpecManager;var o=function(){function e(e){this.specMgr=e,this.componentSchema=null,this.dereferencedCache={}}return e.prototype.ngOnInit=function(){this.preinit()},e.prototype.preinit=function(){this.componentSchema=this.specMgr.byPointer(this.pointer||""),this.init()},e.prototype.ngOnDestroy=function(){this.destroy()},e.prototype.init=function(){},e.prototype.destroy=function(){},e}();t.BaseComponent=o;var i=function(e){function t(t,n){var r=e.call(this,t)||this;return r.specMgr=t,r.app=n,r}return __extends(t,e),t.prototype.subscribeForSearch=function(){var e=this;this.searchSubscription=this.app.searchContainingPointers.subscribe(function(t){for(var n=0;n=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function u(e){if(e>65535){e-=65536;var t=55296+(e>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function c(e,t){var n=0;return i(v,t)?v[t]:35===t.charCodeAt(0)&&y.test(t)&&(n="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10),l(n))?u(n):e}function p(e){return e.indexOf("&")<0?e:e.replace(m,c)}function d(e){return w[e]}function f(e){return b.test(e)?e.replace(_,d):e}var h=Object.prototype.hasOwnProperty,g=/\\([\\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g,m=/&([a-z#][a-z0-9]{1,31});/gi,y=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,v=n(232),b=/[&<>"]/,_=/[&<>"]/g,w={"&":"&","<":"<",">":">",'"':"""};t.assign=a,t.isString=o,t.has=i,t.unescapeMd=s,t.isValidEntityCode=l,t.fromCodePoint=u,t.replaceEntities=p,t.escapeHtml=f},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(5),o=n(25),i=n(19),a=n(56)("src"),s=Function.toString,l=(""+s).split("toString");n(8).inspectSource=function(e){return s.call(e)},(e.exports=function(e,t,n,s){var u="function"==typeof n;u&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(u&&(i(n,a)||o(n,a,e[t]?""+e[t]:l.join(String(t)))),e===r?e[t]=n:s?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||s.call(this)})},function(e,t,n){var r=n(0),o=n(3),i=n(45),a=/"/g,s=function(e,t,n,r){var o=String(i(e)),s="<"+t;return""!==n&&(s+=" "+n+'="'+String(r).replace(a,""")+'"'),s+">"+o+""};e.exports=function(e,t){var n={};n[e]=t(s),r(r.P+r.F*o(function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}),"String",n)}},function(e,t,n){"use strict";(function(e){function r(){return i.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(e,t){if(r()=r())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r().toString(16)+" bytes");return 0|e}function g(e){return+e!=e&&(e=0),i.alloc(+e)}function m(e,t){if(i.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return U(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return W(e).length;default:if(r)return U(e).length;t=(""+t).toLowerCase(),r=!0}}function y(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,t>>>=0,n<=t)return"";for(e||(e="utf8");;)switch(e){case"hex":return A(this,t,n);case"utf8":case"utf-8":return M(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return I(this,t,n);case"base64":return P(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function v(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function b(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=i.from(t,r)),i.isBuffer(t))return 0===t.length?-1:_(e,t,n,r,o);if("number"==typeof t)return t&=255,i.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):_(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function _(e,t,n,r,o){function i(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}var a=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,l/=2,n/=2}var u;if(o){var c=-1;for(u=n;us&&(n=s-l),u=n;u>=0;u--){for(var p=!0,d=0;do&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a239?4:i>223?3:i>191?2:1;if(o+s<=n){var l,u,c,p;switch(s){case 1:i<128&&(a=i);break;case 2:l=e[o+1],128==(192&l)&&(p=(31&i)<<6|63&l)>127&&(a=p);break;case 3:l=e[o+1],u=e[o+2],128==(192&l)&&128==(192&u)&&(p=(15&i)<<12|(63&l)<<6|63&u)>2047&&(p<55296||p>57343)&&(a=p);break;case 4:l=e[o+1],u=e[o+2],c=e[o+3],128==(192&l)&&128==(192&u)&&128==(192&c)&&(p=(15&i)<<18|(63&l)<<12|(63&u)<<6|63&c)>65535&&p<1114112&&(a=p)}}null===a?(a=65533,s=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),o+=s}return E(r)}function E(e){var t=e.length;if(t<=Q)return String.fromCharCode.apply(String,e);for(var n="",r=0;rr)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function j(e,t,n,r,o,a){if(!i.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function L(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function F(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function z(e,t,n,r,o){return o||F(e,t,n,4,3.4028234663852886e38,-3.4028234663852886e38),J.write(e,t,n,r,23,4),n+4}function V(e,t,n,r,o){return o||F(e,t,n,8,1.7976931348623157e308,-1.7976931348623157e308),J.write(e,t,n,r,52,8),n+8}function B(e){if(e=H(e).replace(ee,""),e.length<2)return"";for(;e.length%4!=0;)e+="=";return e}function H(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function q(e){return e<16?"0"+e.toString(16):e.toString(16)}function U(e,t){t=t||1/0;for(var n,r=e.length,o=null,i=[],a=0;a55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function $(e){for(var t=[],n=0;n>8,o=n%256,i.push(o),i.push(r);return i}function W(e){return G.toByteArray(B(e))}function Z(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function X(e){return e!==e}var G=n(444),J=n(445),K=n(446);t.Buffer=i,t.SlowBuffer=g,t.INSPECT_MAX_BYTES=50,i.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=r(),i.poolSize=8192,i._augment=function(e){return e.__proto__=i.prototype,e},i.from=function(e,t,n){return a(null,e,t,n)},i.TYPED_ARRAY_SUPPORT&&(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0})),i.alloc=function(e,t,n){return l(null,e,t,n)},i.allocUnsafe=function(e){return u(null,e)},i.allocUnsafeSlow=function(e){return u(null,e)},i.isBuffer=function(e){return!(null==e||!e._isBuffer)},i.compare=function(e,t){if(!i.isBuffer(e)||!i.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,o=0,a=Math.min(n,r);o0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},i.prototype.compare=function(e,t,n,r,o){if(!i.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,o>>>=0,this===e)return 0;for(var a=o-r,s=n-t,l=Math.min(a,s),u=this.slice(r,o),c=e.slice(t,n),p=0;po)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return x(this,e,t,n);case"ascii":return k(this,e,t,n);case"latin1":case"binary":return C(this,e,t,n);case"base64":return S(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;i.prototype.slice=function(e,t){var n=this.length;e=~~e,t=void 0===t?n:~~t,e<0?(e+=n)<0&&(e=0):e>n&&(e=n),t<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(o*=256);)r+=this[e+--t]*o;return r},i.prototype.readUInt8=function(e,t){return t||N(e,1,this.length),this[e]},i.prototype.readUInt16LE=function(e,t){return t||N(e,2,this.length),this[e]|this[e+1]<<8},i.prototype.readUInt16BE=function(e,t){return t||N(e,2,this.length),this[e]<<8|this[e+1]},i.prototype.readUInt32LE=function(e,t){return t||N(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},i.prototype.readUInt32BE=function(e,t){return t||N(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},i.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||N(e,t,this.length);for(var r=this[e],o=1,i=0;++i=o&&(r-=Math.pow(2,8*t)),r},i.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||N(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*t)),i},i.prototype.readInt8=function(e,t){return t||N(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},i.prototype.readInt16LE=function(e,t){t||N(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt16BE=function(e,t){t||N(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt32LE=function(e,t){return t||N(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},i.prototype.readInt32BE=function(e,t){return t||N(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},i.prototype.readFloatLE=function(e,t){return t||N(e,4,this.length),J.read(this,e,!0,23,4)},i.prototype.readFloatBE=function(e,t){return t||N(e,4,this.length),J.read(this,e,!1,23,4)},i.prototype.readDoubleLE=function(e,t){return t||N(e,8,this.length),J.read(this,e,!0,52,8)},i.prototype.readDoubleBE=function(e,t){return t||N(e,8,this.length),J.read(this,e,!1,52,8)},i.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t|=0,n|=0,!r){j(this,e,t,n,Math.pow(2,8*n)-1,0)}var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},i.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,1,255,0),i.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},i.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},i.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},i.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):L(this,e,t,!0),t+4},i.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):L(this,e,t,!1),t+4},i.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);j(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},i.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);j(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},i.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,1,127,-128),i.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},i.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},i.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},i.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):L(this,e,t,!0),t+4},i.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):L(this,e,t,!1),t+4},i.prototype.writeFloatLE=function(e,t,n){return z(this,e,t,!0,n)},i.prototype.writeFloatBE=function(e,t,n){return z(this,e,t,!1,n)},i.prototype.writeDoubleLE=function(e,t,n){return V(this,e,t,!0,n)},i.prototype.writeDoubleBE=function(e,t,n){return V(this,e,t,!1,n)},i.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(a<1e3||!i.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var a;if("number"==typeof e)for(a=t;a";return this.unstrustedSpec?n:this.sanitizer.bypassSecurityTrustHtml(n)},e=t=__decorate([r.Pipe({name:"marked"}),__metadata("design:paramtypes",[o.DomSanitizer,l.OptionsService])],e);var t}();t.MarkedPipe=d;var f=function(){function e(e){this.sanitizer=e}return e.prototype.transform=function(e){return i.isBlank(e)?e:i.isString(e)?this.sanitizer.bypassSecurityTrustHtml(e):e},e=__decorate([r.Pipe({name:"safe"}),__metadata("design:paramtypes",[o.DomSanitizer])],e)}();t.SafePipe=f;var h={"c++":"cpp","c#":"csharp","objective-c":"objectivec",shell:"bash",viml:"vim"},g=function(){function e(e){this.sanitizer=e}return t=e,e.prototype.transform=function(e,n){if(i.isBlank(n)||0===n.length)throw new u("Prism pipe requires one argument");if(i.isBlank(e))return e;if(!i.isString(e))throw new c(t,e);var r=n[0].toString().trim().toLowerCase();h[r]&&(r=h[r]);var o=Prism.languages[r];return o||(o=Prism.languages.clike),this.sanitizer.bypassSecurityTrustHtml(Prism.highlight(e,o))},e=t=__decorate([r.Pipe({name:"prism"}),__metadata("design:paramtypes",[o.DomSanitizer])],e);var t}();t.PrismPipe=g;var m=function(){function e(){}return t=e,e.prototype.transform=function(e){if(i.isBlank(e))return e;if(!i.isString(e))throw new c(t,e);return encodeURIComponent(e)},e=t=__decorate([r.Pipe({name:"encodeURIComponent"})],e);var t}();t.EncodeURIComponentPipe=m;var y={csv:"Comma Separated",ssv:"Space Separated",tsv:"Tab Separated",pipes:"Pipe Separated"},v=function(){function e(){}return e.prototype.transform=function(e){var t=e.collectionFormat;return t||(t="csv"),"multi"===t?"Multiple "+e.in+" params of":y[t]},e=__decorate([r.Pipe({name:"collectionFormat"})],e)}();t.CollectionFormatPipe=v,t.REDOC_PIPES=[d,f,g,m,s.JsonFormatter,p,v]},function(e,t,n){var r=n(12),o=n(57);e.exports=n(14)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(45);e.exports=function(e){return Object(r(e))}},function(e,t,n){"use strict";function r(e,t){function n(){e.classList.add("ps--focus")}function r(){e.classList.remove("ps--focus")}var o=this;o.settings=l();for(var i in t)o.settings[i]=t[i];o.containerWidth=null,o.containerHeight=null,o.contentWidth=null,o.contentHeight=null,o.isRtl="rtl"===u.css(e,"direction"),o.isNegativeScroll=function(){var t=e.scrollLeft,n=null;return e.scrollLeft=-1,n=e.scrollLeft<0,e.scrollLeft=t,n}(),o.negativeScrollAdjustment=o.isNegativeScroll?e.scrollWidth-e.clientWidth:0,o.event=new c,o.ownerDocument=e.ownerDocument||document,o.scrollbarXRail=u.appendTo(u.create("div","ps__scrollbar-x-rail"),e),o.scrollbarX=u.appendTo(u.create("div","ps__scrollbar-x"),o.scrollbarXRail),o.scrollbarX.setAttribute("tabindex",0),o.event.bind(o.scrollbarX,"focus",n),o.event.bind(o.scrollbarX,"blur",r),o.scrollbarXActive=null,o.scrollbarXWidth=null,o.scrollbarXLeft=null,o.scrollbarXBottom=s.toInt(u.css(o.scrollbarXRail,"bottom")),o.isScrollbarXUsingBottom=o.scrollbarXBottom===o.scrollbarXBottom,o.scrollbarXTop=o.isScrollbarXUsingBottom?null:s.toInt(u.css(o.scrollbarXRail,"top")),o.railBorderXWidth=s.toInt(u.css(o.scrollbarXRail,"borderLeftWidth"))+s.toInt(u.css(o.scrollbarXRail,"borderRightWidth")),u.css(o.scrollbarXRail,"display","block"),o.railXMarginWidth=s.toInt(u.css(o.scrollbarXRail,"marginLeft"))+s.toInt(u.css(o.scrollbarXRail,"marginRight")),u.css(o.scrollbarXRail,"display",""),o.railXWidth=null,o.railXRatio=null,o.scrollbarYRail=u.appendTo(u.create("div","ps__scrollbar-y-rail"),e),o.scrollbarY=u.appendTo(u.create("div","ps__scrollbar-y"),o.scrollbarYRail),o.scrollbarY.setAttribute("tabindex",0),o.event.bind(o.scrollbarY,"focus",n),o.event.bind(o.scrollbarY,"blur",r),o.scrollbarYActive=null,o.scrollbarYHeight=null,o.scrollbarYTop=null,o.scrollbarYRight=s.toInt(u.css(o.scrollbarYRail,"right")),o.isScrollbarYUsingRight=o.scrollbarYRight===o.scrollbarYRight,o.scrollbarYLeft=o.isScrollbarYUsingRight?null:s.toInt(u.css(o.scrollbarYRail,"left")),o.scrollbarYOuterWidth=o.isRtl?s.outerWidth(o.scrollbarY):null,o.railBorderYWidth=s.toInt(u.css(o.scrollbarYRail,"borderTopWidth"))+s.toInt(u.css(o.scrollbarYRail,"borderBottomWidth")),u.css(o.scrollbarYRail,"display","block"),o.railYMarginHeight=s.toInt(u.css(o.scrollbarYRail,"marginTop"))+s.toInt(u.css(o.scrollbarYRail,"marginBottom")),u.css(o.scrollbarYRail,"display",""),o.railYHeight=null,o.railYRatio=null}function o(e){return e.getAttribute("data-ps-id")}function i(e,t){e.setAttribute("data-ps-id",t)}function a(e){e.removeAttribute("data-ps-id")}var s=n(51),l=n(589),u=n(65),c=n(590),p=n(591),d={};t.add=function(e,t){var n=p();return i(e,n),d[n]=new r(e,t),d[n]},t.remove=function(e){delete d[o(e)],a(e)},t.get=function(e){return d[o(e)]}},function(e,t,n){"use strict";var r=n(3);e.exports=function(e,t){return!!e&&r(function(){t?e.call(null,function(){},1):e.call(null)})}},function(e,t,n){"use strict";function r(e){return JSON.stringify(e)}function o(e){return"string"==typeof e}function i(e){return"function"==typeof e}function a(e){return void 0==e}function s(e){return e.endsWith("/")?e.substring(0,e.length-1):e}function l(e,t){return e.reduce(function(e,n){return w.call(e,n[t])?e[n[t]].push(n):e[n[t]]=[n],e},{})}function u(e,t){if(void 0===t&&(t=!1),"default"===e)return t?"error":"success";if(e<100||e>599)throw new Error("invalid HTTP code");var n="success";return e>=300&&e<400?n="redirect":e>=400?n="error":e<200&&(n="info"),n}function c(e,t){for(var n=Object.keys(t),r=-1,o=n.length;++r0||function(e){return"[object SafariRemoteNotification]"===e.toString()}(!window.safari||safari.pushNotification),t.snapshot=h,t.isJsonLike=g,t.isXmlLike=m,t.isTextLike=y,t.getJsonLikeSample=v,t.getXmlLikeSample=b,t.getTextLikeSample=_},function(e,t,n){var r=n(75),o=n(45);e.exports=function(e){return r(o(e))}},function(e,t,n){var r=n(19),o=n(26),i=n(122)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},function(e,t,n){var r=n(58),o=n(75),i=n(26),a=n(15),s=n(253);e.exports=function(e,t){var n=1==e,l=2==e,u=3==e,c=4==e,p=6==e,d=5==e||p,f=t||s;return function(t,s,h){for(var g,m,y=i(t),v=o(y),b=r(s,h,3),_=a(v.length),w=0,x=n?f(t,_):l?f(t,0):void 0;_>w;w++)if((d||w in v)&&(g=v[w],m=b(g,w,y),e))if(n)x[w]=m;else if(m)switch(e){case 3:return!0;case 5:return g;case 6:return w;case 2:x.push(g)}else if(c)return!1;return p?-1:u||c?c:x}}},function(e,t,n){var r=n(0),o=n(8),i=n(3);e.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],a={};a[e]=t(n),r(r.S+r.F*i(function(){n(1)}),"Object",a)}},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(c===setTimeout)return setTimeout(e,0);if((c===n||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function i(e){if(p===clearTimeout)return clearTimeout(e);if((p===r||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function a(){g&&f&&(g=!1,f.length?h=f.concat(h):m=-1,h.length&&s())}function s(){if(!g){var e=o(a);g=!0;for(var t=h.length;t;){for(f=h,h=[];++m1)for(var n=1;n0?r:n)(e)}},function(e,t,n){var r=n(101),o=n(57),i=n(30),a=n(44),s=n(19),l=n(175),u=Object.getOwnPropertyDescriptor;t.f=n(14)?u:function(e,t){if(e=i(e),t=a(t,!0),l)try{return u(e,t)}catch(e){}if(s(e,t))return o(!r.f.call(e,t),e[t])}},function(e,t,n){"use strict";if(n(14)){var r=n(78),o=n(5),i=n(3),a=n(0),s=n(107),l=n(141),u=n(58),c=n(77),p=n(57),d=n(25),f=n(76),h=n(37),g=n(15),m=n(206),y=n(55),v=n(44),b=n(19),_=n(126),w=n(4),x=n(26),k=n(124),C=n(53),S=n(31),O=n(59).f,P=n(125),M=n(56),E=n(9),T=n(32),I=n(121),A=n(207),R=n(106),N=n(67),j=n(128),D=n(80),L=n(138),F=n(204),z=n(12),V=n(38),B=z.f,H=V.f,q=o.RangeError,U=o.TypeError,$=o.Uint8Array,Y=Array.prototype,W=l.ArrayBuffer,Z=l.DataView,X=T(0),G=T(2),J=T(3),K=T(4),Q=T(5),ee=T(6),te=I(!0),ne=I(!1),re=R.values,oe=R.keys,ie=R.entries,ae=Y.lastIndexOf,se=Y.reduce,le=Y.reduceRight,ue=Y.join,ce=Y.sort,pe=Y.slice,de=Y.toString,fe=Y.toLocaleString,he=E("iterator"),ge=E("toStringTag"),me=M("typed_constructor"),ye=M("def_constructor"),ve=s.CONSTR,be=s.TYPED,_e=s.VIEW,we=T(1,function(e,t){return Oe(A(e,e[ye]),t)}),xe=i(function(){return 1===new $(new Uint16Array([1]).buffer)[0]}),ke=!!$&&!!$.prototype.set&&i(function(){new $(1).set({})}),Ce=function(e,t){var n=h(e);if(n<0||n%t)throw q("Wrong offset!");return n},Se=function(e){if(w(e)&&be in e)return e;throw U(e+" is not a typed array!")},Oe=function(e,t){if(!(w(e)&&me in e))throw U("It is not a typed array constructor!");return new e(t)},Pe=function(e,t){return Me(A(e,e[ye]),t)},Me=function(e,t){for(var n=0,r=t.length,o=Oe(e,r);r>n;)o[n]=t[n++];return o},Ee=function(e,t,n){B(e,t,{get:function(){return this._d[n]}})},Te=function(e){var t,n,r,o,i,a,s=x(e),l=arguments.length,c=l>1?arguments[1]:void 0,p=void 0!==c,d=P(s);if(void 0!=d&&!k(d)){for(a=d.call(s),r=[],t=0;!(i=a.next()).done;t++)r.push(i.value);s=r}for(p&&l>2&&(c=u(c,arguments[2],2)),t=0,n=g(s.length),o=Oe(this,n);n>t;t++)o[t]=p?c(s[t],t):s[t];return o},Ie=function(){for(var e=0,t=arguments.length,n=Oe(this,t);t>e;)n[e]=arguments[e++];return n},Ae=!!$&&i(function(){fe.call(new $(1))}),Re=function(){return fe.apply(Ae?pe.call(Se(this)):Se(this),arguments)},Ne={copyWithin:function(e,t){return F.call(Se(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return K(Se(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return L.apply(Se(this),arguments)},filter:function(e){return Pe(this,G(Se(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Q(Se(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ee(Se(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){X(Se(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return ne(Se(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return te(Se(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return ue.apply(Se(this),arguments)},lastIndexOf:function(e){return ae.apply(Se(this),arguments)},map:function(e){return we(Se(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return se.apply(Se(this),arguments)},reduceRight:function(e){return le.apply(Se(this),arguments)},reverse:function(){for(var e,t=this,n=Se(t).length,r=Math.floor(n/2),o=0;o1?arguments[1]:void 0)},sort:function(e){return ce.call(Se(this),e)},subarray:function(e,t){var n=Se(this),r=n.length,o=y(e,r);return new(A(n,n[ye]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,g((void 0===t?r:y(t,r))-o))}},je=function(e,t){return Pe(this,pe.call(Se(this),e,t))},De=function(e){Se(this);var t=Ce(arguments[1],1),n=this.length,r=x(e),o=g(r.length),i=0;if(o+t>n)throw q("Wrong length!");for(;i255?255:255&r),o.v[f](n*t+o.o,r,xe)},E=function(e,t){B(e,t,{get:function(){return P(this,t)},set:function(e){return M(this,t,e)},enumerable:!0})};b?(h=n(function(e,n,r,o){c(e,h,u,"_d");var i,a,s,l,p=0,f=0;if(w(n)){if(!(n instanceof W||"ArrayBuffer"==(l=_(n))||"SharedArrayBuffer"==l))return be in n?Me(h,n):Te.call(h,n);i=n,f=Ce(r,t);var y=n.byteLength;if(void 0===o){if(y%t)throw q("Wrong length!");if((a=y-f)<0)throw q("Wrong length!")}else if((a=g(o)*t)+f>y)throw q("Wrong length!");s=a/t}else s=m(n),a=s*t,i=new W(a);for(d(e,"_d",{b:i,o:f,l:a,e:s,v:new Z(i)});p=0?e.substr(t).toLowerCase():""},t.getHash=function(e){var t=e.indexOf("#");return t>=0?e.substr(t):"#"},t.stripHash=function(e){var t=e.indexOf("#");return t>=0&&(e=e.substr(0,t)),e},t.isHttp=function(e){var t=s.getProtocol(e);return"http"===t||"https"===t||void 0===t&&r.browser},t.isFileSystemPath=function(e){if(r.browser)return!1;var t=s.getProtocol(e);return void 0===t||"file"===t},t.fromFileSystemPath=function(e){for(var t=0;to*r?t.INVIEW_POSITION.ABOVE:o*e.getBoundingClientRect().bottom<=o*r?t.INVIEW_POSITION.BELLOW:t.INVIEW_POSITION.INVIEW},e.prototype.scrollToPos=function(e){this.$scrollParent.scrollTo?this.$scrollParent.scrollTo(0,Math.floor(e)):this.$scrollParent.scrollTop=e},e.prototype.scrollTo=function(e,t){if(void 0===t&&(t=0),e){var n=e.getBoundingClientRect(),r=this.scrollY()+n.top-this.scrollYOffset()+t+1;return this.scrollToPos(r),r}},e.prototype.saveScroll=function(){var e=this._stickElement;if(e){var t=e.offsetParent;this._savedPosition=e.offsetTop+t.offsetTop}},e.prototype.setStickElement=function(e){this._stickElement=e},e.prototype.restoreScroll=function(){var e=this._stickElement;if(e){var t=e.offsetParent,n=e.offsetTop+t.offsetTop,r=this.scrollY()+(n-this._savedPosition);this.scrollToPos(r)}},e.prototype.relativeScrollPos=function(e){return-e.getBoundingClientRect().top+this.scrollYOffset()-1},e.prototype.scrollHandler=function(e){var t=this.scrollY()-this.prevOffsetY>0;this.prevOffsetY=this.scrollY(),this.scroll.next({isScrolledDown:t,evt:e})},e.prototype.bind=function(){var e=this;this.prevOffsetY=this.scrollY(),this._cancel=o.BrowserDomAdapter.onAndCancel(this.$scrollParent,"scroll",a.throttle(function(t){e.scrollHandler(t)},100,this))},e.prototype.unbind=function(){this._cancel()},e=__decorate([r.Injectable(),__metadata("design:paramtypes",[i.OptionsService])],e)}();t.ScrollService=s},function(e,t,n){"use strict";function r(e,t){return e.settings.minScrollbarLength&&(t=Math.max(t,e.settings.minScrollbarLength)),e.settings.maxScrollbarLength&&(t=Math.min(t,e.settings.maxScrollbarLength)),t}function o(e,t){var n={width:t.railXWidth};t.isRtl?n.left=t.negativeScrollAdjustment+e.scrollLeft+t.containerWidth-t.contentWidth:n.left=e.scrollLeft,t.isScrollbarXUsingBottom?n.bottom=t.scrollbarXBottom-e.scrollTop:n.top=t.scrollbarXTop+e.scrollTop,a.css(t.scrollbarXRail,n);var r={top:e.scrollTop,height:t.railYHeight};t.isScrollbarYUsingRight?t.isRtl?r.right=t.contentWidth-(t.negativeScrollAdjustment+e.scrollLeft)-t.scrollbarYRight-t.scrollbarYOuterWidth:r.right=t.scrollbarYRight-e.scrollLeft:t.isRtl?r.left=t.negativeScrollAdjustment+e.scrollLeft+2*t.containerWidth-t.contentWidth-t.scrollbarYLeft-t.scrollbarYOuterWidth:r.left=t.scrollbarYLeft+e.scrollLeft,a.css(t.scrollbarYRail,r),a.css(t.scrollbarX,{left:t.scrollbarXLeft,width:t.scrollbarXWidth-t.railBorderXWidth}),a.css(t.scrollbarY,{top:t.scrollbarYTop,height:t.scrollbarYHeight-t.railBorderYWidth})}var i=n(51),a=n(65),s=n(27),l=n(52);e.exports=function(e){var t=s.get(e);t.containerWidth=e.clientWidth,t.containerHeight=e.clientHeight,t.contentWidth=e.scrollWidth,t.contentHeight=e.scrollHeight;var n;e.contains(t.scrollbarXRail)||(n=a.queryChildren(e,".ps__scrollbar-x-rail"),n.length>0&&n.forEach(function(e){a.remove(e)}),a.appendTo(t.scrollbarXRail,e)),e.contains(t.scrollbarYRail)||(n=a.queryChildren(e,".ps__scrollbar-y-rail"),n.length>0&&n.forEach(function(e){a.remove(e)}),a.appendTo(t.scrollbarYRail,e)),!t.settings.suppressScrollX&&t.containerWidth+t.settings.scrollXMarginOffset=t.railXWidth-t.scrollbarXWidth&&(t.scrollbarXLeft=t.railXWidth-t.scrollbarXWidth),t.scrollbarYTop>=t.railYHeight-t.scrollbarYHeight&&(t.scrollbarYTop=t.railYHeight-t.scrollbarYHeight),o(e,t),t.scrollbarXActive?e.classList.add("ps--active-x"):(e.classList.remove("ps--active-x"),t.scrollbarXWidth=0,t.scrollbarXLeft=0,l(e,"left",0)),t.scrollbarYActive?e.classList.add("ps--active-y"):(e.classList.remove("ps--active-y"),t.scrollbarYHeight=0,t.scrollbarYTop=0,l(e,"top",0))}},function(e,t,n){var r=n(4);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(56)("meta"),o=n(4),i=n(19),a=n(12).f,s=0,l=Object.isExtensible||function(){return!0},u=!n(3)(function(){return l(Object.preventExtensions({}))}),c=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},p=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!l(e))return"F";if(!t)return"E";c(e)}return e[r].i},d=function(e,t){if(!i(e,r)){if(!l(e))return!0;if(!t)return!1;c(e)}return e[r].w},f=function(e){return u&&h.NEED&&l(e)&&!i(e,r)&&c(e),e},h=e.exports={KEY:r,NEED:!1,fastKey:p,getWeak:d,onFreeze:f}},function(e,t,n){"use strict";var r=n(84),o=n(419),i=n(212),a=n(423),s=function(){function e(e){this._isScalar=!1,e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var r=this.operator,i=o.toSubscriber(e,t,n);if(r?r.call(i,this.source):i.add(this.source||!i.syncErrorThrowable?this._subscribe(i):this._trySubscribe(i)),i.syncErrorThrowable&&(i.syncErrorThrowable=!1,i.syncErrorThrown))throw i.syncErrorValue;return i},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){e.syncErrorThrown=!0,e.syncErrorValue=t,e.error(t)}},e.prototype.forEach=function(e,t){var n=this;if(t||(r.root.Rx&&r.root.Rx.config&&r.root.Rx.config.Promise?t=r.root.Rx.config.Promise:r.root.Promise&&(t=r.root.Promise)),!t)throw new Error("no Promise impl found");return new t(function(t,r){var o;o=n.subscribe(function(t){if(o)try{e(t)}catch(e){r(e),o.unsubscribe()}else e(t)},r,t)})},e.prototype._subscribe=function(e){return this.source.subscribe(e)},e.prototype[i.observable]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t0&&(c=e.exports.formatter.apply(null,u)),n&&n.message&&(c+=(c?" \n":"")+n.message);var p=new t(c);return o(p,n),i(p),a(p,r),p}}function o(e,t){u(e,t),a(e,t)}function i(e){e.toJSON=s,e.inspect=l}function a(e,t){if(t&&"object"==typeof t)for(var n=Object.keys(t),r=0;r=0))try{e[o]=t[o]}catch(e){}}}function s(){var e={},t=Object.keys(this);t=t.concat(v);for(var n=0;n=0)return t.splice(n,1),t.join("\n")}return e}}function d(e){if(!b)return!1;var t=Object.getOwnPropertyDescriptor(e,"stack");return!!t&&"function"==typeof t.get}function f(e,t){var n=Object.getOwnPropertyDescriptor(e,"stack");Object.defineProperty(e,"stack",{get:function(){return c(n.get.apply(e),t.stack)},enumerable:!1,configurable:!0})}function h(e){var t=Object.getOwnPropertyDescriptor(e,"stack");Object.defineProperty(e,"stack",{get:function(){return p(t.get.apply(e))},enumerable:!1,configurable:!0})}var g=n(474),m=Array.prototype.slice,y=["name","message","stack"],v=["name","message","description","number","code","fileName","lineNumber","columnNumber","sourceURL","line","column","stack"];e.exports=r(Error),e.exports.error=r(Error),e.exports.eval=r(EvalError),e.exports.range=r(RangeError),e.exports.reference=r(ReferenceError),e.exports.syntax=r(SyntaxError),e.exports.type=r(TypeError),e.exports.uri=r(URIError),e.exports.formatter=g;var b=function(){return!(!Object.getOwnPropertyDescriptor||!Object.defineProperty||"undefined"!=typeof navigator&&/Android/.test(navigator.userAgent))}()},function(e,t,n){"use strict";function r(e){var t,n=["ps--in-scrolling"];return t=void 0===e?["ps--x","ps--y"]:["ps--"+e],n.concat(t)}var o=n(65),i=t.toInt=function(e){return parseInt(e,10)||0};t.isEditable=function(e){return o.matches(e,"input,[contenteditable]")||o.matches(e,"select,[contenteditable]")||o.matches(e,"textarea,[contenteditable]")||o.matches(e,"button,[contenteditable]")},t.removePsClasses=function(e){for(var t=0;t=i.contentHeight-i.containerHeight&&(n=i.contentHeight-i.containerHeight,n-e.scrollTop<=2?n=e.scrollTop:e.scrollTop=n,e.dispatchEvent(o("ps-y-reach-end"))),"left"===t&&n>=i.contentWidth-i.containerWidth&&(n=i.contentWidth-i.containerWidth,n-e.scrollLeft<=2?n=e.scrollLeft:e.scrollLeft=n,e.dispatchEvent(o("ps-x-reach-end"))),void 0===i.lastTop&&(i.lastTop=e.scrollTop),void 0===i.lastLeft&&(i.lastLeft=e.scrollLeft),"top"===t&&ni.lastTop&&e.dispatchEvent(o("ps-scroll-down")),"left"===t&&ni.lastLeft&&e.dispatchEvent(o("ps-scroll-right")),"top"===t&&n!==i.lastTop&&(e.scrollTop=i.lastTop=n,e.dispatchEvent(o("ps-scroll-y"))),"left"===t&&n!==i.lastLeft&&(e.scrollLeft=i.lastLeft=n,e.dispatchEvent(o("ps-scroll-x")))}},function(e,t,n){var r=n(2),o=n(177),i=n(123),a=n(122)("IE_PROTO"),s=function(){},l=function(){var e,t=n(176)("iframe"),r=i.length;for(t.style.display="none",n(179).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(" drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/redoc/000077500000000000000000000000001416705305200217765ustar00rootroot00000000000000drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/redoc/LICENSE000066400000000000000000000021031416705305200227770ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2015-present, Rebilly, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/redoc/redoc-logo.png000066400000000000000000000115511416705305200245410ustar00rootroot00000000000000‰PNG  IHDRăăwŽŁL pHYs  šśëiTXtXML:com.adobe.xmp ‚“ďB $IDATxÚíť}lWŐ‡©´ŇR#ŽlÓ™ Jĺ%d¨dŽÄ…÷Eťs¸lłât‰c":Ýt˛ YÇ$Ě÷…2Ĺč†Ugi$´„Íd˛ÁFQÔĹ?ÜŚç¤R™€ŠÝ÷„Ó¤iZč9÷ś{Ď9÷ů$Ď_ĘŻż{Î÷iď=÷Ľ čěěĹC# # #22 # #22 # #2@a2úȬKV S…›…„mÂ[B‡Đ …óˇđžĐ&Ľ(üIxT¸[¸N%Lj”§FŞąŻ—•MĆú ¶śż†Ąs¨ľťÝíQĘ»‹¸mÍ]FýrżŐ˛‘–PޤÇHüzO«yžQŚ©Ë8ŲqÖP~¤)G ÷ëőŹ®gďÔĄ,ă}–#¦5”9†”cŤĐwç]áÜädÔűŐtX =O˘Ô”_ţâPČ„ R“q†ECcUr2ęă¸ć ĎzڏÂ~]¸K8!“”±É°ý·výŰdd”˙˙áÉě‹÷„é™”UÂ>öż5E›"±‹ýÂh„LFĆí~^R2Şs "Ńéł1B!ă=†íýˇşŁKMĆŐËř‘p"BF/â@ámöŢÜý3R‘ńůeTLd”5zgZ´óőȰŚYŚk-Úř´eä6!‹q¨pȰmwöüpŔAČBeĽŢ˘]')cŮ_m dˇ"VꉦmúĹ”e,ĺK„,\Ćz‹¶|ş·Ďb:\ÄÓá˛pŐ ŤX´ăĽäe$™s{βhż˝B52„t׎ę.l—EŰý¦ŻĎDF„DH»6śkŃf Ă‘‘ ¤»¶«Ţ´hŻĆŁ}.2"$Bš·Ű2˶: BşkŻ1łmúUĎČH˛˙íTˇ_›9˙«Ś!ÍÚh‘e»4öçó‘‘ d˙Úf´ĺDµ€řtd$é¦MŞ-gÚ(nëďĎAF‚ÇnŹU–mđ¶Éň8d$yôvźáúżgňł(ž^& —]HůŢ_Z^w‹éĎc Uz8]šUV!ŐzCaO†uŞ#Ë,c"úY´\6!ő6»3\ëU6?—m7ŇĄŮq–BH=ďô… ׸QM(łŚ«‘Ď˙FW© )ßk°ÚË4õ©ŰÚSl>[5¦ÍD›¤DTh3ł|dDĆŇ )ßcđ\ĆëůyÖďÁm*·©ĄR˝ Zł>źŰ>'2€ĂBůţ„72~˙VWżôxµÁ«ŤR )?ďbáýŚß»Mćę;ńŇź—ţĄRźŐŕŕűŞCQĎrůÝÇt¸Ň)źýyµ°ď©VúOuýý(NJ!¤|ćw…w|?µ>ń"퇌$i!ĺsNutâMDd$É ©Y®ÚcI’BĘż9Wř›Ăgň„ľŰ I2BĘ˙7Vż€w98öŽpNí…Ś$z!ĺż}IíŔ¦G•]ŠřĎţn&…ڤ´Bę=LĎžđôşh“Z×g;!#‰MČ/7Żz|o{‡šw!#‰MHźtß.Ş}‘ ä^Čóů Bö~fâ/…ʢŰI™…lőµ»ô2–x˘x™÷eµ}‰˙3ˇ*¤_P,ˇ‚öe5aÝŃŽňFFł/«˙ďĽ]ň­;Űn@Jű˛ö†ÚŚř;.ö¨AĆţu$R±/kOÔnőj!–A-¶j„÷eÝ) Šm„}Y‘‘ŰTnS’`_VdäŐŻ6’—ţŔľ¬ Ét8`_Vdd˘8AHd$ ČH‘‘ $2„ PHd$ČH2!‘‘ d B"#AČ@„DF‚‰Ś! B"$2„ DHd$ČH2!‘‘ d B"#AČ@„DF‚ć<ćădăelˇtHŔB®.“Ś;(¸?(‹Śű)¸jËĘeQ1–’! Ů«Śí†z5ĺB"rBŚ2n1ĽČ-” ‰@Č{c”±ÁâBÇQ*$p!÷ą8‚.ogX\čC” ‰@Č)±ÉX-tXl-?‰2!9 ů •ŚúBﳸĐ…Ę„ä$Ł:łe·aŤ®ŠQĆ)–·k(’Ł‹ ëó‰e¬Z-…\B™śdśmX››Ł“Q_h}†aäĺJhĘ…x–qAŢ Š’Ń枼ç2–ˇ” ń(ă:ĂšlŚRF}±Ó3ÎzhćđW’xq‚Ĺ7©Ç†heÔÝč`ćü.}Zq-eD8\x͢/Ž]ĆĎ o9:ęZÍ o®¦ #…“|,%É 8X-JnöZÔŢaáSQ˨b˛ľN€HyĘĹ/…ÂeÔB^K‡BÄ\’ŚŚZČt*Dzľ¬LMF5`%ť ‘QďęŮ5»Ią”†HŘčr )8µ— čl=Â)É˨…/ĽB§C€¨ĹÄg»~ŬŚZČ˝;Ŕ! AíătŽŹ÷ťAËŘMĘ:µ —Ĺ%—¨Ů^gřš|…ŚÝ¤Tł$äyrć đ+µS…Ď™@QÉŘMĘ!•Â&ÝP řz6ĽK–Ç´Ľ(eě!¦ÚWgŞpłđ€°MĎwí Ŕb„ôYááB;ľ+#řF@F@Fdd@F@Fdd@F@FddHŚ˙˘sŚ—xŐIEND®B`‚drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/redoc/redoc.min.js000066400000000000000000036362411416705305200242310ustar00rootroot00000000000000/*! For license information please see redoc.standalone.js.LICENSE.txt */ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):"function"==typeof define&&define.amd?define(["null"],t):"object"==typeof exports?exports.Redoc=t(require("null")):e.Redoc=t(e.null)}(this,(function(e){return function(){var t={7228:function(e){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){l=!0,a=e},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw a}}}},e.exports.default=e.exports,e.exports.__esModule=!0},9842:function(e,t,n){var r=n(9754),o=n(7067),i=n(8585);e.exports=function(e){var t=o();return function(){var n,o=r(e);if(t){var a=r(this).constructor;n=Reflect.construct(o,arguments,a)}else n=o.apply(this,arguments);return i(this,n)}},e.exports.default=e.exports,e.exports.__esModule=!0},9713:function(e){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.default=e.exports,e.exports.__esModule=!0},9754:function(e){function t(n){return e.exports=t=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.default=e.exports,e.exports.__esModule=!0,t(n)}e.exports=t,e.exports.default=e.exports,e.exports.__esModule=!0},2205:function(e,t,n){var r=n(9489);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)},e.exports.default=e.exports,e.exports.__esModule=!0},430:function(e){e.exports=function(e){return-1!==Function.toString.call(e).indexOf("[native code]")},e.exports.default=e.exports,e.exports.__esModule=!0},7067:function(e){e.exports=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}},e.exports.default=e.exports,e.exports.__esModule=!0},6860:function(e){e.exports=function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)},e.exports.default=e.exports,e.exports.__esModule=!0},3884:function(e){e.exports=function(e,t){var n=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=n){var r,o,i=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){s=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw o}}return i}},e.exports.default=e.exports,e.exports.__esModule=!0},521:function(e){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},8206:function(e){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},8585:function(e,t,n){var r=n(8).default,o=n(1506);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?o(e):t},e.exports.default=e.exports,e.exports.__esModule=!0},9489:function(e){function t(n,r){return e.exports=t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},e.exports.default=e.exports,e.exports.__esModule=!0,t(n,r)}e.exports=t,e.exports.default=e.exports,e.exports.__esModule=!0},3038:function(e,t,n){var r=n(2858),o=n(3884),i=n(379),a=n(521);e.exports=function(e,t){return r(e)||o(e,t)||i(e,t)||a()},e.exports.default=e.exports,e.exports.__esModule=!0},319:function(e,t,n){var r=n(3646),o=n(6860),i=n(379),a=n(8206);e.exports=function(e){return r(e)||o(e)||i(e)||a()},e.exports.default=e.exports,e.exports.__esModule=!0},8:function(e){function t(n){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=t=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),t(n)}e.exports=t,e.exports.default=e.exports,e.exports.__esModule=!0},379:function(e,t,n){var r=n(7228);e.exports=function(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}},e.exports.default=e.exports,e.exports.__esModule=!0},5957:function(e,t,n){var r=n(9754),o=n(9489),i=n(430),a=n(9100);function s(t){var n="function"==typeof Map?new Map:void 0;return e.exports=s=function(e){if(null===e||!i(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(e))return n.get(e);n.set(e,t)}function t(){return a(e,arguments,r(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),o(t,e)},e.exports.default=e.exports,e.exports.__esModule=!0,s(t)}e.exports=s,e.exports.default=e.exports,e.exports.__esModule=!0},7757:function(e,t,n){e.exports=n(5666)},2840:function(e,t,n){"use strict";var r=n(319).default,o=n(7757);n(1539),n(8674),n(9601),n(2222),n(1249),n(8309),n(7941),n(7327),n(4916),n(3123),n(7042);var i=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function s(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.bundleDocument=t.bundle=t.OasVersion=void 0;var a,s=n(2307),l=n(8604),c=n(9079),u=n(8553),p=n(4343),f=n(7649),d=n(9562),h=n(3353),m=n(6230),v=n(8140),g=n(4241),y=n(2806),b=n(9272);function x(e){return i(this,void 0,void 0,o.mark((function t(){var n,i,s,v,y,b,x,w,E,S,_,O,A,R,C;return o.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.document,i=e.config,s=e.customTypes,v=e.externalRefResolver,y=e.dereference,b=void 0!==y&&y,x=m.detectOpenAPI(n.parsed),w=m.openAPIMajor(x),E=i.getRulesForOasVersion(w),S=d.normalizeTypes(i.extendTypes((null!=s?s:w===m.OasMajorVersion.Version3)?x===a.Version3_1?f.Oas3_1Types:u.Oas3Types:p.Oas2Types,x),i),_=g.initRules(E,i,"preprocessors",x),O=g.initRules(E,i,"decorators",x),A={problems:[],oasVersion:x},R=c.normalizeVisitors([].concat(r(_),[{severity:"error",ruleId:"bundler",visitor:k(w,b,n)}],r(O)),S),t.next=11,l.resolveDocument({rootDocument:n,rootType:S.DefinitionRoot,externalRefResolver:v});case 11:return C=t.sent,h.walkDocument({document:n,rootType:S.DefinitionRoot,normalizedVisitors:R,resolvedRefMap:C,ctx:A}),t.abrupt("return",{bundle:n,problems:A.problems.map((function(e){return i.addProblemToIgnore(e)})),fileDependencies:v.getFiles()});case 14:case"end":return t.stop()}}),t)})))}function w(e,t){switch(t){case m.OasMajorVersion.Version3:switch(e){case"Schema":return"schemas";case"Parameter":return"parameters";case"Response":return"responses";case"Example":return"examples";case"RequestBody":return"requestBodies";case"Header":return"headers";case"SecuritySchema":return"securitySchemes";case"Link":return"links";case"Callback":return"callbacks";default:return null}case m.OasMajorVersion.Version2:switch(e){case"Schema":return"definitions";case"Parameter":return"parameters";case"Response":return"responses";default:return null}}}function k(e,t,n){var r,o={ref:{leave:function(r,o,s){if(s.location&&void 0!==s.node){if(s.location.source!==n.source||s.location.source!==o.location.source||"scalar"===o.type.name||t){var l=w(o.type.name,e);l?t?(a(l,s,o),i(r,s,o)):r.$ref=a(l,s,o):i(r,s,o)}}else y.reportUnresolvedRef(s,o.report,o.location)}},DefinitionRoot:{enter:function(t){e===m.OasMajorVersion.Version3?r=t.components=t.components||{}:e===m.OasMajorVersion.Version2&&(r=t)}}};function i(e,t,n){b.isPlainObject(t.node)?(delete e.$ref,Object.assign(e,t.node)):n.parent[n.key]=t.node}function a(t,n,o){r[t]=r[t]||{};var i=function(e,t,n){for(var o=[e.location.source.absoluteRef,e.location.pointer],i=o[0],a=o[1],l=r[t],c="",u=a.slice(2).split("/").filter(Boolean);u.length>0;)if(c=u.pop()+(c?"-".concat(c):""),!l||!l[c]||s(l[c],e.node))return c;if(!l[c=v.refBaseName(i)+(c?"_".concat(c):"")]||s(l[c],e.node))return c;for(var p=c,f=2;l[c]&&!s(l[c],e.node);)c="".concat(p,"-").concat(f),f++;return l[c]||n.report({message:"Two schemas are referenced with the same name but different content. Renamed ".concat(p," to ").concat(c,"."),location:n.location,forceSeverity:"warn"}),c}(n,t,o);return r[t][i]=n.node,e===m.OasMajorVersion.Version3?"#/components/".concat(t,"/").concat(i):"#/".concat(t,"/").concat(i)}return e===m.OasMajorVersion.Version3&&(o.DiscriminatorMapping={leave:function(n,r){for(var o=0,i=Object.keys(n);o1&&void 0!==arguments[1]?arguments[1]:"";if(!e)return[];var n=require,r=new Map;return e.map((function(e){var o="string"==typeof e?n(u.resolve(u.dirname(t),e)):e,i=o.id;if("string"!=typeof i)throw new Error(d.red("Plugin must define `id` property in ".concat(d.blue(e.toString()),".")));if(r.has(i)){var a=r.get(i);throw new Error(d.red('Plugin "id" must be unique. Plugin '.concat(d.blue(e.toString()),' uses id "').concat(d.blue(i),'" already seen in ').concat(d.blue(a))))}r.set(i,e.toString());var s=Object.assign(Object.assign({id:i},o.configs?{configs:o.configs}:{}),o.typeExtension?{typeExtension:o.typeExtension}:{});if(o.rules){if(!o.rules.oas3&&!o.rules.oas2)throw new Error('Plugin rules must have `oas3` or `oas2` rules "'.concat(e,"."));s.rules={},o.rules.oas3&&(s.rules.oas3=y(o.rules.oas3,i)),o.rules.oas2&&(s.rules.oas2=y(o.rules.oas2,i))}if(o.preprocessors){if(!o.preprocessors.oas3&&!o.preprocessors.oas2)throw new Error('Plugin `preprocessors` must have `oas3` or `oas2` preprocessors "'.concat(e,"."));s.preprocessors={},o.preprocessors.oas3&&(s.preprocessors.oas3=y(o.preprocessors.oas3,i)),o.preprocessors.oas2&&(s.preprocessors.oas2=y(o.preprocessors.oas2,i))}if(o.decorators){if(!o.decorators.oas3&&!o.decorators.oas2)throw new Error('Plugin `decorators` must have `oas3` or `oas2` decorators "'.concat(e,"."));s.decorators={},o.decorators.oas3&&(s.decorators.oas3=y(o.decorators.oas3,i)),o.decorators.oas2&&(s.decorators.oas2=y(o.decorators.oas2,i))}return s})).filter(h.notUndefined)}(n.plugins,o):[],this.doNotResolveExamples=!!n.doNotResolveExamples,n.extends||(this.recommendedFallback=!0);var w,k,E=n.extends?(w=n.extends,k=this.plugins,w.map((function(e){var t,n=function(e){if(e.indexOf("/")>-1){var t=e.split("/"),n=r(t,2);return{pluginId:n[0],configName:n[1]}}return{pluginId:"",configName:e}}(e),o=n.pluginId,i=n.configName,a=k.find((function(e){return e.id===o}));if(!a)throw new Error("Invalid config ".concat(d.red(e),": plugin ").concat(o," is not included."));var s=null===(t=a.configs)||void 0===t?void 0:t[i];if(!s)throw new Error(o?"Invalid config ".concat(d.red(e),": plugin ").concat(o," doesn't export config with name ").concat(i,"."):"Invalid config ".concat(d.red(e),": there is no such built-in config."));return s}))):[v.default];(n.rules||n.preprocessors||n.decorators)&&E.push({rules:n.rules,preprocessors:n.preprocessors,decorators:n.decorators});var S=function(e){var t,n={rules:{},oas2Rules:{},oas3_0Rules:{},oas3_1Rules:{},preprocessors:{},oas2Preprocessors:{},oas3_0Preprocessors:{},oas3_1Preprocessors:{},decorators:{},oas2Decorators:{},oas3_0Decorators:{},oas3_1Decorators:{}},r=i(e);try{for(r.s();!(t=r.n()).done;){var o=t.value;if(o.extends)throw new Error("`extends` is not supported in shared configs yet: ".concat(JSON.stringify(o,null,2),"."));Object.assign(n.rules,o.rules),Object.assign(n.oas2Rules,o.oas2Rules),b(n.oas2Rules,o.rules||{}),Object.assign(n.oas3_0Rules,o.oas3_0Rules),b(n.oas3_0Rules,o.rules||{}),Object.assign(n.oas3_1Rules,o.oas3_1Rules),b(n.oas3_1Rules,o.rules||{}),Object.assign(n.preprocessors,o.preprocessors),Object.assign(n.oas2Preprocessors,o.oas2Preprocessors),b(n.oas2Preprocessors,o.preprocessors||{}),Object.assign(n.oas3_0Preprocessors,o.oas3_0Preprocessors),b(n.oas3_0Preprocessors,o.preprocessors||{}),Object.assign(n.oas3_1Preprocessors,o.oas3_1Preprocessors),b(n.oas3_1Preprocessors,o.preprocessors||{}),Object.assign(n.decorators,o.decorators),Object.assign(n.oas2Decorators,o.oas2Decorators),b(n.oas2Decorators,o.decorators||{}),Object.assign(n.oas3_0Decorators,o.oas3_0Decorators),b(n.oas3_0Decorators,o.decorators||{}),Object.assign(n.oas3_1Decorators,o.oas3_1Decorators),b(n.oas3_1Decorators,o.decorators||{})}}catch(e){r.e(e)}finally{r.f()}return n}(E);this.rules=(a(l={},m.OasVersion.Version2,Object.assign(Object.assign({},S.rules),S.oas2Rules)),a(l,m.OasVersion.Version3_0,Object.assign(Object.assign({},S.rules),S.oas3_0Rules)),a(l,m.OasVersion.Version3_1,Object.assign(Object.assign({},S.rules),S.oas3_1Rules)),l),this.preprocessors=(a(g={},m.OasVersion.Version2,Object.assign(Object.assign({},S.preprocessors),S.oas2Preprocessors)),a(g,m.OasVersion.Version3_0,Object.assign(Object.assign({},S.preprocessors),S.oas3_0Preprocessors)),a(g,m.OasVersion.Version3_1,Object.assign(Object.assign({},S.preprocessors),S.oas3_1Preprocessors)),g),this.decorators=(a(x={},m.OasVersion.Version2,Object.assign(Object.assign({},S.decorators),S.oas2Decorators)),a(x,m.OasVersion.Version3_0,Object.assign(Object.assign({},S.decorators),S.oas3_0Decorators)),a(x,m.OasVersion.Version3_1,Object.assign(Object.assign({},S.decorators),S.oas3_1Decorators)),x);var _=this.configFile?u.dirname(this.configFile):"undefined"!=typeof process&&process.cwd()||"",O=u.join(_,t.bD);if(c.hasOwnProperty("existsSync")&&c.existsSync(O)){this.ignore=p.safeLoad(c.readFileSync(O,"utf-8"))||{};for(var A=0,R=Object.keys(this.ignore);A-1}},8604:function(e,t,n){"use strict";var r=n(3269).default,o=n(7757),i=n(3038).default,a=n(1506).default,s=n(2205).default,l=n(9842).default,c=n(5957).default,u=n(4575).default,p=n(3913).default;n(1539),n(8674),n(4916),n(3123),n(4723),n(6992),n(1532),n(8783),n(3948),n(189),n(1038),n(6699),n(2222),n(8309),n(7941),n(9601);var f=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function s(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.resolveDocument=t.BaseResolver=t.makeDocumentFromString=t.YamlParseError=t.ResolveError=t.Source=void 0;var d=n(3817),h=n(6470),m=n(8575),v=n(4756),g=n(8140),y=n(9562),b=n(9272),x=function(){function e(t,n,r){u(this,e),this.absoluteRef=t,this.body=n,this.mimeType=r}return p(e,[{key:"getAst",value:function(e){var t;return void 0===this._ast&&(this._ast=null!==(t=e(this.body,{filename:this.absoluteRef}))&&void 0!==t?t:void 0,this._ast&&0===this._ast.kind&&""===this._ast.value&&1!==this._ast.startPosition&&(this._ast.startPosition=1,this._ast.endPosition=1)),this._ast}},{key:"getLines",value:function(){return void 0===this._lines&&(this._lines=this.body.split(/\r\n|[\n\r]/g)),this._lines}}]),e}();t.Source=x;var w=function(e){s(n,e);var t=l(n);function n(e){var r;return u(this,n),(r=t.call(this,e.message)).originalError=e,Object.setPrototypeOf(a(r),n.prototype),r}return n}(c(Error));t.ResolveError=w;var k=/at line (\d+), column (\d+):/,E=function(e){s(n,e);var t=l(n);function n(e,r){var o;u(this,n),(o=t.call(this,e.message.split("\n")[0])).originalError=e,o.source=r,Object.setPrototypeOf(a(o),n.prototype);var s=o.message.match(k)||[],l=i(s,3),c=l[1],p=l[2];return o.line=parseInt(c,10),o.col=parseInt(p,10),o}return n}(c(Error));t.YamlParseError=E,t.makeDocumentFromString=function(e,t){var n=new x(t,e);try{return{source:n,parsed:v.safeLoad(e,{filename:t})}}catch(e){throw new E(e,n)}};var S=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{http:{headers:[]}};u(this,e),this.config=t,this.cache=new Map}return p(e,[{key:"getFiles",value:function(){return new Set(Array.from(this.cache.keys()))}},{key:"resolveExternalRef",value:function(e,t){return g.isAbsoluteUrl(t)?t:e&&g.isAbsoluteUrl(e)?m.resolve(e,t):h.resolve(e?h.dirname(e):process.cwd(),t)}},{key:"loadExternalRef",value:function(e){return f(this,void 0,void 0,o.mark((function t(){var n,r,i;return o.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(t.prev=0,!g.isAbsoluteUrl(e)){t.next=10;break}return t.next=4,b.readFileFromUrl(e,this.config.http);case 4:return n=t.sent,r=n.body,i=n.mimeType,t.abrupt("return",new x(e,r,i));case 10:return t.t0=x,t.t1=e,t.next=14,d.promises.readFile(e,"utf-8");case 14:return t.t2=t.sent,t.abrupt("return",new t.t0(t.t1,t.t2));case 16:t.next=21;break;case 18:throw t.prev=18,t.t3=t.catch(0),new w(t.t3);case 21:case"end":return t.stop()}}),t,this,[[0,18]])})))}},{key:"parseDocument",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=e.absoluteRef.substr(e.absoluteRef.lastIndexOf("."));if(![".json",".json",".yml",".yaml"].includes(r)&&!(null===(t=e.mimeType)||void 0===t?void 0:t.match(/(json|yaml|openapi)/))&&!n)return{source:e,parsed:e.body};try{return{source:e,parsed:v.safeLoad(e.body,{filename:e.absoluteRef})}}catch(t){throw new E(t,e)}}},{key:"resolveDocument",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return f(this,void 0,void 0,o.mark((function r(){var i,a,s,l=this;return o.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(i=this.resolveExternalRef(e,t),!(a=this.cache.get(i))){r.next=4;break}return r.abrupt("return",a);case 4:return s=this.loadExternalRef(i).then((function(e){return l.parseDocument(e,n)})),this.cache.set(i,s),r.abrupt("return",s);case 7:case"end":return r.stop()}}),r,this)})))}}]),e}();function _(e,t){return{prev:e,node:t}}function O(e,t){for(;e;){if(e.node===t)return!0;e=e.prev}return!1}t.BaseResolver=S;var A={name:"unknown",properties:{}},R={name:"scalar",properties:{}};t.resolveDocument=function(e){return f(this,void 0,void 0,o.mark((function t(){var n,i,a,s,l,c,u,p;return o.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:p=function(e,t,n,a){function u(e,t,n){return f(this,void 0,void 0,o.mark((function a(){var l,c,p,f,d,h,m,v,y,b,x,w,k;return o.wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(!O(n.prev,t)){o.next=2;break}throw new Error("Self-referencing circular pointer");case 2:if(l=g.parseRef(t.$ref),c=l.uri,p=l.pointer,f=null!==c,o.prev=4,!f){o.next=11;break}return o.next=8,i.resolveDocument(e.source.absoluteRef,c);case 8:o.t0=o.sent,o.next=12;break;case 11:o.t0=e;case 12:d=o.t0,o.next=21;break;case 15:return o.prev=15,o.t1=o.catch(4),h={resolved:!1,isRemote:f,document:void 0,error:o.t1},m=e.source.absoluteRef+"::"+t.$ref,s.set(m,h),o.abrupt("return",h);case 21:v={resolved:!0,document:d,isRemote:f,node:e.parsed,nodePointer:"#/"},y=d.parsed,b=r(p),o.prev=25,b.s();case 27:if((x=b.n()).done){o.next=55;break}if(w=x.value,"object"==typeof y){o.next=34;break}return y=void 0,o.abrupt("break",55);case 34:if(void 0===y[w]){o.next=39;break}y=y[w],v.nodePointer=g.joinPointer(v.nodePointer,g.escapePointer(w)),o.next=53;break;case 39:if(!g.isRef(y)){o.next=51;break}return o.next=42,u(d,y,_(n,y));case 42:if(v=o.sent,d=v.document||d,"object"==typeof v.node){o.next=47;break}return y=void 0,o.abrupt("break",55);case 47:y=v.node[w],v.nodePointer=g.joinPointer(v.nodePointer,g.escapePointer(w)),o.next=53;break;case 51:return y=void 0,o.abrupt("break",55);case 53:o.next=27;break;case 55:o.next=60;break;case 57:o.prev=57,o.t2=o.catch(25),b.e(o.t2);case 60:return o.prev=60,b.f(),o.finish(60);case 63:if(v.node=y,v.document=d,k=e.source.absoluteRef+"::"+t.$ref,!v.document||!g.isRef(y)){o.next=70;break}return o.next=69,u(v.document,y,_(n,y));case 69:v=o.sent;case 70:return s.set(k,v),o.abrupt("return",Object.assign({},v));case 72:case"end":return o.stop()}}),a,null,[[4,15],[25,57,60,63]])})))}!function e(n,r,o){if("object"==typeof n&&null!==n){var i="".concat(r.name,"::").concat(o);if(!l.has(i))if(l.add(i),Array.isArray(n)){var a=r.items;if(r!==A&&void 0===a)return;for(var s=0;s1&&void 0!==arguments[1]?arguments[1]:{},n={},o=0,i=Object.keys(e);o4&&void 0!==arguments[4]?arguments[4]:[];if(!s.includes(t)){s=[].concat(r(s),[t]);for(var l=new Set,c=0,u=Object.values(t.properties);c3&&void 0!==arguments[3]?arguments[3]:0,a=Object.keys(t);if(0===i)a.push("any"),a.push("ref");else{if(r.any)throw new Error("any() is allowed only on top level");if(r.ref)throw new Error("ref() is allowed only on top level")}for(var s=0,l=a;s1&&void 0!==arguments[1]?arguments[1]:C.source.absoluteRef;if(!i.isRef(e))return{location:m,node:e};var n=t+"::"+e.$ref,r=p.get(n);if(!r)return{location:void 0,node:void 0};var o=r.resolved,s=r.node,l=r.document,c=r.nodePointer,u=r.error,f=o?new i.Location(l.source,c):u instanceof a.YamlParseError?new i.Location(u.source,""):void 0;return{location:f,node:s,error:u}}function Ne(e,t,n){var r=n.location?Array.isArray(n.location)?n.location:[n.location]:[Object.assign(Object.assign({},C),{reportOnKey:!1})];f.problems.push(Object.assign(Object.assign({ruleId:e,severity:n.forceSeverity||t},n),{suggest:n.suggest||[],location:r.map((function(e){return Object.assign(Object.assign(Object.assign({},C),{reportOnKey:!1}),e)}))}))}}(t.parsed,n,new i.Location(t.source,"#/"),void 0,"")}},4756:function(e,t,n){"use strict";var r=n(9439);e.exports=r},9439:function(e,t,n){"use strict";var r=n(5143),o=n(9084);function i(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}e.exports.Type=n(889),e.exports.Schema=n(304),e.exports.FAILSAFE_SCHEMA=n(4801),e.exports.JSON_SCHEMA=n(2437),e.exports.CORE_SCHEMA=n(9533),e.exports.DEFAULT_SAFE_SCHEMA=n(7265),e.exports.DEFAULT_FULL_SCHEMA=n(1493),e.exports.load=r.load,e.exports.loadAll=r.loadAll,e.exports.safeLoad=r.safeLoad,e.exports.safeLoadAll=r.safeLoadAll,e.exports.dump=o.dump,e.exports.safeDump=o.safeDump,e.exports.YAMLException=n(2188),e.exports.MINIMAL_SCHEMA=n(4801),e.exports.SAFE_SCHEMA=n(7265),e.exports.DEFAULT_SCHEMA=n(1493),e.exports.scan=i("scan"),e.exports.parse=i("parse"),e.exports.compose=i("compose"),e.exports.addConstructor=i("addConstructor")},910:function(e,t,n){"use strict";function r(e){return null==e}n(7941),n(9653),n(2481),e.exports.isNothing=r,e.exports.isObject=function(e){return"object"==typeof e&&null!==e},e.exports.toArray=function(e){return Array.isArray(e)?e:r(e)?[]:[e]},e.exports.repeat=function(e,t){var n,r="";for(n=0;n>10),56320+(e-65536&1023))}for(var k=new Array(256),E=new Array(256),S=0;S<256;S++)k[S]=x(S)?1:0,E[S]=x(S);function _(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||s,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function O(e,t){return new o(t,new i(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function A(e,t){throw O(e,t)}function R(e,t){e.onWarning&&e.onWarning.call(null,O(e,t))}var C={YAML:function(e,t,n){var r,o,i;null!==e.version&&A(e,"duplication of %YAML directive"),1!==n.length&&A(e,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&A(e,"ill-formed argument of the YAML directive"),o=parseInt(r[1],10),i=parseInt(r[2],10),1!==o&&A(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=i<2,1!==i&&2!==i&&R(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var r,o;2!==n.length&&A(e,"TAG directive accepts exactly two arguments"),r=n[0],o=n[1],f.test(r)||A(e,"ill-formed tag handle (first argument) of the TAG directive"),l.call(e.tagMap,r)&&A(e,'there is a previously declared suffix for "'+r+'" tag handle'),d.test(o)||A(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[r]=o}};function T(e,t,n,r){var o,i,a,s;if(t1&&(e.result+=r.repeat("\n",t-1))}function D(e,t){var n,r,o=e.tag,i=e.anchor,a=[],s=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),r=e.input.charCodeAt(e.position);0!==r&&45===r&&g(e.input.charCodeAt(e.position+1));)if(s=!0,e.position++,L(e,!0,-1)&&e.lineIndent<=t)a.push(null),r=e.input.charCodeAt(e.position);else if(n=e.line,U(e,t,3,!1,!0),a.push(e.result),L(e,!0,-1),r=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==r)A(e,"bad indentation of a sequence entry");else if(e.lineIndentt?x=1:e.lineIndent===t?x=0:e.lineIndentt?x=1:e.lineIndent===t?x=0:e.lineIndentt)&&(U(e,t,4,!0,o)&&(m?d=e.result:h=e.result),m||(I(e,u,p,f,d,h,i,a),f=d=h=null),L(e,!0,-1),s=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==s)A(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===i?A(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?A(e,"repeat of an indentation width identifier"):(p=t+i-1,u=!0)}if(v(a)){do{a=e.input.charCodeAt(++e.position)}while(v(a));if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!m(a)&&0!==a)}for(;0!==a;){for(j(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!u||e.lineIndentp&&(p=e.lineIndent),m(a))f++;else{if(e.lineIndent0){for(o=a,i=0;o>0;o--)(a=b(s=e.input.charCodeAt(++e.position)))>=0?i=(i<<4)+a:A(e,"expected hexadecimal character");e.result+=w(i),e.position++}else A(e,"unknown escape sequence");n=r=e.position}else m(s)?(T(e,n,r,!0),M(e,L(e,!1,t)),n=r=e.position):e.position===e.lineStart&&N(e)?A(e,"unexpected end of the document within a double quoted scalar"):(e.position++,r=e.position)}A(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?_=!0:function(e){var t,n,r;if(42!==(r=e.input.charCodeAt(e.position)))return!1;for(r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!g(r)&&!y(r);)r=e.input.charCodeAt(++e.position);return e.position===t&&A(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),l.call(e.anchorMap,n)||A(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],L(e,!0,-1),!0}(e)?(_=!0,null===e.tag&&null===e.anchor||A(e,"alias node should not have any properties")):function(e,t,n){var r,o,i,a,s,l,c,u,p=e.kind,f=e.result;if(g(u=e.input.charCodeAt(e.position))||y(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(g(r=e.input.charCodeAt(e.position+1))||n&&y(r)))return!1;for(e.kind="scalar",e.result="",o=i=e.position,a=!1;0!==u;){if(58===u){if(g(r=e.input.charCodeAt(e.position+1))||n&&y(r))break}else if(35===u){if(g(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&N(e)||n&&y(u))break;if(m(u)){if(s=e.line,l=e.lineStart,c=e.lineIndent,L(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=i,e.line=s,e.lineStart=l,e.lineIndent=c;break}}a&&(T(e,o,i,!1),M(e,e.line-s),o=i=e.position,a=!1),v(u)||(i=e.position+1),u=e.input.charCodeAt(++e.position)}return T(e,o,i,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===n)&&(_=!0,null===e.tag&&(e.tag="?")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===x&&(_=c&&D(e,h))),null!==e.tag&&"!"!==e.tag)if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&A(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),u=0,p=e.implicitTypes.length;u tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result)?(e.result=f.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):A(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):A(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||_}function B(e){var t,n,r,o,i=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(o=e.input.charCodeAt(e.position))&&(L(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(a=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!g(o);)o=e.input.charCodeAt(++e.position);for(r=[],(n=e.input.slice(t,e.position)).length<1&&A(e,"directive name must not be less than one character in length");0!==o;){for(;v(o);)o=e.input.charCodeAt(++e.position);if(35===o){do{o=e.input.charCodeAt(++e.position)}while(0!==o&&!m(o));break}if(m(o))break;for(t=e.position;0!==o&&!g(o);)o=e.input.charCodeAt(++e.position);r.push(e.input.slice(t,e.position))}0!==o&&j(e),l.call(C,n)?C[n](e,n,r):R(e,'unknown document directive "'+n+'"')}L(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,L(e,!0,-1)):a&&A(e,"directives end mark is expected"),U(e,e.lineIndent-1,4,!1,!0),L(e,!0,-1),e.checkLineBreaks&&u.test(e.input.slice(i,e.position))&&R(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&N(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,L(e,!0,-1)):e.position0&&-1==="\0\r\nÂ…\u2028\u2029".indexOf(this.buffer.charAt(o-1));)if(o-=1,this.position-o>t/2-1){n=" ... ",o+=5;break}for(i="",a=this.position;at/2-1){i=" ... ",a-=5;break}return s=this.buffer.slice(o,a),r.repeat(" ",e)+n+s+i+"\n"+r.repeat(" ",e+this.position-o+n.length)+"^"},o.prototype.toString=function(e){var t,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet())&&(n+=":\n"+t),n},e.exports=o},304:function(e,t,n){"use strict";n(4747),n(7327);var r=n(910),o=n(2188),i=n(889);function a(e,t,n){var r=[];return e.include.forEach((function(e){n=a(e,t,n)})),e[t].forEach((function(e){n.forEach((function(t,n){t.tag===e.tag&&t.kind===e.kind&&r.push(n)})),n.push(e)})),n.filter((function(e,t){return-1===r.indexOf(t)}))}function s(e){this.include=e.include||[],this.implicit=e.implicit||[],this.explicit=e.explicit||[],this.implicit.forEach((function(e){if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")})),this.compiledImplicit=a(this,"implicit",[]),this.compiledExplicit=a(this,"explicit",[]),this.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{}};function r(e){n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e64)){if(t<0)return!1;r+=6}return r%8==0},construct:function(e){var t,n,o=e.replace(/[\r\n=]/g,""),a=o.length,s=i,l=0,c=[];for(t=0;t>16&255),c.push(l>>8&255),c.push(255&l)),l=l<<6|s.indexOf(o.charAt(t));return 0==(n=a%4*6)?(c.push(l>>16&255),c.push(l>>8&255),c.push(255&l)):18===n?(c.push(l>>10&255),c.push(l>>2&255)):12===n&&c.push(l>>4&255),r?r.from?r.from(c):new r(c):c},predicate:function(e){return r&&r.isBuffer(e)},represent:function(e){var t,n,r="",o=0,a=e.length,s=i;for(t=0;t>18&63],r+=s[o>>12&63],r+=s[o>>6&63],r+=s[63&o]),o=(o<<8)+e[t];return 0==(n=a%3)?(r+=s[o>>18&63],r+=s[o>>12&63],r+=s[o>>6&63],r+=s[63&o]):2===n?(r+=s[o>>10&63],r+=s[o>>4&63],r+=s[o<<2&63],r+=s[64]):1===n&&(r+=s[o>>2&63],r+=s[o<<4&63],r+=s[64],r+=s[64]),r}})},9753:function(e,t,n){"use strict";n(1539);var r=n(889);e.exports=new r("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},293:function(e,t,n){"use strict";n(4603),n(4916),n(9714),n(5306),n(7042),n(9653),n(4747),n(3123),n(1539);var r=n(910),o=n(889),i=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),a=/^[-+]?[0-9]+e/;e.exports=new o("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!i.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n,r,o;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,o=[],"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:t.indexOf(":")>=0?(t.split(":").forEach((function(e){o.unshift(parseFloat(e,10))})),t=0,r=1,o.forEach((function(e){t+=e*r,r*=60})),n*t):n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||r.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(r.isNegativeZero(e))return"-0.0";return n=e.toString(10),a.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"})},5733:function(e,t,n){"use strict";n(7042),n(4916),n(5306),n(4747),n(3123),n(1539),n(9714);var r=n(910),o=n(889);function i(e){return 48<=e&&e<=55}function a(e){return 48<=e&&e<=57}e.exports=new o("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,r=e.length,o=0,s=!1;if(!r)return!1;if("-"!==(t=e[o])&&"+"!==t||(t=e[++o]),"0"===t){if(o+1===r)return!0;if("b"===(t=e[++o])){for(o++;o=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0"+e.toString(8):"-0"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},9798:function(e,t,n){"use strict";var r;n(4747),n(8309),n(7042),n(1539),n(9714);try{r=n(7707)}catch(e){"undefined"!=typeof window&&(r=window.esprima)}var o=n(889);e.exports=new o("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:function(e){if(null===e)return!1;try{var t="("+e+")",n=r.parse(t,{range:!0});return"Program"===n.type&&1===n.body.length&&"ExpressionStatement"===n.body[0].type&&("ArrowFunctionExpression"===n.body[0].expression.type||"FunctionExpression"===n.body[0].expression.type)}catch(e){return!1}},construct:function(e){var t,n="("+e+")",o=r.parse(n,{range:!0}),i=[];if("Program"!==o.type||1!==o.body.length||"ExpressionStatement"!==o.body[0].type||"ArrowFunctionExpression"!==o.body[0].expression.type&&"FunctionExpression"!==o.body[0].expression.type)throw new Error("Failed to resolve function");return o.body[0].expression.params.forEach((function(e){i.push(e.name)})),t=o.body[0].expression.body.range,"BlockStatement"===o.body[0].expression.body.type?new Function(i,n.slice(t[0]+1,t[1]-1)):new Function(i,"return "+n.slice(t[0],t[1]))},predicate:function(e){return"[object Function]"===Object.prototype.toString.call(e)},represent:function(e){return e.toString()}})},6446:function(e,t,n){"use strict";n(4916),n(7042),n(4603),n(9714),n(1539);var r=n(889);e.exports=new r("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:function(e){if(null===e)return!1;if(0===e.length)return!1;var t=e,n=/\/([gim]*)$/.exec(e),r="";if("/"===t[0]){if(n&&(r=n[1]),r.length>3)return!1;if("/"!==t[t.length-r.length-1])return!1}return!0},construct:function(e){var t=e,n=/\/([gim]*)$/.exec(e),r="";return"/"===t[0]&&(n&&(r=n[1]),t=t.slice(1,t.length-r.length-1)),new RegExp(t,r)},predicate:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},represent:function(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}})},1467:function(e,t,n){"use strict";var r=n(889);e.exports=new r("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:function(){return!0},construct:function(){},predicate:function(e){return void 0===e},represent:function(){return""}})},127:function(e,t,n){"use strict";var r=n(889);e.exports=new r("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},321:function(e,t,n){"use strict";var r=n(889);e.exports=new r("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}})},1608:function(e,t,n){"use strict";var r=n(889);e.exports=new r("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},8372:function(e,t,n){"use strict";n(1539);var r=n(889),o=Object.prototype.hasOwnProperty,i=Object.prototype.toString;e.exports=new r("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,r,a,s,l=[],c=e;for(t=0,n=c.length;t1&&console.warn("Replacing with",p),d++}}else{var v=f(u(t,e[n]));if(i.verbose>1&&console.warn((!1===v?m.colour.red:m.colour.green)+"Fragment resolution",e[n],m.colour.normal),!1===v){if(r.parent[r.pkey]={},i.fatal){var g=new Error("Fragment $ref resolution failed "+e[n]);if(!i.promise)throw g;i.promise.reject(g)}}else d++,r.parent[r.pkey]=v,c[e[n]]=r.path.replace("/%24ref","")}else if(l.protocol){var y=s.resolve(o,e[n]).toString();i.verbose>1&&console.warn(m.colour.yellow+"Rewriting external url ref",e[n],"as",y,m.colour.normal),e["x-miro"]=e[n],i.externalRefs[e[n]]&&(i.externalRefs[y]||(i.externalRefs[y]=i.externalRefs[e[n]]),i.externalRefs[y].failed=i.externalRefs[e[n]].failed),e[n]=y}else if(!e["x-miro"]){var b=s.resolve(o,e[n]).toString(),x=!1;i.externalRefs[e[n]]&&(x=i.externalRefs[e[n]].failed),x||(i.verbose>1&&console.warn(m.colour.yellow+"Rewriting external ref",e[n],"as",b,m.colour.normal),e["x-miro"]=e[n],e[n]=b)}}));return p(e,{},(function(e,t,n){h(e,t)&&void 0!==e.$fixed&&delete e.$fixed})),i.verbose>1&&console.warn("Finished fragment resolution"),e}function g(e,t){if(!t.filters||!t.filters.length)return e;var n,o=r(t.filters);try{for(o.s();!(n=o.n()).done;)e=(0,n.value)(e,t)}catch(e){o.e(e)}finally{o.f()}return e}function y(e){return new Promise((function(t,n){(function(e){return new Promise((function(t,n){function r(t,n,r){if(t[n]&&h(t[n],"$ref")){var i=t[n].$ref;if(!i.startsWith("#")){var a="";if(!o[i]){var s=Object.keys(o).find((function(e,t,n){return i.startsWith(e+"/")}));s&&(e.verbose&&console.warn("Found potential subschema at",s),a=(a="/"+(i.split("#")[1]||"").replace(s.split("#")[1]||"")).split("/undefined").join(""),i=s)}if(o[i]||(o[i]={resolved:!1,paths:[],extras:{},description:t[n].description}),o[i].resolved)if(o[i].failed);else if(e.rewriteRefs){var l=o[i].resolvedAt;e.verbose>1&&console.warn("Rewriting ref",i,l),t[n]["x-miro"]=i,t[n].$ref=l+a}else t[n]=f(o[i].data);else o[i].paths.push(r.path),o[i].extras[r.path]=a}}}var o=e.externalRefs;if(e.resolver.depth>0&&e.source===e.resolver.base)return t(o);p(e.openapi.definitions,{identityDetection:!0,path:"#/definitions"},r),p(e.openapi.components,{identityDetection:!0,path:"#/components"},r),p(e.openapi,{identityDetection:!0},r),t(o)}))})(e).then((function(t){var n=function(n){if(!t[n].resolved){var l=e.resolver.depth;l>0&&l++,e.resolver.actions[l].push((function(){return function(e,t,n,r){var o=s.parse(n.source),l=n.source.split("\\").join("/").split("/");l.pop()||l.pop();var p="",d=t.split("#");d.length>1&&(p="#"+d[1],t=d[0]),l=l.join("/");var h,m,y,b=(h=s.parse(t).protocol,m=o.protocol,h&&h.length>2?h:m&&m.length>2?m:"file:");if(y="file:"===b?a.resolve(l?l+"/":"",t):s.resolve(l?l+"/":"",t),n.cache[y]){n.verbose&&console.warn("CACHED",y,p);var x=f(n.cache[y]),w=n.externalRef=x;if(p&&!1===(w=u(w,p))&&(w={},n.fatal)){var k=new Error("Cached $ref resolution failed "+y+p);if(!n.promise)throw k;n.promise.reject(k)}return w=g(w=v(w,x,t,p,y,n),n),r(f(w),y,n),Promise.resolve(w)}if(n.verbose&&console.warn("GET",y,p),n.handlers&&n.handlers[b])return n.handlers[b](l,t,p,n).then((function(e){return n.externalRef=e,e=g(e,n),n.cache[y]=e,r(e,y,n),e})).catch((function(e){throw n.verbose&&console.warn(e),e}));if(b&&b.startsWith("http")){var E=Object.assign({},n.fetchOptions,{agent:n.agent});return n.fetch(y,E).then((function(e){if(200!==e.status){if(n.ignoreIOErrors)return n.verbose&&console.warn("FAILED",t),n.externalRefs[t].failed=!0,'{"$ref":"'+t+'"}';throw new Error("Received status code ".concat(e.status,": ").concat(y))}return e.text()})).then((function(e){try{var o=c.parse(e,{schema:"core",prettyErrors:!0});if(e=n.externalRef=o,n.cache[y]=f(e),p&&!1===(e=u(e,p))&&(e={},n.fatal)){var i=new Error("Remote $ref resolution failed "+y+p);if(!n.promise)throw i;n.promise.reject(i)}e=g(e=v(e,o,t,p,y,n),n)}catch(e){if(n.verbose&&console.warn(e),!n.promise||!n.fatal)throw e;n.promise.reject(e)}return r(e,y,n),e})).catch((function(e){if(n.verbose&&console.warn(e),n.cache[y]={},!n.promise||!n.fatal)throw e;n.promise.reject(e)}))}var S='{"$ref":"'+t+'"}';return function(e,t,n,r,o){return new Promise((function(a,s){i.readFile(e,t,(function(e,t){e?n.ignoreIOErrors&&o?(n.verbose&&console.warn("FAILED",r),n.externalRefs[r].failed=!0,a(o)):s(e):a(t)}))}))}(y,n.encoding||"utf8",n,t,S).then((function(e){try{var o=c.parse(e,{schema:"core",prettyErrors:!0});if(e=n.externalRef=o,n.cache[y]=f(e),p&&!1===(e=u(e,p))&&(e={},n.fatal)){var i=new Error("File $ref resolution failed "+y+p);if(!n.promise)throw i;n.promise.reject(i)}e=g(e=v(e,o,t,p,y,n),n)}catch(e){if(n.verbose&&console.warn(e),!n.promise||!n.fatal)throw e;n.promise.reject(e)}return r(e,y,n),e})).catch((function(e){if(n.verbose&&console.warn(e),!n.promise||!n.fatal)throw e;n.promise.reject(e)}))}(e.openapi,n,e,(function(e,i,a){if(!t[n].resolved){var s={};s.context=t[n],s.$ref=n,s.original=f(e),s.updated=e,s.source=i,a.externals.push(s),t[n].resolved=!0}var l=Object.assign({},a,{source:"",resolver:{actions:a.resolver.actions,depth:a.resolver.actions.length-1,base:a.resolver.base}});a.patch&&t[n].description&&!e.description&&"object"==typeof e&&(e.description=t[n].description),t[n].data=e;var c,p=(c=t[n].paths,o(new Set(c)));p=p.sort((function(e,t){var n=e.startsWith("#/components/")||e.startsWith("#/definitions/"),r=t.startsWith("#/components/")||t.startsWith("#/definitions/");return n&&!r?-1:r&&!n?1:0}));var d,h=r(p);try{for(h.s();!(d=h.n()).done;){var m=d.value;if(t[n].resolvedAt&&m!==t[n].resolvedAt&&m.indexOf("x-ms-examples/")<0)a.verbose>1&&console.warn("Creating pointer to data at",m),u(a.openapi,m,{$ref:t[n].resolvedAt+t[n].extras[m],"x-miro":n+t[n].extras[m]});else{t[n].resolvedAt?a.verbose>1&&console.warn("Avoiding circular reference"):(t[n].resolvedAt=m,a.verbose>1&&console.warn("Creating initial clone of data at",m));var v=f(e);u(a.openapi,m,v)}}}catch(e){h.e(e)}finally{h.f()}0===a.resolver.actions[l.resolver.depth].length&&a.resolver.actions[l.resolver.depth].push((function(){return y(l)}))}))}))}};for(var l in t)n(l)})).catch((function(t){e.verbose&&console.warn(t),n(t)}));var l={options:e};l.actions=e.resolver.actions[e.resolver.depth],t(l)}))}function b(e,t,n){e.resolver.actions.push([]),y(e).then((function(r){var o;(o=r.actions,o.reduce((function(e,t){return e.then((function(e){return t().then(Array.prototype.concat.bind(e))}))}),Promise.resolve([]))).then((function(){if(e.resolver.depth>=e.resolver.actions.length)return console.warn("Ran off the end of resolver actions"),t(!0);e.resolver.depth++,e.resolver.actions[e.resolver.depth].length?setTimeout((function(){b(r.options,t,n)}),0):(e.verbose>1&&console.warn(m.colour.yellow+"Finished external resolution!",m.colour.normal),e.resolveInternal&&(e.verbose>1&&console.warn(m.colour.yellow+"Starting internal resolution!",m.colour.normal),e.openapi=d(e.openapi,e.original,{verbose:e.verbose-1}),e.verbose>1&&console.warn(m.colour.yellow+"Finished internal resolution!",m.colour.normal)),p(e.openapi,{},(function(t,n,r){h(t,n)&&(e.preserveMiro||delete t["x-miro"])})),t(e))})).catch((function(t){e.verbose&&console.warn(t),n(t)}))})).catch((function(t){e.verbose&&console.warn(t),n(t)}))}function x(e){if(e.cache||(e.cache={}),e.fetch||(e.fetch=l),e.source){var t=s.parse(e.source);(!t.protocol||t.protocol.length<=2)&&(e.source=a.resolve(e.source))}e.externals=[],e.externalRefs={},e.rewriteRefs=!0,e.resolver={},e.resolver.depth=0,e.resolver.base=e.source,e.resolver.actions=[[]]}e.exports={optionalResolve:function(e){return x(e),new Promise((function(t,n){e.resolve?b(e,t,n):t(e)}))},resolve:function(e,t,n){return n||(n={}),n.openapi=e,n.source=t,n.resolve=!0,x(n),new Promise((function(e,t){b(n,e,t)}))}}},6704:function(e,t,n){"use strict";function r(){return{depth:0,seen:new WeakMap,top:!0,combine:!1,allowRefSiblings:!1}}n(6992),n(1539),n(8783),n(4129),n(3948),n(2526),n(1817),n(9601),e.exports={getDefaultState:r,walkSchema:function e(t,n,o,i){if(void 0===o.depth&&(o=r()),null==t)return t;if(void 0!==t.$ref){var a={$ref:t.$ref};return o.allowRefSiblings&&t.description&&(a.description=t.description),i(a,n,o),a}if(o.combine&&(t.allOf&&Array.isArray(t.allOf)&&1===t.allOf.length&&delete(t=Object.assign({},t.allOf[0],t)).allOf,t.anyOf&&Array.isArray(t.anyOf)&&1===t.anyOf.length&&delete(t=Object.assign({},t.anyOf[0],t)).anyOf,t.oneOf&&Array.isArray(t.oneOf)&&1===t.oneOf.length&&delete(t=Object.assign({},t.oneOf[0],t)).oneOf),i(t,n,o),o.seen.has(t))return t;if("object"==typeof t&&null!==t&&o.seen.set(t,!0),o.top=!1,o.depth++,void 0!==t.items&&(o.property="items",e(t.items,t,o,i)),t.additionalItems&&"object"==typeof t.additionalItems&&(o.property="additionalItems",e(t.additionalItems,t,o,i)),t.additionalProperties&&"object"==typeof t.additionalProperties&&(o.property="additionalProperties",e(t.additionalProperties,t,o,i)),t.properties)for(var s in t.properties){var l=t.properties[s];o.property="properties/"+s,e(l,t,o,i)}if(t.patternProperties)for(var c in t.patternProperties){var u=t.patternProperties[c];o.property="patternProperties/"+c,e(u,t,o,i)}if(t.allOf)for(var p in t.allOf){var f=t.allOf[p];o.property="allOf/"+p,e(f,t,o,i)}if(t.anyOf)for(var d in t.anyOf){var h=t.anyOf[d];o.property="anyOf/"+d,e(h,t,o,i)}if(t.oneOf)for(var m in t.oneOf){var v=t.oneOf[m];o.property="oneOf/"+m,e(v,t,o,i)}return t.not&&(o.property="not",e(t.not,t,o,i)),o.depth--,t}}},4188:function(e,t,n){"use strict";var r=n(9713).default,o=n(319).default;n(9601),n(6992),n(1539),n(8783),n(4129),n(3948),n(489),n(2222),n(1249),n(7941),e.exports={nop:function(e){return e},clone:function(e){return JSON.parse(JSON.stringify(e))},shallowClone:function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},deepClone:function e(t){var n=Array.isArray(t)?[]:{};for(var r in t)(t.hasOwnProperty(r)||Array.isArray(t))&&(n[r]="object"==typeof t[r]?e(t[r]):t[r]);return n},fastClone:function(e){return Object.assign({},e)},circularClone:function e(t,n){if(n||(n=new WeakMap),Object(t)!==t||t instanceof Function)return t;if(n.has(t))return n.get(t);try{var i=new t.constructor}catch(e){i=Object.create(Object.getPrototypeOf(t))}return n.set(t,i),Object.assign.apply(Object,[i].concat(o(Object.keys(t).map((function(o){return r({},o,e(t[o],n))})))))}}},3094:function(e,t,n){"use strict";n(7042),n(4916),n(3123);var r=n(9290).recurse,o=n(4188).shallowClone,i=n(2580).jptr,a=n(3856).isRef;e.exports={dereference:function e(t,n,s){s||(s={}),s.cache||(s.cache={}),s.state||(s.state={}),s.state.identityDetection=!0,s.depth=s.depth?s.depth+1:1;var l=s.depth>1?t:o(t),c={data:l},u=s.depth>1?n:o(n);s.master||(s.master=l);for(var p=function(e){return e&&e.verbose?{warn:function(){var e=Array.prototype.slice.call(arguments);console.warn.apply(console,e)}}:{warn:function(){}}}(s),f=1;f>0;)f=0,r(c,s.state,(function(t,n,r){if(a(t,n)){var o=t[n];if(f++,s.cache[o]){var l=s.cache[o];if(l.resolved)p.warn("Patching %s for %s",o,l.path),r.parent[r.pkey]=l.data,s.$ref&&"object"==typeof r.parent[r.pkey]&&(r.parent[r.pkey][s.$ref]=o);else{if(o===l.path)throw new Error("Tight circle at ".concat(l.path));p.warn("Unresolved ref"),r.parent[r.pkey]=i(l.source,l.path),!1===r.parent[r.pkey]&&(r.parent[r.pkey]=i(l.source,l.key)),s.$ref&&"object"==typeof r.parent[r.pkey]&&(r.parent[s.$ref]=o)}}else{var c={};c.path=r.path.split("/$ref")[0],c.key=o,p.warn("Dereffing %s at %s",o,c.path),c.source=u,c.data=i(c.source,c.key),!1===c.data&&(c.data=i(s.master,c.key),c.source=s.master),!1===c.data&&p.warn("Missing $ref target",c.key),s.cache[o]=c,c.data=r.parent[r.pkey]=e(i(c.source,c.key),c.source,s),s.$ref&&"object"==typeof r.parent[r.pkey]&&(r.parent[r.pkey][s.$ref]=o),c.resolved=!0}}}));return c.data}}},3856:function(e){"use strict";e.exports={isRef:function(e,t){return"$ref"===t&&!!e&&"string"==typeof e[t]}}},2580:function(e,t,n){"use strict";function r(e){return e.replace(/\~1/g,"/").replace(/~0/g,"~")}n(4916),n(5306),n(3123),n(9600),n(7042),n(6755),n(1539),n(9714),e.exports={jptr:function(e,t,n){if(void 0===e)return!1;if(!t||"string"!=typeof t||"#"===t)return void 0!==n?n:e;if(t.indexOf("#")>=0){var o=t.split("#");if(o[0])return!1;t=o[1],t=decodeURIComponent(t.slice(1).split("+").join(" "))}t.startsWith("/")&&(t=t.slice(1));for(var i=t.split("/"),a=0;a0?i[a-1]:"",-1!=l||e&&e.hasOwnProperty(i[a]))if(l>=0)s&&(e[l]=n),e=e[l];else{if(-2===l)return s?(Array.isArray(e)&&e.push(n),n):void 0;s&&(e[i[a]]=n),e=e[i[a]]}else{if(void 0===n||"object"!=typeof e||Array.isArray(e))return!1;e[i[a]]=s?n:"0"===i[a+1]||"-"===i[a+1]?[]:{},e=e[i[a]]}}return e},jpescape:function(e){return e.replace(/\~/g,"~0").replace(/\//g,"~1")},jpunescape:r}},9290:function(e,t,n){"use strict";n(6992),n(1539),n(8783),n(4129),n(3948),n(9601);var r=n(2580).jpescape;e.exports={recurse:function e(t,n,o){if(n||(n={depth:0}),n.depth||(n=Object.assign({},{path:"#",depth:0,pkey:"",parent:{},payload:{},seen:new WeakMap,identity:!1,identityDetection:!1},n)),"object"==typeof t){var i=n.path;for(var a in t){if(n.key=a,n.path=n.path+"/"+encodeURIComponent(r(a)),n.identityPath=n.seen.get(t[a]),n.identity=void 0!==n.identityPath,t.hasOwnProperty(a)&&o(t,a,n),"object"==typeof t[a]&&!n.identity){n.identityDetection&&!Array.isArray(t[a])&&null!==t[a]&&n.seen.set(t[a],n.path);var s={};s.parent=t,s.path=n.path,s.depth=n.depth?n.depth+1:1,s.pkey=a,s.payload=n.payload,s.seen=n.seen,s.identity=!1,s.identityDetection=n.identityDetection,e(t[a],s,o)}n.path=i}}}}},6399:function(e,t,n){"use strict";var r=n(3269).default,o=n(4575).default,i=n(2205).default,a=n(9842).default,s=n(5957).default;n(8309),n(7941),n(2222),n(6755),n(4916),n(5306),n(3123),n(9600),n(3210),n(7327),n(2526),n(1817),n(9601),n(9826),n(1539),n(9714),n(6992),n(8783),n(3948),n(285),n(8478),n(8674),n(4723),n(4747);var l,c=n(1683),u=n(8575),p=(n(6470),n(4480)),f=n(7707),d=n(7707),h=n(2580),m=h.jptr,v=n(3856).isRef,g=n(4188).clone,y=n(4188).circularClone,b=n(9290).recurse,x=n(1338),w=n(6704),k=n(8276),E=n(873).statusCodes,S=n(8500).i8,_="3.0.0",O=function(e){i(n,e);var t=a(n);function n(e){var r;return o(this,n),(r=t.call(this,e)).name="S2OError",r}return n}(s(Error));function A(e,t){var n=new O(e);if(n.options=t,!t.promise)throw n;t.promise.reject(n)}function R(e,t,n){n.warnOnly?t[n.warnProperty||"x-s2o-warning"]=e:A(e,n)}function C(e,t){w.walkSchema(e,{},{},(function(e,n,o){!function(e,t){if(e["x-required"]&&Array.isArray(e["x-required"])&&(e.required||(e.required=[]),e.required=e.required.concat(e["x-required"]),delete e["x-required"]),e["x-anyOf"]&&(e.anyOf=e["x-anyOf"],delete e["x-anyOf"]),e["x-oneOf"]&&(e.oneOf=e["x-oneOf"],delete e["x-oneOf"]),e["x-not"]&&(e.not=e["x-not"],delete e["x-not"]),"boolean"==typeof e["x-nullable"]&&(e.nullable=e["x-nullable"],delete e["x-nullable"]),"object"==typeof e["x-discriminator"]&&"string"==typeof e["x-discriminator"].propertyName)for(var n in e.discriminator=e["x-discriminator"],delete e["x-discriminator"],e.discriminator.mapping){var r=e.discriminator.mapping[n];r.startsWith("#/definitions/")&&(e.discriminator.mapping[n]=r.replace("#/definitions/","#/components/schemas/"))}}(e),function(e,t,n){if(e.nullable&&n.patches++,e.discriminator&&"string"==typeof e.discriminator&&(e.discriminator={propertyName:e.discriminator}),e.items&&Array.isArray(e.items)&&(0===e.items.length?e.items={}:1===e.items.length?e.items=e.items[0]:e.items={anyOf:e.items}),e.type&&Array.isArray(e.type))if(n.patch){if(n.patches++,0===e.type.length)delete e.type;else{e.oneOf||(e.oneOf=[]);var o,i=r(e.type);try{for(i.s();!(o=i.n()).done;){var a=o.value,s={};if("null"===a)e.nullable=!0;else{s.type=a;var l,c=r(k.arrayProperties);try{for(c.s();!(l=c.n()).done;){var u=l.value;void 0!==e.prop&&(s[u]=e[u],delete e[u])}}catch(e){c.e(e)}finally{c.f()}}s.type&&e.oneOf.push(s)}}catch(e){i.e(e)}finally{i.f()}delete e.type,0===e.oneOf.length?delete e.oneOf:e.oneOf.length<2&&(e.type=e.oneOf[0].type,Object.keys(e.oneOf[0]).length>1&&R("Lost properties from oneOf",e,n),delete e.oneOf)}e.type&&Array.isArray(e.type)&&1===e.type.length&&(e.type=e.type[0])}else A("(Patchable) schema type must not be an array",n);e.type&&"null"===e.type&&(delete e.type,e.nullable=!0),"array"!==e.type||e.items||(e.items={}),"file"===e.type&&(e.type="string",e.format="binary"),"boolean"==typeof e.required&&(e.required&&e.name&&(void 0===t.required&&(t.required=[]),Array.isArray(t.required)&&t.required.push(e.name)),delete e.required),e.xml&&"string"==typeof e.xml.namespace&&(e.xml.namespace||delete e.xml.namespace),void 0!==e.allowEmptyValue&&(n.patches++,delete e.allowEmptyValue)}(e,n,t)}))}function T(e,t,n){var r=n.payload.options;if(v(e,t)){if(e[t].startsWith("#/components/"));else if("#/consumes"===e[t])delete e[t],n.parent[n.pkey]=g(r.openapi.consumes);else if("#/produces"===e[t])delete e[t],n.parent[n.pkey]=g(r.openapi.produces);else if(e[t].startsWith("#/definitions/")){var o=e[t].replace("#/definitions/","").split("/"),i=h.jpunescape(o[0]),a=l.schemas[decodeURIComponent(i)];a?o[0]=a:R("Could not resolve reference "+e[t],e,r),e[t]="#/components/schemas/"+o.join("/")}else if(e[t].startsWith("#/parameters/"))e[t]="#/components/parameters/"+k.sanitise(e[t].replace("#/parameters/",""));else if(e[t].startsWith("#/responses/"))e[t]="#/components/responses/"+k.sanitise(e[t].replace("#/responses/",""));else if(e[t].startsWith("#")){var s=g(h.jptr(r.openapi,e[t]));if(!1===s)R("direct $ref not found "+e[t],e,r);else if(r.refmap[e[t]])e[t]=r.refmap[e[t]];else{var c=e[t],u="schemas",p=(c=(c=(c=(c=c.replace("/properties/headers/","")).replace("/properties/responses/","")).replace("/properties/parameters/","")).replace("/properties/schemas/","")).lastIndexOf("/schema");if("schemas"==(u=c.indexOf("/headers/")>p?"headers":c.indexOf("/responses/")>p?"responses":c.indexOf("/example")>p?"examples":c.indexOf("/x-")>p?"extensions":c.indexOf("/parameters/")>p?"parameters":"schemas")&&C(s,r),"responses"!==u&&"extensions"!==u){var f=u.substr(0,u.length-1);"parameter"===f&&s.name&&s.name===k.sanitise(s.name)&&(f=encodeURIComponent(s.name));var d=1;for(e["x-miro"]&&(f=function(e){return e=e.indexOf("#")>=0?e.split("#")[1].split("/").pop():e.split("/").pop().split(".")[0],encodeURIComponent(k.sanitise(e))}(e["x-miro"]),d="");h.jptr(r.openapi,"#/components/"+u+"/"+f+d);)d=""===d?2:++d;var m="#/components/"+u+"/"+f+d,y="";"examples"===u&&(s={value:s},y="/value"),h.jptr(r.openapi,m,s),r.refmap[e[t]]=m+y,e[t]=m+y}}}if(delete e["x-miro"],Object.keys(e).length>1){var b=e[t],x=n.path.indexOf("/schema")>=0;"preserve"===r.refSiblings||(x&&"allOf"===r.refSiblings?(delete e.$ref,n.parent[n.pkey]={allOf:[{$ref:b},e]}):n.parent[n.pkey]={$ref:b})}}if("x-ms-odata"===t&&"string"==typeof e[t]&&e[t].startsWith("#/")){var w=e[t].replace("#/definitions/","").replace("#/components/schemas/","").split("/"),E=l.schemas[decodeURIComponent(w[0])];E?w[0]=E:R("Could not resolve reference "+e[t],e,r),e[t]="#/components/schemas/"+w.join("/")}}function P(e){for(var t in e)for(var n in e[t]){var r=k.sanitise(n);n!==r&&(e[t][r]=e[t][n],delete e[t][n])}}function I(e,t){if("basic"===e.type&&(e.type="http",e.scheme="basic"),"oauth2"===e.type){var n={},r=e.flow;"application"===e.flow&&(r="clientCredentials"),"accessCode"===e.flow&&(r="authorizationCode"),void 0!==e.authorizationUrl&&(n.authorizationUrl=e.authorizationUrl.split("?")[0].trim()||"/"),"string"==typeof e.tokenUrl&&(n.tokenUrl=e.tokenUrl.split("?")[0].trim()||"/"),n.scopes=e.scopes||{},e.flows={},e.flows[r]=n,delete e.flow,delete e.authorizationUrl,delete e.tokenUrl,delete e.scopes,void 0!==e.name&&(t.patch?(t.patches++,delete e.name):A("(Patchable) oauth2 securitySchemes should not have name property",t))}}function j(e){return e&&!e["x-s2o-delete"]}function L(e,t){if(e.$ref)e.$ref=e.$ref.replace("#/responses/","#/components/responses/");else{e.type&&!e.schema&&(e.schema={}),e.type&&(e.schema.type=e.type),e.items&&"array"!==e.items.type&&(e.items.collectionFormat!==e.collectionFormat&&R("Nested collectionFormats are not supported",e,t),delete e.items.collectionFormat),"array"===e.type?("ssv"===e.collectionFormat?R("collectionFormat:ssv is no longer supported for headers",e,t):"pipes"===e.collectionFormat?R("collectionFormat:pipes is no longer supported for headers",e,t):"multi"===e.collectionFormat?e.explode=!0:"tsv"===e.collectionFormat?(R("collectionFormat:tsv is no longer supported",e,t),e["x-collectionFormat"]="tsv"):e.style="simple",delete e.collectionFormat):e.collectionFormat&&(t.patch?(t.patches++,delete e.collectionFormat):A("(Patchable) collectionFormat is only applicable to header.type array",t)),delete e.type;var n,o=r(k.parameterTypeProperties);try{for(o.s();!(n=o.n()).done;){var i=n.value;void 0!==e[i]&&(e.schema[i]=e[i],delete e[i])}}catch(e){o.e(e)}finally{o.f()}var a,s=r(k.arrayProperties);try{for(s.s();!(a=s.n()).done;){var l=a.value;void 0!==e[l]&&(e.schema[l]=e[l],delete e[l])}}catch(e){s.e(e)}finally{s.f()}}}function N(e,t){if(e.$ref.indexOf("#/parameters/")>=0){var n=e.$ref.split("#/parameters/");e.$ref=n[0]+"#/components/parameters/"+k.sanitise(n[1])}e.$ref.indexOf("#/definitions/")>=0&&R("Definition used as parameter",e,t)}function M(e,t,n,o,i,a,s){var l,c={},u=!0;if(t&&t.consumes&&"string"==typeof t.consumes){if(!s.patch)return A("(Patchable) operation.consumes must be an array",s);s.patches++,t.consumes=[t.consumes]}Array.isArray(a.consumes)||delete a.consumes;var p=((t?t.consumes:null)||a.consumes||[]).filter(k.uniqueOnly);if(e&&e.$ref&&"string"==typeof e.$ref){N(e,s);var f=decodeURIComponent(e.$ref.replace("#/components/parameters/","")),d=!1,h=a.components.parameters[f];if(h&&!h["x-s2o-delete"]||!e.$ref.startsWith("#/")||(e["x-s2o-delete"]=!0,d=!0),d){var v=e.$ref,y=m(a,e.$ref);!y&&v.startsWith("#/")?R("Could not resolve reference "+v,e,s):y&&(e=y)}}if(e&&(e.name||e.in)){"boolean"==typeof e["x-deprecated"]&&(e.deprecated=e["x-deprecated"],delete e["x-deprecated"]),void 0!==e["x-example"]&&(e.example=e["x-example"],delete e["x-example"]),"body"===e.in||e.type||(s.patch?(s.patches++,e.type="string"):A("(Patchable) parameter.type is mandatory for non-body parameters",s)),e.type&&"object"==typeof e.type&&e.type.$ref&&(e.type=m(a,e.type.$ref)),"file"===e.type&&(e["x-s2o-originalType"]=e.type,l=e.type),e.description&&"object"==typeof e.description&&e.description.$ref&&(e.description=m(a,e.description.$ref)),null===e.description&&delete e.description;var x=e.collectionFormat;if("array"!==e.type||x||(x="csv"),x&&("array"!==e.type&&(s.patch?(s.patches++,delete e.collectionFormat):A("(Patchable) collectionFormat is only applicable to param.type array",s)),"csv"!==x||"query"!==e.in&&"cookie"!==e.in||(e.style="form",e.explode=!1),"csv"!==x||"path"!==e.in&&"header"!==e.in||(e.style="simple"),"ssv"===x&&("query"===e.in?e.style="spaceDelimited":R("collectionFormat:ssv is no longer supported except for in:query parameters",e,s)),"pipes"===x&&("query"===e.in?e.style="pipeDelimited":R("collectionFormat:pipes is no longer supported except for in:query parameters",e,s)),"multi"===x&&(e.explode=!0),"tsv"===x&&(R("collectionFormat:tsv is no longer supported",e,s),e["x-collectionFormat"]="tsv"),delete e.collectionFormat),e.type&&"body"!==e.type&&"formData"!==e.in)if(e.items&&e.schema)R("parameter has array,items and schema",e,s);else{e.schema&&s.patches++,e.schema&&"object"==typeof e.schema||(e.schema={}),e.schema.type=e.type,e.items&&(e.schema.items=e.items,delete e.items,b(e.schema.items,null,(function(t,n,r){"collectionFormat"===n&&"string"==typeof t[n]&&(x&&t[n]!==x&&R("Nested collectionFormats are not supported",e,s),delete t[n])})));var w,E=r(k.parameterTypeProperties);try{for(E.s();!(w=E.n()).done;){var S=w.value;void 0!==e[S]&&(e.schema[S]=e[S]),delete e[S]}}catch(e){E.e(e)}finally{E.f()}}e.schema&&C(e.schema,s),e["x-ms-skip-url-encoding"]&&"query"===e.in&&(e.allowReserved=!0,delete e["x-ms-skip-url-encoding"])}if(e&&"formData"===e.in){u=!1,c.content={};var _="application/x-www-form-urlencoded";if(p.length&&p.indexOf("multipart/form-data")>=0&&(_="multipart/form-data"),c.content[_]={},e.schema)c.content[_].schema=e.schema,e.schema.$ref&&(c["x-s2o-name"]=decodeURIComponent(e.schema.$ref.replace("#/components/schemas/","")));else{c.content[_].schema={},c.content[_].schema.type="object",c.content[_].schema.properties={},c.content[_].schema.properties[e.name]={};var O=c.content[_].schema,T=c.content[_].schema.properties[e.name];e.description&&(T.description=e.description),e.example&&(T.example=e.example),e.type&&(T.type=e.type);var P,I=r(k.parameterTypeProperties);try{for(I.s();!(P=I.n()).done;){var j=P.value;void 0!==e[j]&&(T[j]=e[j])}}catch(e){I.e(e)}finally{I.f()}!0===e.required&&(O.required||(O.required=[]),O.required.push(e.name),c.required=!0),void 0!==e.default&&(T.default=e.default),T.properties&&(T.properties=e.properties),e.allOf&&(T.allOf=e.allOf),"array"===e.type&&e.items&&(T.items=e.items,T.items.collectionFormat&&delete T.items.collectionFormat),"file"!==l&&"file"!==e["x-s2o-originalType"]||(T.type="string",T.format="binary"),D(e,T)}}else e&&"file"===e.type&&(e.required&&(c.required=e.required),c.content={},c.content["application/octet-stream"]={},c.content["application/octet-stream"].schema={},c.content["application/octet-stream"].schema.type="string",c.content["application/octet-stream"].schema.format="binary",D(e,c));if(e&&"body"===e.in){c.content={},e.name&&(c["x-s2o-name"]=(t&&t.operationId?k.sanitiseAll(t.operationId):"")+("_"+e.name).toCamelCase()),e.description&&(c.description=e.description),e.required&&(c.required=e.required),t&&s.rbname&&e.name&&(t[s.rbname]=e.name),e.schema&&e.schema.$ref?c["x-s2o-name"]=decodeURIComponent(e.schema.$ref.replace("#/components/schemas/","")):e.schema&&"array"===e.schema.type&&e.schema.items&&e.schema.items.$ref&&(c["x-s2o-name"]=decodeURIComponent(e.schema.items.$ref.replace("#/components/schemas/",""))+"Array"),p.length||p.push("application/json");var L,M=r(p);try{for(M.s();!(L=M.n()).done;){var F=L.value;c.content[F]={},c.content[F].schema=g(e.schema||{}),C(c.content[F].schema,s)}}catch(e){M.e(e)}finally{M.f()}D(e,c)}if(Object.keys(c).length>0&&(e["x-s2o-delete"]=!0,t&&(t.requestBody&&u?(t.requestBody["x-s2o-overloaded"]=!0,R("Operation "+(t.operationId||i)+" has multiple requestBodies",t,s)):(t.requestBody||(t=n[o]=function(e,t){for(var n={},r=0,o=Object.keys(e);r=0?R("definition used as response: "+e.$ref,e,i):e.$ref.startsWith("#/responses/")&&(e.$ref="#/components/responses/"+k.sanitise(decodeURIComponent(e.$ref.replace("#/responses/",""))));else{if((void 0===e.description||null===e.description||""===e.description&&i.patch)&&(i.patch?"object"!=typeof e||Array.isArray(e)||(i.patches++,e.description=E[e]||""):A("(Patchable) response.description is mandatory",i)),void 0!==e.schema){if(C(e.schema,i),e.schema.$ref&&"string"==typeof e.schema.$ref&&e.schema.$ref.startsWith("#/responses/")&&(e.schema.$ref="#/components/responses/"+k.sanitise(decodeURIComponent(e.schema.$ref.replace("#/responses/","")))),n&&n.produces&&"string"==typeof n.produces){if(!i.patch)return A("(Patchable) operation.produces must be an array",i);i.patches++,n.produces=[n.produces]}o.produces&&!Array.isArray(o.produces)&&delete o.produces;var a=((n?n.produces:null)||o.produces||[]).filter(k.uniqueOnly);a.length||a.push("*/*"),e.content={};var s,l=r(a);try{for(l.s();!(s=l.n()).done;){var c=s.value;if(e.content[c]={},e.content[c].schema=g(e.schema),e.examples&&e.examples[c]){var u={};u.value=e.examples[c],e.content[c].examples={},e.content[c].examples.response=u,delete e.examples[c]}"file"===e.content[c].schema.type&&(e.content[c].schema={type:"string",format:"binary"})}}catch(e){l.e(e)}finally{l.f()}delete e.schema}for(var p in e.examples)e.content||(e.content={}),e.content[p]||(e.content[p]={}),e.content[p].examples={},e.content[p].examples.response={},e.content[p].examples.response.value=e.examples[p];if(delete e.examples,e.headers)for(var f in e.headers)"status code"===f.toLowerCase()?i.patch?(i.patches++,delete e.headers[f]):A('(Patchable) "Status Code" is not a valid header',i):L(e.headers[f],i)}}function z(e,t,n,o,i){for(var a in e){var s=e[a];for(var l in s&&s["x-trace"]&&"object"==typeof s["x-trace"]&&(s.trace=s["x-trace"],delete s["x-trace"]),s&&s["x-summary"]&&"string"==typeof s["x-summary"]&&(s.summary=s["x-summary"],delete s["x-summary"]),s&&s["x-description"]&&"string"==typeof s["x-description"]&&(s.description=s["x-description"],delete s["x-description"]),s&&s["x-servers"]&&Array.isArray(s["x-servers"])&&(s.servers=s["x-servers"],delete s["x-servers"]),s)if(k.httpMethods.indexOf(l)>=0||"x-amazon-apigateway-any-method"===l){var c=s[l];if(c&&c.parameters&&Array.isArray(c.parameters)){if(s.parameters){var p,f=r(s.parameters);try{var d=function(){var e=p.value;"string"==typeof e.$ref&&(N(e,n),e=m(i,e.$ref)),c.parameters.find((function(t,n,r){return t.name===e.name&&t.in===e.in}))||"formData"!==e.in&&"body"!==e.in&&"file"!==e.type||(c=M(e,c,s,l,a,i,n),n.rbname&&""===c[n.rbname]&&delete c[n.rbname])};for(f.s();!(p=f.n()).done;)d()}catch(e){f.e(e)}finally{f.f()}}var v,y=r(c.parameters);try{for(y.s();!(v=y.n()).done;){var b=v.value;c=M(b,c,s,l,l+":"+a,i,n)}}catch(e){y.e(e)}finally{y.f()}n.rbname&&""===c[n.rbname]&&delete c[n.rbname],n.debug||c.parameters&&(c.parameters=c.parameters.filter(j))}if(c&&c.security&&P(c.security),"object"==typeof c){if(!c.responses){c.responses={default:{description:"Default response"}}}for(var x in c.responses)F(c.responses[x],0,c,i,n)}if(c&&c["x-servers"]&&Array.isArray(c["x-servers"]))c.servers=c["x-servers"],delete c["x-servers"];else if(c&&c.schemes&&c.schemes.length){var w,E=r(c.schemes);try{for(E.s();!(w=E.n()).done;){var S=w.value;if((!i.schemes||i.schemes.indexOf(S)<0)&&(c.servers||(c.servers=[]),Array.isArray(i.servers))){var _,O=r(i.servers);try{for(O.s();!(_=O.n()).done;){var A=_.value,R=g(A),C=u.parse(R.url);C.protocol=S,R.url=C.format(),c.servers.push(R)}}catch(e){O.e(e)}finally{O.f()}}}}catch(e){E.e(e)}finally{E.f()}}if(n.debug&&(c["x-s2o-consumes"]=c.consumes||[],c["x-s2o-produces"]=c.produces||[]),c){if(delete c.consumes,delete c.produces,delete c.schemes,c["x-ms-examples"]){for(var T in c["x-ms-examples"]){var I=c["x-ms-examples"][T],L=k.sanitiseAll(T);if(I.parameters)for(var D in I.parameters){var z,U=I.parameters[D],B=r((c.parameters||[]).concat(s.parameters||[]));try{for(B.s();!(z=B.n()).done;){var $=z.value;$.$ref&&($=h.jptr(i,$.$ref)),$.name!==D||$.example||($.examples||($.examples={}),$.examples[T]={value:U})}}catch(e){B.e(e)}finally{B.f()}}if(I.responses)for(var q in I.responses){if(I.responses[q].headers)for(var W in I.responses[q].headers){var V=I.responses[q].headers[W];for(var H in c.responses[q].headers)H===W&&(c.responses[q].headers[H].example=V)}if(I.responses[q].body&&(i.components.examples[L]={value:g(I.responses[q].body)},c.responses[q]&&c.responses[q].content))for(var Y in c.responses[q].content){var G=c.responses[q].content[Y];G.examples||(G.examples={}),G.examples[T]={$ref:"#/components/examples/"+L}}}}delete c["x-ms-examples"]}if(c.parameters&&0===c.parameters.length&&delete c.parameters,c.requestBody){var Q=c.operationId?k.sanitiseAll(c.operationId):k.sanitiseAll(l+a).toCamelCase(),X=k.sanitise(c.requestBody["x-s2o-name"]||Q||"");delete c.requestBody["x-s2o-name"];var K=JSON.stringify(c.requestBody),Z=k.hash(K);if(!o[Z]){var J={};J.name=X,J.body=c.requestBody,J.refs=[],o[Z]=J}var ee="#/"+t+"/"+encodeURIComponent(h.jpescape(a))+"/"+l+"/requestBody";o[Z].refs.push(ee)}}}if(s&&s.parameters){for(var te in s.parameters)M(s.parameters[te],null,s,null,a,i,n);!n.debug&&Array.isArray(s.parameters)&&(s.parameters=s.parameters.filter(j))}}}function U(e){return e&&e.url&&"string"==typeof e.url?(e.url=e.url.split("{{").join("{"),e.url=e.url.split("}}").join("}"),e.url.replace(/\{(.+?)\}/g,(function(t,n){e.variables||(e.variables={}),e.variables[n]={default:"unknown"}})),e):e}function B(e,t,n){if(void 0===e.info||null===e.info){if(!t.patch)return n(new O("(Patchable) info object is mandatory"));t.patches++,e.info={version:"",title:""}}if("object"!=typeof e.info||Array.isArray(e.info))return n(new O("info must be an object"));if(void 0===e.info.title||null===e.info.title){if(!t.patch)return n(new O("(Patchable) info.title cannot be null"));t.patches++,e.info.title=""}if(void 0===e.info.version||null===e.info.version){if(!t.patch)return n(new O("(Patchable) info.version cannot be null"));t.patches++,e.info.version=""}if("string"!=typeof e.info.version){if(!t.patch)return n(new O("(Patchable) info.version must be a string"));t.patches++,e.info.version=e.info.version.toString()}if(void 0!==e.info.logo){if(!t.patch)return n(new O("(Patchable) info should not have logo property"));t.patches++,e.info["x-logo"]=e.info.logo,delete e.info.logo}if(void 0!==e.info.termsOfService){if(null===e.info.termsOfService){if(!t.patch)return n(new O("(Patchable) info.termsOfService cannot be null"));t.patches++,e.info.termsOfService=""}try{new URL(e.info.termsOfService)}catch(r){if(!t.patch)return n(new O("(Patchable) info.termsOfService must be a URL"));t.patches++,delete e.info.termsOfService}}}function $(e,t,n){if(void 0===e.paths){if(!t.patch)return n(new O("(Patchable) paths object is mandatory"));t.patches++,e.paths={}}}function q(e,t,n){return p(n,new Promise((function(n,o){if(e||(e={}),t.original=e,t.text||(t.text=d.stringify(e)),t.externals=[],t.externalRefs={},t.rewriteRefs=!0,t.preserveMiro=!0,t.promise={},t.promise.resolve=n,t.promise.reject=o,t.patches=0,t.cache||(t.cache={}),t.source&&(t.cache[t.source]=t.original),function(e,t){var n=new WeakSet;b(e,{identityDetection:!0},(function(e,r,o){"object"==typeof e[r]&&null!==e[r]&&(n.has(e[r])?t.anchors?e[r]=g(e[r]):A("YAML anchor or merge key at "+o.path,t):n.add(e[r]))}))}(e,t),e.openapi&&"string"==typeof e.openapi&&e.openapi.startsWith("3."))return t.openapi=y(e),B(t.openapi,t,o),$(t.openapi,t,o),void x.optionalResolve(t).then((function(){return t.direct?n(t.openapi):n(t)})).catch((function(e){console.warn(e),o(e)}));if(!e.swagger||"2.0"!=e.swagger)return o(new O("Unsupported swagger/OpenAPI version: "+(e.openapi?e.openapi:e.swagger)));var i=t.openapi={};if(i.openapi="string"==typeof t.targetVersion&&t.targetVersion.startsWith("3.")?t.targetVersion:_,t.origin){i["x-origin"]||(i["x-origin"]=[]);var a={};a.url=t.source||t.origin,a.format="swagger",a.version=e.swagger,a.converter={},a.converter.url="https://github.com/mermade/oas-kit",a.converter.version=S,i["x-origin"].push(a)}if(delete(i=Object.assign(i,y(e))).swagger,b(i,{},(function(e,t,n){null===e[t]&&!t.startsWith("x-")&&"default"!==t&&n.path.indexOf("/example")<0&&delete e[t]})),e.host){var s,c=r(Array.isArray(e.schemes)?e.schemes:[""]);try{for(c.s();!(s=c.n()).done;){var u=s.value,p={},f=(e.basePath||"").replace(/\/$/,"");p.url=(u?u+":":"")+"//"+e.host+f,U(p),i.servers||(i.servers=[]),i.servers.push(p)}}catch(e){c.e(e)}finally{c.f()}}else if(e.basePath){var v={};v.url=e.basePath,U(v),i.servers||(i.servers=[]),i.servers.push(v)}if(delete i.host,delete i.basePath,i["x-servers"]&&Array.isArray(i["x-servers"])&&(i.servers=i["x-servers"],delete i["x-servers"]),e["x-ms-parameterized-host"]){var w=e["x-ms-parameterized-host"],E={};E.url=w.hostTemplate+(e.basePath?e.basePath:""),E.variables={};var R=E.url.match(/\{\w+\}/g);for(var j in w.parameters){var N=w.parameters[j];N.$ref&&(N=g(m(i,N.$ref))),j.startsWith("x-")||(delete N.required,delete N.type,delete N.in,void 0===N.default&&(N.enum?N.default=N.enum[0]:N.default="none"),N.name||(N.name=R[j].replace("{","").replace("}","")),E.variables[N.name]=N,delete N.name)}i.servers||(i.servers=[]),!1===w.useSchemePrefix?i.servers.push(E):e.schemes.forEach((function(e){i.servers.push(Object.assign({},E,{url:e+"://"+E.url}))})),delete i["x-ms-parameterized-host"]}B(i,t,o),$(i,t,o),"string"==typeof i.consumes&&(i.consumes=[i.consumes]),"string"==typeof i.produces&&(i.produces=[i.produces]),i.components={},i["x-callbacks"]&&(i.components.callbacks=i["x-callbacks"],delete i["x-callbacks"]),i.components.examples={},i.components.headers={},i["x-links"]&&(i.components.links=i["x-links"],delete i["x-links"]),i.components.parameters=i.parameters||{},i.components.responses=i.responses||{},i.components.requestBodies={},i.components.securitySchemes=i.securityDefinitions||{},i.components.schemas=i.definitions||{},delete i.definitions,delete i.responses,delete i.parameters,delete i.securityDefinitions,x.optionalResolve(t).then((function(){(function(e,t){var n={};for(var r in l={schemas:{}},e.security&&P(e.security),e.components.securitySchemes){var o=k.sanitise(r);r!==o&&(e.components.securitySchemes[o]&&A("Duplicate sanitised securityScheme name "+o,t),e.components.securitySchemes[o]=e.components.securitySchemes[r],delete e.components.securitySchemes[r]),I(e.components.securitySchemes[o],t)}for(var i in e.components.schemas){var a=k.sanitiseAll(i),s="";if(i!==a){for(;e.components.schemas[a+s];)s=s?++s:2;e.components.schemas[a+s]=e.components.schemas[i],delete e.components.schemas[i]}l.schemas[i]=a+s,C(e.components.schemas[a+s],t)}for(var c in t.refmap={},b(e,{payload:{options:t}},T),function(e,t){for(var n in t.refmap)h.jptr(e,n,{$ref:t.refmap[n]})}(e,t),e.components.parameters){var u=k.sanitise(c);c!==u&&(e.components.parameters[u]&&A("Duplicate sanitised parameter name "+u,t),e.components.parameters[u]=e.components.parameters[c],delete e.components.parameters[c]),M(e.components.parameters[u],null,null,null,u,e,t)}for(var p in e.components.responses){var f=k.sanitise(p);p!==f&&(e.components.responses[f]&&A("Duplicate sanitised response name "+f,t),e.components.responses[f]=e.components.responses[p],delete e.components.responses[p]);var d=e.components.responses[f];if(F(d,0,null,e,t),d.headers)for(var m in d.headers)"status code"===m.toLowerCase()?t.patch?(t.patches++,delete d.headers[m]):A('(Patchable) "Status Code" is not a valid header',t):L(d.headers[m],t)}for(var v in e.components.requestBodies){var y=e.components.requestBodies[v],x=JSON.stringify(y),w=k.hash(x),E={};E.name=v,E.body=y,E.refs=[],n[w]=E}if(z(e.paths,"paths",t,n,e),e["x-ms-paths"]&&z(e["x-ms-paths"],"x-ms-paths",t,n,e),!t.debug)for(var S in e.components.parameters)e.components.parameters[S]["x-s2o-delete"]&&delete e.components.parameters[S];t.debug&&(e["x-s2o-consumes"]=e.consumes||[],e["x-s2o-produces"]=e.produces||[]),delete e.consumes,delete e.produces,delete e.schemes;var _=[];if(e.components.requestBodies={},!t.resolveInternal){var O=1;for(var R in n){var j=n[R];if(j.refs.length>1){var N="";for(j.name||(j.name="requestBody",N=O++);_.indexOf(j.name+N)>=0;)N=N?++N:2;for(var D in j.name=j.name+N,_.push(j.name),e.components.requestBodies[j.name]=g(j.body),j.refs){var U={};U.$ref="#/components/requestBodies/"+j.name,h.jptr(e,j.refs[D],U)}}}}e.components.responses&&0===Object.keys(e.components.responses).length&&delete e.components.responses,e.components.parameters&&0===Object.keys(e.components.parameters).length&&delete e.components.parameters,e.components.examples&&0===Object.keys(e.components.examples).length&&delete e.components.examples,e.components.requestBodies&&0===Object.keys(e.components.requestBodies).length&&delete e.components.requestBodies,e.components.securitySchemes&&0===Object.keys(e.components.securitySchemes).length&&delete e.components.securitySchemes,e.components.headers&&0===Object.keys(e.components.headers).length&&delete e.components.headers,e.components.schemas&&0===Object.keys(e.components.schemas).length&&delete e.components.schemas,e.components&&0===Object.keys(e.components).length&&delete e.components})(t.openapi,t),t.direct?n(t.openapi):n(t)})).catch((function(e){console.warn(e),o(e)}))})))}function W(e,t,n){return p(n,new Promise((function(n,r){var o=null,i=null;try{o=JSON.parse(e),t.text=JSON.stringify(o,null,2)}catch(n){i=n;try{o=d.parse(e,{schema:"core",prettyErrors:!0}),t.sourceYaml=!0,t.text=e}catch(e){i=e}}o?q(o,t).then((function(e){return n(e)})).catch((function(e){return r(e)})):r(new O(i?i.message:"Could not parse string"))})))}e.exports={S2OError:O,targetVersion:_,convert:q,convertObj:q,convertUrl:function(e,t,n){return p(n,new Promise((function(n,r){t.origin=!0,t.source||(t.source=e),t.verbose&&console.warn("GET "+e),t.fetch||(t.fetch=f);var o=Object.assign({},t.fetchOptions,{agent:t.agent});t.fetch(e,o).then((function(t){if(200!==t.status)throw new O("Received status code ".concat(t.status,": ").concat(e));return t.text()})).then((function(e){W(e,t).then((function(e){return n(e)})).catch((function(e){return r(e)}))})).catch((function(e){r(e)}))})))},convertStr:W,convertFile:function(e,t,n){return p(n,new Promise((function(n,r){c.readFile(e,t.encoding||"utf8",(function(o,i){o?r(o):(t.sourceFile=e,W(i,t).then((function(e){return n(e)})).catch((function(e){return r(e)})))}))})))},convertStream:function(e,t,n){return p(n,new Promise((function(n,r){var o="";e.on("data",(function(e){o+=e})).on("end",(function(){W(o,t).then((function(e){return n(e)})).catch((function(e){return r(e)}))}))})))}}},873:function(e,t,n){"use strict";n(9601);var r=n(6177);e.exports={statusCodes:Object.assign({},{default:"Default response","1XX":"Informational",103:"Early hints","2XX":"Successful","3XX":"Redirection","4XX":"Client Error","5XX":"Server Error","7XX":"Developer Error"},r.STATUS_CODES)}},1683:function(e){e.exports={}},5623:function(e){"use strict";function t(e,t,o){e instanceof RegExp&&(e=n(e,o)),t instanceof RegExp&&(t=n(t,o));var i=r(e,t,o);return i&&{start:i[0],end:i[1],pre:o.slice(0,i[0]),body:o.slice(i[0]+e.length,i[1]),post:o.slice(i[1]+t.length)}}function n(e,t){var n=t.match(e);return n?n[0]:null}function r(e,t,n){var r,o,i,a,s,l=n.indexOf(e),c=n.indexOf(t,l+1),u=l;if(l>=0&&c>0){if(e===t)return[l,c];for(r=[],i=n.length;u>=0&&!s;)u==l?(r.push(u),l=n.indexOf(e,u+1)):1==r.length?s=[r.pop(),c]:((o=r.pop())=0?l:c;r.length&&(s=[i,a])}return s}e.exports=t,t.range=r},9742:function(e,t){"use strict";t.byteLength=function(e){var t=l(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,i=l(e),a=i[0],s=i[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,a,s)),u=0,p=s>0?a-4:a;for(n=0;n>16&255,c[u++]=t>>8&255,c[u++]=255&t;return 2===s&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,c[u++]=255&t),1===s&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t),c},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,i=[],a=16383,s=0,l=r-o;sl?l:s+a));return 1===o?(t=e[r-1],i.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],i.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"=")),i.join("")};for(var n=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,s=i.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,r){for(var o,i,a=[],s=t;s>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},3644:function(e,t,n){var r=n(1048),o=n(5623);e.exports=function(e){return e?("{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2)),g(function(e){return e.split("\\\\").join(i).split("\\{").join(a).split("\\}").join(s).split("\\,").join(l).split("\\.").join(c)}(e),!0).map(p)):[]};var i="\0SLASH"+Math.random()+"\0",a="\0OPEN"+Math.random()+"\0",s="\0CLOSE"+Math.random()+"\0",l="\0COMMA"+Math.random()+"\0",c="\0PERIOD"+Math.random()+"\0";function u(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function p(e){return e.split(i).join("\\").split(a).join("{").split(s).join("}").split(l).join(",").split(c).join(".")}function f(e){if(!e)return[""];var t=[],n=o("{","}",e);if(!n)return e.split(",");var r=n.pre,i=n.body,a=n.post,s=r.split(",");s[s.length-1]+="{"+i+"}";var l=f(a);return a.length&&(s[s.length-1]+=l.shift(),s.push.apply(s,l)),t.push.apply(t,s),t}function d(e){return"{"+e+"}"}function h(e){return/^-?0\d/.test(e)}function m(e,t){return e<=t}function v(e,t){return e>=t}function g(e,t){var n=[],i=o("{","}",e);if(!i||/\$$/.test(i.pre))return[e];var a,l=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body),c=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body),p=l||c,y=i.body.indexOf(",")>=0;if(!p&&!y)return i.post.match(/,.*\}/)?g(e=i.pre+"{"+i.body+s+i.post):[e];if(p)a=i.body.split(/\.\./);else if(1===(a=f(i.body)).length&&1===(a=g(a[0],!1).map(d)).length)return(w=i.post.length?g(i.post,!1):[""]).map((function(e){return i.pre+a[0]+e}));var b,x=i.pre,w=i.post.length?g(i.post,!1):[""];if(p){var k=u(a[0]),E=u(a[1]),S=Math.max(a[0].length,a[1].length),_=3==a.length?Math.abs(u(a[2])):1,O=m;E0){var P=new Array(T+1).join("0");C=R<0?"-"+P+C.slice(1):P+C}}b.push(C)}}else b=r(a,(function(e){return g(e,!1)}));for(var I=0;Ia)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return p(e)}return c(e,t,n)}function c(e,t,n){if("string"==typeof e)return function(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var n=0|m(e,t),r=s(n),o=r.write(e,t);return o!==n&&(r=r.slice(0,o)),r}(e,t);if(ArrayBuffer.isView(e))return function(e){if(B(e,Uint8Array)){var t=new Uint8Array(e);return d(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(B(e,ArrayBuffer)||e&&B(e.buffer,ArrayBuffer))return d(e,t,n);if("undefined"!=typeof SharedArrayBuffer&&(B(e,SharedArrayBuffer)||e&&B(e.buffer,SharedArrayBuffer)))return d(e,t,n);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');var r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);var o=function(e){if(l.isBuffer(e)){var t=0|h(e.length),n=s(t);return 0===n.length||e.copy(n,0,0,t),n}return void 0!==e.length?"number"!=typeof e.length||$(e.length)?s(0):f(e):"Buffer"===e.type&&Array.isArray(e.data)?f(e.data):void 0}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function u(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function p(e){return u(e),s(e<0?0:0|h(e))}function f(e){for(var t=e.length<0?0:0|h(e.length),n=s(t),r=0;r=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||B(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;for(var o=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return z(e).length;default:if(o)return r?-1:F(e).length;t=(""+t).toLowerCase(),o=!0}}function v(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return O(this,t,n);case"ascii":return R(this,t,n);case"latin1":case"binary":return C(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function y(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),$(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,l/=2,n/=2}function c(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var u=-1;for(i=n;is&&(n=s-l),i=n;i>=0;i--){for(var p=!0,f=0;fo&&(r=o):r=o;var i=t.length;r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function O(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:c>223?3:c>191?2:1;if(o+p<=n)switch(p){case 1:c<128&&(u=c);break;case 2:128==(192&(i=e[o+1]))&&(l=(31&c)<<6|63&i)>127&&(u=l);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(l=(15&c)<<12|(63&i)<<6|63&a)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(l=(15&c)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,p=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),o+=p}return function(e){var t=e.length;if(t<=A)return String.fromCharCode.apply(String,e);for(var n="",r=0;rr.length?l.from(i).copy(r,o):Uint8Array.prototype.set.call(r,i,o);else{if(!l.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(r,o)}o+=i.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;tn&&(e+=" ... "),""},i&&(l.prototype[i]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,o){if(B(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),c=this.slice(r,o),u=e.slice(t,n),p=0;p>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return x(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":case"latin1":case"binary":return k(this,e,t,n);case"base64":return E(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function R(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function j(e,t,n,r,o,i){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function L(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function N(e,t,n,r,i){return t=+t,n>>>=0,i||L(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function M(e,t,n,r,i){return t=+t,n>>>=0,i||L(e,0,n,8),o.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){var n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t>>=0,t>>>=0,n||I(e,t,this.length);for(var r=this[e],o=1,i=0;++i>>=0,t>>>=0,n||I(e,t,this.length);for(var r=this[e+--t],o=1;t>0&&(o*=256);)r+=this[e+--t]*o;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||I(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},l.prototype.readInt8=function(e,t){return e>>>=0,t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||I(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||I(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return e>>>=0,t||I(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||I(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||I(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||I(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){e=+e,t>>>=0,n>>>=0,r||j(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i>>=0,n>>>=0,r||j(this,e,t,n,Math.pow(2,8*n)-1,0);var o=n-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var o=Math.pow(2,8*n-1);j(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var o=Math.pow(2,8*n-1);j(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||j(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeFloatLE=function(e,t,n){return N(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return N(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return M(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return M(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function z(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(D,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function U(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function B(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function $(e){return e!=e}var q=function(){for(var e="0123456789abcdef",t=new Array(256),n=0;n<16;++n)for(var r=16*n,o=0;o<16;++o)t[r+o]=e[n]+e[o];return t}()},4480:function(e,t,n){"use strict";var r=n.g.process&&process.nextTick||n.g.setImmediate||function(e){setTimeout(e,0)};e.exports=function(e,t){return e?void t.then((function(t){r((function(){e(null,t)}))}),(function(t){r((function(){e(t)}))})):t}},4184:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t1?arguments[1]:void 0)}},8457:function(e,t,n){"use strict";var r=n(9974),o=n(7908),i=n(3411),a=n(7659),s=n(7466),l=n(6135),c=n(1246);e.exports=function(e){var t,n,u,p,f,d,h=o(e),m="function"==typeof this?this:Array,v=arguments.length,g=v>1?arguments[1]:void 0,y=void 0!==g,b=c(h),x=0;if(y&&(g=r(g,v>2?arguments[2]:void 0,2)),null==b||m==Array&&a(b))for(n=new m(t=s(h.length));t>x;x++)d=y?g(h[x],x):h[x],l(n,x,d);else for(f=(p=b.call(h)).next,n=new m;!(u=f.call(p)).done;x++)d=y?i(p,g,[u.value,x],!0):u.value,l(n,x,d);return n.length=x,n}},1318:function(e,t,n){var r=n(5656),o=n(7466),i=n(1400),a=function(e){return function(t,n,a){var s,l=r(t),c=o(l.length),u=i(a,c);if(e&&n!=n){for(;c>u;)if((s=l[u++])!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},2092:function(e,t,n){var r=n(9974),o=n(8361),i=n(7908),a=n(7466),s=n(5417),l=[].push,c=function(e){var t=1==e,n=2==e,c=3==e,u=4==e,p=6==e,f=7==e,d=5==e||p;return function(h,m,v,g){for(var y,b,x=i(h),w=o(x),k=r(m,v,3),E=a(w.length),S=0,_=g||s,O=t?_(h,E):n||f?_(h,0):void 0;E>S;S++)if((d||S in w)&&(b=k(y=w[S],S,x),e))if(t)O[S]=b;else if(b)switch(e){case 3:return!0;case 5:return y;case 6:return S;case 2:l.call(O,y)}else switch(e){case 4:return!1;case 7:l.call(O,y)}return p?-1:c||u?u:O}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterOut:c(7)}},1194:function(e,t,n){var r=n(7293),o=n(5112),i=n(7392),a=o("species");e.exports=function(e){return i>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},2133:function(e,t,n){"use strict";var r=n(7293);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){throw 1},1)}))}},4362:function(e){var t=Math.floor,n=function(e,i){var a=e.length,s=t(a/2);return a<8?r(e,i):o(n(e.slice(0,s),i),n(e.slice(s),i),i)},r=function(e,t){for(var n,r,o=e.length,i=1;i0;)e[r]=e[--r];r!==i++&&(e[r]=n)}return e},o=function(e,t,n){for(var r=e.length,o=t.length,i=0,a=0,s=[];i1?arguments[1]:void 0,3);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!g(this,e)}}),i(u.prototype,n?{get:function(e){var t=g(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),p&&r(u.prototype,"size",{get:function(){return d(this).size}}),u},setStrong:function(e,t,n){var r=t+" Iterator",o=m(t),i=m(r);c(e,t,(function(e,t){h(this,{type:r,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=i(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(t)}}},9320:function(e,t,n){"use strict";var r=n(2248),o=n(2423).getWeakData,i=n(9670),a=n(111),s=n(5787),l=n(612),c=n(2092),u=n(6656),p=n(9909),f=p.set,d=p.getterFor,h=c.find,m=c.findIndex,v=0,g=function(e){return e.frozen||(e.frozen=new y)},y=function(){this.entries=[]},b=function(e,t){return h(e.entries,(function(e){return e[0]===t}))};y.prototype={get:function(e){var t=b(this,e);if(t)return t[1]},has:function(e){return!!b(this,e)},set:function(e,t){var n=b(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=m(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,c){var p=e((function(e,r){s(e,p,t),f(e,{type:t,id:v++,frozen:void 0}),null!=r&&l(r,e[c],{that:e,AS_ENTRIES:n})})),h=d(t),m=function(e,t,n){var r=h(e),a=o(i(t),!0);return!0===a?g(r).set(t,n):a[r.id]=n,e};return r(p.prototype,{delete:function(e){var t=h(this);if(!a(e))return!1;var n=o(e);return!0===n?g(t).delete(e):n&&u(n,t.id)&&delete n[t.id]},has:function(e){var t=h(this);if(!a(e))return!1;var n=o(e);return!0===n?g(t).has(e):n&&u(n,t.id)}}),r(p.prototype,n?{get:function(e){var t=h(this);if(a(e)){var n=o(e);return!0===n?g(t).get(e):n?n[t.id]:void 0}},set:function(e,t){return m(this,e,t)}}:{add:function(e){return m(this,e,!0)}}),p}}},7710:function(e,t,n){"use strict";var r=n(2109),o=n(7854),i=n(4705),a=n(1320),s=n(2423),l=n(612),c=n(5787),u=n(111),p=n(7293),f=n(7072),d=n(8003),h=n(9587);e.exports=function(e,t,n){var m=-1!==e.indexOf("Map"),v=-1!==e.indexOf("Weak"),g=m?"set":"add",y=o[e],b=y&&y.prototype,x=y,w={},k=function(e){var t=b[e];a(b,e,"add"==e?function(e){return t.call(this,0===e?0:e),this}:"delete"==e?function(e){return!(v&&!u(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return v&&!u(e)?void 0:t.call(this,0===e?0:e)}:"has"==e?function(e){return!(v&&!u(e))&&t.call(this,0===e?0:e)}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(i(e,"function"!=typeof y||!(v||b.forEach&&!p((function(){(new y).entries().next()})))))x=n.getConstructor(t,e,m,g),s.REQUIRED=!0;else if(i(e,!0)){var E=new x,S=E[g](v?{}:-0,1)!=E,_=p((function(){E.has(1)})),O=f((function(e){new y(e)})),A=!v&&p((function(){for(var e=new y,t=5;t--;)e[g](t,t);return!e.has(-0)}));O||((x=t((function(t,n){c(t,x,e);var r=h(new y,t,x);return null!=n&&l(n,r[g],{that:r,AS_ENTRIES:m}),r}))).prototype=b,b.constructor=x),(_||A)&&(k("delete"),k("has"),m&&k("get")),(A||S)&&k(g),v&&b.clear&&delete b.clear}return w[e]=x,r({global:!0,forced:x!=y},w),d(x,e),v||n.setStrong(x,e,m),x}},9920:function(e,t,n){var r=n(6656),o=n(3887),i=n(1236),a=n(3070);e.exports=function(e,t){for(var n=o(t),s=a.f,l=i.f,c=0;c"+a+""}},4994:function(e,t,n){"use strict";var r=n(3383).IteratorPrototype,o=n(30),i=n(9114),a=n(8003),s=n(7497),l=function(){return this};e.exports=function(e,t,n){var c=t+" Iterator";return e.prototype=o(r,{next:i(1,n)}),a(e,c,!1,!0),s[c]=l,e}},8880:function(e,t,n){var r=n(9781),o=n(3070),i=n(9114);e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},9114:function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},6135:function(e,t,n){"use strict";var r=n(7593),o=n(3070),i=n(9114);e.exports=function(e,t,n){var a=r(t);a in e?o.f(e,a,i(0,n)):e[a]=n}},8709:function(e,t,n){"use strict";var r=n(9670),o=n(7593);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return o(r(this),"number"!==e)}},654:function(e,t,n){"use strict";var r=n(2109),o=n(4994),i=n(9518),a=n(7674),s=n(8003),l=n(8880),c=n(1320),u=n(5112),p=n(1913),f=n(7497),d=n(3383),h=d.IteratorPrototype,m=d.BUGGY_SAFARI_ITERATORS,v=u("iterator"),g="keys",y="values",b="entries",x=function(){return this};e.exports=function(e,t,n,u,d,w,k){o(n,t,u);var E,S,_,O=function(e){if(e===d&&P)return P;if(!m&&e in C)return C[e];switch(e){case g:case y:case b:return function(){return new n(this,e)}}return function(){return new n(this)}},A=t+" Iterator",R=!1,C=e.prototype,T=C[v]||C["@@iterator"]||d&&C[d],P=!m&&T||O(d),I="Array"==t&&C.entries||T;if(I&&(E=i(I.call(new e)),h!==Object.prototype&&E.next&&(p||i(E)===h||(a?a(E,h):"function"!=typeof E[v]&&l(E,v,x)),s(E,A,!0,!0),p&&(f[A]=x))),d==y&&T&&T.name!==y&&(R=!0,P=function(){return T.call(this)}),p&&!k||C[v]===P||l(C,v,P),f[t]=P,d)if(S={values:O(y),keys:w?P:O(g),entries:O(b)},k)for(_ in S)(m||R||!(_ in C))&&c(C,_,S[_]);else r({target:t,proto:!0,forced:m||R},S);return S}},7235:function(e,t,n){var r=n(857),o=n(6656),i=n(6061),a=n(3070).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||a(t,e,{value:i.f(e)})}},9781:function(e,t,n){var r=n(7293);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},317:function(e,t,n){var r=n(7854),o=n(111),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},8324:function(e){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8886:function(e,t,n){var r=n(8113).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},7871:function(e){e.exports="object"==typeof window},256:function(e,t,n){var r=n(8113);e.exports=/MSIE|Trident/.test(r)},6833:function(e,t,n){var r=n(8113);e.exports=/(?:iphone|ipod|ipad).*applewebkit/i.test(r)},5268:function(e,t,n){var r=n(4326),o=n(7854);e.exports="process"==r(o.process)},1036:function(e,t,n){var r=n(8113);e.exports=/web0s(?!.*chrome)/i.test(r)},8113:function(e,t,n){var r=n(5005);e.exports=r("navigator","userAgent")||""},7392:function(e,t,n){var r,o,i=n(7854),a=n(8113),s=i.process,l=s&&s.versions,c=l&&l.v8;c?o=(r=c.split("."))[0]<4?1:r[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=r[1]),e.exports=o&&+o},8008:function(e,t,n){var r=n(8113).match(/AppleWebKit\/(\d+)\./);e.exports=!!r&&+r[1]},748:function(e){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:function(e,t,n){var r=n(7854),o=n(1236).f,i=n(8880),a=n(1320),s=n(3505),l=n(9920),c=n(4705);e.exports=function(e,t){var n,u,p,f,d,h=e.target,m=e.global,v=e.stat;if(n=m?r:v?r[h]||s(h,{}):(r[h]||{}).prototype)for(u in t){if(f=t[u],p=e.noTargetGet?(d=o(n,u))&&d.value:n[u],!c(m?u:h+(v?".":"#")+u,e.forced)&&void 0!==p){if(typeof f==typeof p)continue;l(f,p)}(e.sham||p&&p.sham)&&i(f,"sham",!0),a(n,u,f,e)}}},7293:function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},7007:function(e,t,n){"use strict";n(4916);var r=n(1320),o=n(2261),i=n(7293),a=n(5112),s=n(8880),l=a("species"),c=RegExp.prototype,u=!i((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),p="$0"==="a".replace(/./,"$0"),f=a("replace"),d=!!/./[f]&&""===/./[f]("a","$0"),h=!i((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,f){var m=a(e),v=!i((function(){var t={};return t[m]=function(){return 7},7!=""[e](t)})),g=v&&!i((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[l]=function(){return n},n.flags="",n[m]=/./[m]),n.exec=function(){return t=!0,null},n[m](""),!t}));if(!v||!g||"replace"===e&&(!u||!p||d)||"split"===e&&!h){var y=/./[m],b=n(m,""[e],(function(e,t,n,r,i){var a=t.exec;return a===o||a===c.exec?v&&!i?{done:!0,value:y.call(t,n,r)}:{done:!0,value:e.call(n,t,r)}:{done:!1}}),{REPLACE_KEEPS_$0:p,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:d}),x=b[0],w=b[1];r(String.prototype,e,x),r(c,m,2==t?function(e,t){return w.call(e,this,t)}:function(e){return w.call(e,this)})}f&&s(c[m],"sham",!0)}},6790:function(e,t,n){"use strict";var r=n(3157),o=n(7466),i=n(9974),a=function(e,t,n,s,l,c,u,p){for(var f,d=l,h=0,m=!!u&&i(u,p,3);h0&&r(f))d=a(e,t,f,o(f.length),d,c-1)-1;else{if(d>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[d]=f}d++}h++}return d};e.exports=a},6677:function(e,t,n){var r=n(7293);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},9974:function(e,t,n){var r=n(3099);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},5005:function(e,t,n){var r=n(857),o=n(7854),i=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},1246:function(e,t,n){var r=n(648),o=n(7497),i=n(5112)("iterator");e.exports=function(e){if(null!=e)return e[i]||e["@@iterator"]||o[r(e)]}},8554:function(e,t,n){var r=n(9670),o=n(1246);e.exports=function(e){var t=o(e);if("function"!=typeof t)throw TypeError(String(e)+" is not iterable");return r(t.call(e))}},647:function(e,t,n){var r=n(7908),o=Math.floor,i="".replace,a=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,s=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,l,c,u){var p=n+e.length,f=l.length,d=s;return void 0!==c&&(c=r(c),d=a),i.call(u,d,(function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,n);case"'":return t.slice(p);case"<":a=c[i.slice(1,-1)];break;default:var s=+i;if(0===s)return r;if(s>f){var u=o(s/10);return 0===u?r:u<=f?void 0===l[u-1]?i.charAt(1):l[u-1]+i.charAt(1):r}a=l[s-1]}return void 0===a?"":a}))}},7854:function(e,t,n){var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},6656:function(e,t,n){var r=n(7908),o={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return o.call(r(e),t)}},3501:function(e){e.exports={}},842:function(e,t,n){var r=n(7854);e.exports=function(e,t){var n=r.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},490:function(e,t,n){var r=n(5005);e.exports=r("document","documentElement")},4664:function(e,t,n){var r=n(9781),o=n(7293),i=n(317);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},8361:function(e,t,n){var r=n(7293),o=n(4326),i="".split;e.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==o(e)?i.call(e,""):Object(e)}:Object},9587:function(e,t,n){var r=n(111),o=n(7674);e.exports=function(e,t,n){var i,a;return o&&"function"==typeof(i=t.constructor)&&i!==n&&r(a=i.prototype)&&a!==n.prototype&&o(e,a),e}},2788:function(e,t,n){var r=n(5465),o=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(e){return o.call(e)}),e.exports=r.inspectSource},2423:function(e,t,n){var r=n(3501),o=n(111),i=n(6656),a=n(3070).f,s=n(9711),l=n(6677),c=s("meta"),u=0,p=Object.isExtensible||function(){return!0},f=function(e){a(e,c,{value:{objectID:"O"+ ++u,weakData:{}}})},d=e.exports={REQUIRED:!1,fastKey:function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,c)){if(!p(e))return"F";if(!t)return"E";f(e)}return e[c].objectID},getWeakData:function(e,t){if(!i(e,c)){if(!p(e))return!0;if(!t)return!1;f(e)}return e[c].weakData},onFreeze:function(e){return l&&d.REQUIRED&&p(e)&&!i(e,c)&&f(e),e}};r[c]=!0},9909:function(e,t,n){var r,o,i,a=n(8536),s=n(7854),l=n(111),c=n(8880),u=n(6656),p=n(5465),f=n(6200),d=n(3501),h="Object already initialized",m=s.WeakMap;if(a||p.state){var v=p.state||(p.state=new m),g=v.get,y=v.has,b=v.set;r=function(e,t){if(y.call(v,e))throw new TypeError(h);return t.facade=e,b.call(v,e,t),t},o=function(e){return g.call(v,e)||{}},i=function(e){return y.call(v,e)}}else{var x=f("state");d[x]=!0,r=function(e,t){if(u(e,x))throw new TypeError(h);return t.facade=e,c(e,x,t),t},o=function(e){return u(e,x)?e[x]:{}},i=function(e){return u(e,x)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=o(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},7659:function(e,t,n){var r=n(5112),o=n(7497),i=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},3157:function(e,t,n){var r=n(4326);e.exports=Array.isArray||function(e){return"Array"==r(e)}},4705:function(e,t,n){var r=n(7293),o=/#|\.prototype\./,i=function(e,t){var n=s[a(e)];return n==c||n!=l&&("function"==typeof t?r(t):!!t)},a=i.normalize=function(e){return String(e).replace(o,".").toLowerCase()},s=i.data={},l=i.NATIVE="N",c=i.POLYFILL="P";e.exports=i},111:function(e){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},1913:function(e){e.exports=!1},7850:function(e,t,n){var r=n(111),o=n(4326),i=n(5112)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},612:function(e,t,n){var r=n(9670),o=n(7659),i=n(7466),a=n(9974),s=n(1246),l=n(9212),c=function(e,t){this.stopped=e,this.result=t};e.exports=function(e,t,n){var u,p,f,d,h,m,v,g=n&&n.that,y=!(!n||!n.AS_ENTRIES),b=!(!n||!n.IS_ITERATOR),x=!(!n||!n.INTERRUPTED),w=a(t,g,1+y+x),k=function(e){return u&&l(u),new c(!0,e)},E=function(e){return y?(r(e),x?w(e[0],e[1],k):w(e[0],e[1])):x?w(e,k):w(e)};if(b)u=e;else{if("function"!=typeof(p=s(e)))throw TypeError("Target is not iterable");if(o(p)){for(f=0,d=i(e.length);d>f;f++)if((h=E(e[f]))&&h instanceof c)return h;return new c(!1)}u=p.call(e)}for(m=u.next;!(v=m.call(u)).done;){try{h=E(v.value)}catch(e){throw l(u),e}if("object"==typeof h&&h&&h instanceof c)return h}return new c(!1)}},9212:function(e,t,n){var r=n(9670);e.exports=function(e){var t=e.return;if(void 0!==t)return r(t.call(e)).value}},3383:function(e,t,n){"use strict";var r,o,i,a=n(7293),s=n(9518),l=n(8880),c=n(6656),u=n(5112),p=n(1913),f=u("iterator"),d=!1;[].keys&&("next"in(i=[].keys())?(o=s(s(i)))!==Object.prototype&&(r=o):d=!0);var h=null==r||a((function(){var e={};return r[f].call(e)!==e}));h&&(r={}),p&&!h||c(r,f)||l(r,f,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:d}},7497:function(e){e.exports={}},5948:function(e,t,n){var r,o,i,a,s,l,c,u,p=n(7854),f=n(1236).f,d=n(261).set,h=n(6833),m=n(1036),v=n(5268),g=p.MutationObserver||p.WebKitMutationObserver,y=p.document,b=p.process,x=p.Promise,w=f(p,"queueMicrotask"),k=w&&w.value;k||(r=function(){var e,t;for(v&&(e=b.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?a():i=void 0,e}}i=void 0,e&&e.enter()},h||v||m||!g||!y?x&&x.resolve?((c=x.resolve(void 0)).constructor=x,u=c.then,a=function(){u.call(c,r)}):a=v?function(){b.nextTick(r)}:function(){d.call(p,r)}:(s=!0,l=y.createTextNode(""),new g(r).observe(l,{characterData:!0}),a=function(){l.data=s=!s})),e.exports=k||function(e){var t={fn:e,next:void 0};i&&(i.next=t),o||(o=t,a()),i=t}},3366:function(e,t,n){var r=n(7854);e.exports=r.Promise},133:function(e,t,n){var r=n(7392),o=n(7293);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},590:function(e,t,n){var r=n(7293),o=n(5112),i=n(1913),a=o("iterator");e.exports=!r((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n="";return e.pathname="c%20d",t.forEach((function(e,r){t.delete("b"),n+=r+e})),i&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[a]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://теŃŃ‚").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},8536:function(e,t,n){var r=n(7854),o=n(2788),i=r.WeakMap;e.exports="function"==typeof i&&/native code/.test(o(i))},8523:function(e,t,n){"use strict";var r=n(3099),o=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},3929:function(e,t,n){var r=n(7850);e.exports=function(e){if(r(e))throw TypeError("The method doesn't accept regular expressions");return e}},1574:function(e,t,n){"use strict";var r=n(9781),o=n(7293),i=n(1956),a=n(5181),s=n(5296),l=n(7908),c=n(8361),u=Object.assign,p=Object.defineProperty;e.exports=!u||o((function(){if(r&&1!==u({b:1},u(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),o="abcdefghijklmnopqrst";return e[n]=7,o.split("").forEach((function(e){t[e]=e})),7!=u({},e)[n]||i(u({},t)).join("")!=o}))?function(e,t){for(var n=l(e),o=arguments.length,u=1,p=a.f,f=s.f;o>u;)for(var d,h=c(arguments[u++]),m=p?i(h).concat(p(h)):i(h),v=m.length,g=0;v>g;)d=m[g++],r&&!f.call(h,d)||(n[d]=h[d]);return n}:u},30:function(e,t,n){var r,o=n(9670),i=n(6048),a=n(748),s=n(3501),l=n(490),c=n(317),u=n(6200)("IE_PROTO"),p=function(){},f=function(e){return" drf-yasg-1.20.1/src/drf_yasg/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.js000066400000000000000000041120211416705305200275750ustar00rootroot00000000000000/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist",n(n.s=481)}([function(e,t,n){"use strict";e.exports=n(555)},function(e,t,n){e.exports=function(){"use strict";var e=Array.prototype.slice;function t(e,t){t&&(e.prototype=Object.create(t.prototype)),e.prototype.constructor=e}function n(e){return i(e)?e:J(e)}function r(e){return u(e)?e:K(e)}function o(e){return s(e)?e:Y(e)}function a(e){return i(e)&&!c(e)?e:G(e)}function i(e){return!(!e||!e[f])}function u(e){return!(!e||!e[p])}function s(e){return!(!e||!e[h])}function c(e){return u(e)||s(e)}function l(e){return!(!e||!e[d])}t(r,n),t(o,n),t(a,n),n.isIterable=i,n.isKeyed=u,n.isIndexed=s,n.isAssociative=c,n.isOrdered=l,n.Keyed=r,n.Indexed=o,n.Set=a;var f="@@__IMMUTABLE_ITERABLE__@@",p="@@__IMMUTABLE_KEYED__@@",h="@@__IMMUTABLE_INDEXED__@@",d="@@__IMMUTABLE_ORDERED__@@",m="delete",v=5,g=1<>>0;if(""+n!==t||4294967295===n)return NaN;t=n}return t<0?A(e)+t:t}function C(){return!0}function j(e,t,n){return(0===e||void 0!==n&&e<=-n)&&(void 0===t||void 0!==n&&t>=n)}function T(e,t){return N(e,t,0)}function I(e,t){return N(e,t,t)}function N(e,t,n){return void 0===e?n:e<0?Math.max(0,t+e):void 0===t?e:Math.min(t,e)}var P=0,M=1,R=2,D="function"==typeof Symbol&&Symbol.iterator,L="@@iterator",B=D||L;function F(e){this.next=e}function z(e,t,n,r){var o=0===e?t:1===e?n:[t,n];return r?r.value=o:r={value:o,done:!1},r}function q(){return{value:void 0,done:!0}}function U(e){return!!H(e)}function V(e){return e&&"function"==typeof e.next}function W(e){var t=H(e);return t&&t.call(e)}function H(e){var t=e&&(D&&e[D]||e[L]);if("function"==typeof t)return t}function $(e){return e&&"number"==typeof e.length}function J(e){return null==e?ie():i(e)?e.toSeq():ce(e)}function K(e){return null==e?ie().toKeyedSeq():i(e)?u(e)?e.toSeq():e.fromEntrySeq():ue(e)}function Y(e){return null==e?ie():i(e)?u(e)?e.entrySeq():e.toIndexedSeq():se(e)}function G(e){return(null==e?ie():i(e)?u(e)?e.entrySeq():e:se(e)).toSetSeq()}F.prototype.toString=function(){return"[Iterator]"},F.KEYS=P,F.VALUES=M,F.ENTRIES=R,F.prototype.inspect=F.prototype.toSource=function(){return this.toString()},F.prototype[B]=function(){return this},t(J,n),J.of=function(){return J(arguments)},J.prototype.toSeq=function(){return this},J.prototype.toString=function(){return this.__toString("Seq {","}")},J.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},J.prototype.__iterate=function(e,t){return fe(this,e,t,!0)},J.prototype.__iterator=function(e,t){return pe(this,e,t,!0)},t(K,J),K.prototype.toKeyedSeq=function(){return this},t(Y,J),Y.of=function(){return Y(arguments)},Y.prototype.toIndexedSeq=function(){return this},Y.prototype.toString=function(){return this.__toString("Seq [","]")},Y.prototype.__iterate=function(e,t){return fe(this,e,t,!1)},Y.prototype.__iterator=function(e,t){return pe(this,e,t,!1)},t(G,J),G.of=function(){return G(arguments)},G.prototype.toSetSeq=function(){return this},J.isSeq=ae,J.Keyed=K,J.Set=G,J.Indexed=Y;var Q,Z,X,ee="@@__IMMUTABLE_SEQ__@@";function te(e){this._array=e,this.size=e.length}function ne(e){var t=Object.keys(e);this._object=e,this._keys=t,this.size=t.length}function re(e){this._iterable=e,this.size=e.length||e.size}function oe(e){this._iterator=e,this._iteratorCache=[]}function ae(e){return!(!e||!e[ee])}function ie(){return Q||(Q=new te([]))}function ue(e){var t=Array.isArray(e)?new te(e).fromEntrySeq():V(e)?new oe(e).fromEntrySeq():U(e)?new re(e).fromEntrySeq():"object"==typeof e?new ne(e):void 0;if(!t)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+e);return t}function se(e){var t=le(e);if(!t)throw new TypeError("Expected Array or iterable object of values: "+e);return t}function ce(e){var t=le(e)||"object"==typeof e&&new ne(e);if(!t)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+e);return t}function le(e){return $(e)?new te(e):V(e)?new oe(e):U(e)?new re(e):void 0}function fe(e,t,n,r){var o=e._cache;if(o){for(var a=o.length-1,i=0;i<=a;i++){var u=o[n?a-i:i];if(!1===t(u[1],r?u[0]:i,e))return i+1}return i}return e.__iterateUncached(t,n)}function pe(e,t,n,r){var o=e._cache;if(o){var a=o.length-1,i=0;return new F((function(){var e=o[n?a-i:i];return i++>a?q():z(t,r?e[0]:i-1,e[1])}))}return e.__iteratorUncached(t,n)}function he(e,t){return t?de(t,e,"",{"":e}):me(e)}function de(e,t,n,r){return Array.isArray(t)?e.call(r,n,Y(t).map((function(n,r){return de(e,n,r,t)}))):ve(t)?e.call(r,n,K(t).map((function(n,r){return de(e,n,r,t)}))):t}function me(e){return Array.isArray(e)?Y(e).map(me).toList():ve(e)?K(e).map(me).toMap():e}function ve(e){return e&&(e.constructor===Object||void 0===e.constructor)}function ge(e,t){if(e===t||e!=e&&t!=t)return!0;if(!e||!t)return!1;if("function"==typeof e.valueOf&&"function"==typeof t.valueOf){if((e=e.valueOf())===(t=t.valueOf())||e!=e&&t!=t)return!0;if(!e||!t)return!1}return!("function"!=typeof e.equals||"function"!=typeof t.equals||!e.equals(t))}function ye(e,t){if(e===t)return!0;if(!i(t)||void 0!==e.size&&void 0!==t.size&&e.size!==t.size||void 0!==e.__hash&&void 0!==t.__hash&&e.__hash!==t.__hash||u(e)!==u(t)||s(e)!==s(t)||l(e)!==l(t))return!1;if(0===e.size&&0===t.size)return!0;var n=!c(e);if(l(e)){var r=e.entries();return t.every((function(e,t){var o=r.next().value;return o&&ge(o[1],e)&&(n||ge(o[0],t))}))&&r.next().done}var o=!1;if(void 0===e.size)if(void 0===t.size)"function"==typeof e.cacheResult&&e.cacheResult();else{o=!0;var a=e;e=t,t=a}var f=!0,p=t.__iterate((function(t,r){if(n?!e.has(t):o?!ge(t,e.get(r,b)):!ge(e.get(r,b),t))return f=!1,!1}));return f&&e.size===p}function be(e,t){if(!(this instanceof be))return new be(e,t);if(this._value=e,this.size=void 0===t?1/0:Math.max(0,t),0===this.size){if(Z)return Z;Z=this}}function we(e,t){if(!e)throw new Error(t)}function xe(e,t,n){if(!(this instanceof xe))return new xe(e,t,n);if(we(0!==n,"Cannot step a Range by 0"),e=e||0,void 0===t&&(t=1/0),n=void 0===n?1:Math.abs(n),tr?q():z(e,o,n[t?r-o++:o++])}))},t(ne,K),ne.prototype.get=function(e,t){return void 0===t||this.has(e)?this._object[e]:t},ne.prototype.has=function(e){return this._object.hasOwnProperty(e)},ne.prototype.__iterate=function(e,t){for(var n=this._object,r=this._keys,o=r.length-1,a=0;a<=o;a++){var i=r[t?o-a:a];if(!1===e(n[i],i,this))return a+1}return a},ne.prototype.__iterator=function(e,t){var n=this._object,r=this._keys,o=r.length-1,a=0;return new F((function(){var i=r[t?o-a:a];return a++>o?q():z(e,i,n[i])}))},ne.prototype[d]=!0,t(re,Y),re.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);var n=W(this._iterable),r=0;if(V(n))for(var o;!(o=n.next()).done&&!1!==e(o.value,r++,this););return r},re.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=W(this._iterable);if(!V(n))return new F(q);var r=0;return new F((function(){var t=n.next();return t.done?t:z(e,r++,t.value)}))},t(oe,Y),oe.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);for(var n,r=this._iterator,o=this._iteratorCache,a=0;a=r.length){var t=n.next();if(t.done)return t;r[o]=t.value}return z(e,o,r[o++])}))},t(be,Y),be.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},be.prototype.get=function(e,t){return this.has(e)?this._value:t},be.prototype.includes=function(e){return ge(this._value,e)},be.prototype.slice=function(e,t){var n=this.size;return j(e,t,n)?this:new be(this._value,I(t,n)-T(e,n))},be.prototype.reverse=function(){return this},be.prototype.indexOf=function(e){return ge(this._value,e)?0:-1},be.prototype.lastIndexOf=function(e){return ge(this._value,e)?this.size:-1},be.prototype.__iterate=function(e,t){for(var n=0;n=0&&t=0&&nn?q():z(e,a++,i)}))},xe.prototype.equals=function(e){return e instanceof xe?this._start===e._start&&this._end===e._end&&this._step===e._step:ye(this,e)},t(_e,n),t(Ee,_e),t(Se,_e),t(ke,_e),_e.Keyed=Ee,_e.Indexed=Se,_e.Set=ke;var Ae="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(e,t){var n=65535&(e|=0),r=65535&(t|=0);return n*r+((e>>>16)*r+n*(t>>>16)<<16>>>0)|0};function Oe(e){return e>>>1&1073741824|3221225471&e}function Ce(e){if(!1===e||null==e)return 0;if("function"==typeof e.valueOf&&(!1===(e=e.valueOf())||null==e))return 0;if(!0===e)return 1;var t=typeof e;if("number"===t){if(e!=e||e===1/0)return 0;var n=0|e;for(n!==e&&(n^=4294967295*e);e>4294967295;)n^=e/=4294967295;return Oe(n)}if("string"===t)return e.length>Fe?je(e):Te(e);if("function"==typeof e.hashCode)return e.hashCode();if("object"===t)return Ie(e);if("function"==typeof e.toString)return Te(e.toString());throw new Error("Value type "+t+" cannot be hashed.")}function je(e){var t=Ue[e];return void 0===t&&(t=Te(e),qe===ze&&(qe=0,Ue={}),qe++,Ue[e]=t),t}function Te(e){for(var t=0,n=0;n0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}var Re,De="function"==typeof WeakMap;De&&(Re=new WeakMap);var Le=0,Be="__immutablehash__";"function"==typeof Symbol&&(Be=Symbol(Be));var Fe=16,ze=255,qe=0,Ue={};function Ve(e){we(e!==1/0,"Cannot perform this action with an infinite size.")}function We(e){return null==e?ot():He(e)&&!l(e)?e:ot().withMutations((function(t){var n=r(e);Ve(n.size),n.forEach((function(e,n){return t.set(n,e)}))}))}function He(e){return!(!e||!e[Je])}t(We,Ee),We.of=function(){var t=e.call(arguments,0);return ot().withMutations((function(e){for(var n=0;n=t.length)throw new Error("Missing value for key: "+t[n]);e.set(t[n],t[n+1])}}))},We.prototype.toString=function(){return this.__toString("Map {","}")},We.prototype.get=function(e,t){return this._root?this._root.get(0,void 0,e,t):t},We.prototype.set=function(e,t){return at(this,e,t)},We.prototype.setIn=function(e,t){return this.updateIn(e,b,(function(){return t}))},We.prototype.remove=function(e){return at(this,e,b)},We.prototype.deleteIn=function(e){return this.updateIn(e,(function(){return b}))},We.prototype.update=function(e,t,n){return 1===arguments.length?e(this):this.updateIn([e],t,n)},We.prototype.updateIn=function(e,t,n){n||(n=t,t=void 0);var r=vt(this,_n(e),t,n);return r===b?void 0:r},We.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):ot()},We.prototype.merge=function(){return pt(this,void 0,arguments)},We.prototype.mergeWith=function(t){return pt(this,t,e.call(arguments,1))},We.prototype.mergeIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.merge?e.merge.apply(e,n):n[n.length-1]}))},We.prototype.mergeDeep=function(){return pt(this,ht,arguments)},We.prototype.mergeDeepWith=function(t){var n=e.call(arguments,1);return pt(this,dt(t),n)},We.prototype.mergeDeepIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.mergeDeep?e.mergeDeep.apply(e,n):n[n.length-1]}))},We.prototype.sort=function(e){return Ut(fn(this,e))},We.prototype.sortBy=function(e,t){return Ut(fn(this,t,e))},We.prototype.withMutations=function(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this},We.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new S)},We.prototype.asImmutable=function(){return this.__ensureOwner()},We.prototype.wasAltered=function(){return this.__altered},We.prototype.__iterator=function(e,t){return new et(this,e,t)},We.prototype.__iterate=function(e,t){var n=this,r=0;return this._root&&this._root.iterate((function(t){return r++,e(t[1],t[0],n)}),t),r},We.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?rt(this.size,this._root,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},We.isMap=He;var $e,Je="@@__IMMUTABLE_MAP__@@",Ke=We.prototype;function Ye(e,t){this.ownerID=e,this.entries=t}function Ge(e,t,n){this.ownerID=e,this.bitmap=t,this.nodes=n}function Qe(e,t,n){this.ownerID=e,this.count=t,this.nodes=n}function Ze(e,t,n){this.ownerID=e,this.keyHash=t,this.entries=n}function Xe(e,t,n){this.ownerID=e,this.keyHash=t,this.entry=n}function et(e,t,n){this._type=t,this._reverse=n,this._stack=e._root&&nt(e._root)}function tt(e,t){return z(e,t[0],t[1])}function nt(e,t){return{node:e,index:0,__prev:t}}function rt(e,t,n,r){var o=Object.create(Ke);return o.size=e,o._root=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function ot(){return $e||($e=rt(0))}function at(e,t,n){var r,o;if(e._root){var a=_(w),i=_(x);if(r=it(e._root,e.__ownerID,0,void 0,t,n,a,i),!i.value)return e;o=e.size+(a.value?n===b?-1:1:0)}else{if(n===b)return e;o=1,r=new Ye(e.__ownerID,[[t,n]])}return e.__ownerID?(e.size=o,e._root=r,e.__hash=void 0,e.__altered=!0,e):r?rt(o,r):ot()}function it(e,t,n,r,o,a,i,u){return e?e.update(t,n,r,o,a,i,u):a===b?e:(E(u),E(i),new Xe(t,r,[o,a]))}function ut(e){return e.constructor===Xe||e.constructor===Ze}function st(e,t,n,r,o){if(e.keyHash===r)return new Ze(t,r,[e.entry,o]);var a,i=(0===n?e.keyHash:e.keyHash>>>n)&y,u=(0===n?r:r>>>n)&y;return new Ge(t,1<>>=1)i[u]=1&n?t[a++]:void 0;return i[r]=o,new Qe(e,a+1,i)}function pt(e,t,n){for(var o=[],a=0;a>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135,e+=e>>8,127&(e+=e>>16)}function yt(e,t,n,r){var o=r?e:k(e);return o[t]=n,o}function bt(e,t,n,r){var o=e.length+1;if(r&&t+1===o)return e[t]=n,e;for(var a=new Array(o),i=0,u=0;u=xt)return ct(e,s,r,o);var p=e&&e===this.ownerID,h=p?s:k(s);return f?u?c===l-1?h.pop():h[c]=h.pop():h[c]=[r,o]:h.push([r,o]),p?(this.entries=h,this):new Ye(e,h)}},Ge.prototype.get=function(e,t,n,r){void 0===t&&(t=Ce(n));var o=1<<((0===e?t:t>>>e)&y),a=this.bitmap;return 0==(a&o)?r:this.nodes[gt(a&o-1)].get(e+v,t,n,r)},Ge.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Ce(r));var u=(0===t?n:n>>>t)&y,s=1<=_t)return ft(e,p,c,u,d);if(l&&!d&&2===p.length&&ut(p[1^f]))return p[1^f];if(l&&d&&1===p.length&&ut(d))return d;var m=e&&e===this.ownerID,g=l?d?c:c^s:c|s,w=l?d?yt(p,f,d,m):wt(p,f,m):bt(p,f,d,m);return m?(this.bitmap=g,this.nodes=w,this):new Ge(e,g,w)},Qe.prototype.get=function(e,t,n,r){void 0===t&&(t=Ce(n));var o=(0===e?t:t>>>e)&y,a=this.nodes[o];return a?a.get(e+v,t,n,r):r},Qe.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Ce(r));var u=(0===t?n:n>>>t)&y,s=o===b,c=this.nodes,l=c[u];if(s&&!l)return this;var f=it(l,e,t+v,n,r,o,a,i);if(f===l)return this;var p=this.count;if(l){if(!f&&--p0&&r=0&&e>>t&y;if(r>=this.array.length)return new Ct([],e);var o,a=0===r;if(t>0){var i=this.array[r];if((o=i&&i.removeBefore(e,t-v,n))===i&&a)return this}if(a&&!o)return this;var u=Lt(this,e);if(!a)for(var s=0;s>>t&y;if(o>=this.array.length)return this;if(t>0){var a=this.array[o];if((r=a&&a.removeAfter(e,t-v,n))===a&&o===this.array.length-1)return this}var i=Lt(this,e);return i.array.splice(o+1),r&&(i.array[o]=r),i};var jt,Tt,It={};function Nt(e,t){var n=e._origin,r=e._capacity,o=qt(r),a=e._tail;return i(e._root,e._level,0);function i(e,t,n){return 0===t?u(e,n):s(e,t,n)}function u(e,i){var u=i===o?a&&a.array:e&&e.array,s=i>n?0:n-i,c=r-i;return c>g&&(c=g),function(){if(s===c)return It;var e=t?--c:s++;return u&&u[e]}}function s(e,o,a){var u,s=e&&e.array,c=a>n?0:n-a>>o,l=1+(r-a>>o);return l>g&&(l=g),function(){for(;;){if(u){var e=u();if(e!==It)return e;u=null}if(c===l)return It;var n=t?--l:c++;u=i(s&&s[n],o-v,a+(n<=e.size||t<0)return e.withMutations((function(e){t<0?Ft(e,t).set(0,n):Ft(e,0,t+1).set(t,n)}));t+=e._origin;var r=e._tail,o=e._root,a=_(x);return t>=qt(e._capacity)?r=Dt(r,e.__ownerID,0,t,n,a):o=Dt(o,e.__ownerID,e._level,t,n,a),a.value?e.__ownerID?(e._root=o,e._tail=r,e.__hash=void 0,e.__altered=!0,e):Pt(e._origin,e._capacity,e._level,o,r):e}function Dt(e,t,n,r,o,a){var i,u=r>>>n&y,s=e&&u0){var c=e&&e.array[u],l=Dt(c,t,n-v,r,o,a);return l===c?e:((i=Lt(e,t)).array[u]=l,i)}return s&&e.array[u]===o?e:(E(a),i=Lt(e,t),void 0===o&&u===i.array.length-1?i.array.pop():i.array[u]=o,i)}function Lt(e,t){return t&&e&&t===e.ownerID?e:new Ct(e?e.array.slice():[],t)}function Bt(e,t){if(t>=qt(e._capacity))return e._tail;if(t<1<0;)n=n.array[t>>>r&y],r-=v;return n}}function Ft(e,t,n){void 0!==t&&(t|=0),void 0!==n&&(n|=0);var r=e.__ownerID||new S,o=e._origin,a=e._capacity,i=o+t,u=void 0===n?a:n<0?a+n:o+n;if(i===o&&u===a)return e;if(i>=u)return e.clear();for(var s=e._level,c=e._root,l=0;i+l<0;)c=new Ct(c&&c.array.length?[void 0,c]:[],r),l+=1<<(s+=v);l&&(i+=l,o+=l,u+=l,a+=l);for(var f=qt(a),p=qt(u);p>=1<f?new Ct([],r):h;if(h&&p>f&&iv;g-=v){var b=f>>>g&y;m=m.array[b]=Lt(m.array[b],r)}m.array[f>>>v&y]=h}if(u=p)i-=p,u-=p,s=v,c=null,d=d&&d.removeBefore(r,0,i);else if(i>o||p>>s&y;if(w!==p>>>s&y)break;w&&(l+=(1<o&&(c=c.removeBefore(r,s,i-l)),c&&pa&&(a=c.size),i(s)||(c=c.map((function(e){return he(e)}))),r.push(c)}return a>e.size&&(e=e.setSize(a)),mt(e,t,r)}function qt(e){return e>>v<=g&&i.size>=2*a.size?(r=(o=i.filter((function(e,t){return void 0!==e&&u!==t}))).toKeyedSeq().map((function(e){return e[0]})).flip().toMap(),e.__ownerID&&(r.__ownerID=o.__ownerID=e.__ownerID)):(r=a.remove(t),o=u===i.size-1?i.pop():i.set(u,void 0))}else if(s){if(n===i.get(u)[1])return e;r=a,o=i.set(u,[t,n])}else r=a.set(t,i.size),o=i.set(i.size,[t,n]);return e.__ownerID?(e.size=r.size,e._map=r,e._list=o,e.__hash=void 0,e):Wt(r,o)}function Jt(e,t){this._iter=e,this._useKeys=t,this.size=e.size}function Kt(e){this._iter=e,this.size=e.size}function Yt(e){this._iter=e,this.size=e.size}function Gt(e){this._iter=e,this.size=e.size}function Qt(e){var t=bn(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var t=e.reverse.apply(this);return t.flip=function(){return e.reverse()},t},t.has=function(t){return e.includes(t)},t.includes=function(t){return e.has(t)},t.cacheResult=wn,t.__iterateUncached=function(t,n){var r=this;return e.__iterate((function(e,n){return!1!==t(n,e,r)}),n)},t.__iteratorUncached=function(t,n){if(t===R){var r=e.__iterator(t,n);return new F((function(){var e=r.next();if(!e.done){var t=e.value[0];e.value[0]=e.value[1],e.value[1]=t}return e}))}return e.__iterator(t===M?P:M,n)},t}function Zt(e,t,n){var r=bn(e);return r.size=e.size,r.has=function(t){return e.has(t)},r.get=function(r,o){var a=e.get(r,b);return a===b?o:t.call(n,a,r,e)},r.__iterateUncached=function(r,o){var a=this;return e.__iterate((function(e,o,i){return!1!==r(t.call(n,e,o,i),o,a)}),o)},r.__iteratorUncached=function(r,o){var a=e.__iterator(R,o);return new F((function(){var o=a.next();if(o.done)return o;var i=o.value,u=i[0];return z(r,u,t.call(n,i[1],u,e),o)}))},r}function Xt(e,t){var n=bn(e);return n._iter=e,n.size=e.size,n.reverse=function(){return e},e.flip&&(n.flip=function(){var t=Qt(e);return t.reverse=function(){return e.flip()},t}),n.get=function(n,r){return e.get(t?n:-1-n,r)},n.has=function(n){return e.has(t?n:-1-n)},n.includes=function(t){return e.includes(t)},n.cacheResult=wn,n.__iterate=function(t,n){var r=this;return e.__iterate((function(e,n){return t(e,n,r)}),!n)},n.__iterator=function(t,n){return e.__iterator(t,!n)},n}function en(e,t,n,r){var o=bn(e);return r&&(o.has=function(r){var o=e.get(r,b);return o!==b&&!!t.call(n,o,r,e)},o.get=function(r,o){var a=e.get(r,b);return a!==b&&t.call(n,a,r,e)?a:o}),o.__iterateUncached=function(o,a){var i=this,u=0;return e.__iterate((function(e,a,s){if(t.call(n,e,a,s))return u++,o(e,r?a:u-1,i)}),a),u},o.__iteratorUncached=function(o,a){var i=e.__iterator(R,a),u=0;return new F((function(){for(;;){var a=i.next();if(a.done)return a;var s=a.value,c=s[0],l=s[1];if(t.call(n,l,c,e))return z(o,r?c:u++,l,a)}}))},o}function tn(e,t,n){var r=We().asMutable();return e.__iterate((function(o,a){r.update(t.call(n,o,a,e),0,(function(e){return e+1}))})),r.asImmutable()}function nn(e,t,n){var r=u(e),o=(l(e)?Ut():We()).asMutable();e.__iterate((function(a,i){o.update(t.call(n,a,i,e),(function(e){return(e=e||[]).push(r?[i,a]:a),e}))}));var a=yn(e);return o.map((function(t){return mn(e,a(t))}))}function rn(e,t,n,r){var o=e.size;if(void 0!==t&&(t|=0),void 0!==n&&(n===1/0?n=o:n|=0),j(t,n,o))return e;var a=T(t,o),i=I(n,o);if(a!=a||i!=i)return rn(e.toSeq().cacheResult(),t,n,r);var u,s=i-a;s==s&&(u=s<0?0:s);var c=bn(e);return c.size=0===u?u:e.size&&u||void 0,!r&&ae(e)&&u>=0&&(c.get=function(t,n){return(t=O(this,t))>=0&&tu)return q();var e=o.next();return r||t===M?e:z(t,s-1,t===P?void 0:e.value[1],e)}))},c}function on(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterate(r,o);var i=0;return e.__iterate((function(e,o,u){return t.call(n,e,o,u)&&++i&&r(e,o,a)})),i},r.__iteratorUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterator(r,o);var i=e.__iterator(R,o),u=!0;return new F((function(){if(!u)return q();var e=i.next();if(e.done)return e;var o=e.value,s=o[0],c=o[1];return t.call(n,c,s,a)?r===R?e:z(r,s,c,e):(u=!1,q())}))},r}function an(e,t,n,r){var o=bn(e);return o.__iterateUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterate(o,a);var u=!0,s=0;return e.__iterate((function(e,a,c){if(!u||!(u=t.call(n,e,a,c)))return s++,o(e,r?a:s-1,i)})),s},o.__iteratorUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterator(o,a);var u=e.__iterator(R,a),s=!0,c=0;return new F((function(){var e,a,l;do{if((e=u.next()).done)return r||o===M?e:z(o,c++,o===P?void 0:e.value[1],e);var f=e.value;a=f[0],l=f[1],s&&(s=t.call(n,l,a,i))}while(s);return o===R?e:z(o,a,l,e)}))},o}function un(e,t){var n=u(e),o=[e].concat(t).map((function(e){return i(e)?n&&(e=r(e)):e=n?ue(e):se(Array.isArray(e)?e:[e]),e})).filter((function(e){return 0!==e.size}));if(0===o.length)return e;if(1===o.length){var a=o[0];if(a===e||n&&u(a)||s(e)&&s(a))return a}var c=new te(o);return n?c=c.toKeyedSeq():s(e)||(c=c.toSetSeq()),(c=c.flatten(!0)).size=o.reduce((function(e,t){if(void 0!==e){var n=t.size;if(void 0!==n)return e+n}}),0),c}function sn(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=0,u=!1;function s(e,c){var l=this;e.__iterate((function(e,o){return(!t||c0}function dn(e,t,r){var o=bn(e);return o.size=new te(r).map((function(e){return e.size})).min(),o.__iterate=function(e,t){for(var n,r=this.__iterator(M,t),o=0;!(n=r.next()).done&&!1!==e(n.value,o++,this););return o},o.__iteratorUncached=function(e,o){var a=r.map((function(e){return e=n(e),W(o?e.reverse():e)})),i=0,u=!1;return new F((function(){var n;return u||(n=a.map((function(e){return e.next()})),u=n.some((function(e){return e.done}))),u?q():z(e,i++,t.apply(null,n.map((function(e){return e.value}))))}))},o}function mn(e,t){return ae(e)?t:e.constructor(t)}function vn(e){if(e!==Object(e))throw new TypeError("Expected [K, V] tuple: "+e)}function gn(e){return Ve(e.size),A(e)}function yn(e){return u(e)?r:s(e)?o:a}function bn(e){return Object.create((u(e)?K:s(e)?Y:G).prototype)}function wn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):J.prototype.cacheResult.call(this)}function xn(e,t){return e>t?1:e=0;n--)t={value:arguments[n],next:t};return this.__ownerID?(this.size=e,this._head=t,this.__hash=void 0,this.__altered=!0,this):Kn(e,t)},Vn.prototype.pushAll=function(e){if(0===(e=o(e)).size)return this;Ve(e.size);var t=this.size,n=this._head;return e.reverse().forEach((function(e){t++,n={value:e,next:n}})),this.__ownerID?(this.size=t,this._head=n,this.__hash=void 0,this.__altered=!0,this):Kn(t,n)},Vn.prototype.pop=function(){return this.slice(1)},Vn.prototype.unshift=function(){return this.push.apply(this,arguments)},Vn.prototype.unshiftAll=function(e){return this.pushAll(e)},Vn.prototype.shift=function(){return this.pop.apply(this,arguments)},Vn.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Yn()},Vn.prototype.slice=function(e,t){if(j(e,t,this.size))return this;var n=T(e,this.size);if(I(t,this.size)!==this.size)return Se.prototype.slice.call(this,e,t);for(var r=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=r,this._head=o,this.__hash=void 0,this.__altered=!0,this):Kn(r,o)},Vn.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Kn(this.size,this._head,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Vn.prototype.__iterate=function(e,t){if(t)return this.reverse().__iterate(e);for(var n=0,r=this._head;r&&!1!==e(r.value,n++,this);)r=r.next;return n},Vn.prototype.__iterator=function(e,t){if(t)return this.reverse().__iterator(e);var n=0,r=this._head;return new F((function(){if(r){var t=r.value;return r=r.next,z(e,n++,t)}return q()}))},Vn.isStack=Wn;var Hn,$n="@@__IMMUTABLE_STACK__@@",Jn=Vn.prototype;function Kn(e,t,n,r){var o=Object.create(Jn);return o.size=e,o._head=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function Yn(){return Hn||(Hn=Kn(0))}function Gn(e,t){var n=function(n){e.prototype[n]=t[n]};return Object.keys(t).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach(n),e}Jn[$n]=!0,Jn.withMutations=Ke.withMutations,Jn.asMutable=Ke.asMutable,Jn.asImmutable=Ke.asImmutable,Jn.wasAltered=Ke.wasAltered,n.Iterator=F,Gn(n,{toArray:function(){Ve(this.size);var e=new Array(this.size||0);return this.valueSeq().__iterate((function(t,n){e[n]=t})),e},toIndexedSeq:function(){return new Kt(this)},toJS:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJS?e.toJS():e})).__toJS()},toJSON:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJSON?e.toJSON():e})).__toJS()},toKeyedSeq:function(){return new Jt(this,!0)},toMap:function(){return We(this.toKeyedSeq())},toObject:function(){Ve(this.size);var e={};return this.__iterate((function(t,n){e[n]=t})),e},toOrderedMap:function(){return Ut(this.toKeyedSeq())},toOrderedSet:function(){return Ln(u(this)?this.valueSeq():this)},toSet:function(){return jn(u(this)?this.valueSeq():this)},toSetSeq:function(){return new Yt(this)},toSeq:function(){return s(this)?this.toIndexedSeq():u(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Vn(u(this)?this.valueSeq():this)},toList:function(){return St(u(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(e,t){return 0===this.size?e+t:e+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+t},concat:function(){return mn(this,un(this,e.call(arguments,0)))},includes:function(e){return this.some((function(t){return ge(t,e)}))},entries:function(){return this.__iterator(R)},every:function(e,t){Ve(this.size);var n=!0;return this.__iterate((function(r,o,a){if(!e.call(t,r,o,a))return n=!1,!1})),n},filter:function(e,t){return mn(this,en(this,e,t,!0))},find:function(e,t,n){var r=this.findEntry(e,t);return r?r[1]:n},forEach:function(e,t){return Ve(this.size),this.__iterate(t?e.bind(t):e)},join:function(e){Ve(this.size),e=void 0!==e?""+e:",";var t="",n=!0;return this.__iterate((function(r){n?n=!1:t+=e,t+=null!=r?r.toString():""})),t},keys:function(){return this.__iterator(P)},map:function(e,t){return mn(this,Zt(this,e,t))},reduce:function(e,t,n){var r,o;return Ve(this.size),arguments.length<2?o=!0:r=t,this.__iterate((function(t,a,i){o?(o=!1,r=t):r=e.call(n,r,t,a,i)})),r},reduceRight:function(e,t,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return mn(this,Xt(this,!0))},slice:function(e,t){return mn(this,rn(this,e,t,!0))},some:function(e,t){return!this.every(tr(e),t)},sort:function(e){return mn(this,fn(this,e))},values:function(){return this.__iterator(M)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(e,t){return A(e?this.toSeq().filter(e,t):this)},countBy:function(e,t){return tn(this,e,t)},equals:function(e){return ye(this,e)},entrySeq:function(){var e=this;if(e._cache)return new te(e._cache);var t=e.toSeq().map(er).toIndexedSeq();return t.fromEntrySeq=function(){return e.toSeq()},t},filterNot:function(e,t){return this.filter(tr(e),t)},findEntry:function(e,t,n){var r=n;return this.__iterate((function(n,o,a){if(e.call(t,n,o,a))return r=[o,n],!1})),r},findKey:function(e,t){var n=this.findEntry(e,t);return n&&n[0]},findLast:function(e,t,n){return this.toKeyedSeq().reverse().find(e,t,n)},findLastEntry:function(e,t,n){return this.toKeyedSeq().reverse().findEntry(e,t,n)},findLastKey:function(e,t){return this.toKeyedSeq().reverse().findKey(e,t)},first:function(){return this.find(C)},flatMap:function(e,t){return mn(this,cn(this,e,t))},flatten:function(e){return mn(this,sn(this,e,!0))},fromEntrySeq:function(){return new Gt(this)},get:function(e,t){return this.find((function(t,n){return ge(n,e)}),void 0,t)},getIn:function(e,t){for(var n,r=this,o=_n(e);!(n=o.next()).done;){var a=n.value;if((r=r&&r.get?r.get(a,b):b)===b)return t}return r},groupBy:function(e,t){return nn(this,e,t)},has:function(e){return this.get(e,b)!==b},hasIn:function(e){return this.getIn(e,b)!==b},isSubset:function(e){return e="function"==typeof e.includes?e:n(e),this.every((function(t){return e.includes(t)}))},isSuperset:function(e){return(e="function"==typeof e.isSubset?e:n(e)).isSubset(this)},keyOf:function(e){return this.findKey((function(t){return ge(t,e)}))},keySeq:function(){return this.toSeq().map(Xn).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(e){return this.toKeyedSeq().reverse().keyOf(e)},max:function(e){return pn(this,e)},maxBy:function(e,t){return pn(this,t,e)},min:function(e){return pn(this,e?nr(e):ar)},minBy:function(e,t){return pn(this,t?nr(t):ar,e)},rest:function(){return this.slice(1)},skip:function(e){return this.slice(Math.max(0,e))},skipLast:function(e){return mn(this,this.toSeq().reverse().skip(e).reverse())},skipWhile:function(e,t){return mn(this,an(this,e,t,!0))},skipUntil:function(e,t){return this.skipWhile(tr(e),t)},sortBy:function(e,t){return mn(this,fn(this,t,e))},take:function(e){return this.slice(0,Math.max(0,e))},takeLast:function(e){return mn(this,this.toSeq().reverse().take(e).reverse())},takeWhile:function(e,t){return mn(this,on(this,e,t))},takeUntil:function(e,t){return this.takeWhile(tr(e),t)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=ir(this))}});var Qn=n.prototype;Qn[f]=!0,Qn[B]=Qn.values,Qn.__toJS=Qn.toArray,Qn.__toStringMapper=rr,Qn.inspect=Qn.toSource=function(){return this.toString()},Qn.chain=Qn.flatMap,Qn.contains=Qn.includes,Gn(r,{flip:function(){return mn(this,Qt(this))},mapEntries:function(e,t){var n=this,r=0;return mn(this,this.toSeq().map((function(o,a){return e.call(t,[a,o],r++,n)})).fromEntrySeq())},mapKeys:function(e,t){var n=this;return mn(this,this.toSeq().flip().map((function(r,o){return e.call(t,r,o,n)})).flip())}});var Zn=r.prototype;function Xn(e,t){return t}function er(e,t){return[t,e]}function tr(e){return function(){return!e.apply(this,arguments)}}function nr(e){return function(){return-e.apply(this,arguments)}}function rr(e){return"string"==typeof e?JSON.stringify(e):String(e)}function or(){return k(arguments)}function ar(e,t){return et?-1:0}function ir(e){if(e.size===1/0)return 0;var t=l(e),n=u(e),r=t?1:0;return ur(e.__iterate(n?t?function(e,t){r=31*r+sr(Ce(e),Ce(t))|0}:function(e,t){r=r+sr(Ce(e),Ce(t))|0}:t?function(e){r=31*r+Ce(e)|0}:function(e){r=r+Ce(e)|0}),r)}function ur(e,t){return t=Ae(t,3432918353),t=Ae(t<<15|t>>>-15,461845907),t=Ae(t<<13|t>>>-13,5),t=Ae((t=(t+3864292196|0)^e)^t>>>16,2246822507),t=Oe((t=Ae(t^t>>>13,3266489909))^t>>>16)}function sr(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}return Zn[p]=!0,Zn[B]=Qn.entries,Zn.__toJS=Qn.toObject,Zn.__toStringMapper=function(e,t){return JSON.stringify(t)+": "+rr(e)},Gn(o,{toKeyedSeq:function(){return new Jt(this,!1)},filter:function(e,t){return mn(this,en(this,e,t,!1))},findIndex:function(e,t){var n=this.findEntry(e,t);return n?n[0]:-1},indexOf:function(e){var t=this.keyOf(e);return void 0===t?-1:t},lastIndexOf:function(e){var t=this.lastKeyOf(e);return void 0===t?-1:t},reverse:function(){return mn(this,Xt(this,!1))},slice:function(e,t){return mn(this,rn(this,e,t,!1))},splice:function(e,t){var n=arguments.length;if(t=Math.max(0|t,0),0===n||2===n&&!t)return this;e=T(e,e<0?this.count():this.size);var r=this.slice(0,e);return mn(this,1===n?r:r.concat(k(arguments,2),this.slice(e+t)))},findLastIndex:function(e,t){var n=this.findLastEntry(e,t);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(e){return mn(this,sn(this,e,!1))},get:function(e,t){return(e=O(this,e))<0||this.size===1/0||void 0!==this.size&&e>this.size?t:this.find((function(t,n){return n===e}),void 0,t)},has:function(e){return(e=O(this,e))>=0&&(void 0!==this.size?this.size===1/0||e1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function Ne(e){return t=e.replace(/\.[^./]*$/,""),Y()(J()(t));var t}function Pe(e,t,n,r,a){if(!t)return[];var u=[],s=t.get("nullable"),c=t.get("required"),f=t.get("maximum"),h=t.get("minimum"),d=t.get("type"),m=t.get("format"),g=t.get("maxLength"),b=t.get("minLength"),x=t.get("uniqueItems"),_=t.get("maxItems"),E=t.get("minItems"),S=t.get("pattern"),k=n||!0===c,A=null!=e;if(s&&null===e||!d||!(k||A&&"array"===d||!(!k&&!A)))return[];var O="string"===d&&e,C="array"===d&&l()(e)&&e.length,j="array"===d&&W.a.List.isList(e)&&e.count(),T=[O,C,j,"array"===d&&"string"==typeof e&&e,"file"===d&&e instanceof ue.a.File,"boolean"===d&&(e||!1===e),"number"===d&&(e||0===e),"integer"===d&&(e||0===e),"object"===d&&"object"===i()(e)&&null!==e,"object"===d&&"string"==typeof e&&e],I=N()(T).call(T,(function(e){return!!e}));if(k&&!I&&!r)return u.push("Required field is not provided"),u;if("object"===d&&(null===a||"application/json"===a)){var P,M=e;if("string"==typeof e)try{M=JSON.parse(e)}catch(e){return u.push("Parameter string value must be valid JSON"),u}if(t&&t.has("required")&&Ee(c.isList)&&c.isList()&&y()(c).call(c,(function(e){void 0===M[e]&&u.push({propKey:e,error:"Required property not found"})})),t&&t.has("properties"))y()(P=t.get("properties")).call(P,(function(e,t){var n=Pe(M[t],e,!1,r,a);u.push.apply(u,o()(p()(n).call(n,(function(e){return{propKey:t,error:e}}))))}))}if(S){var R=function(e,t){if(!new RegExp(t).test(e))return"Value must follow pattern "+t}(e,S);R&&u.push(R)}if(E&&"array"===d){var D=function(e,t){var n;if(!e&&t>=1||e&&e.lengtht)return v()(n="Array must not contain more then ".concat(t," item")).call(n,1===t?"":"s")}(e,_);L&&u.push({needRemove:!0,error:L})}if(x&&"array"===d){var B=function(e,t){if(e&&("true"===t||!0===t)){var n=Object(V.fromJS)(e),r=n.toSet();if(e.length>r.size){var o=Object(V.Set)();if(y()(n).call(n,(function(e,t){w()(n).call(n,(function(t){return Ee(t.equals)?t.equals(e):t===e})).size>1&&(o=o.add(t))})),0!==o.size)return p()(o).call(o,(function(e){return{index:e,error:"No duplicates allowed."}})).toArray()}}}(e,x);B&&u.push.apply(u,o()(B))}if(g||0===g){var F=function(e,t){var n;if(e.length>t)return v()(n="Value must be no longer than ".concat(t," character")).call(n,1!==t?"s":"")}(e,g);F&&u.push(F)}if(b){var z=function(e,t){var n;if(e.lengtht)return"Value must be less than ".concat(t)}(e,f);q&&u.push(q)}if(h||0===h){var U=function(e,t){if(e2&&void 0!==arguments[2]?arguments[2]:{},r=n.isOAS3,o=void 0!==r&&r,a=n.bypassRequiredCheck,i=void 0!==a&&a,u=e.get("required"),s=Object(le.a)(e,{isOAS3:o}),c=s.schema,l=s.parameterContentMediaType;return Pe(t,c,u,i,l)},Re=function(e,t,n){if(e&&(!e.xml||!e.xml.name)){if(e.xml=e.xml||{},!e.$$ref)return e.type||e.items||e.properties||e.additionalProperties?'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e':null;var r=e.$$ref.match(/\S*\/(\S+)$/);e.xml.name=r[1]}return Object(ie.memoizedCreateXMLExample)(e,t,n)},De=[{when:/json/,shouldStringifyTypes:["string"]}],Le=["object"],Be=function(e,t,n,r){var a=Object(ie.memoizedSampleFromSchema)(e,t,r),u=i()(a),s=S()(De).call(De,(function(e,t){var r;return t.when.test(n)?v()(r=[]).call(r,o()(e),o()(t.shouldStringifyTypes)):e}),Le);return te()(s,(function(e){return e===u}))?M()(a,null,2):a},Fe=function(e,t,n,r){var o,a=Be(e,t,n,r);try{"\n"===(o=me.a.dump(me.a.load(a),{lineWidth:-1}))[o.length-1]&&(o=T()(o).call(o,0,o.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return o.replace(/\t/g," ")},ze=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return e&&Ee(e.toJS)&&(e=e.toJS()),r&&Ee(r.toJS)&&(r=r.toJS()),/xml/.test(t)?Re(e,n,r):/(yaml|yml)/.test(t)?Fe(e,n,t,r):Be(e,n,t,r)},qe=function(){var e={},t=ue.a.location.search;if(!t)return{};if(""!=t){var n=t.substr(1).split("&");for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(r=n[r].split("="),e[decodeURIComponent(r[0])]=r[1]&&decodeURIComponent(r[1])||"")}return e},Ue=function(t){return(t instanceof e?t:e.from(t.toString(),"utf-8")).toString("base64")},Ve={operationsSorter:{alpha:function(e,t){return e.get("path").localeCompare(t.get("path"))},method:function(e,t){return e.get("method").localeCompare(t.get("method"))}},tagsSorter:{alpha:function(e,t){return e.localeCompare(t)}}},We=function(e){var t=[];for(var n in e){var r=e[n];void 0!==r&&""!==r&&t.push([n,"=",encodeURIComponent(r).replace(/%20/g,"+")].join(""))}return t.join("&")},He=function(e,t,n){return!!X()(n,(function(n){return re()(e[n],t[n])}))};function $e(e){return"string"!=typeof e||""===e?"":Object(H.sanitizeUrl)(e)}function Je(e){return!(!e||D()(e).call(e,"localhost")>=0||D()(e).call(e,"127.0.0.1")>=0||"none"===e)}function Ke(e){if(!W.a.OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;var t=B()(e).call(e,(function(e,t){return z()(t).call(t,"2")&&_()(e.get("content")||{}).length>0})),n=e.get("default")||W.a.OrderedMap(),r=(n.get("content")||W.a.OrderedMap()).keySeq().toJS().length?n:null;return t||r}var Ye=function(e){return"string"==typeof e||e instanceof String?U()(e).call(e).replace(/\s/g,"%20"):""},Ge=function(e){return ce()(Ye(e).replace(/%20/g,"_"))},Qe=function(e){return w()(e).call(e,(function(e,t){return/^x-/.test(t)}))},Ze=function(e){return w()(e).call(e,(function(e,t){return/^pattern|maxLength|minLength|maximum|minimum/.test(t)}))};function Xe(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return!0};if("object"!==i()(e)||l()(e)||null===e||!t)return e;var o=A()({},e);return y()(n=_()(o)).call(n,(function(e){e===t&&r(o[e],e)?delete o[e]:o[e]=Xe(o[e],t,r)})),o}function et(e){if("string"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),"object"===i()(e)&&null!==e)try{return M()(e,null,2)}catch(t){return String(e)}return null==e?"":e.toString()}function tt(e){return"number"==typeof e?e.toString():e}function nt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.returnAll,r=void 0!==n&&n,o=t.allowHashes,a=void 0===o||o;if(!W.a.Map.isMap(e))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");var i,u,s,c=e.get("name"),l=e.get("in"),f=[];e&&e.hashCode&&l&&c&&a&&f.push(v()(i=v()(u="".concat(l,".")).call(u,c,".hash-")).call(i,e.hashCode()));l&&c&&f.push(v()(s="".concat(l,".")).call(s,c));return f.push(c),r?f:f[0]||""}function rt(e,t){var n,r=nt(e,{returnAll:!0});return w()(n=p()(r).call(r,(function(e){return t[e]}))).call(n,(function(e){return void 0!==e}))[0]}function ot(){return it(pe()(32).toString("base64"))}function at(e){return it(de()("sha256").update(e).digest("base64"))}function it(e){return e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}var ut=function(e){return!e||!(!ge(e)||!e.isEmpty())}}).call(this,n(132).Buffer)},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){var r=n(226);function o(e,t){for(var n=0;n1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:r,n=null,a=null;return function(){return o(t,n,arguments)||(a=e.apply(null,arguments)),n=arguments,a}}))},function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||function(){return this}()||Function("return this")()}).call(this,n(57))},function(e,t,n){e.exports=n(385)},function(e,t,n){var r=n(166),o=n(515);function a(t){return"function"==typeof r&&"symbol"==typeof o?(e.exports=a=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=a=function(e){return e&&"function"==typeof r&&e.constructor===r&&e!==r.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),a(t)}e.exports=a,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){e.exports=n(351)},function(e,t,n){e.exports=n(349)},function(e,t,n){"use strict";var r=n(17),o=n(93),a=n(27),i=n(41),u=n(111).f,s=n(331),c=n(34),l=n(84),f=n(85),p=n(44),h=function(e){var t=function(n,r,a){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,a)}return o(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var n,o,d,m,v,g,y,b,w=e.target,x=e.global,_=e.stat,E=e.proto,S=x?r:_?r[w]:(r[w]||{}).prototype,k=x?c:c[w]||f(c,w,{})[w],A=k.prototype;for(d in t)n=!s(x?d:w+(_?".":"#")+d,e.forced)&&S&&p(S,d),v=k[d],n&&(g=e.noTargetGet?(b=u(S,d))&&b.value:S[d]),m=n&&g?g:t[d],n&&typeof v==typeof m||(y=e.bind&&n?l(m,r):e.wrap&&n?h(m):E&&i(m)?a(m):m,(e.sham||m&&m.sham||v&&v.sham)&&f(y,"sham",!0),f(k,d,y),E&&(p(c,o=w+"Prototype")||f(c,o,{}),f(c[o],d,m),e.real&&A&&!A[d]&&f(A,d,m)))}},function(e,t,n){e.exports=n(381)},function(e,t,n){e.exports=n(352)},function(e,t,n){var r=n(420),o=n(421),a=n(800),i=n(802),u=n(807),s=n(809),c=n(814),l=n(226),f=n(3);function p(e,t){var n=r(e);if(o){var u=o(e);t&&(u=a(u).call(u,(function(t){return i(e,t).enumerable}))),n.push.apply(n,u)}return n}e.exports=function(e){for(var t=1;t>",i=function(){invariant(!1,"ImmutablePropTypes type checking code is stripped in production.")};i.isRequired=i;var u=function(){return i};function s(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":e instanceof o.Iterable?"Immutable."+e.toSource().split(" ")[0]:t}function c(e){function t(t,n,r,o,i,u){for(var s=arguments.length,c=Array(s>6?s-6:0),l=6;l4)}function l(e){var t=e.get("swagger");return"string"==typeof t&&i()(t).call(t,"2.0")}function f(e){return function(t,n){return function(r){return n&&n.specSelectors&&n.specSelectors.specJson?c(n.specSelectors.specJson())?s.a.createElement(e,o()({},r,n,{Ori:t})):s.a.createElement(t,r):(console.warn("OAS3 wrapper: couldn't get spec"),null)}}}},function(e,t,n){e.exports=n(535)},function(e,t,n){var r=n(17),o=n(212),a=n(44),i=n(171),u=n(210),s=n(329),c=o("wks"),l=r.Symbol,f=l&&l.for,p=s?l:l&&l.withoutSetter||i;e.exports=function(e){if(!a(c,e)||!u&&"string"!=typeof c[e]){var t="Symbol."+e;u&&a(l,e)?c[e]=l[e]:c[e]=s&&f?f(t):p(t)}return c[e]}},function(e,t,n){var r=n(242);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},function(e,t,n){e.exports=n(840)},function(e,t){e.exports=function(e){return"function"==typeof e}},function(e,t,n){var r=n(34);e.exports=function(e){return r[e+"Prototype"]}},function(e,t,n){var r=n(41);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},function(e,t,n){var r=n(27),o=n(62),a=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(o(e),t)}},function(e,t,n){var r=n(34),o=n(44),a=n(223),i=n(63).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||i(t,e,{value:a.f(e)})}},function(e,t,n){"use strict";n.r(t),n.d(t,"UPDATE_SPEC",(function(){return ee})),n.d(t,"UPDATE_URL",(function(){return te})),n.d(t,"UPDATE_JSON",(function(){return ne})),n.d(t,"UPDATE_PARAM",(function(){return re})),n.d(t,"UPDATE_EMPTY_PARAM_INCLUSION",(function(){return oe})),n.d(t,"VALIDATE_PARAMS",(function(){return ae})),n.d(t,"SET_RESPONSE",(function(){return ie})),n.d(t,"SET_REQUEST",(function(){return ue})),n.d(t,"SET_MUTATED_REQUEST",(function(){return se})),n.d(t,"LOG_REQUEST",(function(){return ce})),n.d(t,"CLEAR_RESPONSE",(function(){return le})),n.d(t,"CLEAR_REQUEST",(function(){return fe})),n.d(t,"CLEAR_VALIDATE_PARAMS",(function(){return pe})),n.d(t,"UPDATE_OPERATION_META_VALUE",(function(){return he})),n.d(t,"UPDATE_RESOLVED",(function(){return de})),n.d(t,"UPDATE_RESOLVED_SUBTREE",(function(){return me})),n.d(t,"SET_SCHEME",(function(){return ve})),n.d(t,"updateSpec",(function(){return ge})),n.d(t,"updateResolved",(function(){return ye})),n.d(t,"updateUrl",(function(){return be})),n.d(t,"updateJsonSpec",(function(){return we})),n.d(t,"parseToJson",(function(){return xe})),n.d(t,"resolveSpec",(function(){return Ee})),n.d(t,"requestResolvedSubtree",(function(){return Ae})),n.d(t,"changeParam",(function(){return Oe})),n.d(t,"changeParamByIdentity",(function(){return Ce})),n.d(t,"updateResolvedSubtree",(function(){return je})),n.d(t,"invalidateResolvedSubtreeCache",(function(){return Te})),n.d(t,"validateParams",(function(){return Ie})),n.d(t,"updateEmptyParamInclusion",(function(){return Ne})),n.d(t,"clearValidateParams",(function(){return Pe})),n.d(t,"changeConsumesValue",(function(){return Me})),n.d(t,"changeProducesValue",(function(){return Re})),n.d(t,"setResponse",(function(){return De})),n.d(t,"setRequest",(function(){return Le})),n.d(t,"setMutatedRequest",(function(){return Be})),n.d(t,"logRequest",(function(){return Fe})),n.d(t,"executeRequest",(function(){return ze})),n.d(t,"execute",(function(){return qe})),n.d(t,"clearResponse",(function(){return Ue})),n.d(t,"clearRequest",(function(){return Ve})),n.d(t,"setScheme",(function(){return We}));var r=n(25),o=n.n(r),a=n(54),i=n.n(a),u=n(72),s=n.n(u),c=n(19),l=n.n(c),f=n(40),p=n.n(f),h=n(24),d=n.n(h),m=n(4),v=n.n(m),g=n(319),y=n.n(g),b=n(30),w=n.n(b),x=n(197),_=n.n(x),E=n(66),S=n.n(E),k=n(12),A=n.n(k),O=n(198),C=n.n(O),j=n(18),T=n.n(j),I=n(23),N=n.n(I),P=n(2),M=n.n(P),R=n(15),D=n.n(R),L=n(21),B=n.n(L),F=n(320),z=n.n(F),q=n(70),U=n(1),V=n(89),W=n.n(V),H=n(141),$=n(457),J=n.n($),K=n(458),Y=n.n(K),G=n(321),Q=n.n(G),Z=n(5),X=["path","method"],ee="spec_update_spec",te="spec_update_url",ne="spec_update_json",re="spec_update_param",oe="spec_update_empty_param_inclusion",ae="spec_validate_param",ie="spec_set_response",ue="spec_set_request",se="spec_set_mutated_request",ce="spec_log_request",le="spec_clear_response",fe="spec_clear_request",pe="spec_clear_validate_param",he="spec_update_operation_meta_value",de="spec_update_resolved",me="spec_update_resolved_subtree",ve="set_scheme";function ge(e){var t,n=(t=e,J()(t)?t:"").replace(/\t/g," ");if("string"==typeof e)return{type:ee,payload:n}}function ye(e){return{type:de,payload:e}}function be(e){return{type:te,payload:e}}function we(e){return{type:ne,payload:e}}var xe=function(e){return function(t){var n=t.specActions,r=t.specSelectors,o=t.errActions,a=r.specStr,i=null;try{e=e||a(),o.clear({source:"parser"}),i=q.a.load(e)}catch(e){return console.error(e),o.newSpecErr({source:"parser",level:"error",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return i&&"object"===l()(i)?n.updateJsonSpec(i):{}}},_e=!1,Ee=function(e,t){return function(n){var r=n.specActions,o=n.specSelectors,a=n.errActions,i=n.fn,u=i.fetch,s=i.resolve,c=i.AST,l=void 0===c?{}:c,f=n.getConfigs;_e||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),_e=!0);var p=f(),h=p.modelPropertyMacro,m=p.parameterMacro,g=p.requestInterceptor,b=p.responseInterceptor;void 0===e&&(e=o.specJson()),void 0===t&&(t=o.url());var w=l.getLineNumberForPath?l.getLineNumberForPath:function(){},x=o.specStr();return s({fetch:u,spec:e,baseDoc:t,modelPropertyMacro:h,parameterMacro:m,requestInterceptor:g,responseInterceptor:b}).then((function(e){var t=e.spec,n=e.errors;if(a.clear({type:"thrown"}),d()(n)&&n.length>0){var o=v()(n).call(n,(function(e){return console.error(e),e.line=e.fullPath?w(x,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",y()(e,"message",{enumerable:!0,value:e.message}),e}));a.newThrownErrBatch(o)}return r.updateResolved(t)}))}},Se=[],ke=Y()(s()(p.a.mark((function e(){var t,n,r,o,a,i,u,c,l,f,h,m,g,b,x,E,k,O;return p.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=Se.system){e.next=4;break}return console.error("debResolveSubtrees: don't have a system to operate on, aborting."),e.abrupt("return");case 4:if(n=t.errActions,r=t.errSelectors,o=t.fn,a=o.resolveSubtree,i=o.fetch,u=o.AST,c=void 0===u?{}:u,l=t.specSelectors,f=t.specActions,a){e.next=8;break}return console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing."),e.abrupt("return");case 8:return h=c.getLineNumberForPath?c.getLineNumberForPath:function(){},m=l.specStr(),g=t.getConfigs(),b=g.modelPropertyMacro,x=g.parameterMacro,E=g.requestInterceptor,k=g.responseInterceptor,e.prev=11,e.next=14,w()(Se).call(Se,function(){var e=s()(p.a.mark((function e(t,o){var u,c,f,g,w,O,j,T,I;return p.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t;case 2:return u=e.sent,c=u.resultMap,f=u.specWithCurrentSubtrees,e.next=7,a(f,o,{baseDoc:l.url(),modelPropertyMacro:b,parameterMacro:x,requestInterceptor:E,responseInterceptor:k});case 7:if(g=e.sent,w=g.errors,O=g.spec,r.allErrors().size&&n.clearBy((function(e){var t;return"thrown"!==e.get("type")||"resolver"!==e.get("source")||!_()(t=e.get("fullPath")).call(t,(function(e,t){return e===o[t]||void 0===o[t]}))})),d()(w)&&w.length>0&&(j=v()(w).call(w,(function(e){return e.line=e.fullPath?h(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",y()(e,"message",{enumerable:!0,value:e.message}),e})),n.newThrownErrBatch(j)),!O||!l.isOAS3()||"components"!==o[0]||"securitySchemes"!==o[1]){e.next=15;break}return e.next=15,S.a.all(v()(T=A()(I=C()(O)).call(I,(function(e){return"openIdConnect"===e.type}))).call(T,function(){var e=s()(p.a.mark((function e(t){var n,r;return p.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n={url:t.openIdConnectUrl,requestInterceptor:E,responseInterceptor:k},e.prev=1,e.next=4,i(n);case 4:(r=e.sent)instanceof Error||r.status>=400?console.error(r.statusText+" "+n.url):t.openIdConnectData=JSON.parse(r.text),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(1),console.error(e.t0);case 11:case"end":return e.stop()}}),e,null,[[1,8]])})));return function(t){return e.apply(this,arguments)}}()));case 15:return Q()(c,o,O),Q()(f,o,O),e.abrupt("return",{resultMap:c,specWithCurrentSubtrees:f});case 18:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),S.a.resolve({resultMap:(l.specResolvedSubtree([])||Object(U.Map)()).toJS(),specWithCurrentSubtrees:l.specJson().toJS()}));case 14:O=e.sent,delete Se.system,Se=[],e.next=22;break;case 19:e.prev=19,e.t0=e.catch(11),console.error(e.t0);case 22:f.updateResolvedSubtree([],O.resultMap);case 23:case"end":return e.stop()}}),e,null,[[11,19]])}))),35),Ae=function(e){return function(t){var n;T()(n=v()(Se).call(Se,(function(e){return e.join("@@")}))).call(n,e.join("@@"))>-1||(Se.push(e),Se.system=t,ke())}};function Oe(e,t,n,r,o){return{type:re,payload:{path:e,value:r,paramName:t,paramIn:n,isXml:o}}}function Ce(e,t,n,r){return{type:re,payload:{path:e,param:t,value:n,isXml:r}}}var je=function(e,t){return{type:me,payload:{path:e,value:t}}},Te=function(){return{type:me,payload:{path:[],value:Object(U.Map)()}}},Ie=function(e,t){return{type:ae,payload:{pathMethod:e,isOAS3:t}}},Ne=function(e,t,n,r){return{type:oe,payload:{pathMethod:e,paramName:t,paramIn:n,includeEmptyValue:r}}};function Pe(e){return{type:pe,payload:{pathMethod:e}}}function Me(e,t){return{type:he,payload:{path:e,value:t,key:"consumes_value"}}}function Re(e,t){return{type:he,payload:{path:e,value:t,key:"produces_value"}}}var De=function(e,t,n){return{payload:{path:e,method:t,res:n},type:ie}},Le=function(e,t,n){return{payload:{path:e,method:t,req:n},type:ue}},Be=function(e,t,n){return{payload:{path:e,method:t,req:n},type:se}},Fe=function(e){return{payload:e,type:ce}},ze=function(e){return function(t){var n,r,o=t.fn,a=t.specActions,i=t.specSelectors,u=t.getConfigs,c=t.oas3Selectors,l=e.pathName,f=e.method,h=e.operation,m=u(),g=m.requestInterceptor,y=m.responseInterceptor,b=h.toJS();h&&h.get("parameters")&&N()(n=A()(r=h.get("parameters")).call(r,(function(e){return e&&!0===e.get("allowEmptyValue")}))).call(n,(function(t){if(i.parameterInclusionSettingFor([l,f],t.get("name"),t.get("in"))){e.parameters=e.parameters||{};var n=Object(Z.B)(t,e.parameters);(!n||n&&0===n.size)&&(e.parameters[t.get("name")]="")}}));if(e.contextUrl=W()(i.url()).toString(),b&&b.operationId?e.operationId=b.operationId:b&&l&&f&&(e.operationId=o.opId(b,l,f)),i.isOAS3()){var w,x=M()(w="".concat(l,":")).call(w,f);e.server=c.selectedServer(x)||c.selectedServer();var _=c.serverVariables({server:e.server,namespace:x}).toJS(),E=c.serverVariables({server:e.server}).toJS();e.serverVariables=D()(_).length?_:E,e.requestContentType=c.requestContentType(l,f),e.responseContentType=c.responseContentType(l,f)||"*/*";var S,k=c.requestBodyValue(l,f),O=c.requestBodyInclusionSetting(l,f);if(k&&k.toJS)e.requestBody=A()(S=v()(k).call(k,(function(e){return U.Map.isMap(e)?e.get("value"):e}))).call(S,(function(e,t){return(d()(e)?0!==e.length:!Object(Z.q)(e))||O.get(t)})).toJS();else e.requestBody=k}var C=B()({},e);C=o.buildRequest(C),a.setRequest(e.pathName,e.method,C);var j=function(){var t=s()(p.a.mark((function t(n){var r,o;return p.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,g.apply(undefined,[n]);case 2:return r=t.sent,o=B()({},r),a.setMutatedRequest(e.pathName,e.method,o),t.abrupt("return",r);case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();e.requestInterceptor=j,e.responseInterceptor=y;var T=z()();return o.execute(e).then((function(t){t.duration=z()()-T,a.setResponse(e.pathName,e.method,t)})).catch((function(t){"Failed to fetch"===t.message&&(t.name="",t.message='**Failed to fetch.** \n**Possible Reasons:** \n - CORS \n - Network Failure \n - URL scheme must be "http" or "https" for CORS request.'),a.setResponse(e.pathName,e.method,{error:!0,err:Object(H.serializeError)(t)})}))}},qe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.path,n=e.method,r=i()(e,X);return function(e){var a=e.fn.fetch,i=e.specSelectors,u=e.specActions,s=i.specJsonWithResolvedSubtrees().toJS(),c=i.operationScheme(t,n),l=i.contentTypeValues([t,n]).toJS(),f=l.requestContentType,p=l.responseContentType,h=/xml/i.test(f),d=i.parameterValues([t,n],h).toJS();return u.executeRequest(o()(o()({},r),{},{fetch:a,spec:s,pathName:t,method:n,parameters:d,requestContentType:f,scheme:c,responseContentType:p}))}};function Ue(e,t){return{type:le,payload:{path:e,method:t}}}function Ve(e,t){return{type:fe,payload:{path:e,method:t}}}function We(e,t,n){return{type:ve,payload:{scheme:e,path:t,method:n}}}},function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t=e.length?{done:!0}:{done:!1,value:e[u++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var c,l=!0,f=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){f=!0,c=e},f:function(){try{l||null==n.return||n.return()}finally{if(f)throw c}}}},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){var n=Function.prototype.call;e.exports=n.bind?n.bind(n):function(){return n.apply(n,arguments)}},function(e,t,n){var r=n(17),o=n(43),a=r.String,i=r.TypeError;e.exports=function(e){if(o(e))return e;throw i(a(e)+" is not an object")}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var r=n(421),o=n(423),a=n(820);e.exports=function(e,t){if(null==e)return{};var n,i,u=a(e,t);if(r){var s=r(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(u[n]=e[n])}return u},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){"use strict";n.r(t),n.d(t,"UPDATE_SELECTED_SERVER",(function(){return r})),n.d(t,"UPDATE_REQUEST_BODY_VALUE",(function(){return o})),n.d(t,"UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG",(function(){return a})),n.d(t,"UPDATE_REQUEST_BODY_INCLUSION",(function(){return i})),n.d(t,"UPDATE_ACTIVE_EXAMPLES_MEMBER",(function(){return u})),n.d(t,"UPDATE_REQUEST_CONTENT_TYPE",(function(){return s})),n.d(t,"UPDATE_RESPONSE_CONTENT_TYPE",(function(){return c})),n.d(t,"UPDATE_SERVER_VARIABLE_VALUE",(function(){return l})),n.d(t,"SET_REQUEST_BODY_VALIDATE_ERROR",(function(){return f})),n.d(t,"CLEAR_REQUEST_BODY_VALIDATE_ERROR",(function(){return p})),n.d(t,"CLEAR_REQUEST_BODY_VALUE",(function(){return h})),n.d(t,"setSelectedServer",(function(){return d})),n.d(t,"setRequestBodyValue",(function(){return m})),n.d(t,"setRetainRequestBodyValueFlag",(function(){return v})),n.d(t,"setRequestBodyInclusion",(function(){return g})),n.d(t,"setActiveExamplesMember",(function(){return y})),n.d(t,"setRequestContentType",(function(){return b})),n.d(t,"setResponseContentType",(function(){return w})),n.d(t,"setServerVariableValue",(function(){return x})),n.d(t,"setRequestBodyValidateError",(function(){return _})),n.d(t,"clearRequestBodyValidateError",(function(){return E})),n.d(t,"initRequestBodyValidateError",(function(){return S})),n.d(t,"clearRequestBodyValue",(function(){return k}));var r="oas3_set_servers",o="oas3_set_request_body_value",a="oas3_set_request_body_retain_flag",i="oas3_set_request_body_inclusion",u="oas3_set_active_examples_member",s="oas3_set_request_content_type",c="oas3_set_response_content_type",l="oas3_set_server_variable_value",f="oas3_set_request_body_validate_error",p="oas3_clear_request_body_validate_error",h="oas3_clear_request_body_value";function d(e,t){return{type:r,payload:{selectedServerUrl:e,namespace:t}}}function m(e){var t=e.value,n=e.pathMethod;return{type:o,payload:{value:t,pathMethod:n}}}var v=function(e){var t=e.value,n=e.pathMethod;return{type:a,payload:{value:t,pathMethod:n}}};function g(e){var t=e.value,n=e.pathMethod,r=e.name;return{type:i,payload:{value:t,pathMethod:n,name:r}}}function y(e){var t=e.name,n=e.pathMethod,r=e.contextType,o=e.contextName;return{type:u,payload:{name:t,pathMethod:n,contextType:r,contextName:o}}}function b(e){var t=e.value,n=e.pathMethod;return{type:s,payload:{value:t,pathMethod:n}}}function w(e){var t=e.value,n=e.path,r=e.method;return{type:c,payload:{value:t,path:n,method:r}}}function x(e){var t=e.server,n=e.namespace,r=e.key,o=e.val;return{type:l,payload:{server:t,namespace:n,key:r,val:o}}}var _=function(e){var t=e.path,n=e.method,r=e.validationErrors;return{type:f,payload:{path:t,method:n,validationErrors:r}}},E=function(e){var t=e.path,n=e.method;return{type:p,payload:{path:t,method:n}}},S=function(e){var t=e.pathMethod;return{type:p,payload:{path:t[0],method:t[1]}}},k=function(e){var t=e.pathMethod;return{type:h,payload:{pathMethod:t}}}},function(e,t,n){e.exports=n(647)},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var r=n(34),o=n(17),a=n(41),i=function(e){return a(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},function(e,t,n){"use strict";n.d(t,"b",(function(){return m})),n.d(t,"e",(function(){return v})),n.d(t,"c",(function(){return y})),n.d(t,"a",(function(){return b})),n.d(t,"d",(function(){return w}));var r=n(49),o=n.n(r),a=n(19),i=n.n(a),u=n(108),s=n.n(u),c=n(2),l=n.n(c),f=n(53),p=n.n(f),h=function(e){return String.prototype.toLowerCase.call(e)},d=function(e){return e.replace(/[^\w]/gi,"_")};function m(e){var t=e.openapi;return!!t&&s()(t).call(t,"3")}function v(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=r.v2OperationIdCompatibilityMode;if(!e||"object"!==i()(e))return null;var a=(e.operationId||"").replace(/\s/g,"");return a.length?d(e.operationId):g(t,n,{v2OperationIdCompatibilityMode:o})}function g(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r.v2OperationIdCompatibilityMode;if(o){var a,i,u=l()(a="".concat(t.toLowerCase(),"_")).call(a,e).replace(/[\s!@#$%^&*()_+=[{\]};:<>|./?,\\'""-]/g,"_");return(u=u||l()(i="".concat(e.substring(1),"_")).call(i,t)).replace(/((_){2,})/g,"_").replace(/^(_)*/g,"").replace(/([_])*$/g,"")}return l()(n="".concat(h(t))).call(n,d(e))}function y(e,t){var n;return l()(n="".concat(h(t),"-")).call(n,e)}function b(e,t){return e&&e.paths?function(e,t){return function(e,t,n){if(!e||"object"!==i()(e)||!e.paths||"object"!==i()(e.paths))return null;var r=e.paths;for(var o in r)for(var a in r[o])if("PARAMETERS"!==a.toUpperCase()){var u=r[o][a];if(u&&"object"===i()(u)){var s={spec:e,pathName:o,method:a.toUpperCase(),operation:u},c=t(s);if(n&&c)return s}}return}(e,t,!0)||null}(e,(function(e){var n=e.pathName,r=e.method,o=e.operation;if(!o||"object"!==i()(o))return!1;var a=o.operationId;return[v(o,n,r),y(n,r),a].some((function(e){return e&&e===t}))})):null}function w(e){var t=e.spec,n=t.paths,r={};if(!n||t.$$normalized)return e;for(var a in n){var i=n[a];if(p()(i)){var u=i.parameters,s=function(e){var n=i[e];if(!p()(n))return"continue";var s=v(n,a,e);if(s){r[s]?r[s].push(n):r[s]=[n];var c=r[s];if(c.length>1)c.forEach((function(e,t){var n;e.__originalOperationId=e.__originalOperationId||e.operationId,e.operationId=l()(n="".concat(s)).call(n,t+1)}));else if(void 0!==n.operationId){var f=c[0];f.__originalOperationId=f.__originalOperationId||n.operationId,f.operationId=s}}if("parameters"!==e){var h=[],d={};for(var m in t)"produces"!==m&&"consumes"!==m&&"security"!==m||(d[m]=t[m],h.push(d));if(u&&(d.parameters=u,h.push(d)),h.length){var g,y=o()(h);try{for(y.s();!(g=y.n()).done;){var b=g.value;for(var w in b)if(n[w]){if("parameters"===w){var x,_=o()(b[w]);try{var E=function(){var e=x.value;n[w].some((function(t){return t.name&&t.name===e.name||t.$ref&&t.$ref===e.$ref||t.$$ref&&t.$$ref===e.$$ref||t===e}))||n[w].push(e)};for(_.s();!(x=_.n()).done;)E()}catch(e){_.e(e)}finally{_.f()}}}else n[w]=b[w]}}catch(e){y.e(e)}finally{y.f()}}}};for(var c in i)s(c)}}return t.$$normalized=!0,e}},function(e,t,n){"use strict";n.r(t),n.d(t,"NEW_THROWN_ERR",(function(){return o})),n.d(t,"NEW_THROWN_ERR_BATCH",(function(){return a})),n.d(t,"NEW_SPEC_ERR",(function(){return i})),n.d(t,"NEW_SPEC_ERR_BATCH",(function(){return u})),n.d(t,"NEW_AUTH_ERR",(function(){return s})),n.d(t,"CLEAR",(function(){return c})),n.d(t,"CLEAR_BY",(function(){return l})),n.d(t,"newThrownErr",(function(){return f})),n.d(t,"newThrownErrBatch",(function(){return p})),n.d(t,"newSpecErr",(function(){return h})),n.d(t,"newSpecErrBatch",(function(){return d})),n.d(t,"newAuthErr",(function(){return m})),n.d(t,"clear",(function(){return v})),n.d(t,"clearBy",(function(){return g}));var r=n(141),o="err_new_thrown_err",a="err_new_thrown_err_batch",i="err_new_spec_err",u="err_new_spec_err_batch",s="err_new_auth_err",c="err_clear",l="err_clear_by";function f(e){return{type:o,payload:Object(r.serializeError)(e)}}function p(e){return{type:a,payload:e}}function h(e){return{type:i,payload:e}}function d(e){return{type:u,payload:e}}function m(e){return{type:s,payload:e}}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{type:c,payload:e}}function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!0};return{type:l,payload:e}}},function(e,t,n){var r=n(168),o=n(113);e.exports=function(e){return r(o(e))}},function(e,t,n){var r=n(17),o=n(113),a=r.Object;e.exports=function(e){return a(o(e))}},function(e,t,n){var r=n(17),o=n(48),a=n(330),i=n(51),u=n(169),s=r.TypeError,c=Object.defineProperty;t.f=o?c:function(e,t,n){if(i(e),t=u(t),i(n),a)try{return c(e,t,n)}catch(e){}if("get"in n||"set"in n)throw s("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t){"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},function(e,t,n){var r=n(132),o=r.Buffer;function a(e,t){for(var n in e)t[n]=e[n]}function i(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(a(r,t),t.Buffer=i),a(o,i),i.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},i.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},i.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},i.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){e.exports=n(424)},function(e,t,n){var r=n(17),o=n(75),a=r.String;e.exports=function(e){if("Symbol"===o(e))throw TypeError("Cannot convert a Symbol value to a string");return a(e)}},function(e,t,n){n(77);var r=n(507),o=n(17),a=n(75),i=n(85),u=n(130),s=n(38)("toStringTag");for(var c in r){var l=o[c],f=l&&l.prototype;f&&a(f)!==s&&i(f,s,c),u[c]=u.Array}},function(e,t,n){var r=n(355),o="object"==typeof self&&self&&self.Object===Object&&self,a=r||o||Function("return this")();e.exports=a},function(e,t,n){"use strict";function r(e){return null==e}var o={isNothing:r,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:r(e)?[]:[e]},repeat:function(e,t){var n,r="";for(n=0;nu&&(t=r-u+(a=" ... ").length),n-r>u&&(n=r+u-(i=" ...").length),{str:a+e.slice(t,n).replace(/\t/g,"→")+i,pos:r-t+a.length}}function c(e,t){return o.repeat(" ",t-e.length)+e}var l=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var n,r=/\r?\n|\r|\0/g,a=[0],i=[],u=-1;n=r.exec(e.buffer);)i.push(n.index),a.push(n.index+n[0].length),e.position<=n.index&&u<0&&(u=a.length-2);u<0&&(u=a.length-1);var l,f,p="",h=Math.min(e.line+t.linesAfter,i.length).toString().length,d=t.maxLength-(t.indent+h+3);for(l=1;l<=t.linesBefore&&!(u-l<0);l++)f=s(e.buffer,a[u-l],i[u-l],e.position-(a[u]-a[u-l]),d),p=o.repeat(" ",t.indent)+c((e.line-l+1).toString(),h)+" | "+f.str+"\n"+p;for(f=s(e.buffer,a[u],i[u],e.position,d),p+=o.repeat(" ",t.indent)+c((e.line+1).toString(),h)+" | "+f.str+"\n",p+=o.repeat("-",t.indent+h+3+f.pos)+"^\n",l=1;l<=t.linesAfter&&!(u+l>=i.length);l++)f=s(e.buffer,a[u+l],i[u+l],e.position-(a[u]-a[u+l]),d),p+=o.repeat(" ",t.indent)+c((e.line+l+1).toString(),h)+" | "+f.str+"\n";return p.replace(/\n$/,"")},f=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],p=["scalar","sequence","mapping"];var h=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===f.indexOf(t))throw new u('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===p.indexOf(this.kind))throw new u('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function d(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,r){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=r)})),n[t]=e})),n}function m(e){return this.extend(e)}m.prototype.extend=function(e){var t=[],n=[];if(e instanceof h)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new u("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof h))throw new u("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new u("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new u("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof h))throw new u("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(m.prototype);return r.implicit=(this.implicit||[]).concat(t),r.explicit=(this.explicit||[]).concat(n),r.compiledImplicit=d(r,"implicit"),r.compiledExplicit=d(r,"explicit"),r.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),A=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var O=/^[-+]?[0-9]+e/;var C=new h("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!A.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||o.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(o.isNegativeZero(e))return"-0.0";return n=e.toString(10),O.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),j=w.extend({implicit:[x,_,k,C]}),T=j,I=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),N=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var P=new h("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==I.exec(e)||null!==N.exec(e))},construct:function(e){var t,n,r,o,a,i,u,s,c=0,l=null;if(null===(t=I.exec(e))&&(t=N.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],r=+t[2]-1,o=+t[3],!t[4])return new Date(Date.UTC(n,r,o));if(a=+t[4],i=+t[5],u=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(l=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(l=-l)),s=new Date(Date.UTC(n,r,o,a,i,u,c)),l&&s.setTime(s.getTime()-l),s},instanceOf:Date,represent:function(e){return e.toISOString()}});var M=new h("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),R="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var D=new h("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,r=0,o=e.length,a=R;for(n=0;n64)){if(t<0)return!1;r+=6}return r%8==0},construct:function(e){var t,n,r=e.replace(/[\r\n=]/g,""),o=r.length,a=R,i=0,u=[];for(t=0;t>16&255),u.push(i>>8&255),u.push(255&i)),i=i<<6|a.indexOf(r.charAt(t));return 0===(n=o%4*6)?(u.push(i>>16&255),u.push(i>>8&255),u.push(255&i)):18===n?(u.push(i>>10&255),u.push(i>>2&255)):12===n&&u.push(i>>4&255),new Uint8Array(u)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,r="",o=0,a=e.length,i=R;for(t=0;t>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]),o=(o<<8)+e[t];return 0===(n=a%3)?(r+=i[o>>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]):2===n?(r+=i[o>>10&63],r+=i[o>>4&63],r+=i[o<<2&63],r+=i[64]):1===n&&(r+=i[o>>2&63],r+=i[o<<4&63],r+=i[64],r+=i[64]),r}}),L=Object.prototype.hasOwnProperty,B=Object.prototype.toString;var F=new h("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,r,o,a,i=[],u=e;for(t=0,n=u.length;t>10),56320+(e-65536&1023))}for(var ae=new Array(256),ie=new Array(256),ue=0;ue<256;ue++)ae[ue]=re(ue)?1:0,ie[ue]=re(ue);function se(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||W,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function ce(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=l(n),new u(t,n)}function le(e,t){throw ce(e,t)}function fe(e,t){e.onWarning&&e.onWarning.call(null,ce(e,t))}var pe={YAML:function(e,t,n){var r,o,a;null!==e.version&&le(e,"duplication of %YAML directive"),1!==n.length&&le(e,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&le(e,"ill-formed argument of the YAML directive"),o=parseInt(r[1],10),a=parseInt(r[2],10),1!==o&&le(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=a<2,1!==a&&2!==a&&fe(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var r,o;2!==n.length&&le(e,"TAG directive accepts exactly two arguments"),r=n[0],o=n[1],Y.test(r)||le(e,"ill-formed tag handle (first argument) of the TAG directive"),H.call(e.tagMap,r)&&le(e,'there is a previously declared suffix for "'+r+'" tag handle'),G.test(o)||le(e,"ill-formed tag prefix (second argument) of the TAG directive");try{o=decodeURIComponent(o)}catch(t){le(e,"tag prefix is malformed: "+o)}e.tagMap[r]=o}};function he(e,t,n,r){var o,a,i,u;if(t1&&(e.result+=o.repeat("\n",t-1))}function we(e,t){var n,r,o=e.tag,a=e.anchor,i=[],u=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),r=e.input.charCodeAt(e.position);0!==r&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,le(e,"tab characters must not be used in indentation")),45===r)&&ee(e.input.charCodeAt(e.position+1));)if(u=!0,e.position++,ge(e,!0,-1)&&e.lineIndent<=t)i.push(null),r=e.input.charCodeAt(e.position);else if(n=e.line,Ee(e,t,3,!1,!0),i.push(e.result),ge(e,!0,-1),r=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==r)le(e,"bad indentation of a sequence entry");else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt)&&(g&&(i=e.line,u=e.lineStart,s=e.position),Ee(e,t,4,!0,o)&&(g?m=e.result:v=e.result),g||(me(e,p,h,d,m,v,i,u,s),d=m=v=null),ge(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===a||e.lineIndent>t)&&0!==c)le(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===a?le(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?le(e,"repeat of an indentation width identifier"):(f=t+a-1,l=!0)}if(X(i)){do{i=e.input.charCodeAt(++e.position)}while(X(i));if(35===i)do{i=e.input.charCodeAt(++e.position)}while(!Z(i)&&0!==i)}for(;0!==i;){for(ve(e),e.lineIndent=0,i=e.input.charCodeAt(e.position);(!l||e.lineIndentf&&(f=e.lineIndent),Z(i))p++;else{if(e.lineIndent0){for(o=i,a=0;o>0;o--)(i=ne(u=e.input.charCodeAt(++e.position)))>=0?a=(a<<4)+i:le(e,"expected hexadecimal character");e.result+=oe(a),e.position++}else le(e,"unknown escape sequence");n=r=e.position}else Z(u)?(he(e,n,r,!0),be(e,ge(e,!1,t)),n=r=e.position):e.position===e.lineStart&&ye(e)?le(e,"unexpected end of the document within a double quoted scalar"):(e.position++,r=e.position)}le(e,"unexpected end of the stream within a double quoted scalar")}(e,h)?g=!0:!function(e){var t,n,r;if(42!==(r=e.input.charCodeAt(e.position)))return!1;for(r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!ee(r)&&!te(r);)r=e.input.charCodeAt(++e.position);return e.position===t&&le(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),H.call(e.anchorMap,n)||le(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ge(e,!0,-1),!0}(e)?function(e,t,n){var r,o,a,i,u,s,c,l,f=e.kind,p=e.result;if(ee(l=e.input.charCodeAt(e.position))||te(l)||35===l||38===l||42===l||33===l||124===l||62===l||39===l||34===l||37===l||64===l||96===l)return!1;if((63===l||45===l)&&(ee(r=e.input.charCodeAt(e.position+1))||n&&te(r)))return!1;for(e.kind="scalar",e.result="",o=a=e.position,i=!1;0!==l;){if(58===l){if(ee(r=e.input.charCodeAt(e.position+1))||n&&te(r))break}else if(35===l){if(ee(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&ye(e)||n&&te(l))break;if(Z(l)){if(u=e.line,s=e.lineStart,c=e.lineIndent,ge(e,!1,-1),e.lineIndent>=t){i=!0,l=e.input.charCodeAt(e.position);continue}e.position=a,e.line=u,e.lineStart=s,e.lineIndent=c;break}}i&&(he(e,o,a,!1),be(e,e.line-u),o=a=e.position,i=!1),X(l)||(a=e.position+1),l=e.input.charCodeAt(++e.position)}return he(e,o,a,!1),!!e.result||(e.kind=f,e.result=p,!1)}(e,h,1===n)&&(g=!0,null===e.tag&&(e.tag="?")):(g=!0,null===e.tag&&null===e.anchor||le(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(g=s&&we(e,d))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&le(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),c=0,l=e.implicitTypes.length;c"),null!==e.result&&p.kind!==e.kind&&le(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+p.kind+'", not "'+e.kind+'"'),p.resolve(e.result,e.tag)?(e.result=p.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):le(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||g}function Se(e){var t,n,r,o,a=e.position,i=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(o=e.input.charCodeAt(e.position))&&(ge(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(i=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!ee(o);)o=e.input.charCodeAt(++e.position);for(r=[],(n=e.input.slice(t,e.position)).length<1&&le(e,"directive name must not be less than one character in length");0!==o;){for(;X(o);)o=e.input.charCodeAt(++e.position);if(35===o){do{o=e.input.charCodeAt(++e.position)}while(0!==o&&!Z(o));break}if(Z(o))break;for(t=e.position;0!==o&&!ee(o);)o=e.input.charCodeAt(++e.position);r.push(e.input.slice(t,e.position))}0!==o&&ve(e),H.call(pe,n)?pe[n](e,n,r):fe(e,'unknown document directive "'+n+'"')}ge(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ge(e,!0,-1)):i&&le(e,"directives end mark is expected"),Ee(e,e.lineIndent-1,4,!1,!0),ge(e,!0,-1),e.checkLineBreaks&&J.test(e.input.slice(a,e.position))&&fe(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&ye(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ge(e,!0,-1)):e.position=55296&&r<=56319&&t+1=56320&&n<=57343?1024*(r-55296)+n-56320+65536:r}function Ue(e){return/^\n* /.test(e)}function Ve(e,t,n,r,o,a,i,u){var s,c,l=0,f=null,p=!1,h=!1,d=-1!==r,m=-1,v=Be(c=qe(e,0))&&c!==je&&!Le(c)&&45!==c&&63!==c&&58!==c&&44!==c&&91!==c&&93!==c&&123!==c&&125!==c&&35!==c&&38!==c&&42!==c&&33!==c&&124!==c&&61!==c&&62!==c&&39!==c&&34!==c&&37!==c&&64!==c&&96!==c&&function(e){return!Le(e)&&58!==e}(qe(e,e.length-1));if(t||i)for(s=0;s=65536?s+=2:s++){if(!Be(l=qe(e,s)))return 5;v=v&&ze(l,f,u),f=l}else{for(s=0;s=65536?s+=2:s++){if(10===(l=qe(e,s)))p=!0,d&&(h=h||s-m-1>r&&" "!==e[m+1],m=s);else if(!Be(l))return 5;v=v&&ze(l,f,u),f=l}h=h||d&&s-m-1>r&&" "!==e[m+1]}return p||h?n>9&&Ue(e)?5:i?2===a?5:2:h?4:3:!v||i||o(e)?2===a?5:2:1}function We(e,t,n,r,o){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==Ie.indexOf(t)||Ne.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,n),i=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),s=r||e.flowLevel>-1&&n>=e.flowLevel;switch(Ve(t,s,e.indent,i,(function(t){return function(e,t){var n,r;for(n=0,r=e.implicitTypes.length;n"+He(t,e.indent)+$e(Re(function(e,t){var n,r,o=/(\n+)([^\n]*)/g,a=(u=e.indexOf("\n"),u=-1!==u?u:e.length,o.lastIndex=u,Je(e.slice(0,u),t)),i="\n"===e[0]||" "===e[0];var u;for(;r=o.exec(e);){var s=r[1],c=r[2];n=" "===c[0],a+=s+(i||n||""===c?"":"\n")+Je(c,t),i=n}return a}(t,i),a));case 5:return'"'+function(e){for(var t,n="",r=0,o=0;o=65536?o+=2:o++)r=qe(e,o),!(t=Te[r])&&Be(r)?(n+=e[o],r>=65536&&(n+=e[o+1])):n+=t||Pe(r);return n}(t)+'"';default:throw new u("impossible error: invalid scalar style")}}()}function He(e,t){var n=Ue(e)?String(t):"",r="\n"===e[e.length-1];return n+(r&&("\n"===e[e.length-2]||"\n"===e)?"+":r?"":"-")+"\n"}function $e(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function Je(e,t){if(""===e||" "===e[0])return e;for(var n,r,o=/ [^ ]/g,a=0,i=0,u=0,s="";n=o.exec(e);)(u=n.index)-a>t&&(r=i>a?i:u,s+="\n"+e.slice(a,r),a=r+1),i=u;return s+="\n",e.length-a>t&&i>a?s+=e.slice(a,i)+"\n"+e.slice(i+1):s+=e.slice(a),s.slice(1)}function Ke(e,t,n,r){var o,a,i,u="",s=e.tag;for(o=0,a=n.length;o tag resolver accepts not "'+c+'" style');r=s.represent[c](t,c)}e.dump=r}return!0}return!1}function Ge(e,t,n,r,o,a,i){e.tag=null,e.dump=n,Ye(e,n,!1)||Ye(e,n,!0);var s,c=Oe.call(e.dump),l=r;r&&(r=e.flowLevel<0||e.flowLevel>t);var f,p,h="[object Object]"===c||"[object Array]"===c;if(h&&(p=-1!==(f=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||p||2!==e.indent&&t>0)&&(o=!1),p&&e.usedDuplicates[f])e.dump="*ref_"+f;else{if(h&&p&&!e.usedDuplicates[f]&&(e.usedDuplicates[f]=!0),"[object Object]"===c)r&&0!==Object.keys(e.dump).length?(!function(e,t,n,r){var o,a,i,s,c,l,f="",p=e.tag,h=Object.keys(n);if(!0===e.sortKeys)h.sort();else if("function"==typeof e.sortKeys)h.sort(e.sortKeys);else if(e.sortKeys)throw new u("sortKeys must be a boolean or a function");for(o=0,a=h.length;o1024)&&(e.dump&&10===e.dump.charCodeAt(0)?l+="?":l+="? "),l+=e.dump,c&&(l+=De(e,t)),Ge(e,t+1,s,!0,c)&&(e.dump&&10===e.dump.charCodeAt(0)?l+=":":l+=": ",f+=l+=e.dump));e.tag=p,e.dump=f||"{}"}(e,t,e.dump,o),p&&(e.dump="&ref_"+f+e.dump)):(!function(e,t,n){var r,o,a,i,u,s="",c=e.tag,l=Object.keys(n);for(r=0,o=l.length;r1024&&(u+="? "),u+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ge(e,t,i,!1,!1)&&(s+=u+=e.dump));e.tag=c,e.dump="{"+s+"}"}(e,t,e.dump),p&&(e.dump="&ref_"+f+" "+e.dump));else if("[object Array]"===c)r&&0!==e.dump.length?(e.noArrayIndent&&!i&&t>0?Ke(e,t-1,e.dump,o):Ke(e,t,e.dump,o),p&&(e.dump="&ref_"+f+e.dump)):(!function(e,t,n){var r,o,a,i="",u=e.tag;for(r=0,o=n.length;r",e.dump=s+" "+e.dump)}return!0}function Qe(e,t){var n,r,o=[],a=[];for(Ze(e,o,a),n=0,r=a.length;n=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),a.Arguments=a.Array,o("keys"),o("values"),o("entries")},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){"use strict";(function(t){function n(e){return e instanceof t||e instanceof Date||e instanceof RegExp}function r(e){if(e instanceof t){var n=t.alloc?t.alloc(e.length):new t(e.length);return e.copy(n),n}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function o(e){var t=[];return e.forEach((function(e,a){"object"==typeof e&&null!==e?Array.isArray(e)?t[a]=o(e):n(e)?t[a]=r(e):t[a]=i({},e):t[a]=e})),t}function a(e,t){return"__proto__"===t?void 0:e[t]}var i=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,u=arguments[0],s=Array.prototype.slice.call(arguments,1);return s.forEach((function(s){"object"!=typeof s||null===s||Array.isArray(s)||Object.keys(s).forEach((function(c){return t=a(u,c),(e=a(s,c))===u?void 0:"object"!=typeof e||null===e?void(u[c]=e):Array.isArray(e)?void(u[c]=o(e)):n(e)?void(u[c]=r(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(u[c]=i({},e)):void(u[c]=i(t,e))}))})),u}}).call(this,n(132).Buffer)},function(e,t,n){e.exports=n(619)},function(e,t,n){"use strict";var r=n(946),o=n(947);function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=b,t.resolve=function(e,t){return b(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?b(e,!1,!0).resolveObject(t):t},t.format=function(e){o.isString(e)&&(e=b(e));return e instanceof a?e.format():a.prototype.format.call(e)},t.Url=a;var i=/^([a-z0-9.+-]+:)/i,u=/:[0-9]*$/,s=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,c=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),l=["'"].concat(c),f=["%","/","?",";","#"].concat(l),p=["/","?","#"],h=/^[+a-z0-9A-Z_-]{0,63}$/,d=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,m={javascript:!0,"javascript:":!0},v={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},y=n(948);function b(e,t,n){if(e&&o.isObject(e)&&e instanceof a)return e;var r=new a;return r.parse(e,t,n),r}a.prototype.parse=function(e,t,n){if(!o.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var a=e.indexOf("?"),u=-1!==a&&a127?P+="x":P+=N[M];if(!P.match(h)){var D=T.slice(0,O),L=T.slice(O+1),B=N.match(d);B&&(D.push(B[1]),L.unshift(B[2])),L.length&&(b="/"+L.join(".")+b),this.hostname=D.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),j||(this.hostname=r.toASCII(this.hostname));var F=this.port?":"+this.port:"",z=this.hostname||"";this.host=z+F,this.href+=this.host,j&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!m[_])for(O=0,I=l.length;O0)&&n.host.split("@"))&&(n.auth=j.shift(),n.host=n.hostname=j.shift());return n.search=e.search,n.query=e.query,o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!E.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var k=E.slice(-1)[0],A=(n.host||e.host||E.length>1)&&("."===k||".."===k)||""===k,O=0,C=E.length;C>=0;C--)"."===(k=E[C])?E.splice(C,1):".."===k?(E.splice(C,1),O++):O&&(E.splice(C,1),O--);if(!x&&!_)for(;O--;O)E.unshift("..");!x||""===E[0]||E[0]&&"/"===E[0].charAt(0)||E.unshift(""),A&&"/"!==E.join("/").substr(-1)&&E.push("");var j,T=""===E[0]||E[0]&&"/"===E[0].charAt(0);S&&(n.hostname=n.host=T?"":E.length?E.shift():"",(j=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=j.shift(),n.host=n.hostname=j.shift()));return(x=x||n.host&&E.length)&&!T&&E.unshift(""),E.length?n.pathname=E.join("/"):(n.pathname=null,n.path=null),o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},a.prototype.parseHost=function(){var e=this.host,t=u.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){"use strict";n.r(t),n.d(t,"SHOW_AUTH_POPUP",(function(){return h})),n.d(t,"AUTHORIZE",(function(){return d})),n.d(t,"LOGOUT",(function(){return m})),n.d(t,"PRE_AUTHORIZE_OAUTH2",(function(){return v})),n.d(t,"AUTHORIZE_OAUTH2",(function(){return g})),n.d(t,"VALIDATE",(function(){return y})),n.d(t,"CONFIGURE_AUTH",(function(){return b})),n.d(t,"RESTORE_AUTHORIZATION",(function(){return w})),n.d(t,"showDefinitions",(function(){return x})),n.d(t,"authorize",(function(){return _})),n.d(t,"authorizeWithPersistOption",(function(){return E})),n.d(t,"logout",(function(){return S})),n.d(t,"logoutWithPersistOption",(function(){return k})),n.d(t,"preAuthorizeImplicit",(function(){return A})),n.d(t,"authorizeOauth2",(function(){return O})),n.d(t,"authorizeOauth2WithPersistOption",(function(){return C})),n.d(t,"authorizePassword",(function(){return j})),n.d(t,"authorizeApplication",(function(){return T})),n.d(t,"authorizeAccessCodeWithFormParams",(function(){return I})),n.d(t,"authorizeAccessCodeWithBasicAuthentication",(function(){return N})),n.d(t,"authorizeRequest",(function(){return P})),n.d(t,"configureAuth",(function(){return M})),n.d(t,"restoreAuthorization",(function(){return R})),n.d(t,"persistAuthorizationIfNeeded",(function(){return D}));var r=n(19),o=n.n(r),a=n(32),i=n.n(a),u=n(21),s=n.n(u),c=n(89),l=n.n(c),f=n(26),p=n(5),h="show_popup",d="authorize",m="logout",v="pre_authorize_oauth2",g="authorize_oauth2",y="validate",b="configure_auth",w="restore_authorization";function x(e){return{type:h,payload:e}}function _(e){return{type:d,payload:e}}var E=function(e){return function(t){var n=t.authActions;n.authorize(e),n.persistAuthorizationIfNeeded()}};function S(e){return{type:m,payload:e}}var k=function(e){return function(t){var n=t.authActions;n.logout(e),n.persistAuthorizationIfNeeded()}},A=function(e){return function(t){var n=t.authActions,r=t.errActions,o=e.auth,a=e.token,u=e.isValid,s=o.schema,c=o.name,l=s.get("flow");delete f.a.swaggerUIRedirectOauth2,"accessCode"===l||u||r.newAuthErr({authId:c,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),a.error?r.newAuthErr({authId:c,source:"auth",level:"error",message:i()(a)}):n.authorizeOauth2WithPersistOption({auth:o,token:a})}};function O(e){return{type:g,payload:e}}var C=function(e){return function(t){var n=t.authActions;n.authorizeOauth2(e),n.persistAuthorizationIfNeeded()}},j=function(e){return function(t){var n=t.authActions,r=e.schema,o=e.name,a=e.username,i=e.password,u=e.passwordType,c=e.clientId,l=e.clientSecret,f={grant_type:"password",scope:e.scopes.join(" "),username:a,password:i},h={};switch(u){case"request-body":!function(e,t,n){t&&s()(e,{client_id:t});n&&s()(e,{client_secret:n})}(f,c,l);break;case"basic":h.Authorization="Basic "+Object(p.a)(c+":"+l);break;default:console.warn("Warning: invalid passwordType ".concat(u," was passed, not including client id and secret"))}return n.authorizeRequest({body:Object(p.b)(f),url:r.get("tokenUrl"),name:o,headers:h,query:{},auth:e})}};var T=function(e){return function(t){var n=t.authActions,r=e.schema,o=e.scopes,a=e.name,i=e.clientId,u=e.clientSecret,s={Authorization:"Basic "+Object(p.a)(i+":"+u)},c={grant_type:"client_credentials",scope:o.join(" ")};return n.authorizeRequest({body:Object(p.b)(c),name:a,url:r.get("tokenUrl"),auth:e,headers:s})}},I=function(e){var t=e.auth,n=e.redirectUrl;return function(e){var r=e.authActions,o=t.schema,a=t.name,i=t.clientId,u=t.clientSecret,s=t.codeVerifier,c={grant_type:"authorization_code",code:t.code,client_id:i,client_secret:u,redirect_uri:n,code_verifier:s};return r.authorizeRequest({body:Object(p.b)(c),name:a,url:o.get("tokenUrl"),auth:t})}},N=function(e){var t=e.auth,n=e.redirectUrl;return function(e){var r=e.authActions,o=t.schema,a=t.name,i=t.clientId,u=t.clientSecret,s=t.codeVerifier,c={Authorization:"Basic "+Object(p.a)(i+":"+u)},l={grant_type:"authorization_code",code:t.code,client_id:i,redirect_uri:n,code_verifier:s};return r.authorizeRequest({body:Object(p.b)(l),name:a,url:o.get("tokenUrl"),auth:t,headers:c})}},P=function(e){return function(t){var n,r=t.fn,a=t.getConfigs,u=t.authActions,c=t.errActions,f=t.oas3Selectors,p=t.specSelectors,h=t.authSelectors,d=e.body,m=e.query,v=void 0===m?{}:m,g=e.headers,y=void 0===g?{}:g,b=e.name,w=e.url,x=e.auth,_=(h.getConfigs()||{}).additionalQueryStringParams;if(p.isOAS3()){var E=f.serverEffectiveValue(f.selectedServer());n=l()(w,E,!0)}else n=l()(w,p.url(),!0);"object"===o()(_)&&(n.query=s()({},n.query,_));var S=n.toString(),k=s()({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},y);r.fetch({url:S,method:"post",headers:k,query:v,body:d,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){var t=JSON.parse(e.data),n=t&&(t.error||""),r=t&&(t.parseError||"");e.ok?n||r?c.newAuthErr({authId:b,level:"error",source:"auth",message:i()(t)}):u.authorizeOauth2WithPersistOption({auth:x,token:t}):c.newAuthErr({authId:b,level:"error",source:"auth",message:e.statusText})})).catch((function(e){var t=new Error(e).message;if(e.response&&e.response.data){var n=e.response.data;try{var r="string"==typeof n?JSON.parse(n):n;r.error&&(t+=", error: ".concat(r.error)),r.error_description&&(t+=", description: ".concat(r.error_description))}catch(e){}}c.newAuthErr({authId:b,level:"error",source:"auth",message:t})}))}};function M(e){return{type:b,payload:e}}function R(e){return{type:w,payload:e}}var D=function(){return function(e){var t=e.authSelectors;if((0,e.getConfigs)().persistAuthorization){var n=t.authorized();localStorage.setItem("authorized",i()(n.toJS()))}}}},function(e,t,n){var r=n(919);e.exports=function(e){for(var t=1;tS;S++)if((h||S in x)&&(b=_(y=x[S],S,w),e))if(t)A[S]=b;else if(b)switch(e){case 3:return!0;case 5:return y;case 6:return S;case 2:c(A,y)}else switch(e){case 4:return!1;case 7:c(A,y)}return f?-1:o||l?l:A}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},function(e,t,n){"use strict";n.r(t),n.d(t,"lastError",(function(){return M})),n.d(t,"url",(function(){return R})),n.d(t,"specStr",(function(){return D})),n.d(t,"specSource",(function(){return L})),n.d(t,"specJson",(function(){return B})),n.d(t,"specResolved",(function(){return F})),n.d(t,"specResolvedSubtree",(function(){return z})),n.d(t,"specJsonWithResolvedSubtrees",(function(){return U})),n.d(t,"spec",(function(){return V})),n.d(t,"isOAS3",(function(){return W})),n.d(t,"info",(function(){return H})),n.d(t,"externalDocs",(function(){return $})),n.d(t,"version",(function(){return J})),n.d(t,"semver",(function(){return K})),n.d(t,"paths",(function(){return Y})),n.d(t,"operations",(function(){return G})),n.d(t,"consumes",(function(){return Q})),n.d(t,"produces",(function(){return Z})),n.d(t,"security",(function(){return X})),n.d(t,"securityDefinitions",(function(){return ee})),n.d(t,"findDefinition",(function(){return te})),n.d(t,"definitions",(function(){return ne})),n.d(t,"basePath",(function(){return re})),n.d(t,"host",(function(){return oe})),n.d(t,"schemes",(function(){return ae})),n.d(t,"operationsWithRootInherited",(function(){return ie})),n.d(t,"tags",(function(){return ue})),n.d(t,"tagDetails",(function(){return se})),n.d(t,"operationsWithTags",(function(){return ce})),n.d(t,"taggedOperations",(function(){return le})),n.d(t,"responses",(function(){return fe})),n.d(t,"requests",(function(){return pe})),n.d(t,"mutatedRequests",(function(){return he})),n.d(t,"responseFor",(function(){return de})),n.d(t,"requestFor",(function(){return me})),n.d(t,"mutatedRequestFor",(function(){return ve})),n.d(t,"allowTryItOutFor",(function(){return ge})),n.d(t,"parameterWithMetaByIdentity",(function(){return ye})),n.d(t,"parameterInclusionSettingFor",(function(){return be})),n.d(t,"parameterWithMeta",(function(){return we})),n.d(t,"operationWithMeta",(function(){return xe})),n.d(t,"getParameter",(function(){return _e})),n.d(t,"hasHost",(function(){return Ee})),n.d(t,"parameterValues",(function(){return Se})),n.d(t,"parametersIncludeIn",(function(){return ke})),n.d(t,"parametersIncludeType",(function(){return Ae})),n.d(t,"contentTypeValues",(function(){return Oe})),n.d(t,"currentProducesFor",(function(){return Ce})),n.d(t,"producesOptionsFor",(function(){return je})),n.d(t,"consumesOptionsFor",(function(){return Te})),n.d(t,"operationScheme",(function(){return Ie})),n.d(t,"canExecuteScheme",(function(){return Ne})),n.d(t,"validateBeforeExecute",(function(){return Pe})),n.d(t,"getOAS3RequiredRequestBodyContentType",(function(){return Me})),n.d(t,"isMediaTypeSchemaPropertiesEqual",(function(){return Re}));var r=n(13),o=n.n(r),a=n(14),i=n.n(a),u=n(2),s=n.n(u),c=n(20),l=n.n(c),f=n(23),p=n.n(f),h=n(18),d=n.n(h),m=n(4),v=n.n(m),g=n(12),y=n.n(g),b=n(56),w=n.n(b),x=n(30),_=n.n(x),E=n(196),S=n.n(E),k=n(71),A=n.n(k),O=n(24),C=n.n(O),j=n(16),T=n(5),I=n(1),N=["get","put","post","delete","options","head","patch","trace"],P=function(e){return e||Object(I.Map)()},M=Object(j.a)(P,(function(e){return e.get("lastError")})),R=Object(j.a)(P,(function(e){return e.get("url")})),D=Object(j.a)(P,(function(e){return e.get("spec")||""})),L=Object(j.a)(P,(function(e){return e.get("specSource")||"not-editor"})),B=Object(j.a)(P,(function(e){return e.get("json",Object(I.Map)())})),F=Object(j.a)(P,(function(e){return e.get("resolved",Object(I.Map)())})),z=function(e,t){var n;return e.getIn(s()(n=["resolvedSubtrees"]).call(n,i()(t)),void 0)},q=function e(t,n){return I.Map.isMap(t)&&I.Map.isMap(n)?n.get("$$ref")?n:Object(I.OrderedMap)().mergeWith(e,t,n):n},U=Object(j.a)(P,(function(e){return Object(I.OrderedMap)().mergeWith(q,e.get("json"),e.get("resolvedSubtrees"))})),V=function(e){return B(e)},W=Object(j.a)(V,(function(){return!1})),H=Object(j.a)(V,(function(e){return De(e&&e.get("info"))})),$=Object(j.a)(V,(function(e){return De(e&&e.get("externalDocs"))})),J=Object(j.a)(H,(function(e){return e&&e.get("version")})),K=Object(j.a)(J,(function(e){var t;return l()(t=/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e)).call(t,1)})),Y=Object(j.a)(U,(function(e){return e.get("paths")})),G=Object(j.a)(Y,(function(e){if(!e||e.size<1)return Object(I.List)();var t=Object(I.List)();return e&&p()(e)?(p()(e).call(e,(function(e,n){if(!e||!p()(e))return{};p()(e).call(e,(function(e,r){var o;d()(N).call(N,r)<0||(t=t.push(Object(I.fromJS)({path:n,method:r,operation:e,id:s()(o="".concat(r,"-")).call(o,n)})))}))})),t):Object(I.List)()})),Q=Object(j.a)(V,(function(e){return Object(I.Set)(e.get("consumes"))})),Z=Object(j.a)(V,(function(e){return Object(I.Set)(e.get("produces"))})),X=Object(j.a)(V,(function(e){return e.get("security",Object(I.List)())})),ee=Object(j.a)(V,(function(e){return e.get("securityDefinitions")})),te=function(e,t){var n=e.getIn(["resolvedSubtrees","definitions",t],null),r=e.getIn(["json","definitions",t],null);return n||r||null},ne=Object(j.a)(V,(function(e){var t=e.get("definitions");return I.Map.isMap(t)?t:Object(I.Map)()})),re=Object(j.a)(V,(function(e){return e.get("basePath")})),oe=Object(j.a)(V,(function(e){return e.get("host")})),ae=Object(j.a)(V,(function(e){return e.get("schemes",Object(I.Map)())})),ie=Object(j.a)(G,Q,Z,(function(e,t,n){return v()(e).call(e,(function(e){return e.update("operation",(function(e){if(e){if(!I.Map.isMap(e))return;return e.withMutations((function(e){return e.get("consumes")||e.update("consumes",(function(e){return Object(I.Set)(e).merge(t)})),e.get("produces")||e.update("produces",(function(e){return Object(I.Set)(e).merge(n)})),e}))}return Object(I.Map)()}))}))})),ue=Object(j.a)(V,(function(e){var t=e.get("tags",Object(I.List)());return I.List.isList(t)?y()(t).call(t,(function(e){return I.Map.isMap(e)})):Object(I.List)()})),se=function(e,t){var n,r=ue(e)||Object(I.List)();return w()(n=y()(r).call(r,I.Map.isMap)).call(n,(function(e){return e.get("name")===t}),Object(I.Map)())},ce=Object(j.a)(ie,ue,(function(e,t){return _()(e).call(e,(function(e,t){var n=Object(I.Set)(t.getIn(["operation","tags"]));return n.count()<1?e.update("default",Object(I.List)(),(function(e){return e.push(t)})):_()(n).call(n,(function(e,n){return e.update(n,Object(I.List)(),(function(e){return e.push(t)}))}),e)}),_()(t).call(t,(function(e,t){return e.set(t.get("name"),Object(I.List)())}),Object(I.OrderedMap)()))})),le=function(e){return function(t){var n,r=(0,t.getConfigs)(),o=r.tagsSorter,a=r.operationsSorter;return v()(n=ce(e).sortBy((function(e,t){return t}),(function(e,t){var n="function"==typeof o?o:T.H.tagsSorter[o];return n?n(e,t):null}))).call(n,(function(t,n){var r="function"==typeof a?a:T.H.operationsSorter[a],o=r?S()(t).call(t,r):t;return Object(I.Map)({tagDetails:se(e,n),operations:o})}))}},fe=Object(j.a)(P,(function(e){return e.get("responses",Object(I.Map)())})),pe=Object(j.a)(P,(function(e){return e.get("requests",Object(I.Map)())})),he=Object(j.a)(P,(function(e){return e.get("mutatedRequests",Object(I.Map)())})),de=function(e,t,n){return fe(e).getIn([t,n],null)},me=function(e,t,n){return pe(e).getIn([t,n],null)},ve=function(e,t,n){return he(e).getIn([t,n],null)},ge=function(){return!0},ye=function(e,t,n){var r,o,a=U(e).getIn(s()(r=["paths"]).call(r,i()(t),["parameters"]),Object(I.OrderedMap)()),u=e.getIn(s()(o=["meta","paths"]).call(o,i()(t),["parameters"]),Object(I.OrderedMap)()),c=v()(a).call(a,(function(e){var t,r,o,a=u.get(s()(t="".concat(n.get("in"),".")).call(t,n.get("name"))),i=u.get(s()(r=s()(o="".concat(n.get("in"),".")).call(o,n.get("name"),".hash-")).call(r,n.hashCode()));return Object(I.OrderedMap)().merge(e,a,i)}));return w()(c).call(c,(function(e){return e.get("in")===n.get("in")&&e.get("name")===n.get("name")}),Object(I.OrderedMap)())},be=function(e,t,n,r){var o,a,u=s()(o="".concat(r,".")).call(o,n);return e.getIn(s()(a=["meta","paths"]).call(a,i()(t),["parameter_inclusions",u]),!1)},we=function(e,t,n,r){var o,a=U(e).getIn(s()(o=["paths"]).call(o,i()(t),["parameters"]),Object(I.OrderedMap)()),u=w()(a).call(a,(function(e){return e.get("in")===r&&e.get("name")===n}),Object(I.OrderedMap)());return ye(e,t,u)},xe=function(e,t,n){var r,o=U(e).getIn(["paths",t,n],Object(I.OrderedMap)()),a=e.getIn(["meta","paths",t,n],Object(I.OrderedMap)()),i=v()(r=o.get("parameters",Object(I.List)())).call(r,(function(r){return ye(e,[t,n],r)}));return Object(I.OrderedMap)().merge(o,a).set("parameters",i)};function _e(e,t,n,r){var o;t=t||[];var a=e.getIn(s()(o=["meta","paths"]).call(o,i()(t),["parameters"]),Object(I.fromJS)([]));return w()(a).call(a,(function(e){return I.Map.isMap(e)&&e.get("name")===n&&e.get("in")===r}))||Object(I.Map)()}var Ee=Object(j.a)(V,(function(e){var t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}));function Se(e,t,n){var r;t=t||[];var o=xe.apply(void 0,s()(r=[e]).call(r,i()(t))).get("parameters",Object(I.List)());return _()(o).call(o,(function(e,t){var r=n&&"body"===t.get("in")?t.get("value_xml"):t.get("value");return e.set(Object(T.A)(t,{allowHashes:!1}),r)}),Object(I.fromJS)({}))}function ke(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(I.List.isList(e))return A()(e).call(e,(function(e){return I.Map.isMap(e)&&e.get("in")===t}))}function Ae(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(I.List.isList(e))return A()(e).call(e,(function(e){return I.Map.isMap(e)&&e.get("type")===t}))}function Oe(e,t){var n,r;t=t||[];var o=U(e).getIn(s()(n=["paths"]).call(n,i()(t)),Object(I.fromJS)({})),a=e.getIn(s()(r=["meta","paths"]).call(r,i()(t)),Object(I.fromJS)({})),u=Ce(e,t),c=o.get("parameters")||new I.List,l=a.get("consumes_value")?a.get("consumes_value"):Ae(c,"file")?"multipart/form-data":Ae(c,"formData")?"application/x-www-form-urlencoded":void 0;return Object(I.fromJS)({requestContentType:l,responseContentType:u})}function Ce(e,t){var n,r;t=t||[];var o=U(e).getIn(s()(n=["paths"]).call(n,i()(t)),null);if(null!==o){var a=e.getIn(s()(r=["meta","paths"]).call(r,i()(t),["produces_value"]),null),u=o.getIn(["produces",0],null);return a||u||"application/json"}}function je(e,t){var n;t=t||[];var r=U(e),a=r.getIn(s()(n=["paths"]).call(n,i()(t)),null);if(null!==a){var u=t,c=o()(u,1)[0],l=a.get("produces",null),f=r.getIn(["paths",c,"produces"],null),p=r.getIn(["produces"],null);return l||f||p}}function Te(e,t){var n;t=t||[];var r=U(e),a=r.getIn(s()(n=["paths"]).call(n,i()(t)),null);if(null!==a){var u=t,c=o()(u,1)[0],l=a.get("consumes",null),f=r.getIn(["paths",c,"consumes"],null),p=r.getIn(["consumes"],null);return l||f||p}}var Ie=function(e,t,n){var r=e.get("url").match(/^([a-z][a-z0-9+\-.]*):/),o=C()(r)?r[1]:null;return e.getIn(["scheme",t,n])||e.getIn(["scheme","_defaultScheme"])||o||""},Ne=function(e,t,n){var r;return d()(r=["http","https"]).call(r,Ie(e,t,n))>-1},Pe=function(e,t){var n;t=t||[];var r=e.getIn(s()(n=["meta","paths"]).call(n,i()(t),["parameters"]),Object(I.fromJS)([])),o=!0;return p()(r).call(r,(function(e){var t=e.get("errors");t&&t.count()&&(o=!1)})),o},Me=function(e,t){var n,r,o={requestBody:!1,requestContentType:{}},a=e.getIn(s()(n=["resolvedSubtrees","paths"]).call(n,i()(t),["requestBody"]),Object(I.fromJS)([]));return a.size<1||(a.getIn(["required"])&&(o.requestBody=a.getIn(["required"])),p()(r=a.getIn(["content"]).entrySeq()).call(r,(function(e){var t=e[0];if(e[1].getIn(["schema","required"])){var n=e[1].getIn(["schema","required"]).toJS();o.requestContentType[t]=n}}))),o},Re=function(e,t,n,r){var o;if((n||r)&&n===r)return!0;var a=e.getIn(s()(o=["resolvedSubtrees","paths"]).call(o,i()(t),["requestBody","content"]),Object(I.fromJS)([]));if(a.size<2||!n||!r)return!1;var u=a.getIn([n,"schema","properties"],Object(I.fromJS)([])),c=a.getIn([r,"schema","properties"],Object(I.fromJS)([]));return!!u.equals(c)};function De(e){return I.Map.isMap(e)?e:new I.Map}},function(e,t,n){"use strict";(function(t){var r=n(847),o=n(848),a=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,i=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,u=/^[a-zA-Z]:/,s=new RegExp("^[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+");function c(e){return(e||"").toString().replace(s,"")}var l=[["#","hash"],["?","query"],function(e,t){return h(t.protocol)?e.replace(/\\/g,"/"):e},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d+)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],f={hash:1,query:1};function p(e){var n,r=("undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{}).location||{},o={},i=typeof(e=e||r);if("blob:"===e.protocol)o=new m(unescape(e.pathname),{});else if("string"===i)for(n in o=new m(e,{}),f)delete o[n];else if("object"===i){for(n in e)n in f||(o[n]=e[n]);void 0===o.slashes&&(o.slashes=a.test(e.href))}return o}function h(e){return"file:"===e||"ftp:"===e||"http:"===e||"https:"===e||"ws:"===e||"wss:"===e}function d(e,t){e=c(e),t=t||{};var n,r=i.exec(e),o=r[1]?r[1].toLowerCase():"",a=!!r[2],u=!!r[3],s=0;return a?u?(n=r[2]+r[3]+r[4],s=r[2].length+r[3].length):(n=r[2]+r[4],s=r[2].length):u?(n=r[3]+r[4],s=r[3].length):n=r[4],"file:"===o?s>=2&&(n=n.slice(2)):h(o)?n=r[4]:o?a&&(n=n.slice(2)):s>=2&&h(t.protocol)&&(n=r[4]),{protocol:o,slashes:a||h(o),slashesCount:s,rest:n}}function m(e,t,n){if(e=c(e),!(this instanceof m))return new m(e,t,n);var a,i,s,f,v,g,y=l.slice(),b=typeof t,w=this,x=0;for("object"!==b&&"string"!==b&&(n=t,t=null),n&&"function"!=typeof n&&(n=o.parse),a=!(i=d(e||"",t=p(t))).protocol&&!i.slashes,w.slashes=i.slashes||a&&t.slashes,w.protocol=i.protocol||t.protocol||"",e=i.rest,("file:"===i.protocol&&(2!==i.slashesCount||u.test(e))||!i.slashes&&(i.protocol||i.slashesCount<2||!h(w.protocol)))&&(y[3]=[/(.*)/,"pathname"]);x=4?[t[0],t[1],t[2],t[3],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[2],".").concat(t[3]),"".concat(t[3],".").concat(t[0]),"".concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[0]),"".concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[3],".").concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[2],".").concat(t[1],".").concat(t[0])]:void 0),g[r]}function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=e.filter((function(e){return"token"!==e})),o=y(r);return o.reduce((function(e,t){return p()({},e,n[t])}),t)}function w(e){return e.join(" ")}function x(e){var t=e.node,n=e.stylesheet,r=e.style,o=void 0===r?{}:r,a=e.useInlineStyles,i=e.key,u=t.properties,s=t.type,c=t.tagName,l=t.value;if("text"===s)return l;if(c){var f,h=function(e,t){var n=0;return function(r){return n+=1,r.map((function(r,o){return x({node:r,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(o)})}))}}(n,a);if(a){var m=Object.keys(n).reduce((function(e,t){return t.split(".").forEach((function(t){e.includes(t)||e.push(t)})),e}),[]),g=u.className&&u.className.includes("token")?["token"]:[],y=u.className&&g.concat(u.className.filter((function(e){return!m.includes(e)})));f=p()({},u,{className:w(y)||void 0,style:b(u.className,Object.assign({},u.style,o),n)})}else f=p()({},u,{className:w(u.className)});var _=h(t.children);return d.a.createElement(c,v()({key:i},f),_)}}var _=/\n/g;function E(e){var t=e.codeString,n=e.codeStyle,r=e.containerStyle,o=void 0===r?{float:"left",paddingRight:"10px"}:r,a=e.numberStyle,i=void 0===a?{}:a,u=e.startingLineNumber;return d.a.createElement("code",{style:Object.assign({},n,o)},function(e){var t=e.lines,n=e.startingLineNumber,r=e.style;return t.map((function(e,t){var o=t+n;return d.a.createElement("span",{key:"line-".concat(t),className:"react-syntax-highlighter-line-number",style:"function"==typeof r?r(o):r},"".concat(o,"\n"))}))}({lines:t.replace(/\n$/,"").split("\n"),style:i,startingLineNumber:u}))}function S(e,t){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(e),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:t},children:[{type:"text",value:e}]}}function k(e,t,n){var r,o={display:"inline-block",minWidth:(r=n,"".concat(r.toString().length,".25em")),paddingRight:"1em",textAlign:"right",userSelect:"none"},a="function"==typeof e?e(t):e;return p()({},o,a)}function A(e){var t=e.children,n=e.lineNumber,r=e.lineNumberStyle,o=e.largestLineNumber,a=e.showInlineLineNumbers,i=e.lineProps,u=void 0===i?{}:i,s=e.className,c=void 0===s?[]:s,l=e.showLineNumbers,f=e.wrapLongLines,h="function"==typeof u?u(n):u;if(h.className=c,n&&a){var d=k(r,n,o);t.unshift(S(n,d))}return f&l&&(h.style=p()({},h.style,{display:"flex"})),{type:"element",tagName:"span",properties:h,children:t}}function O(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=0;r2&&void 0!==arguments[2]?arguments[2]:[];return A({children:e,lineNumber:t,lineNumberStyle:u,largestLineNumber:i,showInlineLineNumbers:o,lineProps:n,className:a,showLineNumbers:r,wrapLongLines:s})}function m(e,t){if(r&&t&&o){var n=k(u,t,i);e.unshift(S(t,n))}return e}function v(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||r.length>0?d(e,n,r):m(e,n)}for(var g=function(){var e=l[h],t=e.children[0].value;if(t.match(_)){var n=t.split("\n");n.forEach((function(t,o){var i=r&&f.length+a,u={type:"text",value:"".concat(t,"\n")};if(0===o){var s=v(l.slice(p+1,h).concat(A({children:[u],className:e.properties.className})),i);f.push(s)}else if(o===n.length-1){if(l[h+1]&&l[h+1].children&&l[h+1].children[0]){var c=A({children:[{type:"text",value:"".concat(t)}],className:e.properties.className});l.splice(h+1,0,c)}else{var d=v([u],i,e.properties.className);f.push(d)}}else{var m=v([u],i,e.properties.className);f.push(m)}})),p=h}h++};h .hljs-title":{color:"#88C0D0"},"hljs-keyword":{color:"#81A1C1"},"hljs-literal":{color:"#81A1C1"},"hljs-symbol":{color:"#81A1C1"},"hljs-number":{color:"#B48EAD"},"hljs-regexp":{color:"#EBCB8B"},"hljs-string":{color:"#A3BE8C"},"hljs-title":{color:"#8FBCBB"},"hljs-params":{color:"#D8DEE9"},"hljs-bullet":{color:"#81A1C1"},"hljs-code":{color:"#8FBCBB"},"hljs-emphasis":{fontStyle:"italic"},"hljs-formula":{color:"#8FBCBB"},"hljs-strong":{fontWeight:"bold"},"hljs-link:hover":{textDecoration:"underline"},"hljs-quote":{color:"#4C566A"},"hljs-comment":{color:"#4C566A"},"hljs-doctag":{color:"#8FBCBB"},"hljs-meta":{color:"#5E81AC"},"hljs-meta-keyword":{color:"#5E81AC"},"hljs-meta-string":{color:"#A3BE8C"},"hljs-attr":{color:"#8FBCBB"},"hljs-attribute":{color:"#D8DEE9"},"hljs-builtin-name":{color:"#81A1C1"},"hljs-name":{color:"#81A1C1"},"hljs-section":{color:"#88C0D0"},"hljs-tag":{color:"#81A1C1"},"hljs-variable":{color:"#D8DEE9"},"hljs-template-variable":{color:"#D8DEE9"},"hljs-template-tag":{color:"#5E81AC"},"abnf .hljs-attribute":{color:"#88C0D0"},"abnf .hljs-symbol":{color:"#EBCB8B"},"apache .hljs-attribute":{color:"#88C0D0"},"apache .hljs-section":{color:"#81A1C1"},"arduino .hljs-built_in":{color:"#88C0D0"},"aspectj .hljs-meta":{color:"#D08770"},"aspectj > .hljs-title":{color:"#88C0D0"},"bnf .hljs-attribute":{color:"#8FBCBB"},"clojure .hljs-name":{color:"#88C0D0"},"clojure .hljs-symbol":{color:"#EBCB8B"},"coq .hljs-built_in":{color:"#88C0D0"},"cpp .hljs-meta-string":{color:"#8FBCBB"},"css .hljs-built_in":{color:"#88C0D0"},"css .hljs-keyword":{color:"#D08770"},"diff .hljs-meta":{color:"#8FBCBB"},"ebnf .hljs-attribute":{color:"#8FBCBB"},"glsl .hljs-built_in":{color:"#88C0D0"},"groovy .hljs-meta:not(:first-child)":{color:"#D08770"},"haxe .hljs-meta":{color:"#D08770"},"java .hljs-meta":{color:"#D08770"},"ldif .hljs-attribute":{color:"#8FBCBB"},"lisp .hljs-name":{color:"#88C0D0"},"lua .hljs-built_in":{color:"#88C0D0"},"moonscript .hljs-built_in":{color:"#88C0D0"},"nginx .hljs-attribute":{color:"#88C0D0"},"nginx .hljs-section":{color:"#5E81AC"},"pf .hljs-built_in":{color:"#88C0D0"},"processing .hljs-built_in":{color:"#88C0D0"},"scss .hljs-keyword":{color:"#81A1C1"},"stylus .hljs-keyword":{color:"#81A1C1"},"swift .hljs-meta":{color:"#D08770"},"vim .hljs-built_in":{color:"#88C0D0",fontStyle:"italic"},"yaml .hljs-meta":{color:"#D08770"}},obsidian:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#282b2e",color:"#e0e2e4"},"hljs-keyword":{color:"#93c763",fontWeight:"bold"},"hljs-selector-tag":{color:"#93c763",fontWeight:"bold"},"hljs-literal":{color:"#93c763",fontWeight:"bold"},"hljs-selector-id":{color:"#93c763"},"hljs-number":{color:"#ffcd22"},"hljs-attribute":{color:"#668bb0"},"hljs-code":{color:"white"},"hljs-class .hljs-title":{color:"white"},"hljs-section":{color:"white",fontWeight:"bold"},"hljs-regexp":{color:"#d39745"},"hljs-link":{color:"#d39745"},"hljs-meta":{color:"#557182"},"hljs-tag":{color:"#8cbbad"},"hljs-name":{color:"#8cbbad",fontWeight:"bold"},"hljs-bullet":{color:"#8cbbad"},"hljs-subst":{color:"#8cbbad"},"hljs-emphasis":{color:"#8cbbad"},"hljs-type":{color:"#8cbbad",fontWeight:"bold"},"hljs-built_in":{color:"#8cbbad"},"hljs-selector-attr":{color:"#8cbbad"},"hljs-selector-pseudo":{color:"#8cbbad"},"hljs-addition":{color:"#8cbbad"},"hljs-variable":{color:"#8cbbad"},"hljs-template-tag":{color:"#8cbbad"},"hljs-template-variable":{color:"#8cbbad"},"hljs-string":{color:"#ec7600"},"hljs-symbol":{color:"#ec7600"},"hljs-comment":{color:"#818e96"},"hljs-quote":{color:"#818e96"},"hljs-deletion":{color:"#818e96"},"hljs-selector-class":{color:"#A082BD"},"hljs-doctag":{fontWeight:"bold"},"hljs-title":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"}},"tomorrow-night":{"hljs-comment":{color:"#969896"},"hljs-quote":{color:"#969896"},"hljs-variable":{color:"#cc6666"},"hljs-template-variable":{color:"#cc6666"},"hljs-tag":{color:"#cc6666"},"hljs-name":{color:"#cc6666"},"hljs-selector-id":{color:"#cc6666"},"hljs-selector-class":{color:"#cc6666"},"hljs-regexp":{color:"#cc6666"},"hljs-deletion":{color:"#cc6666"},"hljs-number":{color:"#de935f"},"hljs-built_in":{color:"#de935f"},"hljs-builtin-name":{color:"#de935f"},"hljs-literal":{color:"#de935f"},"hljs-type":{color:"#de935f"},"hljs-params":{color:"#de935f"},"hljs-meta":{color:"#de935f"},"hljs-link":{color:"#de935f"},"hljs-attribute":{color:"#f0c674"},"hljs-string":{color:"#b5bd68"},"hljs-symbol":{color:"#b5bd68"},"hljs-bullet":{color:"#b5bd68"},"hljs-addition":{color:"#b5bd68"},"hljs-title":{color:"#81a2be"},"hljs-section":{color:"#81a2be"},"hljs-keyword":{color:"#b294bb"},"hljs-selector-tag":{color:"#b294bb"},hljs:{display:"block",overflowX:"auto",background:"#1d1f21",color:"#c5c8c6",padding:"0.5em"},"hljs-emphasis":{fontStyle:"italic"},"hljs-strong":{fontWeight:"bold"}}},X=o()(Z),ee=function(e){return i()(X).call(X,e)?Z[e]:(console.warn("Request style '".concat(e,"' is not available, returning default instead")),Q)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.File=t.Blob=t.FormData=void 0;const r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window;t.FormData=r.FormData,t.Blob=r.Blob,t.File=r.File},function(e,t){var n=Function.prototype,r=n.apply,o=n.bind,a=n.call;e.exports="object"==typeof Reflect&&Reflect.apply||(o?a.bind(r):function(){return a.apply(r,arguments)})},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(58);e.exports=r("navigator","userAgent")||""},function(e,t){e.exports=!0},function(e,t){},function(e,t,n){var r,o=n(51),a=n(218),i=n(221),u=n(150),s=n(335),c=n(214),l=n(173),f=l("IE_PROTO"),p=function(){},h=function(e){return" drf-yasg-1.20.1/src/drf_yasg/templates/drf-yasg/redoc.html000066400000000000000000000027531416705305200234020ustar00rootroot00000000000000{% load static %} {% block title %}{{ title }}{% endblock %} {% block extra_head %} {# -- Add any extra HTML heads tags here - except scripts and styles -- #} {% endblock %} {% block favicon %} {# -- Maybe replace the favicon -- #} {% endblock %} {% block main_styles %} {% endblock %} {% block extra_styles %} {# -- Add any additional CSS scripts here -- #} {% endblock %} {% block extra_body %} {# -- Add any header/body markup here (rendered BEFORE the swagger-ui/redoc element) -- #} {% endblock %}
{% block footer %} {# -- Add any footer markup here (rendered AFTER the swagger-ui/redoc element) -- #} {% endblock %} {% block main_scripts %} {% endblock %} {% block extra_scripts %} {# -- Add any additional scripts here -- #} {% endblock %} drf-yasg-1.20.1/src/drf_yasg/templates/drf-yasg/swagger-ui.html000066400000000000000000000064251416705305200243600ustar00rootroot00000000000000{% load static %} {% block title %}{{ title }}{% endblock %} {% block extra_head %} {# -- Add any extra HTML heads tags here - except scripts and styles -- #} {% endblock %} {% block favicon %} {# -- Maybe replace the favicon -- #} {% endblock %} {% block main_styles %} {% endblock %} {% block extra_styles %} {# -- Add any additional CSS scripts here -- #} {% endblock %} {% block extra_body %} {# -- Add any header/body markup here (rendered BEFORE the swagger-ui/redoc element) -- #} {% endblock %}
{% block footer %} {# -- Add any footer markup here (rendered AFTER the swagger-ui/redoc element) -- #} {% endblock %} {% block main_scripts %} {% endblock %} {% block extra_scripts %} {# -- Add any additional scripts here -- #} {% endblock %}
{% if USE_SESSION_AUTH %} {% endif %} drf-yasg-1.20.1/src/drf_yasg/utils.py000066400000000000000000000566541416705305200174310ustar00rootroot00000000000000import inspect import logging import sys import textwrap from collections import OrderedDict from decimal import Decimal from django.db import models from django.utils.encoding import force_str from rest_framework import serializers, status from rest_framework.mixins import DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin from rest_framework.parsers import FileUploadParser from rest_framework.request import is_form_media_type from rest_framework.settings import api_settings as rest_framework_settings from rest_framework.utils import encoders, json from rest_framework.views import APIView from .app_settings import swagger_settings logger = logging.getLogger(__name__) class no_body(object): """Used as a sentinel value to forcibly remove the body of a request via :func:`.swagger_auto_schema`.""" pass class unset(object): """Used as a sentinel value for function parameters not set by the caller where ``None`` would be a valid value.""" pass def swagger_auto_schema(method=None, methods=None, auto_schema=unset, request_body=None, query_serializer=None, manual_parameters=None, operation_id=None, operation_description=None, operation_summary=None, security=None, deprecated=None, responses=None, field_inspectors=None, filter_inspectors=None, paginator_inspectors=None, tags=None, **extra_overrides): """Decorate a view method to customize the :class:`.Operation` object generated from it. `method` and `methods` are mutually exclusive and must only be present when decorating a view method that accepts more than one HTTP request method. The `auto_schema` and `operation_description` arguments take precedence over view- or method-level values. :param str method: for multi-method views, the http method the options should apply to :param list[str] methods: for multi-method views, the http methods the options should apply to :param drf_yasg.inspectors.SwaggerAutoSchema auto_schema: custom class to use for generating the Operation object; this overrides both the class-level ``swagger_schema`` attribute and the ``DEFAULT_AUTO_SCHEMA_CLASS`` setting, and can be set to ``None`` to prevent this operation from being generated :param request_body: custom request body which will be used as the ``schema`` property of a :class:`.Parameter` with ``in: 'body'``. A Schema or SchemaRef is not valid if this request consumes form-data, because ``form`` and ``body`` parameters are mutually exclusive in an :class:`.Operation`. If you need to set custom ``form`` parameters, you can use the `manual_parameters` argument. If a ``Serializer`` class or instance is given, it will be automatically converted into a :class:`.Schema` used as a ``body`` :class:`.Parameter`, or into a list of ``form`` :class:`.Parameter`\\ s, as appropriate. :type request_body: drf_yasg.openapi.Schema or drf_yasg.openapi.SchemaRef or rest_framework.serializers.Serializer or type[no_body] :param rest_framework.serializers.Serializer query_serializer: if you use a ``Serializer`` to parse query parameters, you can pass it here and have :class:`.Parameter` objects be generated automatically from it. If any ``Field`` on the serializer cannot be represented as a ``query`` :class:`.Parameter` (e.g. nested Serializers, file fields, ...), the schema generation will fail with an error. Schema generation will also fail if the name of any Field on the `query_serializer` conflicts with parameters generated by ``filter_backends`` or ``paginator``. :param list[drf_yasg.openapi.Parameter] manual_parameters: a list of manual parameters to override the automatically generated ones :class:`.Parameter`\\ s are identified by their (``name``, ``in``) combination, and any parameters given here will fully override automatically generated parameters if they collide. It is an error to supply ``form`` parameters when the request does not consume form-data. :param str operation_id: operation ID override; the operation ID must be unique across the whole API :param str operation_description: operation description override :param str operation_summary: operation summary string :param list[dict] security: security requirements override; used to specify which authentication mechanism is required to call this API; an empty list marks the endpoint as unauthenticated (i.e. removes all accepted authentication schemes), and ``None`` will inherit the top-level security requirements :param bool deprecated: deprecation status for operation :param responses: a dict of documented manual responses keyed on response status code. If no success (``2xx``) response is given, one will automatically be generated from the request body and http method. If any ``2xx`` response is given the automatic response is suppressed. * if a plain string is given as value, a :class:`.Response` with no body and that string as its description will be generated * if ``None`` is given as a value, the response is ignored; this is mainly useful for disabling default 2xx responses, i.e. ``responses={200: None, 302: 'something'}`` * if a :class:`.Schema`, :class:`.SchemaRef` is given, a :class:`.Response` with the schema as its body and an empty description will be generated * a ``Serializer`` class or instance will be converted into a :class:`.Schema` and treated as above * a :class:`.Response` object will be used as-is; however if its ``schema`` attribute is a ``Serializer``, it will automatically be converted into a :class:`.Schema` :type responses: dict[int or str, (drf_yasg.openapi.Schema or drf_yasg.openapi.SchemaRef or drf_yasg.openapi.Response or str or rest_framework.serializers.Serializer)] :param list[type[drf_yasg.inspectors.FieldInspector]] field_inspectors: extra serializer and field inspectors; these will be tried before :attr:`.ViewInspector.field_inspectors` on the :class:`.inspectors.SwaggerAutoSchema` :param list[type[drf_yasg.inspectors.FilterInspector]] filter_inspectors: extra filter inspectors; these will be tried before :attr:`.ViewInspector.filter_inspectors` on the :class:`.inspectors.SwaggerAutoSchema` :param list[type[drf_yasg.inspectors.PaginatorInspector]] paginator_inspectors: extra paginator inspectors; these will be tried before :attr:`.ViewInspector.paginator_inspectors` on the :class:`.inspectors.SwaggerAutoSchema` :param list[str] tags: tags override :param extra_overrides: extra values that will be saved into the ``overrides`` dict; these values will be available in the handling :class:`.inspectors.SwaggerAutoSchema` instance via ``self.overrides`` """ def decorator(view_method): assert not any(hm in extra_overrides for hm in APIView.http_method_names), "HTTP method names not allowed here" data = { 'request_body': request_body, 'query_serializer': query_serializer, 'manual_parameters': manual_parameters, 'operation_id': operation_id, 'operation_summary': operation_summary, 'deprecated': deprecated, 'operation_description': operation_description, 'security': security, 'responses': responses, 'filter_inspectors': list(filter_inspectors) if filter_inspectors else None, 'paginator_inspectors': list(paginator_inspectors) if paginator_inspectors else None, 'field_inspectors': list(field_inspectors) if field_inspectors else None, 'tags': list(tags) if tags else None, } data = filter_none(data) if auto_schema is not unset: data['auto_schema'] = auto_schema data.update(extra_overrides) if not data: # pragma: no cover # no overrides to set, no use in doing more work return view_method # if the method is an @action, it will have a bind_to_methods attribute, or a mapping attribute for drf>3.8 bind_to_methods = getattr(view_method, 'bind_to_methods', []) mapping = getattr(view_method, 'mapping', {}) mapping_methods = [mth for mth, name in mapping.items() if name == view_method.__name__] action_http_methods = bind_to_methods + mapping_methods # if the method is actually a function based view (@api_view), it will have a 'cls' attribute view_cls = getattr(view_method, 'cls', None) api_view_http_methods = [m for m in getattr(view_cls, 'http_method_names', []) if hasattr(view_cls, m)] available_http_methods = api_view_http_methods + action_http_methods existing_data = getattr(view_method, '_swagger_auto_schema', {}) _methods = methods if methods or method: assert available_http_methods, "`method` or `methods` can only be specified on @action or @api_view views" assert bool(methods) != bool(method), "specify either method or methods" assert not isinstance(methods, str), "`methods` expects to receive a list of methods;" \ " use `method` for a single argument" if method: _methods = [method.lower()] else: _methods = [mth.lower() for mth in methods] assert all(mth in available_http_methods for mth in _methods), "http method not bound to view" assert not any(mth in existing_data for mth in _methods), "http method defined multiple times" if available_http_methods: # action or api_view assert bool(api_view_http_methods) != bool(action_http_methods), "this should never happen" if len(available_http_methods) > 1: assert _methods, \ "on multi-method api_view or action, you must specify " \ "swagger_auto_schema on a per-method basis using one of the `method` or `methods` arguments" else: # for a single-method view we assume that single method as the decorator target _methods = _methods or available_http_methods assert not any(hasattr(getattr(view_cls, mth, None), '_swagger_auto_schema') for mth in _methods), \ "swagger_auto_schema applied twice to method" assert not any(mth in existing_data for mth in _methods), "swagger_auto_schema applied twice to method" existing_data.update((mth.lower(), data) for mth in _methods) view_method._swagger_auto_schema = existing_data else: assert not _methods, \ "the methods argument should only be specified when decorating an action; " \ "you should also ensure that you put the swagger_auto_schema decorator " \ "AFTER (above) the _route decorator" assert not existing_data, "swagger_auto_schema applied twice to method" view_method._swagger_auto_schema = data return view_method return decorator def swagger_serializer_method(serializer_or_field): """ Decorates the method of a serializers.SerializerMethodField to hint as to how Swagger should be generated for this field. :param serializer_or_field: ``Serializer``/``Field`` class or instance :return: """ def decorator(serializer_method): # stash the serializer for SerializerMethodFieldInspector to find serializer_method._swagger_serializer = serializer_or_field return serializer_method return decorator def is_list_view(path, method, view): """Check if the given path/method appears to represent a list view (as opposed to a detail/instance view). :param str path: view path :param str method: http method :param APIView view: target view :rtype: bool """ # for ViewSets, it could be the default 'list' action, or an @action(detail=False) action = getattr(view, 'action', '') method = getattr(view, action, None) or method detail = getattr(method, 'detail', None) suffix = getattr(view, 'suffix', None) if action in ('list', 'create') or detail is False or suffix == 'List': return True if action in ('retrieve', 'update', 'partial_update', 'destroy') or detail is True or suffix == 'Instance': # a detail action is surely not a list route return False if isinstance(view, ListModelMixin): return True # for GenericAPIView, if it's a detail view it can't also be a list view if isinstance(view, (RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin)): return False # if the last component in the path is parameterized it's probably not a list view path_components = path.strip('/').split('/') if path_components and '{' in path_components[-1]: return False # otherwise assume it's a list view return True def guess_response_status(method): if method == 'post': return status.HTTP_201_CREATED elif method == 'delete': return status.HTTP_204_NO_CONTENT else: return status.HTTP_200_OK def param_list_to_odict(parameters): """Transform a list of :class:`.Parameter` objects into an ``OrderedDict`` keyed on the ``(name, in_)`` tuple of each parameter. Raises an ``AssertionError`` if `parameters` contains duplicate parameters (by their name + in combination). :param list[drf_yasg.openapi.Parameter] parameters: the list of parameters :return: `parameters` keyed by ``(name, in_)`` :rtype: dict[(str,str),drf_yasg.openapi.Parameter] """ result = OrderedDict(((param.name, param.in_), param) for param in parameters) assert len(result) == len(parameters), "duplicate Parameters found" return result def merge_params(parameters, overrides): """Merge `overrides` into `parameters`. This is the same as appending `overrides` to `parameters`, but any element of `parameters` whose ``(name, in_)`` tuple collides with an element in `overrides` is replaced by it. Raises an ``AssertionError`` if either list contains duplicate parameters. :param list[drf_yasg.openapi.Parameter] parameters: initial parameters :param list[drf_yasg.openapi.Parameter] overrides: overriding parameters :return: merged list :rtype: list[drf_yasg.openapi.Parameter] """ parameters = param_list_to_odict(parameters) parameters.update(param_list_to_odict(overrides)) return list(parameters.values()) def filter_none(obj): """Remove ``None`` values from tuples, lists or dictionaries. Return other objects as-is. :param obj: the object :return: collection with ``None`` values removed """ if obj is None: return None new_obj = None if isinstance(obj, dict): new_obj = type(obj)((k, v) for k, v in obj.items() if k is not None and v is not None) if isinstance(obj, (list, tuple)): new_obj = type(obj)(v for v in obj if v is not None) if new_obj is not None and len(new_obj) != len(obj): return new_obj # pragma: no cover return obj def force_serializer_instance(serializer): """Force `serializer` into a ``Serializer`` instance. If it is not a ``Serializer`` class or instance, raises an assertion error. :param serializer: serializer class or instance :type serializer: serializers.BaseSerializer or type[serializers.BaseSerializer] :return: serializer instance :rtype: serializers.BaseSerializer """ if inspect.isclass(serializer): assert issubclass(serializer, serializers.BaseSerializer), "Serializer required, not %s" % serializer.__name__ return serializer() assert isinstance(serializer, serializers.BaseSerializer), \ "Serializer class or instance required, not %s" % type(serializer).__name__ return serializer def get_serializer_class(serializer): """Given a ``Serializer`` class or intance, return the ``Serializer`` class. If `serializer` is not a ``Serializer`` class or instance, raises an assertion error. :param serializer: serializer class or instance, or ``None`` :return: serializer class :rtype: type[serializers.BaseSerializer] """ if serializer is None: return None if inspect.isclass(serializer): assert issubclass(serializer, serializers.BaseSerializer), "Serializer required, not %s" % serializer.__name__ return serializer assert isinstance(serializer, serializers.BaseSerializer), \ "Serializer class or instance required, not %s" % type(serializer).__name__ return type(serializer) def get_object_classes(classes_or_instances, expected_base_class=None): """Given a list of instances or class objects, return the list of their classes. :param classes_or_instances: mixed list to parse :type classes_or_instances: list[type or object] :param expected_base_class: if given, only subclasses or instances of this type will be returned :type expected_base_class: type :return: list of classes :rtype: list """ classes_or_instances = classes_or_instances or [] result = [] for obj in classes_or_instances: if inspect.isclass(obj): if not expected_base_class or issubclass(obj, expected_base_class): result.append(obj) else: if not expected_base_class or isinstance(obj, expected_base_class): result.append(type(obj)) return result def get_consumes(parser_classes): """Extract ``consumes`` MIME types from a list of parser classes. :param list parser_classes: parser classes :type parser_classes: list[rest_framework.parsers.BaseParser or type[rest_framework.parsers.BaseParser]] :return: MIME types for ``consumes`` :rtype: list[str] """ parser_classes = get_object_classes(parser_classes) parser_classes = [pc for pc in parser_classes if not issubclass(pc, FileUploadParser)] media_types = [parser.media_type for parser in parser_classes or []] non_form_media_types = [encoding for encoding in media_types if not is_form_media_type(encoding)] # Because swagger Parameter objects don't support complex data types (nested objects, arrays), # we can't use those unless we are sure the view *only* accepts form data # This means that a view won't support file upload in swagger unless it explicitly # sets its parser classes to include only form parsers if len(non_form_media_types) == 0: return media_types # If the form accepts both form data and another type, like json (which is the default config), # we will render its input as a Schema and thus it file parameters will be read-only return non_form_media_types def get_produces(renderer_classes): """Extract ``produces`` MIME types from a list of renderer classes. :param list renderer_classes: renderer classes :type renderer_classes: list[rest_framework.renderers.BaseRenderer or type[rest_framework.renderers.BaseRenderer]] :return: MIME types for ``produces`` :rtype: list[str] """ renderer_classes = get_object_classes(renderer_classes) media_types = [renderer.media_type for renderer in renderer_classes or []] media_types = [encoding for encoding in media_types if not any(excluded in encoding for excluded in swagger_settings.EXCLUDED_MEDIA_TYPES)] return media_types def decimal_as_float(field): """Returns true if ``field`` is a django-rest-framework DecimalField and its ``coerce_to_string`` attribute or the ``COERCE_DECIMAL_TO_STRING`` setting is set to ``False``. :rtype: bool """ if isinstance(field, serializers.DecimalField) or isinstance(field, models.DecimalField): return not getattr(field, 'coerce_to_string', rest_framework_settings.COERCE_DECIMAL_TO_STRING) return False def get_serializer_ref_name(serializer): """Get serializer's ref_name (or None for ModelSerializer if it is named 'NestedSerializer') :param serializer: Serializer instance :return: Serializer's ``ref_name`` or ``None`` for inline serializer :rtype: str or None """ serializer_meta = getattr(serializer, 'Meta', None) serializer_name = type(serializer).__name__ if hasattr(serializer_meta, 'ref_name'): ref_name = serializer_meta.ref_name elif serializer_name == 'NestedSerializer' and isinstance(serializer, serializers.ModelSerializer): logger.debug("Forcing inline output for ModelSerializer named 'NestedSerializer':\n" + str(serializer)) ref_name = None else: ref_name = serializer_name if ref_name.endswith('Serializer'): ref_name = ref_name[:-len('Serializer')] return ref_name def force_real_str(s, encoding='utf-8', strings_only=False, errors='strict'): """ Force `s` into a ``str`` instance. Fix for https://github.com/axnsan12/drf-yasg/issues/159 """ if s is not None: s = force_str(s, encoding, strings_only, errors) if type(s) != str: s = '' + s # Remove common indentation to get the correct Markdown rendering s = textwrap.dedent(s) return s def field_value_to_representation(field, value): """Convert a python value related to a field (default, choices, etc.) into its OpenAPI-compatible representation. :param serializers.Field field: field associated with the value :param object value: value :return: the converted value """ value = field.to_representation(value) if isinstance(value, Decimal): if decimal_as_float(field): value = float(value) else: value = str(value) # JSON roundtrip ensures that the value is valid JSON; # for example, sets and tuples get transformed into lists return json.loads(json.dumps(value, cls=encoders.JSONEncoder)) def get_field_default(field): """ Get the default value for a field, converted to a JSON-compatible value while properly handling callables. :param field: field instance :return: default value """ default = getattr(field, 'default', serializers.empty) if default is not serializers.empty: if callable(default): try: if hasattr(default, 'set_context'): default.set_context(field) if getattr(default, 'requires_context', False): default = default(field) else: default = default() except Exception: # pragma: no cover logger.warning("default for %s is callable but it raised an exception when " "called; 'default' will not be set on schema", field, exc_info=True) default = serializers.empty if default is not serializers.empty and default is not None: try: default = field_value_to_representation(field, default) except Exception: # pragma: no cover logger.warning("'default' on schema for %s will not be set because " "to_representation raised an exception", field, exc_info=True) default = serializers.empty return default def dict_has_ordered_keys(obj): """Check if a given object is a dict that maintains insertion order. :param obj: the dict object to check :rtype: bool """ if sys.version_info >= (3, 7): # the Python 3.7 language spec says that dict must maintain insertion order. return isinstance(obj, dict) return isinstance(obj, OrderedDict) drf-yasg-1.20.1/src/drf_yasg/views.py000066400000000000000000000157421416705305200174170ustar00rootroot00000000000000import warnings from functools import WRAPPER_ASSIGNMENTS, wraps from django.utils.cache import add_never_cache_headers from django.views.decorators.cache import cache_page from django.views.decorators.vary import vary_on_headers from rest_framework import exceptions from rest_framework.response import Response from rest_framework.settings import api_settings from rest_framework.views import APIView from .app_settings import swagger_settings from .renderers import ( OpenAPIRenderer, ReDocOldRenderer, ReDocRenderer, SwaggerJSONRenderer, SwaggerUIRenderer, SwaggerYAMLRenderer, _SpecRenderer ) SPEC_RENDERERS = (SwaggerYAMLRenderer, SwaggerJSONRenderer, OpenAPIRenderer) UI_RENDERERS = { 'swagger': (SwaggerUIRenderer, ReDocRenderer), 'redoc': (ReDocRenderer, SwaggerUIRenderer), 'redoc-old': (ReDocOldRenderer, ReDocRenderer, SwaggerUIRenderer), } def deferred_never_cache(view_func): """ Decorator that adds headers to a response so that it will never be cached. """ @wraps(view_func, assigned=WRAPPER_ASSIGNMENTS) def _wrapped_view_func(request, *args, **kwargs): response = view_func(request, *args, **kwargs) # It is necessary to defer the add_never_cache_headers call because # cache_page also defers its cache update operation; if we do not defer # this, cache_page will give up because it will see and obey the "never # cache" headers def callback(response): add_never_cache_headers(response) return response response.add_post_render_callback(callback) return response return _wrapped_view_func def get_schema_view(info=None, url=None, patterns=None, urlconf=None, public=False, validators=None, generator_class=None, authentication_classes=None, permission_classes=None): """Create a SchemaView class with default renderers and generators. :param .Info info: information about the API; if omitted, defaults to :ref:`DEFAULT_INFO ` :param str url: same as :class:`.OpenAPISchemaGenerator` :param patterns: same as :class:`.OpenAPISchemaGenerator` :param urlconf: same as :class:`.OpenAPISchemaGenerator` :param bool public: if False, includes only the endpoints that are accesible by the user viewing the schema :param list validators: a list of validator names to apply; the only allowed value is ``ssv``, for now :param type generator_class: schema generator class to use; should be a subclass of :class:`.OpenAPISchemaGenerator` :param list authentication_classes: authentication classes for the schema view itself :param list permission_classes: permission classes for the schema view itself :return: SchemaView class :rtype: type[drf_yasg.views.SchemaView] """ _public = public _generator_class = generator_class or swagger_settings.DEFAULT_GENERATOR_CLASS _auth_classes = authentication_classes if _auth_classes is None: _auth_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES _perm_classes = permission_classes if _perm_classes is None: _perm_classes = api_settings.DEFAULT_PERMISSION_CLASSES info = info or swagger_settings.DEFAULT_INFO validators = validators or [] _spec_renderers = tuple(renderer.with_validators(validators) for renderer in SPEC_RENDERERS) class SchemaView(APIView): _ignore_model_permissions = True schema = None # exclude from schema public = _public generator_class = _generator_class authentication_classes = _auth_classes permission_classes = _perm_classes renderer_classes = _spec_renderers def get(self, request, version='', format=None): version = request.version or version or '' if isinstance(request.accepted_renderer, _SpecRenderer): generator = self.generator_class(info, version, url, patterns, urlconf) else: generator = self.generator_class(info, version, url, patterns=[]) schema = generator.get_schema(request, self.public) if schema is None: raise exceptions.PermissionDenied() # pragma: no cover return Response(schema) @classmethod def apply_cache(cls, view, cache_timeout, cache_kwargs): """Override this method to customize how caching is applied to the view. Arguments described in :meth:`.as_cached_view`. """ view = vary_on_headers('Cookie', 'Authorization')(view) view = cache_page(cache_timeout, **cache_kwargs)(view) view = deferred_never_cache(view) # disable in-browser caching return view @classmethod def as_cached_view(cls, cache_timeout=0, cache_kwargs=None, **initkwargs): """ Calls .as_view() and wraps the result in a cache_page decorator. See https://docs.djangoproject.com/en/dev/topics/cache/ :param int cache_timeout: same as cache_page; set to 0 for no cache :param dict cache_kwargs: dictionary of kwargs to be passed to cache_page :param initkwargs: kwargs for .as_view() :return: a view instance """ cache_kwargs = cache_kwargs or {} view = cls.as_view(**initkwargs) if cache_timeout != 0: view = cls.apply_cache(view, cache_timeout, cache_kwargs) elif cache_kwargs: warnings.warn("cache_kwargs ignored because cache_timeout is 0 (disabled)") return view @classmethod def without_ui(cls, cache_timeout=0, cache_kwargs=None): """ Instantiate this view with just JSON and YAML renderers, optionally wrapped with cache_page. See https://docs.djangoproject.com/en/dev/topics/cache/. :param int cache_timeout: same as cache_page; set to 0 for no cache :param dict cache_kwargs: dictionary of kwargs to be passed to cache_page :return: a view instance """ return cls.as_cached_view(cache_timeout, cache_kwargs, renderer_classes=_spec_renderers) @classmethod def with_ui(cls, renderer='swagger', cache_timeout=0, cache_kwargs=None): """ Instantiate this view with a Web UI renderer, optionally wrapped with cache_page. See https://docs.djangoproject.com/en/dev/topics/cache/. :param str renderer: UI renderer; allowed values are ``swagger``, ``redoc`` :param int cache_timeout: same as cache_page; set to 0 for no cache :param dict cache_kwargs: dictionary of kwargs to be passed to cache_page :return: a view instance """ assert renderer in UI_RENDERERS, "supported default renderers are " + ", ".join(UI_RENDERERS) renderer_classes = UI_RENDERERS[renderer] + _spec_renderers return cls.as_cached_view(cache_timeout, cache_kwargs, renderer_classes=renderer_classes) return SchemaView drf-yasg-1.20.1/testproj/000077500000000000000000000000001416705305200151645ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/articles/000077500000000000000000000000001416705305200167725ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/articles/__init__.py000066400000000000000000000000001416705305200210710ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/articles/migrations/000077500000000000000000000000001416705305200211465ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/articles/migrations/0001_initial.py000066400000000000000000000050521416705305200236130ustar00rootroot00000000000000# Generated by Django 2.0.1 on 2018-03-18 18:32 from django.conf import settings from django.db import migrations, models import django.db.models.deletion import uuid class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Article', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(help_text='title model help_text', max_length=255, unique=True)), ('body', models.TextField(help_text='article model help_text', max_length=5000)), ('slug', models.SlugField(blank=True, help_text='slug model help_text', unique=True)), ('date_created', models.DateTimeField(auto_now_add=True)), ('date_modified', models.DateTimeField(auto_now=True)), ('article_type', models.PositiveSmallIntegerField(choices=[(1, 'first'), (2, 'second'), (3, 'third'), (7, 'seven'), (8, 'eight')], help_text='IntegerField declared on model with choices=(...) and exposed via ModelSerializer', null=True)), ('cover', models.ImageField(blank=True, upload_to='article/original/')), ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='articles', to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='ArticleGroup', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), ('title', models.CharField(help_text='title model help_text', max_length=255, unique=True)), ('slug', models.SlugField(blank=True, help_text='slug model help_text', unique=True)), ], ), migrations.AddField( model_name='article', name='group', field=models.ForeignKey(blank=True, default=None, on_delete=django.db.models.deletion.PROTECT, related_name='articles_as_main', to='articles.ArticleGroup'), ), migrations.AddField( model_name='article', name='original_group', field=models.ForeignKey(blank=True, default=None, on_delete=django.db.models.deletion.PROTECT, related_name='articles_as_original', to='articles.ArticleGroup'), ), ] drf-yasg-1.20.1/testproj/articles/migrations/0002_article_read_only_nullable.py000066400000000000000000000006321416705305200275170ustar00rootroot00000000000000# Generated by Django 2.1.5 on 2019-03-02 03:51 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('articles', '0001_initial'), ] operations = [ migrations.AddField( model_name='article', name='read_only_nullable', field=models.CharField(blank=True, max_length=20, null=True), ), ] drf-yasg-1.20.1/testproj/articles/migrations/__init__.py000066400000000000000000000000001416705305200232450ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/articles/models.py000066400000000000000000000031451416705305200206320ustar00rootroot00000000000000import uuid from django.db import models class Article(models.Model): title = models.CharField(help_text="title model help_text", max_length=255, blank=False, unique=True) body = models.TextField(help_text="article model help_text", max_length=5000, blank=False) slug = models.SlugField(help_text="slug model help_text", unique=True, blank=True) date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) author = models.ForeignKey('auth.User', related_name='articles', on_delete=models.CASCADE) article_type = models.PositiveSmallIntegerField( help_text="IntegerField declared on model with choices=(...) and exposed via ModelSerializer", choices=((1, "first"), (2, "second"), (3, "third"), (7, "seven"), (8, "eight")), null=True ) cover = models.ImageField(upload_to='article/original/', blank=True) group = models.ForeignKey('ArticleGroup', related_name='articles_as_main', blank=True, default=None, on_delete=models.PROTECT) original_group = models.ForeignKey('ArticleGroup', related_name='articles_as_original', blank=True, default=None, on_delete=models.PROTECT) read_only_nullable = models.CharField(max_length=20, null=True, blank=True) class ArticleGroup(models.Model): uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) title = models.CharField(help_text="title model help_text", max_length=255, blank=False, unique=True) slug = models.SlugField(help_text="slug model help_text", unique=True, blank=True) drf-yasg-1.20.1/testproj/articles/serializers.py000066400000000000000000000041111416705305200216750ustar00rootroot00000000000000from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from articles.models import Article, ArticleGroup class ArticleSerializer(serializers.ModelSerializer): references = serializers.DictField( help_text=_("this is a really bad example"), child=serializers.URLField(help_text="but i needed to test these 2 fields somehow"), read_only=True, ) uuid = serializers.UUIDField(help_text="should articles have UUIDs?", read_only=True) cover_name = serializers.FileField(use_url=False, source='cover', required=True) group = serializers.SlugRelatedField(slug_field='uuid', queryset=ArticleGroup.objects.all()) original_group = serializers.SlugRelatedField(slug_field='uuid', read_only=True) class Meta: model = Article fields = ('title', 'author', 'body', 'slug', 'date_created', 'date_modified', 'read_only_nullable', 'references', 'uuid', 'cover', 'cover_name', 'article_type', 'group', 'original_group', ) read_only_fields = ('date_created', 'date_modified', 'references', 'uuid', 'cover_name', 'read_only_nullable') lookup_field = 'slug' extra_kwargs = { 'body': {'help_text': 'body serializer help_text'}, 'author': { 'default': serializers.CurrentUserDefault(), 'help_text': _("The ID of the user that created this article; if none is provided, " "defaults to the currently logged in user.") }, 'read_only_nullable': {'allow_null': True}, } class ImageUploadSerializer(serializers.Serializer): image_id = serializers.UUIDField(read_only=True) what_am_i_doing = serializers.RegexField( regex=r"^69$", help_text="test", default="69", allow_null=True ) image_styles = serializers.ListSerializer( child=serializers.ChoiceField(choices=['wide', 'tall', 'thumb', 'social']), help_text="Parameter with Items" ) upload = serializers.ImageField(help_text="image serializer help_text") drf-yasg-1.20.1/testproj/articles/urls.py000066400000000000000000000003541416705305200203330ustar00rootroot00000000000000from django.urls import include, path from rest_framework.routers import SimpleRouter from articles import views router = SimpleRouter() router.register('', views.ArticleViewSet) urlpatterns = [ path('', include(router.urls)), ] drf-yasg-1.20.1/testproj/articles/views.py000066400000000000000000000123601416705305200205030ustar00rootroot00000000000000import datetime from django.utils.decorators import method_decorator from django_filters.rest_framework import DjangoFilterBackend from rest_framework import viewsets from rest_framework.filters import OrderingFilter from rest_framework.pagination import LimitOffsetPagination from rest_framework.parsers import FileUploadParser, MultiPartParser from rest_framework.response import Response from articles import serializers from articles.models import Article from drf_yasg import openapi from drf_yasg.app_settings import swagger_settings from drf_yasg.inspectors import CoreAPICompatInspector, FieldInspector, NotHandled, SwaggerAutoSchema from drf_yasg.utils import no_body, swagger_auto_schema class DjangoFilterDescriptionInspector(CoreAPICompatInspector): def get_filter_parameters(self, filter_backend): if isinstance(filter_backend, DjangoFilterBackend): result = super(DjangoFilterDescriptionInspector, self).get_filter_parameters(filter_backend) for param in result: if not param.get('description', ''): param.description = "Filter the returned list by {field_name}".format(field_name=param.name) return result return NotHandled class NoSchemaTitleInspector(FieldInspector): def process_result(self, result, method_name, obj, **kwargs): # remove the `title` attribute of all Schema objects if isinstance(result, openapi.Schema.OR_REF): # traverse any references and alter the Schema object in place schema = openapi.resolve_ref(result, self.components) schema.pop('title', None) # no ``return schema`` here, because it would mean we always generate # an inline `object` instead of a definition reference # return back the same object that we got - i.e. a reference if we got a reference return result class NoTitleAutoSchema(SwaggerAutoSchema): field_inspectors = [NoSchemaTitleInspector] + swagger_settings.DEFAULT_FIELD_INSPECTORS class NoPagingAutoSchema(NoTitleAutoSchema): def should_page(self): return False class ArticlePagination(LimitOffsetPagination): default_limit = 5 max_limit = 25 @method_decorator(name='list', decorator=swagger_auto_schema( operation_description="description from swagger_auto_schema via method_decorator", filter_inspectors=[DjangoFilterDescriptionInspector], )) class ArticleViewSet(viewsets.ModelViewSet): """ ArticleViewSet class docstring retrieve: retrieve class docstring destroy: destroy class docstring partial_update: partial_update class docstring """ queryset = Article.objects.all() lookup_field = 'slug' lookup_value_regex = r'[a-z0-9]+(?:-[a-z0-9]+)' serializer_class = serializers.ArticleSerializer pagination_class = ArticlePagination filter_backends = (DjangoFilterBackend, OrderingFilter) filterset_fields = ('title',) # django-filter 1.1 compatibility; was renamed to filterset_fields in 2.0 # TODO: remove when dropping support for Django 1.11 filter_fields = filterset_fields ordering_fields = ('date_modified', 'date_created') ordering = ('date_created',) swagger_schema = NoTitleAutoSchema from rest_framework.decorators import action @swagger_auto_schema(auto_schema=NoPagingAutoSchema, filter_inspectors=[DjangoFilterDescriptionInspector]) @action(detail=False, methods=['get']) def today(self, request): today_min = datetime.datetime.combine(datetime.date.today(), datetime.time.min) today_max = datetime.datetime.combine(datetime.date.today(), datetime.time.max) articles = self.get_queryset().filter(date_created__range=(today_min, today_max)).all() serializer = self.serializer_class(articles, many=True) return Response(serializer.data) @swagger_auto_schema(method='get', operation_description="image GET description override") @swagger_auto_schema(method='post', request_body=serializers.ImageUploadSerializer) @swagger_auto_schema(method='delete', manual_parameters=[openapi.Parameter( name='delete_form_param', in_=openapi.IN_FORM, type=openapi.TYPE_INTEGER, description="this should not crash (form parameter on DELETE method)" )]) @action(detail=True, methods=['get', 'post', 'delete'], parser_classes=(MultiPartParser, FileUploadParser)) def image(self, request, slug=None): """ image method docstring """ pass @swagger_auto_schema(request_body=no_body, operation_id='no_body_test') def update(self, request, *args, **kwargs): """update method docstring""" return super(ArticleViewSet, self).update(request, *args, **kwargs) @swagger_auto_schema(operation_description="partial_update description override", responses={404: 'slug not found'}, operation_summary='partial_update summary', deprecated=True) def partial_update(self, request, *args, **kwargs): """partial_update method docstring""" return super(ArticleViewSet, self).partial_update(request, *args, **kwargs) def destroy(self, request, *args, **kwargs): """destroy method docstring""" return super(ArticleViewSet, self).destroy(request, *args, **kwargs) drf-yasg-1.20.1/testproj/manage.py000077500000000000000000000012051416705305200167670ustar00rootroot00000000000000#!/usr/bin/env python import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testproj.settings.local") try: from django.core.management import execute_from_command_line except ImportError: try: import django # noqa: F401 except ImportError: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) raise execute_from_command_line(sys.argv) drf-yasg-1.20.1/testproj/people/000077500000000000000000000000001416705305200164505ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/people/__init__.py000066400000000000000000000000001416705305200205470ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/people/apps.py000066400000000000000000000001271416705305200177650ustar00rootroot00000000000000from django.apps import AppConfig class PeopleConfig(AppConfig): name = 'people' drf-yasg-1.20.1/testproj/people/migrations/000077500000000000000000000000001416705305200206245ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/people/migrations/0001_initial.py000066400000000000000000000017151416705305200232730ustar00rootroot00000000000000# Generated by Django 2.0.1 on 2018-03-18 18:32 from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Identity', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('firstName', models.CharField(max_length=30, null=True)), ('lastName', models.CharField(max_length=30, null=True)), ], ), migrations.CreateModel( name='Person', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('identity', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='person', to='people.Identity')), ], ), ] drf-yasg-1.20.1/testproj/people/migrations/0002_rename_identity_fields.py000066400000000000000000000013271416705305200263500ustar00rootroot00000000000000# Generated by Django 2.1 on 2018-08-06 13:34 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('people', '0001_initial'), ] operations = [ migrations.AlterField( model_name='identity', name='lastName', field=models.CharField(help_text="Here's some HTML!", max_length=30, null=True), ), migrations.RenameField( model_name='identity', old_name='firstName', new_name='first_name', ), migrations.RenameField( model_name='identity', old_name='lastName', new_name='last_name', ), ] drf-yasg-1.20.1/testproj/people/migrations/__init__.py000066400000000000000000000000001416705305200227230ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/people/models.py000066400000000000000000000006321416705305200203060ustar00rootroot00000000000000from django.db import models from django.utils.safestring import mark_safe class Identity(models.Model): first_name = models.CharField(max_length=30, null=True) last_name = models.CharField(max_length=30, null=True, help_text=mark_safe("Here's some HTML!")) class Person(models.Model): identity = models.OneToOneField(Identity, related_name='person', on_delete=models.PROTECT) drf-yasg-1.20.1/testproj/people/serializers.py000066400000000000000000000010751416705305200213610ustar00rootroot00000000000000from rest_framework import serializers from .models import Identity, Person class IdentitySerializer(serializers.ModelSerializer): class Meta: model = Identity fields = '__all__' class PersonSerializer(serializers.ModelSerializer): identity = IdentitySerializer() class Meta: model = Person fields = '__all__' def create(self, validated_data): identity = Identity(**validated_data['identity']) identity.save() validated_data['identity'] = identity return super().create(validated_data) drf-yasg-1.20.1/testproj/people/urls.py000066400000000000000000000011241416705305200200050ustar00rootroot00000000000000from django.urls import path from .views import IdentityViewSet, PersonViewSet person_list = PersonViewSet.as_view({ 'get': 'list', 'post': 'create' }) person_detail = PersonViewSet.as_view({ 'get': 'retrieve', 'patch': 'partial_update', 'delete': 'destroy' }) identity_detail = IdentityViewSet.as_view({ 'get': 'retrieve', 'patch': 'partial_update', }) urlpatterns = ( path('', person_list, name='people-list'), path('', person_detail, name='person-detail'), path('/identity', identity_detail, name='person-identity'), ) drf-yasg-1.20.1/testproj/people/views.py000066400000000000000000000011301416705305200201520ustar00rootroot00000000000000from rest_framework import viewsets from rest_framework.pagination import BasePagination from .models import Identity, Person from .serializers import IdentitySerializer, PersonSerializer class UnknownPagination(BasePagination): paginator_query_args = ['unknown_paginator'] class PersonViewSet(viewsets.ModelViewSet): model = Person queryset = Person.objects serializer_class = PersonSerializer pagination_class = UnknownPagination class IdentityViewSet(viewsets.ModelViewSet): model = Identity queryset = Identity.objects serializer_class = IdentitySerializer drf-yasg-1.20.1/testproj/requirements.txt000066400000000000000000000000571416705305200204520ustar00rootroot00000000000000..[validation] -r ../requirements/testproj.txt drf-yasg-1.20.1/testproj/snippets/000077500000000000000000000000001416705305200170315ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/snippets/__init__.py000066400000000000000000000000001416705305200211300ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/snippets/admin.py000066400000000000000000000000351416705305200204710ustar00rootroot00000000000000# Register your models here. drf-yasg-1.20.1/testproj/snippets/migrations/000077500000000000000000000000001416705305200212055ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/snippets/migrations/0001_initial.py000066400000000000000000000304521416705305200236540ustar00rootroot00000000000000# Generated by Django 2.0.1 on 2018-03-18 18:32 from django.conf import settings from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Snippet', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', models.DateTimeField(auto_now_add=True)), ('title', models.CharField(blank=True, default='', max_length=100)), ('code', models.TextField(help_text='code model help text')), ('linenos', models.BooleanField(default=False)), ('language', models.CharField(choices=[('abap', 'ABAP'), ('abnf', 'ABNF'), ('ada', 'Ada'), ('adl', 'ADL'), ('agda', 'Agda'), ('aheui', 'Aheui'), ('ahk', 'autohotkey'), ('alloy', 'Alloy'), ('ampl', 'Ampl'), ('antlr', 'ANTLR'), ('antlr-as', 'ANTLR With ActionScript Target'), ('antlr-cpp', 'ANTLR With CPP Target'), ('antlr-csharp', 'ANTLR With C# Target'), ('antlr-java', 'ANTLR With Java Target'), ('antlr-objc', 'ANTLR With ObjectiveC Target'), ('antlr-perl', 'ANTLR With Perl Target'), ('antlr-python', 'ANTLR With Python Target'), ('antlr-ruby', 'ANTLR With Ruby Target'), ('apacheconf', 'ApacheConf'), ('apl', 'APL'), ('applescript', 'AppleScript'), ('arduino', 'Arduino'), ('as', 'ActionScript'), ('as3', 'ActionScript 3'), ('aspectj', 'AspectJ'), ('aspx-cs', 'aspx-cs'), ('aspx-vb', 'aspx-vb'), ('asy', 'Asymptote'), ('at', 'AmbientTalk'), ('autoit', 'AutoIt'), ('awk', 'Awk'), ('basemake', 'Base Makefile'), ('bash', 'Bash'), ('bat', 'Batchfile'), ('bbcode', 'BBCode'), ('bc', 'BC'), ('befunge', 'Befunge'), ('bib', 'BibTeX'), ('blitzbasic', 'BlitzBasic'), ('blitzmax', 'BlitzMax'), ('bnf', 'BNF'), ('boo', 'Boo'), ('boogie', 'Boogie'), ('brainfuck', 'Brainfuck'), ('bro', 'Bro'), ('bst', 'BST'), ('bugs', 'BUGS'), ('c', 'C'), ('c-objdump', 'c-objdump'), ('ca65', 'ca65 assembler'), ('cadl', 'cADL'), ('camkes', 'CAmkES'), ('capdl', 'CapDL'), ('capnp', "Cap'n Proto"), ('cbmbas', 'CBM BASIC V2'), ('ceylon', 'Ceylon'), ('cfc', 'Coldfusion CFC'), ('cfengine3', 'CFEngine3'), ('cfm', 'Coldfusion HTML'), ('cfs', 'cfstatement'), ('chai', 'ChaiScript'), ('chapel', 'Chapel'), ('cheetah', 'Cheetah'), ('cirru', 'Cirru'), ('clay', 'Clay'), ('clean', 'Clean'), ('clojure', 'Clojure'), ('clojurescript', 'ClojureScript'), ('cmake', 'CMake'), ('cobol', 'COBOL'), ('cobolfree', 'COBOLFree'), ('coffee-script', 'CoffeeScript'), ('common-lisp', 'Common Lisp'), ('componentpascal', 'Component Pascal'), ('console', 'Bash Session'), ('control', 'Debian Control file'), ('coq', 'Coq'), ('cpp', 'C++'), ('cpp-objdump', 'cpp-objdump'), ('cpsa', 'CPSA'), ('cr', 'Crystal'), ('crmsh', 'Crmsh'), ('croc', 'Croc'), ('cryptol', 'Cryptol'), ('csharp', 'C#'), ('csound', 'Csound Orchestra'), ('csound-document', 'Csound Document'), ('csound-score', 'Csound Score'), ('css', 'CSS'), ('css+django', 'CSS+Django/Jinja'), ('css+erb', 'CSS+Ruby'), ('css+genshitext', 'CSS+Genshi Text'), ('css+lasso', 'CSS+Lasso'), ('css+mako', 'CSS+Mako'), ('css+mozpreproc', 'CSS+mozpreproc'), ('css+myghty', 'CSS+Myghty'), ('css+php', 'CSS+PHP'), ('css+smarty', 'CSS+Smarty'), ('cucumber', 'Gherkin'), ('cuda', 'CUDA'), ('cypher', 'Cypher'), ('cython', 'Cython'), ('d', 'D'), ('d-objdump', 'd-objdump'), ('dart', 'Dart'), ('delphi', 'Delphi'), ('dg', 'dg'), ('diff', 'Diff'), ('django', 'Django/Jinja'), ('docker', 'Docker'), ('doscon', 'MSDOS Session'), ('dpatch', 'Darcs Patch'), ('dtd', 'DTD'), ('duel', 'Duel'), ('dylan', 'Dylan'), ('dylan-console', 'Dylan session'), ('dylan-lid', 'DylanLID'), ('earl-grey', 'Earl Grey'), ('easytrieve', 'Easytrieve'), ('ebnf', 'EBNF'), ('ec', 'eC'), ('ecl', 'ECL'), ('eiffel', 'Eiffel'), ('elixir', 'Elixir'), ('elm', 'Elm'), ('emacs', 'EmacsLisp'), ('erb', 'ERB'), ('erl', 'Erlang erl session'), ('erlang', 'Erlang'), ('evoque', 'Evoque'), ('extempore', 'xtlang'), ('ezhil', 'Ezhil'), ('factor', 'Factor'), ('fan', 'Fantom'), ('fancy', 'Fancy'), ('felix', 'Felix'), ('fish', 'Fish'), ('flatline', 'Flatline'), ('forth', 'Forth'), ('fortran', 'Fortran'), ('fortranfixed', 'FortranFixed'), ('foxpro', 'FoxPro'), ('fsharp', 'FSharp'), ('gap', 'GAP'), ('gas', 'GAS'), ('genshi', 'Genshi'), ('genshitext', 'Genshi Text'), ('glsl', 'GLSL'), ('gnuplot', 'Gnuplot'), ('go', 'Go'), ('golo', 'Golo'), ('gooddata-cl', 'GoodData-CL'), ('gosu', 'Gosu'), ('groff', 'Groff'), ('groovy', 'Groovy'), ('gst', 'Gosu Template'), ('haml', 'Haml'), ('handlebars', 'Handlebars'), ('haskell', 'Haskell'), ('haxeml', 'Hxml'), ('hexdump', 'Hexdump'), ('hsail', 'HSAIL'), ('html', 'HTML'), ('html+cheetah', 'HTML+Cheetah'), ('html+django', 'HTML+Django/Jinja'), ('html+evoque', 'HTML+Evoque'), ('html+genshi', 'HTML+Genshi'), ('html+handlebars', 'HTML+Handlebars'), ('html+lasso', 'HTML+Lasso'), ('html+mako', 'HTML+Mako'), ('html+myghty', 'HTML+Myghty'), ('html+ng2', 'HTML + Angular2'), ('html+php', 'HTML+PHP'), ('html+smarty', 'HTML+Smarty'), ('html+twig', 'HTML+Twig'), ('html+velocity', 'HTML+Velocity'), ('http', 'HTTP'), ('hx', 'Haxe'), ('hybris', 'Hybris'), ('hylang', 'Hy'), ('i6t', 'Inform 6 template'), ('idl', 'IDL'), ('idris', 'Idris'), ('iex', 'Elixir iex session'), ('igor', 'Igor'), ('inform6', 'Inform 6'), ('inform7', 'Inform 7'), ('ini', 'INI'), ('io', 'Io'), ('ioke', 'Ioke'), ('irc', 'IRC logs'), ('isabelle', 'Isabelle'), ('j', 'J'), ('jags', 'JAGS'), ('jasmin', 'Jasmin'), ('java', 'Java'), ('javascript+mozpreproc', 'Javascript+mozpreproc'), ('jcl', 'JCL'), ('jlcon', 'Julia console'), ('js', 'JavaScript'), ('js+cheetah', 'JavaScript+Cheetah'), ('js+django', 'JavaScript+Django/Jinja'), ('js+erb', 'JavaScript+Ruby'), ('js+genshitext', 'JavaScript+Genshi Text'), ('js+lasso', 'JavaScript+Lasso'), ('js+mako', 'JavaScript+Mako'), ('js+myghty', 'JavaScript+Myghty'), ('js+php', 'JavaScript+PHP'), ('js+smarty', 'JavaScript+Smarty'), ('jsgf', 'JSGF'), ('json', 'JSON'), ('json-object', 'JSONBareObject'), ('jsonld', 'JSON-LD'), ('jsp', 'Java Server Page'), ('julia', 'Julia'), ('juttle', 'Juttle'), ('kal', 'Kal'), ('kconfig', 'Kconfig'), ('koka', 'Koka'), ('kotlin', 'Kotlin'), ('lagda', 'Literate Agda'), ('lasso', 'Lasso'), ('lcry', 'Literate Cryptol'), ('lean', 'Lean'), ('less', 'LessCss'), ('lhs', 'Literate Haskell'), ('lidr', 'Literate Idris'), ('lighty', 'Lighttpd configuration file'), ('limbo', 'Limbo'), ('liquid', 'liquid'), ('live-script', 'LiveScript'), ('llvm', 'LLVM'), ('logos', 'Logos'), ('logtalk', 'Logtalk'), ('lsl', 'LSL'), ('lua', 'Lua'), ('make', 'Makefile'), ('mako', 'Mako'), ('maql', 'MAQL'), ('mask', 'Mask'), ('mason', 'Mason'), ('mathematica', 'Mathematica'), ('matlab', 'Matlab'), ('matlabsession', 'Matlab session'), ('md', 'markdown'), ('minid', 'MiniD'), ('modelica', 'Modelica'), ('modula2', 'Modula-2'), ('monkey', 'Monkey'), ('monte', 'Monte'), ('moocode', 'MOOCode'), ('moon', 'MoonScript'), ('mozhashpreproc', 'mozhashpreproc'), ('mozpercentpreproc', 'mozpercentpreproc'), ('mql', 'MQL'), ('mscgen', 'Mscgen'), ('mupad', 'MuPAD'), ('mxml', 'MXML'), ('myghty', 'Myghty'), ('mysql', 'MySQL'), ('nasm', 'NASM'), ('ncl', 'NCL'), ('nemerle', 'Nemerle'), ('nesc', 'nesC'), ('newlisp', 'NewLisp'), ('newspeak', 'Newspeak'), ('ng2', 'Angular2'), ('nginx', 'Nginx configuration file'), ('nim', 'Nimrod'), ('nit', 'Nit'), ('nixos', 'Nix'), ('nsis', 'NSIS'), ('numpy', 'NumPy'), ('nusmv', 'NuSMV'), ('objdump', 'objdump'), ('objdump-nasm', 'objdump-nasm'), ('objective-c', 'Objective-C'), ('objective-c++', 'Objective-C++'), ('objective-j', 'Objective-J'), ('ocaml', 'OCaml'), ('octave', 'Octave'), ('odin', 'ODIN'), ('ooc', 'Ooc'), ('opa', 'Opa'), ('openedge', 'OpenEdge ABL'), ('pacmanconf', 'PacmanConf'), ('pan', 'Pan'), ('parasail', 'ParaSail'), ('pawn', 'Pawn'), ('perl', 'Perl'), ('perl6', 'Perl6'), ('php', 'PHP'), ('pig', 'Pig'), ('pike', 'Pike'), ('pkgconfig', 'PkgConfig'), ('plpgsql', 'PL/pgSQL'), ('postgresql', 'PostgreSQL SQL dialect'), ('postscript', 'PostScript'), ('pot', 'Gettext Catalog'), ('pov', 'POVRay'), ('powershell', 'PowerShell'), ('praat', 'Praat'), ('prolog', 'Prolog'), ('properties', 'Properties'), ('protobuf', 'Protocol Buffer'), ('ps1con', 'PowerShell Session'), ('psql', 'PostgreSQL console (psql)'), ('pug', 'Pug'), ('puppet', 'Puppet'), ('py3tb', 'Python 3.0 Traceback'), ('pycon', 'Python console session'), ('pypylog', 'PyPy Log'), ('pytb', 'Python Traceback'), ('python', 'Python'), ('python3', 'Python 3'), ('qbasic', 'QBasic'), ('qml', 'QML'), ('qvto', 'QVTO'), ('racket', 'Racket'), ('ragel', 'Ragel'), ('ragel-c', 'Ragel in C Host'), ('ragel-cpp', 'Ragel in CPP Host'), ('ragel-d', 'Ragel in D Host'), ('ragel-em', 'Embedded Ragel'), ('ragel-java', 'Ragel in Java Host'), ('ragel-objc', 'Ragel in Objective C Host'), ('ragel-ruby', 'Ragel in Ruby Host'), ('raw', 'Raw token data'), ('rb', 'Ruby'), ('rbcon', 'Ruby irb session'), ('rconsole', 'RConsole'), ('rd', 'Rd'), ('rebol', 'REBOL'), ('red', 'Red'), ('redcode', 'Redcode'), ('registry', 'reg'), ('resource', 'ResourceBundle'), ('rexx', 'Rexx'), ('rhtml', 'RHTML'), ('rnc', 'Relax-NG Compact'), ('roboconf-graph', 'Roboconf Graph'), ('roboconf-instances', 'Roboconf Instances'), ('robotframework', 'RobotFramework'), ('rql', 'RQL'), ('rsl', 'RSL'), ('rst', 'reStructuredText'), ('rts', 'TrafficScript'), ('rust', 'Rust'), ('sas', 'SAS'), ('sass', 'Sass'), ('sc', 'SuperCollider'), ('scala', 'Scala'), ('scaml', 'Scaml'), ('scheme', 'Scheme'), ('scilab', 'Scilab'), ('scss', 'SCSS'), ('shen', 'Shen'), ('silver', 'Silver'), ('slim', 'Slim'), ('smali', 'Smali'), ('smalltalk', 'Smalltalk'), ('smarty', 'Smarty'), ('sml', 'Standard ML'), ('snobol', 'Snobol'), ('snowball', 'Snowball'), ('sourceslist', 'Debian Sourcelist'), ('sp', 'SourcePawn'), ('sparql', 'SPARQL'), ('spec', 'RPMSpec'), ('splus', 'S'), ('sql', 'SQL'), ('sqlite3', 'sqlite3con'), ('squidconf', 'SquidConf'), ('ssp', 'Scalate Server Page'), ('stan', 'Stan'), ('stata', 'Stata'), ('swift', 'Swift'), ('swig', 'SWIG'), ('systemverilog', 'systemverilog'), ('tads3', 'TADS 3'), ('tap', 'TAP'), ('tasm', 'TASM'), ('tcl', 'Tcl'), ('tcsh', 'Tcsh'), ('tcshcon', 'Tcsh Session'), ('tea', 'Tea'), ('termcap', 'Termcap'), ('terminfo', 'Terminfo'), ('terraform', 'Terraform'), ('tex', 'TeX'), ('text', 'Text only'), ('thrift', 'Thrift'), ('todotxt', 'Todotxt'), ('trac-wiki', 'MoinMoin/Trac Wiki markup'), ('treetop', 'Treetop'), ('ts', 'TypeScript'), ('tsql', 'Transact-SQL'), ('turtle', 'Turtle'), ('twig', 'Twig'), ('typoscript', 'TypoScript'), ('typoscriptcssdata', 'TypoScriptCssData'), ('typoscripthtmldata', 'TypoScriptHtmlData'), ('urbiscript', 'UrbiScript'), ('vala', 'Vala'), ('vb.net', 'VB.net'), ('vcl', 'VCL'), ('vclsnippets', 'VCLSnippets'), ('vctreestatus', 'VCTreeStatus'), ('velocity', 'Velocity'), ('verilog', 'verilog'), ('vgl', 'VGL'), ('vhdl', 'vhdl'), ('vim', 'VimL'), ('wdiff', 'WDiff'), ('whiley', 'Whiley'), ('x10', 'X10'), ('xml', 'XML'), ('xml+cheetah', 'XML+Cheetah'), ('xml+django', 'XML+Django/Jinja'), ('xml+erb', 'XML+Ruby'), ('xml+evoque', 'XML+Evoque'), ('xml+lasso', 'XML+Lasso'), ('xml+mako', 'XML+Mako'), ('xml+myghty', 'XML+Myghty'), ('xml+php', 'XML+PHP'), ('xml+smarty', 'XML+Smarty'), ('xml+velocity', 'XML+Velocity'), ('xquery', 'XQuery'), ('xslt', 'XSLT'), ('xtend', 'Xtend'), ('xul+mozpreproc', 'XUL+mozpreproc'), ('yaml', 'YAML'), ('yaml+jinja', 'YAML+Jinja'), ('zephir', 'Zephir')], default='python', max_length=100)), ('style', models.CharField(choices=[('abap', 'abap'), ('algol', 'algol'), ('algol_nu', 'algol_nu'), ('arduino', 'arduino'), ('autumn', 'autumn'), ('borland', 'borland'), ('bw', 'bw'), ('colorful', 'colorful'), ('default', 'default'), ('emacs', 'emacs'), ('friendly', 'friendly'), ('fruity', 'fruity'), ('igor', 'igor'), ('lovelace', 'lovelace'), ('manni', 'manni'), ('monokai', 'monokai'), ('murphy', 'murphy'), ('native', 'native'), ('paraiso-dark', 'paraiso-dark'), ('paraiso-light', 'paraiso-light'), ('pastie', 'pastie'), ('perldoc', 'perldoc'), ('rainbow_dash', 'rainbow_dash'), ('rrt', 'rrt'), ('tango', 'tango'), ('trac', 'trac'), ('vim', 'vim'), ('vs', 'vs'), ('xcode', 'xcode')], default='friendly', max_length=100)), ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='snippets', to=settings.AUTH_USER_MODEL)), ], options={ 'ordering': ('created',), }, ), ] drf-yasg-1.20.1/testproj/snippets/migrations/0002_auto_20181219_1016.py000066400000000000000000000256041416705305200246350ustar00rootroot00000000000000# Generated by Django 2.1.3 on 2018-12-19 08:16 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('snippets', '0001_initial'), ] operations = [ migrations.AlterField( model_name='snippet', name='language', field=models.CharField(choices=[('abap', 'ABAP'), ('abnf', 'ABNF'), ('ada', 'Ada'), ('adl', 'ADL'), ('agda', 'Agda'), ('aheui', 'Aheui'), ('ahk', 'autohotkey'), ('alloy', 'Alloy'), ('ampl', 'Ampl'), ('antlr', 'ANTLR'), ('antlr-as', 'ANTLR With ActionScript Target'), ('antlr-cpp', 'ANTLR With CPP Target'), ('antlr-csharp', 'ANTLR With C# Target'), ('antlr-java', 'ANTLR With Java Target'), ('antlr-objc', 'ANTLR With ObjectiveC Target'), ('antlr-perl', 'ANTLR With Perl Target'), ('antlr-python', 'ANTLR With Python Target'), ('antlr-ruby', 'ANTLR With Ruby Target'), ('apacheconf', 'ApacheConf'), ('apl', 'APL'), ('applescript', 'AppleScript'), ('arduino', 'Arduino'), ('as', 'ActionScript'), ('as3', 'ActionScript 3'), ('aspectj', 'AspectJ'), ('aspx-cs', 'aspx-cs'), ('aspx-vb', 'aspx-vb'), ('asy', 'Asymptote'), ('at', 'AmbientTalk'), ('autoit', 'AutoIt'), ('awk', 'Awk'), ('basemake', 'Base Makefile'), ('bash', 'Bash'), ('bat', 'Batchfile'), ('bbcode', 'BBCode'), ('bc', 'BC'), ('befunge', 'Befunge'), ('bib', 'BibTeX'), ('blitzbasic', 'BlitzBasic'), ('blitzmax', 'BlitzMax'), ('bnf', 'BNF'), ('boo', 'Boo'), ('boogie', 'Boogie'), ('brainfuck', 'Brainfuck'), ('bro', 'Bro'), ('bst', 'BST'), ('bugs', 'BUGS'), ('c', 'C'), ('c-objdump', 'c-objdump'), ('ca65', 'ca65 assembler'), ('cadl', 'cADL'), ('camkes', 'CAmkES'), ('capdl', 'CapDL'), ('capnp', "Cap'n Proto"), ('cbmbas', 'CBM BASIC V2'), ('ceylon', 'Ceylon'), ('cfc', 'Coldfusion CFC'), ('cfengine3', 'CFEngine3'), ('cfm', 'Coldfusion HTML'), ('cfs', 'cfstatement'), ('chai', 'ChaiScript'), ('chapel', 'Chapel'), ('cheetah', 'Cheetah'), ('cirru', 'Cirru'), ('clay', 'Clay'), ('clean', 'Clean'), ('clojure', 'Clojure'), ('clojurescript', 'ClojureScript'), ('cmake', 'CMake'), ('cobol', 'COBOL'), ('cobolfree', 'COBOLFree'), ('coffee-script', 'CoffeeScript'), ('common-lisp', 'Common Lisp'), ('componentpascal', 'Component Pascal'), ('console', 'Bash Session'), ('control', 'Debian Control file'), ('coq', 'Coq'), ('cpp', 'C++'), ('cpp-objdump', 'cpp-objdump'), ('cpsa', 'CPSA'), ('cr', 'Crystal'), ('crmsh', 'Crmsh'), ('croc', 'Croc'), ('cryptol', 'Cryptol'), ('csharp', 'C#'), ('csound', 'Csound Orchestra'), ('csound-document', 'Csound Document'), ('csound-score', 'Csound Score'), ('css', 'CSS'), ('css+django', 'CSS+Django/Jinja'), ('css+erb', 'CSS+Ruby'), ('css+genshitext', 'CSS+Genshi Text'), ('css+lasso', 'CSS+Lasso'), ('css+mako', 'CSS+Mako'), ('css+mozpreproc', 'CSS+mozpreproc'), ('css+myghty', 'CSS+Myghty'), ('css+php', 'CSS+PHP'), ('css+smarty', 'CSS+Smarty'), ('cucumber', 'Gherkin'), ('cuda', 'CUDA'), ('cypher', 'Cypher'), ('cython', 'Cython'), ('d', 'D'), ('d-objdump', 'd-objdump'), ('dart', 'Dart'), ('delphi', 'Delphi'), ('dg', 'dg'), ('diff', 'Diff'), ('django', 'Django/Jinja'), ('docker', 'Docker'), ('doscon', 'MSDOS Session'), ('dpatch', 'Darcs Patch'), ('dtd', 'DTD'), ('duel', 'Duel'), ('dylan', 'Dylan'), ('dylan-console', 'Dylan session'), ('dylan-lid', 'DylanLID'), ('earl-grey', 'Earl Grey'), ('easytrieve', 'Easytrieve'), ('ebnf', 'EBNF'), ('ec', 'eC'), ('ecl', 'ECL'), ('eiffel', 'Eiffel'), ('elixir', 'Elixir'), ('elm', 'Elm'), ('emacs', 'EmacsLisp'), ('erb', 'ERB'), ('erl', 'Erlang erl session'), ('erlang', 'Erlang'), ('evoque', 'Evoque'), ('extempore', 'xtlang'), ('ezhil', 'Ezhil'), ('factor', 'Factor'), ('fan', 'Fantom'), ('fancy', 'Fancy'), ('felix', 'Felix'), ('fennel', 'Fennel'), ('fish', 'Fish'), ('flatline', 'Flatline'), ('forth', 'Forth'), ('fortran', 'Fortran'), ('fortranfixed', 'FortranFixed'), ('foxpro', 'FoxPro'), ('fsharp', 'FSharp'), ('gap', 'GAP'), ('gas', 'GAS'), ('genshi', 'Genshi'), ('genshitext', 'Genshi Text'), ('glsl', 'GLSL'), ('gnuplot', 'Gnuplot'), ('go', 'Go'), ('golo', 'Golo'), ('gooddata-cl', 'GoodData-CL'), ('gosu', 'Gosu'), ('groff', 'Groff'), ('groovy', 'Groovy'), ('gst', 'Gosu Template'), ('haml', 'Haml'), ('handlebars', 'Handlebars'), ('haskell', 'Haskell'), ('haxeml', 'Hxml'), ('hexdump', 'Hexdump'), ('hlsl', 'HLSL'), ('hsail', 'HSAIL'), ('html', 'HTML'), ('html+cheetah', 'HTML+Cheetah'), ('html+django', 'HTML+Django/Jinja'), ('html+evoque', 'HTML+Evoque'), ('html+genshi', 'HTML+Genshi'), ('html+handlebars', 'HTML+Handlebars'), ('html+lasso', 'HTML+Lasso'), ('html+mako', 'HTML+Mako'), ('html+myghty', 'HTML+Myghty'), ('html+ng2', 'HTML + Angular2'), ('html+php', 'HTML+PHP'), ('html+smarty', 'HTML+Smarty'), ('html+twig', 'HTML+Twig'), ('html+velocity', 'HTML+Velocity'), ('http', 'HTTP'), ('hx', 'Haxe'), ('hybris', 'Hybris'), ('hylang', 'Hy'), ('i6t', 'Inform 6 template'), ('idl', 'IDL'), ('idris', 'Idris'), ('iex', 'Elixir iex session'), ('igor', 'Igor'), ('inform6', 'Inform 6'), ('inform7', 'Inform 7'), ('ini', 'INI'), ('io', 'Io'), ('ioke', 'Ioke'), ('irc', 'IRC logs'), ('isabelle', 'Isabelle'), ('j', 'J'), ('jags', 'JAGS'), ('jasmin', 'Jasmin'), ('java', 'Java'), ('javascript+mozpreproc', 'Javascript+mozpreproc'), ('jcl', 'JCL'), ('jlcon', 'Julia console'), ('js', 'JavaScript'), ('js+cheetah', 'JavaScript+Cheetah'), ('js+django', 'JavaScript+Django/Jinja'), ('js+erb', 'JavaScript+Ruby'), ('js+genshitext', 'JavaScript+Genshi Text'), ('js+lasso', 'JavaScript+Lasso'), ('js+mako', 'JavaScript+Mako'), ('js+myghty', 'JavaScript+Myghty'), ('js+php', 'JavaScript+PHP'), ('js+smarty', 'JavaScript+Smarty'), ('jsgf', 'JSGF'), ('json', 'JSON'), ('json-object', 'JSONBareObject'), ('jsonld', 'JSON-LD'), ('jsp', 'Java Server Page'), ('julia', 'Julia'), ('juttle', 'Juttle'), ('kal', 'Kal'), ('kconfig', 'Kconfig'), ('koka', 'Koka'), ('kotlin', 'Kotlin'), ('lagda', 'Literate Agda'), ('lasso', 'Lasso'), ('lcry', 'Literate Cryptol'), ('lean', 'Lean'), ('less', 'LessCss'), ('lhs', 'Literate Haskell'), ('lidr', 'Literate Idris'), ('lighty', 'Lighttpd configuration file'), ('limbo', 'Limbo'), ('liquid', 'liquid'), ('live-script', 'LiveScript'), ('llvm', 'LLVM'), ('logos', 'Logos'), ('logtalk', 'Logtalk'), ('lsl', 'LSL'), ('lua', 'Lua'), ('make', 'Makefile'), ('mako', 'Mako'), ('maql', 'MAQL'), ('mask', 'Mask'), ('mason', 'Mason'), ('mathematica', 'Mathematica'), ('matlab', 'Matlab'), ('matlabsession', 'Matlab session'), ('md', 'markdown'), ('minid', 'MiniD'), ('modelica', 'Modelica'), ('modula2', 'Modula-2'), ('monkey', 'Monkey'), ('monte', 'Monte'), ('moocode', 'MOOCode'), ('moon', 'MoonScript'), ('mozhashpreproc', 'mozhashpreproc'), ('mozpercentpreproc', 'mozpercentpreproc'), ('mql', 'MQL'), ('mscgen', 'Mscgen'), ('mupad', 'MuPAD'), ('mxml', 'MXML'), ('myghty', 'Myghty'), ('mysql', 'MySQL'), ('nasm', 'NASM'), ('ncl', 'NCL'), ('nemerle', 'Nemerle'), ('nesc', 'nesC'), ('newlisp', 'NewLisp'), ('newspeak', 'Newspeak'), ('ng2', 'Angular2'), ('nginx', 'Nginx configuration file'), ('nim', 'Nimrod'), ('nit', 'Nit'), ('nixos', 'Nix'), ('nsis', 'NSIS'), ('numpy', 'NumPy'), ('nusmv', 'NuSMV'), ('objdump', 'objdump'), ('objdump-nasm', 'objdump-nasm'), ('objective-c', 'Objective-C'), ('objective-c++', 'Objective-C++'), ('objective-j', 'Objective-J'), ('ocaml', 'OCaml'), ('octave', 'Octave'), ('odin', 'ODIN'), ('ooc', 'Ooc'), ('opa', 'Opa'), ('openedge', 'OpenEdge ABL'), ('pacmanconf', 'PacmanConf'), ('pan', 'Pan'), ('parasail', 'ParaSail'), ('pawn', 'Pawn'), ('perl', 'Perl'), ('perl6', 'Perl6'), ('php', 'PHP'), ('pig', 'Pig'), ('pike', 'Pike'), ('pkgconfig', 'PkgConfig'), ('plpgsql', 'PL/pgSQL'), ('postgresql', 'PostgreSQL SQL dialect'), ('postscript', 'PostScript'), ('pot', 'Gettext Catalog'), ('pov', 'POVRay'), ('powershell', 'PowerShell'), ('praat', 'Praat'), ('prolog', 'Prolog'), ('properties', 'Properties'), ('protobuf', 'Protocol Buffer'), ('ps1con', 'PowerShell Session'), ('psql', 'PostgreSQL console (psql)'), ('pug', 'Pug'), ('puppet', 'Puppet'), ('py3tb', 'Python 3.0 Traceback'), ('pycon', 'Python console session'), ('pypylog', 'PyPy Log'), ('pytb', 'Python Traceback'), ('python', 'Python'), ('python3', 'Python 3'), ('qbasic', 'QBasic'), ('qml', 'QML'), ('qvto', 'QVTO'), ('racket', 'Racket'), ('ragel', 'Ragel'), ('ragel-c', 'Ragel in C Host'), ('ragel-cpp', 'Ragel in CPP Host'), ('ragel-d', 'Ragel in D Host'), ('ragel-em', 'Embedded Ragel'), ('ragel-java', 'Ragel in Java Host'), ('ragel-objc', 'Ragel in Objective C Host'), ('ragel-ruby', 'Ragel in Ruby Host'), ('raw', 'Raw token data'), ('rb', 'Ruby'), ('rbcon', 'Ruby irb session'), ('rconsole', 'RConsole'), ('rd', 'Rd'), ('rebol', 'REBOL'), ('red', 'Red'), ('redcode', 'Redcode'), ('registry', 'reg'), ('resource', 'ResourceBundle'), ('rexx', 'Rexx'), ('rhtml', 'RHTML'), ('rnc', 'Relax-NG Compact'), ('roboconf-graph', 'Roboconf Graph'), ('roboconf-instances', 'Roboconf Instances'), ('robotframework', 'RobotFramework'), ('rql', 'RQL'), ('rsl', 'RSL'), ('rst', 'reStructuredText'), ('rts', 'TrafficScript'), ('rust', 'Rust'), ('sas', 'SAS'), ('sass', 'Sass'), ('sc', 'SuperCollider'), ('scala', 'Scala'), ('scaml', 'Scaml'), ('scheme', 'Scheme'), ('scilab', 'Scilab'), ('scss', 'SCSS'), ('shen', 'Shen'), ('silver', 'Silver'), ('slim', 'Slim'), ('smali', 'Smali'), ('smalltalk', 'Smalltalk'), ('smarty', 'Smarty'), ('sml', 'Standard ML'), ('snobol', 'Snobol'), ('snowball', 'Snowball'), ('sourceslist', 'Debian Sourcelist'), ('sp', 'SourcePawn'), ('sparql', 'SPARQL'), ('spec', 'RPMSpec'), ('splus', 'S'), ('sql', 'SQL'), ('sqlite3', 'sqlite3con'), ('squidconf', 'SquidConf'), ('ssp', 'Scalate Server Page'), ('stan', 'Stan'), ('stata', 'Stata'), ('swift', 'Swift'), ('swig', 'SWIG'), ('systemverilog', 'systemverilog'), ('tads3', 'TADS 3'), ('tap', 'TAP'), ('tasm', 'TASM'), ('tcl', 'Tcl'), ('tcsh', 'Tcsh'), ('tcshcon', 'Tcsh Session'), ('tea', 'Tea'), ('termcap', 'Termcap'), ('terminfo', 'Terminfo'), ('terraform', 'Terraform'), ('tex', 'TeX'), ('text', 'Text only'), ('thrift', 'Thrift'), ('todotxt', 'Todotxt'), ('trac-wiki', 'MoinMoin/Trac Wiki markup'), ('treetop', 'Treetop'), ('ts', 'TypeScript'), ('tsql', 'Transact-SQL'), ('turtle', 'Turtle'), ('twig', 'Twig'), ('typoscript', 'TypoScript'), ('typoscriptcssdata', 'TypoScriptCssData'), ('typoscripthtmldata', 'TypoScriptHtmlData'), ('urbiscript', 'UrbiScript'), ('vala', 'Vala'), ('vb.net', 'VB.net'), ('vcl', 'VCL'), ('vclsnippets', 'VCLSnippets'), ('vctreestatus', 'VCTreeStatus'), ('velocity', 'Velocity'), ('verilog', 'verilog'), ('vgl', 'VGL'), ('vhdl', 'vhdl'), ('vim', 'VimL'), ('wdiff', 'WDiff'), ('whiley', 'Whiley'), ('x10', 'X10'), ('xml', 'XML'), ('xml+cheetah', 'XML+Cheetah'), ('xml+django', 'XML+Django/Jinja'), ('xml+erb', 'XML+Ruby'), ('xml+evoque', 'XML+Evoque'), ('xml+lasso', 'XML+Lasso'), ('xml+mako', 'XML+Mako'), ('xml+myghty', 'XML+Myghty'), ('xml+php', 'XML+PHP'), ('xml+smarty', 'XML+Smarty'), ('xml+velocity', 'XML+Velocity'), ('xorg.conf', 'Xorg'), ('xquery', 'XQuery'), ('xslt', 'XSLT'), ('xtend', 'Xtend'), ('xul+mozpreproc', 'XUL+mozpreproc'), ('yaml', 'YAML'), ('yaml+jinja', 'YAML+Jinja'), ('zephir', 'Zephir')], default='python', max_length=100), ), ] drf-yasg-1.20.1/testproj/snippets/migrations/0003_snippetviewer.py000066400000000000000000000015661416705305200251350ustar00rootroot00000000000000# Generated by Django 2.1.7 on 2019-03-16 14:06 from django.conf import settings from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('snippets', '0002_auto_20181219_1016'), ] operations = [ migrations.CreateModel( name='SnippetViewer', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('snippet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='viewers', to='snippets.Snippet')), ('viewer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='snippet_views', to=settings.AUTH_USER_MODEL)), ], ), ] drf-yasg-1.20.1/testproj/snippets/migrations/0004_auto_20190613_0154.py000066400000000000000000000013361416705305200246330ustar00rootroot00000000000000# Generated by Django 2.2.2 on 2019-06-12 22:54 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('snippets', '0003_snippetviewer'), ] operations = [ migrations.AlterField( model_name='snippet', name='language', field=models.CharField(choices=[('cpp', 'cpp'), ('js', 'js'), ('python', 'python')], default='python', max_length=100), ), migrations.AlterField( model_name='snippet', name='style', field=models.CharField(choices=[('monokai', 'monokai'), ('solarized-dark', 'solarized-dark'), ('vim', 'vim')], default='solarized-dark', max_length=100), ), ] drf-yasg-1.20.1/testproj/snippets/migrations/__init__.py000066400000000000000000000000001416705305200233040ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/snippets/models.py000066400000000000000000000021041416705305200206630ustar00rootroot00000000000000from django.db import models LANGUAGE_CHOICES = sorted((item, item) for item in ('cpp', 'python', 'js')) STYLE_CHOICES = sorted((item, item) for item in ('solarized-dark', 'monokai', 'vim')) class Snippet(models.Model): created = models.DateTimeField(auto_now_add=True) owner = models.ForeignKey('auth.User', related_name='snippets', on_delete=models.CASCADE) title = models.CharField(max_length=100, blank=True, default='') code = models.TextField(help_text="code model help text") linenos = models.BooleanField(default=False) language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100) style = models.CharField(choices=STYLE_CHOICES, default='solarized-dark', max_length=100) class Meta: ordering = ('created',) @property def nullable_secondary_language(self): return None class SnippetViewer(models.Model): snippet = models.ForeignKey(Snippet, on_delete=models.CASCADE, related_name='viewers') viewer = models.ForeignKey('auth.User', related_name='snippet_views', on_delete=models.CASCADE) drf-yasg-1.20.1/testproj/snippets/serializers.py000066400000000000000000000114221416705305200217370ustar00rootroot00000000000000from decimal import Decimal from django.contrib.auth import get_user_model from django.core.validators import MaxLengthValidator, MinValueValidator from rest_framework import serializers from snippets.models import LANGUAGE_CHOICES, STYLE_CHOICES, Snippet, SnippetViewer class LanguageSerializer(serializers.Serializer): name = serializers.ChoiceField( choices=LANGUAGE_CHOICES, default='python', help_text='The name of the programming language') read_only_nullable = serializers.CharField(read_only=True, allow_null=True) class Meta: ref_name = None class ExampleProjectSerializer(serializers.Serializer): project_name = serializers.CharField(label='project name custom title', help_text='Name of the project') github_repo = serializers.CharField(required=True, help_text='Github repository of the project') class Meta: ref_name = 'Project' class UnixTimestampField(serializers.DateTimeField): def to_representation(self, value): """ Return epoch time for a datetime object or ``None``""" from django.utils.dateformat import format try: return int(format(value, 'U')) except (AttributeError, TypeError): return None def to_internal_value(self, value): import datetime return datetime.datetime.fromtimestamp(int(value)) class Meta: swagger_schema_fields = { 'format': 'integer', 'title': 'Client date time suu', 'description': 'Date time in unix timestamp format', } class SnippetSerializer(serializers.Serializer): """SnippetSerializer classdoc create: docstring for create from serializer classdoc """ id = serializers.IntegerField(read_only=True, help_text="id serializer help text") created = UnixTimestampField(read_only=True) owner = serializers.PrimaryKeyRelatedField( queryset=get_user_model().objects.all(), default=serializers.CurrentUserDefault(), help_text="The ID of the user that created this snippet; if none is provided, " "defaults to the currently logged in user." ) owner_as_string = serializers.PrimaryKeyRelatedField( help_text="The ID of the user that created this snippet.", pk_field=serializers.CharField(help_text="this help text should not show up"), read_only=True, source='owner', ) title = serializers.CharField(required=False, allow_blank=True, max_length=100) code = serializers.CharField(style={'base_template': 'textarea.html'}) tags = serializers.ListField(child=serializers.CharField(min_length=2), min_length=3, max_length=15) linenos = serializers.BooleanField(required=False) language = LanguageSerializer(help_text="Sample help text for language") styles = serializers.MultipleChoiceField(choices=STYLE_CHOICES, default=['solarized-dark']) lines = serializers.ListField(child=serializers.IntegerField(), allow_empty=True, allow_null=True, required=False) example_projects = serializers.ListSerializer(child=ExampleProjectSerializer(), read_only=True, validators=[MaxLengthValidator(100)]) difficulty_factor = serializers.FloatField(help_text="this is here just to test FloatField", read_only=True, default=lambda: 6.9) rate_as_string = serializers.DecimalField(max_digits=6, decimal_places=3, default=Decimal('0.0'), validators=[MinValueValidator(Decimal('0.0'))]) rate = serializers.DecimalField(max_digits=6, decimal_places=3, default=Decimal('0.0'), coerce_to_string=False, validators=[MinValueValidator(Decimal('0.0'))]) nullable_secondary_language = LanguageSerializer(allow_null=True) def create(self, validated_data): """ Create and return a new `Snippet` instance, given the validated data. """ del validated_data['styles'] del validated_data['lines'] del validated_data['difficulty_factor'] return Snippet.objects.create(**validated_data) def update(self, instance, validated_data): """ Update and return an existing `Snippet` instance, given the validated data. """ instance.title = validated_data.get('title', instance.title) instance.code = validated_data.get('code', instance.code) instance.linenos = validated_data.get('linenos', instance.linenos) instance.language = validated_data.get('language', instance.language) instance.style = validated_data.get('style', instance.style) instance.save() return instance class SnippetViewerSerializer(serializers.ModelSerializer): class Meta: model = SnippetViewer fields = '__all__' drf-yasg-1.20.1/testproj/snippets/urls.py000066400000000000000000000003561416705305200203740ustar00rootroot00000000000000from django.urls import path from . import views urlpatterns = [ path('', views.SnippetList.as_view()), path('/', views.SnippetDetail.as_view()), path('views//', views.SnippetViewerList.as_view()), ] drf-yasg-1.20.1/testproj/snippets/views.py000066400000000000000000000101511416705305200205360ustar00rootroot00000000000000from djangorestframework_camel_case.parser import CamelCaseJSONParser from djangorestframework_camel_case.render import CamelCaseJSONRenderer from inflection import camelize from rest_framework import generics, status from rest_framework.generics import get_object_or_404 from rest_framework.pagination import PageNumberPagination from rest_framework.parsers import FileUploadParser, FormParser from drf_yasg import openapi from drf_yasg.inspectors import SwaggerAutoSchema from drf_yasg.utils import swagger_auto_schema from snippets.models import Snippet, SnippetViewer from snippets.serializers import SnippetSerializer, SnippetViewerSerializer class CamelCaseOperationIDAutoSchema(SwaggerAutoSchema): def get_operation_id(self, operation_keys): operation_id = super(CamelCaseOperationIDAutoSchema, self).get_operation_id(operation_keys) return camelize(operation_id, uppercase_first_letter=False) class SnippetList(generics.ListCreateAPIView): """SnippetList classdoc""" queryset = Snippet.objects.all() serializer_class = SnippetSerializer parser_classes = (FormParser, CamelCaseJSONParser, FileUploadParser) renderer_classes = (CamelCaseJSONRenderer,) swagger_schema = CamelCaseOperationIDAutoSchema def perform_create(self, serializer): serializer.save(owner=self.request.user) def post(self, request, *args, **kwargs): """post method docstring""" return super(SnippetList, self).post(request, *args, **kwargs) @swagger_auto_schema( operation_id='snippets_delete_bulk', request_body=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'body': openapi.Schema( type=openapi.TYPE_STRING, description='this should not crash (request body on DELETE method)' ) } ), ) def delete(self, *args, **kwargs): """summary from docstring description body is here, summary is not included """ pass class SnippetDetail(generics.RetrieveUpdateDestroyAPIView): """ SnippetDetail classdoc put: put class docstring patch: patch class docstring """ queryset = Snippet.objects.all() serializer_class = SnippetSerializer pagination_class = None parser_classes = (CamelCaseJSONParser,) renderer_classes = (CamelCaseJSONRenderer,) swagger_schema = CamelCaseOperationIDAutoSchema def patch(self, request, *args, **kwargs): """patch method docstring""" return super(SnippetDetail, self).patch(request, *args, **kwargs) @swagger_auto_schema( manual_parameters=[ openapi.Parameter( name='id', in_=openapi.IN_PATH, type=openapi.TYPE_INTEGER, description="path parameter override", required=True ), ], responses={ status.HTTP_204_NO_CONTENT: openapi.Response( description="this should not crash (response object with no schema)" ) } ) def delete(self, request, *args, **kwargs): """delete method docstring""" return super(SnippetDetail, self).patch(request, *args, **kwargs) class SnippetViewerList(generics.ListAPIView): """SnippetViewerList classdoc""" serializer_class = SnippetViewerSerializer pagination_class = PageNumberPagination parser_classes = (FormParser, CamelCaseJSONParser, FileUploadParser) renderer_classes = (CamelCaseJSONRenderer,) swagger_schema = CamelCaseOperationIDAutoSchema lookup_url_kwarg = 'snippet_pk' def get_object(self): queryset = Snippet.objects.all() # Perform the lookup filtering. lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]} obj = get_object_or_404(queryset, **filter_kwargs) # May raise a permission denied self.check_object_permissions(self.request, obj) return obj def get_queryset(self): return SnippetViewer.objects.filter(snippet=self.get_object()) drf-yasg-1.20.1/testproj/testproj/000077500000000000000000000000001416705305200170365ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/testproj/__init__.py000066400000000000000000000000001416705305200211350ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/testproj/inspectors.py000066400000000000000000000007031416705305200216010ustar00rootroot00000000000000from drf_yasg import openapi from drf_yasg.inspectors import NotHandled, PaginatorInspector class UnknownPaginatorInspector(PaginatorInspector): def get_paginator_parameters(self, paginator): if hasattr(paginator, 'paginator_query_args'): return [openapi.Parameter(name=arg, in_=openapi.IN_QUERY, type=openapi.TYPE_STRING) for arg in getattr(paginator, 'paginator_query_args')] return NotHandled drf-yasg-1.20.1/testproj/testproj/runner.py000066400000000000000000000015731416705305200207270ustar00rootroot00000000000000import os class PytestTestRunner(object): """Runs pytest to discover and run tests.""" def __init__(self, verbosity=1, failfast=False, keepdb=False, **_): self.verbosity = verbosity self.failfast = failfast self.keepdb = keepdb def run_tests(self, test_labels): """Run pytest and return the exitcode. It translates some of Django's test command option to pytest's. """ import pytest argv = [] if self.verbosity == 0: argv.append('--quiet') if self.verbosity == 2: argv.append('--verbose') if self.verbosity == 3: argv.append('-vv') if self.failfast: argv.append('--exitfirst') if self.keepdb: argv.append('--reuse-db') argv.extend(test_labels) os.chdir('..') return pytest.main(argv) drf-yasg-1.20.1/testproj/testproj/settings/000077500000000000000000000000001416705305200206765ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/testproj/settings/__init__.py000066400000000000000000000000001416705305200227750ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/testproj/settings/base.py000066400000000000000000000131431416705305200221640ustar00rootroot00000000000000import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) from django.urls import reverse_lazy from testproj.util import static_lazy BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) ALLOWED_HOSTS = [ '127.0.0.1', 'localhost', 'test.local', ] CORS_ORIGIN_ALLOW_ALL = True # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'rest_framework.authtoken', 'oauth2_provider', 'corsheaders', 'drf_yasg', 'snippets', 'users', 'articles', 'todo', 'people' ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'drf_yasg.middleware.SwaggerExceptionMiddleware', ] ROOT_URLCONF = 'testproj.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'testproj', 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'testproj.wsgi.application' LOGIN_URL = reverse_lazy('admin:login') # Password validation AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Django Rest Framework REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ] } OAUTH2_CLIENT_ID = '12ee6bgxtpSEgP8TioWcHSXOiDBOUrVav4mRbVEs' OAUTH2_CLIENT_SECRET = '5FvYALo7W4uNnWE2ySw7Yzpkxh9PSf5GuY37RvOys00ydEyph64dbl1ECOKI9ceQ' \ 'AKoz0JpiVQtq0DUnsxNhU3ubrJgZ9YbtiXymbLGJq8L7n4fiER7gXbXaNSbze3BN' OAUTH2_APP_NAME = 'drf-yasg OAuth2 provider' OAUTH2_REDIRECT_URL = static_lazy('drf-yasg/swagger-ui-dist/oauth2-redirect.html') OAUTH2_AUTHORIZE_URL = reverse_lazy('oauth2_provider:authorize') OAUTH2_TOKEN_URL = reverse_lazy('oauth2_provider:token') # drf-yasg SWAGGER_SETTINGS = { 'LOGIN_URL': reverse_lazy('admin:login'), 'LOGOUT_URL': '/admin/logout', 'PERSIST_AUTH': True, 'REFETCH_SCHEMA_WITH_AUTH': True, 'REFETCH_SCHEMA_ON_LOGOUT': True, 'DEFAULT_INFO': 'testproj.urls.swagger_info', 'SECURITY_DEFINITIONS': { 'Basic': { 'type': 'basic' }, 'Bearer': { 'in': 'header', 'name': 'Authorization', 'type': 'apiKey', }, 'OAuth2 password': { 'flow': 'password', 'scopes': { 'read': 'Read everything.', 'write': 'Write everything,', }, 'tokenUrl': OAUTH2_TOKEN_URL, 'type': 'oauth2', }, 'Query': { 'in': 'query', 'name': 'auth', 'type': 'apiKey', }, }, 'OAUTH2_REDIRECT_URL': OAUTH2_REDIRECT_URL, 'OAUTH2_CONFIG': { 'clientId': OAUTH2_CLIENT_ID, 'clientSecret': OAUTH2_CLIENT_SECRET, 'appName': OAUTH2_APP_NAME, }, "DEFAULT_PAGINATOR_INSPECTORS": [ 'testproj.inspectors.UnknownPaginatorInspector', 'drf_yasg.inspectors.DjangoRestResponsePagination', 'drf_yasg.inspectors.CoreAPICompatInspector', ] } REDOC_SETTINGS = { 'SPEC_URL': ('schema-json', {'format': '.json'}), } # Internationalization LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'testproj', 'static'), ] # Testing TEST_RUNNER = 'testproj.runner.PytestTestRunner' # Logging configuration LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'pipe_separated': { 'format': '%(asctime)s | %(levelname)s | %(name)s | %(message)s' } }, 'handlers': { 'console_log': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'stream': 'ext://sys.stdout', 'formatter': 'pipe_separated', }, }, 'loggers': { 'drf_yasg': { 'handlers': ['console_log'], 'level': 'DEBUG', 'propagate': False, }, 'django': { 'handlers': ['console_log'], 'level': 'INFO', 'propagate': False, }, 'swagger_spec_validator': { 'handlers': ['console_log'], 'level': 'INFO', 'propagate': False, } }, 'root': { 'handlers': ['console_log'], 'level': 'INFO', } } drf-yasg-1.20.1/testproj/testproj/settings/heroku.py000066400000000000000000000014571416705305200225540ustar00rootroot00000000000000import dj_database_url from .base import * # noqa: F403 DEBUG = True ALLOWED_HOSTS.append('.herokuapp.com') SECRET_KEY = os.getenv('DJANGO_SECRET_KEY') assert SECRET_KEY, 'DJANGO_SECRET_KEY environment variable must be set' SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True SECURE_BROWSER_XSS_FILTER = True SECURE_CONTENT_TYPE_NOSNIFF = True X_FRAME_OPTIONS = 'DENY' # Simplified static file serving. # https://warehouse.python.org/project/whitenoise/ STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' MIDDLEWARE.insert(0, 'whitenoise.middleware.WhiteNoiseMiddleware') # Database DATABASES = { 'default': dj_database_url.config(conn_max_age=600) } SILENCED_SYSTEM_CHECKS = [ 'security.W004', # SECURE_HSTS_SECONDS 'security.W008', # SECURE_SSL_REDIRECT ] drf-yasg-1.20.1/testproj/testproj/settings/local.py000066400000000000000000000011521416705305200223410ustar00rootroot00000000000000import os import dj_database_url from .base import * # noqa: F403 SWAGGER_SETTINGS.update({'VALIDATOR_URL': 'http://localhost:8189'}) # Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases db_path = os.path.join(BASE_DIR, 'db.sqlite3') DATABASES = { 'default': dj_database_url.parse('sqlite:///' + db_path) } # Quick-start development settings - unsuitable for production # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '!z1yj(9uz)zk0gg@5--j)bc4h^i!8))r^dezco8glf190e0&#p' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True drf-yasg-1.20.1/testproj/testproj/static/000077500000000000000000000000001416705305200203255ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/testproj/static/.gitkeep000066400000000000000000000000001416705305200217440ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/testproj/templates/000077500000000000000000000000001416705305200210345ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/testproj/templates/.gitkeep000066400000000000000000000000001416705305200224530ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/testproj/urls.py000066400000000000000000000052461416705305200204040ustar00rootroot00000000000000import user_agents from django.contrib import admin from django.shortcuts import redirect from django.urls import include, path, re_path from rest_framework import permissions from rest_framework.decorators import api_view from drf_yasg import openapi from drf_yasg.views import get_schema_view swagger_info = openapi.Info( title="Snippets API", default_version='v1', description="""This is a demo project for the [drf-yasg](https://github.com/axnsan12/drf-yasg) Django Rest Framework library. The `swagger-ui` view can be found [here](/cached/swagger). The `ReDoc` view can be found [here](/cached/redoc). The swagger YAML document can be found [here](/cached/swagger.yaml). You can log in using the pre-existing `admin` user with password `passwordadmin`.""", # noqa terms_of_service="https://www.google.com/policies/terms/", contact=openapi.Contact(email="contact@snippets.local"), license=openapi.License(name="BSD License"), ) SchemaView = get_schema_view( validators=['ssv', 'flex'], public=True, permission_classes=[permissions.AllowAny], ) @api_view(['GET']) def plain_view(request): pass def root_redirect(request): user_agent_string = request.META.get('HTTP_USER_AGENT', '') user_agent = user_agents.parse(user_agent_string) if user_agent.is_mobile: schema_view = 'cschema-redoc' else: schema_view = 'cschema-swagger-ui' return redirect(schema_view, permanent=True) # urlpatterns required for settings values required_urlpatterns = [ path('admin/', admin.site.urls), path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')), ] urlpatterns = [ re_path(r'^swagger(?P.json|.yaml)$', SchemaView.without_ui(cache_timeout=0), name='schema-json'), path('swagger/', SchemaView.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), path('redoc/', SchemaView.with_ui('redoc', cache_timeout=0), name='schema-redoc'), path('redoc-old/', SchemaView.with_ui('redoc-old', cache_timeout=0), name='schema-redoc-old'), re_path(r'^cached/swagger(?P.json|.yaml)$', SchemaView.without_ui(cache_timeout=None), name='cschema-json'), path('cached/swagger/', SchemaView.with_ui('swagger', cache_timeout=None), name='cschema-swagger-ui'), path('cached/redoc/', SchemaView.with_ui('redoc', cache_timeout=None), name='cschema-redoc'), path('', root_redirect), path('snippets/', include('snippets.urls')), path('articles/', include('articles.urls')), path('users/', include('users.urls')), path('todo/', include('todo.urls')), path('people/', include('people.urls')), path('plain/', plain_view), ] + required_urlpatterns drf-yasg-1.20.1/testproj/testproj/util.py000066400000000000000000000001701416705305200203630ustar00rootroot00000000000000from django.templatetags.static import static from django.utils.functional import lazy static_lazy = lazy(static, str) drf-yasg-1.20.1/testproj/testproj/wsgi.py000066400000000000000000000002571416705305200203650ustar00rootroot00000000000000import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testproj.settings.local") application = get_wsgi_application() drf-yasg-1.20.1/testproj/todo/000077500000000000000000000000001416705305200161315ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/todo/__init__.py000066400000000000000000000000001416705305200202300ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/todo/migrations/000077500000000000000000000000001416705305200203055ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/todo/migrations/0001_initial.py000066400000000000000000000024371416705305200227560ustar00rootroot00000000000000# Generated by Django 2.0.1 on 2018-03-18 18:32 from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Todo', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=50)), ], ), migrations.CreateModel( name='TodoAnother', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=50)), ('todo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='todo.Todo')), ], ), migrations.CreateModel( name='TodoYetAnother', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=50)), ('todo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='todo.TodoAnother')), ], ), ] drf-yasg-1.20.1/testproj/todo/migrations/0002_todotree.py000066400000000000000000000013271416705305200231500ustar00rootroot00000000000000# Generated by Django 2.0.4 on 2018-04-26 13:06 from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ ('todo', '0001_initial'), ] operations = [ migrations.CreateModel( name='TodoTree', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=50)), ('parent', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='todo.TodoTree')), ], ), ] drf-yasg-1.20.1/testproj/todo/migrations/0003_pack.py000066400000000000000000000012301416705305200222330ustar00rootroot00000000000000# Generated by Django 2.1.5 on 2019-04-01 00:28 from decimal import Decimal from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('todo', '0002_todotree'), ] operations = [ migrations.CreateModel( name='Pack', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('size_code', models.DecimalField(choices=[(Decimal('50'), '5x10'), (Decimal('100'), '10x10'), (Decimal('200'), '10x20')], decimal_places=3, default=Decimal('200'), max_digits=7)), ], ), ] drf-yasg-1.20.1/testproj/todo/migrations/__init__.py000066400000000000000000000000001416705305200224040ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/todo/models.py000066400000000000000000000020601416705305200177640ustar00rootroot00000000000000from decimal import Decimal from django.db import models class Todo(models.Model): title = models.CharField(max_length=50) class TodoAnother(models.Model): todo = models.ForeignKey(Todo, on_delete=models.CASCADE) title = models.CharField(max_length=50) class TodoYetAnother(models.Model): todo = models.ForeignKey(TodoAnother, on_delete=models.CASCADE) title = models.CharField(max_length=50) class TodoTree(models.Model): parent = models.ForeignKey('self', on_delete=models.CASCADE, related_name='children', null=True) title = models.CharField(max_length=50) class Pack(models.Model): SIZE_10x20 = Decimal(200.000) SIZE_10x10 = Decimal(100.000) SIZE_5x10 = Decimal(50.000) size_code_choices = ( (SIZE_5x10, '5x10'), (SIZE_10x10, '10x10'), (SIZE_10x20, '10x20'), ) size_code = models.DecimalField(max_digits=7, decimal_places=3, choices=size_code_choices, default=SIZE_10x20) drf-yasg-1.20.1/testproj/todo/serializer.py000066400000000000000000000040311416705305200206520ustar00rootroot00000000000000from collections import OrderedDict from django.utils import timezone from rest_framework import serializers from rest_framework_recursive.fields import RecursiveField from .models import Pack, Todo, TodoAnother, TodoTree, TodoYetAnother class TodoSerializer(serializers.ModelSerializer): class Meta: model = Todo fields = ('title', 'a_hidden_field',) a_hidden_field = serializers.HiddenField(default=timezone.now) class TodoAnotherSerializer(serializers.ModelSerializer): todo = TodoSerializer() class Meta: model = TodoAnother fields = ('title', 'todo') class TodoYetAnotherSerializer(serializers.ModelSerializer): class Meta: model = TodoYetAnother fields = ('title', 'todo') depth = 2 swagger_schema_fields = { 'example': OrderedDict([ ('title', 'parent'), ('todo', OrderedDict([ ('title', 'child'), ('todo', None), ])), ]) } class TodoTreeSerializer(serializers.ModelSerializer): children = serializers.ListField(child=RecursiveField(), source='children.all') many_children = RecursiveField(many=True, source='children') class Meta: model = TodoTree fields = ('id', 'title', 'children', 'many_children') class TodoRecursiveSerializer(serializers.ModelSerializer): parent = RecursiveField(read_only=True) parent_id = serializers.PrimaryKeyRelatedField(queryset=TodoTree.objects.all(), pk_field=serializers.IntegerField(), write_only=True, allow_null=True, required=False, default=None, source='parent') class Meta: model = TodoTree fields = ('id', 'title', 'parent', 'parent_id') class HarvestSerializer(serializers.ModelSerializer): class Meta: model = Pack fields = ( 'size_code', ) read_only_fields = ( 'size_code', ) drf-yasg-1.20.1/testproj/todo/urls.py000066400000000000000000000011011416705305200174610ustar00rootroot00000000000000from django.urls import path from rest_framework import routers from todo import views router = routers.DefaultRouter() router.register(r'', views.TodoViewSet) router.register(r'another', views.TodoAnotherViewSet) router.register(r'yetanother', views.TodoYetAnotherViewSet) router.register(r'tree', views.TodoTreeView) router.register(r'recursive', views.TodoRecursiveView) router.register(r'harvest', views.HarvestViewSet) urlpatterns = router.urls urlpatterns += [ path(r'/yetanothers//', views.NestedTodoView.as_view(), ), ] drf-yasg-1.20.1/testproj/todo/views.py000066400000000000000000000061531416705305200176450ustar00rootroot00000000000000from rest_framework import mixins, permissions, viewsets from rest_framework.authentication import TokenAuthentication from rest_framework.generics import RetrieveAPIView from drf_yasg.utils import swagger_auto_schema from .models import Pack, Todo, TodoAnother, TodoTree, TodoYetAnother from .serializer import ( HarvestSerializer, TodoAnotherSerializer, TodoRecursiveSerializer, TodoSerializer, TodoTreeSerializer, TodoYetAnotherSerializer ) class TodoViewSet(viewsets.ReadOnlyModelViewSet): queryset = Todo.objects.all() serializer_class = TodoSerializer lookup_field = 'id' lookup_value_regex = '[0-9]+' class TodoAnotherViewSet(viewsets.ReadOnlyModelViewSet): queryset = TodoAnother.objects.all() serializer_class = TodoAnotherSerializer class TodoYetAnotherViewSet(viewsets.ReadOnlyModelViewSet): queryset = TodoYetAnother.objects.all() serializer_class = TodoYetAnotherSerializer class NestedTodoView(RetrieveAPIView): serializer_class = TodoYetAnotherSerializer class TodoTreeView(viewsets.ReadOnlyModelViewSet): queryset = TodoTree.objects.all() def get_serializer_class(self): if getattr(self, 'swagger_fake_view', False): return TodoTreeSerializer raise NotImplementedError("must not call this") class TodoRecursiveView(viewsets.ModelViewSet): queryset = TodoTree.objects.all() def get_serializer(self, *args, **kwargs): raise NotImplementedError("must not call this") def get_serializer_class(self): raise NotImplementedError("must not call this") def get_serializer_context(self): raise NotImplementedError("must not call this") @swagger_auto_schema(request_body=TodoRecursiveSerializer) def create(self, request, *args, **kwargs): return super(TodoRecursiveView, self).create(request, *args, **kwargs) @swagger_auto_schema(responses={200: None, 302: 'Redirect somewhere'}) def retrieve(self, request, *args, **kwargs): return super(TodoRecursiveView, self).retrieve(request, *args, **kwargs) @swagger_auto_schema(request_body=TodoRecursiveSerializer) def update(self, request, *args, **kwargs): return super(TodoRecursiveView, self).update(request, *args, **kwargs) @swagger_auto_schema(request_body=TodoRecursiveSerializer) def partial_update(self, request, *args, **kwargs): return super(TodoRecursiveView, self).update(request, *args, **kwargs) def destroy(self, request, *args, **kwargs): return super(TodoRecursiveView, self).destroy(request, *args, **kwargs) @swagger_auto_schema(responses={200: TodoRecursiveSerializer(many=True)}) def list(self, request, *args, **kwargs): return super(TodoRecursiveView, self).list(request, *args, **kwargs) class HarvestViewSet(mixins.ListModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet): queryset = Pack.objects.all() serializer_class = HarvestSerializer permission_classes = [permissions.IsAuthenticated] authentication_classes = [TokenAuthentication] def perform_update(self, serializer): pass drf-yasg-1.20.1/testproj/users/000077500000000000000000000000001416705305200163255ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/users/__init__.py000066400000000000000000000000001416705305200204240ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/users/method_serializers.py000066400000000000000000000042751416705305200226030ustar00rootroot00000000000000import datetime import decimal import uuid from rest_framework import serializers class Unknown(object): pass class MethodFieldExampleSerializer(serializers.Serializer): """ Implementation of SerializerMethodField using type hinting for Python >= 3.5 """ hinted_bool = serializers.SerializerMethodField( help_text="the type hint on the method should determine this to be a bool") def get_hinted_bool(self, obj) -> bool: return True hinted_int = serializers.SerializerMethodField( help_text="the type hint on the method should determine this to be an integer") def get_hinted_int(self, obj) -> int: return 1 hinted_float = serializers.SerializerMethodField( help_text="the type hint on the method should determine this to be a number") def get_hinted_float(self, obj) -> float: return 1.0 hinted_decimal = serializers.SerializerMethodField( help_text="the type hint on the method should determine this to be a decimal") def get_hinted_decimal(self, obj) -> decimal.Decimal: return decimal.Decimal(1) hinted_datetime = serializers.SerializerMethodField( help_text="the type hint on the method should determine this to be a datetime") def get_hinted_datetime(self, obj) -> datetime.datetime: return datetime.datetime.now() hinted_date = serializers.SerializerMethodField( help_text="the type hint on the method should determine this to be a date") def get_hinted_date(self, obj) -> datetime.date: return datetime.date.today() hinted_uuid = serializers.SerializerMethodField( help_text="the type hint on the method should determine this to be a uuid") def get_hinted_uuid(self, obj) -> uuid.UUID: return uuid.uuid4() hinted_unknown = serializers.SerializerMethodField( help_text="type hint is unknown, so is expected to fallback to string") def get_hinted_unknown(self, obj) -> Unknown: return Unknown() non_hinted_number = serializers.SerializerMethodField( help_text="No hint on the method, so this is expected to fallback to string") def get_non_hinted_number(self, obj): return 1.0 drf-yasg-1.20.1/testproj/users/migrations/000077500000000000000000000000001416705305200205015ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/users/migrations/0001_create_admin_user.py000066400000000000000000000021331416705305200251630ustar00rootroot00000000000000# Generated by Django 2.1.3 on 2018-12-19 08:07 import sys from django.conf import settings from django.contrib.auth.hashers import make_password from django.db import migrations, IntegrityError, transaction def add_default_user(apps, schema_editor): username = 'admin' email = 'admin@admin.admin' password = 'passwordadmin' User = apps.get_model(settings.AUTH_USER_MODEL) try: with transaction.atomic(): admin = User( username=username, email=email, password=make_password(password), is_superuser=True, is_staff=True ) admin.save() except IntegrityError: sys.stdout.write(" User '%s <%s>' already exists..." % (username, email)) else: sys.stdout.write(" Created superuser '%s <%s>' with password '%s'!" % (username, email, password)) class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.RunPython(add_default_user) ] drf-yasg-1.20.1/testproj/users/migrations/0002_setup_oauth2_apps.py000066400000000000000000000023601416705305200251620ustar00rootroot00000000000000# Generated by Django 2.1.3 on 2018-12-19 07:57 from django.conf import settings from django.db import migrations def add_oauth_apps(apps, schema_editor): # We can't import the Person model directly as it may be a newer # version than this migration expects. We use the historical version. User = apps.get_model(settings.AUTH_USER_MODEL) Application = apps.get_model('oauth2_provider', 'application') user = User.objects.get(username='admin') oauth2_apps = [ { "user": user, "client_type": "public", "authorization_grant_type": "password", "client_id": settings.OAUTH2_CLIENT_ID, "client_secret": settings.OAUTH2_CLIENT_SECRET, "redirect_uris": settings.OAUTH2_REDIRECT_URL, "name": settings.OAUTH2_APP_NAME } ] for app in oauth2_apps: Application.objects.get_or_create(client_id=app['client_id'], defaults=app) class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('oauth2_provider', '0002_auto_20190406_1805'), ('users', '0001_create_admin_user'), ] operations = [ migrations.RunPython(add_oauth_apps) ] drf-yasg-1.20.1/testproj/users/migrations/__init__.py000066400000000000000000000000001416705305200226000ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/users/models.py000066400000000000000000000000001416705305200201500ustar00rootroot00000000000000drf-yasg-1.20.1/testproj/users/serializers.py000066400000000000000000000062431416705305200212400ustar00rootroot00000000000000import typing # noqa: F401 from django.contrib.auth.models import User from rest_framework import serializers from drf_yasg.utils import swagger_serializer_method from snippets.models import Snippet from .method_serializers import MethodFieldExampleSerializer class OtherStuffSerializer(serializers.Serializer): foo = serializers.CharField() class UserSerializerrr(serializers.ModelSerializer): snippets = serializers.PrimaryKeyRelatedField(many=True, queryset=Snippet.objects.all()) article_slugs = serializers.SlugRelatedField(read_only=True, slug_field='slug', many=True, source='articles') last_connected_ip = serializers.IPAddressField(help_text="i'm out of ideas", protocol='ipv4', read_only=True) last_connected_at = serializers.DateField(help_text="really?", read_only=True) other_stuff = serializers.SerializerMethodField( help_text="the decorator should determine the serializer class for this") hint_example = MethodFieldExampleSerializer() @swagger_serializer_method(serializer_or_field=OtherStuffSerializer) def get_other_stuff(self, obj): """ method_field that uses a serializer internally. By using the decorator, we can tell drf-yasg how to represent this in Swagger :param obj: :return: """ return OtherStuffSerializer().data help_text_example_1 = serializers.SerializerMethodField( help_text="help text on field is set, so this should appear in swagger" ) @swagger_serializer_method(serializer_or_field=serializers.IntegerField( help_text="decorated instance help_text shouldn't appear in swagger because field has priority")) def get_help_text_example_1(self): """ method docstring shouldn't appear in swagger because field has priority :return: """ return 1 help_text_example_2 = serializers.SerializerMethodField() @swagger_serializer_method(serializer_or_field=serializers.IntegerField( help_text="instance help_text is set, so should appear in swagger")) def get_help_text_example_2(self): """ method docstring shouldn't appear in swagger because decorator has priority :return: """ return 1 help_text_example_3 = serializers.SerializerMethodField() @swagger_serializer_method(serializer_or_field=serializers.IntegerField()) def get_help_text_example_3(self): """ docstring is set so should appear in swagger as fallback :return: """ return 1 class Meta: model = User fields = ('id', 'username', 'email', 'articles', 'snippets', 'last_connected_ip', 'last_connected_at', 'article_slugs', 'other_stuff', 'hint_example', 'help_text_example_1', 'help_text_example_2', 'help_text_example_3') class UserListQuerySerializer(serializers.Serializer): username = serializers.CharField(help_text="this field is generated from a query_serializer", required=False) is_staff = serializers.BooleanField(help_text="this one too!", required=False) styles = serializers.MultipleChoiceField(help_text="and this one is fancy!", choices=('a', 'b', 'c', 'd')) drf-yasg-1.20.1/testproj/users/urls.py000066400000000000000000000002331416705305200176620ustar00rootroot00000000000000from django.urls import path from users import views urlpatterns = [ path('', views.UserList.as_view()), path('/', views.user_detail), ] drf-yasg-1.20.1/testproj/users/views.py000066400000000000000000000044371416705305200200440ustar00rootroot00000000000000from django.contrib.auth.models import User from rest_framework import status from rest_framework.decorators import api_view from rest_framework.generics import get_object_or_404 from rest_framework.response import Response from rest_framework.views import APIView from drf_yasg import openapi from drf_yasg.utils import swagger_auto_schema from users.serializers import UserListQuerySerializer, UserSerializerrr class UserList(APIView): """UserList cbv classdoc""" @swagger_auto_schema( query_serializer=UserListQuerySerializer, responses={200: UserSerializerrr(many=True)}, tags=['Users'], ) def get(self, request): queryset = User.objects.all() serializer = UserSerializerrr(queryset, many=True) return Response(serializer.data) @swagger_auto_schema( operation_description="apiview post description override", request_body=openapi.Schema( type=openapi.TYPE_OBJECT, required=['username'], properties={ 'username': openapi.Schema(type=openapi.TYPE_STRING) }, ), security=[], tags=['Users'], ) def post(self, request): serializer = UserSerializerrr(request.data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) @swagger_auto_schema(operation_id="users_dummy", operation_description="dummy operation", tags=['Users']) def patch(self, request): pass @swagger_auto_schema(method='put', request_body=UserSerializerrr, tags=['Users']) @swagger_auto_schema(methods=['get'], manual_parameters=[ openapi.Parameter('test', openapi.IN_QUERY, "test manual param", type=openapi.TYPE_BOOLEAN), openapi.Parameter('test_array', openapi.IN_QUERY, "test query array arg", type=openapi.TYPE_ARRAY, items=openapi.Items(type=openapi.TYPE_STRING), required=True, collection_format='multi'), ], responses={ 200: openapi.Response('response description', UserSerializerrr), }, tags=['Users']) @api_view(['GET', 'PUT']) def user_detail(request, pk): """user_detail fbv docstring""" user = get_object_or_404(User.objects, pk=pk) serializer = UserSerializerrr(user) return Response(serializer.data) drf-yasg-1.20.1/tests/000077500000000000000000000000001416705305200144545ustar00rootroot00000000000000drf-yasg-1.20.1/tests/conftest.py000066400000000000000000000066611416705305200166640ustar00rootroot00000000000000import copy import json import os from collections import OrderedDict from io import StringIO import pytest from datadiff.tools import assert_equal from django.contrib.auth.models import User from django.core.management import call_command from rest_framework.test import APIRequestFactory from rest_framework.views import APIView from drf_yasg import codecs, openapi from drf_yasg.codecs import yaml_sane_dump, yaml_sane_load from drf_yasg.generators import OpenAPISchemaGenerator @pytest.fixture def mock_schema_request(db): from rest_framework.test import force_authenticate factory = APIRequestFactory() user = User.objects.get(username='admin') request = factory.get('/swagger.json') force_authenticate(request, user=user) request = APIView().initialize_request(request) return request @pytest.fixture def codec_json(): return codecs.OpenAPICodecJson(['flex', 'ssv']) @pytest.fixture def codec_yaml(): return codecs.OpenAPICodecYaml(['ssv', 'flex']) @pytest.fixture def swagger(mock_schema_request): generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), version="v2", ) return generator.get_schema(mock_schema_request, True) @pytest.fixture def swagger_dict(swagger, codec_json): json_bytes = codec_json.encode(swagger) return json.loads(json_bytes.decode('utf-8'), object_pairs_hook=OrderedDict) @pytest.fixture def validate_schema(): def validate_schema(swagger): try: from flex.core import parse as validate_flex validate_flex(copy.deepcopy(swagger)) except ImportError: pass from swagger_spec_validator.validator20 import validate_spec as validate_ssv validate_ssv(copy.deepcopy(swagger)) return validate_schema @pytest.fixture def call_generate_swagger(): def call_generate_swagger(output_file='-', overwrite=False, format='', api_url='', mock=False, user=None, private=False, generator_class_name='', **kwargs): out = StringIO() call_command( 'generate_swagger', stdout=out, output_file=output_file, overwrite=overwrite, format=format, api_url=api_url, mock=mock, user=user, private=private, generator_class_name=generator_class_name, **kwargs ) return out.getvalue() return call_generate_swagger @pytest.fixture def compare_schemas(): def compare_schemas(schema1, schema2): schema1 = OrderedDict(schema1) schema2 = OrderedDict(schema2) ignore = ['info', 'host', 'schemes', 'basePath', 'securityDefinitions'] for attr in ignore: schema1.pop(attr, None) schema2.pop(attr, None) # print diff between YAML strings because it's prettier assert_equal(yaml_sane_dump(schema1, binary=False), yaml_sane_dump(schema2, binary=False)) return compare_schemas @pytest.fixture def swagger_settings(settings): swagger_settings = copy.deepcopy(settings.SWAGGER_SETTINGS) settings.SWAGGER_SETTINGS = swagger_settings return swagger_settings @pytest.fixture def redoc_settings(settings): redoc_settings = copy.deepcopy(settings.REDOC_SETTINGS) settings.REDOC_SETTINGS = redoc_settings return redoc_settings @pytest.fixture def reference_schema(): with open(os.path.join(os.path.dirname(__file__), 'reference.yaml')) as reference: return yaml_sane_load(reference) drf-yasg-1.20.1/tests/reference.yaml000066400000000000000000001067521416705305200173110ustar00rootroot00000000000000swagger: '2.0' info: title: Snippets API description: |- This is a demo project for the [drf-yasg](https://github.com/axnsan12/drf-yasg) Django Rest Framework library. The `swagger-ui` view can be found [here](/cached/swagger). The `ReDoc` view can be found [here](/cached/redoc). The swagger YAML document can be found [here](/cached/swagger.yaml). You can log in using the pre-existing `admin` user with password `passwordadmin`. termsOfService: https://www.google.com/policies/terms/ contact: email: contact@snippets.local license: name: BSD License version: v1 host: test.local:8002 schemes: - http basePath: / consumes: - application/json produces: - application/json securityDefinitions: Basic: type: basic Bearer: in: header name: Authorization type: apiKey OAuth2 password: flow: password scopes: read: Read everything. write: Write everything, tokenUrl: /o/token/ type: oauth2 Query: in: query name: auth type: apiKey security: - Basic: [] - Bearer: [] - OAuth2 password: [] - Query: [] paths: /articles/: get: operationId: articles_list description: description from swagger_auto_schema via method_decorator parameters: - name: title in: query description: Filter the returned list by title required: false type: string - name: ordering in: query description: Which field to use when ordering the results. required: false type: string - name: limit in: query description: Number of results to return per page. required: false type: integer - name: offset in: query description: The initial index from which to return the results. required: false type: integer responses: '200': description: '' schema: required: - count - results type: object properties: count: type: integer next: type: string format: uri x-nullable: true previous: type: string format: uri x-nullable: true results: type: array items: $ref: '#/definitions/Article' tags: - articles post: operationId: articles_create description: ArticleViewSet class docstring parameters: - name: data in: body required: true schema: $ref: '#/definitions/Article' responses: '201': description: '' schema: $ref: '#/definitions/Article' tags: - articles parameters: [] /articles/today/: get: operationId: articles_today description: ArticleViewSet class docstring parameters: - name: title in: query description: Filter the returned list by title required: false type: string - name: ordering in: query description: Which field to use when ordering the results. required: false type: string responses: '200': description: '' schema: type: array items: $ref: '#/definitions/Article' tags: - articles parameters: [] /articles/{slug}/: get: operationId: articles_read description: retrieve class docstring parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/Article' tags: - articles put: operationId: no_body_test description: update method docstring parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/Article' tags: - articles patch: operationId: articles_partial_update summary: partial_update summary description: partial_update description override parameters: - name: data in: body required: true schema: $ref: '#/definitions/Article' responses: '200': description: '' schema: $ref: '#/definitions/Article' '404': description: slug not found tags: - articles deprecated: true delete: operationId: articles_delete description: destroy method docstring parameters: [] responses: '204': description: '' tags: - articles parameters: - name: slug in: path description: slug model help_text required: true type: string format: slug pattern: '[a-z0-9]+(?:-[a-z0-9]+)' /articles/{slug}/image/: get: operationId: articles_image_read description: image GET description override parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/Article' consumes: - multipart/form-data tags: - articles post: operationId: articles_image_create description: image method docstring parameters: - name: what_am_i_doing in: formData description: test required: false type: string pattern: ^69$ default: '69' minLength: 1 x-nullable: true - name: image_styles in: formData description: Parameter with Items required: true type: array items: type: string enum: - wide - tall - thumb - social - name: upload in: formData description: image serializer help_text required: true type: file responses: '201': description: '' schema: $ref: '#/definitions/ImageUpload' consumes: - multipart/form-data tags: - articles delete: operationId: articles_image_delete description: image method docstring parameters: - name: delete_form_param in: formData description: this should not crash (form parameter on DELETE method) type: integer responses: '204': description: '' consumes: - multipart/form-data tags: - articles parameters: - name: slug in: path description: slug model help_text required: true type: string format: slug pattern: '[a-z0-9]+(?:-[a-z0-9]+)' /people/: get: operationId: people_list description: '' parameters: - name: unknown_paginator in: query type: string responses: '200': description: '' schema: type: array items: $ref: '#/definitions/Person' tags: - people post: operationId: people_create description: '' parameters: - name: data in: body required: true schema: $ref: '#/definitions/Person' responses: '201': description: '' schema: $ref: '#/definitions/Person' tags: - people parameters: [] /people/{id}: get: operationId: people_read description: '' parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/Person' tags: - people patch: operationId: people_partial_update description: '' parameters: - name: data in: body required: true schema: $ref: '#/definitions/Person' responses: '200': description: '' schema: $ref: '#/definitions/Person' tags: - people delete: operationId: people_delete description: '' parameters: [] responses: '204': description: '' tags: - people parameters: - name: id in: path description: A unique integer value identifying this person. required: true type: integer /people/{person}/identity: get: operationId: people_identity_read description: '' parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/Identity' tags: - people patch: operationId: people_identity_partial_update description: '' parameters: - name: data in: body required: true schema: $ref: '#/definitions/Identity' responses: '200': description: '' schema: $ref: '#/definitions/Identity' tags: - people parameters: - name: person in: path required: true type: string /plain/: get: operationId: plain_list description: '' parameters: [] responses: '200': description: '' tags: - plain parameters: [] /snippets/: get: operationId: snippetsList description: SnippetList classdoc parameters: [] responses: '200': description: '' schema: type: array items: $ref: '#/definitions/Snippet' tags: - snippets post: operationId: snippetsCreate description: post method docstring parameters: - name: data in: body required: true schema: $ref: '#/definitions/Snippet' responses: '201': description: '' schema: $ref: '#/definitions/Snippet' tags: - snippets delete: operationId: snippetsDeleteBulk summary: summary from docstring description: description body is here, summary is not included parameters: - name: data in: body required: true schema: type: object properties: body: description: this should not crash (request body on DELETE method) type: string responses: '204': description: '' tags: - snippets parameters: [] /snippets/views/{snippet_pk}/: get: operationId: snippetsViewsRead description: SnippetViewerList classdoc parameters: - name: page in: query description: A page number within the paginated result set. required: false type: integer responses: '200': description: '' schema: required: - count - results type: object properties: count: type: integer next: type: string format: uri x-nullable: true previous: type: string format: uri x-nullable: true results: type: array items: $ref: '#/definitions/SnippetViewer' tags: - snippets parameters: - name: snippet_pk in: path required: true type: string /snippets/{id}/: get: operationId: snippetsRead description: SnippetDetail classdoc parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/Snippet' tags: - snippets put: operationId: snippetsUpdate description: put class docstring parameters: - name: data in: body required: true schema: $ref: '#/definitions/Snippet' responses: '200': description: '' schema: $ref: '#/definitions/Snippet' tags: - snippets patch: operationId: snippetsPartialUpdate description: patch method docstring parameters: - name: data in: body required: true schema: $ref: '#/definitions/Snippet' responses: '200': description: '' schema: $ref: '#/definitions/Snippet' tags: - snippets delete: operationId: snippetsDelete description: delete method docstring parameters: - name: id in: path description: path parameter override required: true type: integer responses: '204': description: this should not crash (response object with no schema) tags: - snippets parameters: - name: id in: path description: A unique integer value identifying this snippet. required: true type: integer /todo/: get: operationId: todo_list description: '' parameters: [] responses: '200': description: '' schema: type: array items: $ref: '#/definitions/Todo' tags: - todo parameters: [] /todo/another/: get: operationId: todo_another_list description: '' parameters: [] responses: '200': description: '' schema: type: array items: $ref: '#/definitions/TodoAnother' tags: - todo parameters: [] /todo/another/{id}/: get: operationId: todo_another_read description: '' parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/TodoAnother' tags: - todo parameters: - name: id in: path description: A unique integer value identifying this todo another. required: true type: integer /todo/harvest/: get: operationId: todo_harvest_list description: '' parameters: [] responses: '200': description: '' schema: type: array items: $ref: '#/definitions/Harvest' tags: - todo parameters: [] /todo/harvest/{id}/: put: operationId: todo_harvest_update description: '' parameters: - name: data in: body required: true schema: $ref: '#/definitions/Harvest' responses: '200': description: '' schema: $ref: '#/definitions/Harvest' tags: - todo patch: operationId: todo_harvest_partial_update description: '' parameters: - name: data in: body required: true schema: $ref: '#/definitions/Harvest' responses: '200': description: '' schema: $ref: '#/definitions/Harvest' tags: - todo parameters: - name: id in: path description: A unique integer value identifying this pack. required: true type: integer /todo/recursive/: get: operationId: todo_recursive_list description: '' parameters: [] responses: '200': description: '' schema: type: array items: $ref: '#/definitions/TodoRecursive' tags: - todo post: operationId: todo_recursive_create description: '' parameters: - name: data in: body required: true schema: $ref: '#/definitions/TodoRecursive' responses: '201': description: '' schema: $ref: '#/definitions/TodoRecursive' tags: - todo parameters: [] /todo/recursive/{id}/: get: operationId: todo_recursive_read description: '' parameters: [] responses: '302': description: Redirect somewhere tags: - todo put: operationId: todo_recursive_update description: '' parameters: - name: data in: body required: true schema: $ref: '#/definitions/TodoRecursive' responses: '200': description: '' schema: $ref: '#/definitions/TodoRecursive' tags: - todo patch: operationId: todo_recursive_partial_update description: '' parameters: - name: data in: body required: true schema: $ref: '#/definitions/TodoRecursive' responses: '200': description: '' schema: $ref: '#/definitions/TodoRecursive' tags: - todo delete: operationId: todo_recursive_delete description: '' parameters: [] responses: '204': description: '' tags: - todo parameters: - name: id in: path description: A unique integer value identifying this todo tree. required: true type: integer /todo/tree/: get: operationId: todo_tree_list description: '' parameters: [] responses: '200': description: '' schema: type: array items: $ref: '#/definitions/TodoTree' tags: - todo parameters: [] /todo/tree/{id}/: get: operationId: todo_tree_read description: '' parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/TodoTree' tags: - todo parameters: - name: id in: path description: A unique integer value identifying this todo tree. required: true type: integer /todo/yetanother/: get: operationId: todo_yetanother_list description: '' parameters: [] responses: '200': description: '' schema: type: array items: $ref: '#/definitions/TodoYetAnother' tags: - todo parameters: [] /todo/yetanother/{id}/: get: operationId: todo_yetanother_read description: '' parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/TodoYetAnother' tags: - todo parameters: - name: id in: path description: A unique integer value identifying this todo yet another. required: true type: integer /todo/{id}/: get: operationId: todo_read description: '' parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/Todo' tags: - todo parameters: - name: id in: path description: A unique integer value identifying this todo. required: true type: integer /todo/{todo_id}/yetanothers/{yetanother_id}/: get: operationId: todo_yetanothers_read description: '' parameters: [] responses: '200': description: '' schema: $ref: '#/definitions/TodoYetAnother' tags: - todo parameters: - name: todo_id in: path required: true type: string - name: yetanother_id in: path required: true type: string /users/: get: operationId: users_list description: UserList cbv classdoc parameters: - name: username in: query description: this field is generated from a query_serializer required: false type: string minLength: 1 - name: is_staff in: query description: this one too! required: false type: boolean - name: styles in: query description: and this one is fancy! required: true type: array items: type: string enum: - a - b - c - d collectionFormat: multi responses: '200': description: '' schema: type: array items: $ref: '#/definitions/UserSerializerrr' tags: - Users post: operationId: users_create description: apiview post description override parameters: - name: data in: body required: true schema: required: - username type: object properties: username: type: string responses: '201': description: '' schema: required: - username type: object properties: username: type: string tags: - Users security: [] patch: operationId: users_dummy description: dummy operation parameters: [] responses: '200': description: '' tags: - Users parameters: [] /users/{id}/: get: operationId: users_read description: user_detail fbv docstring parameters: - name: test in: query description: test manual param type: boolean - name: test_array in: query description: test query array arg required: true type: array items: type: string collectionFormat: multi responses: '200': description: response description schema: $ref: '#/definitions/UserSerializerrr' tags: - Users put: operationId: users_update description: user_detail fbv docstring parameters: - name: data in: body required: true schema: $ref: '#/definitions/UserSerializerrr' responses: '200': description: '' schema: $ref: '#/definitions/UserSerializerrr' tags: - Users parameters: - name: id in: path required: true type: string definitions: Article: required: - title - body - group type: object properties: title: description: title model help_text type: string maxLength: 255 minLength: 1 author: description: The ID of the user that created this article; if none is provided, defaults to the currently logged in user. type: integer default: 1 body: description: body serializer help_text type: string maxLength: 5000 minLength: 1 slug: description: slug model help_text type: string format: slug pattern: ^[-a-zA-Z0-9_]+$ maxLength: 50 date_created: type: string format: date-time readOnly: true date_modified: type: string format: date-time readOnly: true read_only_nullable: type: string readOnly: true minLength: 1 x-nullable: true references: description: this is a really bad example type: object additionalProperties: description: but i needed to test these 2 fields somehow type: string format: uri minLength: 1 readOnly: true uuid: description: should articles have UUIDs? type: string format: uuid readOnly: true cover: type: string readOnly: true format: uri cover_name: type: string readOnly: true article_type: description: IntegerField declared on model with choices=(...) and exposed via ModelSerializer type: integer enum: - 1 - 2 - 3 - 7 - 8 x-nullable: true group: type: string format: uuid original_group: type: string format: uuid readOnly: true ImageUpload: required: - image_styles type: object properties: image_id: type: string format: uuid readOnly: true what_am_i_doing: description: test type: string pattern: ^69$ default: '69' minLength: 1 x-nullable: true image_styles: description: Parameter with Items type: array items: type: string enum: - wide - tall - thumb - social upload: description: image serializer help_text type: string readOnly: true format: uri Identity: type: object properties: id: title: ID type: integer readOnly: true first_name: title: First name type: string maxLength: 30 minLength: 1 x-nullable: true last_name: title: Last name description: Here's some HTML! type: string maxLength: 30 minLength: 1 x-nullable: true Person: required: - identity type: object properties: id: title: ID type: integer readOnly: true identity: $ref: '#/definitions/Identity' Project: required: - projectName - githubRepo type: object properties: projectName: title: project name custom title description: Name of the project type: string minLength: 1 githubRepo: title: Github repo description: Github repository of the project type: string minLength: 1 Snippet: required: - code - tags - language - nullableSecondaryLanguage type: object properties: id: title: Id description: id serializer help text type: integer readOnly: true created: title: Client date time suu type: string format: integer readOnly: true description: Date time in unix timestamp format owner: title: Owner description: The ID of the user that created this snippet; if none is provided, defaults to the currently logged in user. type: integer default: 1 ownerAsString: description: The ID of the user that created this snippet. type: string readOnly: true minLength: 1 title: Owner as string title: title: Title type: string maxLength: 100 code: title: Code type: string minLength: 1 tags: type: array items: type: string minLength: 2 maxItems: 15 minItems: 3 linenos: title: Linenos type: boolean language: description: Sample help text for language type: object properties: name: title: Name description: The name of the programming language type: string enum: - cpp - js - python default: python readOnlyNullable: title: Read only nullable type: string readOnly: true minLength: 1 x-nullable: true styles: type: array items: type: string enum: - monokai - solarized-dark - vim default: - solarized-dark lines: type: array items: type: integer x-nullable: true exampleProjects: type: array items: $ref: '#/definitions/Project' readOnly: true maxItems: 100 difficultyFactor: title: Difficulty factor description: this is here just to test FloatField type: number readOnly: true default: 6.9 rateAsString: title: Rate as string type: string format: decimal default: '0.000' rate: title: Rate type: number format: decimal default: 0.0 minimum: 0.0 nullableSecondaryLanguage: type: object properties: name: title: Name description: The name of the programming language type: string enum: - cpp - js - python default: python readOnlyNullable: title: Read only nullable type: string readOnly: true minLength: 1 x-nullable: true x-nullable: true SnippetViewer: required: - snippet - viewer type: object properties: id: title: ID type: integer readOnly: true snippet: title: Snippet type: integer viewer: title: Viewer type: integer Todo: required: - title type: object properties: title: title: Title type: string maxLength: 50 minLength: 1 TodoAnother: required: - title - todo type: object properties: title: title: Title type: string maxLength: 50 minLength: 1 todo: $ref: '#/definitions/Todo' Harvest: type: object properties: size_code: title: Size code type: string enum: - '50' - '100' - '200' readOnly: true TodoRecursive: required: - title type: object properties: id: title: ID type: integer readOnly: true title: title: Title type: string maxLength: 50 minLength: 1 parent: $ref: '#/definitions/TodoRecursive' parent_id: type: integer title: Parent id x-nullable: true TodoTree: required: - title - children - many_children type: object properties: id: title: ID type: integer readOnly: true title: title: Title type: string maxLength: 50 minLength: 1 children: type: array items: $ref: '#/definitions/TodoTree' many_children: type: array items: $ref: '#/definitions/TodoTree' TodoYetAnother: required: - title type: object properties: title: title: Title type: string maxLength: 50 minLength: 1 todo: required: - title type: object properties: id: title: ID type: integer readOnly: true title: title: Title type: string maxLength: 50 minLength: 1 todo: required: - title type: object properties: id: title: ID type: integer readOnly: true title: title: Title type: string maxLength: 50 minLength: 1 readOnly: true readOnly: true example: title: parent todo: title: child todo: null OtherStuff: description: the decorator should determine the serializer class for this required: - foo type: object properties: foo: title: Foo type: string minLength: 1 MethodFieldExample: type: object properties: hinted_bool: title: Hinted bool description: the type hint on the method should determine this to be a bool type: boolean readOnly: true hinted_int: title: Hinted int description: the type hint on the method should determine this to be an integer type: integer readOnly: true hinted_float: title: Hinted float description: the type hint on the method should determine this to be a number type: number readOnly: true hinted_decimal: title: Hinted decimal description: the type hint on the method should determine this to be a decimal type: string format: decimal readOnly: true hinted_datetime: title: Hinted datetime description: the type hint on the method should determine this to be a datetime type: string format: date-time readOnly: true hinted_date: title: Hinted date description: the type hint on the method should determine this to be a date type: string format: date readOnly: true hinted_uuid: title: Hinted uuid description: the type hint on the method should determine this to be a uuid type: string format: uuid readOnly: true hinted_unknown: title: Hinted unknown description: type hint is unknown, so is expected to fallback to string type: string readOnly: true non_hinted_number: title: Non hinted number description: No hint on the method, so this is expected to fallback to string type: string readOnly: true UserSerializerrr: required: - username - articles - snippets - hint_example type: object properties: id: title: ID type: integer readOnly: true username: title: Username description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. type: string pattern: ^[\w.@+-]+$ maxLength: 150 minLength: 1 email: title: Email address type: string format: email maxLength: 254 articles: type: array items: type: integer uniqueItems: true snippets: type: array items: type: integer uniqueItems: true last_connected_ip: title: Last connected ip description: i'm out of ideas type: string format: ipv4 readOnly: true minLength: 1 last_connected_at: title: Last connected at description: really? type: string format: date readOnly: true article_slugs: type: array items: type: string format: slug pattern: ^[-a-zA-Z0-9_]+$ readOnly: true uniqueItems: true other_stuff: $ref: '#/definitions/OtherStuff' hint_example: $ref: '#/definitions/MethodFieldExample' help_text_example_1: title: Help text example 1 description: help text on field is set, so this should appear in swagger type: integer readOnly: true help_text_example_2: title: Help text example 2 description: instance help_text is set, so should appear in swagger type: integer readOnly: true help_text_example_3: title: Help text example 3 description: |2 docstring is set so should appear in swagger as fallback :return: type: integer readOnly: true drf-yasg-1.20.1/tests/test_form_parameters.py000066400000000000000000000030061416705305200212520ustar00rootroot00000000000000import pytest from django.urls import path from django.utils.decorators import method_decorator from rest_framework.authtoken.views import ObtainAuthToken from rest_framework.settings import api_settings from drf_yasg import openapi from drf_yasg.errors import SwaggerGenerationError from drf_yasg.generators import OpenAPISchemaGenerator from drf_yasg.utils import swagger_auto_schema def test_no_form_parameters_with_non_form_parsers(): # see https://github.com/axnsan12/drf-yasg/issues/270 # test that manual form parameters for views that haven't set # all their parsers classes to form parsers are not allowed # even when the request body is empty @method_decorator(name='post', decorator=swagger_auto_schema( operation_description="Logins a user and returns a token", manual_parameters=[ openapi.Parameter( "username", openapi.IN_FORM, required=True, type=openapi.TYPE_STRING, description="Valid username or email for authentication" ), ] )) class CustomObtainAuthToken(ObtainAuthToken): throttle_classes = api_settings.DEFAULT_THROTTLE_CLASSES urlpatterns = [ path('token/', CustomObtainAuthToken.as_view()), ] generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), patterns=urlpatterns ) with pytest.raises(SwaggerGenerationError): generator.get_schema(None, True) drf-yasg-1.20.1/tests/test_get_basic_type_info_from_hint.py000066400000000000000000000043341416705305200241320ustar00rootroot00000000000000import sys import uuid from typing import Dict, List, Optional, Set, Union import pytest from drf_yasg import openapi from drf_yasg.inspectors.field import get_basic_type_info_from_hint python39_generics_tests = [] if sys.version_info >= (3, 9): python39_generics_tests = [ (dict[int, int], {'type': openapi.TYPE_OBJECT, 'format': None}), (list[bool], {'type': openapi.TYPE_ARRAY, 'items': openapi.Items(openapi.TYPE_BOOLEAN)}), ] @pytest.mark.parametrize('hint_class, expected_swagger_type_info', [ (int, {'type': openapi.TYPE_INTEGER, 'format': None}), (str, {'type': openapi.TYPE_STRING, 'format': None}), (bool, {'type': openapi.TYPE_BOOLEAN, 'format': None}), (dict, {'type': openapi.TYPE_OBJECT, 'format': None}), (Dict[int, int], {'type': openapi.TYPE_OBJECT, 'format': None}), (uuid.UUID, {'type': openapi.TYPE_STRING, 'format': openapi.FORMAT_UUID}), (list, {'type': openapi.TYPE_ARRAY, 'items': openapi.Items(openapi.TYPE_STRING)}), (List[int], {'type': openapi.TYPE_ARRAY, 'items': openapi.Items(openapi.TYPE_INTEGER)}), (List[str], {'type': openapi.TYPE_ARRAY, 'items': openapi.Items(openapi.TYPE_STRING)}), (List[bool], {'type': openapi.TYPE_ARRAY, 'items': openapi.Items(openapi.TYPE_BOOLEAN)}), (Set[int], {'type': openapi.TYPE_ARRAY, 'items': openapi.Items(openapi.TYPE_INTEGER)}), (Optional[bool], {'type': openapi.TYPE_BOOLEAN, 'format': None, 'x-nullable': True}), (Optional[List[int]], { 'type': openapi.TYPE_ARRAY, 'items': openapi.Items(openapi.TYPE_INTEGER), 'x-nullable': True }), (Union[List[int], type(None)], { 'type': openapi.TYPE_ARRAY, 'items': openapi.Items(openapi.TYPE_INTEGER), 'x-nullable': True }), # Following cases are not 100% correct, but it should work somehow and not crash. (Union[int, float], None), (List, {'type': openapi.TYPE_ARRAY, 'items': openapi.Items(openapi.TYPE_STRING)}), ('SomeType', None), (type('SomeType', (object,), {}), None), (None, None), (6, None), ] + python39_generics_tests) def test_get_basic_type_info_from_hint(hint_class, expected_swagger_type_info): type_info = get_basic_type_info_from_hint(hint_class) assert type_info == expected_swagger_type_info drf-yasg-1.20.1/tests/test_management.py000066400000000000000000000060621416705305200202050ustar00rootroot00000000000000import json import os import random import string import tempfile from collections import OrderedDict import pytest from drf_yasg import openapi from drf_yasg.codecs import yaml_sane_load from drf_yasg.generators import OpenAPISchemaGenerator def test_reference_schema(call_generate_swagger, db, reference_schema): output = call_generate_swagger(format='yaml', api_url='http://test.local:8002/', user='admin') output_schema = yaml_sane_load(output) assert output_schema == reference_schema def test_non_public(call_generate_swagger, db): output = call_generate_swagger(format='yaml', api_url='http://test.local:8002/', private=True) output_schema = yaml_sane_load(output) assert len(output_schema['paths']) == 0 def test_no_mock(call_generate_swagger, db): output = call_generate_swagger() output_schema = json.loads(output, object_pairs_hook=OrderedDict) assert len(output_schema['paths']) > 0 class EmptySchemaGenerator(OpenAPISchemaGenerator): def get_paths(self, endpoints, components, request, public): return openapi.Paths(paths={}), '' def test_generator_class(call_generate_swagger, db): output = call_generate_swagger(generator_class_name='test_management.EmptySchemaGenerator') output_schema = json.loads(output, object_pairs_hook=OrderedDict) assert len(output_schema['paths']) == 0 def silentremove(filename): try: os.remove(filename) except OSError: pass def test_file_output(call_generate_swagger, db): prefix = os.path.join(tempfile.gettempdir(), tempfile.gettempprefix()) name = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(8)) yaml_file = prefix + name + '.yaml' json_file = prefix + name + '.json' other_file = prefix + name + '.txt' try: # when called with output file nothing should be written to stdout assert call_generate_swagger(output_file=yaml_file) == '' assert call_generate_swagger(output_file=json_file) == '' assert call_generate_swagger(output_file=other_file) == '' with pytest.raises(OSError): # a second call should fail because file exists call_generate_swagger(output_file=yaml_file) # a second call with overwrite should still succeed assert call_generate_swagger(output_file=json_file, overwrite=True) == '' with open(yaml_file) as f: content = f.read() # YAML is a superset of JSON - that means we have to check that # the file is really YAML and not just JSON parsed by the YAML parser with pytest.raises(ValueError): json.loads(content) output_yaml = yaml_sane_load(content) with open(json_file) as f: output_json = json.load(f, object_pairs_hook=OrderedDict) with open(other_file) as f: output_other = json.load(f, object_pairs_hook=OrderedDict) assert output_yaml == output_json == output_other finally: silentremove(yaml_file) silentremove(json_file) silentremove(other_file) drf-yasg-1.20.1/tests/test_reference_schema.py000066400000000000000000000035351416705305200213510ustar00rootroot00000000000000import json from collections import OrderedDict from drf_yasg import openapi from drf_yasg.generators import OpenAPISchemaGenerator from drf_yasg.inspectors import FieldInspector, FilterInspector, PaginatorInspector, SerializerInspector def test_reference_schema(swagger_dict, reference_schema, compare_schemas): compare_schemas(swagger_dict, reference_schema) class NoOpFieldInspector(FieldInspector): pass class NoOpSerializerInspector(SerializerInspector): pass class NoOpFilterInspector(FilterInspector): pass class NoOpPaginatorInspector(PaginatorInspector): pass def test_noop_inspectors(swagger_settings, mock_schema_request, codec_json, reference_schema, compare_schemas): from drf_yasg import app_settings def set_inspectors(inspectors, setting_name): inspectors = [__name__ + '.' + inspector.__name__ for inspector in inspectors] swagger_settings[setting_name] = inspectors + app_settings.SWAGGER_DEFAULTS[setting_name] set_inspectors([NoOpFieldInspector, NoOpSerializerInspector], 'DEFAULT_FIELD_INSPECTORS') set_inspectors([NoOpFilterInspector], 'DEFAULT_FILTER_INSPECTORS') set_inspectors([NoOpPaginatorInspector], 'DEFAULT_PAGINATOR_INSPECTORS') generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), version="v2", ) swagger = generator.get_schema(mock_schema_request, True) json_bytes = codec_json.encode(swagger) swagger_dict = json.loads(json_bytes.decode('utf-8'), object_pairs_hook=OrderedDict) compare_schemas(swagger_dict, reference_schema) def test_no_nested_model(swagger_dict): # ForeignKey models in deep ModelViewSets might wrongly be labeled as 'Nested' in the definitions section # see https://github.com/axnsan12/drf-yasg/issues/59 assert 'Nested' not in swagger_dict['definitions'] drf-yasg-1.20.1/tests/test_referenceresolver.py000066400000000000000000000023101416705305200216010ustar00rootroot00000000000000import pytest from drf_yasg.openapi import ReferenceResolver def test_basic(): scopes = ['s1', 's2'] rr = ReferenceResolver(*scopes, force_init=True) assert scopes == rr.scopes == list(rr.keys()) == list(rr) rr.set('o1', 1, scope='s1') assert rr.has('o1', scope='s1') assert rr.get('o1', scope='s1') == 1 rr.setdefault('o1', lambda: 2, scope='s1') assert rr.get('o1', scope='s1') == 1 assert not rr.has('o1', scope='s2') rr.setdefault('o3', lambda: 3, scope='s2') assert rr.get('o3', scope='s2') == 3 assert rr['s1'] == {'o1': 1} assert dict(rr) == {'s1': {'o1': 1}, 's2': {'o3': 3}} assert str(rr) == str(dict(rr)) def test_scoped(): scopes = ['s1', 's2'] rr = ReferenceResolver(*scopes, force_init=True) r1 = rr.with_scope('s1') r2 = rr.with_scope('s2') with pytest.raises(AssertionError): rr.with_scope('bad') assert r1.scopes == ['s1'] assert list(r1.keys()) == list(r1) == [] r2.set('o2', 2) assert r2.scopes == ['s2'] assert list(r2.keys()) == list(r2) == ['o2'] assert r2['o2'] == 2 with pytest.raises(AssertionError): r2.get('o2', scope='s1') assert rr.get('o2', scope='s2') == 2 drf-yasg-1.20.1/tests/test_renderer_settings.py000066400000000000000000000027711416705305200216220ustar00rootroot00000000000000import json import pytest from drf_yasg import renderers def _check_swagger_setting(swagger, setting, expected): context = {} renderer = renderers.SwaggerUIRenderer() renderer.set_context(context, swagger) swagger_settings = json.loads(context['swagger_settings']) assert swagger_settings[setting] == expected def _check_setting(swagger, setting, expected): context = {} renderer = renderers.SwaggerUIRenderer() renderer.set_context(context, swagger) assert context[setting] == expected def test_validator_url(swagger_settings, swagger): swagger_settings['VALIDATOR_URL'] = None _check_swagger_setting(swagger, 'validatorUrl', None) swagger_settings['VALIDATOR_URL'] = 'http://not.none/' _check_swagger_setting(swagger, 'validatorUrl', 'http://not.none/') with pytest.raises(KeyError): swagger_settings['VALIDATOR_URL'] = '' _check_swagger_setting(swagger, 'validatorUrl', None) @pytest.mark.urls('urlconfs.login_test_urls') def test_login_logout(swagger_settings, swagger): swagger_settings['LOGIN_URL'] = 'login' _check_setting(swagger, 'LOGIN_URL', '/test/login') swagger_settings['LOGOUT_URL'] = 'logout' _check_setting(swagger, 'LOGOUT_URL', '/test/logout') with pytest.raises(KeyError): swagger_settings['LOGIN_URL'] = None _check_setting(swagger, 'LOGIN_URL', None) with pytest.raises(KeyError): swagger_settings['LOGOUT_URL'] = None _check_setting(swagger, 'LOGOUT_URL', None) drf-yasg-1.20.1/tests/test_schema_generator.py000066400000000000000000000304171416705305200214000ustar00rootroot00000000000000import json import typing from collections import OrderedDict import pytest from django.contrib.postgres import fields as postgres_fields from django.db import models from django.urls import path from django.utils.inspect import get_func_args from django_fake_model import models as fake_models from rest_framework import routers, serializers, viewsets from rest_framework.decorators import api_view from rest_framework.response import Response from drf_yasg import codecs, openapi from drf_yasg.codecs import yaml_sane_load from drf_yasg.errors import SwaggerGenerationError from drf_yasg.generators import OpenAPISchemaGenerator from drf_yasg.utils import swagger_auto_schema def test_schema_is_valid(swagger, codec_yaml): codec_yaml.encode(swagger) def test_invalid_schema_fails(codec_json, mock_schema_request): # noinspection PyTypeChecker bad_generator = OpenAPISchemaGenerator( info=openapi.Info( title="Test generator", default_version="v1", contact=openapi.Contact(name=69, email=[]) ), version="v2", ) swagger = bad_generator.get_schema(mock_schema_request, True) with pytest.raises(codecs.SwaggerValidationError): codec_json.encode(swagger) def test_json_codec_roundtrip(codec_json, swagger, validate_schema): json_bytes = codec_json.encode(swagger) validate_schema(json.loads(json_bytes.decode('utf-8'))) def test_yaml_codec_roundtrip(codec_yaml, swagger, validate_schema): yaml_bytes = codec_yaml.encode(swagger) assert b'omap' not in yaml_bytes # ensure no ugly !!omap is outputted assert b'&id' not in yaml_bytes and b'*id' not in yaml_bytes # ensure no YAML references are generated validate_schema(yaml_sane_load(yaml_bytes.decode('utf-8'))) def test_yaml_and_json_match(codec_yaml, codec_json, swagger): yaml_schema = yaml_sane_load(codec_yaml.encode(swagger).decode('utf-8')) json_schema = json.loads(codec_json.encode(swagger).decode('utf-8'), object_pairs_hook=OrderedDict) assert yaml_schema == json_schema def test_basepath_only(mock_schema_request): with pytest.raises(SwaggerGenerationError): generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), version="v2", url='/basepath/', ) generator.get_schema(mock_schema_request, public=True) def test_no_netloc(mock_schema_request): generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), version="v2", url='', ) swagger = generator.get_schema(mock_schema_request, public=True) assert 'host' not in swagger and 'schemes' not in swagger assert swagger['info']['version'] == 'v2' def test_securiy_requirements(swagger_settings, mock_schema_request): generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), version="v2", url='', ) swagger_settings['SECURITY_REQUIREMENTS'] = [] swagger = generator.get_schema(mock_schema_request, public=True) assert swagger['security'] == [] def _basename_or_base_name(basename): # freaking DRF... TODO: remove when dropping support for DRF 3.8 if 'basename' in get_func_args(routers.BaseRouter.register): return {'basename': basename} else: return {'base_name': basename} def test_replaced_serializer(): class DetailSerializer(serializers.Serializer): detail = serializers.CharField() class DetailViewSet(viewsets.ViewSet): serializer_class = DetailSerializer @swagger_auto_schema(responses={404: openapi.Response("Not found or Not accessible", DetailSerializer)}) def retrieve(self, request, pk=None): serializer = DetailSerializer({'detail': None}) return Response(serializer.data) router = routers.DefaultRouter() router.register(r'details', DetailViewSet, **_basename_or_base_name('details')) generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), version="v2", url='', patterns=router.urls ) for _ in range(3): swagger = generator.get_schema(None, True) assert 'Detail' in swagger['definitions'] assert 'detail' in swagger['definitions']['Detail']['properties'] responses = swagger['paths']['/details/{id}/']['get']['responses'] assert '404' in responses assert responses['404']['schema']['$ref'] == "#/definitions/Detail" def test_url_order(): # this view with description override should show up in the schema ... @swagger_auto_schema(method='get', operation_description="description override") @api_view() def test_override(request, pk=None): return Response({"message": "Hello, world!"}) # ... instead of this view which appears later in the url patterns @api_view() def test_view(request, pk=None): return Response({"message": "Hello, world!"}) patterns = [ path('test/', test_override), path('test/', test_view), ] generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), version="v2", url='', patterns=patterns ) # description override is successful swagger = generator.get_schema(None, True) assert swagger['paths']['/test/']['get']['description'] == 'description override' # get_endpoints only includes one endpoint endpoints = generator.get_endpoints(None) assert len(endpoints['/test/'][1]) == 1 try: from rest_framework.decorators import MethodMapper, action except ImportError: action = MethodMapper = None @pytest.mark.skipif(not MethodMapper or not action, reason="action.mapping test (djangorestframework>=3.9 required)") def test_action_mapping(): class ActionViewSet(viewsets.ViewSet): @swagger_auto_schema(method='get', operation_id='mapping_get') @swagger_auto_schema(method='delete', operation_id='mapping_delete') @action(detail=False, methods=['get', 'delete'], url_path='test') def action_main(self, request): """mapping docstring get/delete""" pass @swagger_auto_schema(operation_id='mapping_post') @action_main.mapping.post def action_post(self, request): """mapping docstring post""" pass router = routers.DefaultRouter() router.register(r'action', ActionViewSet, **_basename_or_base_name('action')) generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), version="v2", url='', patterns=router.urls ) for _ in range(3): swagger = generator.get_schema(None, True) action_ops = swagger['paths']['/test/'] methods = ['get', 'post', 'delete'] assert all(mth in action_ops for mth in methods) assert all(action_ops[mth]['operationId'] == 'mapping_' + mth for mth in methods) assert action_ops['post']['description'] == 'mapping docstring post' assert action_ops['get']['description'] == 'mapping docstring get/delete' assert action_ops['delete']['description'] == 'mapping docstring get/delete' @pytest.mark.parametrize('choices, expected_type', [ (['A', 'B'], openapi.TYPE_STRING), ([u'A', u'B'], openapi.TYPE_STRING), ([123, 456], openapi.TYPE_INTEGER), ([1.2, 3.4], openapi.TYPE_NUMBER), (['A', 456], openapi.TYPE_STRING) ]) def test_choice_field(choices, expected_type): class DetailSerializer(serializers.Serializer): detail = serializers.ChoiceField(choices) class DetailViewSet(viewsets.ViewSet): @swagger_auto_schema(responses={200: openapi.Response("OK", DetailSerializer)}) def retrieve(self, request, pk=None): return Response({'detail': None}) router = routers.DefaultRouter() router.register(r'details', DetailViewSet, **_basename_or_base_name('details')) generator = OpenAPISchemaGenerator( info=openapi.Info(title="Test generator", default_version="v1"), patterns=router.urls ) swagger = generator.get_schema(None, True) property_schema = swagger['definitions']['Detail']['properties']['detail'] assert property_schema == openapi.Schema(title='Detail', type=expected_type, enum=choices) @pytest.mark.parametrize('choices, field, expected_type', [ ([1, 2, 3], models.IntegerField, openapi.TYPE_INTEGER), (["A", "B"], models.CharField, openapi.TYPE_STRING), ]) def test_nested_choice_in_array_field(choices, field, expected_type): # Create a model class on the fly to avoid warnings about using the several # model class name several times model_class = type( "%sModel" % field.__name__, (fake_models.FakeModel,), { "array": postgres_fields.ArrayField( field(choices=((i, "choice %s" % i) for i in choices)) ), "__module__": "test_models", } ) class ArraySerializer(serializers.ModelSerializer): class Meta: model = model_class fields = ("array",) class ArrayViewSet(viewsets.ModelViewSet): serializer_class = ArraySerializer router = routers.DefaultRouter() router.register(r'arrays', ArrayViewSet, **_basename_or_base_name('arrays')) generator = OpenAPISchemaGenerator( info=openapi.Info(title='Test array model generator', default_version='v1'), patterns=router.urls ) swagger = generator.get_schema(None, True) property_schema = swagger['definitions']['Array']['properties']['array']['items'] assert property_schema == openapi.Schema(title='Array', type=expected_type, enum=choices) def test_json_field(): class TestJSONFieldSerializer(serializers.Serializer): json = serializers.JSONField() class JSONViewSet(viewsets.ModelViewSet): serializer_class = TestJSONFieldSerializer router = routers.DefaultRouter() router.register(r'jsons', JSONViewSet, **_basename_or_base_name('jsons')) generator = OpenAPISchemaGenerator( info=openapi.Info(title='Test json field generator', default_version='v1'), patterns=router.urls ) swagger = generator.get_schema(None, True) property_schema = swagger["definitions"]["TestJSONField"]["properties"]["json"] assert property_schema == openapi.Schema(title='Json', type=openapi.TYPE_OBJECT) @pytest.mark.parametrize('py_type, expected_type', [ (str, openapi.TYPE_STRING), (int, openapi.TYPE_INTEGER), (float, openapi.TYPE_NUMBER), (bool, openapi.TYPE_BOOLEAN), ]) def test_optional_return_type(py_type, expected_type): class OptionalMethodSerializer(serializers.Serializer): x = serializers.SerializerMethodField() def get_x(self, instance): pass # Add the type annotation here in order to avoid a SyntaxError in py27 get_x.__annotations__["return"] = typing.Optional[py_type] class OptionalMethodViewSet(viewsets.ViewSet): @swagger_auto_schema(responses={200: openapi.Response("OK", OptionalMethodSerializer)}) def retrieve(self, request, pk=None): return Response({'optional': None}) router = routers.DefaultRouter() router.register(r'optional', OptionalMethodViewSet, **_basename_or_base_name('optional')) generator = OpenAPISchemaGenerator( info=openapi.Info(title='Test optional parameter', default_version='v1'), patterns=router.urls ) swagger = generator.get_schema(None, True) property_schema = swagger["definitions"]["OptionalMethod"]["properties"]["x"] assert property_schema == openapi.Schema(title='X', type=expected_type, readOnly=True) EXPECTED_DESCRIPTION = """\ description: |- This is a demo project for the [drf-yasg](https://github.com/axnsan12/drf-yasg) Django Rest Framework library. The `swagger-ui` view can be found [here](/cached/swagger). The `ReDoc` view can be found [here](/cached/redoc). The swagger YAML document can be found [here](/cached/swagger.yaml). You can log in using the pre-existing `admin` user with password `passwordadmin`. """ def test_multiline_strings(call_generate_swagger): output = call_generate_swagger(format='yaml') print("|\n|".join(output.splitlines()[:20])) assert EXPECTED_DESCRIPTION in output drf-yasg-1.20.1/tests/test_schema_views.py000066400000000000000000000045531416705305200205510ustar00rootroot00000000000000import json from collections import OrderedDict import pytest from drf_yasg.codecs import yaml_sane_load def _validate_text_schema_view(client, validate_schema, path, loader): response = client.get(path) assert response.status_code == 200 validate_schema(loader(response.content.decode('utf-8'))) def _validate_ui_schema_view(client, path, string): response = client.get(path) assert response.status_code == 200 assert string in response.content.decode('utf-8') def test_swagger_json(client, validate_schema): _validate_text_schema_view(client, validate_schema, "/swagger.json", json.loads) def test_swagger_yaml(client, validate_schema): _validate_text_schema_view(client, validate_schema, "/swagger.yaml", yaml_sane_load) def test_exception_middleware(client, swagger_settings, db): swagger_settings['SECURITY_DEFINITIONS'] = { 'bad': { 'bad_attribute': 'should not be accepted' } } response = client.get('/swagger.json') assert response.status_code == 500 assert 'errors' in json.loads(response.content.decode('utf-8')) def test_swagger_ui(client, validate_schema): _validate_ui_schema_view(client, '/swagger/', 'swagger-ui-dist/swagger-ui-bundle.js') _validate_text_schema_view(client, validate_schema, '/swagger/?format=openapi', json.loads) def test_redoc(client, validate_schema): _validate_ui_schema_view(client, '/redoc/', 'redoc/redoc.min.js') _validate_text_schema_view(client, validate_schema, '/redoc/?format=openapi', json.loads) def test_caching(client, validate_schema): prev_schema = None for i in range(3): _validate_text_schema_view(client, validate_schema, '/cached/swagger.yaml', yaml_sane_load) json_schema = client.get('/cached/swagger.json') assert json_schema.status_code == 200 json_schema = json.loads(json_schema.content.decode('utf-8'), object_pairs_hook=OrderedDict) if prev_schema is None: validate_schema(json_schema) prev_schema = json_schema else: from datadiff.tools import assert_equal assert_equal(prev_schema, json_schema) @pytest.mark.urls('urlconfs.non_public_urls') def test_non_public(client): response = client.get('/private/swagger.yaml') swagger = yaml_sane_load(response.content.decode('utf-8')) assert len(swagger['paths']) == 0 drf-yasg-1.20.1/tests/test_swaggerdict.py000066400000000000000000000042141416705305200203710ustar00rootroot00000000000000from collections import OrderedDict from random import shuffle from drf_yasg import openapi def test_vendor_extensions(): """Any attribute starting with x_ should map to a vendor property of the form x-camelCase""" sd = openapi.SwaggerDict(x_vendor_ext_1='test') sd.x_vendor_ext_2 = 'test' assert 'x-vendorExt1' in sd assert sd.x_vendor_ext_1 == 'test' assert sd['x-vendorExt2'] == 'test' del sd.x_vendor_ext_1 assert 'x-vendorExt1' not in sd def test_ref(): """The attribute 'ref' maps to the swagger key '$ref'""" sd = openapi.SwaggerDict(ref='reftest') assert '$ref' in sd assert sd['$ref'] == sd.ref == 'reftest' del sd['$ref'] assert not hasattr(sd, 'ref') def test_leading_underscore_ignored(): """Attributes with a leading underscore are set on the object as-is and are not added to its dict form""" sd = openapi.SwaggerDict(_private_attr_1='not_camelised') initial_len = len(sd) sd._nope = 'not camelised either' assert len(sd) == initial_len assert 'privateAttr1' not in sd assert sd._private_attr_1 == 'not_camelised' assert '_private_attr_1' not in sd assert hasattr(sd, '_nope') del sd._nope assert not hasattr(sd, '_nope') def test_trailing_underscore_stripped(): """Trailing underscores are stripped when converting attribute names. This allows, for example, python keywords to function as SwaggerDict attributes.""" sd = openapi.SwaggerDict(trailing_underscore_='trailing') sd.in_ = 'trailing' assert 'in' in sd assert 'trailingUnderscore' in sd assert sd.trailing_underscore == sd['in'] assert hasattr(sd, 'in___') del sd.in_ assert 'in' not in sd assert not hasattr(sd, 'in__') def test_extra_ordering(): """Insertion order should also be consistent when setting undeclared parameters (kwargs) in SwaggerDict""" extras = [('beta', 1), ('alpha', 2), ('omega', 3), ('gamma', 4)] shuffled_extras = list(extras) shuffle(shuffled_extras) s1 = openapi.SwaggerDict(**OrderedDict(extras)) s2 = openapi.SwaggerDict(**OrderedDict(shuffled_extras)) assert list(s1.items()) == list(s2.items()) drf-yasg-1.20.1/tests/test_versioning.py000066400000000000000000000055711416705305200202600ustar00rootroot00000000000000import pytest from drf_yasg.codecs import yaml_sane_load def _get_versioned_schema(prefix, client, validate_schema): response = client.get(prefix + '/swagger.yaml') assert response.status_code == 200 swagger = yaml_sane_load(response.content.decode('utf-8')) _check_base(swagger, prefix, validate_schema) return swagger def _get_versioned_schema_management(prefix, call_generate_swagger, validate_schema, kwargs): output = call_generate_swagger(format='yaml', api_url='http://localhost' + prefix + '/swagger.yaml', **kwargs) swagger = yaml_sane_load(output) _check_base(swagger, prefix, validate_schema) return swagger def _check_base(swagger, prefix, validate_schema): assert swagger['basePath'] == prefix validate_schema(swagger) assert '/snippets/' in swagger['paths'] return swagger def _check_v1(swagger): assert swagger['info']['version'] == '1.0' versioned_post = swagger['paths']['/snippets/']['post'] assert versioned_post['responses']['201']['schema']['$ref'] == '#/definitions/Snippet' assert 'v2field' not in swagger['definitions']['Snippet']['properties'] def _check_v2(swagger): assert swagger['info']['version'] == '2.0' versioned_post = swagger['paths']['/snippets/']['post'] assert versioned_post['responses']['201']['schema']['$ref'] == '#/definitions/SnippetV2' assert 'v2field' in swagger['definitions']['SnippetV2']['properties'] v2field = swagger['definitions']['SnippetV2']['properties']['v2field'] assert v2field['description'] == 'version 2.0 field' @pytest.mark.urls('urlconfs.url_versioning') def test_url_v1(client, validate_schema): swagger = _get_versioned_schema('/versioned/url/v1.0', client, validate_schema) _check_v1(swagger) @pytest.mark.urls('urlconfs.url_versioning') def test_url_v2(client, validate_schema): swagger = _get_versioned_schema('/versioned/url/v2.0', client, validate_schema) _check_v2(swagger) @pytest.mark.urls('urlconfs.ns_versioning') def test_ns_v1(client, validate_schema): swagger = _get_versioned_schema('/versioned/ns/v1.0', client, validate_schema) _check_v1(swagger) @pytest.mark.urls('urlconfs.ns_versioning') def test_ns_v2(client, validate_schema): swagger = _get_versioned_schema('/versioned/ns/v2.0', client, validate_schema) _check_v2(swagger) @pytest.mark.urls('urlconfs.url_versioning') def test_url_v2_management(call_generate_swagger, validate_schema): kwargs = {'api_version': '2.0'} swagger = _get_versioned_schema_management('/versioned/url/v2.0', call_generate_swagger, validate_schema, kwargs) _check_v2(swagger) @pytest.mark.urls('urlconfs.ns_versioning') def test_ns_v2_management(call_generate_swagger, validate_schema): kwargs = {'api_version': '2.0'} swagger = _get_versioned_schema_management('/versioned/ns/v2.0', call_generate_swagger, validate_schema, kwargs) _check_v2(swagger) drf-yasg-1.20.1/tests/urlconfs/000077500000000000000000000000001416705305200163075ustar00rootroot00000000000000drf-yasg-1.20.1/tests/urlconfs/__init__.py000066400000000000000000000000001416705305200204060ustar00rootroot00000000000000drf-yasg-1.20.1/tests/urlconfs/login_test_urls.py000066400000000000000000000003631416705305200220770ustar00rootroot00000000000000from django.urls import path from testproj.urls import required_urlpatterns def dummy(request): pass urlpatterns = required_urlpatterns + [ path('test/login', dummy, name='login'), path('test/logout', dummy, name='logout'), ] drf-yasg-1.20.1/tests/urlconfs/non_public_urls.py000066400000000000000000000007111416705305200220550ustar00rootroot00000000000000from django.urls import include, path from rest_framework import permissions import testproj.urls from drf_yasg import openapi from drf_yasg.views import get_schema_view view = get_schema_view( openapi.Info('bla', 'ble'), public=False, permission_classes=[permissions.AllowAny] ) view = view.without_ui(cache_timeout=None) urlpatterns = [ path('', include(testproj.urls)), path('private/swagger.yaml', view, name='schema-private'), ] drf-yasg-1.20.1/tests/urlconfs/ns_version1.py000066400000000000000000000014161416705305200211310ustar00rootroot00000000000000from django.urls import path from rest_framework import generics, versioning from snippets.models import Snippet from snippets.serializers import SnippetSerializer from testproj.urls import required_urlpatterns class SnippetList(generics.ListCreateAPIView): """SnippetList classdoc""" queryset = Snippet.objects.all() serializer_class = SnippetSerializer versioning_class = versioning.NamespaceVersioning def perform_create(self, serializer): serializer.save(owner=self.request.user) def post(self, request, *args, **kwargs): """post method docstring""" return super(SnippetList, self).post(request, *args, **kwargs) app_name = 'test_ns_versioning' urlpatterns = required_urlpatterns + [ path("", SnippetList.as_view()) ] drf-yasg-1.20.1/tests/urlconfs/ns_version2.py000066400000000000000000000010561416705305200211320ustar00rootroot00000000000000from django.urls import path from rest_framework import fields from snippets.serializers import SnippetSerializer from testproj.urls import required_urlpatterns from .ns_version1 import SnippetList as SnippetListV1 class SnippetSerializerV2(SnippetSerializer): v2field = fields.IntegerField(help_text="version 2.0 field") class Meta: ref_name = 'SnippetV2' class SnippetListV2(SnippetListV1): serializer_class = SnippetSerializerV2 app_name = '2.0' urlpatterns = required_urlpatterns + [ path("", SnippetListV2.as_view()) ] drf-yasg-1.20.1/tests/urlconfs/ns_versioning.py000066400000000000000000000014261416705305200215470ustar00rootroot00000000000000from django.urls import include, path, re_path from rest_framework import versioning from testproj.urls import SchemaView, required_urlpatterns from . import ns_version1, ns_version2 VERSION_PREFIX_NS = r"versioned/ns/" class VersionedSchemaView(SchemaView): versioning_class = versioning.NamespaceVersioning schema_patterns = [ re_path(r'swagger(?P.json|.yaml)$', VersionedSchemaView.without_ui(), name='ns-schema') ] urlpatterns = required_urlpatterns + [ path(VERSION_PREFIX_NS + "v1.0/snippets/", include(ns_version1, namespace='1.0')), path(VERSION_PREFIX_NS + "v2.0/snippets/", include(ns_version2)), path(VERSION_PREFIX_NS + "v1.0/", include((schema_patterns, '1.0'))), path(VERSION_PREFIX_NS + "v2.0/", include((schema_patterns, '2.0'))), ] drf-yasg-1.20.1/tests/urlconfs/url_versioning.py000066400000000000000000000027561416705305200217400ustar00rootroot00000000000000from django.urls import re_path from rest_framework import fields, generics, versioning from snippets.models import Snippet from snippets.serializers import SnippetSerializer from testproj.urls import SchemaView, required_urlpatterns class SnippetSerializerV2(SnippetSerializer): v2field = fields.IntegerField(help_text="version 2.0 field") class Meta: ref_name = 'SnippetV2' class SnippetList(generics.ListCreateAPIView): """SnippetList classdoc""" queryset = Snippet.objects.all() serializer_class = SnippetSerializer versioning_class = versioning.URLPathVersioning def get_serializer_class(self): context = self.get_serializer_context() request = context['request'] if int(float(request.version)) >= 2: return SnippetSerializerV2 else: return SnippetSerializer def perform_create(self, serializer): serializer.save(owner=self.request.user) def post(self, request, *args, **kwargs): """post method docstring""" return super(SnippetList, self).post(request, *args, **kwargs) VERSION_PREFIX_URL = r"^versioned/url/v(?P1.0|2.0)/" class VersionedSchemaView(SchemaView): versioning_class = versioning.URLPathVersioning urlpatterns = required_urlpatterns + [ re_path(VERSION_PREFIX_URL + r"snippets/$", SnippetList.as_view()), re_path(VERSION_PREFIX_URL + r'swagger(?P.json|.yaml)$', VersionedSchemaView.without_ui(), name='vschema-json'), ] drf-yasg-1.20.1/tox.ini000066400000000000000000000036131416705305200146300ustar00rootroot00000000000000[tox] minversion = 3.3.0 isolated_build = true isolated_build_env = .package # https://docs.djangoproject.com/en/dev/faq/install/#what-python-version-can-i-use-with-django envlist = py{36,37,38,39}-django{22,30}-drf{310,311,312}, py{36,37,38,39}-django{31,32}-drf{311,312}, py38-{lint, docs}, py39-djmaster skip_missing_interpreters = true [testenv:.package] # no additional dependencies besides PEP 517 deps = [testenv:py39-djmaster] ignore_outcome = true [testenv] deps = django22: Django>=2.2,<2.3 django30: Django>=3.0,<3.1 django31: Django>=3.1,<3.2 django32: Django>=3.2,<3.3 drf310: djangorestframework>=3.10,<3.11 drf311: djangorestframework>=3.11,<3.12 drf312: djangorestframework>=3.12,<3.13 typing: typing>=3.6.6 # test with the latest builds of Django and django-rest-framework # to get early warning of compatibility issues djmaster: https://github.com/django/django/archive/main.tar.gz djmaster: https://github.com/encode/django-rest-framework/archive/master.tar.gz # other dependencies -r requirements/validation.txt -r requirements/test.txt commands = pytest -n 2 --cov --cov-config .coveragerc --cov-append --cov-report="" {posargs} [testenv:lint] skip_install = true deps = -r requirements/lint.txt commands = flake8 src/drf_yasg testproj tests setup.py [testenv:docs] deps = -r requirements/docs.txt commands = twine check .tox/dist/* sphinx-build -WnEa -b html docs docs/_build/html [pytest] DJANGO_SETTINGS_MODULE = testproj.settings.local python_paths = testproj addopts = --ignore=node_modules [flake8] max-line-length = 120 exclude = **/migrations/* ignore = F405,W504 [isort] skip = .eggs,.tox,docs,env,venv,node_modules,.git skip_glob = **/migrations/* atomic = true multi_line_output = 5 line_length = 120 known_first_party = drf_yasg,testproj,articles,people,snippets,todo,users,urlconfs drf-yasg-1.20.1/update-ui.sh000077500000000000000000000015761416705305200155570ustar00rootroot00000000000000#!/bin/bash set -ev npm update cp node_modules/redoc/bundles/redoc.standalone.js src/drf_yasg/static/drf-yasg/redoc/redoc.min.js cp node_modules/redoc/bundles/redoc.standalone.js.map src/drf_yasg/static/drf-yasg/redoc/ cp node_modules/redoc/LICENSE src/drf_yasg/static/drf-yasg/redoc/LICENSE curl -o src/drf_yasg/static/drf-yasg/redoc-old/redoc.min.js https://rebilly.github.io/ReDoc/releases/v1.x.x/redoc.min.js curl -o src/drf_yasg/static/drf-yasg/redoc-old/redoc.min.js.map https://rebilly.github.io/ReDoc/releases/v1.x.x/redoc.min.js.map curl -o src/drf_yasg/static/drf-yasg/redoc-old/LICENSE https://raw.githubusercontent.com/Redocly/redoc/v1.x/LICENSE cp -r node_modules/swagger-ui-dist src/drf_yasg/static/drf-yasg/ pushd src/drf_yasg/static/drf-yasg/swagger-ui-dist/ >/dev/null rm -f package.json .npmignore README.md favicon-16x16.png rm -f swagger-ui.js index.html popd >/dev/null