diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..af47c58 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.git +.gitignore +LICENSE +README.md +deploy/db +tests + diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..79aabdb --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +deploy/db/data.sql.gz filter=lfs diff=lfs merge=lfs -text diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 0000000..c9c17f7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,28 @@ +--- +name: Bug Report +about: Use this to report a new bug + +--- + +### Expected Behavior + + +### Current Behavior + + +### Possible Solution + + +### Steps to Reproduce + + +1. +2. +3. +4. + +### Context (Environment) + + + + diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 0000000..d82023b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,14 @@ +--- +name: Feature Request +about: Suggest an idea for this project + +--- + +### Description + + +### Proposed solution + + +### Definition of Done + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..ec49d8a --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,47 @@ + + + +### What it is about: +- [ ] Bug fix +- [ ] Functional change +- [ ] New feature +- [ ] Code cleanup +- [ ] Build system change +- [ ] Documentation change +- [ ] Language translation + + + +### Pull request long description: + + +### Changes made: + + + +### Related issues: + + + +### Additional information: + + +### Release note: + + + +### Documentation change: + + + diff --git a/.github/workflows/testsuite.yml b/.github/workflows/testsuite.yml new file mode 100644 index 0000000..3f133df --- /dev/null +++ b/.github/workflows/testsuite.yml @@ -0,0 +1,58 @@ +name: "Testsuite" + +on: + pull_request: + branches: + - master + push: + branches: + - 'tests' + - 'tests/*' + +jobs: + testsuite: + strategy: + max-parallel: 4 + matrix: + # os: [ubuntu-latest, macOS-latest] + os: [ubuntu-latest] + + runs-on: ${{ matrix.os }} + + name: Beacon (v2.x) API tests + + steps: + - name: Install required tools + run: | + git clone https://github.com/bats-core/bats-core.git + pushd bats-core + git checkout v1.1.0 + sudo ./install.sh /usr/local + popd + rm -rf bats-core + sudo apt-get install curl jq git-lfs + sudo -- bash -c -e "echo '127.0.0.1 idp beacon beacon-permissions' >> /etc/hosts" + - uses: actions/checkout@master + - name: (re)Build docker images + run: | + pushd deploy + docker-compose build beacon + popd + - name: Bootstrap a Beacon + run: | + pushd deploy + docker-compose up -d db + sleep 30 + docker-compose up -d + docker-compose ps + sleep 60 + popd + - name: Running testsuite + run: bats tests + - name: Cleanup + run: | + pushd deploy + docker-compose down -v + popd + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19dd967 --- /dev/null +++ b/.gitignore @@ -0,0 +1,130 @@ +*~ +.#* +.DS_Store +tmp/ +.bak + + +# 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/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# 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/ + +# Grunt +/ui/grunt + +# Tests tmp +/tests/tmp/ + +# IntelliJ +.idea/ + +# VS Code +.vscode/ + +# Custom +deploy/request.json +typings/ +deploy/ontologies/*.obo +deploy/ontologies/*.owl* +.antlr/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0b45d1e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,62 @@ +########################## +## Build env +########################## +FROM python:3.10-buster AS BUILD + +ENV DEBIAN_FRONTEND noninteractive + +RUN apt-get update +#RUN apt-get upgrade -y +RUN apt-get install -y --no-install-recommends \ + ca-certificates pkg-config make \ + libssl-dev libffi-dev libpq-dev + +# python packages +RUN pip install --upgrade pip +COPY requirements.txt /tmp/requirements.txt +RUN pip install -r /tmp/requirements.txt + +########################## +## Final image +########################## +FROM python:3.10-buster + +LABEL maintainer "CRG System Developers" +LABEL org.label-schema.schema-version="2.0" +LABEL org.label-schema.vcs-url="https://github.com/EGA-archive/beacon-2.x/" + +# Too much ? +COPY --from=BUILD /usr/local/bin /usr/local/bin +COPY --from=BUILD /usr/local/lib /usr/local/lib + +RUN apt-get update && \ +# apt-get upgrade -y && \ + apt-get install -y --no-install-recommends \ + nginx \ + && \ + rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx.list && \ + apt-get purge -y --auto-remove + +COPY deploy/nginx.conf /beacon/nginx.conf +COPY deploy/supervisord.conf /beacon/supervisord.conf +COPY deploy/entrypoint.sh /usr/local/bin/entrypoint.sh +COPY beacon /beacon/beacon +COPY ui /beacon/ui + +RUN groupadd beacon && \ + useradd -M -g beacon beacon && \ +# mkdir /beacon && \ + mkdir /var/run/beacon && \ + chown -R beacon:beacon /beacon && \ +# chmod 400 /beacon/beacon/conf.py && \ + chown -R beacon:beacon /var/log/nginx && \ + chown -R beacon:beacon /var/lib/nginx && \ + chown -R beacon:beacon /etc/nginx && \ + chown -R beacon:beacon /var/run/beacon && \ + mkdir -p /var/log/supervisord && \ + chown -R beacon:beacon /var/log/supervisord && \ + chmod +x /usr/local/bin/entrypoint.sh + +WORKDIR /beacon +USER beacon +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2363ebe --- /dev/null +++ b/Makefile @@ -0,0 +1,40 @@ +################################################ +## +## Makefile for Local development +## +################################################ +SHELL := /bin/bash +IMG ?= egarchive/beacon +TARGET ?= 2.0 +CONTAINER ?= beacon + +.PHONY: build run exec down server + +all: build run server + +build: + docker build $(ARGS) -t $(IMG):$(TARGET) . + +run: PORTS=-p 5050:5050 +up: PORTS=-p 5050:8080 +run: ENTRYPOINT=--entrypoint "/bin/sleep" +run: CMD=1000000000000 +up run: + docker run -d --rm \ + --name $(CONTAINER) \ + $(PORTS) \ + -v $(shell pwd)/deploy/conf.py:/beacon/beacon/conf.py \ + -v $(shell pwd)/beacon:/beacon/beacon \ + -v $(shell pwd)/ui/static:/beacon/static \ + -v $(shell pwd)/ui/templates:/beacon/templates \ + $(ENTRYPOINT) $(IMG):$(TARGET) $(CMD) + +exec-root: D_USER=--user root +exec-root exec: + docker exec -it $(D_USER) $(CONTAINER) bash +server: + docker exec -it $(CONTAINER) python -m beacon + +down: + -docker kill $(CONTAINER) + -docker rm $(CONTAINER) diff --git a/README.md b/README.md new file mode 100644 index 0000000..cedf6ec --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Beacon v2.x + + + +This repository is an implementation of the [Beacon v2.0 Model](https://github.com/ga4gh-beacon/beacon-v2-Models) and contains: + +* The (Python 3.9+) [source code for beacon](beacon), +* A MongoDB database with sample data to demo the capabilities of the Beacon API. + +> [Local deployment instructions](deploy/README.md) + +### Version notes + +* Fusions (`mateName`) are not supported. + + +### Acknowlegments + +We thank the [CSC Finland](https://www.csc.fi/) team for their +contribution with a [python implementing of version +1](https://github.com/CSCfi/beacon-python). They, in turn, got help +from members of [NBIS](https://nbis.se/) and +[DDBJ](https://www.ddbj.nig.ac.jp). diff --git a/beacon/__init__.py b/beacon/__init__.py new file mode 100644 index 0000000..94dfc87 --- /dev/null +++ b/beacon/__init__.py @@ -0,0 +1,33 @@ +""" +The ``beacon`` package contains code to start a Beacon Rest API. +""" + +__title__ = 'Beacon v2.0' +__version__ = VERSION = '2.0' +__author__ = 'CRG developers' +__license__ = 'Apache 2.0' +__copyright__ = 'Beacon 2.0 @ CRG, Barcelona' + +import sys + +if sys.version_info < (3, 7): + print("beacon-python requires python 3.7 or higher", file=sys.stderr) + sys.exit(1) + +# Send warnings using the package warnings to the logging system +# The warnings are logged to a logger named 'py.warnings' with a severity of WARNING. +# See: https://docs.python.org/3/library/logging.html#integration-with-the-warnings-module +import logging +import warnings +from logging.config import dictConfig +from pathlib import Path +import yaml + +logging.captureWarnings(True) +warnings.simplefilter("default") # do not ignore Deprecation Warnings + + +def load_logger(): + log_file = Path(__file__).parent / "logger.yml" + with open(log_file, 'r') as stream: + dictConfig(yaml.safe_load(stream)) diff --git a/beacon/__main__.py b/beacon/__main__.py new file mode 100644 index 0000000..26c1082 --- /dev/null +++ b/beacon/__main__.py @@ -0,0 +1,134 @@ +import base64 +import logging +import os +import ssl +import sys +from pathlib import Path +from time import strftime +from datetime import datetime + +import aiohttp_jinja2 +import jinja2 +from aiohttp import web +import aiohttp_cors +from aiohttp_session import setup as session_setup +from aiohttp_session.cookie_storage import EncryptedCookieStorage +from cryptography import fernet + +from beacon import conf, load_logger +from beacon.request import ontologies +from beacon.response import middlewares +from beacon.request.routes import routes +from beacon.db import client + +LOG = logging.getLogger(__name__) + + +async def initialize(app): + # Load static + app["static_root_url"] = "/static" + + # Configure jinja + env = aiohttp_jinja2.get_env(app) + env.globals.update( + len=len, + max=max, + enumerate=enumerate, + range=range, + conf=conf, + now=strftime("%Y"), + ) + + setattr(conf, 'update_datetime', datetime.now().isoformat()) + + LOG.info("Initialization done.") + + +async def destroy(app): + """Upon server close, close the DB connections.""" + LOG.info("Shutting down.") + client.close() + + +def main(path=None): + # Configure the logging + load_logger() + + # Configure the beacon + beacon = web.Application( + middlewares=[web.normalize_path_middleware(), middlewares.error_middleware] + ) + beacon.on_startup.append(initialize) + beacon.on_cleanup.append(destroy) + + # Prepare for the UI + main_dir = Path(__file__).parent.parent.resolve() + # Where the templates are + template_loader = jinja2.FileSystemLoader(str(main_dir / "ui" / "templates")) + aiohttp_jinja2.setup(beacon, loader=template_loader) + + # Session middleware + fernet_key = fernet.Fernet.generate_key() + secret_key = base64.urlsafe_b64decode( + fernet_key + ) # 32 url-safe base64-encoded bytes + storage = EncryptedCookieStorage( + secret_key, cookie_name=middlewares.SESSION_STORAGE + ) + session_setup(beacon, storage) + + # Configure the endpoints + beacon.add_routes(routes) + + cors = aiohttp_cors.setup(beacon, defaults={ + "*": aiohttp_cors.ResourceOptions( + allow_credentials=True, + expose_headers="*", + allow_headers="*", + ) +}) + + for route in list(beacon.router.routes()): + cors.add(route) + + # Configure HTTPS (or not) + ssl_context = None + if getattr(conf, "beacon_tls_enabled", False): + use_as_client = getattr(conf, "beacon_tls_client", False) + sslcontext = ssl.create_default_context( + ssl.Purpose.CLIENT_AUTH if use_as_client else ssl.Purpose.SERVER_AUTH + ) + sslcontext.load_cert_chain(conf.beacon_cert, conf.beacon_key) # should exist + sslcontext.check_hostname = False + # TODO: add the CA chain + + # Load ontologies + LOG.info("Loading ontologies... (this might take a while)") + ontologies.load_obo() + LOG.info("Finished loading the ontologies...") + + # Run beacon + if path: + if os.path.exists(path): + os.unlink(path) + # will create the UDS socket and bind to it + web.run_app(beacon, path=path, shutdown_timeout=0, ssl_context=ssl_context) + else: + static_files = Path(__file__).parent.parent.resolve() / "ui" / "static" + beacon.add_routes([web.static("/static", str(static_files))]) + web.run_app( + beacon, + host=getattr(conf, "beacon_host", "0.0.0.0"), + port=getattr(conf, "beacon_port", 5050), + shutdown_timeout=0, + ssl_context=ssl_context, + ) + + +if __name__ == "__main__": + # Unix socket + if len(sys.argv) > 1: + main(path=sys.argv[1]) + # host:port + else: + main() diff --git a/beacon/conf.py b/beacon/conf.py new file mode 100644 index 0000000..36a75d7 --- /dev/null +++ b/beacon/conf.py @@ -0,0 +1,129 @@ +"""Beacon Configuration.""" + +# +# Beacon general info +# +beacon_id = 'org.ega-archive.ga4gh-approval-beacon-test' # ID of the Beacon +beacon_name = 'GA4GH Approval Beacon Test' # Name of the Beacon service +api_version = 'v2.0.0' # Version of the Beacon implementation +uri = 'https://beacon-giab-test.ega-archive.org' + +# +# Beacon granularity +# +default_beacon_granularity = "record" +max_beacon_granularity = "record" + +# +# Organization info +# +org_id = 'EGA' # Id of the organization +org_name = 'European Genome-Phenome Archive (EGA)' # Full name +org_description = ('The European Genome-phenome Archive (EGA) ' + 'is a service for permanent archiving and sharing ' + 'of all types of personally identifiable genetic ' + 'and phenotypic data resulting from biomedical research projects.') +org_adress = ('C/ Dr. Aiguader, 88' + 'PRBB Building' + '08003 Barcelona, Spain') +org_welcome_url = 'https://ega-archive.org/' +org_contact_url = 'mailto:beacon.ega@crg.eu' +org_logo_url = 'https://ega-archive.org/images/logo.png' +org_info = '' + +# +# Project info +# +description = (r"This Beacon " + r"is based on the GA4GH Beacon " + r"v2.0") +version = 'v2.0' +welcome_url = 'https://beacon.ega-archive.org/' +alternative_url = 'https://beacon.ega-archive.org/api' +create_datetime = '2021-11-29T12:00:00.000000' +update_datetime = '' +# update_datetime will be created when initializing the beacon, using the ISO 8601 format + +# +# Service +# +service_type = 'org.ga4gh:beacon:1.0.0' # service type +service_url = 'https://beacon.ega-archive.org/api/services' +entry_point = False +is_open = True +documentation_url = 'https://github.com/EGA-archive/beacon-2.x/' # Documentation of the service +environment = 'test' # Environment (production, development or testing/staging deployments) + +# GA4GH +ga4gh_service_type_group = 'org.ga4gh' +ga4gh_service_type_artifact = 'beacon' +ga4gh_service_type_version = '1.0' + +# Beacon handovers +beacon_handovers = [ + { + 'handoverType': { + 'id': 'CUSTOM', + 'label': 'Project description' + }, + 'note': 'Project description', + 'url': 'https://www.nist.gov/programs-projects/genome-bottle' + } +] + +# +# Database connection +# +database_host = '127.0.0.1' +database_port = 27017 +database_user = 'root' +database_password = 'example' +database_name = 'beacon' +database_auth_source = 'admin' +# database_schema = 'public' # comma-separated list of schemas +# database_app_name = 'beacon-appname' # Useful to track connections + +# +# Web server configuration +# Note: a Unix Socket path is used when behind a server, not host:port +# +beacon_host = '0.0.0.0' +beacon_port = 5050 +beacon_tls_enabled = False +beacon_tls_client = False +beacon_cert = '/etc/ega/server.cert' +beacon_key = '/etc/ega/server.key' +CA_cert = '/etc/ega/CA.cert' + +# +# Permissions server configuration +# +permissions_url = 'http://beacon-permissions' + +# +# IdP endpoints (OpenID Connect/Oauth2) +# +# or use Elixir AAI (see https://elixir-europe.org/services/compute/aai) +# +idp_client_id = 'beacon' +idp_client_secret = 'b26ca0f9-1137-4bee-b453-ee51eefbe7ba' # same as in the test IdP +idp_scope = 'profile openid' + +idp_authorize = 'http://idp/auth/realms/Beacon/protocol/openid-connect/auth' +idp_access_token = 'http://idp/auth/realms/Beacon/protocol/openid-connect/token' +idp_introspection = 'http://idp/auth/realms/Beacon/protocol/openid-connect/token/introspect' +idp_user_info = 'http://idp/auth/realms/Beacon/protocol/openid-connect/userinfo' +idp_logout = 'http://idp/auth/realms/Beacon/protocol/openid-connect/logout' + +idp_redirect_uri = 'http://beacon:5050/login' + +# +# UI +# +autocomplete_limit = 16 +autocomplete_ellipsis = '...' + +# +# Ontologies +# +ontologies_folder = "deploy/ontologies/" diff --git a/beacon/db/__init__.py b/beacon/db/__init__.py new file mode 100644 index 0000000..8f2cacd --- /dev/null +++ b/beacon/db/__init__.py @@ -0,0 +1,11 @@ +from pymongo.mongo_client import MongoClient +from beacon import conf + +client = MongoClient("mongodb://{}:{}@{}:{}/{}?authSource={}".format( + conf.database_user, + conf.database_password, + conf.database_host, + conf.database_port, + conf.database_name, + conf.database_auth_source +)) diff --git a/beacon/db/analyses.py b/beacon/db/analyses.py new file mode 100644 index 0000000..0676f02 --- /dev/null +++ b/beacon/db/analyses.py @@ -0,0 +1,148 @@ +import logging +from typing import Dict, List, Optional +from beacon.db.filters import apply_alphanumeric_filter, apply_filters +from beacon.db.utils import query_id, query_ids, get_count, get_documents, get_cross_query +from beacon.db import client +from beacon.request.model import AlphanumericFilter, Operator, RequestParams +from beacon.db.schemas import DefaultSchemas +from beacon.db.utils import get_documents, query_id, get_count +from beacon.request.model import RequestParams + +LOG = logging.getLogger(__name__) + +ANALYSES_PROPERTY_MAP = { + "aligner": "aligner", + "analysisDate": "analysisDate", + "biosampleId": "biosampleId", + "individualId": "individualId", + "pipelineName": "pipelineName", + "pipelineRef": "pipelineRef", + "runId": "runId", + "variantCaller": "variantCaller" +} + +def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=ANALYSES_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=ANALYSES_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=ANALYSES_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=ANALYSES_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.LESS_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=ANALYSES_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=ANALYSES_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams): + LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters))) + if len(qparams.query.request_parameters) > 0 and "$and" not in query: + query["$and"] = [] + for k, v in qparams.query.request_parameters.items(): + query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter( + id=ANALYSES_PROPERTY_MAP[k], + value=v + ))) + return query + +def get_analyses(entry_id: Optional[str], qparams: RequestParams): + query = apply_request_parameters({}, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.ANALYSES + count = get_count(client.beacon.analyses, query) + docs = get_documents( + client.beacon.analyses, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_analysis_with_id(entry_id: Optional[str], qparams: RequestParams): + query = apply_request_parameters({}, qparams) + query = apply_filters(query, qparams.query.filters) + query = query_id(query, entry_id) + schema = DefaultSchemas.ANALYSES + count = get_count(client.beacon.analyses, query) + docs = get_documents( + client.beacon.analyses, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_variants_of_analysis(entry_id: Optional[str], qparams: RequestParams): + query = {"$and": [{"id": entry_id}]} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + count = get_count(client.beacon.analyses, query) + analysis_ids = client.beacon.analyses \ + .find_one(query, {"biosampleId": 1, "_id": 0}) + LOG.debug(analysis_ids) + analysis_ids=get_cross_query(analysis_ids,'single','biosampleId') + LOG.debug(analysis_ids) + query = apply_filters(analysis_ids, qparams.query.filters) + + schema = DefaultSchemas.GENOMICVARIATIONS + count = get_count(client.beacon.genomicVariations, query) + docs = get_documents( + client.beacon.genomicVariations, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + + + +''' + query = { "$and": [ { "biosampleId": entry_id } ] } + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.GENOMICVARIATIONS + count = get_count(client.beacon.genomicVariations, query) + docs = get_documents( + client.beacon.genomicVariations, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + ''' diff --git a/beacon/db/biosamples.py b/beacon/db/biosamples.py new file mode 100644 index 0000000..599493d --- /dev/null +++ b/beacon/db/biosamples.py @@ -0,0 +1,152 @@ +import logging +from typing import Dict, List, Optional +from beacon.db.filters import apply_alphanumeric_filter, apply_filters +from beacon.db.utils import query_id, query_ids, get_count, get_documents +from beacon.db import client +from beacon.request.model import AlphanumericFilter, Operator, RequestParams +from beacon.db.filters import * +from beacon.db.schemas import DefaultSchemas +from beacon.db.utils import * +from beacon.request.model import RequestParams + +LOG = logging.getLogger(__name__) + +BIOSAMPLES_PROPERTY_MAP = { + "biosampleStatusId": "biosampleStatus.id", + "biosampleStatusLabel": "biosampleStatus.label", + "collectionDate": "collectionDate", + "collectionMoment": "collectionMoment", + "sampleOriginTypeId": "sampleOriginType.id", + "sampleOriginTypeLabel": "sampleOriginType.label" +} + +def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=BIOSAMPLES_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=BIOSAMPLES_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=BIOSAMPLES_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=BIOSAMPLES_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.LESS_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=BIOSAMPLES_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=BIOSAMPLES_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams): + LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters))) + if len(qparams.query.request_parameters) > 0 and "$and" not in query: + query["$and"] = [] + for k, v in qparams.query.request_parameters.items(): + query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter( + id=BIOSAMPLES_PROPERTY_MAP[k], + value=v + ))) + return query + + +def get_biosamples(entry_id: Optional[str], qparams: RequestParams): + query = apply_request_parameters({}, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.BIOSAMPLES + count = get_count(client.beacon.biosamples, query) + docs = get_documents( + client.beacon.biosamples, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_biosample_with_id(entry_id: Optional[str], qparams: RequestParams): + query = apply_request_parameters({}, qparams) + query = apply_filters(query, qparams.query.filters) + query = query_id(query, entry_id) + schema = DefaultSchemas.BIOSAMPLES + count = get_count(client.beacon.biosamples, query) + docs = get_documents( + client.beacon.biosamples, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_variants_of_biosample(entry_id: Optional[str], qparams: RequestParams): + query = {"caseLevelData.biosampleId": entry_id} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.GENOMICVARIATIONS + count = get_count(client.beacon.genomicVariations, query) + docs = get_documents( + client.beacon.genomicVariations, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_analyses_of_biosample(entry_id: Optional[str], qparams: RequestParams): + query = {"biosampleId": entry_id} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.ANALYSES + count = get_count(client.beacon.analyses, query) + docs = get_documents( + client.beacon.analyses, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_runs_of_biosample(entry_id: Optional[str], qparams: RequestParams): + query = {"biosampleId": entry_id} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.RUNS + count = get_count(client.beacon.runs, query) + docs = get_documents( + client.beacon.runs, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs diff --git a/beacon/db/cohorts.py b/beacon/db/cohorts.py new file mode 100644 index 0000000..e3065df --- /dev/null +++ b/beacon/db/cohorts.py @@ -0,0 +1,43 @@ +from typing import Optional +from beacon.db.filters import apply_filters +from beacon.db.schemas import DefaultSchemas +from beacon.db.utils import query_id, get_count, get_documents +from beacon.request.model import RequestParams +from beacon.db import client + + +def get_cohorts(entry_id: Optional[str], qparams: RequestParams): + query = apply_filters({}, qparams.query.filters) + schema = DefaultSchemas.COHORTS + count = get_count(client.beacon.cohorts, query) + docs = get_documents( + client.beacon.cohorts, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_cohort_with_id(entry_id: Optional[str], qparams: RequestParams): + query = apply_filters({}, qparams.query.filters) + query = query_id(query, entry_id) + schema = DefaultSchemas.COHORTS + count = get_count(client.beacon.cohorts, query) + docs = get_documents( + client.beacon.cohorts, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_individuals_of_cohort(entry_id: Optional[str], qparams: RequestParams): + # TODO + pass + + +def get_filtering_terms_of_cohort(entry_id: Optional[str], qparams: RequestParams): + # TODO + pass diff --git a/beacon/db/datasets.py b/beacon/db/datasets.py new file mode 100644 index 0000000..4422af8 --- /dev/null +++ b/beacon/db/datasets.py @@ -0,0 +1,100 @@ +from typing import Optional +from beacon.db.filters import apply_filters +from beacon.db.schemas import DefaultSchemas +from beacon.db.utils import query_id, get_count, get_documents +from beacon.request.model import RequestParams +from beacon.db import client + +import logging + +LOG = logging.getLogger(__name__) + + +def get_datasets(entry_id: Optional[str], qparams: RequestParams): + query = apply_filters({}, qparams.query.filters) + schema = DefaultSchemas.DATASETS + count = get_count(client.beacon.datasets, query) + docs = get_documents( + client.beacon.datasets, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_dataset_with_id(entry_id: Optional[str], qparams: RequestParams): + query = apply_filters({}, qparams.query.filters) + query = query_id(query, entry_id) + schema = DefaultSchemas.DATASETS + count = get_count(client.beacon.datasets, query) + docs = get_documents( + client.beacon.datasets, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_variants_of_dataset(entry_id: Optional[str], qparams: RequestParams): + query = {"datasetId": entry_id} + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.GENOMICVARIATIONS + count = get_count(client.beacon.genomicVariations, query) + docs = get_documents( + client.beacon.genomicVariations, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_biosamples_of_dataset(entry_id: Optional[str], qparams: RequestParams): + query = {"datasetId": entry_id} + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.BIOSAMPLES + count = get_count(client.beacon.biosamples, query) + docs = get_documents( + client.beacon.biosamples, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_individuals_of_dataset(entry_id: Optional[str], qparams: RequestParams): + query = {"datasetId": entry_id} + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.INDIVIDUALS + count = get_count(client.beacon.individuals, query) + docs = get_documents( + client.beacon.individuals, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def filter_public_datasets(requested_datasets_ids): + query = {"dataUseConditions.duoDataUse.modifiers.id": "DUO:0000004"} + return client.beacon.datasets \ + .find(query) + + +def get_filtering_terms_of_dataset(entry_id: Optional[str], qparams: RequestParams): + # TODO + pass + + +def get_runs_of_dataset(entry_id: Optional[str], qparams: RequestParams): + # TODO: To be fixed in the model + pass + + +def get_analyses_of_dataset(entry_id: Optional[str], qparams: RequestParams): + # TODO: To be fixed in the model + pass diff --git a/beacon/db/filtering_terms.py b/beacon/db/filtering_terms.py new file mode 100644 index 0000000..8af27b0 --- /dev/null +++ b/beacon/db/filtering_terms.py @@ -0,0 +1,32 @@ +from typing import Optional +from beacon.db import client +from beacon.db.filters import apply_filters +from beacon.db.utils import query_id, get_documents, get_count +from beacon.request.model import RequestParams + + +def get_filtering_terms(entry_id: Optional[str], qparams: RequestParams): + query = apply_filters({}, qparams.query.filters) + schema = None + count = get_count(client.beacon.filtering_terms, query) + docs = get_documents( + client.beacon.filtering_terms, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_filtering_term_with_id(entry_id: Optional[str], qparams: RequestParams): + query = apply_filters({}, qparams.query.filters) + query = query_id(query, entry_id) + schema = None + count = get_count(client.beacon.filtering_terms, query) + docs = get_documents( + client.beacon.filtering_terms, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs diff --git a/beacon/db/filters.py b/beacon/db/filters.py new file mode 100644 index 0000000..e34c399 --- /dev/null +++ b/beacon/db/filters.py @@ -0,0 +1,111 @@ +from collections import defaultdict +from typing import List, Union +import re +import dataclasses +from copy import deepcopy + +from beacon.request import ontologies +from beacon.request.model import AlphanumericFilter, CustomFilter, OntologyFilter, Operator, Similarity + +import logging + +LOG = logging.getLogger(__name__) + +CURIE_REGEX = r'^([a-zA-Z0-9]*):\/?[a-zA-Z0-9]*$' + + +def apply_filters(query: dict, filters: List[dict]) -> dict: + LOG.debug("Filters len = {}".format(len(filters))) + if len(filters) > 0: + query["$and"] = [] + for filter in filters: + partial_query = {} + if "value" in filter: + filter = AlphanumericFilter(**filter) + LOG.debug("Alphanumeric filter: %s %s %s", filter.id, filter.operator, filter.value) + partial_query = apply_alphanumeric_filter(partial_query, filter) + elif "similarity" in filter or "includeDescendantTerms" in filter or re.match(CURIE_REGEX, filter["id"]): + filter = OntologyFilter(**filter) + LOG.debug("Ontology filter: %s", filter.id) + partial_query = {"$text": defaultdict(str) } + partial_query = apply_ontology_filter(partial_query, filter) + else: + filter = CustomFilter(**filter) + LOG.debug("Custom filter: %s", filter.id) + partial_query = apply_custom_filter(partial_query, filter) + query["$and"].append(partial_query) + return query + + +def apply_ontology_filter(query: dict, filter: OntologyFilter) -> dict: + + is_filter_id_required = True + + # Search similar + if filter.similarity != Similarity.EXACT: + is_filter_id_required = False + similar_terms = ontologies.get_similar_ontology_terms(filter.id, filter.similarity) + LOG.debug("Similar: {}".format(similar_terms)) + for term in similar_terms: + if query["$text"]["$search"]: + query["$text"]["$search"] += " " + query["$text"]["$search"] += term + + # Apply descendant terms + if filter.include_descendant_terms: + is_filter_id_required = False + descendants = ontologies.get_descendants(filter.id) + LOG.debug("Descendants: {}".format(descendants)) + for descendant in descendants: + if query["$text"]["$search"]: + query["$text"]["$search"] += " " + query["$text"]["$search"] += descendant + + if is_filter_id_required: + if query["$text"]["$search"]: + query["$text"]["$search"] += " " + query["$text"]["$search"] += '\"' + filter.id + '\"' + + LOG.debug("QUERY: %s", query) + return query + +def format_value(value: Union[str, List[int]]) -> Union[List[int], str, int, float]: + if isinstance(value, list): + return value + elif value.isnumeric(): + if float(value).is_integer(): + return int(value) + else: + return float(value) + else: + return value + +def format_operator(operator: Operator) -> str: + if operator == Operator.EQUAL: + return "$eq" + elif operator == Operator.NOT: + return "$ne" + elif operator == Operator.GREATER: + return "$gt" + elif operator == Operator.GREATER_EQUAL: + return "$gte" + elif operator == Operator.LESS: + return "$lt" + else: + # operator == Operator.LESS_EQUAL + return "$lte" + +def apply_alphanumeric_filter(query: dict, filter: AlphanumericFilter) -> dict: + formatted_value = format_value(filter.value) + formatted_operator = format_operator(filter.operator) + query[filter.id] = { formatted_operator: formatted_value } + LOG.debug("QUERY: %s", query) + return query + + +def apply_custom_filter(query: dict, filter: CustomFilter) -> dict: + if query["$text"]["$search"]: + query["$text"]["$search"] += " " + query["$text"]["$search"] += filter.id + LOG.debug("QUERY: %s", query) + return query diff --git a/beacon/db/g_variants.py b/beacon/db/g_variants.py new file mode 100644 index 0000000..6b07476 --- /dev/null +++ b/beacon/db/g_variants.py @@ -0,0 +1,217 @@ +import logging +from typing import Dict, List, Optional +from beacon.db.filters import apply_alphanumeric_filter, apply_filters +from beacon.db.schemas import DefaultSchemas +from beacon.db.utils import query_id, query_ids, get_count, get_documents, get_cross_query +from beacon.request.model import AlphanumericFilter, Operator, RequestParams +from beacon.db import client +import json +from bson import json_util + +LOG = logging.getLogger(__name__) + +VARIANTS_PROPERTY_MAP = { + "assemblyId": "_position.assemblyId", + "referenceName": "_position.refseqId", + "start": "_position.start", + "end": "_position.end", + "referenceBases": "variation.referenceBases", + "alternateBases": "variation.alternateBases", + "variantType": "variation.variantType", + "variantMinLength": None, + "variantMaxLength": None, + "mateName": None, + "gene": "molecularAttributes.geneIds", + "aachange": "molecularAttributes.aminoacidChanges" +} + +def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=VARIANTS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=VARIANTS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=VARIANTS_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=VARIANTS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.LESS_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=VARIANTS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=VARIANTS_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams): + LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters))) + if len(qparams.query.request_parameters) > 0 and "$and" not in query: + query["$and"] = [] + for k, v in qparams.query.request_parameters.items(): + if k == "start": + if isinstance(v, str): + v = v.split(',') + filters = generate_position_filter_start(k, v) + for filter in filters: + query["$and"].append(apply_alphanumeric_filter({}, filter)) + elif k == "end": + if isinstance(v, str): + v = v.split(',') + filters = generate_position_filter_end(k, v) + for filter in filters: + query["$and"].append(apply_alphanumeric_filter({}, filter)) + elif k == "variantMinLength" or k == "variantMaxLength" or k == "mateName": + continue + else: + query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter( + id=VARIANTS_PROPERTY_MAP[k], + value=v + ))) + return query + + +def get_variants(entry_id: Optional[str], qparams: RequestParams): + query = apply_request_parameters({}, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.GENOMICVARIATIONS + count = get_count(client.beacon.genomicVariations, query) + docs = get_documents( + client.beacon.genomicVariations, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_variant_with_id(entry_id: Optional[str], qparams: RequestParams): + query = {"$and": [{"variantInternalId": entry_id}]} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.GENOMICVARIATIONS + count = get_count(client.beacon.genomicVariations, query) + docs = get_documents( + client.beacon.genomicVariations, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_biosamples_of_variant(entry_id: Optional[str], qparams: RequestParams): + query = {"$and": [{"variantInternalId": entry_id}]} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + count = get_count(client.beacon.genomicVariations, query) + biosample_ids = client.beacon.genomicVariations \ + .find_one(query, {"caseLevelData.biosampleId": 1, "_id": 0}) + + biosample_ids=get_cross_query(biosample_ids,'biosampleId','id') + query = apply_filters(biosample_ids, qparams.query.filters) + + schema = DefaultSchemas.BIOSAMPLES + count = get_count(client.beacon.biosamples, query) + docs = get_documents( + client.beacon.biosamples, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_individuals_of_variant(entry_id: Optional[str], qparams: RequestParams): + query = {"$and": [{"variantInternalId": entry_id}]} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + count = get_count(client.beacon.genomicVariations, query) + individual_ids = client.beacon.genomicVariations \ + .find_one(query, {"caseLevelData.biosampleId": 1, "_id": 0}) + + individual_ids = get_cross_query(individual_ids,'biosampleId','id') + query = apply_filters(individual_ids, qparams.query.filters) + + schema = DefaultSchemas.INDIVIDUALS + count = get_count(client.beacon.individuals, query) + docs = get_documents( + client.beacon.individuals, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_runs_of_variant(entry_id: Optional[str], qparams: RequestParams): + query = {"$and": [{"variantInternalId": entry_id}]} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + count = get_count(client.beacon.genomicVariations, query) + run_ids = client.beacon.genomicVariations \ + .find_one(query, {"caseLevelData.biosampleId": 1, "_id": 0}) + + run_ids=get_cross_query(run_ids,'biosampleId','biosampleId') + query = apply_filters(run_ids, qparams.query.filters) + + schema = DefaultSchemas.RUNS + count = get_count(client.beacon.runs, query) + docs = get_documents( + client.beacon.runs, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_analyses_of_variant(entry_id: Optional[str], qparams: RequestParams): + query = {"$and": [{"variantInternalId": entry_id}]} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + count = get_count(client.beacon.genomicVariations, query) + analysis_ids = client.beacon.genomicVariations \ + .find_one(query, {"caseLevelData.biosampleId": 1, "_id": 0}) + LOG.debug(analysis_ids) + + analysis_ids=get_cross_query(analysis_ids,'biosampleId','biosampleId') + LOG.debug(analysis_ids) + query = apply_filters(analysis_ids, qparams.query.filters) + + schema = DefaultSchemas.ANALYSES + count = get_count(client.beacon.analyses, query) + docs = get_documents( + client.beacon.analyses, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs diff --git a/beacon/db/individuals.py b/beacon/db/individuals.py new file mode 100644 index 0000000..932532c --- /dev/null +++ b/beacon/db/individuals.py @@ -0,0 +1,195 @@ +import logging +from typing import Dict, List, Optional +from beacon.db.filters import apply_alphanumeric_filter, apply_filters +from beacon.db.utils import query_id, query_ids, get_count, get_documents +from beacon.db import client +from beacon.request.model import AlphanumericFilter, Operator, RequestParams +from beacon.db.schemas import DefaultSchemas +from beacon.db.utils import query_id, get_count, get_documents +from beacon.request.model import RequestParams +import json +from bson import json_util + +LOG = logging.getLogger(__name__) + +INDIVIDUALS_PROPERTY_MAP = { + "diseaseId": "diseases.diseaseCode.id", + "diseaseLabel": "diseases.diseaseCode.label", + "ethnicityId": "ethnicity.id", + "ethnicityLabel": "ethnicity.label", + "geographicOriginId": "geographicOrigin.id", + "geographicOriginLabel": "geographicOrigin.label", + "assayCodeId": "measures.assayCode.id", + "assayCodeLabel": "measures.assayCode.label", + "date": "measures.date", + "measurementValueId": "measures.measurementValue.quantity.unit.id", + "measurementValueLabel": "measures.measurementValue.quantity.unit.label", + "measurementValue": "measures.measurementValue.quantity.value", + "sexId": "sex.id", + "sexLabel": "sex.label" +} + +def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=INDIVIDUALS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=INDIVIDUALS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=INDIVIDUALS_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=INDIVIDUALS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.LESS_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=INDIVIDUALS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=INDIVIDUALS_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams): + LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters))) + if len(qparams.query.request_parameters) > 0 and "$and" not in query: + query["$and"] = [] + for k, v in qparams.query.request_parameters.items(): + query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter( + id=INDIVIDUALS_PROPERTY_MAP[k], + value=v + ))) + return query + +def get_individuals(entry_id: Optional[str], qparams: RequestParams): + query = apply_request_parameters({}, qparams) + query = apply_filters(query, qparams.query.filters) + print(query) + schema = DefaultSchemas.INDIVIDUALS + count = get_count(client.beacon.individuals, query) + docs = get_documents( + client.beacon.individuals, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_individual_with_id(entry_id: Optional[str], qparams: RequestParams): + query = apply_request_parameters({}, qparams) + query = apply_filters(query, qparams.query.filters) + query = query_id(query, entry_id) + schema = DefaultSchemas.INDIVIDUALS + count = get_count(client.beacon.individuals, query) + docs = get_documents( + client.beacon.individuals, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_variants_of_individual(entry_id: Optional[str], qparams: RequestParams): + query = {"individualId": entry_id} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.GENOMICVARIATIONS + count = get_count(client.beacon.genomicVariations, query) + docs = get_documents( + client.beacon.genomicVariations, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_biosamples_of_individual(entry_id: Optional[str], qparams: RequestParams): + query = {"individualId": entry_id} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.BIOSAMPLES + count = get_count(client.beacon.biosamples, query) + docs = get_documents( + client.beacon.biosamples, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_filtering_terms_of_individual(entry_id: Optional[str], qparams: RequestParams): + # TODO + pass + + +def get_runs_of_individual(entry_id: Optional[str], qparams: RequestParams): + query = {"individualId": entry_id} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + run_ids = client.beacon.genomicVariations.find_one(query, {"caseLevelData.runId": 1, "_id": 0}) + run_ids = [r for r in run_ids] if run_ids else [] + + query = apply_request_parameters(query, qparams) + query = query_ids(query, run_ids) + query = apply_filters(query, qparams.query.filters) + + schema = DefaultSchemas.RUNS + count = get_count(client.beacon.runs, query) + docs = get_documents( + client.beacon.runs, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_analyses_of_individual(entry_id: Optional[str], qparams: RequestParams): + query = {"caseLevelData.individualId": entry_id} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + analysis_ids = client.beacon.genomicVariations.find_one(query, {"caseLevelData.analysisId": 1, "_id": 0}) + analysis_ids = [r for r in analysis_ids] if analysis_ids else [] + + query = apply_request_parameters({}, qparams) + query = query_ids(query, analysis_ids) + query = apply_filters(query, qparams.query.filters) + + schema = DefaultSchemas.ANALYSES + count = get_count(client.beacon.analyses, query) + docs = get_documents( + client.beacon.analyses, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs diff --git a/beacon/db/runs.py b/beacon/db/runs.py new file mode 100644 index 0000000..caa76e0 --- /dev/null +++ b/beacon/db/runs.py @@ -0,0 +1,140 @@ +import logging +from typing import Dict, List, Optional +from beacon.db.filters import apply_alphanumeric_filter, apply_filters +from beacon.db.utils import query_id, query_ids, get_count, get_documents +from beacon.db import client +from beacon.request.model import AlphanumericFilter, Operator, RequestParams +from beacon.db.schemas import DefaultSchemas +from beacon.db.utils import query_id, get_count, get_documents +from beacon.request.model import RequestParams + +LOG = logging.getLogger(__name__) + +RUNS_PROPERTY_MAP = { + "biosampleId": "biosampleId", + "individualId": "individualId", + "libraryLayout": "libraryLayout", + "librarySelection": "librarySelection", + "librarySourceId": "librarySource.id", + "librarySourceLabel": "librarySource.label", + "libraryStrategy": "libraryStrategy", + "platform": "platform", + "platformModelId": "platformModel.id", + "platformModelLabel": "platformModel.label", + "runDate": "runDate" +} + +def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=RUNS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=RUNS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=RUNS_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]: + LOG.debug("len value = {}".format(len(value))) + filters = [] + if len(value) == 1: + filters.append(AlphanumericFilter( + id=RUNS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.LESS_EQUAL + )) + elif len(value) == 2: + filters.append(AlphanumericFilter( + id=RUNS_PROPERTY_MAP[key], + value=[value[0]], + operator=Operator.GREATER_EQUAL + )) + filters.append(AlphanumericFilter( + id=RUNS_PROPERTY_MAP[key], + value=[value[1]], + operator=Operator.LESS_EQUAL + )) + return filters + + +def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams): + LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters))) + if len(qparams.query.request_parameters) > 0 and "$and" not in query: + query["$and"] = [] + for k, v in qparams.query.request_parameters.items(): + query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter( + id=RUNS_PROPERTY_MAP[k], + value=v + ))) + return query + +def get_runs(entry_id: Optional[str], qparams: RequestParams): + query = apply_request_parameters({}, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.RUNS + count = get_count(client.beacon.runs, query) + docs = get_documents( + client.beacon.runs, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_run_with_id(entry_id: Optional[str], qparams: RequestParams): + query = apply_request_parameters({}, qparams) + query = apply_filters(query, qparams.query.filters) + query = query_id(query, entry_id) + schema = DefaultSchemas.RUNS + count = get_count(client.beacon.runs, query) + docs = get_documents( + client.beacon.runs, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_variants_of_run(entry_id: Optional[str], qparams: RequestParams): + query = {"caseLevelData.runId": entry_id} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.GENOMICVARIATIONS + count = get_count(client.beacon.genomicVariations, query) + docs = get_documents( + client.beacon.runs, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs + + +def get_analyses_of_run(entry_id: Optional[str], qparams: RequestParams): + query = {"runId": entry_id} + query = apply_request_parameters(query, qparams) + query = apply_filters(query, qparams.query.filters) + schema = DefaultSchemas.ANALYSES + count = get_count(client.beacon.analyses, query) + docs = get_documents( + client.beacon.analyses, + query, + qparams.query.pagination.skip, + qparams.query.pagination.limit + ) + return schema, count, docs diff --git a/beacon/db/schemas.py b/beacon/db/schemas.py new file mode 100644 index 0000000..b0bdc86 --- /dev/null +++ b/beacon/db/schemas.py @@ -0,0 +1,11 @@ +from enum import Enum + + +class DefaultSchemas(Enum): + ANALYSES = {"entityType": "analysis", "schema": "beacon-analysis-v2.0.0"} + BIOSAMPLES = {"entityType": "biosample", "schema": "beacon-dataset-v2.0.0"} + COHORTS = {"entityType": "cohort", "schema": "beacon-cohort-v2.0.0"} + DATASETS = {"entityType": "dataset", "schema": "beacon-dataset-v2.0.0"} + GENOMICVARIATIONS = {"entityType": "genomicVariation", "schema": "beacon-g_variant-v2.0.0"} + INDIVIDUALS = {"entityType": "individual", "schema": "beacon-individual-v2.0.0"} + RUNS = {"entityType": "run", "schema": "beacon-run-v2.0.0"} diff --git a/beacon/db/utils.py b/beacon/db/utils.py new file mode 100644 index 0000000..5b38744 --- /dev/null +++ b/beacon/db/utils.py @@ -0,0 +1,60 @@ +from typing import Dict, Optional + +from pymongo.cursor import Cursor +from pymongo.collection import Collection +from beacon.db import client +from beacon.request.model import RequestParams +import logging + +LOG = logging.getLogger(__name__) + + +def query_id(query: dict, document_id) -> dict: + query["id"] = document_id + return query + + +def query_ids(query: dict, ids) -> dict: + query["id"] = ids + return query + + +def query_property(query: dict, property_id: str, value: str, property_map: Dict[str, str]) -> dict: + query[property_map[property_id]] = value + return query + + +def get_count(collection: Collection, query: dict) -> int: + if not query: + LOG.debug("Returning estimated count") + return collection.estimated_document_count() + else: + LOG.debug("FINAL QUERY (COUNT): {}".format(query)) + LOG.debug("Returning count") + return collection.count_documents(query) + + +def get_documents(collection: Collection, query: dict, skip: int, limit: int) -> Cursor: + LOG.debug("FINAL QUERY: {}".format(query)) + return collection.find(query).skip(skip).limit(limit).max_time_ms(10 * 1000) + +def get_cross_query(ids: dict, cross_type: str, collection_id: str): + id_list=[] + dict_in={} + id_dict={} + if cross_type != 'single': + for k, v in ids.items(): + for item in v: + id_list.append(item[cross_type]) + dict_in["$in"]=id_list + + else: + list_item=ids[collection_id] + LOG.debug(str(list_item)) + id_list.append(str(list_item)) + dict_in["$in"]=id_list + LOG.debug(id_list) + id_dict[collection_id]=dict_in + query = id_dict + LOG.debug(query) + return query diff --git a/beacon/logger.yml b/beacon/logger.yml new file mode 100644 index 0000000..fc735f0 --- /dev/null +++ b/beacon/logger.yml @@ -0,0 +1,32 @@ +--- +version: 1 +#disable_existing_loggers: True +root: + level: NOTSET + handlers: [ noHandler ] + +loggers: + __main__: + level: DEBUG + handlers: [ console ] + beacon: + level: DEBUG + handlers: [ console ] + propagate: True + aiohttp: + level: INFO + handlers: [ console ] + +handlers: + noHandler: + class: logging.NullHandler + level: NOTSET + console: + class: logging.StreamHandler + formatter: simple + stream: ext://sys.stderr + +formatters: + simple: + format: "[{name:^10}][{levelname:^6}] (L{lineno}) {message}" + style: "{" diff --git a/beacon/request/__init__.py b/beacon/request/__init__.py new file mode 100644 index 0000000..c1c66c5 --- /dev/null +++ b/beacon/request/__init__.py @@ -0,0 +1,4 @@ +from aiohttp.web_request import Request +from beacon.request.model import IncludeResultsetResponses, RequestParams + +import logging diff --git a/beacon/request/handlers.py b/beacon/request/handlers.py new file mode 100644 index 0000000..47bc1d3 --- /dev/null +++ b/beacon/request/handlers.py @@ -0,0 +1,91 @@ +import json +import logging +from aiohttp import web +from aiohttp.web_request import Request +from bson import json_util +from beacon import conf + +from beacon.request import ontologies +from beacon.request.model import Granularity, RequestParams +from beacon.response.build_response import ( + build_beacon_resultset_response, + build_beacon_collection_response, + build_beacon_boolean_response, + build_beacon_count_response, + build_filtering_terms_response, +) +from beacon.utils.stream import json_stream + +LOG = logging.getLogger(__name__) + + +def collection_handler(db_fn, request=None): + async def wrapper(request: Request): + # Get params + json_body = await request.json() if request.method == "POST" and request.has_body and request.can_read_body else {} + qparams = RequestParams(**json_body).from_request(request) + entry_id = request.match_info["id"] if "id" in request.match_info else None + + # Get response + entity_schema, count, records = db_fn(entry_id, qparams) + response_converted = ( + [r for r in records] if records else [] + ) + response = build_beacon_collection_response( + response_converted, count, qparams, lambda x, y: x, entity_schema + ) + return await json_stream(request, response) + + return wrapper + + +def generic_handler(db_fn, request=None): + async def wrapper(request: Request): + # Get params + json_body = await request.json() if request.method == "POST" and request.has_body and request.can_read_body else {} + qparams = RequestParams(**json_body).from_request(request) + entry_id = request.match_info.get('id', None) + + # Get response + entity_schema, count, records = db_fn(entry_id, qparams) + response_converted = records + + response = None + + if qparams.query.requested_granularity == Granularity.BOOLEAN: + response = build_beacon_boolean_response(response_converted, count, qparams, lambda x, y: x, entity_schema) + + elif qparams.query.requested_granularity == Granularity.COUNT: + if conf.max_beacon_granularity == Granularity.BOOLEAN: + response = build_beacon_boolean_response(response_converted, count, qparams, lambda x, y: x, entity_schema) + else: + response = build_beacon_count_response(response_converted, count, qparams, lambda x, y: x, entity_schema) + + # qparams.query.requested_granularity == Granularity.RECORD: + else: + + if conf.max_beacon_granularity == Granularity.BOOLEAN: + response = build_beacon_boolean_response(response_converted, count, qparams, lambda x, y: x, entity_schema) + elif conf.max_beacon_granularity == Granularity.COUNT: + response = build_beacon_count_response(response_converted, count, qparams, lambda x, y: x, entity_schema) + else: + response = build_beacon_resultset_response(response_converted, count, qparams, lambda x, y: x, entity_schema) + + return await json_stream(request, response) + + return wrapper + +def filtering_terms_handler(db_fn, request=None): + async def wrapper(request: Request): + # Get params + json_body = await request.json() if request.method == "POST" and request.has_body and request.can_read_body else {} + qparams = RequestParams(**json_body).from_request(request) + entry_id = request.match_info.get('id', None) + + # Get response + _, _, records = db_fn(entry_id, qparams) + resources = ontologies.get_resources() + response = build_filtering_terms_response(records, resources, qparams) + return await json_stream(request, response) + + return wrapper diff --git a/beacon/request/model.py b/beacon/request/model.py new file mode 100644 index 0000000..f34d9cc --- /dev/null +++ b/beacon/request/model.py @@ -0,0 +1,113 @@ +import logging +from typing_extensions import Self +from pydantic import BaseModel +from strenum import StrEnum +from typing import List, Optional, Union +from beacon import conf +from humps.main import camelize +from aiohttp.web_request import Request + +LOG = logging.getLogger(__name__) + + +class CamelModel(BaseModel): + class Config: + alias_generator = camelize + allow_population_by_field_name = True + + +class IncludeResultsetResponses(StrEnum): + ALL = "ALL", + HIT = "HIT", + MISS = "MISS", + NONE = "NONE" + + +class Similarity(StrEnum): + EXACT = "exact", + HIGH = "high", + MEDIUM = "medium", + LOW = "low" + + +class Operator(StrEnum): + EQUAL = "=", + LESS = "<", + GREATER = ">", + NOT = "!", + LESS_EQUAL = "<=", + GREATER_EQUAL = ">=" + +class Granularity(StrEnum): + BOOLEAN = "boolean", + COUNT = "count", + RECORD = "record" + +class OntologyFilter(CamelModel): + id: str + scope: Optional[str] = None + include_descendant_terms: bool = False + similarity: Similarity = Similarity.EXACT + + +class AlphanumericFilter(CamelModel): + id: str + value: Union[str, List[int]] + scope: Optional[str] = None + operator: Operator = Operator.EQUAL + + +class CustomFilter(CamelModel): + id: str + scope: Optional[str] = None + + +class Pagination(CamelModel): + skip: int = 0 + limit: int = 10 + + +class RequestMeta(CamelModel): + requested_schemas: List[str] = [] + api_version: str = conf.api_version + + +class RequestQuery(CamelModel): + filters: List[dict] = [] + include_resultset_responses: IncludeResultsetResponses = IncludeResultsetResponses.HIT + pagination: Pagination = Pagination() + request_parameters: dict = {} + test_mode: bool = False + requested_granularity: Granularity = Granularity(conf.default_beacon_granularity) + + +class RequestParams(CamelModel): + meta: RequestMeta = RequestMeta() + query: RequestQuery = RequestQuery() + + def from_request(self, request: Request) -> Self: + if request.method != "POST" or not request.has_body or not request.can_read_body: + for k, v in request.query.items(): + if k == "requestedSchema": + self.meta.requested_schemas = [v] + elif k == "skip": + self.query.pagination.skip = int(v) + elif k == "limit": + self.query.pagination.limit = int(v) + elif k == "includeResultsetResponses": + self.query.include_resultset_responses = IncludeResultsetResponses(v) + else: + self.query.request_parameters[k] = v + return self + + def summary(self): + return { + "apiVersion": self.meta.api_version, + "requestedSchemas": self.meta.requested_schemas, + "filters": self.query.filters, + "requestParameters": self.query.request_parameters, + "includeResultsetResponses": self.query.include_resultset_responses, + "pagination": self.query.pagination.dict(), + "requestedGranularity": self.query.requested_granularity, + "testMode": self.query.test_mode + } diff --git a/beacon/request/ontologies.py b/beacon/request/ontologies.py new file mode 100644 index 0000000..37be84e --- /dev/null +++ b/beacon/request/ontologies.py @@ -0,0 +1,189 @@ +import re +import fastobo +import networkx +import requests +from beacon.request.model import Similarity +from pronto.ontology import Ontology +from os import scandir, listdir +from pathlib import Path + +from owlready2 import OwlReadyOntologyParsingError +from tqdm import tqdm +from typing import Dict, Optional, Set, List +from beacon.db import client +from beacon import conf +import owlready2 +import logging + +LOG = logging.getLogger(__name__) + +ONTOLOGIES = {} +ONTOLOGY_REGEX = re.compile(r"([_A-Za-z]+):(\w+)") + +def find_all_ontologies_used() -> Set[str]: + ontologies = set() + for c_name in ["analyses", "biosamples", "cohorts", "genomicVariations", "datasets", "individuals", "runs"]: + ontologies_aux = find_ontologies_used(c_name) + ontologies = ontologies.union(ontologies_aux) + return ontologies + + +def find_all_ontology_terms_used() -> Set[str]: + ontologies = set() + for c_name in ["analyses", "biosamples", "cohorts", "genomicVariations", "datasets", "individuals", "runs"]: + ontologies_aux = find_ontology_terms_used(c_name) + ontologies = ontologies.union(ontologies_aux) + return ontologies + + +def find_ontologies_used(collection_name: str) -> Set[str]: + ontologies = set() + count = client.beacon.get_collection(collection_name).estimated_document_count() + xs = client.beacon.get_collection(collection_name).find() + for r in tqdm(xs, total=count): + matches = ONTOLOGY_REGEX.findall(str(r)) + for match0, _ in matches: + ontologies.add(match0) + return ontologies + + +def find_ontology_terms_used(collection_name: str) -> Set[str]: + terms = set() + count = client.beacon.get_collection(collection_name).estimated_document_count() + xs = client.beacon.get_collection(collection_name).find() + for r in tqdm(xs, total=count): + matches = ONTOLOGY_REGEX.findall(str(r)) + for match in matches: + terms.add(match) + return terms + + +def load(): + ontology_directory = conf.ontologies_folder + owlready2.onto_path.append(ontology_directory) + count = len(listdir(ontology_directory)) + for i, filename in enumerate(tqdm(scandir(ontology_directory), total=count)): + if filename.is_file() and filename.name.lower().endswith(".owl"): + try: + LOG.debug("Loading ontology {} of {}".format(i, count)) + ONTOLOGIES[filename.name[:-4]] = owlready2.get_ontology(filename.path).load() + except OwlReadyOntologyParsingError: + # TODO: Add error + continue + +def try_convert_owl_to_obo(): + ontology_directory = conf.ontologies_folder + count = len(listdir(ontology_directory)) + for i, filename in enumerate(tqdm(scandir(ontology_directory), total=count)): + new_filename = Path(filename.path).with_suffix(".obo") + if filename.is_file() and filename.name.lower().endswith(".owl") and not new_filename.exists(): + LOG.debug("Transforming {} to {}".format(filename.path, new_filename)) + owl_onto: Ontology = Ontology(filename.path) + with open(new_filename, "wb") as f: + owl_onto.dump(f, format="obo") + + +def load_obo(): + try_convert_owl_to_obo() + ontology_directory = conf.ontologies_folder + count = len(listdir(ontology_directory)) + for i, filename in enumerate(tqdm(scandir(ontology_directory), total=count)): + if filename.is_file() and filename.name.lower().endswith(".obo"): + try: + LOG.debug("Loading ontology {} of {} ({})".format(i, count, filename.name[:-4])) + ONTOLOGIES[filename.name[:-4]] = fastobo.load(filename.path) + LOG.debug(ONTOLOGIES[filename.name[:-4]] is None) + except: + LOG.error("Loading ontology {} failed".format(filename)) + + +def get_descendants(term: str) -> List[str]: + + ontology_id, term_id = term.split(':') + + # Create ontology graph + # TODO: Cache should be the graph + knowledge_graph = networkx.DiGraph() + for frame in ONTOLOGIES[ontology_id]: + if isinstance(frame, fastobo.term.TermFrame): + knowledge_graph.add_node(str(frame.id)) + for clause in frame: + if isinstance(clause, fastobo.term.IsAClause): + knowledge_graph.add_edge(str(frame.id), str(clause.term)) + print(networkx.is_directed_acyclic_graph(knowledge_graph)) + + return list(networkx.descendants(knowledge_graph, term)) + + +def get_ontology_neighbours(term: str, depth: int) -> List[str]: + ontology_id, term_id = term.split(':') + + # Create ontology graph + # TODO: Cache should be the graph + knowledge_graph = networkx.DiGraph() + for frame in ONTOLOGIES[ontology_id]: + if isinstance(frame, fastobo.term.TermFrame): + knowledge_graph.add_node(str(frame.id)) + for clause in frame: + if isinstance(clause, fastobo.term.IsAClause): + knowledge_graph.add_edge(str(frame.id), str(clause.term)) + print(networkx.is_directed_acyclic_graph(knowledge_graph)) + + # Get predecessors + first_predecessors = set(knowledge_graph.predecessors(term)) + + # Get siblings + siblings = set() + for parent in first_predecessors: + siblings = siblings.union(set(knowledge_graph.successors(parent))) + + # Get successors and predecessors with depth + predecessors = set(knowledge_graph.predecessors(term)) + successors = set(knowledge_graph.successors(term)) + for _ in range(1, depth): + for predecessor in predecessors: + predecessors = predecessors.union(set(knowledge_graph.predecessors(predecessor))) + for successor in successors: + successors = successors.union(set(knowledge_graph.successors(successor))) + + # Combine results + terms = set() + terms.add(term) + terms = terms.union(predecessors) + terms = terms.union(siblings) + terms = terms.union(successors) + + return list(terms) + +def get_similar_ontology_terms(term: str, similarity: Similarity) -> List[str]: + if similarity == Similarity.EXACT: + return [term] + elif similarity == Similarity.HIGH: + return get_ontology_neighbours(term, depth=1) + elif similarity == Similarity.MEDIUM: + return get_ontology_neighbours(term, depth=2) + else: + # similarity == Similarity.LOW + return get_ontology_neighbours(term, depth=3) + + +def get_ontology_config(ontology: owlready2.Ontology) -> Optional[Dict]: + ontology_url = "https://www.ebi.ac.uk/ols/api/ontologies/{}".format(ontology.name) + try: + return requests.get(ontology_url).json()["config"] + except: + return None + +def get_resources() -> List[Dict]: + resources = [] + for onto in ONTOLOGIES.values(): + ontology_config = get_ontology_config(onto) + resources.append({ + "id": onto.name, + "name": ontology_config["title"] if ontology_config else onto.name, + "url": ontology_config["id"] if ontology_config else onto.base_iri, + "version": ontology_config["version"] if ontology_config else None, + "nameSpacePrefix": ontology_config["namespace"].upper() if ontology_config else None, + "iriPrefix": ontology_config["baseUris"][0] if ontology_config else None, + }) + return resources \ No newline at end of file diff --git a/beacon/request/routes.py b/beacon/request/routes.py new file mode 100644 index 0000000..1c1963f --- /dev/null +++ b/beacon/request/routes.py @@ -0,0 +1,117 @@ +from aiohttp import web + +from beacon.db import analyses, biosamples, cohorts, datasets, g_variants, individuals, runs, filtering_terms +from beacon.request.handlers import collection_handler, generic_handler, filtering_terms_handler +from beacon.response import framework, info, service_info + +routes = [ + + ######################################## + # CONFIG + ######################################## + + web.get('/api/', info.handler), + web.get('/api/info/', info.handler, name="info"), # Name added to redirect / -> /info + web.get('/api/service-info/', service_info.handler), + web.get('/api/filtering_terms/', filtering_terms_handler(db_fn=filtering_terms.get_filtering_terms)), + + web.get('/api/configuration/', framework.configuration), + web.get('/api/entry_types/', framework.entry_types), + web.get('/api/map/', framework.beacon_map), + + ######################################## + # GET + ######################################## + + web.get('/api/analyses/', generic_handler(db_fn=analyses.get_analyses)), + web.get('/api/analyses/{id}/', generic_handler(db_fn=analyses.get_analysis_with_id)), + web.get('/api/analyses/{id}/g_variants/', generic_handler(db_fn=analyses.get_variants_of_analysis)), + + web.get('/api/biosamples/', generic_handler(db_fn=biosamples.get_biosamples)), + web.get('/api/biosamples/{id}/', generic_handler(db_fn=biosamples.get_biosample_with_id)), + web.get('/api/biosamples/{id}/g_variants/', generic_handler(db_fn=biosamples.get_variants_of_biosample)), + web.get('/api/biosamples/{id}/analyses/', generic_handler(db_fn=biosamples.get_analyses_of_biosample)), + web.get('/api/biosamples/{id}/runs/', generic_handler(db_fn=biosamples.get_runs_of_biosample)), + + web.get('/api/cohorts/', collection_handler(db_fn=cohorts.get_cohorts)), + web.get('/api/cohorts/{id}/', collection_handler(db_fn=cohorts.get_cohort_with_id)), + web.get('/api/cohorts/{id}/individuals/', generic_handler(db_fn=cohorts.get_individuals_of_cohort)), + web.get('/api/cohorts/{id}/filtering_terms/', generic_handler(db_fn=cohorts.get_filtering_terms_of_cohort)), + + web.get('/api/datasets/', collection_handler(db_fn=datasets.get_datasets)), + web.get('/api/datasets/{id}/', collection_handler(db_fn=datasets.get_dataset_with_id)), + web.get('/api/datasets/{id}/g_variants/', generic_handler(db_fn=datasets.get_variants_of_dataset)), + web.get('/api/datasets/{id}/biosamples/', generic_handler(db_fn=datasets.get_biosamples_of_dataset)), + web.get('/api/datasets/{id}/individuals/', generic_handler(db_fn=datasets.get_individuals_of_dataset)), + web.get('/api/datasets/{id}/filtering_terms/', generic_handler(db_fn=datasets.get_filtering_terms_of_dataset)), + web.get('/api/datasets/{id}/runs/', generic_handler(db_fn=datasets.get_runs_of_dataset)), + web.get('/api/datasets/{id}/analyses/', generic_handler(db_fn=datasets.get_analyses_of_dataset)), + + web.get('/api/g_variants/', generic_handler(db_fn=g_variants.get_variants)), + web.get('/api/g_variants/{id}/', generic_handler(db_fn=g_variants.get_variant_with_id)), + web.get('/api/g_variants/{id}/biosamples/', generic_handler(db_fn=g_variants.get_biosamples_of_variant)), + web.get('/api/g_variants/{id}/individuals/', generic_handler(db_fn=g_variants.get_individuals_of_variant)), + web.get('/api/g_variants/{id}/runs/', generic_handler(db_fn=g_variants.get_runs_of_variant)), + web.get('/api/g_variants/{id}/analyses/', generic_handler(db_fn=g_variants.get_analyses_of_variant)), + + web.get('/api/individuals/', generic_handler(db_fn=individuals.get_individuals)), + web.get('/api/individuals/{id}/', generic_handler(db_fn=individuals.get_individual_with_id)), + web.get('/api/individuals/{id}/g_variants/', generic_handler(db_fn=individuals.get_variants_of_individual)), + web.get('/api/individuals/{id}/biosamples/', generic_handler(db_fn=individuals.get_biosamples_of_individual)), + web.get('/api/individuals/{id}/filtering_terms/', generic_handler(db_fn=individuals.get_filtering_terms_of_individual)), + web.get('/api/individuals/{id}/runs/', generic_handler(db_fn=individuals.get_runs_of_individual)), + web.get('/api/individuals/{id}/analyses/', generic_handler(db_fn=individuals.get_analyses_of_individual)), + + web.get('/api/runs/', generic_handler(db_fn=runs.get_runs)), + web.get('/api/runs/{id}/', generic_handler(db_fn=runs.get_run_with_id)), + web.get('/api/runs/{id}/g_variants/', generic_handler(db_fn=runs.get_variants_of_run)), + web.get('/api/runs/{id}/analyses/', generic_handler(db_fn=runs.get_analyses_of_run)), + + ######################################## + # POST + ######################################## + + web.post('/api/analyses/', generic_handler(db_fn=analyses.get_analyses)), + web.post('/api/analyses/{id}/', generic_handler(db_fn=analyses.get_analysis_with_id)), + web.post('/api/analyses/{id}/g_variants/', generic_handler(db_fn=analyses.get_variants_of_analysis)), + + web.post('/api/biosamples/', generic_handler(db_fn=biosamples.get_biosamples)), + web.post('/api/biosamples/{id}/', generic_handler(db_fn=biosamples.get_biosample_with_id)), + web.post('/api/biosamples/{id}/g_variants/', generic_handler(db_fn=biosamples.get_variants_of_biosample)), + web.post('/api/biosamples/{id}/analyses/', generic_handler(db_fn=biosamples.get_analyses_of_biosample)), + web.post('/api/biosamples/{id}/runs/', generic_handler(db_fn=biosamples.get_runs_of_biosample)), + + web.post('/api/cohorts/', collection_handler(db_fn=cohorts.get_cohorts)), + web.post('/api/cohorts/{id}/', collection_handler(db_fn=cohorts.get_cohort_with_id)), + web.post('/api/cohorts/{id}/individuals/', generic_handler(db_fn=cohorts.get_individuals_of_cohort)), + web.post('/api/cohorts/{id}/filtering_terms/', generic_handler(db_fn=cohorts.get_filtering_terms_of_cohort)), + + web.post('/api/datasets/', collection_handler(db_fn=datasets.get_datasets)), + web.post('/api/datasets/{id}/', collection_handler(db_fn=datasets.get_dataset_with_id)), + web.post('/api/datasets/{id}/g_variants/', generic_handler(db_fn=datasets.get_variants_of_dataset)), + web.post('/api/datasets/{id}/biosamples/', generic_handler(db_fn=datasets.get_biosamples_of_dataset)), + web.post('/api/datasets/{id}/individuals/', generic_handler(db_fn=datasets.get_individuals_of_dataset)), + web.post('/api/datasets/{id}/filtering_terms/', generic_handler(db_fn=datasets.get_filtering_terms_of_dataset)), + web.post('/api/datasets/{id}/runs/', generic_handler(db_fn=datasets.get_runs_of_dataset)), + web.post('/api/datasets/{id}/analyses/', generic_handler(db_fn=datasets.get_analyses_of_dataset)), + + web.post('/api/g_variants/', generic_handler(db_fn=g_variants.get_variants)), + web.post('/api/g_variants/{id}/', generic_handler(db_fn=g_variants.get_variant_with_id)), + web.post('/api/g_variants/{id}/biosamples/', generic_handler(db_fn=g_variants.get_biosamples_of_variant)), + web.post('/api/g_variants/{id}/individuals/', generic_handler(db_fn=g_variants.get_individuals_of_variant)), + web.post('/api/g_variants/{id}/runs/', generic_handler(db_fn=g_variants.get_runs_of_variant)), + web.post('/api/g_variants/{id}/analyses/', generic_handler(db_fn=g_variants.get_analyses_of_variant)), + + web.post('/api/individuals/', generic_handler(db_fn=individuals.get_individuals)), + web.post('/api/individuals/{id}/', generic_handler(db_fn=individuals.get_individual_with_id)), + web.post('/api/individuals/{id}/g_variants/', generic_handler(db_fn=individuals.get_variants_of_individual)), + web.post('/api/individuals/{id}/biosamples/', generic_handler(db_fn=individuals.get_biosamples_of_individual)), + web.post('/api/individuals/{id}/filtering_terms/', generic_handler(db_fn=individuals.get_filtering_terms_of_individual)), + web.post('/api/individuals/{id}/runs/', generic_handler(db_fn=individuals.get_runs_of_individual)), + web.post('/api/individuals/{id}/analyses/', generic_handler(db_fn=individuals.get_analyses_of_individual)), + + web.post('/api/runs/', generic_handler(db_fn=runs.get_runs)), + web.post('/api/runs/{id}/', generic_handler(db_fn=runs.get_run_with_id)), + web.post('/api/runs/{id}/g_variants/', generic_handler(db_fn=runs.get_variants_of_run)), + web.post('/api/runs/{id}/analyses/', generic_handler(db_fn=runs.get_analyses_of_run)), +] diff --git a/beacon/response/__init__.py b/beacon/response/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/beacon/response/build_response.py b/beacon/response/build_response.py new file mode 100644 index 0000000..882716a --- /dev/null +++ b/beacon/response/build_response.py @@ -0,0 +1,210 @@ +from typing import Optional + +from beacon import conf +from beacon.db.schemas import DefaultSchemas +from beacon.request import RequestParams +from beacon.request.model import Granularity + + +def build_meta(qparams: RequestParams, entity_schema: Optional[DefaultSchemas], returned_granularity: Granularity): + """"Builds the `meta` part of the response + + We assume that receivedRequest is the evaluated request (qparams) sent by the user. + """ + + meta = { + 'beaconId': conf.beacon_id, + 'apiVersion': conf.api_version, + 'returnedGranularity': returned_granularity, + 'receivedRequestSummary': qparams.summary(), + 'returnedSchemas': [entity_schema.value] if entity_schema is not None else [] + } + return meta + + +def build_response_summary(exists, num_total_results): + if num_total_results is None: + return { + 'exists': exists + } + else: + return { + 'exists': exists, + 'numTotalResults': num_total_results + } + + +def build_response(data, num_total_results, qparams, func): + """"Fills the `response` part with the correct format in `results`""" + + response = { + 'id': '', # TODO: Set the name of the dataset/cohort + 'setType': '', # TODO: Set the type of collection + 'exists': num_total_results > 0, + 'resultsCount': num_total_results, + 'results': data, + # 'info': None, + 'resultsHandover': None, # build_results_handover + } + + return response + + +######################################## +# Resultset Response +######################################## + +def build_beacon_resultset_response(data, + num_total_results, + qparams: RequestParams, + func_response_type, + entity_schema: DefaultSchemas): + """" + Transform data into the Beacon response format. + """ + + beacon_response = { + 'meta': build_meta(qparams, entity_schema, Granularity.RECORD), + 'responseSummary': build_response_summary(num_total_results > 0, num_total_results), + # TODO: 'extendedInfo': build_extended_info(), + 'response': { + 'resultSets': [build_response(data, num_total_results, qparams, func_response_type)] + }, + 'beaconHandovers': conf.beacon_handovers, + } + return beacon_response + +######################################## +# Count Response +######################################## + +def build_beacon_count_response(data, + num_total_results, + qparams: RequestParams, + func_response_type, + entity_schema: DefaultSchemas): + """" + Transform data into the Beacon response format. + """ + + beacon_response = { + 'meta': build_meta(qparams, entity_schema, Granularity.COUNT), + 'responseSummary': build_response_summary(num_total_results > 0, num_total_results), + # TODO: 'extendedInfo': build_extended_info(), + 'beaconHandovers': conf.beacon_handovers, + } + return beacon_response + +######################################## +# Boolean Response +######################################## + +def build_beacon_boolean_response(data, + num_total_results, + qparams: RequestParams, + func_response_type, + entity_schema: DefaultSchemas): + """" + Transform data into the Beacon response format. + """ + + beacon_response = { + 'meta': build_meta(qparams, entity_schema, Granularity.BOOLEAN), + 'responseSummary': build_response_summary(num_total_results > 0, None), + # TODO: 'extendedInfo': build_extended_info(), + 'beaconHandovers': conf.beacon_handovers, + } + return beacon_response + +######################################## +# Collection Response +######################################## + +def build_beacon_collection_response(data, num_total_results, qparams: RequestParams, func_response_type, entity_schema: DefaultSchemas): + beacon_response = { + 'meta': build_meta(qparams, entity_schema, Granularity.RECORD), + 'responseSummary': build_response_summary(num_total_results > 0, num_total_results), + # TODO: 'info': build_extended_info(), + 'beaconHandovers': conf.beacon_handovers, + 'response': { + 'collections': func_response_type(data, qparams) + } + } + return beacon_response + +######################################## +# Info Response +######################################## + +def build_beacon_info_response(data, qparams, func_response_type, authorized_datasets=None): + if authorized_datasets is None: + authorized_datasets = [] + + beacon_response = { + 'meta': build_meta(qparams, None, Granularity.RECORD), + 'response': { + 'id': conf.beacon_id, + 'name': conf.beacon_name, + 'apiVersion': conf.api_version, + 'environment': conf.environment, + 'organization': { + 'id': conf.org_id, + 'name': conf.org_name, + 'description': conf.org_description, + 'address': conf.org_adress, + 'welcomeUrl': conf.org_welcome_url, + 'contactUrl': conf.org_contact_url, + 'logoUrl': conf.org_logo_url, + }, + 'description': conf.description, + 'version': conf.version, + 'welcomeUrl': conf.welcome_url, + 'alternativeUrl': conf.alternative_url, + 'createDateTime': conf.create_datetime, + 'updateDateTime': conf.update_datetime, + 'datasets': func_response_type(data, qparams, authorized_datasets), + } + } + + return beacon_response + +######################################## +# Service Info Response +######################################## + +def build_beacon_service_info_response(): + beacon_response = { + 'id': conf.beacon_id, + 'name': conf.beacon_name, + 'type': { + 'group': conf.ga4gh_service_type_group, + 'artifact': conf.ga4gh_service_type_artifact, + 'version': conf.ga4gh_service_type_version + }, + 'description': conf.description, + 'organization': { + 'name': conf.org_name, + 'url': conf.org_welcome_url + }, + 'contactUrl': conf.org_contact_url, + 'documentationUrl': conf.documentation_url, + 'createdAt': conf.create_datetime, + 'updatedAt': conf.update_datetime, + 'environment': conf.environment, + 'version': conf.version, + } + + return beacon_response + +######################################## +# Filtering terms Response +######################################## + +def build_filtering_terms_response(filtering_terms, resources, qparams: RequestParams): + return { + "meta": build_meta(qparams, None, Granularity.RECORD), + "response": { + "resources": resources, + "filteringTerms": filtering_terms + } + } diff --git a/beacon/response/filtering_terms.py b/beacon/response/filtering_terms.py new file mode 100644 index 0000000..46dd9ca --- /dev/null +++ b/beacon/response/filtering_terms.py @@ -0,0 +1,30 @@ +""" +Filtering terms Endpoint. + +Querying the filtering terms endpoint reveals information about existing ontology filters in this beacon. +These are stored in the DB inside the table named 'ontology_terms'. + +""" + +from beacon import conf +from beacon.db.filtering_terms import get_filtering_terms +from beacon.db.schemas import DefaultSchemas +from beacon.request import RequestParams +from beacon.utils.stream import json_stream + + +async def handler(request, qparams: RequestParams, entity_schema: DefaultSchemas): + _, _, docs = get_filtering_terms(entry_id=None, qparams=qparams) + ontology_terms = [ + { + 'id': record['ontology'] + ':' + record['term'], + 'label': record['label'] + } + async for record in docs + ] + response = { + 'meta': conf.beacon_id, + 'apiVersion': conf.api_version, + 'filteringTerms': ontology_terms, + } + return await json_stream(request, response) diff --git a/beacon/response/framework.py b/beacon/response/framework.py new file mode 100644 index 0000000..82a054f --- /dev/null +++ b/beacon/response/framework.py @@ -0,0 +1,356 @@ +""" +Beacon Framework Configuration Endpoints. +""" + +# import logging + +from beacon import conf + +# LOG = logging.getLogger(__name__) +from beacon.db.schemas import DefaultSchemas + +from beacon.utils.stream import json_stream + + +def get_entry_types(): + return { + "analysis": { + "id": "analysis", + "name": "Bioinformatics analysis", + "ontologyTermForThisType": { + "id": "edam:operation_2945", + "label": "Analysis" + }, + "partOfSpecification": "Beacon v2.0.0", + "description": "Apply analytical methods to existing data of a specific type.", + "defaultSchema": { + "id": DefaultSchemas.ANALYSES.value['schema'], + "name": "Default schema for a bioinformatics analysis", + "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/analyses/defaultSchema.json", + "schemaVersion": "v2.0.0" + }, + "additionallySupportedSchemas": [] + }, + "biosample": { + "id": "biosample", + "name": "Biological Sample", + "ontologyTermForThisType": { + "id": "NCIT:C70699", + "label": "Biospecimen" + }, + "partOfSpecification": "Beacon v2.0.0", + "description": "Any material sample taken from a biological entity for testing, diagnostic, propagation, treatment or research purposes, including a sample obtained from a living organism or taken from the biological object after halting of all its life functions. Biospecimen can contain one or more components including but not limited to cellular molecules, cells, tissues, organs, body fluids, embryos, and body excretory products. [ NCI ]", + "defaultSchema": { + "id": DefaultSchemas.BIOSAMPLES.value['schema'], + "name": "Default schema for a biological sample", + "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/biosamples/defaultSchema.json", + "schemaVersion": "v2.0.0" + }, + "additionallySupportedSchemas": [] + }, + "cohort": { + "id": "cohort", + "name": "Cohort", + "ontologyTermForThisType": { + "id": "NCIT:C61512", + "label": "Cohort" + }, + "partOfSpecification": "Beacon v2.0.0", + "description": "A group of individuals, identified by a common characteristic. [ NCI ]", + "defaultSchema": { + "id": DefaultSchemas.COHORTS.value['schema'], + "name": "Default schema for cohorts", + "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/cohorts/defaultSchema.json", + "schemaVersion": "v2.0.0" + }, + "aCollectionOf": [{"id": "individual", "name": "Individuals"}], + "additionalSupportedSchemas": [] + }, + "dataset": { + "id": "dataset", + "name": "Dataset", + "ontologyTermForThisType": { + "id": "NCIT:C47824", + "label": "Data set" + }, + "partOfSpecification": "Beacon v2.0.0", + "description": "A Dataset is a collection of records, like rows in a database or cards in a cardholder.", + "defaultSchema": { + "id": DefaultSchemas.DATASETS.value['schema'], + "name": "Default schema for datasets", + "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/datasets/defaultSchema.json", + "schemaVersion": "v2.0.0" + }, + "aCollectionOf": [{"id": "genomicVariation", "name": "Genomic Variants"}], + "additionalSupportedSchemas": [] + }, + "genomicVariation": { + "id": "genomicVariation", + "name": "Genomic Variants", + "ontologyTermForThisType": { + "id": "SO:0000735", + "label": "sequence_location" + }, + "partOfSpecification": "Beacon v2.0.0", + "description": "The location of a sequence.", + "defaultSchema": { + "id": DefaultSchemas.GENOMICVARIATIONS.value['schema'], + "name": "Default schema for a genomic variation", + "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/genomicVariations/defaultSchema.json", + "schemaVersion": "v2.0.0" + }, + "additionallySupportedSchemas": [] + }, + "individual": { + "id": "individual", + "name": "Individual", + "ontologyTermForThisType": { + "id": "NCIT:C25190", + "label": "Person" + }, + "partOfSpecification": "Beacon v2.0.0", + "description": "A human being. It could be a Patient, a Tissue Donor, a Participant, a Human Study Subject, etc.", + "defaultSchema": { + "id": DefaultSchemas.INDIVIDUALS.value['schema'], + "name": "Default schema for an individual", + "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/individuals/defaultSchema.json", + "schemaVersion": "v2.0.0" + }, + "additionallySupportedSchemas": [] + }, + "run": { + "id": "run", + "name": "Sequencing run", + "ontologyTermForThisType": { + "id": "NCIT:C148088", + "label": "Sequencing run" + }, + "partOfSpecification": "Beacon v2.0.0", + "description": "The valid and completed operation of a high-throughput sequencing instrument for a single sequencing process. [ NCI ]", + "defaultSchema": { + "id": DefaultSchemas.RUNS.value['schema'], + "name": "Default schema for a sequencing run", + "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/runs/defaultSchema.json", + "schemaVersion": "v2.0.0" + }, + "additionallySupportedSchemas": [] + }, + + } + + +async def configuration(request): + meta = { + '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/responses/sections/beaconInformationalResponseMeta.json', + 'beaconId': conf.beacon_id, + 'apiVersion': conf.api_version, + 'returnedSchemas': [] + } + + response = { + '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/configuration/beaconConfigurationSchema.json', + 'maturityAttributes': { + 'productionStatus': 'DEV' + }, + 'securityAttributes': { + 'defaultGranularity': 'record', + 'securityLevels': ['PUBLIC', 'REGISTERED', 'CONTROLLED'] + }, + 'entryTypes': get_entry_types() + } + + configuration_json = { + '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/responses/beaconConfigurationResponse.json', + 'meta': meta, + 'response': response + } + + return await json_stream(request, configuration_json) + + +async def entry_types(request): + meta = { + 'beaconId': conf.beacon_id, + 'apiVersion': conf.api_version, + 'returnedSchemas': [] + } + + response = { + "entryTypes": get_entry_types() + } + + entry_types_json = { + 'meta': meta, + 'response': response + } + + return await json_stream(request, entry_types_json) + + +async def beacon_map(request): + meta = { + '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/responses/sections/beaconInformationalResponseMeta.json', + 'beaconId': conf.beacon_id, + 'apiVersion': conf.api_version, + 'returnedSchemas': [] + } + + response = { + '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/configuration/beaconMapSchema.json', + "endpointSets": { + "analysis": { + "entryType": "analysis", + "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/analyses/endpoints.json", + "rootUrl": conf.uri + "/api/analyses", + "singleEntryUrl": conf.uri + "/api/analyses/{id}", + "endpoints": { + "genomicVariation": { + "returnedEntryType": "genomicVariation", + "url": conf.uri + "/api/analyses/{id}/g_variants" + }, + } + }, + "biosample": { + "entryType": "biosample", + "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/biosamples/endpoints.json", + "rootUrl": conf.uri + "/api/biosamples", + "singleEntryUrl": conf.uri + "/api/biosamples/{id}", + "endpoints": { + "analysis": { + "returnedEntryType": "analysis", + "url": conf.uri + "/api/biosamples/{id}/analyses" + }, + "genomicVariation": { + "returnedEntryType": "genomicVariation", + "url": conf.uri + "/api/biosamples/{id}/g_variants" + }, + "run": { + "returnedEntryType": "run", + "url": conf.uri + "/api/biosamples/{id}/runs" + }, + } + }, + "cohort": { + "entryType": "cohort", + "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/cohorts/endpoints.json", + "rootUrl": conf.uri + "/api/cohorts", + "singleEntryUrl": conf.uri + "/api/cohorts/{id}", + "filteringTermsUrl": conf.uri + "/api/cohorts/{id}/filtering_terms", + "endpoints": { + "analysis": { + "returnedEntryType": "analysis", + "url": conf.uri + "/api/cohorts/{id}/analyses" + }, + "individual": { + "returnedEntryType": "individual", + "url": conf.uri + "/api/cohorts/{id}/individuals" + }, + "run": { + "returnedEntryType": "run", + "url": conf.uri + "/api/cohorts/{id}/runs" + } + } + }, + "dataset": { + "entryType": "dataset", + "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/datasets/endpoints.json", + "rootUrl": conf.uri + "/api/datasets", + "singleEntryUrl": conf.uri + "/api/datasets/{id}", + "filteringTermsUrl": conf.uri + "/api/datasets/{id}/filtering_terms", + "endpoints": { + "analysis": { + "returnedEntryType": "analysis", + "url": conf.uri + "/api/datasets/{id}/analyses" + }, + "biosample": { + "returnedEntryType": "biosample", + "url": conf.uri + "/api/datasets/{id}/biosamples" + }, + "genomicVariation": { + "returnedEntryType": "genomicVariation", + "url": conf.uri + "/api/datasets/{id}/g_variants" + }, + "individual": { + "returnedEntryType": "individual", + "url": conf.uri + "/api/datasets/{id}/individuals" + }, + "run": { + "returnedEntryType": "run", + "url": conf.uri + "/api/datasets/{id}/runs" + } + } + }, + "genomicVariation": { + "entryType": "genomicVariation", + "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/genomicVariations/endpoints.json", + "rootUrl": conf.uri + "/api/g_variants", + "singleEntryUrl": conf.uri + "/api/g_variants/{id}", + "endpoints": { + "analysis": { + "returnedEntryType": "analysis", + "url": conf.uri + "/api/g_variants/{id}/analyses" + }, + "biosample": { + "returnedEntryType": "biosample", + "url": conf.uri + "/api/g_variants/{id}/biosamples" + }, + "individual": { + "returnedEntryType": "individual", + "url": conf.uri + "/api/g_variants/{id}/individuals" + }, + "run": { + "returnedEntryType": "run", + "url": conf.uri + "/api/g_variants/{id}/runs" + } + } + }, + "individual": { + "entryType": "individual", + "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/individuals/endpoints.json", + "rootUrl": conf.uri + "/api/individuals", + "singleEntryUrl": conf.uri + "/api/individuals/{id}", + "filteringTermsUrl": conf.uri + "/api/individuals/{id}/filtering_terms", + "endpoints": { + "analysis": { + "returnedEntryType": "analysis", + "url": conf.uri + "/api/individuals/{id}/analyses" + }, + "biosample": { + "returnedEntryType": "biosample", + "url": conf.uri + "/api/individuals/{id}/biosamples" + }, + "genomicVariation": { + "returnedEntryType": "genomicVariation", + "url": conf.uri + "/api/individuals/{id}/g_variants" + }, + "run": { + "returnedEntryType": "run", + "url": conf.uri + "/api/individuals/{id}/runs" + } + } + }, + "run": { + "entryType": "run", + "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/runs/endpoints.json", + "rootUrl": conf.uri + "/api/runs", + "singleEntryUrl": conf.uri + "/api/runs/{id}", + "endpoints": { + "analysis": { + "returnedEntryType": "analysis", + "url": conf.uri + "/api/runs/{id}/analyses" + }, + "genomicVariation": { + "returnedEntryType": "genomicVariation", + "url": conf.uri + "/api/runs/{id}/g_variants" + }, + } + }, + } + } + + beacon_map_json = { + 'meta': meta, + 'response': response + } + + return await json_stream(request, beacon_map_json) diff --git a/beacon/response/info.py b/beacon/response/info.py new file mode 100644 index 0000000..4cfcb2b --- /dev/null +++ b/beacon/response/info.py @@ -0,0 +1,50 @@ +""" +Info Endpoint. + +Querying the info endpoint reveals information about this beacon and its existing datasets +and their associated metadata. + +* ``/`` Beacon-v1 +* ``/info`` Beacon-v1 +* ``/info?model=GA4GH-ServiceInfo-v0.1`` GA4GH +* ``/service-info`` GA4GH + +""" + +import logging +import json +from aiohttp.web_request import Request +from beacon.db.datasets import get_datasets +from beacon.request import RequestParams +from beacon.response.build_response import build_beacon_info_response +from beacon.utils.auth import resolve_token +from beacon.utils.stream import json_stream +from bson import json_util + +LOG = logging.getLogger(__name__) + +async def handler(request: Request): + LOG.info('Running a GET info request') + + # Fetch datasets info + json_body = await request.json() if request.method == "POST" and request.has_body and request.can_read_body else {} + qparams = RequestParams(**json_body).from_request(request) + _, _, datasets = get_datasets(None, qparams) + beacon_datasets = [ r for r in datasets ] + + all_datasets = [ r['_id'] for r in beacon_datasets] + + access_token = request.headers.get('Authorization') + if access_token: + access_token = access_token[7:] # cut out 7 characters: len('Bearer ') + + authorized_datasets, authenticated = await resolve_token(access_token, all_datasets) + if authenticated: + LOG.debug('all datasets: %s', all_datasets) + LOG.info('resolved datasets: %s', authorized_datasets) + + response_converted = build_beacon_info_response(beacon_datasets, + qparams, + lambda x,y,z: x, + authorized_datasets if authenticated else []) + return await json_stream(request, response_converted) diff --git a/beacon/response/middlewares.py b/beacon/response/middlewares.py new file mode 100644 index 0000000..ec6ace4 --- /dev/null +++ b/beacon/response/middlewares.py @@ -0,0 +1,63 @@ +import logging +import sys +import traceback + +# import aiohttp_csrf +import aiohttp_jinja2 +from aiohttp import web + +LOG = logging.getLogger(__name__) + +CSRF_FIELD_NAME = 'csrf_token' +SESSION_STORAGE = 'beacon_session' + +error_templates = { + 400: '400.html', + 404: '404.html', + 500: '500.html', +} + +default_errors = { + 400: 'Bad request', + 404: 'This URL does not exist', + 500: 'Server Error', +} + + +def handle_error(request, exc): + # exc is a web.HTTPException + + template = error_templates.get(exc.status) + if not template: + raise exc # We don't handle it + + context = { + 'cookies': request.cookies, + 'exception': exc + } + return aiohttp_jinja2.render_template(template, + request, + context) + + +@web.middleware +async def error_middleware(request, handler): + try: + return await handler(request) + except web.HTTPError as ex: # Just the 400's and 500's + + # if the request comes from /api/*, we output the json version + LOG.error('Error on page %s: %s', request.path, ex) + + if hasattr(ex, 'api_error'): + raise + + # Else, we are a regular HTML response + if ex.status == 401: # Unauthorized + raise web.HTTPFound('/login') + + if ex.status >= 500: + LOG.error('Error caught: %s', ex) + traceback.print_stack(file=sys.stderr) + + return handle_error(request, ex) diff --git a/beacon/response/service_info.py b/beacon/response/service_info.py new file mode 100644 index 0000000..4dadcf8 --- /dev/null +++ b/beacon/response/service_info.py @@ -0,0 +1,11 @@ +import logging +from aiohttp.web_request import Request +from beacon.response.build_response import build_beacon_service_info_response +from beacon.utils.stream import json_stream + +LOG = logging.getLogger(__name__) + +async def handler(request: Request): + LOG.info('Running a GET service info request') + response_converted = build_beacon_service_info_response() + return await json_stream(request, response_converted) diff --git a/beacon/utils/auth.py b/beacon/utils/auth.py new file mode 100644 index 0000000..208ed3e --- /dev/null +++ b/beacon/utils/auth.py @@ -0,0 +1,36 @@ +import logging + +from aiohttp import ClientSession, web + +from beacon.db.datasets import filter_public_datasets +from ..conf import permissions_url + +LOG = logging.getLogger(__name__) + + +async def resolve_token(token, requested_datasets_ids): + # If the user is not authenticated (ie no token) + # we pass (requested_datasets, False) to the database function: it will filter out the datasets list, with the public ones + if token is None: + public_datasets = [ d["name"] for d in filter_public_datasets(requested_datasets_ids) ] + return public_datasets, False + + # Otherwise, we have a token and resolve the datasets with the permissions server + # The permissions server will: + # * filter out the datasets list, with the ones the user has access to + # * return _all_ the datasets the user has access to, in case the datasets list is empty + async with ClientSession() as session: + async with session.post( + permissions_url, + headers={'Authorization': 'Bearer ' + token, + 'Accept': 'application/json'}, + json={'datasets': list(requested_datasets_ids)}, # will set the Content-Type to application/json + ) as resp: + if resp.status > 200: + LOG.error('Permissions server error %d', resp.status) + error = await resp.text() + LOG.error('Error: %s', error) + raise web.HTTPUnauthorized(reason=error) + + authorized_datasets = await resp.json() + return authorized_datasets, True diff --git a/beacon/utils/json.py b/beacon/utils/json.py new file mode 100644 index 0000000..23b897d --- /dev/null +++ b/beacon/utils/json.py @@ -0,0 +1,232 @@ +import inspect +import logging +from dataclasses import is_dataclass +from decimal import Decimal +from json.encoder import py_encode_basestring_ascii +from bson.objectid import ObjectId + +from asyncpg import Record + +from json import loads as parse_json + +from pymongo.cursor import Cursor + +LOG = logging.getLogger(__name__) + +_INFINITY = float('inf') + + +def is_cursor(o): + return isinstance(o, Cursor) + + +def is_list(o): + return (isinstance(o, (list, set, tuple)) or + inspect.isgenerator(o) or + inspect.isgeneratorfunction(o)) + + +def is_dict(o): + return isinstance(o, (dict, Record)) + + +def is_asyncgen(o): + return (inspect.isasyncgen(o) or + inspect.isasyncgenfunction(o)) + + +class jsonb(str): + __parsed = None + + @property + def parsed(self): + """Return a JSON deserializing of itself.""" + if self.__parsed is None: + self.__parsed = parse_json(self) + return self.__parsed + + +def json_encoder(v): + raise NotImplementedError('We should not use json encoding') + + +def json_decoder(v): + return jsonb(v) # just "tag" it + + +# we make it compact +_ITEM_SEPARATOR = ',' +_KEY_SEPARATOR = ':' + + +def _atom(o): + if isinstance(o, jsonb): + return o + elif isinstance(o, str): + return py_encode_basestring_ascii(o) + elif o is None: + return 'null' + elif o is True: + return 'true' + elif o is False: + return 'false' + elif isinstance(o, int): + return int.__repr__(o) + elif isinstance(o, float): + if o != o: + return 'NaN' + elif o == _INFINITY: + return 'Infinity' + elif o == -_INFINITY: + return '-Infinity' + else: + return float.__repr__(o) + elif isinstance(o, Decimal): + return str(o) # keeps the decimals, float would truncate them + elif isinstance(o, ObjectId): + return py_encode_basestring_ascii(str(o)) + # not a common type + return None + + +async def _compound(o, circulars): + if is_dict(o): + async for i in _iterencode_dict(o, circulars): + yield i + elif is_list(o): + async for i in _iterencode_list(o, circulars): + yield i + elif is_asyncgen(o): + async for i in _iterencode_async_gen(o, circulars): + yield i + elif is_dataclass(o): + async for i in _iterencode_dataclass(o, circulars): + yield i + elif is_cursor(o): + async for i in _iterencode_cursor(o, circulars): + yield i + else: + raise TypeError(f'Unsupported type: {o.__class__.__name__}') + + +async def _iterencode_list(items, circulars): + yield '[' + marker = id(items) + if marker in circulars: + raise ValueError("Circular reference detected") + circulars[marker] = items + first = True + for item in items: + if first: + first = False + else: + yield _ITEM_SEPARATOR + async for i in _iterencode(item, circulars): + yield i + yield ']' + del circulars[marker] + + +async def _iterencode_dict(d, circulars): + yield '{' + marker = id(d) + if marker in circulars: + raise ValueError("Circular reference detected") + circulars[marker] = d + first = True + for key, value in d.items(): + atom_key = _atom(key) + if atom_key is None: + raise TypeError(f'keys must be str, int, float or bool, not {key.__class__.__name__}') + if first: + first = False + else: + yield _ITEM_SEPARATOR + yield atom_key + yield _KEY_SEPARATOR + async for item in _iterencode(value, circulars): + yield item + yield '}' + del circulars[marker] + + +async def _iterencode_async_gen(g, circulars): + yield '[' + marker = id(g) + if marker in circulars: + raise ValueError("Circular reference detected") + circulars[marker] = g + first = True + async for item in g: + if first: + first = False + else: + yield _ITEM_SEPARATOR + async for i in _iterencode(item, circulars): + yield i + yield ']' + del circulars[marker] + + +async def _iterencode_cursor(g, circulars): + yield '[' + marker = id(g) + if marker in circulars: + raise ValueError("Circular reference detected") + circulars[marker] = g + first = True + + try: + item = g.next() + except: + item = None + while item: + if first: + first = False + else: + yield _ITEM_SEPARATOR + async for i in _iterencode(item, circulars): + yield i + try: + item = g.next() + except: + item = None + yield ']' + del circulars[marker] + + +async def _iterencode_dataclass(d, circulars): + yield '{' + marker = id(d) + if marker in circulars: + raise ValueError("Circular reference detected") + circulars[marker] = d + first = True + for key in d.__dataclass_fields__: + value = getattr(d, key) + atom_key = _atom(key) + if atom_key is None: + raise TypeError(f'keys must be str, int, float or bool, not {key.__class__.__name__}') + if first: + first = False + else: + yield _ITEM_SEPARATOR + yield atom_key + yield _KEY_SEPARATOR + async for item in _iterencode(value, circulars): + yield item + yield '}' + del circulars[marker] + +async def _iterencode(o, circulars): + atom = _atom(o) + if atom is not None: + yield atom + else: # not an atom type + async for item in _compound(o, circulars): + yield item + + +async def json_iterencode(o): + async for i in _iterencode(o, {}): + yield i diff --git a/beacon/utils/stream.py b/beacon/utils/stream.py new file mode 100644 index 0000000..fd671d8 --- /dev/null +++ b/beacon/utils/stream.py @@ -0,0 +1,53 @@ +import logging + +from aiohttp.http import SERVER_SOFTWARE +from aiohttp.web import StreamResponse + +from beacon import conf +from beacon.utils.json import json_iterencode + +LOG = logging.getLogger(__name__) + +_BUF_SIZE = getattr(conf, 'json_buffer_size', 1000) + + +# async def json_stream(request, data): +# from aiohttp.web import json_response as aiohttp_json_response +# return aiohttp_json_response(data) + +async def json_stream(request, data, partial=False): + # No need here to check if partial is indeed a boolean + + # Running this first, in case it raises an error + # so we don't start the StreamResponse yet + content_gen = [chunk async for chunk in json_iterencode(data)] + + LOG.debug('HTTP response stream') + headers = { + 'Content-Type': 'application/json;charset=utf-8', + 'Server': f'{conf.beacon_name} {conf.version} (based on {SERVER_SOFTWARE})' + } + LOG.debug('Partial content: %s', partial) + response = StreamResponse(headers=headers, status=206 if partial else 200) + + # response.enable_chunked_encoding() + await response.prepare(request) + + # LOG.debug('HTTP response stream for rows') + buf = [] + for chunk in content_gen: + if len(buf) < _BUF_SIZE: + buf.append(chunk) + continue + # flush the buffer + buf.append(chunk) + chunk = ''.join(buf) + buf = [] + await response.write(chunk.encode()) # utf-8 + if buf: # flush the remainder in the buffer + chunk = ''.join(buf) + await response.write(chunk.encode()) # utf-8 + + # LOG.debug('HTTP response stream closing') + await response.write_eof() + return response diff --git a/deploy/Makefile b/deploy/Makefile new file mode 100644 index 0000000..d238da8 --- /dev/null +++ b/deploy/Makefile @@ -0,0 +1,42 @@ +all: down up load reindex rebuild + +load: + mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/analyses*.json --collection analyses + mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/biosamples*.json --collection biosamples + mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/cohorts*.json --collection cohorts + mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/datasets*.json --collection datasets + mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/individuals*.json --collection individuals + mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/runs*.json --collection runs + mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/genomicVariations*.json --collection genomicVariations + +up-db: + docker-compose up -d db && \ + docker-compose up -d mongo-express + +up: up-db + docker-compose up -d beacon + +rebuild: + docker-compose rm -sf beacon && \ + docker-compose build beacon && \ + docker-compose up -d beacon && \ + docker-compose logs -f beacon + +logs: + docker-compose logs -f beacon + +relaunch: + docker-compose up beacon + +down: + docker-compose down + +verify: + beacon-verifier http://localhost:5050/api/ + +reindex: + python3 reindex.py + +# only works with justfile (https://github.com/casey/just#recipe-parameters) +test COLLECTION REQUEST: + http POST http://localhost:5050/api/{{COLLECTION}}/ --json < {{REQUEST}} diff --git a/deploy/README.md b/deploy/README.md new file mode 100644 index 0000000..06a7198 --- /dev/null +++ b/deploy/README.md @@ -0,0 +1,190 @@ +# Deployment instructions + +[![](https://mermaid.ink/img/pako:eNp1U01vgzAM_Ssop01qdtiRw6RRWm1SD91WJk2lhxRMGw0SFEg_VvW_z4EE2pX15Lz3bD_b9EQSmQLxyUaxcuvN3mPh4S-qQC0z5meMagyb98pSr5bYc5HKPS3YgRf8B5Cwiue5k2DWDrNfFou5QS0fBneWT1nN1qwCL7TB6j4WVoTI8ktq5RmRzRzLotR1Zy2F6ruWZQdb1eSQQG4lGc-BggFa2Eo-x1NXQzDzsngwnV4kmufKGar0ut3RmwZ1bDG3Ko_SJ5y_B52jhsDJe6aPuoJrYIkU9PHh0JN2j01-GFzjYXBbFkTqjA7VrhXjgosN1fy6VvR_jei2u-0cDc5j9WYfPehmcAtpmYtOnVNzcG8mWYo2Lzoa1BRorjc0YJbRHcs5fiVSXc_WpDTJeMfBTeLhHf9nDTYgI1KAKhhP8S9yMnBM6i0UEBMfQwEaN5vHJBZnlOoSXcAk5WiF-LXSMCJM1_LjKBL3bjUhZ2i_aMHzL0zOAvw)](https://mermaid.live/edit#pako:eNp1U01vgzAM_Ssop01qdtiRw6RRWm1SD91WJk2lhxRMGw0SFEg_VvW_z4EE2pX15Lz3bD_b9EQSmQLxyUaxcuvN3mPh4S-qQC0z5meMagyb98pSr5bYc5HKPS3YgRf8B5Cwiue5k2DWDrNfFou5QS0fBneWT1nN1qwCL7TB6j4WVoTI8ktq5RmRzRzLotR1Zy2F6ruWZQdb1eSQQG4lGc-BggFa2Eo-x1NXQzDzsngwnV4kmufKGar0ut3RmwZ1bDG3Ko_SJ5y_B52jhsDJe6aPuoJrYIkU9PHh0JN2j01-GFzjYXBbFkTqjA7VrhXjgosN1fy6VvR_jei2u-0cDc5j9WYfPehmcAtpmYtOnVNzcG8mWYo2Lzoa1BRorjc0YJbRHcs5fiVSXc_WpDTJeMfBTeLhHf9nDTYgI1KAKhhP8S9yMnBM6i0UEBMfQwEaN5vHJBZnlOoSXcAk5WiF-LXSMCJM1_LjKBL3bjUhZ2i_aMHzL0zOAvw) + +## Prerequisites + +You should have installed: + +- [Docker](https://docs.docker.com/engine/install/) +- [Docker Compose](https://docs.docker.com/compose/install/) +- [MongoDB Database Tools](https://www.mongodb.com/docs/database-tools/installation/installation/) (specifically `mongoimport` to add the dummy data to the database) +- [Python 3](https://www.python.org/downloads/) + +## Installation + +All of the commands should be executed from the deploy directory. + +```bash +cd deploy +``` + +### Light up the database + +#### Up the DB + +```bash +docker-compose up -d db +docker-compose up -d mongo-express +``` + +With `mongo-express` we can see the contents of the database at [http://localhost:8081](http://localhost:8081). + +#### Load the data + +To load the database we execute the following commands: + +```bash +mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/analyses*.json --collection analyses +mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/biosamples*.json --collection biosamples +mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/cohorts*.json --collection cohorts +mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/datasets*.json --collection datasets +mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/individuals*.json --collection individuals +mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/runs*.json --collection runs +mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/genomicVariations*.json --collection genomicVariations +``` + +This loads the JSON files inside of the `data` folder into the MongoDB database. + +> You can also use `make load` as a convenience alias. + +#### Create the indexes + +You can create the necessary indexes running the following Python script: + +```bash +# Install the dependencies +pip3 install pymongo + +python3 reindex.py +``` + +#### Automatically fetch the ontologies + +> This step might require a bit of tinkering since some ontologies used in the dummy data will fail to loaded. We recommend skipping this step unless you know what you are doing. + +You can automatically fetch the ontologies that the database is using with the following script: + +```bash +# Install the dependencies +pip3 install pymongo tqdm + +python3 fetch_ontologies.py +``` + +#### Extract the filtering terms + +**If you have the ontologies loaded**, you can automatically extract the filtering terms from the data in the database using the following utility script: + +```bash +# Install the dependencies +pip3 install pymongo tqdm owlready2 progressbar + +python3 extract_filtering_terms.py +``` + +### Light up the beacon + +#### Up the beacon + +Once the database is setup, you can up the beacon with the following command: + +```bash +docker-compose up -d beacon +``` + +#### Check the logs + +Check the logs until the beacon is ready to be queried: + +```bash +docker-compose logs -f beacon +``` + +## Usage + +You can query the beacon using GET or POST. Below, you can find some examples of usage: + +> For simplicity (and readability), we will be using [HTTPie](https://github.com/httpie/httpie). + +### Using GET + +Querying this endpoit it should return the 13 variants of the beacon (paginated): + +```bash +http GET http://localhost:5050/api/g_variants/ +``` + +You can also add [request parameters](https://github.com/ga4gh-beacon/beacon-v2-Models/blob/main/BEACON-V2-Model/genomicVariations/requestParameters.json) to the query, like so: + +```bash +http GET http://localhost:5050/api/g_variants/?start=9411499,9411644&end=9411609 +``` + +This should return 3 genomic variants. + +### Using POST + +You can use POST to make the previous query. With a `request.json` file like this one: + +```json +{ + "meta": { + "apiVersion": "2.0" + }, + "query": { + "requestParameters": { + "start": [ 9411499, 9411644 ], + "end": [ 9411609 ] + }, + "filters": [], + "includeResultsetResponses": "HIT", + "pagination": { + "skip": 0, + "limit": 10 + }, + "testMode": false, + "requestedGranularity": "count" + } +} +``` + +You can execute: + +```bash +http POST http://localhost:5050/api/g_variants/ --json < request.json +``` + +But you can also use complex filters: + +```json +{ + "meta": { + "apiVersion": "2.0" + }, + "query": { + "filters": [ + { + "id": "UBERON:0001256", + "scope": "biosamples", + "includeDescendantTerms": false + } + ], + "includeResultsetResponses": "HIT", + "pagination": { + "skip": 0, + "limit": 10 + }, + "testMode": false, + "requestedGranularity": "count" + } +} +``` + +You can execute: + +```bash +http POST http://localhost:5050/api/biosamples/ --json < request.json +``` + +And it will use the ontology filter to filter the results. diff --git a/deploy/beacon-realm.json b/deploy/beacon-realm.json new file mode 100644 index 0000000..3f69ea9 --- /dev/null +++ b/deploy/beacon-realm.json @@ -0,0 +1,1938 @@ +{ + "id" : "Beacon", + "realm" : "Beacon", + "displayName" : "Beacon IdP", + "notBefore" : 0, + "revokeRefreshToken" : false, + "refreshTokenMaxReuse" : 0, + "accessTokenLifespan" : 300, + "accessTokenLifespanForImplicitFlow" : 900, + "ssoSessionIdleTimeout" : 1800, + "ssoSessionMaxLifespan" : 36000, + "ssoSessionIdleTimeoutRememberMe" : 0, + "ssoSessionMaxLifespanRememberMe" : 0, + "offlineSessionIdleTimeout" : 2592000, + "offlineSessionMaxLifespanEnabled" : false, + "offlineSessionMaxLifespan" : 5184000, + "clientSessionIdleTimeout" : 0, + "clientSessionMaxLifespan" : 0, + "clientOfflineSessionIdleTimeout" : 0, + "clientOfflineSessionMaxLifespan" : 0, + "accessCodeLifespan" : 60, + "accessCodeLifespanUserAction" : 300, + "accessCodeLifespanLogin" : 1800, + "actionTokenGeneratedByAdminLifespan" : 43200, + "actionTokenGeneratedByUserLifespan" : 300, + "enabled" : true, + "sslRequired" : "external", + "registrationAllowed" : false, + "registrationEmailAsUsername" : false, + "rememberMe" : false, + "verifyEmail" : false, + "loginWithEmailAllowed" : true, + "duplicateEmailsAllowed" : false, + "resetPasswordAllowed" : false, + "editUsernameAllowed" : false, + "bruteForceProtected" : false, + "permanentLockout" : false, + "maxFailureWaitSeconds" : 900, + "minimumQuickLoginWaitSeconds" : 60, + "waitIncrementSeconds" : 60, + "quickLoginCheckMilliSeconds" : 1000, + "maxDeltaTimeSeconds" : 43200, + "failureFactor" : 30, + "roles" : { + "realm" : [ { + "id" : "2df9f16e-1525-48e6-9b99-0025becfc001", + "name" : "offline_access", + "description" : "${role_offline-access}", + "composite" : false, + "clientRole" : false, + "containerId" : "Beacon", + "attributes" : { } + }, { + "id" : "fac1fd59-414a-4404-9dad-5c8966d14702", + "name" : "uma_authorization", + "description" : "${role_uma_authorization}", + "composite" : false, + "clientRole" : false, + "containerId" : "Beacon", + "attributes" : { } + } ], + "client" : { + "realm-management" : [ { + "id" : "a1f10106-92b5-4f83-8c8e-803302f06003", + "name" : "manage-clients", + "description" : "${role_manage-clients}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "0bd797f8-c5a9-4d7f-bed6-ad4c104b185a", + "name" : "manage-users", + "description" : "${role_manage-users}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "1c3cb9d9-9605-4940-9bbd-5c856c4bfd22", + "name" : "create-client", + "description" : "${role_create-client}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "aac68b89-aeeb-450d-9f73-921fd98d0859", + "name" : "query-realms", + "description" : "${role_query-realms}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "30edc3ef-56de-4261-9901-bd19ba13edfb", + "name" : "impersonation", + "description" : "${role_impersonation}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "138e4838-9032-4dc6-80e9-cee6453830ff", + "name" : "manage-authorization", + "description" : "${role_manage-authorization}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "8bb5fda6-3b4a-4024-8a54-6d3a9094c109", + "name" : "manage-events", + "description" : "${role_manage-events}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "121804b4-c808-4690-bda6-342ea93da228", + "name" : "manage-identity-providers", + "description" : "${role_manage-identity-providers}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "0537f9ce-24dc-4ac5-9bca-ce475c62a8f6", + "name" : "view-identity-providers", + "description" : "${role_view-identity-providers}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "7a611915-c2f7-461a-966a-1197dbc1bf14", + "name" : "view-clients", + "description" : "${role_view-clients}", + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "query-clients" ] + } + }, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "794db335-4616-41e0-ab5b-b72980fcbe85", + "name" : "query-groups", + "description" : "${role_query-groups}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "955ede29-6fd3-4841-9afc-e70f1a2436dd", + "name" : "realm-admin", + "description" : "${role_realm-admin}", + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "manage-clients", "manage-users", "create-client", "query-realms", "impersonation", "manage-authorization", "manage-events", "manage-identity-providers", "view-identity-providers", "view-clients", "query-groups", "view-authorization", "query-users", "view-realm", "view-events", "manage-realm", "view-users", "query-clients" ] + } + }, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "cab184fc-c654-4265-8e50-a32b65ce31e4", + "name" : "view-authorization", + "description" : "${role_view-authorization}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "0e32f5b9-470d-4ceb-890e-fec18cbd4047", + "name" : "query-users", + "description" : "${role_query-users}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "60add9d9-2579-49c1-85fe-02dba7f6eb9a", + "name" : "view-realm", + "description" : "${role_view-realm}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "2644b82e-9c0c-4a43-a866-f3f1114b2ebd", + "name" : "view-events", + "description" : "${role_view-events}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "7340893f-91d2-4236-921f-dd2f6a12e90a", + "name" : "manage-realm", + "description" : "${role_manage-realm}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "de377fd2-965b-4051-85b3-917fc034d0dd", + "name" : "view-users", + "description" : "${role_view-users}", + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "query-groups", "query-users" ] + } + }, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + }, { + "id" : "b5c56d32-993d-4393-ae60-25ac65bba0d1", + "name" : "query-clients", + "description" : "${role_query-clients}", + "composite" : false, + "clientRole" : true, + "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "attributes" : { } + } ], + "beacon" : [ { + "id" : "22e1ab24-7e8f-4ce6-98d0-3313d96f395b", + "name" : "uma_protection", + "composite" : false, + "clientRole" : true, + "containerId" : "8a753a23-230d-4003-b0aa-cdca03c57b8d", + "attributes" : { } + } ], + "permissions" : [ ], + "security-admin-console" : [ ], + "admin-cli" : [ ], + "account-console" : [ ], + "broker" : [ { + "id" : "94cd5ba4-4585-46a1-8e4a-7f289f7f2c8a", + "name" : "read-token", + "description" : "${role_read-token}", + "composite" : false, + "clientRole" : true, + "containerId" : "61216acc-01da-4d8a-bd4d-b88c2b38686a", + "attributes" : { } + } ], + "account" : [ { + "id" : "a1a39879-ca59-4aa6-a4ae-cf7d836227ba", + "name" : "manage-account", + "description" : "${role_manage-account}", + "composite" : true, + "composites" : { + "client" : { + "account" : [ "manage-account-links" ] + } + }, + "clientRole" : true, + "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c", + "attributes" : { } + }, { + "id" : "9283fb4f-aa35-426a-82d1-c36421bbfa94", + "name" : "manage-consent", + "description" : "${role_manage-consent}", + "composite" : true, + "composites" : { + "client" : { + "account" : [ "view-consent" ] + } + }, + "clientRole" : true, + "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c", + "attributes" : { } + }, { + "id" : "539fcec1-7e97-4dee-b4cc-124c03358425", + "name" : "manage-account-links", + "description" : "${role_manage-account-links}", + "composite" : false, + "clientRole" : true, + "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c", + "attributes" : { } + }, { + "id" : "99c69a76-0af6-443d-a60d-1da2bdf352df", + "name" : "view-applications", + "description" : "${role_view-applications}", + "composite" : false, + "clientRole" : true, + "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c", + "attributes" : { } + }, { + "id" : "aadc367b-fde4-4cb7-81b1-0fb37689fbc3", + "name" : "view-consent", + "description" : "${role_view-consent}", + "composite" : false, + "clientRole" : true, + "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c", + "attributes" : { } + }, { + "id" : "89b3f80c-32d0-496c-a021-54b7344c6029", + "name" : "view-profile", + "description" : "${role_view-profile}", + "composite" : false, + "clientRole" : true, + "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c", + "attributes" : { } + } ] + } + }, + "groups" : [ { + "id" : "7c359d85-e9d0-4437-8b6d-90f347686da1", + "name" : "beacon-users", + "path" : "/beacon-users", + "attributes" : { }, + "realmRoles" : [ ], + "clientRoles" : { }, + "subGroups" : [ ] + } ], + "defaultRoles" : [ "offline_access", "uma_authorization" ], + "defaultGroups" : [ "/beacon-users" ], + "requiredCredentials" : [ "password" ], + "otpPolicyType" : "totp", + "otpPolicyAlgorithm" : "HmacSHA1", + "otpPolicyInitialCounter" : 0, + "otpPolicyDigits" : 6, + "otpPolicyLookAheadWindow" : 1, + "otpPolicyPeriod" : 30, + "otpSupportedApplications" : [ "FreeOTP", "Google Authenticator" ], + "webAuthnPolicyRpEntityName" : "keycloak", + "webAuthnPolicySignatureAlgorithms" : [ "ES256" ], + "webAuthnPolicyRpId" : "", + "webAuthnPolicyAttestationConveyancePreference" : "not specified", + "webAuthnPolicyAuthenticatorAttachment" : "not specified", + "webAuthnPolicyRequireResidentKey" : "not specified", + "webAuthnPolicyUserVerificationRequirement" : "not specified", + "webAuthnPolicyCreateTimeout" : 0, + "webAuthnPolicyAvoidSameAuthenticatorRegister" : false, + "webAuthnPolicyAcceptableAaguids" : [ ], + "webAuthnPolicyPasswordlessRpEntityName" : "keycloak", + "webAuthnPolicyPasswordlessSignatureAlgorithms" : [ "ES256" ], + "webAuthnPolicyPasswordlessRpId" : "", + "webAuthnPolicyPasswordlessAttestationConveyancePreference" : "not specified", + "webAuthnPolicyPasswordlessAuthenticatorAttachment" : "not specified", + "webAuthnPolicyPasswordlessRequireResidentKey" : "not specified", + "webAuthnPolicyPasswordlessUserVerificationRequirement" : "not specified", + "webAuthnPolicyPasswordlessCreateTimeout" : 0, + "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister" : false, + "webAuthnPolicyPasswordlessAcceptableAaguids" : [ ], + "users" : [ { + "id" : "47eff1b1-7621-4570-a0bb-01a719fba0a2", + "createdTimestamp" : 1598453205967, + "username" : "jane", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "firstName" : "Jane", + "lastName" : "Smith", + "email" : "jane.smith@beacon.ga4gh", + "credentials" : [ { + "id" : "7e296b71-a7c0-47de-91fb-d33f014f99c8", + "type" : "password", + "createdDate" : 1598453835625, + "secretData" : "{\"value\":\"BIJ/DUkfa56KUsZQFU/C8RLbIv1C8sJ74HJcQv2A+iPSuMl0UHULWtkIeXfHPiOU+od/K0N1ugYxGqlfReHrwg==\",\"salt\":\"lDP6qAYsN+bZCFAn3trSwA==\"}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "offline_access", "uma_authorization" ], + "clientRoles" : { + "account" : [ "manage-account", "view-profile" ] + }, + "notBefore" : 0, + "groups" : [ "/beacon-users" ] + }, { + "id" : "8718f980-47bc-4be6-9390-a01343eed37d", + "createdTimestamp" : 1598453171030, + "username" : "john", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "firstName" : "John", + "lastName" : "Smith", + "email" : "john.smith@beacon.ga4gh", + "credentials" : [ { + "id" : "ac14b184-797f-4f85-bbb7-582f2f3f5727", + "type" : "password", + "createdDate" : 1598453805633, + "secretData" : "{\"value\":\"X3rvS//rfkmMAsUN7z6EhELbz6WvFXG/SNjMm8k4apa+PWiM9HhK1XcwlbKz6kSxT53MEph3LDU88v1BSxm/eg==\",\"salt\":\"5Eu8VQejJtAi9t1jHd5KLA==\"}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "offline_access", "uma_authorization" ], + "clientRoles" : { + "account" : [ "manage-account", "view-profile" ] + }, + "notBefore" : 0, + "groups" : [ "/beacon-users" ] + } ], + "scopeMappings" : [ { + "clientScope" : "offline_access", + "roles" : [ "offline_access" ] + } ], + "clientScopeMappings" : { + "account" : [ { + "client" : "account-console", + "roles" : [ "manage-account" ] + } ] + }, + "clients" : [ { + "id" : "79fd7a63-8c74-44b5-91b2-6758c292930c", + "clientId" : "account", + "name" : "${client_account}", + "rootUrl" : "${authBaseUrl}", + "baseUrl" : "/realms/Beacon/account/", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "**********", + "defaultRoles" : [ "manage-account", "view-profile" ], + "redirectUris" : [ "/realms/Beacon/account/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "3cf6f41f-35f0-42a2-bce8-a054ef16ad9b", + "clientId" : "account-console", + "name" : "${client_account-console}", + "rootUrl" : "${authBaseUrl}", + "baseUrl" : "/realms/Beacon/account/", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "**********", + "redirectUris" : [ "/realms/Beacon/account/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "pkce.code.challenge.method" : "S256" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "a511954d-5d75-492d-bb7a-f22a185eea67", + "name" : "audience resolve", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-audience-resolve-mapper", + "consentRequired" : false, + "config" : { } + } ], + "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "2972da43-8cb0-4568-aca8-997a60f70e3d", + "clientId" : "admin-cli", + "name" : "${client_admin-cli}", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "**********", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : false, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : true, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "8a753a23-230d-4003-b0aa-cdca03c57b8d", + "clientId" : "beacon", + "name" : "Beacon", + "description" : "Demo Beacon", + "baseUrl" : "http://beacon:5050", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "b26ca0f9-1137-4bee-b453-ee51eefbe7ba", + "redirectUris" : [ "http://beacon:5050/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : true, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.encrypt" : "false", + "saml.server.signature" : "false", + "saml.server.signature.keyinfo.ext" : "false", + "exclude.session.state.from.auth.response" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "tls.client.certificate.bound.access.tokens" : "false", + "saml.authnstatement" : "false", + "display.on.consent.screen" : "false", + "saml.onetimeuse.condition" : "false" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "6d5cf9b1-90f3-4984-a654-17b0bf16975a", + "name" : "Client Host", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usersessionmodel-note-mapper", + "consentRequired" : false, + "config" : { + "user.session.note" : "clientHost", + "userinfo.token.claim" : "true", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "clientHost", + "jsonType.label" : "String" + } + }, { + "id" : "5e4d9971-efdb-4bab-ba8a-10ea9b95d716", + "name" : "Client ID", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usersessionmodel-note-mapper", + "consentRequired" : false, + "config" : { + "user.session.note" : "clientId", + "userinfo.token.claim" : "true", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "clientId", + "jsonType.label" : "String" + } + }, { + "id" : "de72c9ab-d9b5-48a8-936f-801120d2a449", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "751c9280-6c3e-4f3c-a014-4573dbb4bd1c", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "71bb92a2-9157-4393-8109-32fb0c9b4925", + "name" : "profile", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "profile", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "profile", + "jsonType.label" : "String" + } + }, { + "id" : "a7eea6fb-85d6-4fe5-a2e1-c1fa9a33e5c2", + "name" : "picture", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "picture", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "picture", + "jsonType.label" : "String" + } + }, { + "id" : "40c90763-a47e-4ae2-9818-1598f4a546d7", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "fb04c2ad-c08a-4028-b3a7-996a6269b274", + "name" : "groups", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-realm-role-mapper", + "consentRequired" : false, + "config" : { + "multivalued" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "foo", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "groups", + "jsonType.label" : "String" + } + }, { + "id" : "49e41be7-9faf-4016-be3e-5c6c862001e6", + "name" : "Client IP Address", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usersessionmodel-note-mapper", + "consentRequired" : false, + "config" : { + "user.session.note" : "clientAddress", + "userinfo.token.claim" : "true", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "clientAddress", + "jsonType.label" : "String" + } + }, { + "id" : "9efffa4e-dcfd-4177-b300-ba1ad534d799", + "name" : "nickname", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "nickname", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "nickname", + "jsonType.label" : "String" + } + }, { + "id" : "4d664844-ca38-4a96-906e-f9fe3fda5b2d", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + } ], + "defaultClientScopes" : [ "role_list", "profile", "microprofile-jwt", "email" ], + "optionalClientScopes" : [ ] + }, { + "id" : "61216acc-01da-4d8a-bd4d-b88c2b38686a", + "clientId" : "broker", + "name" : "${client_broker}", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "**********", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "ef278d04-53c6-4b4f-ae93-0aec719f84dd", + "clientId" : "permissions", + "name" : "Beacon Permissions", + "adminUrl" : "http://beacon-permissions", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "c0285717-1bfb-4b32-b01d-d663470ce7c4", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : true, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.encrypt" : "false", + "saml.server.signature" : "false", + "saml.server.signature.keyinfo.ext" : "false", + "exclude.session.state.from.auth.response" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "tls.client.certificate.bound.access.tokens" : "false", + "saml.authnstatement" : "false", + "display.on.consent.screen" : "false", + "saml.onetimeuse.condition" : "false" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "f5aa5971-be11-4ca3-acdf-09404a58f846", + "clientId" : "realm-management", + "name" : "${client_realm-management}", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "**********", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "0f1f4a6b-4f48-406e-8ec8-7b5329403a6e", + "clientId" : "security-admin-console", + "name" : "${client_security-admin-console}", + "rootUrl" : "${authAdminUrl}", + "baseUrl" : "/admin/Beacon/console/", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "**********", + "redirectUris" : [ "/admin/Beacon/console/*" ], + "webOrigins" : [ "+" ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "pkce.code.challenge.method" : "S256" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "e1c5d474-7edc-4ccb-9d59-13df4f1d5dc0", + "name" : "locale", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "locale", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "locale", + "jsonType.label" : "String" + } + } ], + "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + } ], + "clientScopes" : [ { + "id" : "435ee055-d511-40e2-a4cd-43ee57d7b244", + "name" : "offline_access", + "description" : "OpenID Connect built-in scope: offline_access", + "protocol" : "openid-connect", + "attributes" : { + "consent.screen.text" : "${offlineAccessScopeConsentText}", + "display.on.consent.screen" : "true" + } + }, { + "id" : "d5cbff9b-1e97-444d-b772-eae9c283788c", + "name" : "role_list", + "description" : "SAML role list", + "protocol" : "saml", + "attributes" : { + "consent.screen.text" : "${samlRoleListScopeConsentText}", + "display.on.consent.screen" : "true" + }, + "protocolMappers" : [ { + "id" : "b0a7f711-315f-4311-9d49-279392aa9ce0", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + } ] + }, { + "id" : "53d0f60a-9b81-4250-ad44-de7afc4bae90", + "name" : "profile", + "description" : "OpenID Connect built-in scope: profile", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${profileScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "62019f78-a48e-4ad1-bb22-5036ddc7f329", + "name" : "gender", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "gender", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "gender", + "jsonType.label" : "String" + } + }, { + "id" : "230fc610-50a7-4e3b-8438-e0c962cef686", + "name" : "nickname", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "nickname", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "nickname", + "jsonType.label" : "String" + } + }, { + "id" : "b1f0d13a-e1bf-4223-b819-041d5fa7ac93", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "e2300d7d-6e86-4fb5-82c1-3e447f7e2ed0", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : false, + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true", + "userinfo.token.claim" : "true" + } + }, { + "id" : "1754c79c-096b-4709-b472-5b1af0bb9826", + "name" : "website", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "website", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "website", + "jsonType.label" : "String" + } + }, { + "id" : "8d6a602c-7a2b-4974-84a9-6be65b805812", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "8a9a6c4b-7307-42cb-83d7-bafd24cf3bf8", + "name" : "picture", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "picture", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "picture", + "jsonType.label" : "String" + } + }, { + "id" : "5ce0b39c-6d26-4a5f-bbbd-370f7463ba7d", + "name" : "zoneinfo", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "zoneinfo", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "zoneinfo", + "jsonType.label" : "String" + } + }, { + "id" : "27427bea-0fce-4951-ace6-511028d71bc5", + "name" : "updated at", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "updatedAt", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "updated_at", + "jsonType.label" : "String" + } + }, { + "id" : "fca33576-a310-4fc1-9da6-3b6b719c144e", + "name" : "locale", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "locale", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "locale", + "jsonType.label" : "String" + } + }, { + "id" : "93f997a6-509e-471d-9b74-6bdcb614e6fa", + "name" : "birthdate", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "birthdate", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "birthdate", + "jsonType.label" : "String" + } + }, { + "id" : "21eaa433-da47-4835-8c32-16ad1215aa5f", + "name" : "middle name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "middleName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "middle_name", + "jsonType.label" : "String" + } + }, { + "id" : "f884e878-1808-4786-ac1c-c548e847f0e4", + "name" : "profile", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "profile", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "profile", + "jsonType.label" : "String" + } + }, { + "id" : "56471621-4c26-44bd-856f-92390502e30a", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "c85970c9-0b07-428e-b6ad-39f85e35b9a0", + "name" : "email", + "description" : "OpenID Connect built-in scope: email", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${emailScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "b212389d-bd7b-495b-aa8b-5548fb169301", + "name" : "email verified", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "emailVerified", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email_verified", + "jsonType.label" : "boolean" + } + }, { + "id" : "1dbb047e-94d4-490b-b1f2-4eb0d58683a8", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "33ca96d2-6623-471e-ada7-64e8d32b0a82", + "name" : "address", + "description" : "OpenID Connect built-in scope: address", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${addressScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "76fece78-a315-420a-a7ba-73d9cd7bf407", + "name" : "address", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-address-mapper", + "consentRequired" : false, + "config" : { + "user.attribute.formatted" : "formatted", + "user.attribute.country" : "country", + "user.attribute.postal_code" : "postal_code", + "userinfo.token.claim" : "true", + "user.attribute.street" : "street", + "id.token.claim" : "true", + "user.attribute.region" : "region", + "access.token.claim" : "true", + "user.attribute.locality" : "locality" + } + } ] + }, { + "id" : "f60f8df2-69a3-4bef-a92f-2414ce41dc97", + "name" : "phone", + "description" : "OpenID Connect built-in scope: phone", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${phoneScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "002e7fdf-1b16-44d9-94fd-cb48b3935f08", + "name" : "phone number", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "phoneNumber", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "phone_number", + "jsonType.label" : "String" + } + }, { + "id" : "5865166d-9a6f-4135-89df-1c2b3c211f78", + "name" : "phone number verified", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "phoneNumberVerified", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "phone_number_verified", + "jsonType.label" : "boolean" + } + } ] + }, { + "id" : "f68013ac-4d64-4d8b-af14-b0f057598707", + "name" : "roles", + "description" : "OpenID Connect scope for add user roles to the access token", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "false", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${rolesScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "72f6d9d8-4988-4117-80ee-a29ab6d25c44", + "name" : "audience resolve", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-audience-resolve-mapper", + "consentRequired" : false, + "config" : { } + }, { + "id" : "f64a33fe-70ea-4ab2-9b7c-651537b687f4", + "name" : "client roles", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-client-role-mapper", + "consentRequired" : false, + "config" : { + "user.attribute" : "foo", + "access.token.claim" : "true", + "claim.name" : "resource_access.${client_id}.roles", + "jsonType.label" : "String", + "multivalued" : "true" + } + }, { + "id" : "801a390b-7f0b-406f-9428-4b6477f9a7be", + "name" : "realm roles", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-realm-role-mapper", + "consentRequired" : false, + "config" : { + "user.attribute" : "foo", + "access.token.claim" : "true", + "claim.name" : "realm_access.roles", + "jsonType.label" : "String", + "multivalued" : "true" + } + } ] + }, { + "id" : "73a42667-6266-4367-b907-00369d54ad2b", + "name" : "web-origins", + "description" : "OpenID Connect scope for add allowed web origins to the access token", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "false", + "display.on.consent.screen" : "false", + "consent.screen.text" : "" + }, + "protocolMappers" : [ { + "id" : "9355ebcb-d5e8-4876-b09c-141960318070", + "name" : "allowed web origins", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-allowed-origins-mapper", + "consentRequired" : false, + "config" : { } + } ] + }, { + "id" : "a3bd3167-f7cf-4330-ab73-4c1115c1647e", + "name" : "microprofile-jwt", + "description" : "Microprofile - JWT built-in scope", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "false" + }, + "protocolMappers" : [ { + "id" : "aae18ed9-4b47-427f-9c72-78b158373b3b", + "name" : "groups", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-realm-role-mapper", + "consentRequired" : false, + "config" : { + "multivalued" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "foo", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "groups", + "jsonType.label" : "String" + } + }, { + "id" : "f3a6dbf0-6756-4271-92c7-a0609307f12c", + "name" : "upn", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "true", + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "upn", + "jsonType.label" : "String" + } + } ] + } ], + "defaultDefaultClientScopes" : [ "role_list", "profile", "email", "roles", "web-origins" ], + "defaultOptionalClientScopes" : [ "offline_access", "address", "phone", "microprofile-jwt" ], + "browserSecurityHeaders" : { + "contentSecurityPolicyReportOnly" : "", + "xContentTypeOptions" : "nosniff", + "xRobotsTag" : "none", + "xFrameOptions" : "SAMEORIGIN", + "contentSecurityPolicy" : "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", + "xXSSProtection" : "1; mode=block", + "strictTransportSecurity" : "max-age=31536000; includeSubDomains" + }, + "smtpServer" : { }, + "eventsEnabled" : false, + "eventsListeners" : [ "jboss-logging" ], + "enabledEventTypes" : [ ], + "adminEventsEnabled" : false, + "adminEventsDetailsEnabled" : false, + "components" : { + "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy" : [ { + "id" : "811153f0-3d4a-42ae-93ef-b26ac06c94aa", + "name" : "Max Clients Limit", + "providerId" : "max-clients", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "max-clients" : [ "200" ] + } + }, { + "id" : "63d2fcfe-a8f1-4393-8f5a-d5eea356d778", + "name" : "Trusted Hosts", + "providerId" : "trusted-hosts", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "host-sending-registration-request-must-match" : [ "true" ], + "client-uris-must-match" : [ "true" ] + } + }, { + "id" : "8bb81a99-83e2-4968-9963-eb70b0fe753c", + "name" : "Allowed Client Scopes", + "providerId" : "allowed-client-templates", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "allow-default-scopes" : [ "true" ] + } + }, { + "id" : "816adcb3-0414-47dd-b231-a45a095edc81", + "name" : "Consent Required", + "providerId" : "consent-required", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { } + }, { + "id" : "3f5888e8-bc23-4f1e-a215-43c59fa0a713", + "name" : "Full Scope Disabled", + "providerId" : "scope", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { } + }, { + "id" : "1fea56dc-6a52-4d47-8058-6bf4c5a28f4b", + "name" : "Allowed Protocol Mapper Types", + "providerId" : "allowed-protocol-mappers", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "allowed-protocol-mapper-types" : [ "saml-user-attribute-mapper", "oidc-full-name-mapper", "saml-role-list-mapper", "oidc-address-mapper", "oidc-usermodel-property-mapper", "saml-user-property-mapper", "oidc-usermodel-attribute-mapper", "oidc-sha256-pairwise-sub-mapper" ] + } + }, { + "id" : "f3413e70-66b0-4ca4-840e-ad22598416cc", + "name" : "Allowed Client Scopes", + "providerId" : "allowed-client-templates", + "subType" : "authenticated", + "subComponents" : { }, + "config" : { + "allow-default-scopes" : [ "true" ] + } + }, { + "id" : "c88d027d-355d-4ae7-a5ff-1f4a456f6e86", + "name" : "Allowed Protocol Mapper Types", + "providerId" : "allowed-protocol-mappers", + "subType" : "authenticated", + "subComponents" : { }, + "config" : { + "allowed-protocol-mapper-types" : [ "saml-user-attribute-mapper", "saml-user-property-mapper", "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-usermodel-property-mapper", "saml-role-list-mapper", "oidc-usermodel-attribute-mapper", "oidc-address-mapper" ] + } + } ], + "org.keycloak.keys.KeyProvider" : [ { + "id" : "d3a46f12-da7c-4960-b429-7a82b5c23d02", + "name" : "aes-generated", + "providerId" : "aes-generated", + "subComponents" : { }, + "config" : { + "kid" : [ "24d4bf93-2344-46d3-b04e-8d98891a81d6" ], + "secret" : [ "dWZJQ_bbbYqaYqITXzvngg" ], + "priority" : [ "100" ] + } + }, { + "id" : "26b721b0-41fc-48d0-b57f-5bab8f968ae8", + "name" : "hmac-generated", + "providerId" : "hmac-generated", + "subComponents" : { }, + "config" : { + "kid" : [ "568d15ee-15e6-403a-8bd8-1c137d69d002" ], + "secret" : [ "T5WZ51KmfQ7JhhcsbG1kSJMCGgmsftnOYv8m8ZilCYnXtNuZn0lu68U-uVrrDJTUFv2uiSisapZaysxRdEtGSw" ], + "priority" : [ "100" ], + "algorithm" : [ "HS256" ] + } + }, { + "id" : "0660a039-4702-4765-a534-ec339b6afcc9", + "name" : "rsa-generated", + "providerId" : "rsa-generated", + "subComponents" : { }, + "config" : { + "privateKey" : [ "MIIEpQIBAAKCAQEAp8Ratd6KfNju4CmwsP/vlSMIVu/QtIy6gsTKXIf1/0YGslwMCsISBRCQ7TLhUnMmoWhSXBW/4VQTLNUamMKDsKLOeR5UJRQOa/PNZexP5tqBlsilkkvy3tW0UzvqxM5rJr3J3gOwuRcxLG3v/uBtSUN556OICaRZPMPEgbt9bDed8PhoSLNlfrqQAwDboNOifK8Di774hH+r0vd3yr1e3dqXXzMJpW4CN6undyP1ZC+8+BD2OM39vJJ8MCe9KXGSzMXH1raOCa9PPHLITjOf1Cz6fVpKbGLQKOdnC2gima+D9w2pyNjsmyssQJocyw8hnk2R3xzqM3M+A2DLaOSQOwIDAQABAoIBAQCCEKfm4i5p1mFz5r52qyWacPuRMwGSSJx8r4bXsAzWqPqeIuCvIoCH7qz9SHoJyv6DGnbnr3EAh4cKNfkVv5ALTF1Y51uDF4aKyQxP3aKgrnzTYqGCx2D2w6W29ffwNrw539/2QNQs2z8jW+Q5rNLtfuOu40ifeQw6IOhjT/FQCJkBJct9iulUw1gNNSk+9mVwOZXIhbDFK2eZyBUPrNadrGgOeE3attkfUXI0pQCg7bV3Ee+y+CK6rJ4CXQPdcYviHGVc1oJN9eYmDGDr1o0USGS8lOmrJTy6+QXZqpi38aZVeBTG0ywrsZ4123o4UWcRrsLIQLPVfkDbykXW/BZRAoGBANOLv5QlIv5BlTZJSqN94Hb9FuMt4P2dtJKErkdv0yH/NHacsd+bDhjenu4sgX+UZ0J0URo8GZG6Nh4nuRoP5tPgG1nDAxSgSvzQuVagocm190f2YTJPs6cpZ9TJJMf6xNcC7W9pN6BXby7AQ4nYC/OQYr1V3nkLDn/h0F9ZWTZpAoGBAMsFfe7m0CkqnGkgEorEVYi6Lnl8mXSPsoW2dop/8C/Osm7sHEg9tpRFttXUOrYnQmxAd/izrtX0SV5qfGGEQohenAhdMWUqKwTQOrI+uIWx1bL8YaLkPmEmm7UCwsuYh/XZhpLIwMxp9REMWAt8XPvYcyi0LKFs6ANvZdviJeUDAoGBAJgcYIERwvu4BKaoRLcSiBiHG7H3B1TV1UWVigtr6REFBKBVQ8FZKOXRDc6MygEGoMk0Ai0vEeOrVcaRIZQP4xZuirwccVafe8wV+W7EyhDUex6Plowqqy+Dollq2LvDIU7JmBkIOytcM2IWdXnkk5NrOtSRrgqzXJWvtbkZ8gAhAoGBAJ7+Ag2h/MsAb9V0JJFACKw3AkZp6dN65ZgJuPPmFbea6+oqRkvc6KtdnT4AIqqcPEyCgHHoZbdwxDSIuDe2WFRro055jUFosJ/oYs9Mhz1Mc8rkE6J5lNCIZ9BuBRdksLU8UUOKrFJpeF6NiDYWgstIS4dI8trIazqlduOoS3z5AoGACoeJIndd1Ukkg2N4NnzQb7Yal+0q39mdQpIWe51gvIh9x+LMm+2eJaTm5vSFNGSO5MpCLUl2LNKwGeWd5cjO7muTAtFGn7vy+Z7osJi5XfwgnTlpt786zSE0Fu3AM6sLqPkJy8XXQuOZOaQB6sNa9jXsffpWdwBZ6dF1R3aN+T8=" ], + "certificate" : [ "MIICmzCCAYMCBgF0KzkkAjANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZCZWFjb24wHhcNMjAwODI2MTQ0MTM5WhcNMzAwODI2MTQ0MzE5WjARMQ8wDQYDVQQDDAZCZWFjb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCnxFq13op82O7gKbCw/++VIwhW79C0jLqCxMpch/X/RgayXAwKwhIFEJDtMuFScyahaFJcFb/hVBMs1RqYwoOwos55HlQlFA5r881l7E/m2oGWyKWSS/Le1bRTO+rEzmsmvcneA7C5FzEsbe/+4G1JQ3nno4gJpFk8w8SBu31sN53w+GhIs2V+upADANug06J8rwOLvviEf6vS93fKvV7d2pdfMwmlbgI3q6d3I/VkL7z4EPY4zf28knwwJ70pcZLMxcfWto4Jr088cshOM5/ULPp9WkpsYtAo52cLaCKZr4P3DanI2OybKyxAmhzLDyGeTZHfHOozcz4DYMto5JA7AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAG3K//oLZumV6ZDTAEfbVVh6W4i3YO+mosZuxRIDr0b7bN9dlp/xb8jtIFk2+/Hoie0SogLyCvlAAeokJb9+TIZ4CMUBRo4fMpTqSiTUr9EMj9rpG9pM3vho3EBnnV5MeUZPBj5G1JomYz/gBjrXBywuxHIoKa6eYGnXrirpUXTSEAPpm5fvvhoMz/fFAW/1GYFczAqsaPwCjD1nrBJ6lRywu/M1FQVjo4Gx+hitbbdhoSkA5Azd7emGwc9EhhgwRH0I7/LJDEw1G+Z5d4tIMZysWdkAyCAGmH/qN+X5pSGQAe1/TBjYMLOS3l1zOzFJSvd20oBFhFWe/FBPOF6c4qg=" ], + "priority" : [ "100" ] + } + } ] + }, + "internationalizationEnabled" : false, + "supportedLocales" : [ ], + "authenticationFlows" : [ { + "id" : "d94404c2-f668-4fe2-af3f-3444736b2a2f", + "alias" : "Account verification options", + "description" : "Method with which to verity the existing account", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "idp-email-verification", + "requirement" : "ALTERNATIVE", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "ALTERNATIVE", + "priority" : 20, + "flowAlias" : "Verify Existing Account by Re-authentication", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "f5b88790-3bd2-4a5c-b452-45ac724b2464", + "alias" : "Authentication Options", + "description" : "Authentication options.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "basic-auth", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "basic-auth-otp", + "requirement" : "DISABLED", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "auth-spnego", + "requirement" : "DISABLED", + "priority" : 30, + "userSetupAllowed" : false, + "autheticatorFlow" : false + } ] + }, { + "id" : "e47175a0-8291-4c10-95c1-863c2f1de51c", + "alias" : "Browser - Conditional OTP", + "description" : "Flow to determine if the OTP is required for the authentication", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "auth-otp-form", + "requirement" : "REQUIRED", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + } ] + }, { + "id" : "376389b4-0a1e-4188-ac0e-073969d19559", + "alias" : "Direct Grant - Conditional OTP", + "description" : "Flow to determine if the OTP is required for the authentication", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "direct-grant-validate-otp", + "requirement" : "REQUIRED", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + } ] + }, { + "id" : "e0961aff-bc85-4fcd-9887-954cd811fba4", + "alias" : "First broker login - Conditional OTP", + "description" : "Flow to determine if the OTP is required for the authentication", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "auth-otp-form", + "requirement" : "REQUIRED", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + } ] + }, { + "id" : "ff1b08fe-9b2b-4394-9c16-6e56f7248bb7", + "alias" : "Handle Existing Account", + "description" : "Handle what to do if there is existing account with same email/username like authenticated identity provider", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "idp-confirm-link", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "REQUIRED", + "priority" : 20, + "flowAlias" : "Account verification options", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "d5454fe8-06b8-45a2-841a-7c634f0eba15", + "alias" : "Reset - Conditional OTP", + "description" : "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "reset-otp", + "requirement" : "REQUIRED", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + } ] + }, { + "id" : "a814256b-6307-4d0c-b7b6-9fe03d7afdab", + "alias" : "User creation or linking", + "description" : "Flow for the existing/non-existing user alternatives", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticatorConfig" : "create unique user config", + "authenticator" : "idp-create-user-if-unique", + "requirement" : "ALTERNATIVE", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "ALTERNATIVE", + "priority" : 20, + "flowAlias" : "Handle Existing Account", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "9a27a729-3207-4d42-9d54-aba248f88862", + "alias" : "Verify Existing Account by Re-authentication", + "description" : "Reauthentication of existing account", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "idp-username-password-form", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "CONDITIONAL", + "priority" : 20, + "flowAlias" : "First broker login - Conditional OTP", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "52c16b5a-faf6-4a4c-ba18-d6f70c29863d", + "alias" : "browser", + "description" : "browser based authentication", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-cookie", + "requirement" : "ALTERNATIVE", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "auth-spnego", + "requirement" : "DISABLED", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "identity-provider-redirector", + "requirement" : "ALTERNATIVE", + "priority" : 25, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "ALTERNATIVE", + "priority" : 30, + "flowAlias" : "forms", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "27df9fe7-78fe-44be-ae21-de72763b453d", + "alias" : "clients", + "description" : "Base authentication for clients", + "providerId" : "client-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "client-secret", + "requirement" : "ALTERNATIVE", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "client-jwt", + "requirement" : "ALTERNATIVE", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "client-secret-jwt", + "requirement" : "ALTERNATIVE", + "priority" : 30, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "client-x509", + "requirement" : "ALTERNATIVE", + "priority" : 40, + "userSetupAllowed" : false, + "autheticatorFlow" : false + } ] + }, { + "id" : "32cf0a27-795f-4285-8c12-6050d4836333", + "alias" : "direct grant", + "description" : "OpenID Connect Resource Owner Grant", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "direct-grant-validate-username", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "direct-grant-validate-password", + "requirement" : "REQUIRED", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "CONDITIONAL", + "priority" : 30, + "flowAlias" : "Direct Grant - Conditional OTP", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "5975659c-8010-467e-b782-f0fcf1abb121", + "alias" : "docker auth", + "description" : "Used by Docker clients to authenticate against the IDP", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "docker-http-basic-authenticator", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + } ] + }, { + "id" : "98adec5d-98c6-4d7c-b6d3-105805e1e91e", + "alias" : "first broker login", + "description" : "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticatorConfig" : "review profile config", + "authenticator" : "idp-review-profile", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "REQUIRED", + "priority" : 20, + "flowAlias" : "User creation or linking", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "88fa16c9-68da-49cd-82b9-30fd2714af6d", + "alias" : "forms", + "description" : "Username, password, otp and other auth forms.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-username-password-form", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "CONDITIONAL", + "priority" : 20, + "flowAlias" : "Browser - Conditional OTP", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "8c3fe87b-6b27-4bd1-b2b4-a63154550df2", + "alias" : "http challenge", + "description" : "An authentication flow based on challenge-response HTTP Authentication Schemes", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "no-cookie-redirect", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "REQUIRED", + "priority" : 20, + "flowAlias" : "Authentication Options", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "80910f52-988a-4c1a-b780-40399eafa7b0", + "alias" : "registration", + "description" : "registration flow", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-page-form", + "requirement" : "REQUIRED", + "priority" : 10, + "flowAlias" : "registration form", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "feba6cf8-7689-4887-b73d-cae37150f548", + "alias" : "registration form", + "description" : "registration form", + "providerId" : "form-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-user-creation", + "requirement" : "REQUIRED", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "registration-profile-action", + "requirement" : "REQUIRED", + "priority" : 40, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "registration-password-action", + "requirement" : "REQUIRED", + "priority" : 50, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "registration-recaptcha-action", + "requirement" : "DISABLED", + "priority" : 60, + "userSetupAllowed" : false, + "autheticatorFlow" : false + } ] + }, { + "id" : "b2950822-d435-463d-860b-920144bc5543", + "alias" : "reset credentials", + "description" : "Reset credentials for a user if they forgot their password or something", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "reset-credentials-choose-user", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "reset-credential-email", + "requirement" : "REQUIRED", + "priority" : 20, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "authenticator" : "reset-password", + "requirement" : "REQUIRED", + "priority" : 30, + "userSetupAllowed" : false, + "autheticatorFlow" : false + }, { + "requirement" : "CONDITIONAL", + "priority" : 40, + "flowAlias" : "Reset - Conditional OTP", + "userSetupAllowed" : false, + "autheticatorFlow" : true + } ] + }, { + "id" : "4070ca61-2129-4835-a890-45388c060a9b", + "alias" : "saml ecp", + "description" : "SAML ECP Profile Authentication Flow", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "http-basic-authenticator", + "requirement" : "REQUIRED", + "priority" : 10, + "userSetupAllowed" : false, + "autheticatorFlow" : false + } ] + } ], + "authenticatorConfig" : [ { + "id" : "b616d8ec-25ee-4b8e-9924-b7ff19a89e0f", + "alias" : "create unique user config", + "config" : { + "require.password.update.after.registration" : "false" + } + }, { + "id" : "302dcbad-33e1-45d7-a4fd-4f4afccbe8eb", + "alias" : "review profile config", + "config" : { + "update.profile.on.first.login" : "missing" + } + } ], + "requiredActions" : [ { + "alias" : "CONFIGURE_TOTP", + "name" : "Configure OTP", + "providerId" : "CONFIGURE_TOTP", + "enabled" : true, + "defaultAction" : false, + "priority" : 10, + "config" : { } + }, { + "alias" : "terms_and_conditions", + "name" : "Terms and Conditions", + "providerId" : "terms_and_conditions", + "enabled" : false, + "defaultAction" : false, + "priority" : 20, + "config" : { } + }, { + "alias" : "UPDATE_PASSWORD", + "name" : "Update Password", + "providerId" : "UPDATE_PASSWORD", + "enabled" : true, + "defaultAction" : false, + "priority" : 30, + "config" : { } + }, { + "alias" : "UPDATE_PROFILE", + "name" : "Update Profile", + "providerId" : "UPDATE_PROFILE", + "enabled" : true, + "defaultAction" : false, + "priority" : 40, + "config" : { } + }, { + "alias" : "VERIFY_EMAIL", + "name" : "Verify Email", + "providerId" : "VERIFY_EMAIL", + "enabled" : true, + "defaultAction" : false, + "priority" : 50, + "config" : { } + }, { + "alias" : "update_user_locale", + "name" : "Update User Locale", + "providerId" : "update_user_locale", + "enabled" : true, + "defaultAction" : false, + "priority" : 1000, + "config" : { } + } ], + "browserFlow" : "browser", + "registrationFlow" : "registration", + "directGrantFlow" : "direct grant", + "resetCredentialsFlow" : "reset credentials", + "clientAuthenticationFlow" : "clients", + "dockerAuthenticationFlow" : "docker auth", + "attributes" : { + "clientOfflineSessionMaxLifespan" : "0", + "clientSessionIdleTimeout" : "0", + "clientSessionMaxLifespan" : "0", + "clientOfflineSessionIdleTimeout" : "0" + }, + "keycloakVersion" : "11.0.1", + "userManagedAccessAllowed" : false +} \ No newline at end of file diff --git a/deploy/cleanup_json.py b/deploy/cleanup_json.py new file mode 100644 index 0000000..d96a544 --- /dev/null +++ b/deploy/cleanup_json.py @@ -0,0 +1,17 @@ + +import os +import sys +import json + +def clean(path): + os.system("json-dereference -s {} -o {}".format(path, path)) + +def main(): + for root, dirs, files in os.walk(sys.argv[1], topdown=False): + for name in files: + if name.endswith("json") and not name.endswith("endpoints.json"): + print(os.path.join(root, name)) + clean(os.path.join(root, name)) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/deploy/conf.py b/deploy/conf.py new file mode 100644 index 0000000..56f8e7f --- /dev/null +++ b/deploy/conf.py @@ -0,0 +1,129 @@ +"""Beacon Configuration.""" + +# +# Beacon general info +# +beacon_id = 'org.ega-archive.ga4gh-approval-beacon-test' # ID of the Beacon +beacon_name = 'GA4GH Approval Beacon Test' # Name of the Beacon service +api_version = 'v2.0.0' # Version of the Beacon implementation +uri = 'https://beacon-giab-test.ega-archive.org' + +# +# Beacon granularity +# +default_beacon_granularity = "record" +max_beacon_granularity = "record" + +# +# Organization info +# +org_id = 'EGA' # Id of the organization +org_name = 'European Genome-Phenome Archive (EGA)' # Full name +org_description = ('The European Genome-phenome Archive (EGA) ' + 'is a service for permanent archiving and sharing ' + 'of all types of personally identifiable genetic ' + 'and phenotypic data resulting from biomedical research projects.') +org_adress = ('C/ Dr. Aiguader, 88' + 'PRBB Building' + '08003 Barcelona, Spain') +org_welcome_url = 'https://ega-archive.org/' +org_contact_url = 'mailto:beacon.ega@crg.eu' +org_logo_url = 'https://ega-archive.org/images/logo.png' +org_info = '' + +# +# Project info +# +description = (r"This Beacon " + r"is based on the GA4GH Beacon " + r"v2.0") +version = 'v2.0' +welcome_url = 'https://beacon.ega-archive.org/' +alternative_url = 'https://beacon.ega-archive.org/api' +create_datetime = '2021-11-29T12:00:00.000000' +update_datetime = '' +# update_datetime will be created when initializing the beacon, using the ISO 8601 format + +# +# Service +# +service_type = 'org.ga4gh:beacon:1.0.0' # service type +service_url = 'https://beacon.ega-archive.org/api/services' +entry_point = False +is_open = True +documentation_url = 'https://github.com/EGA-archive/beacon-2.x/' # Documentation of the service +environment = 'test' # Environment (production, development or testing/staging deployments) + +# GA4GH +ga4gh_service_type_group = 'org.ga4gh' +ga4gh_service_type_artifact = 'beacon' +ga4gh_service_type_version = '1.0' + +# Beacon handovers +beacon_handovers = [ + { + 'handoverType': { + 'id': 'CUSTOM', + 'label': 'Project description' + }, + 'note': 'Project description', + 'url': 'https://www.nist.gov/programs-projects/genome-bottle' + } +] + +# +# Database connection +# +database_host = 'mongo' +database_port = 27017 +database_user = 'root' +database_password = 'example' +database_name = 'beacon' +database_auth_source = 'admin' +# database_schema = 'public' # comma-separated list of schemas +# database_app_name = 'beacon-appname' # Useful to track connections + +# +# Web server configuration +# Note: a Unix Socket path is used when behind a server, not host:port +# +beacon_host = '0.0.0.0' +beacon_port = 5050 +beacon_tls_enabled = False +beacon_tls_client = False +beacon_cert = '/etc/ega/server.cert' +beacon_key = '/etc/ega/server.key' +CA_cert = '/etc/ega/CA.cert' + +# +# Permissions server configuration +# +permissions_url = 'http://beacon-permissions' + +# +# IdP endpoints (OpenID Connect/Oauth2) +# +# or use Elixir AAI (see https://elixir-europe.org/services/compute/aai) +# +idp_client_id = 'beacon' +idp_client_secret = 'b26ca0f9-1137-4bee-b453-ee51eefbe7ba' # same as in the test IdP +idp_scope = 'profile openid' + +idp_authorize = 'http://idp/auth/realms/Beacon/protocol/openid-connect/auth' +idp_access_token = 'http://idp/auth/realms/Beacon/protocol/openid-connect/token' +idp_introspection = 'http://idp/auth/realms/Beacon/protocol/openid-connect/token/introspect' +idp_user_info = 'http://idp/auth/realms/Beacon/protocol/openid-connect/userinfo' +idp_logout = 'http://idp/auth/realms/Beacon/protocol/openid-connect/logout' + +idp_redirect_uri = 'http://beacon:5050/login' + +# +# UI +# +autocomplete_limit = 16 +autocomplete_ellipsis = '...' + +# +# Ontologies +# +ontologies_folder = "ontologies" diff --git a/deploy/data/analyses.json b/deploy/data/analyses.json new file mode 100644 index 0000000..03e31b2 --- /dev/null +++ b/deploy/data/analyses.json @@ -0,0 +1,32 @@ +[ + { + "aligner": "bwa-0.7.8", + "analysisDate": "2021-04-23", + "biosampleId": "S0001", + "id": "INT_ID1", + "individualId": "NA24631", + "pipelineName": "GATK Pipeline 4.2.3.0", + "runId": "SRR10903401", + "variantCaller": "GATK4.0" + }, + { + "aligner": "bwa-0.7.8", + "analysisDate": "2021-04-23", + "biosampleId": "S0002", + "id": "INT_ID2", + "individualId": "NA24694", + "pipelineName": "GATK Pipeline 4.2.3.0", + "runId": "SRR10903402", + "variantCaller": "GATK4.0" + }, + { + "aligner": "bwa-0.7.8", + "analysisDate": "2021-04-23", + "biosampleId": "S0003", + "id": "INT_ID3", + "individualId": "NA24695", + "pipelineName": "GATK Pipeline 4.2.3.0", + "runId": "SRR10903403", + "variantCaller": "GATK4.0" + } +] diff --git a/deploy/data/biosamples.json b/deploy/data/biosamples.json new file mode 100644 index 0000000..f067600 --- /dev/null +++ b/deploy/data/biosamples.json @@ -0,0 +1,140 @@ +[ + { + "biosampleStatus": { + "id": "EFO:0009655", + "label": "abnormal sample" + }, + "collectionDate": "2021-04-23", + "collectionMoment": "P32Y6M1D", + "diagnosticMarkers": [ + { + "id": "NCIT:C48726", + "label": "T2b Stage Finding" + } + ], + "histologicalDiagnosis": { + "id": "NCIT:C39853", + "label": "Infiltrating Urothelial Carcinoma" + }, + "id": "INT_ID1", + "individualId": "NA24631", + "pathologicalStage": { + "id": "NCIT:C28054", + "label": "Stage II" + }, + "pathologicalTnmFinding": [ + { + "id": "NCIT:C48726", + "label": "T2b Stage Finding" + } + ], + "sampleOriginDetail": { + "id": "UBERON:0001256", + "label": "wall of urinary bladde" + }, + "sampleOriginType": { + "id": "EFO:000965", + "label": "abnormal sample" + }, + "tumorGrade": { + "id": "NCIT:C36136", + "label": "Grade 2 Lesion" + }, + "tumorProgression": { + "id": "NCIT:C84509", + "label": "Primary Malignant Neoplasm" + } + }, + { + "biosampleStatus": { + "id": "EFO:0009655", + "label": "abnormal sample" + }, + "collectionDate": "2021-04-23", + "collectionMoment": "P32Y6M1D", + "diagnosticMarkers": [ + { + "id": "NCIT:C48726", + "label": "T2b Stage Finding" + } + ], + "histologicalDiagnosis": { + "id": "NCIT:C39853", + "label": "Infiltrating Urothelial Carcinoma" + }, + "id": "INT_ID2", + "individualId": "NA24694", + "pathologicalStage": { + "id": "NCIT:C28054", + "label": "Stage II" + }, + "pathologicalTnmFinding": [ + { + "id": "NCIT:C48726", + "label": "T2b Stage Finding" + } + ], + "sampleOriginDetail": { + "id": "UBERON:0001256", + "label": "wall of urinary bladde" + }, + "sampleOriginType": { + "id": "EFO:000965", + "label": "abnormal sample" + }, + "tumorGrade": { + "id": "NCIT:C36136", + "label": "Grade 2 Lesion" + }, + "tumorProgression": { + "id": "NCIT:C84509", + "label": "Primary Malignant Neoplasm" + } + }, + { + "biosampleStatus": { + "id": "EFO:0009655", + "label": "abnormal sample" + }, + "collectionDate": "2021-04-23", + "collectionMoment": "P32Y6M1D", + "diagnosticMarkers": [ + { + "id": "NCIT:C48726", + "label": "T2b Stage Finding" + } + ], + "histologicalDiagnosis": { + "id": "NCIT:C39853", + "label": "Infiltrating Urothelial Carcinoma" + }, + "id": "INT_ID3", + "individualId": "NA24695", + "pathologicalStage": { + "id": "NCIT:C28054", + "label": "Stage II" + }, + "pathologicalTnmFinding": [ + { + "id": "NCIT:C48726", + "label": "T2b Stage Finding" + } + ], + "sampleOriginDetail": { + "id": "UBERON:0001256", + "label": "wall of urinary bladde" + }, + "sampleOriginType": { + "id": "EFO:000965", + "label": "abnormal sample" + }, + "tumorGrade": { + "id": "NCIT:C36136", + "label": "Grade 2 Lesion" + }, + "tumorProgression": { + "id": "NCIT:C84509", + "label": "Primary Malignant Neoplasm" + } + } +] diff --git a/deploy/data/cohorts.json b/deploy/data/cohorts.json new file mode 100644 index 0000000..6b820eb --- /dev/null +++ b/deploy/data/cohorts.json @@ -0,0 +1,21 @@ +[ + { + "cohortDataTypes": [ + { + "id": "EFO:0004600", + "label": "genomic data" + }, + { + "id": "NCIT:C1578", + "label": "clinical data" + }, + { + "id": "NCIT:C142508", + "label": "demographic data" + } + ], + "cohortName": "The Genome in a Bottle Consortium (GIAB)", + "cohortId": "GiaB", + "cohortType": "study-defined" + } +] diff --git a/deploy/data/datasets.json b/deploy/data/datasets.json new file mode 100644 index 0000000..6e1304f --- /dev/null +++ b/deploy/data/datasets.json @@ -0,0 +1,10 @@ +[ + { + "createDateTime": "2017-04-30T00:00:00+00:00", + "description": "The Genome in a Bottle Consortium, hosted by the National Institute of Standards and Technology (NIST) is creating reference materials and data for human genome sequencing, as well as methods for genome comparison and benchmarking. ", + "externalUrl": "https://www.nature.com/articles/sdata201625, https://jimb.stanford.edu/giab-resources", + "id": "EGAD00001008097", + "name": "The Genome in a Bottle Consortium (GIAB)", + "updateDateTime": "2017-04-30T00:00:00+00:00" + } +] diff --git a/deploy/data/genomicVariations.json b/deploy/data/genomicVariations.json new file mode 100644 index 0000000..c12948b --- /dev/null +++ b/deploy/data/genomicVariations.json @@ -0,0 +1,1446 @@ +[ + { + "variantType": "SNP", + "alternateBases": "T", + "frequencyInPopulations": [ + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "AFR_AF", + "alleleFrequency": -1 + } + ] + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ] + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "EAS_AF", + "alleleFrequency": -1 + } + ] + }, + { + "frequencies": [ + { + "population": "EUR_AF", + "alleleFrequency": -1 + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "SAS_AF" + } + ] + } + ], + "variantLevelData": { + "clinicalInterpretations": [ + null + ], + "phenotypicEffects": [ + "MODIFIER" + ] + }, + "referenceBases": "C", + "identifiers": { + "clinVarIds": [ + null + ], + "proteinHGVSIds": [ + null + ], + "genomicHGVSId": [ + null + ] + }, + "variantInternalId": "chr21_9411318_C_T", + "position": { + "start": [ + 9411317 + ], + "refseqId": "21", + "end": [ + 9411318 + ], + "assemblyId": "hs37" + }, + "molecularAttributes": { + "aminoacidChanges": [ + null + ], + "molecularEffects": [ + "MODIFIER" + ], + "geneIds": [ + "CHR_START-MIR3648-1" + ] + }, + "caseLevelData": [ + { + "biosampleId": "NA24695", + "individualId": "NA24695" + }, + { + "individualId": "NA24694", + "biosampleId": "NA24694" + }, + { + "biosampleId": "NA24631", + "individualId": "NA24631" + } + ] + }, + { + "referenceBases": "C", + "identifiers": { + "proteinHGVSIds": [ + null + ], + "genomicHGVSId": [ + null + ], + "clinVarIds": [ + null + ] + }, + "position": { + "end": [ + 9411327 + ], + "refseqId": "21", + "start": [ + 9411326 + ], + "assemblyId": "hs37" + }, + "variantInternalId": "chr21_9411327_C_G", + "caseLevelData": [ + { + "individualId": "NA24695", + "biosampleId": "NA24695" + }, + { + "individualId": "NA24694", + "biosampleId": "NA24694" + }, + { + "biosampleId": "NA24631", + "individualId": "NA24631" + } + ], + "molecularAttributes": { + "molecularEffects": [ + "MODIFIER" + ], + "aminoacidChanges": [ + null + ], + "geneIds": [ + "CHR_START-MIR3648-1" + ] + }, + "variantType": "SNP", + "alternateBases": "G", + "frequencyInPopulations": [ + { + "frequencies": [ + { + "population": "AFR_AF", + "alleleFrequency": -1 + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + }, + { + "frequencies": [ + { + "population": "AMR_AF", + "alleleFrequency": -1 + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "EAS_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "frequencies": [ + { + "population": "EUR_AF", + "alleleFrequency": -1 + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "SAS_AF" + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + } + ], + "variantLevelData": { + "clinicalInterpretations": [ + null + ], + "phenotypicEffects": [ + "MODIFIER" + ] + } + }, + { + "variantLevelData": { + "phenotypicEffects": [ + "MODIFIER" + ], + "clinicalInterpretations": [ + null + ] + }, + "frequencyInPopulations": [ + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AFR_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ] + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "EAS_AF" + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + }, + { + "frequencies": [ + { + "population": "EUR_AF", + "alleleFrequency": -1 + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "SAS_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + } + ], + "alternateBases": "T", + "variantType": "SNP", + "caseLevelData": [ + { + "biosampleId": "NA24695", + "individualId": "NA24695" + }, + { + "biosampleId": "NA24694", + "individualId": "NA24694" + }, + { + "individualId": "NA24631", + "biosampleId": "NA24631" + } + ], + "molecularAttributes": { + "geneIds": [ + "CHR_START-MIR3648-1" + ], + "molecularEffects": [ + "MODIFIER" + ], + "aminoacidChanges": [ + null + ] + }, + "position": { + "end": [ + 9411410 + ], + "refseqId": "21", + "start": [ + 9411409 + ], + "assemblyId": "hs37" + }, + "variantInternalId": "chr21_9411410_C_T", + "referenceBases": "C", + "identifiers": { + "clinVarIds": [ + null + ], + "genomicHGVSId": [ + null + ], + "proteinHGVSIds": [ + null + ] + } + }, + { + "frequencyInPopulations": [ + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "AFR_AF", + "alleleFrequency": -1 + } + ] + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "EAS_AF" + } + ] + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "EUR_AF", + "alleleFrequency": -1 + } + ] + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "SAS_AF", + "alleleFrequency": -1 + } + ] + } + ], + "alternateBases": "T", + "variantType": "SNP", + "variantLevelData": { + "clinicalInterpretations": [ + null + ], + "phenotypicEffects": [ + "MODIFIER" + ] + }, + "position": { + "assemblyId": "hs37", + "refseqId": "21", + "end": [ + 9411500 + ], + "start": [ + 9411499 + ] + }, + "variantInternalId": "chr21_9411500_G_T", + "referenceBases": "G", + "identifiers": { + "clinVarIds": [ + null + ], + "proteinHGVSIds": [ + null + ], + "genomicHGVSId": [ + null + ] + }, + "caseLevelData": [ + { + "biosampleId": "NA24695", + "individualId": "NA24695" + }, + { + "biosampleId": "NA24694", + "individualId": "NA24694" + }, + { + "biosampleId": "NA24631", + "individualId": "NA24631" + } + ], + "molecularAttributes": { + "molecularEffects": [ + "MODIFIER" + ], + "aminoacidChanges": [ + null + ], + "geneIds": [ + "CHR_START-MIR3648-1" + ] + } + }, + { + "variantInternalId": "chr21_9411602_T_C", + "position": { + "assemblyId": "hs37", + "end": [ + 9411602 + ], + "refseqId": "21", + "start": [ + 9411601 + ] + }, + "referenceBases": "T", + "identifiers": { + "clinVarIds": [ + null + ], + "proteinHGVSIds": [ + null + ], + "genomicHGVSId": [ + null + ] + }, + "molecularAttributes": { + "geneIds": [ + "CHR_START-MIR3648-1" + ], + "molecularEffects": [ + "MODIFIER" + ], + "aminoacidChanges": [ + null + ] + }, + "caseLevelData": [ + { + "individualId": "NA24695", + "biosampleId": "NA24695" + }, + { + "individualId": "NA24694", + "biosampleId": "NA24694" + }, + { + "biosampleId": "NA24631", + "individualId": "NA24631" + } + ], + "frequencyInPopulations": [ + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AFR_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "EAS_AF" + } + ] + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "EUR_AF" + } + ] + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "SAS_AF", + "alleleFrequency": -1 + } + ] + } + ], + "alternateBases": "C", + "variantType": "SNP", + "variantLevelData": { + "phenotypicEffects": [ + "MODIFIER" + ], + "clinicalInterpretations": [ + null + ] + } + }, + { + "variantLevelData": { + "clinicalInterpretations": [ + null + ], + "phenotypicEffects": [ + "MODIFIER" + ] + }, + "frequencyInPopulations": [ + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AFR_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "EAS_AF", + "alleleFrequency": -1 + } + ] + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "EUR_AF", + "alleleFrequency": -1 + } + ] + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "SAS_AF", + "alleleFrequency": -1 + } + ] + } + ], + "variantType": "SNP", + "alternateBases": "T", + "caseLevelData": [ + { + "individualId": "NA24695", + "biosampleId": "NA24695" + }, + { + "biosampleId": "NA24694", + "individualId": "NA24694" + }, + { + "individualId": "NA24631", + "biosampleId": "NA24631" + } + ], + "molecularAttributes": { + "molecularEffects": [ + "MODIFIER" + ], + "aminoacidChanges": [ + null + ], + "geneIds": [ + "CHR_START-MIR3648-1" + ] + }, + "position": { + "refseqId": "21", + "end": [ + 9411609 + ], + "start": [ + 9411608 + ], + "assemblyId": "hs37" + }, + "variantInternalId": "chr21_9411609_G_T", + "referenceBases": "G", + "identifiers": { + "clinVarIds": [ + null + ], + "proteinHGVSIds": [ + null + ], + "genomicHGVSId": [ + null + ] + } + }, + { + "variantInternalId": "chr21_9411645_A_G", + "position": { + "assemblyId": "hs37", + "start": [ + 9411644 + ], + "end": [ + 9411645 + ], + "refseqId": "21" + }, + "identifiers": { + "clinVarIds": [ + null + ], + "proteinHGVSIds": [ + null + ], + "genomicHGVSId": [ + null + ] + }, + "referenceBases": "A", + "molecularAttributes": { + "molecularEffects": [ + "MODIFIER" + ], + "aminoacidChanges": [ + null + ], + "geneIds": [ + "CHR_START-MIR3648-1" + ] + }, + "caseLevelData": [ + { + "individualId": "NA24695", + "biosampleId": "NA24695" + }, + { + "biosampleId": "NA24694", + "individualId": "NA24694" + }, + { + "individualId": "NA24631", + "biosampleId": "NA24631" + } + ], + "frequencyInPopulations": [ + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "AFR_AF", + "alleleFrequency": -1 + } + ] + }, + { + "frequencies": [ + { + "population": "AMR_AF", + "alleleFrequency": -1 + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "EAS_AF", + "alleleFrequency": -1 + } + ] + }, + { + "frequencies": [ + { + "population": "EUR_AF", + "alleleFrequency": -1 + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "SAS_AF", + "alleleFrequency": -1 + } + ] + } + ], + "variantType": "SNP", + "alternateBases": "G", + "variantLevelData": { + "clinicalInterpretations": [ + null + ], + "phenotypicEffects": [ + "MODIFIER" + ] + } + }, + { + "frequencyInPopulations": [ + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "AFR_AF", + "alleleFrequency": -1 + } + ] + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "EAS_AF", + "alleleFrequency": -1 + } + ] + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "EUR_AF", + "alleleFrequency": -1 + } + ] + }, + { + "frequencies": [ + { + "population": "SAS_AF", + "alleleFrequency": -1 + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + } + ], + "alternateBases": "T", + "variantType": "SNP", + "variantLevelData": { + "clinicalInterpretations": [ + null + ], + "phenotypicEffects": [ + "MODIFIER" + ] + }, + "position": { + "assemblyId": "hs37", + "end": [ + 9411785 + ], + "refseqId": "21", + "start": [ + 9411784 + ] + }, + "variantInternalId": "chr21_9411785_G_T", + "referenceBases": "G", + "identifiers": { + "genomicHGVSId": [ + null + ], + "proteinHGVSIds": [ + null + ], + "clinVarIds": [ + null + ] + }, + "caseLevelData": [ + { + "biosampleId": "NA24695", + "individualId": "NA24695" + }, + { + "individualId": "NA24694", + "biosampleId": "NA24694" + }, + { + "biosampleId": "NA24631", + "individualId": "NA24631" + } + ], + "molecularAttributes": { + "aminoacidChanges": [ + null + ], + "molecularEffects": [ + "MODIFIER" + ], + "geneIds": [ + "CHR_START-MIR3648-1" + ] + } + }, + { + "caseLevelData": [ + { + "biosampleId": "NA24695", + "individualId": "NA24695" + }, + { + "individualId": "NA24694", + "biosampleId": "NA24694" + }, + { + "biosampleId": "NA24631", + "individualId": "NA24631" + } + ], + "molecularAttributes": { + "aminoacidChanges": [ + null + ], + "molecularEffects": [ + "MODIFIER" + ], + "geneIds": [ + "CHR_START-MIR3648-1" + ] + }, + "position": { + "refseqId": "21", + "end": [ + 9412269 + ], + "start": [ + 9412268 + ], + "assemblyId": "hs37" + }, + "variantInternalId": "chr21_9412269_A_T", + "referenceBases": "A", + "identifiers": { + "genomicHGVSId": [ + null + ], + "proteinHGVSIds": [ + null + ], + "clinVarIds": [ + null + ] + }, + "variantLevelData": { + "phenotypicEffects": [ + "MODIFIER" + ], + "clinicalInterpretations": [ + null + ] + }, + "frequencyInPopulations": [ + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AFR_AF" + } + ] + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ] + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "EAS_AF", + "alleleFrequency": -1 + } + ] + }, + { + "frequencies": [ + { + "population": "EUR_AF", + "alleleFrequency": -1 + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "SAS_AF", + "alleleFrequency": -1 + } + ] + } + ], + "variantType": "SNP", + "alternateBases": "T" + }, + { + "frequencyInPopulations": [ + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AFR_AF" + } + ] + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "EAS_AF", + "alleleFrequency": -1 + } + ] + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "EUR_AF" + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "SAS_AF" + } + ] + } + ], + "variantType": "INDEL", + "alternateBases": "T", + "variantLevelData": { + "phenotypicEffects": [ + "MODIFIER" + ], + "clinicalInterpretations": [ + null + ] + }, + "variantInternalId": "chr21_9412358_TA_T", + "position": { + "assemblyId": "hs37", + "start": [ + 9412357 + ], + "refseqId": "21", + "end": [ + 9412359 + ] + }, + "identifiers": { + "genomicHGVSId": [ + null + ], + "proteinHGVSIds": [ + null + ], + "clinVarIds": [ + null + ] + }, + "referenceBases": "TA", + "molecularAttributes": { + "aminoacidChanges": [ + null + ], + "molecularEffects": [ + "MODIFIER" + ], + "geneIds": [ + "CHR_START-MIR3648-1" + ] + }, + "caseLevelData": [ + { + "biosampleId": "NA24694", + "individualId": "NA24694" + } + ] + }, + { + "caseLevelData": [ + { + "individualId": "NA24695", + "biosampleId": "NA24695" + }, + { + "individualId": "NA24631", + "biosampleId": "NA24631" + } + ], + "molecularAttributes": { + "geneIds": [ + "CHR_START-MIR3648-1" + ], + "molecularEffects": [ + "MODIFIER" + ], + "aminoacidChanges": [ + null + ] + }, + "position": { + "assemblyId": "hs37", + "start": [ + 9412357 + ], + "refseqId": "21", + "end": [ + 9412358 + ] + }, + "variantInternalId": "chr21_9412358_T_TA", + "referenceBases": "T", + "identifiers": { + "clinVarIds": [ + null + ], + "genomicHGVSId": [ + null + ], + "proteinHGVSIds": [ + null + ] + }, + "variantLevelData": { + "clinicalInterpretations": [ + null + ], + "phenotypicEffects": [ + "MODIFIER" + ] + }, + "frequencyInPopulations": [ + { + "frequencies": [ + { + "population": "AFR_AF", + "alleleFrequency": -1 + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ] + }, + { + "frequencies": [ + { + "population": "EAS_AF", + "alleleFrequency": -1 + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "EUR_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "SAS_AF", + "alleleFrequency": -1 + } + ] + } + ], + "alternateBases": "TA", + "variantType": "INDEL" + }, + { + "frequencyInPopulations": [ + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "AFR_AF", + "alleleFrequency": -1 + } + ] + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "population": "AMR_AF", + "alleleFrequency": -1 + } + ] + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "EAS_AF", + "alleleFrequency": -1 + } + ] + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "EUR_AF" + } + ] + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "SAS_AF", + "alleleFrequency": -1 + } + ] + } + ], + "alternateBases": "T", + "variantType": "INDEL", + "variantLevelData": { + "clinicalInterpretations": [ + null + ], + "phenotypicEffects": [ + "MODIFIER" + ] + }, + "variantInternalId": "chr21_9412441_TATA_T", + "position": { + "assemblyId": "hs37", + "start": [ + 9412440 + ], + "refseqId": "21", + "end": [ + 9412444 + ] + }, + "identifiers": { + "genomicHGVSId": [ + null + ], + "proteinHGVSIds": [ + null + ], + "clinVarIds": [ + null + ] + }, + "referenceBases": "TATA", + "molecularAttributes": { + "geneIds": [ + "CHR_START-MIR3648-1" + ], + "aminoacidChanges": [ + null + ], + "molecularEffects": [ + "MODIFIER" + ] + }, + "caseLevelData": [ + { + "individualId": "NA24695", + "biosampleId": "NA24695" + }, + { + "individualId": "NA24694", + "biosampleId": "NA24694" + }, + { + "biosampleId": "NA24631", + "individualId": "NA24631" + } + ] + }, + { + "variantInternalId": "chr21_9412503_C_A", + "position": { + "end": [ + 9412503 + ], + "refseqId": "21", + "start": [ + 9412502 + ], + "assemblyId": "hs37" + }, + "referenceBases": "C", + "identifiers": { + "genomicHGVSId": [ + null + ], + "proteinHGVSIds": [ + null + ], + "clinVarIds": [ + null + ] + }, + "molecularAttributes": { + "geneIds": [ + "CHR_START-MIR3648-1" + ], + "molecularEffects": [ + "MODIFIER" + ], + "aminoacidChanges": [ + null + ] + }, + "caseLevelData": [ + { + "biosampleId": "NA24695", + "individualId": "NA24695" + }, + { + "biosampleId": "NA24694", + "individualId": "NA24694" + }, + { + "biosampleId": "NA24631", + "individualId": "NA24631" + } + ], + "frequencyInPopulations": [ + { + "frequencies": [ + { + "population": "AFR_AF", + "alleleFrequency": -1 + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + }, + { + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org", + "frequencies": [ + { + "alleleFrequency": -1, + "population": "AMR_AF" + } + ] + }, + { + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)", + "frequencies": [ + { + "population": "EAS_AF", + "alleleFrequency": -1 + } + ] + }, + { + "frequencies": [ + { + "alleleFrequency": -1, + "population": "EUR_AF" + } + ], + "source": "The Genome Aggregation Database (gnomAD)", + "sourceReference": "https://gnomad.broadinstitute.org" + }, + { + "frequencies": [ + { + "population": "SAS_AF", + "alleleFrequency": -1 + } + ], + "sourceReference": "https://gnomad.broadinstitute.org", + "source": "The Genome Aggregation Database (gnomAD)" + } + ], + "alternateBases": "A", + "variantType": "SNP", + "variantLevelData": { + "clinicalInterpretations": [ + null + ], + "phenotypicEffects": [ + "MODIFIER" + ] + } + } +] diff --git a/deploy/data/individuals.json b/deploy/data/individuals.json new file mode 100644 index 0000000..8f44c93 --- /dev/null +++ b/deploy/data/individuals.json @@ -0,0 +1,95 @@ +[ + { + "diseases": [ + { + "diseaseCode": { + "id": "HP:000054", + "label": "intolerance" + } + } + ], + "ethnicity": { + "id": "HANCESTRO:0021", + "label": "Han Chinese" + }, + "geographicOrigin": { + "id": "GAZ:00002459", + "label": "United States of America" + }, + "id": "NA24631", + "phenotypicFeatures": [ + { + "featureType": { + "id": "NCIT:C3001", + "label": "NCIT:C3001" + } + } + ], + "sex": { + "id": "NCIT:C46112", + "label": "male" + } + }, + { + "diseases": [ + { + "diseaseCode": { + "id": "HP:0008711", + "label": "prostatic hyperplasia" + } + } + ], + "ethnicity": { + "id": "HANCESTRO:0021", + "label": "Han Chinese" + }, + "geographicOrigin": { + "id": "GAZ:00002459", + "label": "United States of America" + }, + "id": "NA24694", + "phenotypicFeatures": [ + { + "featureType": { + "id": "NCIT:C37967", + "label": "NCIT:C37967" + } + } + ], + "sex": { + "id": "NCIT:C46112", + "label": "male" + } + }, + { + "diseases": [ + { + "diseaseCode": { + "id": "DOID:6364", + "label": "migraine" + } + } + ], + "ethnicity": { + "id": "HANCESTRO:0021", + "label": "Han Chinese" + }, + "geographicOrigin": { + "id": "GAZ:00002459", + "label": "United States of America" + }, + "id": "NA24695", + "phenotypicFeatures": [ + { + "featureType": { + "id": "HP:0000938", + "label": "HP:0000938" + } + } + ], + "sex": { + "id": "NCIT:C16576", + "label": "female" + } + } +] diff --git a/deploy/data/runs.json b/deploy/data/runs.json new file mode 100644 index 0000000..df9f3b0 --- /dev/null +++ b/deploy/data/runs.json @@ -0,0 +1,56 @@ +[ + { + "biosampleId": "S0001", + "id": "INT_ID1", + "individualId": "NA24631", + "libraryLayout": "PAIRED", + "librarySelection": "LD-PCR", + "librarySource": { + "id": "NNN:01", + "label": "KAPA library quantification kit" + }, + "libraryStrategy": "WGS", + "platform": "Illumina ", + "runDate": "2017-04-30", + "platformModel": { + "id": "MODEL:HiSeq 2500 ", + "label": "2017-04-30" + } + }, + { + "biosampleId": "S0002", + "id": "INT_ID2", + "individualId": "NA24694", + "libraryLayout": "PAIRED", + "librarySelection": "LD-PCR", + "librarySource": { + "id": "NNN:01", + "label": "KAPA library quantification kit" + }, + "libraryStrategy": "WGS", + "platform": "Illumina ", + "runDate": "2017-04-30", + "platformModel": { + "id": "MODEL:HiSeq 2500 ", + "label": "2017-04-30" + } + }, + { + "biosampleId": "S0003", + "id": "INT_ID3", + "individualId": "NA24695", + "libraryLayout": "PAIRED", + "runDate": "2017-04-30", + "librarySelection": "LD-PCR", + "librarySource": { + "id": "NNN:01", + "label": "KAPA library quantification kit" + }, + "libraryStrategy": "WGS", + "platform": "Illumina ", + "platformModel": { + "id": "MODEL:HiSeq 2500 ", + "label": "2017-04-30" + } + } +] diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml new file mode 100644 index 0000000..59112a8 --- /dev/null +++ b/deploy/docker-compose.yml @@ -0,0 +1,151 @@ +version: '3.1' + +networks: + beacon-priv: + idp-priv: + pub: + +services: + + ########################################### + # beacon-ri-tools + ########################################### + + beacon-ri-tools: + image: beacon2ri/beacon_reference_implementation:v2.0.0 + hostname: beacon-ri-tools + networks: + - beacon-priv + tty: true + + ########################################### + # training-ui + ########################################### + + training-ui: + image: beacon2ri/training_ui:v0.1 + hostname: beacon_training_ui + ports: + - 8080:8080 + networks: + - beacon-priv + + ########################################### + # MongoDB Database + ########################################### + + db: + image: mongo:5 + hostname: mongo + ports: + - 27017:27017 + environment: + MONGO_INITDB_ROOT_USERNAME: root + MONGO_INITDB_ROOT_PASSWORD: example + MONGO_INITDB_DATABASE: beacon + volumes: + - ./mongo-init/:/docker-entrypoint-initdb.d/:ro + networks: + - beacon-priv + + mongo-express: + image: mongo-express + restart: always + ports: + - 8081:8081 + environment: + ME_CONFIG_MONGODB_ADMINUSERNAME: root + ME_CONFIG_MONGODB_ADMINPASSWORD: example + ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/ + networks: + - beacon-priv + + ########################################### + # Beacon + ########################################### + + beacon: + build: .. + image: egarchive/beacon:2.0 + hostname: beacon + container_name: beacon + volumes: + # - ../beacon:/beacon/beacon # inject the code, so we see the modifications "live" + # - ../ui/static:/beacon/ui/static + # - ../ui/templates:/beacon/ui/templates + - ./conf.py:/beacon/beacon/conf.py + - ./logger.yml:/beacon/beacon/logger.yml + - ./ontologies:/beacon/ontologies + ports: + - "5050:5050" + networks: + - beacon-priv + - pub + working_dir: '/beacon' + entrypoint: ['python','-m','beacon'] + # entrypoint: ['/bin/sleep','100000000'] + + ########################################### + # Dummy Permissions server + ########################################### + + permissions: + image: egarchive/beacon:2.0 + hostname: beacon-permissions + container_name: beacon-permissions + volumes: + - ../permissions/:/beacon/permissions/ # inject the code, so we see the modifications "live" + - ./logger.yml:/beacon/logger.yml + ports: + - "5051:5051" + networks: + - beacon-priv + - pub + #entrypoint: ['/bin/sleep','100000000'] + working_dir: '/beacon' + entrypoint: ['python','-m', 'permissions'] + + ########################################### + # Local Identity Provider + ########################################### + # Keycloak is so slow to boot that the DB goes faster + # and we don't need a delay in-between. We can rely on the depends_on only. + + idp: + image: jboss/keycloak + hostname: idp + container_name: idp + environment: + # - KEYCLOAK_FRONTEND_URL=http://idp:8080/auth + # - KEYCLOAK_LOGLEVEL=DEBUG + # - ROOT_LOGLEVEL=DEBUG + - KEYCLOAK_USER=admin + - KEYCLOAK_PASSWORD=secret + - DB_USER=admin + - DB_PASSWORD=secret + - DB_VENDOR=postgres + - DB_ADDR=idp-db + - DB_PORT=5432 + - DB_DATABASE=keycloak + #- DB_SCHEMA=public + - KEYCLOAK_IMPORT=/tmp/beacon-realm.json -Dkeycloak.profile.feature.upload_scripts=enabled + volumes: + - ./beacon-realm.json:/tmp/beacon-realm.json + ports: + - "8082:8082" + networks: + - pub + - idp-priv + depends_on: + - idp-db + + idp-db: + image: postgres + hostname: idp-db + container_name: idp-db + environment: + - POSTGRES_DB=keycloak + - POSTGRES_USER=admin + - POSTGRES_PASSWORD=secret + networks: + - idp-priv diff --git a/deploy/entrypoint.sh b/deploy/entrypoint.sh new file mode 100644 index 0000000..b541031 --- /dev/null +++ b/deploy/entrypoint.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -e + +supervisord -c /beacon/supervisord.conf + +exec nginx -c /beacon/nginx.conf -g "daemon off;" \ No newline at end of file diff --git a/deploy/extract_filtering_terms.py b/deploy/extract_filtering_terms.py new file mode 100644 index 0000000..af2a506 --- /dev/null +++ b/deploy/extract_filtering_terms.py @@ -0,0 +1,207 @@ +import os.path +import urllib.request +from typing import List, Dict, Optional +import re +from urllib.error import HTTPError + +import requests +import owlready2 +from pymongo.mongo_client import MongoClient +import progressbar +from bson.objectid import ObjectId +from owlready2 import OwlReadyOntologyParsingError +from tqdm import tqdm + +ONTOLOGY_REGEX = re.compile(r"([_A-Za-z]+):(\w+)") + +client = MongoClient( + "mongodb://127.0.0.1:27017/" +) + +class MyProgressBar: + def __init__(self): + self.pbar = None + + def __call__(self, block_num: int, block_size: int, total_size: int): + if not self.pbar: + self.pbar = progressbar.ProgressBar(maxval=total_size) + self.pbar.start() + + downloaded = block_num * block_size + if downloaded < total_size: + self.pbar.update(downloaded) + else: + self.pbar.finish() + + +def insert_all_ontology_terms_used(): + collections = client.beacon.list_collection_names() + if 'filtering_terms' in collections: + collections.remove('filtering_terms') + print("Collections:", collections) + for c_name in collections: + terms = find_ontology_terms_used(c_name) + if len(terms) > 0: + client.beacon.filtering_terms.insert_many(terms) + + +def get_ontology_name(ontology: owlready2.Ontology) -> str: + ontology_url = "https://www.ebi.ac.uk/ols/api/ontologies/{}".format(ontology.name) + try: + return requests.get(ontology_url).json()["config"]["title"] + except: + return ontology.name + + +def load_ontology_obo(ontology_id: str) -> Optional[owlready2.Ontology]: + if ontology_id.isalpha(): + url = "https://www.ebi.ac.uk/{}/{}.obo".format(ontology_id.lower(), ontology_id.lower()) + path = "ontologies/{}.obo".format(ontology_id) + try: + if not os.path.exists(path): + urllib.request.urlretrieve(url, path, MyProgressBar()) + return owlready2.get_ontology(path).load() + except HTTPError: + # TODO: Handle error + print("ERROR", HTTPError) + pass + except OwlReadyOntologyParsingError: + # TODO: Handle error + pass + +def load_ontology(ontology_id: str) -> Optional[owlready2.Ontology]: + if ontology_id.isalpha(): + url = "https://www.ebi.ac.uk/ols/ontologies/{}/download".format(ontology_id) + path = "ontologies/{}.owl".format(ontology_id) + try: + if not os.path.exists(path): + urllib.request.urlretrieve(url, path, MyProgressBar()) + return owlready2.get_ontology(path).load() + except HTTPError: + # TODO: Handle error + print("ERROR", HTTPError) + pass + except OwlReadyOntologyParsingError: + # TODO: Handle error + pass + + +def get_ontology_term_label(ontology: owlready2.Ontology, term: str) -> Optional[str]: + ontology_class_name = term.replace(':', '_') + res = ontology.search(iri="*{}".format(ontology_class_name)) + for c in res: + if c.name == ontology_class_name: + if len(c.label) > 0: + return c.label.first() + else: + return c.name + return None + + +def get_ontology_term_count(collection_name: str, term: str) -> int: + query = { + '$text': { + '$search': '\"' + term + '\"' + } + } + return client.beacon\ + .get_collection(collection_name)\ + .count_documents(query) + + +def find_ontology_terms_used(collection_name: str) -> List[Dict]: + terms = [] + terms_ids = set() + ontologies = dict() + count = client.beacon.get_collection(collection_name).estimated_document_count() + xs = client.beacon.get_collection(collection_name).find() + for r in tqdm(xs, total=count): + matches = ONTOLOGY_REGEX.findall(str(r)) + for ontology_id, term_id in matches: + term = ':'.join([ontology_id, term_id]) + print(term, ontology_id) + if term not in terms_ids: + terms_ids.add(term) + if ontology_id not in ontologies: + ontologies[ontology_id] = load_ontology(ontology_id) + if ontologies[ontology_id] is not None: + terms.append({ + 'type': get_ontology_name(ontologies[ontology_id]), + 'id': term, + 'label': get_ontology_term_label(ontologies[ontology_id], term), + # TODO: Use conf.py -> beaconGranularity to not disclouse counts in the filtering terms + 'count': get_ontology_term_count(collection_name, term), + 'collection': collection_name, + }) + return terms + + +def get_alphanumeric_term_count(collection_name: str, key: str) -> int: + return len(client.beacon\ + .get_collection(collection_name)\ + .distinct(key)) + + +def get_properties_of_document(document, prefix="") -> List[str]: + properties = [] + if document is None or isinstance(document, str) or isinstance(document, int): + return [] + elif isinstance(document, list): + for elem in document: + properties += get_properties_of_document(elem, prefix) + elif isinstance(document, dict): + for key, value in document.items(): + if isinstance(value, ObjectId): + continue + elif value is None: + properties.append(prefix + '.' + key if prefix else key) + elif isinstance(value, int): + properties.append(prefix + '.' + key if prefix else key) + elif isinstance(value, str): + properties.append(prefix + '.' + key if prefix else key) + elif isinstance(value, list): + properties += get_properties_of_document(value, prefix + '.' + key if prefix else key) + elif isinstance(value, dict): + properties += get_properties_of_document(value, prefix + '.' + key if prefix else key) + else: + print('Unknown type:', value, ' (', type(value), ')') + exit(0) + else: + print('Unknown type2:', document, ' (', type(document), ')') + exit(0) + return properties + + +def find_alphanumeric_terms_used(collection_name: str) -> List[Dict]: + terms = [] + terms_ids = set() + count = client.beacon.get_collection(collection_name).estimated_document_count() + xs = client.beacon.get_collection(collection_name).find() + for r in tqdm(xs, total=count): + properties = get_properties_of_document(r) + for p in properties: + if p not in terms_ids: + terms_ids.add(p) + terms.append({ + 'type': 'alphanumeric', + 'id': p, + 'count': get_alphanumeric_term_count(collection_name, p), + 'collection': collection_name, + }) + return terms + + +def insert_all_alphanumeric_terms_used(): + collections = client.beacon.list_collection_names() + if 'filtering_terms' in collections: + collections.remove('filtering_terms') + print("Collections:", collections) + for c_name in collections: + terms = find_alphanumeric_terms_used(c_name) + print(terms) + if len(terms) > 0: + client.beacon.filtering_terms.insert_many(terms) + + +insert_all_ontology_terms_used() +insert_all_alphanumeric_terms_used() diff --git a/deploy/fetch_ontologies.py b/deploy/fetch_ontologies.py new file mode 100644 index 0000000..c07a13f --- /dev/null +++ b/deploy/fetch_ontologies.py @@ -0,0 +1,48 @@ +# Query MongoDB to retrieve all of the ontologies used +from typing import Set +import re +from urllib.error import HTTPError +from pymongo.mongo_client import MongoClient + +import urllib.request +import os +from tqdm import tqdm +import conf + +ONTOLOGY_REGEX = re.compile(r"([_A-Za-z]+):(\w+)") + +client = MongoClient( + "mongodb://127.0.0.1:27017/") +def find_all_ontologies_used() -> Set[str]: + ontologies = set() + for c_name in ["analyses", "biosamples", "cohorts", "genomicVariations", "datasets", "individuals", "runs"]: + ontologies_aux = find_ontologies_used(c_name) + ontologies = ontologies.union(ontologies_aux) + return ontologies + + +def find_ontologies_used(collection_name: str) -> Set[str]: + terms = set() + count = client.beacon.get_collection(collection_name).estimated_document_count() + xs = client.beacon.get_collection(collection_name).find() + for r in tqdm(xs, total=count): + matches = ONTOLOGY_REGEX.findall(str(r)) + for match0, match1 in matches: + terms.add(match0) + return terms + + +# Try to download each of the ontologies to the ontologies folder +list_of_ontologies = find_all_ontologies_used() + +if len(list_of_ontologies) > 0 and not os.path.exists("ontologies"): + os.mkdir("ontologies") + +for ontology in tqdm(list_of_ontologies): + if ontology.isalpha(): + url = "https://www.ebi.ac.uk/ols/ontologies/{}/download".format(ontology) + path = "ontologies/{}.owl".format(ontology) + try: + response = urllib.request.urlretrieve(url, path) + except HTTPError: + continue diff --git a/deploy/generate_json.sh b/deploy/generate_json.sh new file mode 100644 index 0000000..bc89af5 --- /dev/null +++ b/deploy/generate_json.sh @@ -0,0 +1,63 @@ + +MODEL_REPO_URL="https://github.com/MrRobb/beacon-v2-Models.git" +FRAMEWORK_REPO_URL="https://github.com/MrRobb/beacon-framework-v2.git" + +MODEL_REPLACE_URL="https:\/\/raw.githubusercontent.com\/ga4gh-beacon\/beacon-v2-Models\/main\/" +FRAMEWORK_REPLACE_URL="https:\/\/raw.githubusercontent.com\/ga4gh-beacon\/beacon-framework-v2\/main\/" + +MODEL_REPO_LOCATION="beacon-v2-Models" +FRAMEWORK_REPO_LOCATION="beacon-framework-v2" + +DATA_FOLDER="data" + +# Clean +rm -rf ${MODEL_REPO_LOCATION} ${FRAMEWORK_REPO_LOCATION} ${DATA_FOLDER} + +# Create data folder +mkdir ${DATA_FOLDER} + +# Download repositories +git clone ${MODEL_REPO_URL} ${MODEL_REPO_LOCATION} +git clone ${FRAMEWORK_REPO_URL} ${FRAMEWORK_REPO_LOCATION} + +# Remove endpoints.json files +find ${MODEL_REPO_LOCATION} -type f -name "endpoints.json" -delete +find ${FRAMEWORK_REPO_LOCATION} -type f -name "endpoints.json" -delete + +# Replace references +case "$(uname -s)" in + + Darwin) + echo 'Mac OS X' + find ${MODEL_REPO_LOCATION} -type f -name "*.json" -exec sed -i ".bak" "s/${MODEL_REPLACE_URL}/${MODEL_REPO_LOCATION}/g" {} + + find ${FRAMEWORK_REPO_LOCATION} -type f -name "*.json" -exec sed -i ".bak" "s/${FRAMEWORK_REPLACE_URL}/${FRAMEWORK_REPO_LOCATION}/g" {} + + ;; + + Linux) + echo 'Linux' + find ${MODEL_REPO_LOCATION} -type f -name "*.json" -exec sed -i "s/${MODEL_REPLACE_URL}/${MODEL_REPO_LOCATION}/g" {} + + find ${FRAMEWORK_REPO_LOCATION} -type f -name "*.json" -exec sed -i "s/${FRAMEWORK_REPLACE_URL}/${FRAMEWORK_REPO_LOCATION}/g" {} + + ;; + + *) + echo 'Other OS: Not supported' +esac + +# Resolve references +# npm install -g json-dereference-cli +python3 cleanup_json.py ${MODEL_REPO_LOCATION} +python3 cleanup_json.py ${FRAMEWORK_REPO_LOCATION} + + +# Generate fake schemas +# npm install -g json-schema-faker-cli +for i in $(seq 1 $1) +do + fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/analyses/defaultSchema.json" > "${DATA_FOLDER}/analyses${i}.json" + fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/biosamples/defaultSchema.json" > "${DATA_FOLDER}/biosamples${i}.json" + fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/cohorts/defaultSchema.json" > "${DATA_FOLDER}/cohorts${i}.json" + fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/datasets/defaultSchema.json" > "${DATA_FOLDER}/datasets${i}.json" + fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/genomicVariations/defaultSchema.json" > "${DATA_FOLDER}/genomicVariations${i}.json" + fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/individuals/defaultSchema.json" > "${DATA_FOLDER}/individuals${i}.json" + fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/runs/defaultSchema.json" > "${DATA_FOLDER}/runs${i}.json" +done diff --git a/deploy/load_json.py b/deploy/load_json.py new file mode 100644 index 0000000..7a6c8ac --- /dev/null +++ b/deploy/load_json.py @@ -0,0 +1,36 @@ +import json +import argparse +from pymongo.mongo_client import MongoClient + +entities = ["analyses", "biosamples", "cohorts", "datasets", "genomicVariations", "individuals", "runs"] + +def main(): + parser = argparse.ArgumentParser("JSON MongoDB Loader") + + parser.add_argument("--db", dest="db", action="store", help="Database URI", required=True) + parser.add_argument("--files", dest="files", action="store", help="JSON Files path", required=True, nargs='+') + parser.add_argument("--collection", dest="collection", action="store", help="Collection to store the data", required=True, choices=entities) + + args = parser.parse_args() + + print(args.files, "->", args.db, "[", args.collection, "]") + + all_instances = [] + + for file in args.files: + with open(file, 'r') as json_file: + data = json.load(json_file) + if isinstance(data, dict): + print("Loading multiple files with one instance each") + all_instances.append(data) + else: + print("Loading only one file with multiple instances") + all_instances = data + break + + client = MongoClient(args.db) + client.beacon.get_collection(args.collection).insert_many(all_instances) + print("DONE!") + +if __name__ == "__main__": + main() diff --git a/deploy/logger.yml b/deploy/logger.yml new file mode 100644 index 0000000..fc735f0 --- /dev/null +++ b/deploy/logger.yml @@ -0,0 +1,32 @@ +--- +version: 1 +#disable_existing_loggers: True +root: + level: NOTSET + handlers: [ noHandler ] + +loggers: + __main__: + level: DEBUG + handlers: [ console ] + beacon: + level: DEBUG + handlers: [ console ] + propagate: True + aiohttp: + level: INFO + handlers: [ console ] + +handlers: + noHandler: + class: logging.NullHandler + level: NOTSET + console: + class: logging.StreamHandler + formatter: simple + stream: ext://sys.stderr + +formatters: + simple: + format: "[{name:^10}][{levelname:^6}] (L{lineno}) {message}" + style: "{" diff --git a/deploy/mongo-init/init.js b/deploy/mongo-init/init.js new file mode 100644 index 0000000..a4112e9 --- /dev/null +++ b/deploy/mongo-init/init.js @@ -0,0 +1,27 @@ +conn = new Mongo({ useUnifiedTopology: true }); +db = conn.getDB("beacon"); + + +// db.beacon.createIndex({ "address.zip": 1 }, { unique: false }); +// db.beacon.insert({ "address": { "city": "Paris", "zip": "123" }, "name": "Mike", "phone": "1234" }); +// db.beacon.insert({ "address": { "city": "Marsel", "zip": "321" }, "name": "Helga", "phone": "4321" }); + +// Create collections + +db.createCollection("analyses"); +db.createCollection("biosamples"); +db.createCollection("cohorts"); +db.createCollection("datasets"); +db.createCollection("genomicVariations"); +db.createCollection("individuals"); +db.createCollection("runs"); + +// Create indexes for all the entities in the database + +db.analyses.createIndex([('$**', 'text')]); +db.biosamples.createIndex([('$**', 'text')]); +db.cohorts.createIndex([('$**', 'text')]); +db.datasets.createIndex([('$**', 'text')]); +db.genomicVariations.createIndex([('$**', 'text')]); +db.individuals.createIndex([('$**', 'text')]); +db.runs.createIndex([('$**', 'text')]); diff --git a/deploy/nginx.conf b/deploy/nginx.conf new file mode 100644 index 0000000..c40d68c --- /dev/null +++ b/deploy/nginx.conf @@ -0,0 +1,131 @@ +# user beacon; +worker_processes auto; +pid /var/run/beacon/nginx.pid; +include /etc/nginx/modules-enabled/*.conf; + +events { + worker_connections 768; + # multi_accept on; +} + +http { + + ## + # Basic Settings + ## + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + # server_tokens off; + + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ## + # SSL Settings + ## + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## + # Logging Settings + ## + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + ## + # Gzip Settings + ## + + gzip on; + + # gzip_vary on; + # gzip_proxied any; + # gzip_comp_level 6; + # gzip_buffers 16 8k; + # gzip_http_version 1.1; + # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + ## + # Virtual Host Configs + ## + upstream beacon { + # fail_timeout=0 means we always retry an upstream even if it failed + # to return a good HTTP response + + # Unix domain servers + server unix:/var/run/beacon/instance_1.sock fail_timeout=0; + server unix:/var/run/beacon/instance_2.sock fail_timeout=0; + server unix:/var/run/beacon/instance_3.sock fail_timeout=0; + server unix:/var/run/beacon/instance_4.sock fail_timeout=0; + + # Unix domain sockets are used in this example due to their high performance, + # but TCP/IP sockets could be used instead: + # server 127.0.0.1:8081 fail_timeout=0; + # server 127.0.0.1:8082 fail_timeout=0; + # server 127.0.0.1:8083 fail_timeout=0; + # server 127.0.0.1:8084 fail_timeout=0; + } + + server { + listen 8080 default_server; + listen [::]:8080 default_server; + + server_name _; + client_max_body_size 4G; + + location /static { + root /beacon; + expires max; + add_header Pragma public; + add_header Cache-Control "public, must-revalidate, proxy-revalidate"; + } + + + location / { + + + # Adding the wide-open CORS settings + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + # + # Custom headers and headers various browsers *should* be OK with but aren't + # + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + # Tell client that this pre-flight info is valid for 20 days + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; + } + if ($request_method = 'POST') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; + } + if ($request_method = 'GET') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; + } + + # Forward to the upstream + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_redirect off; + proxy_buffering off; + proxy_pass http://beacon; + } + } +} \ No newline at end of file diff --git a/deploy/reindex.py b/deploy/reindex.py new file mode 100644 index 0000000..4cac882 --- /dev/null +++ b/deploy/reindex.py @@ -0,0 +1,21 @@ +from pymongo.mongo_client import MongoClient +import conf + +client = MongoClient( + "mongodb://{}:{}@{}:{}/{}?authSource={}".format( + conf.database_user, + conf.database_password, + conf.database_host, + conf.database_port, + conf.database_name, + conf.database_auth_source, + ) +) + +client.beacon.analyses.create_index([("$**", "text")]) +client.beacon.biosamples.create_index([("$**", "text")]) +client.beacon.cohorts.create_index([("$**", "text")]) +client.beacon.datasets.create_index([("$**", "text")]) +client.beacon.genomicVariations.create_index([("$**", "text")]) +client.beacon.individuals.create_index([("$**", "text")]) +client.beacon.runs.create_index([("$**", "text")]) diff --git a/deploy/supervisord.conf b/deploy/supervisord.conf new file mode 100644 index 0000000..120fe6e --- /dev/null +++ b/deploy/supervisord.conf @@ -0,0 +1,28 @@ +; supervisor config file + +; [unix_http_server] +; file=/var/run/supervisor.sock ; (the path to the socket file) +; chmod=0700 ; sockef file mode (default 0700) + +; ; Manager web interface +; [inet_http_server] +; port = 9001 +; username = user ; Basic auth username +; password = pass ; Basic auth password + +[supervisord] +logfile=/var/log/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log) +pidfile=/var/run/beacon/supervisord.pid ; (supervisord pidfile;default supervisord.pid) +childlogdir=/var/log/supervisord ; ('AUTO' child log dir, default $TEMP) + +[program:beacon] +numprocs = 4 +numprocs_start = 1 +process_name = beacon_%(process_num)s + +; Unix socket paths are specified by command line. +command=python -m beacon /var/run/beacon/instance_%(process_num)s.sock + +user=beacon +autostart=true +autorestart=true \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..c0541f9 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,70 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `yarn start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in your browser. + +The page will reload when you make changes.\ +You may also see any lint errors in the console. + +### `yarn test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `yarn build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `yarn eject` + +**Note: this is a one-way operation. Once you `eject`, you can't go back!** + +If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. + +You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `yarn build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..b637426 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,45 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^13.0.0", + "@testing-library/user-event": "^13.2.1", + "axios": "1.1.3", + "bootstrap": "5.2.2", + "bootswatch": "5.2.2", + "formik": "2.2.9", + "react": "^18.2.0", + "react-bootstrap": "2.6.0", + "react-dom": "^18.2.0", + "react-router-bootstrap": "0.26.2", + "react-router-dom": "6.4.3", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.0" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000..a11777c Binary files /dev/null and b/frontend/public/favicon.ico differ diff --git a/frontend/public/index.html b/frontend/public/index.html new file mode 100644 index 0000000..aa069f2 --- /dev/null +++ b/frontend/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/frontend/public/logo192.png b/frontend/public/logo192.png new file mode 100644 index 0000000..fc44b0a Binary files /dev/null and b/frontend/public/logo192.png differ diff --git a/frontend/public/logo512.png b/frontend/public/logo512.png new file mode 100644 index 0000000..a4e47a6 Binary files /dev/null and b/frontend/public/logo512.png differ diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/frontend/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/frontend/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..74b5e05 --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,38 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; + pointer-events: none; +} + +@media (prefers-reduced-motion: no-preference) { + .App-logo { + animation: App-logo-spin infinite 20s linear; + } +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/frontend/src/App.js b/frontend/src/App.js new file mode 100644 index 0000000..3784575 --- /dev/null +++ b/frontend/src/App.js @@ -0,0 +1,25 @@ +import logo from './logo.svg'; +import './App.css'; + +function App() { + return ( +
+
+ logo +

+ Edit src/App.js and save to reload. +

+ + Learn React + +
+
+ ); +} + +export default App; diff --git a/frontend/src/App.test.js b/frontend/src/App.test.js new file mode 100644 index 0000000..1f03afe --- /dev/null +++ b/frontend/src/App.test.js @@ -0,0 +1,8 @@ +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..ec2585e --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/frontend/src/index.js b/frontend/src/index.js new file mode 100644 index 0000000..d563c0f --- /dev/null +++ b/frontend/src/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/frontend/src/logo.svg b/frontend/src/logo.svg new file mode 100644 index 0000000..9dfc1c0 --- /dev/null +++ b/frontend/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/reportWebVitals.js b/frontend/src/reportWebVitals.js new file mode 100644 index 0000000..5253d3a --- /dev/null +++ b/frontend/src/reportWebVitals.js @@ -0,0 +1,13 @@ +const reportWebVitals = onPerfEntry => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/frontend/src/setupTests.js b/frontend/src/setupTests.js new file mode 100644 index 0000000..8f2609b --- /dev/null +++ b/frontend/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 0000000..8183b0e --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,9485 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adobe/css-tools@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.2.tgz#bd7d13543a186c3ff3eabb44bec2b22e8fb18ee0" + integrity sha512-Fx6tYjk2wKUgLi8uMANZr8GNZx05u44ArIJldn9VxLvolzlJVgHbTUCbwhMd6bcYky178+WUSxPHO3DAtGLWpw== + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" + integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": + version "7.20.10" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" + integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== + +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.20.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" + integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helpers" "^7.20.7" + "@babel/parser" "^7.20.7" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.12" + "@babel/types" "^7.20.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/eslint-parser@^7.16.3": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4" + integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + +"@babel/generator@^7.20.7", "@babel/generator@^7.7.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" + integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7": + version "7.20.12" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819" + integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" + integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.2.1" + +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" + integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== + dependencies: + "@babel/types" "^7.20.7" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.10" + "@babel/types" "^7.20.7" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" + integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/helpers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" + integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" + integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" + +"@babel/plugin-proposal-async-generator-functions@^7.20.1": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz#92592e9029b13b15be0f7ce6a7aedc2879ca45a7" + integrity sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-decorators@^7.16.4": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz#05d37453c2ce818f3e47bbeda9468c8de947eecc" + integrity sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/plugin-syntax-decorators" "^7.19.0" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.20.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz#49f2b372519ab31728cc14115bb0998b15bfda55" + integrity sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135" + integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" + integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" + integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" + integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.20.2": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz#9f5a3424bd112a3f32fe0cf9364fbb155cff262a" + integrity sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-classes@^7.20.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz#f438216f094f6bb31dc266ebfab8ff05aecad073" + integrity sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" + integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" + +"@babel/plugin-transform-destructuring@^7.20.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz#8bda578f71620c7de7c93af590154ba331415454" + integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-flow-strip-types@^7.16.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f" + integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-flow" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.19.6": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-modules-commonjs@^7.19.6": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607" + integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-simple-access" "^7.20.2" + +"@babel/plugin-transform-modules-systemjs@^7.19.6": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz#0ee349e9d1bc96e78e3b37a7af423a4078a7083f" + integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz#3f02c784e0b711970d7d8ccc96c4359d64e27ac7" + integrity sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz#025d85a1935fd7e19dfdcb1b1d4df34d4da484f7" + integrity sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.20.7" + +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.16.4": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194" + integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.19.0": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.18.6": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz#673f49499cd810ae32a1ea5f3f8fab370987e055" + integrity sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" + integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== + dependencies: + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.20.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.20.2" + "@babel/plugin-transform-classes" "^7.20.2" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.20.2" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.19.6" + "@babel/plugin-transform-modules-commonjs" "^7.19.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + +"@babel/preset-typescript@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" + +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.20.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" + integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2": + version "7.20.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5" + integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@csstools/normalize.css@*": + version "12.0.0" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" + integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg== + +"@csstools/postcss-cascade-layers@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz#8a997edf97d34071dd2e37ea6022447dd9e795ad" + integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== + dependencies: + "@csstools/selector-specificity" "^2.0.2" + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-color-function@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" + integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-font-format-keywords@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" + integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-hwb-function@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" + integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-ic-unit@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" + integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-is-pseudo-class@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" + integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== + dependencies: + "@csstools/selector-specificity" "^2.0.0" + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-nested-calc@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" + integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-normalize-display-values@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" + integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-oklab-function@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" + integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" + integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-stepped-value-functions@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" + integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-text-decoration-shorthand@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" + integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-trigonometric-functions@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" + integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-unset-value@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" + integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== + +"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" + integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== + +"@eslint/eslintrc@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + +"@jest/expect-utils@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.3.1.tgz#531f737039e9b9e27c42449798acb5bba01935b6" + integrity sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g== + dependencies: + jest-get-type "^29.2.0" + +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/schemas@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" + integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.9" + source-map "^0.6.0" + +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + dependencies: + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" + +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jest/types@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" + integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== + dependencies: + "@jest/schemas" "^29.0.0" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + dependencies: + eslint-scope "5.1.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pmmmwh/react-refresh-webpack-plugin@^0.5.3": + version "0.5.10" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz#2eba163b8e7dbabb4ce3609ab5e32ab63dda3ef8" + integrity sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA== + dependencies: + ansi-html-community "^0.0.8" + common-path-prefix "^3.0.0" + core-js-pure "^3.23.3" + error-stack-parser "^2.0.6" + find-up "^5.0.0" + html-entities "^2.1.0" + loader-utils "^2.0.4" + schema-utils "^3.0.0" + source-map "^0.7.3" + +"@popperjs/core@^2.11.6": + version "2.11.6" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" + integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== + +"@react-aria/ssr@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.4.1.tgz#79e8bb621487e8f52890c917d3c734f448ba95e7" + integrity sha512-NmhoilMDyIfQiOSdQgxpVH2tC2u85Y0mVijtBNbI9kcDYLEiW/r6vKYVKtkyU+C4qobXhGMPfZ70PTc0lysSVA== + dependencies: + "@swc/helpers" "^0.4.14" + +"@remix-run/router@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.3.tgz#953b88c20ea00d0eddaffdc1b115c08474aa295d" + integrity sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q== + +"@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7": + version "0.4.7" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.7.tgz#d79ca6472c01ce04389fc73d4a79af1b5e33cd39" + integrity sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A== + dependencies: + dequal "^2.0.2" + +"@restart/ui@^1.4.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.5.1.tgz#ced0d28196b02b3d6ab51e09d81d903ca33e96e0" + integrity sha512-uPFE2ALgvtLetlzCQQz02Wa6DoVZ15WnvQmH3DwxC6Lh1BxbpmCR/rkYJKHcYvyJNWfC0AQn3R7xG4NddFiEhA== + dependencies: + "@babel/runtime" "^7.20.7" + "@popperjs/core" "^2.11.6" + "@react-aria/ssr" "^3.4.1" + "@restart/hooks" "^0.4.7" + "@types/warning" "^3.0.0" + dequal "^2.0.3" + dom-helpers "^5.2.0" + uncontrollable "^7.2.1" + warning "^4.0.3" + +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rushstack/eslint-patch@^1.1.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" + integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== + +"@sinclair/typebox@^0.24.1": + version "0.24.51" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== + +"@sinonjs/commons@^1.7.0": + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@swc/helpers@^0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + dependencies: + tslib "^2.4.0" + +"@testing-library/dom@^8.5.0": + version "8.20.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.0.tgz#914aa862cef0f5e89b98cc48e3445c4c921010f6" + integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "^5.0.0" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.4.4" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^5.14.1": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" + integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== + dependencies: + "@adobe/css-tools" "^4.0.1" + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^5.0.0" + chalk "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" + +"@testing-library/react@^13.0.0": + version "13.4.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966" + integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^8.5.0" + "@types/react-dom" "^18.0.0" + +"@testing-library/user-event@^13.2.1": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-13.5.0.tgz#69d77007f1e124d55314a2b73fd204b333b13295" + integrity sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg== + dependencies: + "@babel/runtime" "^7.12.5" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/aria-query@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" + integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": + version "7.1.20" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.20.tgz#e168cdd612c92a2d335029ed62ac94c95b362359" + integrity sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.18.3" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== + dependencies: + "@babel/types" "^7.3.0" + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": + version "8.4.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" + integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.31": + version "4.17.32" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82" + integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.15" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff" + integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.31" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + dependencies: + "@types/node" "*" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@*": + version "29.2.5" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.5.tgz#c27f41a9d6253f288d1910d3c5f09484a56b73c0" + integrity sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/node@*": + version "18.11.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" + integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.1.5": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/q@^1.5.1": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-dom@^18.0.0": + version "18.0.10" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.10.tgz#3b66dec56aa0f16a6cc26da9e9ca96c35c0b4352" + integrity sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@^4.4.4": + version "4.4.5" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" + integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@>=16.9.11": + version "18.0.26" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" + integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" + integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/testing-library__jest-dom@^5.9.1": + version "5.14.5" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f" + integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ== + dependencies: + "@types/jest" "*" + +"@types/trusted-types@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" + integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== + +"@types/warning@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" + integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA== + +"@types/ws@^8.5.1": + version "8.5.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^16.0.0": + version "16.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" + integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.19" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.19.tgz#8dbecdc9ab48bee0cb74f6e3327de3fa0d0c98ae" + integrity sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.5.0": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3" + integrity sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg== + dependencies: + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/type-utils" "5.48.2" + "@typescript-eslint/utils" "5.48.2" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.48.2.tgz#04057cd6e96d225a6ed10e6881086add6c230781" + integrity sha512-Iwx8De8dwl6qPaPZWIaEfP1feN/YFlA5FlCxF3zUIm+2AG92C5Tefkugj2L9ytOFrmTYkTE/CqvJFZbYoVZQMg== + dependencies: + "@typescript-eslint/utils" "5.48.2" + +"@typescript-eslint/parser@^5.5.0": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.2.tgz#c9edef2a0922d26a37dba03be20c5fff378313b3" + integrity sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw== + dependencies: + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz#bb7676cb78f1e94921eaab637a4b5d596f838abc" + integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw== + dependencies: + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" + +"@typescript-eslint/type-utils@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz#7d3aeca9fa37a7ab7e3d9056a99b42f342c48ad7" + integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew== + dependencies: + "@typescript-eslint/typescript-estree" "5.48.2" + "@typescript-eslint/utils" "5.48.2" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e" + integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA== + +"@typescript-eslint/typescript-estree@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0" + integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg== + dependencies: + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.48.2", "@typescript-eslint/utils@^5.13.0": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3" + integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060" + integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ== + dependencies: + "@typescript-eslint/types" "5.48.2" + eslint-visitor-keys "^3.3.0" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.3, abab@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-node@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0, acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.0.0, acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +address@^1.0.1, address@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +adjust-sourcemap-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" + integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.0.0, aria-query@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.1.5, array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.reduce@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" + integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.4.13: + version "10.4.13" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" + integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== + dependencies: + browserslist "^4.21.4" + caniuse-lite "^1.0.30001426" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axe-core@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.2.tgz#6e566ab2a3d29e415f5115bc0fd2597a5eb3e5e3" + integrity sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg== + +axios@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.1.3.tgz#8274250dada2edf53814ed7db644b9c2866c1e35" + integrity sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" + integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== + dependencies: + deep-equal "^2.0.5" + +babel-jest@^27.4.2, babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-loader@^8.2.3: + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + +babel-plugin-named-asset-import@^0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" + integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== + +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +babel-plugin-transform-react-remove-prop-types@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== + dependencies: + babel-plugin-jest-hoist "^27.5.1" + babel-preset-current-node-syntax "^1.0.0" + +babel-preset-react-app@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz#ed6005a20a24f2c88521809fa9aea99903751584" + integrity sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg== + dependencies: + "@babel/core" "^7.16.0" + "@babel/plugin-proposal-class-properties" "^7.16.0" + "@babel/plugin-proposal-decorators" "^7.16.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" + "@babel/plugin-proposal-numeric-separator" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-transform-flow-strip-types" "^7.16.0" + "@babel/plugin-transform-react-display-name" "^7.16.0" + "@babel/plugin-transform-runtime" "^7.16.4" + "@babel/preset-env" "^7.16.4" + "@babel/preset-react" "^7.16.0" + "@babel/preset-typescript" "^7.16.0" + "@babel/runtime" "^7.16.3" + babel-plugin-macros "^3.1.0" + babel-plugin-transform-react-remove-prop-types "^0.4.24" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +bfj@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" + integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== + dependencies: + bluebird "^3.5.5" + check-types "^11.1.1" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.1.0" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.0.tgz#424170268d68af26ff83a5c640b95def01803a13" + integrity sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +bootstrap@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.2.2.tgz#834e053eed584a65e244d8aa112a6959f56e27a0" + integrity sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ== + +bootswatch@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/bootswatch/-/bootswatch-5.2.2.tgz#4d3d15dffd8de16112b64fa37c1164cca1543110" + integrity sha512-ByybawTUbMzzsdIb+5lYjme088UBYtNBhJCBt4W77PKG57fzjd2Y11rdGDgHgFGXVTMD2Oaci3/qJon4L0ceTQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +builtin-modules@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0, camelcase@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: + version "1.0.30001445" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001445.tgz#cf2d4eb93f2bcdf0310de9dd6d18be271bc0b447" + integrity sha512-8sdQIdMztYmzfTMO6KfLny878Ln9c2M0fc7EH60IjlP4Dc4PiCy7K2Vl3ITmWgOyPgVQKa5x+UP/KqFsxj4mBg== + +case-sensitive-paths-webpack-plugin@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" + integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== + +chalk@^2.0.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +char-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" + integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== + +check-types@^11.1.1: + version "11.2.2" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.2.tgz#7afc0b6a860d686885062f2dba888ba5710335b4" + integrity sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA== + +chokidar@^3.4.2, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^3.2.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f" + integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +classnames@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + +clean-css@^5.2.2: + version "5.3.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32" + integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== + dependencies: + source-map "~0.6.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.1.4, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^2.0.10: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confusing-browser-globals@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-js-compat@^3.25.1: + version "3.27.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.27.1.tgz#b5695eb25c602d72b1d30cbfba3cb7e5e4cf0a67" + integrity sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA== + dependencies: + browserslist "^4.21.4" + +core-js-pure@^3.23.3: + version "3.27.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.27.1.tgz#ede4a6b8440585c7190062757069c01d37a19dca" + integrity sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw== + +core-js@^3.19.2: + version "3.27.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.27.1.tgz#23cc909b315a6bb4e418bf40a52758af2103ba46" + integrity sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-blank-pseudo@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" + integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== + dependencies: + postcss-selector-parser "^6.0.9" + +css-declaration-sorter@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" + integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== + +css-has-pseudo@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" + integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== + dependencies: + postcss-selector-parser "^6.0.9" + +css-loader@^6.5.1: + version "6.7.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" + integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.19" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" + +css-minimizer-webpack-plugin@^3.2.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" + integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== + dependencies: + cssnano "^5.0.6" + jest-worker "^27.0.2" + postcss "^8.3.5" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-prefers-color-scheme@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" + integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + +cssdb@^7.1.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.2.1.tgz#f6f59e2c4249bcb5ca5606fc4ab6f9a808d55486" + integrity sha512-btohrCpVaLqOoMt90aumHe6HU4c06duiYA8ymwtpGfwuZAhWKDBve/c2k+E85Jeq5iojPkeonqiKV+aLeY8QlA== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^5.2.13: + version "5.2.13" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz#e7353b0c57975d1bdd97ac96e68e5c1b8c68e990" + integrity sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.3" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.1" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.0.6: + version "5.1.14" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.14.tgz#07b0af6da73641276fe5a6d45757702ebae2eb05" + integrity sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw== + dependencies: + cssnano-preset-default "^5.2.13" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.0.2, csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@2.6.9, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decimal.js@^10.2.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-equal@^2.0.5: + version "2.2.0" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" + integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== + dependencies: + call-bind "^1.0.2" + es-get-iterator "^1.1.2" + get-intrinsic "^1.1.3" + is-arguments "^1.1.1" + is-array-buffer "^3.0.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +defined@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" + integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +dequal@^2.0.2, dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detective@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== + dependencies: + acorn-node "^1.8.2" + defined "^1.0.0" + minimist "^1.2.6" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + +diff-sequences@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.3.1.tgz#104b5b95fe725932421a9c6e5b4bef84c3f2249e" + integrity sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.4.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" + integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: + version "0.5.15" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.15.tgz#357e74338704f36fada8b2e01a4bfc11ef436ac9" + integrity sha512-8o+oVqLQZoruQPYy3uAAQtc6YbtSiRq5aPJBhJ82YTJRHvI6ofhYAkC81WmjFTnfUbqg6T3aCglIpU9p/5e7Cw== + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.6: + version "3.1.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.4" + is-array-buffer "^3.0.1" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-get-iterator@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-react-app@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4" + integrity sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA== + dependencies: + "@babel/core" "^7.16.0" + "@babel/eslint-parser" "^7.16.3" + "@rushstack/eslint-patch" "^1.1.0" + "@typescript-eslint/eslint-plugin" "^5.5.0" + "@typescript-eslint/parser" "^5.5.0" + babel-preset-react-app "^10.0.1" + confusing-browser-globals "^1.0.11" + eslint-plugin-flowtype "^8.0.3" + eslint-plugin-import "^2.25.3" + eslint-plugin-jest "^25.3.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.27.1" + eslint-plugin-react-hooks "^4.3.0" + eslint-plugin-testing-library "^5.0.1" + +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-flowtype@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" + integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ== + dependencies: + lodash "^4.17.21" + string-natural-compare "^3.0.1" + +eslint-plugin-import@^2.25.3: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jest@^25.3.0: + version "25.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" + integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== + dependencies: + "@typescript-eslint/experimental-utils" "^5.0.0" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + dependencies: + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + ast-types-flow "^0.0.7" + axe-core "^4.6.2" + axobject-query "^3.1.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + semver "^6.3.0" + +eslint-plugin-react-hooks@^4.3.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.27.1: + version "7.32.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz#88cdeb4065da8ca0b64e1274404f53a0f9890200" + integrity sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.4" + semver "^6.3.0" + string.prototype.matchall "^4.0.8" + +eslint-plugin-testing-library@^5.0.1: + version "5.9.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz#12e4bd34c48683ee98af4df2e3318ec9f51dcf8a" + integrity sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ== + dependencies: + "@typescript-eslint/utils" "^5.13.0" + +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint-webpack-plugin@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c" + integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w== + dependencies: + "@types/eslint" "^7.29.0 || ^8.4.1" + jest-worker "^28.0.2" + micromatch "^4.0.5" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + +eslint@^8.3.0: + version "8.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861" + integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ== + dependencies: + "@eslint/eslintrc" "^1.4.1" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + +expect@^29.0.0: + version "29.3.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.3.1.tgz#92877aad3f7deefc2e3f6430dd195b92295554a6" + integrity sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA== + dependencies: + "@jest/expect-utils" "^29.3.1" + jest-get-type "^29.2.0" + jest-matcher-utils "^29.3.1" + jest-message-util "^29.3.1" + jest-util "^29.3.1" + +express@^4.17.3: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +filelist@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.0.0, follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" + integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formik@2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" + integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== + dependencies: + deepmerge "^2.1.1" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.21" + lodash-es "^4.17.21" + react-fast-compare "^2.0.1" + tiny-warning "^1.0.2" + tslib "^1.10.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0, fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.19.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" + integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^2.1.0, html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-webpack-plugin@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" + integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +idb@^7.0.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" + integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + +identity-obj-proxy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== + dependencies: + harmony-reflect "^1.4.6" + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +immer@^9.0.7: + version "9.0.18" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.18.tgz#d2faee58fd0e34f017f329b98cdab37826fa31b8" + integrity sha512-eAPNpsj7Ax1q6Y/3lm2PmlwRcFzpON7HSNQ3ru5WQH1/PSpnyed/HpNOELl2CxLKoj4r+bAHgdyKqW5gc2Se1A== + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-slot@^1.0.3, internal-slot@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" + integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + side-channel "^1.0.4" + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== + dependencies: + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + prompts "^2.0.1" + yargs "^16.2.0" + +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== + dependencies: + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-diff@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.3.1.tgz#d8215b72fed8f1e647aed2cae6c752a89e757527" + integrity sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.3.1" + jest-get-type "^29.2.0" + pretty-format "^29.3.1" + +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + +jest-get-type@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" + integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== + +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz#6e7f53512f80e817dfa148672bd2d5d04914a572" + integrity sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ== + dependencies: + chalk "^4.0.0" + jest-diff "^29.3.1" + jest-get-type "^29.2.0" + pretty-format "^29.3.1" + +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-message-util@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.3.1.tgz#37bc5c468dfe5120712053dd03faf0f053bd6adb" + integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.3.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.3.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-regex-util@^28.0.0: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@^27.4.2, jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-pnp-resolver "^1.2.2" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + natural-compare "^1.4.0" + pretty-format "^27.5.1" + semver "^7.3.2" + +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-util@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" + integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== + dependencies: + "@jest/types" "^29.3.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== + dependencies: + "@jest/types" "^27.5.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.5.1" + leven "^3.1.0" + pretty-format "^27.5.1" + +jest-watch-typeahead@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9" + integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^28.0.0" + jest-watcher "^28.0.0" + slash "^4.0.0" + string-length "^5.0.1" + strip-ansi "^7.0.1" + +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-watcher@^28.0.0: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^28.0.2: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^27.4.3: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== + dependencies: + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" + +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2, json5@^2.2.0, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.4, klona@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@=1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0, loader-utils@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.4.13" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345" + integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-css-extract-plugin@^2.4.5: + version "2.7.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz#e049d3ea7d3e4e773aad585c6cb329ce0c7b72d7" + integrity sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.6: + version "2.0.8" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" + integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" + integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.5" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" + integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== + dependencies: + array.prototype.reduce "^1.0.5" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.0, object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-attribute-case-insensitive@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" + integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-browser-comments@^4: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz#bcfc86134df5807f5d3c0eefa191d42136b5e72a" + integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg== + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-clamp@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-functional-notation@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" + integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-hex-alpha@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" + integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-rebeccapurple@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" + integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" + integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-custom-media@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" + integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-custom-properties@^12.1.10: + version "12.1.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf" + integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-custom-selectors@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" + integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-dir-pseudo-class@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" + integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-double-position-gradients@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" + integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +postcss-env-function@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" + integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-flexbugs-fixes@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" + integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== + +postcss-focus-visible@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" + integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== + dependencies: + postcss-selector-parser "^6.0.9" + +postcss-focus-within@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" + integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== + dependencies: + postcss-selector-parser "^6.0.9" + +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + +postcss-gap-properties@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" + integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== + +postcss-image-set-function@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" + integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-import@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-initial@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" + integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== + +postcss-js@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" + integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== + dependencies: + camelcase-css "^2.0.1" + +postcss-lab-function@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" + integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-loader@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" + integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.5" + +postcss-logical@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" + integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== + +postcss-media-minmax@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" + integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== + +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" + +postcss-merge-rules@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz#8f97679e67cc8d08677a6519afca41edf2220894" + integrity sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== + dependencies: + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-nested@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" + integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-nesting@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" + integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== + dependencies: + "@csstools/selector-specificity" "^2.0.0" + postcss-selector-parser "^6.0.10" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-10.0.1.tgz#464692676b52792a06b06880a176279216540dd7" + integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA== + dependencies: + "@csstools/normalize.css" "*" + postcss-browser-comments "^4" + sanitize.css "*" + +postcss-opacity-percentage@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz#5b89b35551a556e20c5d23eb5260fbfcf5245da6" + integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A== + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-overflow-shorthand@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" + integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + +postcss-place@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" + integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-preset-env@^7.0.1: + version "7.8.3" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz#2a50f5e612c3149cc7af75634e202a5b2ad4f1e2" + integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== + dependencies: + "@csstools/postcss-cascade-layers" "^1.1.1" + "@csstools/postcss-color-function" "^1.1.1" + "@csstools/postcss-font-format-keywords" "^1.0.1" + "@csstools/postcss-hwb-function" "^1.0.2" + "@csstools/postcss-ic-unit" "^1.0.1" + "@csstools/postcss-is-pseudo-class" "^2.0.7" + "@csstools/postcss-nested-calc" "^1.0.0" + "@csstools/postcss-normalize-display-values" "^1.0.1" + "@csstools/postcss-oklab-function" "^1.1.1" + "@csstools/postcss-progressive-custom-properties" "^1.3.0" + "@csstools/postcss-stepped-value-functions" "^1.0.1" + "@csstools/postcss-text-decoration-shorthand" "^1.0.0" + "@csstools/postcss-trigonometric-functions" "^1.0.2" + "@csstools/postcss-unset-value" "^1.0.2" + autoprefixer "^10.4.13" + browserslist "^4.21.4" + css-blank-pseudo "^3.0.3" + css-has-pseudo "^3.0.4" + css-prefers-color-scheme "^6.0.3" + cssdb "^7.1.0" + postcss-attribute-case-insensitive "^5.0.2" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^4.2.4" + postcss-color-hex-alpha "^8.0.4" + postcss-color-rebeccapurple "^7.1.1" + postcss-custom-media "^8.0.2" + postcss-custom-properties "^12.1.10" + postcss-custom-selectors "^6.0.3" + postcss-dir-pseudo-class "^6.0.5" + postcss-double-position-gradients "^3.1.2" + postcss-env-function "^4.0.6" + postcss-focus-visible "^6.0.4" + postcss-focus-within "^5.0.4" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^3.0.5" + postcss-image-set-function "^4.0.7" + postcss-initial "^4.0.1" + postcss-lab-function "^4.2.1" + postcss-logical "^5.0.4" + postcss-media-minmax "^5.0.0" + postcss-nesting "^10.2.0" + postcss-opacity-percentage "^1.1.2" + postcss-overflow-shorthand "^3.0.4" + postcss-page-break "^3.0.4" + postcss-place "^7.0.5" + postcss-pseudo-class-any-link "^7.1.6" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-pseudo-class-any-link@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" + integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-reduce-initial@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz#c18b7dfb88aee24b1f8e4936541c29adbd35224e" + integrity sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + +postcss-selector-not@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" + integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^7.0.35: + version "7.0.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + +postcss@^8.3.5, postcss@^8.4.18, postcss@^8.4.19, postcss@^8.4.4: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-format@^27.0.2, pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +pretty-format@^29.0.0, pretty-format@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da" + integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg== + dependencies: + "@jest/schemas" "^29.0.0" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +prompts@^2.0.1, prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types-extra@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" + integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== + dependencies: + react-is "^16.3.2" + warning "^4.0.0" + +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74" + integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-app-polyfill@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7" + integrity sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w== + dependencies: + core-js "^3.19.2" + object-assign "^4.1.1" + promise "^8.1.0" + raf "^3.4.1" + regenerator-runtime "^0.13.9" + whatwg-fetch "^3.6.2" + +react-bootstrap@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.6.0.tgz#bd125889cc9d2bbd7c89334a7c54980ff0a65b94" + integrity sha512-WnDgN6PR8WZKo2Og5J8EafFi4BsABjc96lNuMNfksrgiPDCw18/woWQCNhAeHFZQWTQ/PijkOrQ9ncTWwO//AA== + dependencies: + "@babel/runtime" "^7.17.2" + "@restart/hooks" "^0.4.6" + "@restart/ui" "^1.4.1" + "@types/react-transition-group" "^4.4.4" + classnames "^2.3.1" + dom-helpers "^5.2.1" + invariant "^2.2.4" + prop-types "^15.8.1" + prop-types-extra "^1.1.0" + react-transition-group "^4.4.2" + uncontrollable "^7.2.1" + warning "^4.0.3" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-fast-compare@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + +react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-refresh@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" + integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== + +react-router-bootstrap@0.26.2: + version "0.26.2" + resolved "https://registry.yarnpkg.com/react-router-bootstrap/-/react-router-bootstrap-0.26.2.tgz#255ffb662b77141624d89d97105ba4f93863e664" + integrity sha512-YlpI9Xi+Uqp6zFAUO8D/wu6P8mr1ujqq+0V5MhJG1kx9dr/95fAMoGk4J+/CsysOkwtR3tYSac4DDWmHwXvC8w== + dependencies: + prop-types "^15.7.2" + +react-router-dom@6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.4.3.tgz#70093b5f65f85f1df9e5d4182eb7ff3a08299275" + integrity sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ== + dependencies: + "@remix-run/router" "1.0.3" + react-router "6.4.3" + +react-router@6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.4.3.tgz#9ed3ee4d6e95889e9b075a5d63e29acc7def0d49" + integrity sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA== + dependencies: + "@remix-run/router" "1.0.3" + +react-scripts@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003" + integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== + dependencies: + "@babel/core" "^7.16.0" + "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3" + "@svgr/webpack" "^5.5.0" + babel-jest "^27.4.2" + babel-loader "^8.2.3" + babel-plugin-named-asset-import "^0.3.8" + babel-preset-react-app "^10.0.1" + bfj "^7.0.2" + browserslist "^4.18.1" + camelcase "^6.2.1" + case-sensitive-paths-webpack-plugin "^2.4.0" + css-loader "^6.5.1" + css-minimizer-webpack-plugin "^3.2.0" + dotenv "^10.0.0" + dotenv-expand "^5.1.0" + eslint "^8.3.0" + eslint-config-react-app "^7.0.1" + eslint-webpack-plugin "^3.1.1" + file-loader "^6.2.0" + fs-extra "^10.0.0" + html-webpack-plugin "^5.5.0" + identity-obj-proxy "^3.0.0" + jest "^27.4.3" + jest-resolve "^27.4.2" + jest-watch-typeahead "^1.0.0" + mini-css-extract-plugin "^2.4.5" + postcss "^8.4.4" + postcss-flexbugs-fixes "^5.0.2" + postcss-loader "^6.2.1" + postcss-normalize "^10.0.1" + postcss-preset-env "^7.0.1" + prompts "^2.4.2" + react-app-polyfill "^3.0.0" + react-dev-utils "^12.0.1" + react-refresh "^0.11.0" + resolve "^1.20.0" + resolve-url-loader "^4.0.0" + sass-loader "^12.3.0" + semver "^7.3.5" + source-map-loader "^3.0.0" + style-loader "^3.3.1" + tailwindcss "^3.0.2" + terser-webpack-plugin "^5.2.5" + webpack "^5.64.4" + webpack-dev-server "^4.6.0" + webpack-manifest-plugin "^4.0.2" + workbox-webpack-plugin "^6.4.1" + optionalDependencies: + fsevents "^2.3.2" + +react-transition-group@^4.4.2: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readable-stream@^2.0.1: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.9: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" + integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsgen "^0.7.1" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" + integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" + integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== + dependencies: + adjust-sourcemap-loader "^4.0.0" + convert-source-map "^1.7.0" + loader-utils "^2.0.0" + postcss "^7.0.35" + source-map "0.6.1" + +resolve.exports@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== + +resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.4: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup@^2.43.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize.css@*: + version "13.0.0" + resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" + integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== + +sass-loader@^12.3.0: + version "12.6.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.7.4" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" + integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +source-list-map@^2.0.0, source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-js@^1.0.1, source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-loader@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.2.tgz#af23192f9b344daa729f6772933194cc5fa54fee" + integrity sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.3" + source-map-js "^1.0.1" + +source-map-support@^0.5.6, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-length@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e" + integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== + dependencies: + char-regex "^2.0.0" + strip-ansi "^7.0.1" + +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +style-loader@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" + integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== + +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +tailwindcss@^3.0.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.4.tgz#afe3477e7a19f3ceafb48e4b083e292ce0dc0250" + integrity sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ== + dependencies: + arg "^5.0.2" + chokidar "^3.5.3" + color-name "^1.1.4" + detective "^5.2.1" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.12" + glob-parent "^6.0.2" + is-glob "^4.0.3" + lilconfig "^2.0.6" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.18" + postcss-import "^14.1.0" + postcss-js "^4.0.0" + postcss-load-config "^3.1.4" + postcss-nested "6.0.0" + postcss-selector-parser "^6.0.10" + postcss-value-parser "^4.2.0" + quick-lru "^5.1.1" + resolve "^1.22.1" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5: + version "5.3.6" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" + integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.14.1" + +terser@^5.0.0, terser@^5.10.0, terser@^5.14.1: + version "5.16.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" + integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +throat@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.10.0, tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +uncontrollable@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" + integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" ">=16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +warning@^4.0.0, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-vitals@^2.1.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-2.1.4.tgz#76563175a475a5e835264d373704f9dde718290c" + integrity sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.6.0: + version "4.11.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" + integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + +webpack-manifest-plugin@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f" + integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow== + dependencies: + tapable "^2.0.0" + webpack-sources "^2.2.0" + +webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-sources@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.64.4: + version "5.75.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" + integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +workbox-background-sync@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9" + integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g== + dependencies: + idb "^7.0.1" + workbox-core "6.5.4" + +workbox-broadcast-update@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66" + integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw== + dependencies: + workbox-core "6.5.4" + +workbox-build@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389" + integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "6.5.4" + workbox-broadcast-update "6.5.4" + workbox-cacheable-response "6.5.4" + workbox-core "6.5.4" + workbox-expiration "6.5.4" + workbox-google-analytics "6.5.4" + workbox-navigation-preload "6.5.4" + workbox-precaching "6.5.4" + workbox-range-requests "6.5.4" + workbox-recipes "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + workbox-streams "6.5.4" + workbox-sw "6.5.4" + workbox-window "6.5.4" + +workbox-cacheable-response@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137" + integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug== + dependencies: + workbox-core "6.5.4" + +workbox-core@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" + integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== + +workbox-expiration@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539" + integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ== + dependencies: + idb "^7.0.1" + workbox-core "6.5.4" + +workbox-google-analytics@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d" + integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg== + dependencies: + workbox-background-sync "6.5.4" + workbox-core "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-navigation-preload@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212" + integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng== + dependencies: + workbox-core "6.5.4" + +workbox-precaching@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" + integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== + dependencies: + workbox-core "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-range-requests@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399" + integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg== + dependencies: + workbox-core "6.5.4" + +workbox-recipes@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb" + integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA== + dependencies: + workbox-cacheable-response "6.5.4" + workbox-core "6.5.4" + workbox-expiration "6.5.4" + workbox-precaching "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-routing@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" + integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== + dependencies: + workbox-core "6.5.4" + +workbox-strategies@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" + integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== + dependencies: + workbox-core "6.5.4" + +workbox-streams@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69" + integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg== + dependencies: + workbox-core "6.5.4" + workbox-routing "6.5.4" + +workbox-sw@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736" + integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA== + +workbox-webpack-plugin@^6.4.1: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz#baf2d3f4b8f435f3469887cf4fba2b7fac3d0fd7" + integrity sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg== + dependencies: + fast-json-stable-stringify "^2.1.0" + pretty-bytes "^5.4.1" + upath "^1.2.0" + webpack-sources "^1.4.3" + workbox-build "6.5.4" + +workbox-window@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91" + integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.5.4" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.4.2: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" + integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/permissions/__init__.py b/permissions/__init__.py new file mode 100644 index 0000000..a0a5d82 --- /dev/null +++ b/permissions/__init__.py @@ -0,0 +1,36 @@ +""" +The ``permissions`` package contains code to start a Permissions +server, used by Beacons. + +""" + +__title__ = 'Permissions for Beacon v2.0' +__version__ = '1.0' +__author__ = 'CRG developers' +__license__ = 'Apache 2.0' +__copyright__ = 'Permissions for Beacon 2.0 @ CRG, Barcelona' + +import sys +if sys.version_info < (3, 7): + print("this package requires python 3.7 or higher", file=sys.stderr) + sys.exit(1) + +# Send warnings using the package warnings to the logging system +# The warnings are logged to a logger named 'py.warnings' with a severity of WARNING. +# See: https://docs.python.org/3/library/logging.html#integration-with-the-warnings-module +import logging +import warnings +logging.captureWarnings(True) +warnings.simplefilter("default") # do not ignore Deprecation Warnings + + +from logging.config import dictConfig +from pathlib import Path +import yaml + +def load_logger(): + # Configure the logging + log_file = Path(__file__).parent / "logger.yml" + if log_file.exists(): + with open(log_file, 'r') as stream: + dictConfig(yaml.safe_load(stream)) diff --git a/permissions/__main__.py b/permissions/__main__.py new file mode 100644 index 0000000..e6ad0a9 --- /dev/null +++ b/permissions/__main__.py @@ -0,0 +1,79 @@ +""" +Dummy permissions server + +We hard-code the dataset permissions. + +""" +import logging +from typing import Optional + +from aiohttp import web +from aiohttp.web import FileField +from aiohttp.web_request import Request + +from . import load_logger +from .auth import bearer_required +# update that line to use your prefered permissions plugin +from .plugins import DummyPermissions as PermissionsProxy + +LOG = logging.getLogger(__name__) + +@bearer_required +async def permission(request: Request, username: Optional[str]): + + if request.headers.get('Content-Type') == 'application/json': + post_data = await request.json() + else: + post_data = await request.post() + LOG.debug('POST DATA: %s', post_data) + + v = post_data.get('datasets') + if v is None: + requested_datasets = [] + elif isinstance(v, list): + requested_datasets = v + elif isinstance(v, FileField): + requested_datasets = [] + else: + requested_datasets = v.split(sep=',') # type: ignore + + LOG.debug('requested datasets: %s', requested_datasets) + datasets = await request.app['permissions'].get(username, requested_datasets=requested_datasets) + LOG.debug('selected datasets: %s', datasets) + + return web.json_response(list(datasets or [])) # cuz python-json doesn't like sets + +async def initialize(app): + """Initialize server.""" + app['permissions'] = PermissionsProxy() + await app['permissions'].initialize() + LOG.info("Initialization done.") + +async def destroy(app): + """Upon server close, close the DB connections.""" + LOG.info("Shutting down.") + await app['permissions'].close() + + +def main(path=None): + + load_logger() + + # Configure the permissions server + server = web.Application() + server.on_startup.append(initialize) + server.on_cleanup.append(destroy) + + # Configure the endpoints + server.add_routes([web.post('/', permission)]) # type: ignore + + web.run_app(server, + host='0.0.0.0', + port=5051, + shutdown_timeout=0, ssl_context=None) + + +if __name__ == '__main__': + main() + + diff --git a/permissions/auth.py b/permissions/auth.py new file mode 100644 index 0000000..e8827b9 --- /dev/null +++ b/permissions/auth.py @@ -0,0 +1,79 @@ +""" +Authentication / Token resolver + +If the access token is a JWT token, and the verification key is loaded, +we could attempt to verify its signature, and avoid a round-trip to the IdP endpoint. +If not, we can't avoid the round-trip and that'll resolve whether the access token is +valid. + +For this implementation, we only implement contacting the userinfo endpoint. +No JWT signature verification. +""" + +import logging + +from aiohttp import ClientSession, BasicAuth, FormData +from aiohttp import web + +LOG = logging.getLogger(__name__) + +idp_client_id = 'permissions' +idp_client_secret = 'c0285717-1bfb-4b32-b01d-d663470ce7c4' +idp_user_info = 'http://idp:8080/auth/realms/Beacon/protocol/openid-connect/userinfo' +idp_introspection = 'http://idp:8080/auth/realms/Beacon/protocol/openid-connect/token/introspect' + +async def get_user_info(access_token): + ''' + We use the access_token to get the user info. + On failure (ie an invalid token), we try to get an explanation. + ''' + LOG.debug('Token: %s', access_token) + + user = None + async with ClientSession() as session: + headers = { 'Accept': 'application/json', 'Authorization': 'Bearer ' + access_token } + LOG.debug('Contacting %s', idp_user_info) + async with session.get(idp_user_info, headers=headers) as resp: + # LOG.debug('Response %s', resp) + if resp.status == 200: + user = await resp.json() + return user + else: + content = await resp.text() + LOG.error('Content: %s', content) + + # Invalid access token + LOG.error('Invalid token') + async with ClientSession() as session: + async with session.post(idp_introspection, + auth=BasicAuth(idp_client_id, password=idp_client_secret), + data=FormData({ 'token': access_token, 'token_type_hint': 'access_token' }, charset='UTF-8') + ) as resp: + LOG.debug('Response %s', resp.status) + #LOG.debug('Response %s', resp) + content = await resp.text() + LOG.debug('Content: %s', content) + raise web.HTTPUnauthorized() + + + +def bearer_required(func): + + async def decorated(request): + + auth = request.headers.get('Authorization') + if not auth or not auth.lower().startswith('bearer '): + raise web.HTTPUnauthorized() + + access_token = auth[7:].strip() # 7 = len('Bearer ') + + # We make a round-trip to the userinfo. We might not have a JWT token. + user = await get_user_info(access_token) + LOG.info('The user is: %r', user) + if user is None: + raise web.HTTPUnauthorized() + username = user.get('preferred_username') + LOG.debug('username: %s', username) + + return await func(request, username) + return decorated diff --git a/permissions/plugins.py b/permissions/plugins.py new file mode 100644 index 0000000..73e269d --- /dev/null +++ b/permissions/plugins.py @@ -0,0 +1,96 @@ +import logging +import asyncpg +from asyncpg import Pool +from typing import Dict, Optional + +from beacon.utils.json import json_decoder, json_encoder + +LOG = logging.getLogger(__name__) + +class Permissions(): + """Base class, just to agree on the interface.""" + def __init__(self, *args, **kwargs): + pass + + async def initialize(self): + raise NotImplementedError('Overload this function in a subclass') + + async def get(self, username, requested_datasets=None): + """Return an iterable for the granted datasets for the given username and within a requested list of datasets.""" + raise NotImplementedError('Overload this function in a subclass') + + async def close(self): + raise NotImplementedError('Overload this function in a subclass') + + + +class DummyPermissions(Permissions): + """ + Dummy permissions plugin + + We hard-code the dataset permissions. + """ + + db: Dict = {} + + def __init__(self, *args, **kwargs): + # Dummy permission database + self.db = { + "john": ["GiaB", "dataset-registered", "dataset-controlled"], + "jane": ["GiaB", "dataset-registered"], + } + + async def initialize(self): + pass + + async def get(self, username, requested_datasets=None): + datasets = set(self.db.get(username)) + if requested_datasets: + return set(requested_datasets).intersection(datasets) + else: + return datasets + + async def close(self): + pass + + +class PostgresPermissions(Permissions): + """ + Postgres permissions plugin + + """ + db: Optional[Pool] = None + args = [] + kwargs = {} + + def __init__(self, *args, **kwargs): + LOG.info("Creating a connection pool with %s and %s", args, kwargs) + self.args = args + self.kwargs = kwargs + + async def initialize(self): + import asyncpg + # Connection pool handles reconnections and keeps some expensive connections open for reuse + self.db = await asyncpg.create_pool(*self.args, **self.kwargs) + + + async def get(self, username, requested_datasets=None): + try: + assert(self.db is not None) + async with self.db.acquire() as conn: + await conn.set_type_codec('jsonb', encoder=json_encoder, decoder=json_decoder, schema='pg_catalog') + query = "SELECT dataset FROM datasets where username = $1 and datasets IN $2;" + response = await conn.fetch(query, username, requested_datasets) + return [r['dataset'] async for r in response] + except (asyncpg.exceptions._base.InterfaceError, + asyncpg.exceptions._base.PostgresError, + asyncpg.exceptions.UndefinedFunctionError) as e: + LOG.error('DB Error: %s', e) + return None + + async def close(self): + """Close DB Connection.""" + LOG.debug("Closing the database") + if self.db: + self.db.terminate() + self.db = None diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a989dd9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,25 @@ +# I noticed a misbehaviour with 3.7.2 regarding cookie storage for raised HTTP response +# That's the case for the HTTPFound redirections +# It seems the cookies are not sent in the response, and therefore, the browser does not store them +# Obviously, sessions do not work then, and Openid Connect auth.py code is broken +aiohttp==3.8.1 +aiohttp-cors==0.7.0 +asyncpg~=0.24.0 +pyyaml~=5.4.1 +cryptography~=35.0.0 +jinja2~=3.0.2 +#aiohttp_csrf +pymongo~=4.0.1 +aiohttp-jinja2~=1.5 +aiohttp-session~=2.9.0 +dataclasses-json~=0.5.6 +StrEnum~=0.4.7 # Only until Python 3.11 is released (we can use the built-in StrEnum) +owlready2~=0.36 +tqdm~=4.62.3 +pydantic~=1.9.0 +pyhumps +progressbar~=2.5 +fastobo~=0.11.1 +networkx~=2.7.1 +pronto~=2.4.4 +requests diff --git a/tests/init.bash b/tests/init.bash new file mode 100644 index 0000000..db69fc9 --- /dev/null +++ b/tests/init.bash @@ -0,0 +1 @@ +BEACON_URL=${BEACON_URL:-"http://localhost:5050"} diff --git a/tests/post.bats b/tests/post.bats new file mode 100644 index 0000000..ab8edd6 --- /dev/null +++ b/tests/post.bats @@ -0,0 +1,45 @@ + +load init + +@test "POST - All individuals" { + + name="all-individuals" + query="${BEACON_URL}/api/individuals/" + request="requests/${name}.json" + response="responses/${name}.json" + + echo "http POST $query --json < $request > ${BATS_TMPDIR}/${name}.json" + http POST $query --json < $request | jq -S > "${BATS_TMPDIR}/${name}.json" + run diff "${BATS_TMPDIR}/${name}.json" "${response}" + + [[ "$status" -eq 0 ]] +} + +@test "POST - Individual NA24631" { + + name="individual-NA24631" + query="${BEACON_URL}/api/individuals/NA24631/" + request="requests/${name}.json" + response="responses/${name}.json" + + echo "http POST $query --json < $request > ${BATS_TMPDIR}/${name}.json" + http POST $query --json < $request | jq -S > "${BATS_TMPDIR}/${name}.json" + run diff "${BATS_TMPDIR}/${name}.json" "${response}" + + [[ "$status" -eq 0 ]] +} + + +@test "Filters - Ontology Filter: Geographic Origin" { + + name="geographic-origin" + query="${BEACON_URL}/api/individuals/" + request="requests/${name}.json" + response="responses/${name}.json" + + echo "http POST $query --json < $request > ${BATS_TMPDIR}/${name}.json" + http POST $query --json < $request | jq -S > "${BATS_TMPDIR}/${name}.json" + run diff "${BATS_TMPDIR}/${name}.json" "${response}" + + [[ "$status" -eq 0 ]] +} diff --git a/tests/requests/all-individuals.json b/tests/requests/all-individuals.json new file mode 100644 index 0000000..401e33f --- /dev/null +++ b/tests/requests/all-individuals.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://raw.githubusercontent.com/MrRobb/beacon-framework-v2/main/requests/beaconRequestBody.json", + "meta": { + "apiVersion": "2.0", + "requestedSchemas": [{ "entityType": "EntryTypeA", "schema": "entry-typeA-schema-v0.1" }] + }, + "query": { + "filters": [], + "includeResultsetResponses": "HIT", + "pagination": { + "skip": 0, + "limit": 10 + }, + "testMode": false, + "requestedGranularity": "record" + } +} \ No newline at end of file diff --git a/tests/requests/descendants.json b/tests/requests/descendants.json new file mode 100644 index 0000000..46b4592 --- /dev/null +++ b/tests/requests/descendants.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://raw.githubusercontent.com/MrRobb/beacon-framework-v2/main/requests/beaconRequestBody.json", + "meta": { + "apiVersion": "2.0" + }, + "query": { + "filters": [ + { + "id": "UBERON:0000178", + "includeDescendantTerms": true + } + ], + "includeResultsetResponses": "HIT", + "pagination": { + "skip": 0, + "limit": 100 + }, + "testMode": false, + "requestedGranularity": "count" + } +} \ No newline at end of file diff --git a/tests/requests/geographic-origin.json b/tests/requests/geographic-origin.json new file mode 100644 index 0000000..d2262fd --- /dev/null +++ b/tests/requests/geographic-origin.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://raw.githubusercontent.com/MrRobb/beacon-framework-v2/main/requests/beaconRequestBody.json", + "meta": { + "apiVersion": "2.0", + "requestedSchemas": [{ "entityType": "EntryTypeA", "schema": "entry-typeA-schema-v0.1" }] + }, + "query": { + "filters": [ + { + "id": "HP:000054", + "scope": "individual" + } + ], + "includeResultsetResponses": "HIT", + "pagination": { + "skip": 0, + "limit": 10 + }, + "testMode": false, + "requestedGranularity": "boolean" + } +} diff --git a/tests/requests/individual-NA24631.json b/tests/requests/individual-NA24631.json new file mode 100644 index 0000000..7fc56ad --- /dev/null +++ b/tests/requests/individual-NA24631.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://raw.githubusercontent.com/MrRobb/beacon-framework-v2/main/requests/beaconRequestBody.json", + "meta": { + "apiVersion": "2.0", + "requestedSchemas": [{ "entityType": "EntryTypeA", "schema": "entry-typeA-schema-v0.1" }] + }, + "query": { + "requestedGranularity": "record" + } +} \ No newline at end of file diff --git a/tests/responses/all-individuals.json b/tests/responses/all-individuals.json new file mode 100644 index 0000000..69238f2 --- /dev/null +++ b/tests/responses/all-individuals.json @@ -0,0 +1,157 @@ +{ + "beaconHandovers": [ + { + "handoverType": { + "id": "CUSTOM", + "label": "Project description" + }, + "note": "Project description", + "url": "https://www.nist.gov/programs-projects/genome-bottle" + } + ], + "meta": { + "apiVersion": "v2.0.0", + "beaconId": "org.ega-archive.ga4gh-approval-beacon-test", + "receivedRequestSummary": { + "apiVersion": "2.0", + "filters": [], + "includeResultsetResponses": "HIT", + "pagination": { + "limit": 10, + "skip": 0 + }, + "requestParameters": {}, + "requestedGranularity": "boolean", + "requestedSchemas": [ + { + "entityType": "EntryTypeA", + "schema": "entry-typeA-schema-v0.1" + } + ], + "testMode": false + }, + "returnedGranularity": "record", + "returnedSchemas": [ + "beacon-individual-v2.0.0" + ] + }, + "response": { + "resultSets": [ + { + "exists": true, + "id": "", + "results": [ + { + "_id": { + "$oid": "61a5318a6a6a2f4fe57e7e25" + }, + "diseases": [ + { + "diseaseCode": { + "id": "HP:000054", + "label": "intolerance" + } + } + ], + "ethnicity": { + "id": "HANCESTRO:0021", + "label": "Han Chinese" + }, + "geographicOrigin": { + "id": "GAZ:00002459", + "label": "United States of America" + }, + "id": "NA24631", + "phenotypicFeatures": [ + { + "featureType": { + "id": "NCIT:C3001", + "label": "NCIT:C3001" + } + } + ], + "sex": { + "id": "NCIT:C46112", + "label": "male" + } + }, + { + "_id": { + "$oid": "61a5318a6a6a2f4fe57e7e26" + }, + "diseases": [ + { + "diseaseCode": { + "id": "HP:0008711", + "label": "prostatic hyperplasia" + } + } + ], + "ethnicity": { + "id": "HANCESTRO:0021", + "label": "Han Chinese" + }, + "geographicOrigin": { + "id": "GAZ:00002459", + "label": "United States of America" + }, + "id": "NA24694", + "phenotypicFeatures": [ + { + "featureType": { + "id": "NCIT:C37967", + "label": "NCIT:C37967" + } + } + ], + "sex": { + "id": "NCIT:C46112", + "label": "male" + } + }, + { + "_id": { + "$oid": "61a5318a6a6a2f4fe57e7e27" + }, + "diseases": [ + { + "diseaseCode": { + "id": "DOID:6364", + "label": "migraine" + } + } + ], + "ethnicity": { + "id": "HANCESTRO:0021", + "label": "Han Chinese" + }, + "geographicOrigin": { + "id": "GAZ:00002459", + "label": "United States of America" + }, + "id": "NA24695", + "phenotypicFeatures": [ + { + "featureType": { + "id": "HP:0000938", + "label": "HP:0000938" + } + } + ], + "sex": { + "id": "NCIT:C16576", + "label": "female" + } + } + ], + "resultsCount": 3, + "resultsHandover": null, + "setType": "" + } + ] + }, + "responseSummary": { + "exists": true, + "numTotalResults": 3 + } +} diff --git a/tests/responses/geographic-origin.json b/tests/responses/geographic-origin.json new file mode 100644 index 0000000..81de8c0 --- /dev/null +++ b/tests/responses/geographic-origin.json @@ -0,0 +1,94 @@ +{ + "beaconHandovers": [ + { + "handoverType": { + "id": "CUSTOM", + "label": "Project description" + }, + "note": "Project description", + "url": "https://www.nist.gov/programs-projects/genome-bottle" + } + ], + "meta": { + "apiVersion": "v2.0.0", + "beaconId": "org.ega-archive.ga4gh-approval-beacon-test", + "receivedRequestSummary": { + "apiVersion": "2.0", + "filters": [ + { + "id": "HP:000054", + "scope": "individual" + } + ], + "includeResultsetResponses": "HIT", + "pagination": { + "limit": 10, + "skip": 0 + }, + "requestParameters": {}, + "requestedGranularity": "boolean", + "requestedSchemas": [ + { + "entityType": "EntryTypeA", + "schema": "entry-typeA-schema-v0.1" + } + ], + "testMode": false + }, + "returnedGranularity": "record", + "returnedSchemas": [ + "beacon-individual-v2.0.0" + ] + }, + "response": { + "resultSets": [ + { + "exists": true, + "id": "", + "results": [ + { + "_id": { + "$oid": "61a5318a6a6a2f4fe57e7e25" + }, + "diseases": [ + { + "diseaseCode": { + "id": "HP:000054", + "label": "intolerance" + } + } + ], + "ethnicity": { + "id": "HANCESTRO:0021", + "label": "Han Chinese" + }, + "geographicOrigin": { + "id": "GAZ:00002459", + "label": "United States of America" + }, + "id": "NA24631", + "phenotypicFeatures": [ + { + "featureType": { + "id": "NCIT:C3001", + "label": "NCIT:C3001" + } + } + ], + "sex": { + "id": "NCIT:C46112", + "label": "male" + } + } + ], + "resultsCount": 1, + "resultsHandover": null, + "setType": "" + } + ] + }, + "responseSummary": { + "exists": true, + "numTotalResults": 1 + } +} diff --git a/tests/responses/individual-NA24631.json b/tests/responses/individual-NA24631.json new file mode 100644 index 0000000..68a198b --- /dev/null +++ b/tests/responses/individual-NA24631.json @@ -0,0 +1,89 @@ +{ + "beaconHandovers": [ + { + "handoverType": { + "id": "CUSTOM", + "label": "Project description" + }, + "note": "Project description", + "url": "https://www.nist.gov/programs-projects/genome-bottle" + } + ], + "meta": { + "apiVersion": "v2.0.0", + "beaconId": "org.ega-archive.ga4gh-approval-beacon-test", + "receivedRequestSummary": { + "apiVersion": "2.0", + "filters": [], + "includeResultsetResponses": "HIT", + "pagination": { + "limit": 10, + "skip": 0 + }, + "requestParameters": {}, + "requestedGranularity": "record", + "requestedSchemas": [ + { + "entityType": "EntryTypeA", + "schema": "entry-typeA-schema-v0.1" + } + ], + "testMode": false + }, + "returnedGranularity": "record", + "returnedSchemas": [ + "beacon-individual-v2.0.0" + ] + }, + "response": { + "resultSets": [ + { + "exists": true, + "id": "", + "results": [ + { + "_id": { + "$oid": "61a5318a6a6a2f4fe57e7e25" + }, + "diseases": [ + { + "diseaseCode": { + "id": "HP:000054", + "label": "intolerance" + } + } + ], + "ethnicity": { + "id": "HANCESTRO:0021", + "label": "Han Chinese" + }, + "geographicOrigin": { + "id": "GAZ:00002459", + "label": "United States of America" + }, + "id": "NA24631", + "phenotypicFeatures": [ + { + "featureType": { + "id": "NCIT:C3001", + "label": "NCIT:C3001" + } + } + ], + "sex": { + "id": "NCIT:C46112", + "label": "male" + } + } + ], + "resultsCount": 1, + "resultsHandover": null, + "setType": "" + } + ] + }, + "responseSummary": { + "exists": true, + "numTotalResults": 1 + } +} diff --git a/tests/test.sh b/tests/test.sh new file mode 100644 index 0000000..8c9ffdd --- /dev/null +++ b/tests/test.sh @@ -0,0 +1 @@ +bats filters.bats \ No newline at end of file diff --git a/ui/static/css/error.css b/ui/static/css/error.css new file mode 100644 index 0000000..dfb5fcd --- /dev/null +++ b/ui/static/css/error.css @@ -0,0 +1,2 @@ +body{font-family:Roboto,Helvetica Neue,Arial,sans-serif;font-size:16px;color:#5e5e5e;line-height:1.4;width:960px;margin:0 auto}h1{color:#ee6d52;padding-top:20rem;text-align:center;position:relative;background-position:top;background-repeat:no-repeat;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzOTYuNjEiIGhlaWdodD0iMjcyLjUyIiB2aWV3Qm94PSIwIDAgMzk2LjYxIDI3Mi41MiI+DQogIDxkZWZzPg0KICAgIDxzdHlsZT4NCiAgICAgIC5jbHMtMSB7DQogICAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTsNCiAgICAgIH0NCg0KICAgICAgLmNscy0yIHsNCiAgICAgICAgZmlsbDogI2YxZjJmMjsNCiAgICAgIH0NCg0KICAgICAgLmNscy0zIHsNCiAgICAgICAgZmlsbDogI2ZkYTsNCiAgICAgIH0NCg0KICAgICAgLmNscy00IHsNCiAgICAgICAgZmlsbDogIzBiMTAwZjsNCiAgICAgIH0NCg0KICAgICAgLmNscy01IHsNCiAgICAgICAgZmlsbDogI2ZjZjVkZTsNCiAgICAgIH0NCg0KICAgICAgLmNscy02IHsNCiAgICAgICAgZmlsbDogI2ZjYWMzYjsNCiAgICAgIH0NCg0KICAgICAgLmNscy03IHsNCiAgICAgICAgZmlsbDogI2VmNmU1MzsNCiAgICAgIH0NCg0KICAgICAgLmNscy04LCAuY2xzLTkgew0KICAgICAgICBmaWxsOiAjMmFhOGJhOw0KICAgICAgfQ0KDQogICAgICAuY2xzLTkgew0KICAgICAgICBtaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7DQogICAgICB9DQogICAgPC9zdHlsZT4NCiAgPC9kZWZzPg0KICA8dGl0bGU+R2VQaEV4IEVycm9yPC90aXRsZT4NCiAgPGcgY2xhc3M9ImNscy0xIj4NCiAgICA8ZyBpZD0iQ2FwYV8xIiBkYXRhLW5hbWU9IkNhcGEgMSI+DQogICAgICA8ZWxsaXBzZSBjbGFzcz0iY2xzLTIiIGN4PSIxMjcuMTMiIGN5PSIyNjAuNjgiIHJ4PSI4Ni4zNSIgcnk9IjExLjgzIi8+DQogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xNzMuNzIsODYuNTFDMTUwLjIsNDMuNDQsNzkuNjMsNzQuNyw3OS42Myw3NC43Yy00My44LDE2LjM4LTIyLjcxLDYwLjYxLTIyLjcxLDYwLjYxbDEuNTcsNC41M2MtNC4yNy0uMTQtNy44NywxLjg4LTguNSw1LS43MywzLjcsMi44OCw3LjU1LDguMDgsOC42YTEyLjQ4LDEyLjQ4LDAsMCwwLDUuMTcsMGwzLjQxLDkuNzljODAuMzEsMTguOTMsMTE5LjI0LDcuNTIsMTE5LjI0LDcuNTJDMTkyLjM4LDEyMi42OCwxNzMuNzIsODYuNTEsMTczLjcyLDg2LjUxWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtNjMuNzQpIi8+DQogICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik0xNzMuNzIsODYuNTFDMTUwLjIsNDMuNDQsNzkuNjMsNzQuNyw3OS42Myw3NC43Yy00My44LDE2LjM4LTIyLjcxLDYwLjYxLTIyLjcxLDYwLjYxbDEuNTcsNC41M1M3OCwxMjYuMyw3My4xNCw5NS4xOGMwLDAsNjAuNDMtMy4yOCw3Ny40Ny0yMi45NCwwLDAsOS41Mi41OCwyMy42MiwxNS4zMWgwQzE3My45MSw4Ni44NywxNzMuNzIsODYuNTEsMTczLjcyLDg2LjUxWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtNjMuNzQpIi8+DQogICAgICA8ZWxsaXBzZSBjbGFzcz0iY2xzLTQiIGN4PSIxMTYuNTQiIGN5PSI1Mi43MyIgcng9IjQuMDYiIHJ5PSI0LjEiLz4NCiAgICAgIDxlbGxpcHNlIGNsYXNzPSJjbHMtNCIgY3g9IjE2MS41MiIgY3k9IjQzLjcyIiByeD0iNC4wNiIgcnk9IjQuMSIvPg0KICAgICAgPHBhdGggY2xhc3M9ImNscy01IiBkPSJNMTM4LjQ0LDEzNi4xM2EyMi4xNSwyMi4xNSwwLDAsMCwxOS0xLjY0czQuMDksMjEuMy03LjI3LDIyLjczQzE1MC4yLDE1Ny4yMiwxMzgsMTU3LDEzOC40NCwxMzYuMTNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC02My43NCkiLz4NCiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNiIgZD0iTTIzNC41MSwxNjUuNjVzLTE3LjcyLDMuNjItMjIuMDYsMi4xMWMwLDAsMy4xOSwxMi42Ny0zLjc4LDE1LjEzLDAsMC0xNi44Myw0LjkyLTIyLjc4LTEyLjEyLDAsMC0zOC45MywxMS40MS0xMTkuMjQtNy41MiwwLDAtNDUuNDIsMTAuNC02Miw0Ni43MiwwLDAsMTUsNC43OSwyMC40MSwxMS4wNywwLDAsMTEuMi0xOC41NCwyOC4xLTIxLjg3QzQ5LjQyLDIxNiw0OSwyMzUuNzYsNjAsMjUxLjkxbC0uMjQuMDdzMTkuOSw2NC4wNywyNS41Niw2OS4zOWMwLDAsNS41Nyw2LjEzLDE2LjY3LDIuODUsMCwwLDEzLjA5LTIuNzEsMTEuNzQtMTAuNjMsMCwwLTIuMTUtMTQuOTQtMTEuMjEtNDdhMTA0LjQyLDEwNC40MiwwLDAsMCwxNy43NC0uMWMzLjA4LDIwLjEzLDcuOTIsNDguOTEsMTAuOTQsNTIuODksMCwwLDQuNDksNywxNiw1LjU5LDAsMCwxMy4zNS0uNDgsMTMuMzEtOC41MiwwLDAsMy4wNi0xOC41OS0yLjI4LTYwLjg0bC0uNC0uMTVjNS42Mi01LjIxLDE3LjgxLTE5Ljc3LDI0LjI2LTUyLjI3LDkuODIsNS41NiwyNy4yNCwxMiw0Mi40OS0uMTlDMjI0LjUzLDIwMywyNDAuNTYsMTg5LjYzLDIzNC41MSwxNjUuNjVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC02My43NCkiLz4NCiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNyIgZD0iTTE1Mi4zOCwxNzQuMTdxLTUsMC0xMC44My0uMTVjLjYzLDgsLjczLDIzLjItNS4xNCwzNy44N2wxMS44OSwxMC42NCwxMy4yMi0xMC42NFMxNTcuNjIsMTg2LjgyLDE1Mi4zOCwxNzQuMTdaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC02My43NCkiLz4NCiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTQuNiwyMTBzLTEwLjM1LDE1Ljg1LDAsMjIuNmMwLDAsMTEuMzUsNy4xNywxNy40NC0yLjY2LDAsMCwxLjY5LTIuOCwzLTguODdDMTkuNiwyMTQuNzYsNC42LDIxMCw0LjYsMjEwWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtNjMuNzQpIi8+DQogICAgICA8cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0zMTcuODEsMTM4LjkyYy03LjQtLjE5LTE2LjA1LTEzLjQ3LTE5LjkyLTMxLjFzLTEuNTktMzMuMjcsNS0zNi42NUwxNzUuMTcsMTI3LjIzaDBjLTEuMDkuMjQtMS4yMywzLjc4LS4zMyw3LjlzMi41Miw3LjI2LDMuNiw3bDE0Ljc1LS4zNCw0LjMxLDE5LjY0LDM5LjY1LTguODctMi41Ny0xMS43MlptLTg4LjkyLDguMzQtMjYuMTUsNS44Ni0yLjUyLTExLjQ4LDI3LjI5LS42M1oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTYzLjc0KSIvPg0KICAgICAgPHBhdGggY2xhc3M9ImNscy05IiBkPSJNMzI1LjczLDEwMS41OWM0LjEzLDE4LjgyLDEuMjUsMzUuNDctNi40NCwzNy4xOXMtMTcuMjctMTIuMTQtMjEuNC0zMS0xLjI0LTM1LjQ3LDYuNDQtMzcuMTlTMzIxLjYsODIuNzgsMzI1LjczLDEwMS41OVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTYzLjc0KSIvPg0KICAgICAgPHBhdGggY2xhc3M9ImNscy00IiBkPSJNMzAxLjQ3LDEwOC4xMWMtMy41Ni0xNi4xOC0yLjM2LTMwLjg5LDIuNC0zNy4zNC03LjMzLDIuMjctMTAsMTguNjItNiwzNy4wNSwzLjU4LDE2LjM0LDExLjI3LDI4LjkzLDE4LjI3LDMwLjg0QzMxMC4yLDEzMy4yNSwzMDQuNDksMTIxLjksMzAxLjQ3LDEwOC4xMVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTYzLjc0KSIvPg0KICAgICAgPHBhdGggY2xhc3M9ImNscy00IiBkPSJNMjk2LjM0LDg1LjI0YTcxLjI0LDcxLjI0LDAsMCwwLDEuNTUsMjIuNTgsNzAuOCw3MC44LDAsMCwwLDgsMjEuMTNjNS44My00LjI3LDguNjItMTQsNi4zNS0yNC4zNVMzMDMuNDEsODYuNjIsMjk2LjM0LDg1LjI0WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtNjMuNzQpIi8+DQogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yMTIuNDUsMTY3Ljc2YTM2LjU3LDM2LjU3LDAsMCwxLTEuNjktMTVzLjM0LTUuNzEsNy43LTZjMCwwLDcuNzEtMywxMi40LDUuNjgsMCwwLDMuNDksNi44OCwzLjY1LDEzLjI2QzIzNC41MSwxNjUuNjUsMjE1LjcsMTY5LjU3LDIxMi40NSwxNjcuNzZaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC02My43NCkiLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPg==")}h1 span{position:absolute;display:block;width:48px;width:3rem;top:6px;right:289px;-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}#home{display:block;text-decoration:none;text-indent:-90000px;width:180px;min-height:100px;margin:4rem auto}p{text-align:center;margin-top:1rem}#beacon-cookies{position:fixed;z-index:1000;bottom:0;right:0;left:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;color:#fff;background:#24282a;padding:1em 0;opacity:1}#beacon-cookies>div{width:1000px}#beacon-cookies>div h6{font-size:1.5em;margin:0;padding:0}#beacon-cookies>div p{margin:1em 0}#beacon-cookies>div a{display:inline-block;color:#e05540}#beacon-cookies button{width:140px;margin-left:1em;border-radius:3px;height:2em;color:inherit;background-color:#e05540;border:none;cursor:pointer}#beacon-cookies.hide-me{opacity:0;-webkit-transition:opacity 1s;transition:opacity 1s}#beacon-cookies+footer{margin-bottom:9rem}#beacon-cookies.hide-me+footer{margin-bottom:0;-webkit-transition:margin 1.5s;transition:margin 1.5s} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3Njc3MvZXJyb3JzLnNjc3MiLCIuLi8uLi9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uL2Vycm9yLmNzcyIsIi4uLy4uL3Njc3MvX2Nvb2tpZXMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxLQUNFLG1EQUFBLEFBQ0EsZUFBQSxBQUNBLGNDTFcsQURNWCxnQkFBQSxBQUVBLFlBQUEsQUFBYSxhQUFBLENFRmQsQUZPRCxHQUNJLGNDYlEsQURjUixrQkFBQSxBQUNBLGtCQUFBLEFBRUEsa0JBQUEsQUFRQSx3QkFBQSxBQUNBLDRCQUFBLEFBQ0EsNkJBQUEsQUFDQSw0L0pBQUEsQ0VaSCxBRkVHLFFBQ0gsa0JBQUEsQUFDQSxjQUFBLEFBQWUsV0FBQSxXQUFBLEFBQ2YsUUFBQSxBQUFTLFlBQUEsQUFDVCxpQ0FBQSx3QkFBQSxDRUVBLEFGT0QsTUFDSSxjQUFBLEFBQ0EscUJBQUEsQUFDQSxxQkFBQSxBQUNBLFlBQUEsQUFBYSxpQkFBQSxBQUNiLGdCQUFBLENFSEgsQUZPRCxFQUNLLGtCQUFBLEFBQ0EsZUFBQSxDRUpKLEFDeENELGdCQUNJLGVBQUEsQUFBZ0IsYUFBQSxBQUNoQixTQUFBLEFBQ0EsUUFBQSxBQUFTLE9BQUEsQUFDVCxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFDQSx5QkFBQSxtQkFBQSxBQUNBLHdCQUFBLHVCQUFBLEFBRUEsV0FBQSxBQUFjLG1CQUFBLEFBRWQsY0FBQSxBQXdCQSxTQUFBLENEcUJILEFDM0NHLG9CQUNILFlBQUEsQ0Q2Q0EsQUMzQ0EsdUJBQUssZ0JBQUEsQUFBaUIsU0FBQSxBQUFVLFNBQUEsQ0RnRGhDLEFDL0NBLHNCQUFJLFlBQUEsQ0RrREosQUNqREEsc0JBQ0kscUJBQUEsQUFDQSxhQUFBLENEbURKLEFDL0NHLHVCQUNILFlBQUEsQUFDQSxnQkFBQSxBQUNBLGtCQUFBLEFBQ0EsV0FBQSxBQUNBLGNBQUEsQUFDQSx5QkFBQSxBQUNBLFlBQUEsQUFDQSxjQUFBLENEaURBLEFDN0NHLHdCQUFZLFVBQUEsQUFBVyw4QkFBQSxxQkFBQSxDRGlEMUIsQUM3Q0QsdUJBQTJCLGtCQUFBLENEaUQxQixBQ2hERCwrQkFBbUMsZ0JBQUEsQUFBa0IsK0JBQUEsc0JBQUEsQ0RxRHBEIiwiZmlsZSI6Ii4uL2Vycm9yLmNzcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCxudWxsLCJib2R5IHtcbiAgZm9udC1mYW1pbHk6IFwiUm9ib3RvXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICM1ZTVlNWU7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHdpZHRoOiA5NjBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbmgxIHtcbiAgY29sb3I6ICNlZTZkNTI7XG4gIHBhZGRpbmctdG9wOiAyMHJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtODtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJek9UWXVOakVpSUdobGFXZG9kRDBpTWpjeUxqVXlJaUIyYVdWM1FtOTRQU0l3SURBZ016azJMall4SURJM01pNDFNaUkrRFFvZ0lEeGtaV1p6UGcwS0lDQWdJRHh6ZEhsc1pUNE5DaUFnSUNBZ0lDNWpiSE10TVNCN0RRb2dJQ0FnSUNBZ0lHbHpiMnhoZEdsdmJqb2dhWE52YkdGMFpUc05DaUFnSUNBZ0lIME5DZzBLSUNBZ0lDQWdMbU5zY3kweUlIc05DaUFnSUNBZ0lDQWdabWxzYkRvZ0kyWXhaakptTWpzTkNpQWdJQ0FnSUgwTkNnMEtJQ0FnSUNBZ0xtTnNjeTB6SUhzTkNpQWdJQ0FnSUNBZ1ptbHNiRG9nSTJaa1lUc05DaUFnSUNBZ0lIME5DZzBLSUNBZ0lDQWdMbU5zY3kwMElIc05DaUFnSUNBZ0lDQWdabWxzYkRvZ0l6QmlNVEF3WmpzTkNpQWdJQ0FnSUgwTkNnMEtJQ0FnSUNBZ0xtTnNjeTAxSUhzTkNpQWdJQ0FnSUNBZ1ptbHNiRG9nSTJaalpqVmtaVHNOQ2lBZ0lDQWdJSDBOQ2cwS0lDQWdJQ0FnTG1Oc2N5MDJJSHNOQ2lBZ0lDQWdJQ0FnWm1sc2JEb2dJMlpqWVdNellqc05DaUFnSUNBZ0lIME5DZzBLSUNBZ0lDQWdMbU5zY3kwM0lIc05DaUFnSUNBZ0lDQWdabWxzYkRvZ0kyVm1ObVUxTXpzTkNpQWdJQ0FnSUgwTkNnMEtJQ0FnSUNBZ0xtTnNjeTA0TENBdVkyeHpMVGtnZXcwS0lDQWdJQ0FnSUNCbWFXeHNPaUFqTW1GaE9HSmhPdzBLSUNBZ0lDQWdmUTBLRFFvZ0lDQWdJQ0F1WTJ4ekxUa2dldzBLSUNBZ0lDQWdJQ0J0YVhndFlteGxibVF0Ylc5a1pUb2diWFZzZEdsd2JIazdEUW9nSUNBZ0lDQjlEUW9nSUNBZ1BDOXpkSGxzWlQ0TkNpQWdQQzlrWldaelBnMEtJQ0E4ZEdsMGJHVStSMlZRYUVWNElFVnljbTl5UEM5MGFYUnNaVDROQ2lBZ1BHY2dZMnhoYzNNOUltTnNjeTB4SWo0TkNpQWdJQ0E4WnlCcFpEMGlRMkZ3WVY4eElpQmtZWFJoTFc1aGJXVTlJa05oY0dFZ01TSStEUW9nSUNBZ0lDQThaV3hzYVhCelpTQmpiR0Z6Y3owaVkyeHpMVElpSUdONFBTSXhNamN1TVRNaUlHTjVQU0l5TmpBdU5qZ2lJSEo0UFNJNE5pNHpOU0lnY25rOUlqRXhMamd6SWk4K0RRb2dJQ0FnSUNBOGNHRjBhQ0JqYkdGemN6MGlZMnh6TFRNaUlHUTlJazB4TnpNdU56SXNPRFl1TlRGRE1UVXdMaklzTkRNdU5EUXNOemt1TmpNc056UXVOeXczT1M0Mk15dzNOQzQzWXkwME15NDRMREUyTGpNNExUSXlMamN4TERZd0xqWXhMVEl5TGpjeExEWXdMall4YkRFdU5UY3NOQzQxTTJNdE5DNHlOeTB1TVRRdE55NDROeXd4TGpnNExUZ3VOU3cxTFM0M015d3pMamNzTWk0NE9DdzNMalUxTERndU1EZ3NPQzQyWVRFeUxqUTRMREV5TGpRNExEQXNNQ3d3TERVdU1UY3NNR3d6TGpReExEa3VOemxqT0RBdU16RXNNVGd1T1RNc01URTVMakkwTERjdU5USXNNVEU1TGpJMExEY3VOVEpETVRreUxqTTRMREV5TWk0Mk9Dd3hOek11TnpJc09EWXVOVEVzTVRjekxqY3lMRGcyTGpVeFdpSWdkSEpoYm5ObWIzSnRQU0owY21GdWMyeGhkR1VvTUNBdE5qTXVOelFwSWk4K0RRb2dJQ0FnSUNBOGNHRjBhQ0JqYkdGemN6MGlZMnh6TFRRaUlHUTlJazB4TnpNdU56SXNPRFl1TlRGRE1UVXdMaklzTkRNdU5EUXNOemt1TmpNc056UXVOeXczT1M0Mk15dzNOQzQzWXkwME15NDRMREUyTGpNNExUSXlMamN4TERZd0xqWXhMVEl5TGpjeExEWXdMall4YkRFdU5UY3NOQzQxTTFNM09Dd3hNall1TXl3M015NHhOQ3c1TlM0eE9HTXdMREFzTmpBdU5ETXRNeTR5T0N3M055NDBOeTB5TWk0NU5Dd3dMREFzT1M0MU1pNDFPQ3d5TXk0Mk1pd3hOUzR6TVdnd1F6RTNNeTQ1TVN3NE5pNDROeXd4TnpNdU56SXNPRFl1TlRFc01UY3pMamN5TERnMkxqVXhXaUlnZEhKaGJuTm1iM0p0UFNKMGNtRnVjMnhoZEdVb01DQXROak11TnpRcElpOCtEUW9nSUNBZ0lDQThaV3hzYVhCelpTQmpiR0Z6Y3owaVkyeHpMVFFpSUdONFBTSXhNVFl1TlRRaUlHTjVQU0kxTWk0M015SWdjbmc5SWpRdU1EWWlJSEo1UFNJMExqRWlMejROQ2lBZ0lDQWdJRHhsYkd4cGNITmxJR05zWVhOelBTSmpiSE10TkNJZ1kzZzlJakUyTVM0MU1pSWdZM2s5SWpRekxqY3lJaUJ5ZUQwaU5DNHdOaUlnY25rOUlqUXVNU0l2UGcwS0lDQWdJQ0FnUEhCaGRHZ2dZMnhoYzNNOUltTnNjeTAxSWlCa1BTSk5NVE00TGpRMExERXpOaTR4TTJFeU1pNHhOU3d5TWk0eE5Td3dMREFzTUN3eE9TMHhMalkwY3pRdU1Ea3NNakV1TXkwM0xqSTNMREl5TGpjelF6RTFNQzR5TERFMU55NHlNaXd4TXpnc01UVTNMREV6T0M0ME5Dd3hNell1TVROYUlpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d3SUMwMk15NDNOQ2tpTHo0TkNpQWdJQ0FnSUR4d1lYUm9JR05zWVhOelBTSmpiSE10TmlJZ1pEMGlUVEl6TkM0MU1Td3hOalV1TmpWekxURTNMamN5TERNdU5qSXRNakl1TURZc01pNHhNV013TERBc015NHhPU3d4TWk0Mk55MHpMamM0TERFMUxqRXpMREFzTUMweE5pNDRNeXcwTGpreUxUSXlMamM0TFRFeUxqRXlMREFzTUMwek9DNDVNeXd4TVM0ME1TMHhNVGt1TWpRdE55NDFNaXd3TERBdE5EVXVORElzTVRBdU5DMDJNaXcwTmk0M01pd3dMREFzTVRVc05DNDNPU3d5TUM0ME1Td3hNUzR3Tnl3d0xEQXNNVEV1TWkweE9DNDFOQ3d5T0M0eExUSXhMamczUXpRNUxqUXlMREl4Tml3ME9Td3lNelV1TnpZc05qQXNNalV4TGpreGJDMHVNalF1TURkek1Ua3VPU3cyTkM0d055d3lOUzQxTml3Mk9TNHpPV013TERBc05TNDFOeXcyTGpFekxERTJMalkzTERJdU9EVXNNQ3d3TERFekxqQTVMVEl1TnpFc01URXVOelF0TVRBdU5qTXNNQ3d3TFRJdU1UVXRNVFF1T1RRdE1URXVNakV0TkRkaE1UQTBMalF5TERFd05DNDBNaXd3TERBc01Dd3hOeTQzTkMwdU1XTXpMakE0TERJd0xqRXpMRGN1T1RJc05EZ3VPVEVzTVRBdU9UUXNOVEl1T0Rrc01Dd3dMRFF1TkRrc055d3hOaXcxTGpVNUxEQXNNQ3d4TXk0ek5TMHVORGdzTVRNdU16RXRPQzQxTWl3d0xEQXNNeTR3TmkweE9DNDFPUzB5TGpJNExUWXdMamcwYkMwdU5DMHVNVFZqTlM0Mk1pMDFMakl4TERFM0xqZ3hMVEU1TGpjM0xESTBMakkyTFRVeUxqSTNMRGt1T0RJc05TNDFOaXd5Tnk0eU5Dd3hNaXcwTWk0ME9TMHVNVGxETWpJMExqVXpMREl3TXl3eU5EQXVOVFlzTVRnNUxqWXpMREl6TkM0MU1Td3hOalV1TmpWYUlpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d3SUMwMk15NDNOQ2tpTHo0TkNpQWdJQ0FnSUR4d1lYUm9JR05zWVhOelBTSmpiSE10TnlJZ1pEMGlUVEUxTWk0ek9Dd3hOelF1TVRkeExUVXNNQzB4TUM0NE15MHVNVFZqTGpZekxEZ3NMamN6TERJekxqSXROUzR4TkN3ek55NDROMnd4TVM0NE9Td3hNQzQyTkN3eE15NHlNaTB4TUM0Mk5GTXhOVGN1TmpJc01UZzJMamd5TERFMU1pNHpPQ3d4TnpRdU1UZGFJaUIwY21GdWMyWnZjbTA5SW5SeVlXNXpiR0YwWlNnd0lDMDJNeTQzTkNraUx6NE5DaUFnSUNBZ0lEeHdZWFJvSUdOc1lYTnpQU0pqYkhNdE15SWdaRDBpVFRRdU5pd3lNVEJ6TFRFd0xqTTFMREUxTGpnMUxEQXNNakl1Tm1Nd0xEQXNNVEV1TXpVc055NHhOeXd4Tnk0ME5DMHlMalkyTERBc01Dd3hMalk1TFRJdU9Dd3pMVGd1T0RkRE1Ua3VOaXd5TVRRdU56WXNOQzQyTERJeE1DdzBMallzTWpFd1dpSWdkSEpoYm5ObWIzSnRQU0owY21GdWMyeGhkR1VvTUNBdE5qTXVOelFwSWk4K0RRb2dJQ0FnSUNBOGNHRjBhQ0JqYkdGemN6MGlZMnh6TFRnaUlHUTlJazB6TVRjdU9ERXNNVE00TGpreVl5MDNMalF0TGpFNUxURTJMakExTFRFekxqUTNMVEU1TGpreUxUTXhMakZ6TFRFdU5Ua3RNek11TWpjc05TMHpOaTQyTlV3eE56VXVNVGNzTVRJM0xqSXphREJqTFRFdU1Ea3VNalF0TVM0eU15d3pMamM0TFM0ek15dzNMamx6TWk0MU1pdzNMakkyTERNdU5pdzNiREUwTGpjMUxTNHpOQ3cwTGpNeExERTVMalkwTERNNUxqWTFMVGd1T0RjdE1pNDFOeTB4TVM0M01scHRMVGc0TGpreUxEZ3VNelF0TWpZdU1UVXNOUzQ0TmkweUxqVXlMVEV4TGpRNExESTNMakk1TFM0Mk0xb2lJSFJ5WVc1elptOXliVDBpZEhKaGJuTnNZWFJsS0RBZ0xUWXpMamMwS1NJdlBnMEtJQ0FnSUNBZ1BIQmhkR2dnWTJ4aGMzTTlJbU5zY3kwNUlpQmtQU0pOTXpJMUxqY3pMREV3TVM0MU9XTTBMakV6TERFNExqZ3lMREV1TWpVc016VXVORGN0Tmk0ME5Dd3pOeTR4T1hNdE1UY3VNamN0TVRJdU1UUXRNakV1TkMwek1TMHhMakkwTFRNMUxqUTNMRFl1TkRRdE16Y3VNVGxUTXpJeExqWXNPREl1Tnpnc016STFMamN6TERFd01TNDFPVm9pSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEQWdMVFl6TGpjMEtTSXZQZzBLSUNBZ0lDQWdQSEJoZEdnZ1kyeGhjM005SW1Oc2N5MDBJaUJrUFNKTk16QXhMalEzTERFd09DNHhNV010TXk0MU5pMHhOaTR4T0MweUxqTTJMVE13TGpnNUxESXVOQzB6Tnk0ek5DMDNMak16TERJdU1qY3RNVEFzTVRndU5qSXROaXd6Tnk0d05Td3pMalU0TERFMkxqTTBMREV4TGpJM0xESTRMamt6TERFNExqSTNMRE13TGpnMFF6TXhNQzR5TERFek15NHlOU3d6TURRdU5Ea3NNVEl4TGprc016QXhMalEzTERFd09DNHhNVm9pSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEQWdMVFl6TGpjMEtTSXZQZzBLSUNBZ0lDQWdQSEJoZEdnZ1kyeGhjM005SW1Oc2N5MDBJaUJrUFNKTk1qazJMak0wTERnMUxqSTBZVGN4TGpJMExEY3hMakkwTERBc01Dd3dMREV1TlRVc01qSXVOVGdzTnpBdU9DdzNNQzQ0TERBc01Dd3dMRGdzTWpFdU1UTmpOUzQ0TXkwMExqSTNMRGd1TmpJdE1UUXNOaTR6TlMweU5DNHpOVk16TURNdU5ERXNPRFl1TmpJc01qazJMak0wTERnMUxqSTBXaUlnZEhKaGJuTm1iM0p0UFNKMGNtRnVjMnhoZEdVb01DQXROak11TnpRcElpOCtEUW9nSUNBZ0lDQThjR0YwYUNCamJHRnpjejBpWTJ4ekxUTWlJR1E5SWsweU1USXVORFVzTVRZM0xqYzJZVE0yTGpVM0xETTJMalUzTERBc01Dd3hMVEV1TmprdE1UVnpMak0wTFRVdU56RXNOeTQzTFRaak1Dd3dMRGN1TnpFdE15d3hNaTQwTERVdU5qZ3NNQ3d3TERNdU5Ea3NOaTQ0T0N3ekxqWTFMREV6TGpJMlF6SXpOQzQxTVN3eE5qVXVOalVzTWpFMUxqY3NNVFk1TGpVM0xESXhNaTQwTlN3eE5qY3VOelphSWlCMGNtRnVjMlp2Y20wOUluUnlZVzV6YkdGMFpTZ3dJQzAyTXk0M05Da2lMejROQ2lBZ0lDQThMMmMrRFFvZ0lEd3ZaejROQ2p3dmMzWm5QZz09XCIpO1xufVxuaDEgc3BhbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAzcmVtO1xuICB0b3A6IDZweDtcbiAgcmlnaHQ6IDI4OXB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTJkZWcpO1xufVxuXG4jaG9tZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRleHQtaW5kZW50OiAtOTAwMDBweDtcbiAgd2lkdGg6IDE4MHB4O1xuICBtaW4taGVpZ2h0OiAxMDBweDtcbiAgbWFyZ2luOiA0cmVtIGF1dG87XG59XG5cbnAge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDFyZW07XG59XG5cbiNiZWFjb24tY29va2llcyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogMTAwMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgY29sb3I6IHdoaXRlO1xuICBiYWNrZ3JvdW5kOiAjMjQyODJhO1xuICBwYWRkaW5nOiAxZW0gMDtcbiAgb3BhY2l0eTogMTtcbn1cbiNiZWFjb24tY29va2llcyA+IGRpdiB7XG4gIHdpZHRoOiAxMDAwcHg7XG59XG4jYmVhY29uLWNvb2tpZXMgPiBkaXYgaDYge1xuICBmb250LXNpemU6IDEuNWVtO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4jYmVhY29uLWNvb2tpZXMgPiBkaXYgcCB7XG4gIG1hcmdpbjogMWVtIDA7XG59XG4jYmVhY29uLWNvb2tpZXMgPiBkaXYgYSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgY29sb3I6ICNlMDU1NDA7XG59XG4jYmVhY29uLWNvb2tpZXMgYnV0dG9uIHtcbiAgd2lkdGg6IDE0MHB4O1xuICBtYXJnaW4tbGVmdDogMWVtO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGhlaWdodDogMmVtO1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwNTU0MDtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4jYmVhY29uLWNvb2tpZXMuaGlkZS1tZSB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMXM7XG59XG5cbiNiZWFjb24tY29va2llcyArIGZvb3RlciB7XG4gIG1hcmdpbi1ib3R0b206IDlyZW07XG59XG5cbiNiZWFjb24tY29va2llcy5oaWRlLW1lICsgZm9vdGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdHJhbnNpdGlvbjogbWFyZ2luIDEuNXM7XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLmNzcy5tYXAgKi9cbiIsbnVsbF19 */ \ No newline at end of file diff --git a/ui/static/css/error.css.map b/ui/static/css/error.css.map new file mode 100644 index 0000000..5f65399 --- /dev/null +++ b/ui/static/css/error.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/errors.scss","../scss/_variables.scss","../scss/_cookies.scss"],"names":[],"mappings":"AAGA;EACE;EACA;EACA,OCLW;EDMX;EAEA;EAAa;;;AAKf;EACI,OCbQ;EDcR;EACA;EAEA;EAQA;EACA;EACA;EACA;;AAVA;EACH;EACA;EAAe;EACf;EAAS;EACT;;;AASD;EACI;EACA;EACA;EACA;EAAa;EACb;;;AAIJ;EACK;EACA;;;AE5CL;EACI;EAAgB;EAChB;EACA;EAAS;EACT;EACA;EACA;EACA;EAEA;EAAc;EAEd;EAwBA;;AAtBA;EACH;;AAEA;EAAK;EAAiB;EAAU;;AAChC;EAAI;;AACJ;EACI;EACA;;AAID;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIG;EAAY;EAAW;;;AAI3B;EAA2B;;;AAC3B;EAAmC;EAAkB","file":"error.css"} \ No newline at end of file diff --git a/ui/static/css/fontawesome.v5.0.10.css b/ui/static/css/fontawesome.v5.0.10.css new file mode 100644 index 0000000..17032d8 --- /dev/null +++ b/ui/static/css/fontawesome.v5.0.10.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.0.10 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:a 2s linear infinite;animation:a 2s linear infinite}.fa-pulse{-webkit-animation:a 1s steps(8) infinite;animation:a 1s steps(8) infinite}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-aws:before{content:"\f375"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blind:before{content:"\f29d"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-certificate:before{content:"\f0a3"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-credit-card:before{content:"\f09d"}.fa-crop:before{content:"\f125"}.fa-crosshairs:before{content:"\f05b"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-deviantart:before{content:"\f1bd"}.fa-diagnoses:before{content:"\f470"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drupal:before{content:"\f1a9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-excel:before{content:"\f1c3"}.fa-file-image:before{content:"\f1c5"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-firstdraft:before{content:"\f3a1"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frown:before{content:"\f119"}.fa-futbol:before{content:"\f1e3"}.fa-gamepad:before{content:"\f11b"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-gift:before{content:"\f06b"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-martini:before{content:"\f000"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hashtag:before{content:"\f292"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-heart:before{content:"\f004"}.fa-heartbeat:before{content:"\f21e"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-internet-explorer:before{content:"\f26b"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jenkins:before{content:"\f3b6"}.fa-joget:before{content:"\f3b7"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-key:before{content:"\f084"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-korvue:before{content:"\f42f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-male:before{content:"\f183"}.fa-map:before{content:"\f279"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-maxcdn:before{content:"\f136"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-meh:before{content:"\f11a"}.fa-mercury:before{content:"\f223"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-moon:before{content:"\f186"}.fa-motorcycle:before{content:"\f21c"}.fa-mouse-pointer:before{content:"\f245"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-plane:before{content:"\f072"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poo:before{content:"\f2fe"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-random:before{content:"\f074"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-rendact:before{content:"\f3e4"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-resolving:before{content:"\f3e7"}.fa-retweet:before{content:"\f079"}.fa-ribbon:before{content:"\f4d6"}.fa-road:before{content:"\f018"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-rupee-sign:before{content:"\f156"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-scribd:before{content:"\f28a"}.fa-search:before{content:"\f002"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shower:before{content:"\f2cc"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smoking:before{content:"\f48d"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowflake:before{content:"\f2dc"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spinner:before{content:"\f110"}.fa-spotify:before{content:"\f1bc"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-star:before{content:"\f005"}.fa-star-half:before{content:"\f089"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-strava:before{content:"\f428"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-trademark:before{content:"\f25c"}.fa-train:before{content:"\f238"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-moving:before{content:"\f4df"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-circle:before{content:"\f2bd"}.fa-user-md:before{content:"\f0f0"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vuejs:before{content:"\f41f"}.fa-warehouse:before{content:"\f494"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-glass:before{content:"\f4e3"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:Font Awesome\ 5 Free}.fa,.fas{font-weight:900} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2ZvbnRhd2Vzb21lLnY1LjAuMTAuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRyx3QkFDcUIsa0NBQWtDLG1DQUFtQyxxQkFBcUIsa0JBQWtCLG9CQUFvQixvQkFBb0IsYUFBYSxDQUFDLE9BQU8sb0JBQW9CLGtCQUFrQix1QkFBdUIsQ0FBQyxPQUFPLGVBQWUsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLFFBQVEsY0FBYyxDQUFDLE9BQU8sa0JBQWtCLFlBQVksQ0FBQyxPQUFPLHFCQUFxQixrQkFBa0IsY0FBYyxDQUFDLFVBQVUsaUJBQWlCLENBQUMsT0FBTyxVQUFVLGtCQUFrQixrQkFBa0IsVUFBVSxtQkFBbUIsQ0FBQyxXQUFXLHdCQUF3QixtQkFBbUIsd0JBQXdCLENBQUMsY0FBYyxVQUFVLENBQUMsZUFBZSxXQUFXLENBQUMseUZBQXlGLGlCQUFpQixDQUFDLDhGQUE4RixnQkFBZ0IsQ0FBQyxTQUFTLHVDQUFBLDhCQUE4QixDQUFDLFVBQVUseUNBQUEsZ0NBQWdDLENBQUMscUJBQWEsR0FBRywrQkFBQSxzQkFBc0IsQ0FBQyxHQUFHLGdDQUFBLHVCQUF1QixDQUFDLENBQWxFLGFBQWEsR0FBRywrQkFBQSxzQkFBc0IsQ0FBQyxHQUFHLGdDQUFBLHVCQUF1QixDQUFDLENBQUMsY0FBYyxzRUFBc0UsZ0NBQUEsdUJBQXVCLENBQUMsZUFBZSxzRUFBc0UsaUNBQUEsd0JBQXdCLENBQUMsZUFBZSxzRUFBc0UsaUNBQUEsd0JBQXdCLENBQUMsb0JBQW9CLGdGQUFnRiw2QkFBQSxvQkFBb0IsQ0FBQyxrQkFBa0IsNkJBQUEsb0JBQW9CLENBQUMsdURBQXVELCtFQUErRSxDQUFDLHFDQUFxQyw0QkFBQSxtQkFBbUIsQ0FBQyxnSEFBZ0gsb0JBQW9CLFdBQVcsQ0FBQyxVQUFVLHFCQUFxQixXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLFNBQVMsQ0FBQywwQkFBMEIsT0FBTyxrQkFBa0Isa0JBQWtCLFVBQVUsQ0FBQyxhQUFhLG1CQUFtQixDQUFDLGFBQWEsYUFBYSxDQUFDLFlBQVksVUFBVSxDQUFDLGlCQUFpQixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQywrQ0FBK0MsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxpQ0FBaUMsZUFBZSxDQUFDLGlDQUFpQyxlQUFlLENBQUMsa0NBQWtDLGVBQWUsQ0FBQywrQkFBK0IsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyw4QkFBOEIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1Q0FBdUMsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxrQ0FBa0MsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQywrQkFBK0IsZUFBZSxDQUFDLCtCQUErQixlQUFlLENBQUMsZ0NBQWdDLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyw4QkFBOEIsZUFBZSxDQUFDLGdDQUFnQyxlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyxvQ0FBb0MsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsOEJBQThCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyw4QkFBOEIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyw4QkFBOEIsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLCtCQUErQixlQUFlLENBQUMsK0JBQStCLGVBQWUsQ0FBQyxnQ0FBZ0MsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyw0QkFBNEIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxnQ0FBZ0MsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyw0QkFBNEIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQywrQkFBK0IsZUFBZSxDQUFDLG1DQUFtQyxlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsY0FBYyxlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyw0QkFBNEIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyw0QkFBNEIsZUFBZSxDQUFDLCtCQUErQixlQUFlLENBQUMsc0NBQXNDLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsY0FBYyxlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGdDQUFnQyxlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLFNBQVMsU0FBUyxtQkFBbUIsV0FBVyxZQUFZLGdCQUFnQixVQUFVLGtCQUFrQixTQUFTLENBQUMsbURBQW1ELFVBQVUsWUFBWSxTQUFTLGlCQUFpQixnQkFBZ0IsVUFBVSxDQUFDLFdBQVcsbUNBQW1DLGtCQUFrQixnQkFBZ0IsdUNBQXVDLG9TQUFvUyxDQUFDLEtBQUssa0NBQWtDLENBQUMsV0FBVyxpQ0FBaUMsa0JBQWtCLGdCQUFnQix3Q0FBd0MseVNBQXlTLENBQUMsS0FBSyxlQUFlLENBQUMsV0FBVyxpQ0FBaUMsa0JBQWtCLGdCQUFnQixzQ0FBc0MsK1JBQStSLENBQUMsY0FBYyxnQ0FBZ0MsQ0FBQyxTQUFTLGVBQWUsQ0FBQyIsImZpbGUiOiIuLi9mb250YXdlc29tZS52NS4wLjEwLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogRm9udCBBd2Vzb21lIEZyZWUgNS4wLjEwIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZSAoSWNvbnM6IENDIEJZIDQuMCwgRm9udHM6IFNJTCBPRkwgMS4xLCBDb2RlOiBNSVQgTGljZW5zZSlcbiAqL1xuLmZhLC5mYWIsLmZhbCwuZmFyLC5mYXN7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDt0ZXh0LXJlbmRlcmluZzphdXRvO2xpbmUtaGVpZ2h0OjF9LmZhLWxne2ZvbnQtc2l6ZToxLjMzMzMzZW07bGluZS1oZWlnaHQ6Ljc1ZW07dmVydGljYWwtYWxpZ246LS4wNjY3ZW19LmZhLXhze2ZvbnQtc2l6ZTouNzVlbX0uZmEtc217Zm9udC1zaXplOi44NzVlbX0uZmEtMXh7Zm9udC1zaXplOjFlbX0uZmEtMnh7Zm9udC1zaXplOjJlbX0uZmEtM3h7Zm9udC1zaXplOjNlbX0uZmEtNHh7Zm9udC1zaXplOjRlbX0uZmEtNXh7Zm9udC1zaXplOjVlbX0uZmEtNnh7Zm9udC1zaXplOjZlbX0uZmEtN3h7Zm9udC1zaXplOjdlbX0uZmEtOHh7Zm9udC1zaXplOjhlbX0uZmEtOXh7Zm9udC1zaXplOjllbX0uZmEtMTB4e2ZvbnQtc2l6ZToxMGVtfS5mYS1md3t0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxLjI1ZW19LmZhLXVse2xpc3Qtc3R5bGUtdHlwZTpub25lO21hcmdpbi1sZWZ0OjIuNWVtO3BhZGRpbmctbGVmdDowfS5mYS11bD5saXtwb3NpdGlvbjpyZWxhdGl2ZX0uZmEtbGl7bGVmdDotMmVtO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjJlbTtsaW5lLWhlaWdodDppbmhlcml0fS5mYS1ib3JkZXJ7Ym9yZGVyOi4wOGVtIHNvbGlkICNlZWU7Ym9yZGVyLXJhZGl1czouMWVtO3BhZGRpbmc6LjJlbSAuMjVlbSAuMTVlbX0uZmEtcHVsbC1sZWZ0e2Zsb2F0OmxlZnR9LmZhLXB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LmZhLmZhLXB1bGwtbGVmdCwuZmFiLmZhLXB1bGwtbGVmdCwuZmFsLmZhLXB1bGwtbGVmdCwuZmFyLmZhLXB1bGwtbGVmdCwuZmFzLmZhLXB1bGwtbGVmdHttYXJnaW4tcmlnaHQ6LjNlbX0uZmEuZmEtcHVsbC1yaWdodCwuZmFiLmZhLXB1bGwtcmlnaHQsLmZhbC5mYS1wdWxsLXJpZ2h0LC5mYXIuZmEtcHVsbC1yaWdodCwuZmFzLmZhLXB1bGwtcmlnaHR7bWFyZ2luLWxlZnQ6LjNlbX0uZmEtc3BpbnthbmltYXRpb246YSAycyBpbmZpbml0ZSBsaW5lYXJ9LmZhLXB1bHNle2FuaW1hdGlvbjphIDFzIGluZmluaXRlIHN0ZXBzKDgpfUBrZXlmcmFtZXMgYXswJXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0uZmEtcm90YXRlLTkwey1tcy1maWx0ZXI6XCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0xKVwiO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5mYS1yb3RhdGUtMTgwey1tcy1maWx0ZXI6XCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yKVwiO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uZmEtcm90YXRlLTI3MHstbXMtZmlsdGVyOlwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MylcIjt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9LmZhLWZsaXAtaG9yaXpvbnRhbHstbXMtZmlsdGVyOlwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MCwgbWlycm9yPTEpXCI7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LmZhLWZsaXAtdmVydGljYWx7dHJhbnNmb3JtOnNjYWxlWSgtMSl9LmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsLC5mYS1mbGlwLXZlcnRpY2Fsey1tcy1maWx0ZXI6XCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yLCBtaXJyb3I9MSlcIn0uZmEtZmxpcC1ob3Jpem9udGFsLmZhLWZsaXAtdmVydGljYWx7dHJhbnNmb3JtOnNjYWxlKC0xKX06cm9vdCAuZmEtZmxpcC1ob3Jpem9udGFsLDpyb290IC5mYS1mbGlwLXZlcnRpY2FsLDpyb290IC5mYS1yb3RhdGUtOTAsOnJvb3QgLmZhLXJvdGF0ZS0xODAsOnJvb3QgLmZhLXJvdGF0ZS0yNzB7LXdlYmtpdC1maWx0ZXI6bm9uZTtmaWx0ZXI6bm9uZX0uZmEtc3RhY2t7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjJlbTtsaW5lLWhlaWdodDoyZW07cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOjJlbX0uZmEtc3RhY2stMXgsLmZhLXN0YWNrLTJ4e2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlfS5mYS1zdGFjay0xeHtsaW5lLWhlaWdodDppbmhlcml0fS5mYS1zdGFjay0yeHtmb250LXNpemU6MmVtfS5mYS1pbnZlcnNle2NvbG9yOiNmZmZ9LmZhLTUwMHB4OmJlZm9yZXtjb250ZW50OlwiXFxmMjZlXCJ9LmZhLWFjY2Vzc2libGUtaWNvbjpiZWZvcmV7Y29udGVudDpcIlxcZjM2OFwifS5mYS1hY2N1c29mdDpiZWZvcmV7Y29udGVudDpcIlxcZjM2OVwifS5mYS1hZGRyZXNzLWJvb2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYjlcIn0uZmEtYWRkcmVzcy1jYXJkOmJlZm9yZXtjb250ZW50OlwiXFxmMmJiXCJ9LmZhLWFkanVzdDpiZWZvcmV7Y29udGVudDpcIlxcZjA0MlwifS5mYS1hZG46YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNzBcIn0uZmEtYWR2ZXJzYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNmFcIn0uZmEtYWZmaWxpYXRldGhlbWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNmJcIn0uZmEtYWxnb2xpYTpiZWZvcmV7Y29udGVudDpcIlxcZjM2Y1wifS5mYS1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMzdcIn0uZmEtYWxpZ24tanVzdGlmeTpiZWZvcmV7Y29udGVudDpcIlxcZjAzOVwifS5mYS1hbGlnbi1sZWZ0OmJlZm9yZXtjb250ZW50OlwiXFxmMDM2XCJ9LmZhLWFsaWduLXJpZ2h0OmJlZm9yZXtjb250ZW50OlwiXFxmMDM4XCJ9LmZhLWFsbGVyZ2llczpiZWZvcmV7Y29udGVudDpcIlxcZjQ2MVwifS5mYS1hbWF6b246YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNzBcIn0uZmEtYW1hem9uLXBheTpiZWZvcmV7Y29udGVudDpcIlxcZjQyY1wifS5mYS1hbWJ1bGFuY2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZjlcIn0uZmEtYW1lcmljYW4tc2lnbi1sYW5ndWFnZS1pbnRlcnByZXRpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYTNcIn0uZmEtYW1pbGlhOmJlZm9yZXtjb250ZW50OlwiXFxmMzZkXCJ9LmZhLWFuY2hvcjpiZWZvcmV7Y29udGVudDpcIlxcZjEzZFwifS5mYS1hbmRyb2lkOmJlZm9yZXtjb250ZW50OlwiXFxmMTdiXCJ9LmZhLWFuZ2VsbGlzdDpiZWZvcmV7Y29udGVudDpcIlxcZjIwOVwifS5mYS1hbmdsZS1kb3VibGUtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjEwM1wifS5mYS1hbmdsZS1kb3VibGUtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjEwMFwifS5mYS1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMDFcIn0uZmEtYW5nbGUtZG91YmxlLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMTAyXCJ9LmZhLWFuZ2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMDdcIn0uZmEtYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjEwNFwifS5mYS1hbmdsZS1yaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjEwNVwifS5mYS1hbmdsZS11cDpiZWZvcmV7Y29udGVudDpcIlxcZjEwNlwifS5mYS1hbmdyeWNyZWF0aXZlOmJlZm9yZXtjb250ZW50OlwiXFxmMzZlXCJ9LmZhLWFuZ3VsYXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MjBcIn0uZmEtYXBwLXN0b3JlOmJlZm9yZXtjb250ZW50OlwiXFxmMzZmXCJ9LmZhLWFwcC1zdG9yZS1pb3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzBcIn0uZmEtYXBwZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzFcIn0uZmEtYXBwbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNzlcIn0uZmEtYXBwbGUtcGF5OmJlZm9yZXtjb250ZW50OlwiXFxmNDE1XCJ9LmZhLWFyY2hpdmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODdcIn0uZmEtYXJyb3ctYWx0LWNpcmNsZS1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMzU4XCJ9LmZhLWFycm93LWFsdC1jaXJjbGUtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjM1OVwifS5mYS1hcnJvdy1hbHQtY2lyY2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OlwiXFxmMzVhXCJ9LmZhLWFycm93LWFsdC1jaXJjbGUtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNWJcIn0uZmEtYXJyb3ctY2lyY2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYWJcIn0uZmEtYXJyb3ctY2lyY2xlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYThcIn0uZmEtYXJyb3ctY2lyY2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OlwiXFxmMGE5XCJ9LmZhLWFycm93LWNpcmNsZS11cDpiZWZvcmV7Y29udGVudDpcIlxcZjBhYVwifS5mYS1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMDYzXCJ9LmZhLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNjBcIn0uZmEtYXJyb3ctcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNjFcIn0uZmEtYXJyb3ctdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNjJcIn0uZmEtYXJyb3dzLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjBiMlwifS5mYS1hcnJvd3MtYWx0LWg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMzdcIn0uZmEtYXJyb3dzLWFsdC12OmJlZm9yZXtjb250ZW50OlwiXFxmMzM4XCJ9LmZhLWFzc2lzdGl2ZS1saXN0ZW5pbmctc3lzdGVtczpiZWZvcmV7Y29udGVudDpcIlxcZjJhMlwifS5mYS1hc3RlcmlzazpiZWZvcmV7Y29udGVudDpcIlxcZjA2OVwifS5mYS1hc3ltbWV0cmlrOmJlZm9yZXtjb250ZW50OlwiXFxmMzcyXCJ9LmZhLWF0OmJlZm9yZXtjb250ZW50OlwiXFxmMWZhXCJ9LmZhLWF1ZGlibGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzNcIn0uZmEtYXVkaW8tZGVzY3JpcHRpb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOWVcIn0uZmEtYXV0b3ByZWZpeGVyOmJlZm9yZXtjb250ZW50OlwiXFxmNDFjXCJ9LmZhLWF2aWFuZXg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzRcIn0uZmEtYXZpYXRvOmJlZm9yZXtjb250ZW50OlwiXFxmNDIxXCJ9LmZhLWF3czpiZWZvcmV7Y29udGVudDpcIlxcZjM3NVwifS5mYS1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjA0YVwifS5mYS1iYWxhbmNlLXNjYWxlOmJlZm9yZXtjb250ZW50OlwiXFxmMjRlXCJ9LmZhLWJhbjpiZWZvcmV7Y29udGVudDpcIlxcZjA1ZVwifS5mYS1iYW5kLWFpZDpiZWZvcmV7Y29udGVudDpcIlxcZjQ2MlwifS5mYS1iYW5kY2FtcDpiZWZvcmV7Y29udGVudDpcIlxcZjJkNVwifS5mYS1iYXJjb2RlOmJlZm9yZXtjb250ZW50OlwiXFxmMDJhXCJ9LmZhLWJhcnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYzlcIn0uZmEtYmFzZWJhbGwtYmFsbDpiZWZvcmV7Y29udGVudDpcIlxcZjQzM1wifS5mYS1iYXNrZXRiYWxsLWJhbGw6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MzRcIn0uZmEtYmF0aDpiZWZvcmV7Y29udGVudDpcIlxcZjJjZFwifS5mYS1iYXR0ZXJ5LWVtcHR5OmJlZm9yZXtjb250ZW50OlwiXFxmMjQ0XCJ9LmZhLWJhdHRlcnktZnVsbDpiZWZvcmV7Y29udGVudDpcIlxcZjI0MFwifS5mYS1iYXR0ZXJ5LWhhbGY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNDJcIn0uZmEtYmF0dGVyeS1xdWFydGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjQzXCJ9LmZhLWJhdHRlcnktdGhyZWUtcXVhcnRlcnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNDFcIn0uZmEtYmVkOmJlZm9yZXtjb250ZW50OlwiXFxmMjM2XCJ9LmZhLWJlZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZmNcIn0uZmEtYmVoYW5jZTpiZWZvcmV7Y29udGVudDpcIlxcZjFiNFwifS5mYS1iZWhhbmNlLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFiNVwifS5mYS1iZWxsOmJlZm9yZXtjb250ZW50OlwiXFxmMGYzXCJ9LmZhLWJlbGwtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZjZcIn0uZmEtYmljeWNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjIwNlwifS5mYS1iaW1vYmplY3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzhcIn0uZmEtYmlub2N1bGFyczpiZWZvcmV7Y29udGVudDpcIlxcZjFlNVwifS5mYS1iaXJ0aGRheS1jYWtlOmJlZm9yZXtjb250ZW50OlwiXFxmMWZkXCJ9LmZhLWJpdGJ1Y2tldDpiZWZvcmV7Y29udGVudDpcIlxcZjE3MVwifS5mYS1iaXRjb2luOmJlZm9yZXtjb250ZW50OlwiXFxmMzc5XCJ9LmZhLWJpdHk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzN2FcIn0uZmEtYmxhY2stdGllOmJlZm9yZXtjb250ZW50OlwiXFxmMjdlXCJ9LmZhLWJsYWNrYmVycnk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzN2JcIn0uZmEtYmxpbmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOWRcIn0uZmEtYmxvZ2dlcjpiZWZvcmV7Y29udGVudDpcIlxcZjM3Y1wifS5mYS1ibG9nZ2VyLWI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzN2RcIn0uZmEtYmx1ZXRvb3RoOmJlZm9yZXtjb250ZW50OlwiXFxmMjkzXCJ9LmZhLWJsdWV0b290aC1iOmJlZm9yZXtjb250ZW50OlwiXFxmMjk0XCJ9LmZhLWJvbGQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMzJcIn0uZmEtYm9sdDpiZWZvcmV7Y29udGVudDpcIlxcZjBlN1wifS5mYS1ib21iOmJlZm9yZXtjb250ZW50OlwiXFxmMWUyXCJ9LmZhLWJvb2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMmRcIn0uZmEtYm9va21hcms6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMmVcIn0uZmEtYm93bGluZy1iYWxsOmJlZm9yZXtjb250ZW50OlwiXFxmNDM2XCJ9LmZhLWJveDpiZWZvcmV7Y29udGVudDpcIlxcZjQ2NlwifS5mYS1ib3gtb3BlbjpiZWZvcmV7Y29udGVudDpcIlxcZjQ5ZVwifS5mYS1ib3hlczpiZWZvcmV7Y29udGVudDpcIlxcZjQ2OFwifS5mYS1icmFpbGxlOmJlZm9yZXtjb250ZW50OlwiXFxmMmExXCJ9LmZhLWJyaWVmY2FzZTpiZWZvcmV7Y29udGVudDpcIlxcZjBiMVwifS5mYS1icmllZmNhc2UtbWVkaWNhbDpiZWZvcmV7Y29udGVudDpcIlxcZjQ2OVwifS5mYS1idGM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNWFcIn0uZmEtYnVnOmJlZm9yZXtjb250ZW50OlwiXFxmMTg4XCJ9LmZhLWJ1aWxkaW5nOmJlZm9yZXtjb250ZW50OlwiXFxmMWFkXCJ9LmZhLWJ1bGxob3JuOmJlZm9yZXtjb250ZW50OlwiXFxmMGExXCJ9LmZhLWJ1bGxzZXllOmJlZm9yZXtjb250ZW50OlwiXFxmMTQwXCJ9LmZhLWJ1cm46YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NmFcIn0uZmEtYnVyb21vYmVsZXhwZXJ0ZTpiZWZvcmV7Y29udGVudDpcIlxcZjM3ZlwifS5mYS1idXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMDdcIn0uZmEtYnV5c2VsbGFkczpiZWZvcmV7Y29udGVudDpcIlxcZjIwZFwifS5mYS1jYWxjdWxhdG9yOmJlZm9yZXtjb250ZW50OlwiXFxmMWVjXCJ9LmZhLWNhbGVuZGFyOmJlZm9yZXtjb250ZW50OlwiXFxmMTMzXCJ9LmZhLWNhbGVuZGFyLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjA3M1wifS5mYS1jYWxlbmRhci1jaGVjazpiZWZvcmV7Y29udGVudDpcIlxcZjI3NFwifS5mYS1jYWxlbmRhci1taW51czpiZWZvcmV7Y29udGVudDpcIlxcZjI3MlwifS5mYS1jYWxlbmRhci1wbHVzOmJlZm9yZXtjb250ZW50OlwiXFxmMjcxXCJ9LmZhLWNhbGVuZGFyLXRpbWVzOmJlZm9yZXtjb250ZW50OlwiXFxmMjczXCJ9LmZhLWNhbWVyYTpiZWZvcmV7Y29udGVudDpcIlxcZjAzMFwifS5mYS1jYW1lcmEtcmV0cm86YmVmb3Jle2NvbnRlbnQ6XCJcXGYwODNcIn0uZmEtY2Fwc3VsZXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NmJcIn0uZmEtY2FyOmJlZm9yZXtjb250ZW50OlwiXFxmMWI5XCJ9LmZhLWNhcmV0LWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZDdcIn0uZmEtY2FyZXQtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjBkOVwifS5mYS1jYXJldC1yaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjBkYVwifS5mYS1jYXJldC1zcXVhcmUtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjE1MFwifS5mYS1jYXJldC1zcXVhcmUtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjE5MVwifS5mYS1jYXJldC1zcXVhcmUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNTJcIn0uZmEtY2FyZXQtc3F1YXJlLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMTUxXCJ9LmZhLWNhcmV0LXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMGQ4XCJ9LmZhLWNhcnQtYXJyb3ctZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjIxOFwifS5mYS1jYXJ0LXBsdXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTdcIn0uZmEtY2MtYW1hem9uLXBheTpiZWZvcmV7Y29udGVudDpcIlxcZjQyZFwifS5mYS1jYy1hbWV4OmJlZm9yZXtjb250ZW50OlwiXFxmMWYzXCJ9LmZhLWNjLWFwcGxlLXBheTpiZWZvcmV7Y29udGVudDpcIlxcZjQxNlwifS5mYS1jYy1kaW5lcnMtY2x1YjpiZWZvcmV7Y29udGVudDpcIlxcZjI0Y1wifS5mYS1jYy1kaXNjb3ZlcjpiZWZvcmV7Y29udGVudDpcIlxcZjFmMlwifS5mYS1jYy1qY2I6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNGJcIn0uZmEtY2MtbWFzdGVyY2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjFmMVwifS5mYS1jYy1wYXlwYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZjRcIn0uZmEtY2Mtc3RyaXBlOmJlZm9yZXtjb250ZW50OlwiXFxmMWY1XCJ9LmZhLWNjLXZpc2E6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZjBcIn0uZmEtY2VudGVyY29kZTpiZWZvcmV7Y29udGVudDpcIlxcZjM4MFwifS5mYS1jZXJ0aWZpY2F0ZTpiZWZvcmV7Y29udGVudDpcIlxcZjBhM1wifS5mYS1jaGFydC1hcmVhOmJlZm9yZXtjb250ZW50OlwiXFxmMWZlXCJ9LmZhLWNoYXJ0LWJhcjpiZWZvcmV7Y29udGVudDpcIlxcZjA4MFwifS5mYS1jaGFydC1saW5lOmJlZm9yZXtjb250ZW50OlwiXFxmMjAxXCJ9LmZhLWNoYXJ0LXBpZTpiZWZvcmV7Y29udGVudDpcIlxcZjIwMFwifS5mYS1jaGVjazpiZWZvcmV7Y29udGVudDpcIlxcZjAwY1wifS5mYS1jaGVjay1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNThcIn0uZmEtY2hlY2stc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTRhXCJ9LmZhLWNoZXNzOmJlZm9yZXtjb250ZW50OlwiXFxmNDM5XCJ9LmZhLWNoZXNzLWJpc2hvcDpiZWZvcmV7Y29udGVudDpcIlxcZjQzYVwifS5mYS1jaGVzcy1ib2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjQzY1wifS5mYS1jaGVzcy1raW5nOmJlZm9yZXtjb250ZW50OlwiXFxmNDNmXCJ9LmZhLWNoZXNzLWtuaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjQ0MVwifS5mYS1jaGVzcy1wYXduOmJlZm9yZXtjb250ZW50OlwiXFxmNDQzXCJ9LmZhLWNoZXNzLXF1ZWVuOmJlZm9yZXtjb250ZW50OlwiXFxmNDQ1XCJ9LmZhLWNoZXNzLXJvb2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NDdcIn0uZmEtY2hldnJvbi1jaXJjbGUtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjEzYVwifS5mYS1jaGV2cm9uLWNpcmNsZS1sZWZ0OmJlZm9yZXtjb250ZW50OlwiXFxmMTM3XCJ9LmZhLWNoZXZyb24tY2lyY2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OlwiXFxmMTM4XCJ9LmZhLWNoZXZyb24tY2lyY2xlLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMTM5XCJ9LmZhLWNoZXZyb24tZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjA3OFwifS5mYS1jaGV2cm9uLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNTNcIn0uZmEtY2hldnJvbi1yaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjA1NFwifS5mYS1jaGV2cm9uLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMDc3XCJ9LmZhLWNoaWxkOmJlZm9yZXtjb250ZW50OlwiXFxmMWFlXCJ9LmZhLWNocm9tZTpiZWZvcmV7Y29udGVudDpcIlxcZjI2OFwifS5mYS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMTFcIn0uZmEtY2lyY2xlLW5vdGNoOmJlZm9yZXtjb250ZW50OlwiXFxmMWNlXCJ9LmZhLWNsaXBib2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjMyOFwifS5mYS1jbGlwYm9hcmQtY2hlY2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NmNcIn0uZmEtY2xpcGJvYXJkLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NmRcIn0uZmEtY2xvY2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMTdcIn0uZmEtY2xvbmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNGRcIn0uZmEtY2xvc2VkLWNhcHRpb25pbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMGFcIn0uZmEtY2xvdWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYzJcIn0uZmEtY2xvdWQtZG93bmxvYWQtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMzgxXCJ9LmZhLWNsb3VkLXVwbG9hZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzODJcIn0uZmEtY2xvdWRzY2FsZTpiZWZvcmV7Y29udGVudDpcIlxcZjM4M1wifS5mYS1jbG91ZHNtaXRoOmJlZm9yZXtjb250ZW50OlwiXFxmMzg0XCJ9LmZhLWNsb3VkdmVyc2lmeTpiZWZvcmV7Y29udGVudDpcIlxcZjM4NVwifS5mYS1jb2RlOmJlZm9yZXtjb250ZW50OlwiXFxmMTIxXCJ9LmZhLWNvZGUtYnJhbmNoOmJlZm9yZXtjb250ZW50OlwiXFxmMTI2XCJ9LmZhLWNvZGVwZW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYxY2JcIn0uZmEtY29kaWVwaWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODRcIn0uZmEtY29mZmVlOmJlZm9yZXtjb250ZW50OlwiXFxmMGY0XCJ9LmZhLWNvZzpiZWZvcmV7Y29udGVudDpcIlxcZjAxM1wifS5mYS1jb2dzOmJlZm9yZXtjb250ZW50OlwiXFxmMDg1XCJ9LmZhLWNvbHVtbnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZGJcIn0uZmEtY29tbWVudDpiZWZvcmV7Y29udGVudDpcIlxcZjA3NVwifS5mYS1jb21tZW50LWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjI3YVwifS5mYS1jb21tZW50LWRvdHM6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YWRcIn0uZmEtY29tbWVudC1zbGFzaDpiZWZvcmV7Y29udGVudDpcIlxcZjRiM1wifS5mYS1jb21tZW50czpiZWZvcmV7Y29udGVudDpcIlxcZjA4NlwifS5mYS1jb21wYXNzOmJlZm9yZXtjb250ZW50OlwiXFxmMTRlXCJ9LmZhLWNvbXByZXNzOmJlZm9yZXtjb250ZW50OlwiXFxmMDY2XCJ9LmZhLWNvbm5lY3RkZXZlbG9wOmJlZm9yZXtjb250ZW50OlwiXFxmMjBlXCJ9LmZhLWNvbnRhbzpiZWZvcmV7Y29udGVudDpcIlxcZjI2ZFwifS5mYS1jb3B5OmJlZm9yZXtjb250ZW50OlwiXFxmMGM1XCJ9LmZhLWNvcHlyaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjFmOVwifS5mYS1jb3VjaDpiZWZvcmV7Y29udGVudDpcIlxcZjRiOFwifS5mYS1jcGFuZWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzODhcIn0uZmEtY3JlYXRpdmUtY29tbW9uczpiZWZvcmV7Y29udGVudDpcIlxcZjI1ZVwifS5mYS1jcmVkaXQtY2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjA5ZFwifS5mYS1jcm9wOmJlZm9yZXtjb250ZW50OlwiXFxmMTI1XCJ9LmZhLWNyb3NzaGFpcnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNWJcIn0uZmEtY3NzMzpiZWZvcmV7Y29udGVudDpcIlxcZjEzY1wifS5mYS1jc3MzLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjM4YlwifS5mYS1jdWJlOmJlZm9yZXtjb250ZW50OlwiXFxmMWIyXCJ9LmZhLWN1YmVzOmJlZm9yZXtjb250ZW50OlwiXFxmMWIzXCJ9LmZhLWN1dDpiZWZvcmV7Y29udGVudDpcIlxcZjBjNFwifS5mYS1jdXR0bGVmaXNoOmJlZm9yZXtjb250ZW50OlwiXFxmMzhjXCJ9LmZhLWQtYW5kLWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOGRcIn0uZmEtZGFzaGN1YmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTBcIn0uZmEtZGF0YWJhc2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYzBcIn0uZmEtZGVhZjpiZWZvcmV7Y29udGVudDpcIlxcZjJhNFwifS5mYS1kZWxpY2lvdXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYTVcIn0uZmEtZGVwbG95ZG9nOmJlZm9yZXtjb250ZW50OlwiXFxmMzhlXCJ9LmZhLWRlc2twcm86YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOGZcIn0uZmEtZGVza3RvcDpiZWZvcmV7Y29udGVudDpcIlxcZjEwOFwifS5mYS1kZXZpYW50YXJ0OmJlZm9yZXtjb250ZW50OlwiXFxmMWJkXCJ9LmZhLWRpYWdub3NlczpiZWZvcmV7Y29udGVudDpcIlxcZjQ3MFwifS5mYS1kaWdnOmJlZm9yZXtjb250ZW50OlwiXFxmMWE2XCJ9LmZhLWRpZ2l0YWwtb2NlYW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOTFcIn0uZmEtZGlzY29yZDpiZWZvcmV7Y29udGVudDpcIlxcZjM5MlwifS5mYS1kaXNjb3Vyc2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOTNcIn0uZmEtZG5hOmJlZm9yZXtjb250ZW50OlwiXFxmNDcxXCJ9LmZhLWRvY2h1YjpiZWZvcmV7Y29udGVudDpcIlxcZjM5NFwifS5mYS1kb2NrZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOTVcIn0uZmEtZG9sbGFyLXNpZ246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNTVcIn0uZmEtZG9sbHk6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NzJcIn0uZmEtZG9sbHktZmxhdGJlZDpiZWZvcmV7Y29udGVudDpcIlxcZjQ3NFwifS5mYS1kb25hdGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YjlcIn0uZmEtZG90LWNpcmNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjE5MlwifS5mYS1kb3ZlOmJlZm9yZXtjb250ZW50OlwiXFxmNGJhXCJ9LmZhLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OlwiXFxmMDE5XCJ9LmZhLWRyYWZ0MmRpZ2l0YWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOTZcIn0uZmEtZHJpYmJibGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxN2RcIn0uZmEtZHJpYmJibGUtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMzk3XCJ9LmZhLWRyb3Bib3g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNmJcIn0uZmEtZHJ1cGFsOmJlZm9yZXtjb250ZW50OlwiXFxmMWE5XCJ9LmZhLWR5YWxvZzpiZWZvcmV7Y29udGVudDpcIlxcZjM5OVwifS5mYS1lYXJseWJpcmRzOmJlZm9yZXtjb250ZW50OlwiXFxmMzlhXCJ9LmZhLWVkZ2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODJcIn0uZmEtZWRpdDpiZWZvcmV7Y29udGVudDpcIlxcZjA0NFwifS5mYS1lamVjdDpiZWZvcmV7Y29udGVudDpcIlxcZjA1MlwifS5mYS1lbGVtZW50b3I6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MzBcIn0uZmEtZWxsaXBzaXMtaDpiZWZvcmV7Y29udGVudDpcIlxcZjE0MVwifS5mYS1lbGxpcHNpcy12OmJlZm9yZXtjb250ZW50OlwiXFxmMTQyXCJ9LmZhLWVtYmVyOmJlZm9yZXtjb250ZW50OlwiXFxmNDIzXCJ9LmZhLWVtcGlyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFkMVwifS5mYS1lbnZlbG9wZTpiZWZvcmV7Y29udGVudDpcIlxcZjBlMFwifS5mYS1lbnZlbG9wZS1vcGVuOmJlZm9yZXtjb250ZW50OlwiXFxmMmI2XCJ9LmZhLWVudmVsb3BlLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjE5OVwifS5mYS1lbnZpcmE6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTlcIn0uZmEtZXJhc2VyOmJlZm9yZXtjb250ZW50OlwiXFxmMTJkXCJ9LmZhLWVybGFuZzpiZWZvcmV7Y29udGVudDpcIlxcZjM5ZFwifS5mYS1ldGhlcmV1bTpiZWZvcmV7Y29udGVudDpcIlxcZjQyZVwifS5mYS1ldHN5OmJlZm9yZXtjb250ZW50OlwiXFxmMmQ3XCJ9LmZhLWV1cm8tc2lnbjpiZWZvcmV7Y29udGVudDpcIlxcZjE1M1wifS5mYS1leGNoYW5nZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNjJcIn0uZmEtZXhjbGFtYXRpb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMmFcIn0uZmEtZXhjbGFtYXRpb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDZhXCJ9LmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDcxXCJ9LmZhLWV4cGFuZDpiZWZvcmV7Y29udGVudDpcIlxcZjA2NVwifS5mYS1leHBhbmQtYXJyb3dzLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjMxZVwifS5mYS1leHBlZGl0ZWRzc2w6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyM2VcIn0uZmEtZXh0ZXJuYWwtbGluay1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNWRcIn0uZmEtZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMzYwXCJ9LmZhLWV5ZTpiZWZvcmV7Y29udGVudDpcIlxcZjA2ZVwifS5mYS1leWUtZHJvcHBlcjpiZWZvcmV7Y29udGVudDpcIlxcZjFmYlwifS5mYS1leWUtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNzBcIn0uZmEtZmFjZWJvb2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOWFcIn0uZmEtZmFjZWJvb2stZjpiZWZvcmV7Y29udGVudDpcIlxcZjM5ZVwifS5mYS1mYWNlYm9vay1tZXNzZW5nZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOWZcIn0uZmEtZmFjZWJvb2stc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMDgyXCJ9LmZhLWZhc3QtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNDlcIn0uZmEtZmFzdC1mb3J3YXJkOmJlZm9yZXtjb250ZW50OlwiXFxmMDUwXCJ9LmZhLWZheDpiZWZvcmV7Y29udGVudDpcIlxcZjFhY1wifS5mYS1mZW1hbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODJcIn0uZmEtZmlnaHRlci1qZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZmJcIn0uZmEtZmlsZTpiZWZvcmV7Y29udGVudDpcIlxcZjE1YlwifS5mYS1maWxlLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjE1Y1wifS5mYS1maWxlLWFyY2hpdmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYzZcIn0uZmEtZmlsZS1hdWRpbzpiZWZvcmV7Y29udGVudDpcIlxcZjFjN1wifS5mYS1maWxlLWNvZGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYzlcIn0uZmEtZmlsZS1leGNlbDpiZWZvcmV7Y29udGVudDpcIlxcZjFjM1wifS5mYS1maWxlLWltYWdlOmJlZm9yZXtjb250ZW50OlwiXFxmMWM1XCJ9LmZhLWZpbGUtbWVkaWNhbDpiZWZvcmV7Y29udGVudDpcIlxcZjQ3N1wifS5mYS1maWxlLW1lZGljYWwtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmNDc4XCJ9LmZhLWZpbGUtcGRmOmJlZm9yZXtjb250ZW50OlwiXFxmMWMxXCJ9LmZhLWZpbGUtcG93ZXJwb2ludDpiZWZvcmV7Y29udGVudDpcIlxcZjFjNFwifS5mYS1maWxlLXZpZGVvOmJlZm9yZXtjb250ZW50OlwiXFxmMWM4XCJ9LmZhLWZpbGUtd29yZDpiZWZvcmV7Y29udGVudDpcIlxcZjFjMlwifS5mYS1maWxtOmJlZm9yZXtjb250ZW50OlwiXFxmMDA4XCJ9LmZhLWZpbHRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjBiMFwifS5mYS1maXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMDZkXCJ9LmZhLWZpcmUtZXh0aW5ndWlzaGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMTM0XCJ9LmZhLWZpcmVmb3g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjlcIn0uZmEtZmlyc3QtYWlkOmJlZm9yZXtjb250ZW50OlwiXFxmNDc5XCJ9LmZhLWZpcnN0LW9yZGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMmIwXCJ9LmZhLWZpcnN0ZHJhZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYTFcIn0uZmEtZmxhZzpiZWZvcmV7Y29udGVudDpcIlxcZjAyNFwifS5mYS1mbGFnLWNoZWNrZXJlZDpiZWZvcmV7Y29udGVudDpcIlxcZjExZVwifS5mYS1mbGFzazpiZWZvcmV7Y29udGVudDpcIlxcZjBjM1wifS5mYS1mbGlja3I6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNmVcIn0uZmEtZmxpcGJvYXJkOmJlZm9yZXtjb250ZW50OlwiXFxmNDRkXCJ9LmZhLWZseTpiZWZvcmV7Y29udGVudDpcIlxcZjQxN1wifS5mYS1mb2xkZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwN2JcIn0uZmEtZm9sZGVyLW9wZW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYwN2NcIn0uZmEtZm9udDpiZWZvcmV7Y29udGVudDpcIlxcZjAzMVwifS5mYS1mb250LWF3ZXNvbWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYjRcIn0uZmEtZm9udC1hd2Vzb21lLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjM1Y1wifS5mYS1mb250LWF3ZXNvbWUtZmxhZzpiZWZvcmV7Y29udGVudDpcIlxcZjQyNVwifS5mYS1mb250aWNvbnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODBcIn0uZmEtZm9udGljb25zLWZpOmJlZm9yZXtjb250ZW50OlwiXFxmM2EyXCJ9LmZhLWZvb3RiYWxsLWJhbGw6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NGVcIn0uZmEtZm9ydC1hd2Vzb21lOmJlZm9yZXtjb250ZW50OlwiXFxmMjg2XCJ9LmZhLWZvcnQtYXdlc29tZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYTNcIn0uZmEtZm9ydW1iZWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTFcIn0uZmEtZm9yd2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjA0ZVwifS5mYS1mb3Vyc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTgwXCJ9LmZhLWZyZWUtY29kZS1jYW1wOmJlZm9yZXtjb250ZW50OlwiXFxmMmM1XCJ9LmZhLWZyZWVic2Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYTRcIn0uZmEtZnJvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMTlcIn0uZmEtZnV0Ym9sOmJlZm9yZXtjb250ZW50OlwiXFxmMWUzXCJ9LmZhLWdhbWVwYWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMWJcIn0uZmEtZ2F2ZWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZTNcIn0uZmEtZ2VtOmJlZm9yZXtjb250ZW50OlwiXFxmM2E1XCJ9LmZhLWdlbmRlcmxlc3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMmRcIn0uZmEtZ2V0LXBvY2tldDpiZWZvcmV7Y29udGVudDpcIlxcZjI2NVwifS5mYS1nZzpiZWZvcmV7Y29udGVudDpcIlxcZjI2MFwifS5mYS1nZy1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjFcIn0uZmEtZ2lmdDpiZWZvcmV7Y29udGVudDpcIlxcZjA2YlwifS5mYS1naXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZDNcIn0uZmEtZ2l0LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFkMlwifS5mYS1naXRodWI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOWJcIn0uZmEtZ2l0aHViLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjExM1wifS5mYS1naXRodWItc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMDkyXCJ9LmZhLWdpdGtyYWtlbjpiZWZvcmV7Y29udGVudDpcIlxcZjNhNlwifS5mYS1naXRsYWI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTZcIn0uZmEtZ2l0dGVyOmJlZm9yZXtjb250ZW50OlwiXFxmNDI2XCJ9LmZhLWdsYXNzLW1hcnRpbmk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMDBcIn0uZmEtZ2xpZGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYTVcIn0uZmEtZ2xpZGUtZzpiZWZvcmV7Y29udGVudDpcIlxcZjJhNlwifS5mYS1nbG9iZTpiZWZvcmV7Y29udGVudDpcIlxcZjBhY1wifS5mYS1nb2ZvcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYTdcIn0uZmEtZ29sZi1iYWxsOmJlZm9yZXtjb250ZW50OlwiXFxmNDUwXCJ9LmZhLWdvb2RyZWFkczpiZWZvcmV7Y29udGVudDpcIlxcZjNhOFwifS5mYS1nb29kcmVhZHMtZzpiZWZvcmV7Y29udGVudDpcIlxcZjNhOVwifS5mYS1nb29nbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYTBcIn0uZmEtZ29vZ2xlLWRyaXZlOmJlZm9yZXtjb250ZW50OlwiXFxmM2FhXCJ9LmZhLWdvb2dsZS1wbGF5OmJlZm9yZXtjb250ZW50OlwiXFxmM2FiXCJ9LmZhLWdvb2dsZS1wbHVzOmJlZm9yZXtjb250ZW50OlwiXFxmMmIzXCJ9LmZhLWdvb2dsZS1wbHVzLWc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZDVcIn0uZmEtZ29vZ2xlLXBsdXMtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMGQ0XCJ9LmZhLWdvb2dsZS13YWxsZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZWVcIn0uZmEtZ3JhZHVhdGlvbi1jYXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxOWRcIn0uZmEtZ3JhdGlwYXk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODRcIn0uZmEtZ3JhdjpiZWZvcmV7Y29udGVudDpcIlxcZjJkNlwifS5mYS1ncmlwZmlyZTpiZWZvcmV7Y29udGVudDpcIlxcZjNhY1wifS5mYS1ncnVudDpiZWZvcmV7Y29udGVudDpcIlxcZjNhZFwifS5mYS1ndWxwOmJlZm9yZXtjb250ZW50OlwiXFxmM2FlXCJ9LmZhLWgtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMGZkXCJ9LmZhLWhhY2tlci1uZXdzOmJlZm9yZXtjb250ZW50OlwiXFxmMWQ0XCJ9LmZhLWhhY2tlci1uZXdzLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjNhZlwifS5mYS1oYW5kLWhvbGRpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YmRcIn0uZmEtaGFuZC1ob2xkaW5nLWhlYXJ0OmJlZm9yZXtjb250ZW50OlwiXFxmNGJlXCJ9LmZhLWhhbmQtaG9sZGluZy11c2Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YzBcIn0uZmEtaGFuZC1saXphcmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNThcIn0uZmEtaGFuZC1wYXBlcjpiZWZvcmV7Y29udGVudDpcIlxcZjI1NlwifS5mYS1oYW5kLXBlYWNlOmJlZm9yZXtjb250ZW50OlwiXFxmMjViXCJ9LmZhLWhhbmQtcG9pbnQtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjBhN1wifS5mYS1oYW5kLXBvaW50LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYTVcIn0uZmEtaGFuZC1wb2ludC1yaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjBhNFwifS5mYS1oYW5kLXBvaW50LXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMGE2XCJ9LmZhLWhhbmQtcG9pbnRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjI1YVwifS5mYS1oYW5kLXJvY2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNTVcIn0uZmEtaGFuZC1zY2lzc29yczpiZWZvcmV7Y29udGVudDpcIlxcZjI1N1wifS5mYS1oYW5kLXNwb2NrOmJlZm9yZXtjb250ZW50OlwiXFxmMjU5XCJ9LmZhLWhhbmRzOmJlZm9yZXtjb250ZW50OlwiXFxmNGMyXCJ9LmZhLWhhbmRzLWhlbHBpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YzRcIn0uZmEtaGFuZHNoYWtlOmJlZm9yZXtjb250ZW50OlwiXFxmMmI1XCJ9LmZhLWhhc2h0YWc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTJcIn0uZmEtaGRkOmJlZm9yZXtjb250ZW50OlwiXFxmMGEwXCJ9LmZhLWhlYWRpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZGNcIn0uZmEtaGVhZHBob25lczpiZWZvcmV7Y29udGVudDpcIlxcZjAyNVwifS5mYS1oZWFydDpiZWZvcmV7Y29udGVudDpcIlxcZjAwNFwifS5mYS1oZWFydGJlYXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMWVcIn0uZmEtaGlwczpiZWZvcmV7Y29udGVudDpcIlxcZjQ1MlwifS5mYS1oaXJlLWEtaGVscGVyOmJlZm9yZXtjb250ZW50OlwiXFxmM2IwXCJ9LmZhLWhpc3Rvcnk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZGFcIn0uZmEtaG9ja2V5LXB1Y2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NTNcIn0uZmEtaG9tZTpiZWZvcmV7Y29udGVudDpcIlxcZjAxNVwifS5mYS1ob29saTpiZWZvcmV7Y29udGVudDpcIlxcZjQyN1wifS5mYS1ob3NwaXRhbDpiZWZvcmV7Y29udGVudDpcIlxcZjBmOFwifS5mYS1ob3NwaXRhbC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0N2RcIn0uZmEtaG9zcGl0YWwtc3ltYm9sOmJlZm9yZXtjb250ZW50OlwiXFxmNDdlXCJ9LmZhLWhvdGphcjpiZWZvcmV7Y29udGVudDpcIlxcZjNiMVwifS5mYS1ob3VyZ2xhc3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNTRcIn0uZmEtaG91cmdsYXNzLWVuZDpiZWZvcmV7Y29udGVudDpcIlxcZjI1M1wifS5mYS1ob3VyZ2xhc3MtaGFsZjpiZWZvcmV7Y29udGVudDpcIlxcZjI1MlwifS5mYS1ob3VyZ2xhc3Mtc3RhcnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNTFcIn0uZmEtaG91eno6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyN2NcIn0uZmEtaHRtbDU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxM2JcIn0uZmEtaHVic3BvdDpiZWZvcmV7Y29udGVudDpcIlxcZjNiMlwifS5mYS1pLWN1cnNvcjpiZWZvcmV7Y29udGVudDpcIlxcZjI0NlwifS5mYS1pZC1iYWRnZTpiZWZvcmV7Y29udGVudDpcIlxcZjJjMVwifS5mYS1pZC1jYXJkOmJlZm9yZXtjb250ZW50OlwiXFxmMmMyXCJ9LmZhLWlkLWNhcmQtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmNDdmXCJ9LmZhLWltYWdlOmJlZm9yZXtjb250ZW50OlwiXFxmMDNlXCJ9LmZhLWltYWdlczpiZWZvcmV7Y29udGVudDpcIlxcZjMwMlwifS5mYS1pbWRiOmJlZm9yZXtjb250ZW50OlwiXFxmMmQ4XCJ9LmZhLWluYm94OmJlZm9yZXtjb250ZW50OlwiXFxmMDFjXCJ9LmZhLWluZGVudDpiZWZvcmV7Y29udGVudDpcIlxcZjAzY1wifS5mYS1pbmR1c3RyeTpiZWZvcmV7Y29udGVudDpcIlxcZjI3NVwifS5mYS1pbmZvOmJlZm9yZXtjb250ZW50OlwiXFxmMTI5XCJ9LmZhLWluZm8tY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDVhXCJ9LmZhLWluc3RhZ3JhbTpiZWZvcmV7Y29udGVudDpcIlxcZjE2ZFwifS5mYS1pbnRlcm5ldC1leHBsb3JlcjpiZWZvcmV7Y29udGVudDpcIlxcZjI2YlwifS5mYS1pb3hob3N0OmJlZm9yZXtjb250ZW50OlwiXFxmMjA4XCJ9LmZhLWl0YWxpYzpiZWZvcmV7Y29udGVudDpcIlxcZjAzM1wifS5mYS1pdHVuZXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYjRcIn0uZmEtaXR1bmVzLW5vdGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYjVcIn0uZmEtamF2YTpiZWZvcmV7Y29udGVudDpcIlxcZjRlNFwifS5mYS1qZW5raW5zOmJlZm9yZXtjb250ZW50OlwiXFxmM2I2XCJ9LmZhLWpvZ2V0OmJlZm9yZXtjb250ZW50OlwiXFxmM2I3XCJ9LmZhLWpvb21sYTpiZWZvcmV7Y29udGVudDpcIlxcZjFhYVwifS5mYS1qczpiZWZvcmV7Y29udGVudDpcIlxcZjNiOFwifS5mYS1qcy1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYjlcIn0uZmEtanNmaWRkbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxY2NcIn0uZmEta2V5OmJlZm9yZXtjb250ZW50OlwiXFxmMDg0XCJ9LmZhLWtleWJvYXJkOmJlZm9yZXtjb250ZW50OlwiXFxmMTFjXCJ9LmZhLWtleWNkbjpiZWZvcmV7Y29udGVudDpcIlxcZjNiYVwifS5mYS1raWNrc3RhcnRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjNiYlwifS5mYS1raWNrc3RhcnRlci1rOmJlZm9yZXtjb250ZW50OlwiXFxmM2JjXCJ9LmZhLWtvcnZ1ZTpiZWZvcmV7Y29udGVudDpcIlxcZjQyZlwifS5mYS1sYW5ndWFnZTpiZWZvcmV7Y29udGVudDpcIlxcZjFhYlwifS5mYS1sYXB0b3A6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMDlcIn0uZmEtbGFyYXZlbDpiZWZvcmV7Y29udGVudDpcIlxcZjNiZFwifS5mYS1sYXN0Zm06YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMDJcIn0uZmEtbGFzdGZtLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjIwM1wifS5mYS1sZWFmOmJlZm9yZXtjb250ZW50OlwiXFxmMDZjXCJ9LmZhLWxlYW5wdWI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTJcIn0uZmEtbGVtb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOTRcIn0uZmEtbGVzczpiZWZvcmV7Y29udGVudDpcIlxcZjQxZFwifS5mYS1sZXZlbC1kb3duLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjNiZVwifS5mYS1sZXZlbC11cC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYmZcIn0uZmEtbGlmZS1yaW5nOmJlZm9yZXtjb250ZW50OlwiXFxmMWNkXCJ9LmZhLWxpZ2h0YnVsYjpiZWZvcmV7Y29udGVudDpcIlxcZjBlYlwifS5mYS1saW5lOmJlZm9yZXtjb250ZW50OlwiXFxmM2MwXCJ9LmZhLWxpbms6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYzFcIn0uZmEtbGlua2VkaW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOGNcIn0uZmEtbGlua2VkaW4taW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZTFcIn0uZmEtbGlub2RlOmJlZm9yZXtjb250ZW50OlwiXFxmMmI4XCJ9LmZhLWxpbnV4OmJlZm9yZXtjb250ZW50OlwiXFxmMTdjXCJ9LmZhLWxpcmEtc2lnbjpiZWZvcmV7Y29udGVudDpcIlxcZjE5NVwifS5mYS1saXN0OmJlZm9yZXtjb250ZW50OlwiXFxmMDNhXCJ9LmZhLWxpc3QtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMDIyXCJ9LmZhLWxpc3Qtb2w6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwY2JcIn0uZmEtbGlzdC11bDpiZWZvcmV7Y29udGVudDpcIlxcZjBjYVwifS5mYS1sb2NhdGlvbi1hcnJvdzpiZWZvcmV7Y29udGVudDpcIlxcZjEyNFwifS5mYS1sb2NrOmJlZm9yZXtjb250ZW50OlwiXFxmMDIzXCJ9LmZhLWxvY2stb3BlbjpiZWZvcmV7Y29udGVudDpcIlxcZjNjMVwifS5mYS1sb25nLWFycm93LWFsdC1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMzA5XCJ9LmZhLWxvbmctYXJyb3ctYWx0LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMGFcIn0uZmEtbG9uZy1hcnJvdy1hbHQtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMGJcIn0uZmEtbG9uZy1hcnJvdy1hbHQtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMGNcIn0uZmEtbG93LXZpc2lvbjpiZWZvcmV7Y29udGVudDpcIlxcZjJhOFwifS5mYS1seWZ0OmJlZm9yZXtjb250ZW50OlwiXFxmM2MzXCJ9LmZhLW1hZ2VudG86YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYzRcIn0uZmEtbWFnaWM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZDBcIn0uZmEtbWFnbmV0OmJlZm9yZXtjb250ZW50OlwiXFxmMDc2XCJ9LmZhLW1hbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODNcIn0uZmEtbWFwOmJlZm9yZXtjb250ZW50OlwiXFxmMjc5XCJ9LmZhLW1hcC1tYXJrZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNDFcIn0uZmEtbWFwLW1hcmtlci1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYzVcIn0uZmEtbWFwLXBpbjpiZWZvcmV7Y29udGVudDpcIlxcZjI3NlwifS5mYS1tYXAtc2lnbnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNzdcIn0uZmEtbWFyczpiZWZvcmV7Y29udGVudDpcIlxcZjIyMlwifS5mYS1tYXJzLWRvdWJsZTpiZWZvcmV7Y29udGVudDpcIlxcZjIyN1wifS5mYS1tYXJzLXN0cm9rZTpiZWZvcmV7Y29udGVudDpcIlxcZjIyOVwifS5mYS1tYXJzLXN0cm9rZS1oOmJlZm9yZXtjb250ZW50OlwiXFxmMjJiXCJ9LmZhLW1hcnMtc3Ryb2tlLXY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMmFcIn0uZmEtbWF4Y2RuOmJlZm9yZXtjb250ZW50OlwiXFxmMTM2XCJ9LmZhLW1lZGFwcHM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYzZcIn0uZmEtbWVkaXVtOmJlZm9yZXtjb250ZW50OlwiXFxmMjNhXCJ9LmZhLW1lZGl1bS1tOmJlZm9yZXtjb250ZW50OlwiXFxmM2M3XCJ9LmZhLW1lZGtpdDpiZWZvcmV7Y29udGVudDpcIlxcZjBmYVwifS5mYS1tZWRydDpiZWZvcmV7Y29udGVudDpcIlxcZjNjOFwifS5mYS1tZWV0dXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZTBcIn0uZmEtbWVoOmJlZm9yZXtjb250ZW50OlwiXFxmMTFhXCJ9LmZhLW1lcmN1cnk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMjNcIn0uZmEtbWljcm9jaGlwOmJlZm9yZXtjb250ZW50OlwiXFxmMmRiXCJ9LmZhLW1pY3JvcGhvbmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMzBcIn0uZmEtbWljcm9waG9uZS1zbGFzaDpiZWZvcmV7Y29udGVudDpcIlxcZjEzMVwifS5mYS1taWNyb3NvZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzY2FcIn0uZmEtbWludXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNjhcIn0uZmEtbWludXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDU2XCJ9LmZhLW1pbnVzLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjE0NlwifS5mYS1taXg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzY2JcIn0uZmEtbWl4Y2xvdWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODlcIn0uZmEtbWl6dW5pOmJlZm9yZXtjb250ZW50OlwiXFxmM2NjXCJ9LmZhLW1vYmlsZTpiZWZvcmV7Y29udGVudDpcIlxcZjEwYlwifS5mYS1tb2JpbGUtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmM2NkXCJ9LmZhLW1vZHg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODVcIn0uZmEtbW9uZXJvOmJlZm9yZXtjb250ZW50OlwiXFxmM2QwXCJ9LmZhLW1vbmV5LWJpbGwtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmM2QxXCJ9LmZhLW1vb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODZcIn0uZmEtbW90b3JjeWNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjIxY1wifS5mYS1tb3VzZS1wb2ludGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjQ1XCJ9LmZhLW11c2ljOmJlZm9yZXtjb250ZW50OlwiXFxmMDAxXCJ9LmZhLW5hcHN0ZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZDJcIn0uZmEtbmV1dGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjJjXCJ9LmZhLW5ld3NwYXBlcjpiZWZvcmV7Y29udGVudDpcIlxcZjFlYVwifS5mYS1uaW50ZW5kby1zd2l0Y2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MThcIn0uZmEtbm9kZTpiZWZvcmV7Y29udGVudDpcIlxcZjQxOVwifS5mYS1ub2RlLWpzOmJlZm9yZXtjb250ZW50OlwiXFxmM2QzXCJ9LmZhLW5vdGVzLW1lZGljYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ODFcIn0uZmEtbnBtOmJlZm9yZXtjb250ZW50OlwiXFxmM2Q0XCJ9LmZhLW5zODpiZWZvcmV7Y29udGVudDpcIlxcZjNkNVwifS5mYS1udXRyaXRpb25peDpiZWZvcmV7Y29udGVudDpcIlxcZjNkNlwifS5mYS1vYmplY3QtZ3JvdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNDdcIn0uZmEtb2JqZWN0LXVuZ3JvdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNDhcIn0uZmEtb2Rub2tsYXNzbmlraTpiZWZvcmV7Y29udGVudDpcIlxcZjI2M1wifS5mYS1vZG5va2xhc3NuaWtpLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjI2NFwifS5mYS1vcGVuY2FydDpiZWZvcmV7Y29udGVudDpcIlxcZjIzZFwifS5mYS1vcGVuaWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxOWJcIn0uZmEtb3BlcmE6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNmFcIn0uZmEtb3B0aW4tbW9uc3RlcjpiZWZvcmV7Y29udGVudDpcIlxcZjIzY1wifS5mYS1vc2k6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MWFcIn0uZmEtb3V0ZGVudDpiZWZvcmV7Y29udGVudDpcIlxcZjAzYlwifS5mYS1wYWdlNDpiZWZvcmV7Y29udGVudDpcIlxcZjNkN1wifS5mYS1wYWdlbGluZXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxOGNcIn0uZmEtcGFpbnQtYnJ1c2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZmNcIn0uZmEtcGFsZmVkOmJlZm9yZXtjb250ZW50OlwiXFxmM2Q4XCJ9LmZhLXBhbGxldDpiZWZvcmV7Y29udGVudDpcIlxcZjQ4MlwifS5mYS1wYXBlci1wbGFuZTpiZWZvcmV7Y29udGVudDpcIlxcZjFkOFwifS5mYS1wYXBlcmNsaXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYzZcIn0uZmEtcGFyYWNodXRlLWJveDpiZWZvcmV7Y29udGVudDpcIlxcZjRjZFwifS5mYS1wYXJhZ3JhcGg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZGRcIn0uZmEtcGFzdGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZWFcIn0uZmEtcGF0cmVvbjpiZWZvcmV7Y29udGVudDpcIlxcZjNkOVwifS5mYS1wYXVzZTpiZWZvcmV7Y29udGVudDpcIlxcZjA0Y1wifS5mYS1wYXVzZS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOGJcIn0uZmEtcGF3OmJlZm9yZXtjb250ZW50OlwiXFxmMWIwXCJ9LmZhLXBheXBhbDpiZWZvcmV7Y29udGVudDpcIlxcZjFlZFwifS5mYS1wZW4tc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTRiXCJ9LmZhLXBlbmNpbC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMDNcIn0uZmEtcGVvcGxlLWNhcnJ5OmJlZm9yZXtjb250ZW50OlwiXFxmNGNlXCJ9LmZhLXBlcmNlbnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTVcIn0uZmEtcGVyaXNjb3BlOmJlZm9yZXtjb250ZW50OlwiXFxmM2RhXCJ9LmZhLXBoYWJyaWNhdG9yOmJlZm9yZXtjb250ZW50OlwiXFxmM2RiXCJ9LmZhLXBob2VuaXgtZnJhbWV3b3JrOmJlZm9yZXtjb250ZW50OlwiXFxmM2RjXCJ9LmZhLXBob25lOmJlZm9yZXtjb250ZW50OlwiXFxmMDk1XCJ9LmZhLXBob25lLXNsYXNoOmJlZm9yZXtjb250ZW50OlwiXFxmM2RkXCJ9LmZhLXBob25lLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjA5OFwifS5mYS1waG9uZS12b2x1bWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYTBcIn0uZmEtcGhwOmJlZm9yZXtjb250ZW50OlwiXFxmNDU3XCJ9LmZhLXBpZWQtcGlwZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYWVcIn0uZmEtcGllZC1waXBlci1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYThcIn0uZmEtcGllZC1waXBlci1oYXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ZTVcIn0uZmEtcGllZC1waXBlci1wcDpiZWZvcmV7Y29udGVudDpcIlxcZjFhN1wifS5mYS1waWdneS1iYW5rOmJlZm9yZXtjb250ZW50OlwiXFxmNGQzXCJ9LmZhLXBpbGxzOmJlZm9yZXtjb250ZW50OlwiXFxmNDg0XCJ9LmZhLXBpbnRlcmVzdDpiZWZvcmV7Y29udGVudDpcIlxcZjBkMlwifS5mYS1waW50ZXJlc3QtcDpiZWZvcmV7Y29udGVudDpcIlxcZjIzMVwifS5mYS1waW50ZXJlc3Qtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMGQzXCJ9LmZhLXBsYW5lOmJlZm9yZXtjb250ZW50OlwiXFxmMDcyXCJ9LmZhLXBsYXk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNGJcIn0uZmEtcGxheS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNDRcIn0uZmEtcGxheXN0YXRpb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZGZcIn0uZmEtcGx1ZzpiZWZvcmV7Y29udGVudDpcIlxcZjFlNlwifS5mYS1wbHVzOmJlZm9yZXtjb250ZW50OlwiXFxmMDY3XCJ9LmZhLXBsdXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDU1XCJ9LmZhLXBsdXMtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMGZlXCJ9LmZhLXBvZGNhc3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyY2VcIn0uZmEtcG9vOmJlZm9yZXtjb250ZW50OlwiXFxmMmZlXCJ9LmZhLXBvdW5kLXNpZ246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNTRcIn0uZmEtcG93ZXItb2ZmOmJlZm9yZXtjb250ZW50OlwiXFxmMDExXCJ9LmZhLXByZXNjcmlwdGlvbi1ib3R0bGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ODVcIn0uZmEtcHJlc2NyaXB0aW9uLWJvdHRsZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ODZcIn0uZmEtcHJpbnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMmZcIn0uZmEtcHJvY2VkdXJlczpiZWZvcmV7Y29udGVudDpcIlxcZjQ4N1wifS5mYS1wcm9kdWN0LWh1bnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODhcIn0uZmEtcHVzaGVkOmJlZm9yZXtjb250ZW50OlwiXFxmM2UxXCJ9LmZhLXB1enpsZS1waWVjZTpiZWZvcmV7Y29udGVudDpcIlxcZjEyZVwifS5mYS1weXRob246YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZTJcIn0uZmEtcXE6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZDZcIn0uZmEtcXJjb2RlOmJlZm9yZXtjb250ZW50OlwiXFxmMDI5XCJ9LmZhLXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlwiXFxmMTI4XCJ9LmZhLXF1ZXN0aW9uLWNpcmNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjA1OVwifS5mYS1xdWlkZGl0Y2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NThcIn0uZmEtcXVpbnNjYXBlOmJlZm9yZXtjb250ZW50OlwiXFxmNDU5XCJ9LmZhLXF1b3JhOmJlZm9yZXtjb250ZW50OlwiXFxmMmM0XCJ9LmZhLXF1b3RlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMGRcIn0uZmEtcXVvdGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMGVcIn0uZmEtcmFuZG9tOmJlZm9yZXtjb250ZW50OlwiXFxmMDc0XCJ9LmZhLXJhdmVscnk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZDlcIn0uZmEtcmVhY3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MWJcIn0uZmEtcmVhZG1lOmJlZm9yZXtjb250ZW50OlwiXFxmNGQ1XCJ9LmZhLXJlYmVsOmJlZm9yZXtjb250ZW50OlwiXFxmMWQwXCJ9LmZhLXJlY3ljbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYjhcIn0uZmEtcmVkLXJpdmVyOmJlZm9yZXtjb250ZW50OlwiXFxmM2UzXCJ9LmZhLXJlZGRpdDpiZWZvcmV7Y29udGVudDpcIlxcZjFhMVwifS5mYS1yZWRkaXQtYWxpZW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODFcIn0uZmEtcmVkZGl0LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFhMlwifS5mYS1yZWRvOmJlZm9yZXtjb250ZW50OlwiXFxmMDFlXCJ9LmZhLXJlZG8tYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMmY5XCJ9LmZhLXJlZ2lzdGVyZWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNWRcIn0uZmEtcmVuZGFjdDpiZWZvcmV7Y29udGVudDpcIlxcZjNlNFwifS5mYS1yZW5yZW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYxOGJcIn0uZmEtcmVwbHk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZTVcIn0uZmEtcmVwbHktYWxsOmJlZm9yZXtjb250ZW50OlwiXFxmMTIyXCJ9LmZhLXJlcGx5ZDpiZWZvcmV7Y29udGVudDpcIlxcZjNlNlwifS5mYS1yZXNvbHZpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZTdcIn0uZmEtcmV0d2VldDpiZWZvcmV7Y29udGVudDpcIlxcZjA3OVwifS5mYS1yaWJib246YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ZDZcIn0uZmEtcm9hZDpiZWZvcmV7Y29udGVudDpcIlxcZjAxOFwifS5mYS1yb2NrZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMzVcIn0uZmEtcm9ja2V0Y2hhdDpiZWZvcmV7Y29udGVudDpcIlxcZjNlOFwifS5mYS1yb2Nrcm1zOmJlZm9yZXtjb250ZW50OlwiXFxmM2U5XCJ9LmZhLXJzczpiZWZvcmV7Y29udGVudDpcIlxcZjA5ZVwifS5mYS1yc3Mtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTQzXCJ9LmZhLXJ1YmxlLXNpZ246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNThcIn0uZmEtcnVwZWUtc2lnbjpiZWZvcmV7Y29udGVudDpcIlxcZjE1NlwifS5mYS1zYWZhcmk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjdcIn0uZmEtc2FzczpiZWZvcmV7Y29udGVudDpcIlxcZjQxZVwifS5mYS1zYXZlOmJlZm9yZXtjb250ZW50OlwiXFxmMGM3XCJ9LmZhLXNjaGxpeDpiZWZvcmV7Y29udGVudDpcIlxcZjNlYVwifS5mYS1zY3JpYmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOGFcIn0uZmEtc2VhcmNoOmJlZm9yZXtjb250ZW50OlwiXFxmMDAyXCJ9LmZhLXNlYXJjaC1taW51czpiZWZvcmV7Y29udGVudDpcIlxcZjAxMFwifS5mYS1zZWFyY2gtcGx1czpiZWZvcmV7Y29udGVudDpcIlxcZjAwZVwifS5mYS1zZWFyY2hlbmdpbjpiZWZvcmV7Y29udGVudDpcIlxcZjNlYlwifS5mYS1zZWVkbGluZzpiZWZvcmV7Y29udGVudDpcIlxcZjRkOFwifS5mYS1zZWxsY2FzdDpiZWZvcmV7Y29udGVudDpcIlxcZjJkYVwifS5mYS1zZWxsc3k6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTNcIn0uZmEtc2VydmVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjMzXCJ9LmZhLXNlcnZpY2VzdGFjazpiZWZvcmV7Y29udGVudDpcIlxcZjNlY1wifS5mYS1zaGFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjA2NFwifS5mYS1zaGFyZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZTBcIn0uZmEtc2hhcmUtYWx0LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFlMVwifS5mYS1zaGFyZS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNGRcIn0uZmEtc2hla2VsLXNpZ246YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMGJcIn0uZmEtc2hpZWxkLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjNlZFwifS5mYS1zaGlwOmJlZm9yZXtjb250ZW50OlwiXFxmMjFhXCJ9LmZhLXNoaXBwaW5nLWZhc3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OGJcIn0uZmEtc2hpcnRzaW5idWxrOmJlZm9yZXtjb250ZW50OlwiXFxmMjE0XCJ9LmZhLXNob3BwaW5nLWJhZzpiZWZvcmV7Y29udGVudDpcIlxcZjI5MFwifS5mYS1zaG9wcGluZy1iYXNrZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTFcIn0uZmEtc2hvcHBpbmctY2FydDpiZWZvcmV7Y29udGVudDpcIlxcZjA3YVwifS5mYS1zaG93ZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyY2NcIn0uZmEtc2lnbjpiZWZvcmV7Y29udGVudDpcIlxcZjRkOVwifS5mYS1zaWduLWluLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjJmNlwifS5mYS1zaWduLWxhbmd1YWdlOmJlZm9yZXtjb250ZW50OlwiXFxmMmE3XCJ9LmZhLXNpZ24tb3V0LWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjJmNVwifS5mYS1zaWduYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMTJcIn0uZmEtc2ltcGx5YnVpbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTVcIn0uZmEtc2lzdHJpeDpiZWZvcmV7Y29udGVudDpcIlxcZjNlZVwifS5mYS1zaXRlbWFwOmJlZm9yZXtjb250ZW50OlwiXFxmMGU4XCJ9LmZhLXNreWF0bGFzOmJlZm9yZXtjb250ZW50OlwiXFxmMjE2XCJ9LmZhLXNreXBlOmJlZm9yZXtjb250ZW50OlwiXFxmMTdlXCJ9LmZhLXNsYWNrOmJlZm9yZXtjb250ZW50OlwiXFxmMTk4XCJ9LmZhLXNsYWNrLWhhc2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZWZcIn0uZmEtc2xpZGVycy1oOmJlZm9yZXtjb250ZW50OlwiXFxmMWRlXCJ9LmZhLXNsaWRlc2hhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZTdcIn0uZmEtc21pbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMThcIn0uZmEtc21va2luZzpiZWZvcmV7Y29udGVudDpcIlxcZjQ4ZFwifS5mYS1zbmFwY2hhdDpiZWZvcmV7Y29udGVudDpcIlxcZjJhYlwifS5mYS1zbmFwY2hhdC1naG9zdDpiZWZvcmV7Y29udGVudDpcIlxcZjJhY1wifS5mYS1zbmFwY2hhdC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYWRcIn0uZmEtc25vd2ZsYWtlOmJlZm9yZXtjb250ZW50OlwiXFxmMmRjXCJ9LmZhLXNvcnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZGNcIn0uZmEtc29ydC1hbHBoYS1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMTVkXCJ9LmZhLXNvcnQtYWxwaGEtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNWVcIn0uZmEtc29ydC1hbW91bnQtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjE2MFwifS5mYS1zb3J0LWFtb3VudC11cDpiZWZvcmV7Y29udGVudDpcIlxcZjE2MVwifS5mYS1zb3J0LWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZGRcIn0uZmEtc29ydC1udW1lcmljLWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjJcIn0uZmEtc29ydC1udW1lcmljLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMTYzXCJ9LmZhLXNvcnQtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZGVcIn0uZmEtc291bmRjbG91ZDpiZWZvcmV7Y29udGVudDpcIlxcZjFiZVwifS5mYS1zcGFjZS1zaHV0dGxlOmJlZm9yZXtjb250ZW50OlwiXFxmMTk3XCJ9LmZhLXNwZWFrYXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZjNcIn0uZmEtc3Bpbm5lcjpiZWZvcmV7Y29udGVudDpcIlxcZjExMFwifS5mYS1zcG90aWZ5OmJlZm9yZXtjb250ZW50OlwiXFxmMWJjXCJ9LmZhLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjBjOFwifS5mYS1zcXVhcmUtZnVsbDpiZWZvcmV7Y29udGVudDpcIlxcZjQ1Y1wifS5mYS1zdGFjay1leGNoYW5nZTpiZWZvcmV7Y29udGVudDpcIlxcZjE4ZFwifS5mYS1zdGFjay1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDpcIlxcZjE2Y1wifS5mYS1zdGFyOmJlZm9yZXtjb250ZW50OlwiXFxmMDA1XCJ9LmZhLXN0YXItaGFsZjpiZWZvcmV7Y29udGVudDpcIlxcZjA4OVwifS5mYS1zdGF5bGlua2VkOmJlZm9yZXtjb250ZW50OlwiXFxmM2Y1XCJ9LmZhLXN0ZWFtOmJlZm9yZXtjb250ZW50OlwiXFxmMWI2XCJ9LmZhLXN0ZWFtLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFiN1wifS5mYS1zdGVhbS1zeW1ib2w6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZjZcIn0uZmEtc3RlcC1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjA0OFwifS5mYS1zdGVwLWZvcndhcmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNTFcIn0uZmEtc3RldGhvc2NvcGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZjFcIn0uZmEtc3RpY2tlci1tdWxlOmJlZm9yZXtjb250ZW50OlwiXFxmM2Y3XCJ9LmZhLXN0aWNreS1ub3RlOmJlZm9yZXtjb250ZW50OlwiXFxmMjQ5XCJ9LmZhLXN0b3A6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNGRcIn0uZmEtc3RvcC1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOGRcIn0uZmEtc3RvcHdhdGNoOmJlZm9yZXtjb250ZW50OlwiXFxmMmYyXCJ9LmZhLXN0cmF2YTpiZWZvcmV7Y29udGVudDpcIlxcZjQyOFwifS5mYS1zdHJlZXQtdmlldzpiZWZvcmV7Y29udGVudDpcIlxcZjIxZFwifS5mYS1zdHJpa2V0aHJvdWdoOmJlZm9yZXtjb250ZW50OlwiXFxmMGNjXCJ9LmZhLXN0cmlwZTpiZWZvcmV7Y29udGVudDpcIlxcZjQyOVwifS5mYS1zdHJpcGUtczpiZWZvcmV7Y29udGVudDpcIlxcZjQyYVwifS5mYS1zdHVkaW92aW5hcmk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZjhcIn0uZmEtc3R1bWJsZXVwb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYTRcIn0uZmEtc3R1bWJsZXVwb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMWEzXCJ9LmZhLXN1YnNjcmlwdDpiZWZvcmV7Y29udGVudDpcIlxcZjEyY1wifS5mYS1zdWJ3YXk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMzlcIn0uZmEtc3VpdGNhc2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZjJcIn0uZmEtc3VuOmJlZm9yZXtjb250ZW50OlwiXFxmMTg1XCJ9LmZhLXN1cGVycG93ZXJzOmJlZm9yZXtjb250ZW50OlwiXFxmMmRkXCJ9LmZhLXN1cGVyc2NyaXB0OmJlZm9yZXtjb250ZW50OlwiXFxmMTJiXCJ9LmZhLXN1cHBsZTpiZWZvcmV7Y29udGVudDpcIlxcZjNmOVwifS5mYS1zeW5jOmJlZm9yZXtjb250ZW50OlwiXFxmMDIxXCJ9LmZhLXN5bmMtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMmYxXCJ9LmZhLXN5cmluZ2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OGVcIn0uZmEtdGFibGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwY2VcIn0uZmEtdGFibGUtdGVubmlzOmJlZm9yZXtjb250ZW50OlwiXFxmNDVkXCJ9LmZhLXRhYmxldDpiZWZvcmV7Y29udGVudDpcIlxcZjEwYVwifS5mYS10YWJsZXQtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmM2ZhXCJ9LmZhLXRhYmxldHM6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OTBcIn0uZmEtdGFjaG9tZXRlci1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZmRcIn0uZmEtdGFnOmJlZm9yZXtjb250ZW50OlwiXFxmMDJiXCJ9LmZhLXRhZ3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMmNcIn0uZmEtdGFwZTpiZWZvcmV7Y29udGVudDpcIlxcZjRkYlwifS5mYS10YXNrczpiZWZvcmV7Y29udGVudDpcIlxcZjBhZVwifS5mYS10YXhpOmJlZm9yZXtjb250ZW50OlwiXFxmMWJhXCJ9LmZhLXRlbGVncmFtOmJlZm9yZXtjb250ZW50OlwiXFxmMmM2XCJ9LmZhLXRlbGVncmFtLXBsYW5lOmJlZm9yZXtjb250ZW50OlwiXFxmM2ZlXCJ9LmZhLXRlbmNlbnQtd2VpYm86YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZDVcIn0uZmEtdGVybWluYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMjBcIn0uZmEtdGV4dC1oZWlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMzRcIn0uZmEtdGV4dC13aWR0aDpiZWZvcmV7Y29udGVudDpcIlxcZjAzNVwifS5mYS10aDpiZWZvcmV7Y29udGVudDpcIlxcZjAwYVwifS5mYS10aC1sYXJnZTpiZWZvcmV7Y29udGVudDpcIlxcZjAwOVwifS5mYS10aC1saXN0OmJlZm9yZXtjb250ZW50OlwiXFxmMDBiXCJ9LmZhLXRoZW1laXNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjJiMlwifS5mYS10aGVybW9tZXRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjQ5MVwifS5mYS10aGVybW9tZXRlci1lbXB0eTpiZWZvcmV7Y29udGVudDpcIlxcZjJjYlwifS5mYS10aGVybW9tZXRlci1mdWxsOmJlZm9yZXtjb250ZW50OlwiXFxmMmM3XCJ9LmZhLXRoZXJtb21ldGVyLWhhbGY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYzlcIn0uZmEtdGhlcm1vbWV0ZXItcXVhcnRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjJjYVwifS5mYS10aGVybW9tZXRlci10aHJlZS1xdWFydGVyczpiZWZvcmV7Y29udGVudDpcIlxcZjJjOFwifS5mYS10aHVtYnMtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjE2NVwifS5mYS10aHVtYnMtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjRcIn0uZmEtdGh1bWJ0YWNrOmJlZm9yZXtjb250ZW50OlwiXFxmMDhkXCJ9LmZhLXRpY2tldC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZmZcIn0uZmEtdGltZXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMGRcIn0uZmEtdGltZXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDU3XCJ9LmZhLXRpbnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNDNcIn0uZmEtdG9nZ2xlLW9mZjpiZWZvcmV7Y29udGVudDpcIlxcZjIwNFwifS5mYS10b2dnbGUtb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMDVcIn0uZmEtdHJhZGVtYXJrOmJlZm9yZXtjb250ZW50OlwiXFxmMjVjXCJ9LmZhLXRyYWluOmJlZm9yZXtjb250ZW50OlwiXFxmMjM4XCJ9LmZhLXRyYW5zZ2VuZGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjI0XCJ9LmZhLXRyYW5zZ2VuZGVyLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjIyNVwifS5mYS10cmFzaDpiZWZvcmV7Y29udGVudDpcIlxcZjFmOFwifS5mYS10cmFzaC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZWRcIn0uZmEtdHJlZTpiZWZvcmV7Y29udGVudDpcIlxcZjFiYlwifS5mYS10cmVsbG86YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODFcIn0uZmEtdHJpcGFkdmlzb3I6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjJcIn0uZmEtdHJvcGh5OmJlZm9yZXtjb250ZW50OlwiXFxmMDkxXCJ9LmZhLXRydWNrOmJlZm9yZXtjb250ZW50OlwiXFxmMGQxXCJ9LmZhLXRydWNrLWxvYWRpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ZGVcIn0uZmEtdHJ1Y2stbW92aW5nOmJlZm9yZXtjb250ZW50OlwiXFxmNGRmXCJ9LmZhLXR0eTpiZWZvcmV7Y29udGVudDpcIlxcZjFlNFwifS5mYS10dW1ibHI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNzNcIn0uZmEtdHVtYmxyLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjE3NFwifS5mYS10djpiZWZvcmV7Y29udGVudDpcIlxcZjI2Y1wifS5mYS10d2l0Y2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZThcIn0uZmEtdHdpdHRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjA5OVwifS5mYS10d2l0dGVyLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjA4MVwifS5mYS10eXBvMzpiZWZvcmV7Y29udGVudDpcIlxcZjQyYlwifS5mYS11YmVyOmJlZm9yZXtjb250ZW50OlwiXFxmNDAyXCJ9LmZhLXVpa2l0OmJlZm9yZXtjb250ZW50OlwiXFxmNDAzXCJ9LmZhLXVtYnJlbGxhOmJlZm9yZXtjb250ZW50OlwiXFxmMGU5XCJ9LmZhLXVuZGVybGluZTpiZWZvcmV7Y29udGVudDpcIlxcZjBjZFwifS5mYS11bmRvOmJlZm9yZXtjb250ZW50OlwiXFxmMGUyXCJ9LmZhLXVuZG8tYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMmVhXCJ9LmZhLXVuaXJlZ2lzdHJ5OmJlZm9yZXtjb250ZW50OlwiXFxmNDA0XCJ9LmZhLXVuaXZlcnNhbC1hY2Nlc3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOWFcIn0uZmEtdW5pdmVyc2l0eTpiZWZvcmV7Y29udGVudDpcIlxcZjE5Y1wifS5mYS11bmxpbms6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMjdcIn0uZmEtdW5sb2NrOmJlZm9yZXtjb250ZW50OlwiXFxmMDljXCJ9LmZhLXVubG9jay1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxM2VcIn0uZmEtdW50YXBwZDpiZWZvcmV7Y29udGVudDpcIlxcZjQwNVwifS5mYS11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOTNcIn0uZmEtdXNiOmJlZm9yZXtjb250ZW50OlwiXFxmMjg3XCJ9LmZhLXVzZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMDdcIn0uZmEtdXNlci1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYmRcIn0uZmEtdXNlci1tZDpiZWZvcmV7Y29udGVudDpcIlxcZjBmMFwifS5mYS11c2VyLXBsdXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMzRcIn0uZmEtdXNlci1zZWNyZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMWJcIn0uZmEtdXNlci10aW1lczpiZWZvcmV7Y29udGVudDpcIlxcZjIzNVwifS5mYS11c2VyczpiZWZvcmV7Y29udGVudDpcIlxcZjBjMFwifS5mYS11c3N1bm5haDpiZWZvcmV7Y29udGVudDpcIlxcZjQwN1wifS5mYS11dGVuc2lsLXNwb29uOmJlZm9yZXtjb250ZW50OlwiXFxmMmU1XCJ9LmZhLXV0ZW5zaWxzOmJlZm9yZXtjb250ZW50OlwiXFxmMmU3XCJ9LmZhLXZhYWRpbjpiZWZvcmV7Y29udGVudDpcIlxcZjQwOFwifS5mYS12ZW51czpiZWZvcmV7Y29udGVudDpcIlxcZjIyMVwifS5mYS12ZW51cy1kb3VibGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMjZcIn0uZmEtdmVudXMtbWFyczpiZWZvcmV7Y29udGVudDpcIlxcZjIyOFwifS5mYS12aWFjb2luOmJlZm9yZXtjb250ZW50OlwiXFxmMjM3XCJ9LmZhLXZpYWRlbzpiZWZvcmV7Y29udGVudDpcIlxcZjJhOVwifS5mYS12aWFkZW8tc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMmFhXCJ9LmZhLXZpYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OTJcIn0uZmEtdmlhbHM6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OTNcIn0uZmEtdmliZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MDlcIn0uZmEtdmlkZW86YmVmb3Jle2NvbnRlbnQ6XCJcXGYwM2RcIn0uZmEtdmlkZW8tc2xhc2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ZTJcIn0uZmEtdmltZW86YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MGFcIn0uZmEtdmltZW8tc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTk0XCJ9LmZhLXZpbWVvLXY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyN2RcIn0uZmEtdmluZTpiZWZvcmV7Y29udGVudDpcIlxcZjFjYVwifS5mYS12azpiZWZvcmV7Y29udGVudDpcIlxcZjE4OVwifS5mYS12bnY6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MGJcIn0uZmEtdm9sbGV5YmFsbC1iYWxsOmJlZm9yZXtjb250ZW50OlwiXFxmNDVmXCJ9LmZhLXZvbHVtZS1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMDI3XCJ9LmZhLXZvbHVtZS1vZmY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMjZcIn0uZmEtdm9sdW1lLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMDI4XCJ9LmZhLXZ1ZWpzOmJlZm9yZXtjb250ZW50OlwiXFxmNDFmXCJ9LmZhLXdhcmVob3VzZTpiZWZvcmV7Y29udGVudDpcIlxcZjQ5NFwifS5mYS13ZWlibzpiZWZvcmV7Y29udGVudDpcIlxcZjE4YVwifS5mYS13ZWlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OTZcIn0uZmEtd2VpeGluOmJlZm9yZXtjb250ZW50OlwiXFxmMWQ3XCJ9LmZhLXdoYXRzYXBwOmJlZm9yZXtjb250ZW50OlwiXFxmMjMyXCJ9LmZhLXdoYXRzYXBwLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjQwY1wifS5mYS13aGVlbGNoYWlyOmJlZm9yZXtjb250ZW50OlwiXFxmMTkzXCJ9LmZhLXdobWNzOmJlZm9yZXtjb250ZW50OlwiXFxmNDBkXCJ9LmZhLXdpZmk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZWJcIn0uZmEtd2lraXBlZGlhLXc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjZcIn0uZmEtd2luZG93LWNsb3NlOmJlZm9yZXtjb250ZW50OlwiXFxmNDEwXCJ9LmZhLXdpbmRvdy1tYXhpbWl6ZTpiZWZvcmV7Y29udGVudDpcIlxcZjJkMFwifS5mYS13aW5kb3ctbWluaW1pemU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZDFcIn0uZmEtd2luZG93LXJlc3RvcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZDJcIn0uZmEtd2luZG93czpiZWZvcmV7Y29udGVudDpcIlxcZjE3YVwifS5mYS13aW5lLWdsYXNzOmJlZm9yZXtjb250ZW50OlwiXFxmNGUzXCJ9LmZhLXdvbi1zaWduOmJlZm9yZXtjb250ZW50OlwiXFxmMTU5XCJ9LmZhLXdvcmRwcmVzczpiZWZvcmV7Y29udGVudDpcIlxcZjE5YVwifS5mYS13b3JkcHJlc3Mtc2ltcGxlOmJlZm9yZXtjb250ZW50OlwiXFxmNDExXCJ9LmZhLXdwYmVnaW5uZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTdcIn0uZmEtd3BleHBsb3JlcjpiZWZvcmV7Y29udGVudDpcIlxcZjJkZVwifS5mYS13cGZvcm1zOmJlZm9yZXtjb250ZW50OlwiXFxmMjk4XCJ9LmZhLXdyZW5jaDpiZWZvcmV7Y29udGVudDpcIlxcZjBhZFwifS5mYS14LXJheTpiZWZvcmV7Y29udGVudDpcIlxcZjQ5N1wifS5mYS14Ym94OmJlZm9yZXtjb250ZW50OlwiXFxmNDEyXCJ9LmZhLXhpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjhcIn0uZmEteGluZy1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjlcIn0uZmEteS1jb21iaW5hdG9yOmJlZm9yZXtjb250ZW50OlwiXFxmMjNiXCJ9LmZhLXlhaG9vOmJlZm9yZXtjb250ZW50OlwiXFxmMTllXCJ9LmZhLXlhbmRleDpiZWZvcmV7Y29udGVudDpcIlxcZjQxM1wifS5mYS15YW5kZXgtaW50ZXJuYXRpb25hbDpiZWZvcmV7Y29udGVudDpcIlxcZjQxNFwifS5mYS15ZWxwOmJlZm9yZXtjb250ZW50OlwiXFxmMWU5XCJ9LmZhLXllbi1zaWduOmJlZm9yZXtjb250ZW50OlwiXFxmMTU3XCJ9LmZhLXlvYXN0OmJlZm9yZXtjb250ZW50OlwiXFxmMmIxXCJ9LmZhLXlvdXR1YmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjdcIn0uZmEteW91dHViZS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MzFcIn0uc3Itb25seXtib3JkZXI6MDtjbGlwOnJlY3QoMCwwLDAsMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLC5zci1vbmx5LWZvY3VzYWJsZTpmb2N1c3tjbGlwOmF1dG87aGVpZ2h0OmF1dG87bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtwb3NpdGlvbjpzdGF0aWM7d2lkdGg6YXV0b31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OkZvbnQgQXdlc29tZVxcIDUgQnJhbmRzO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6dXJsKC4uL3dlYmZvbnRzL2ZhLWJyYW5kcy00MDAuZW90KTtzcmM6dXJsKC4uL3dlYmZvbnRzL2ZhLWJyYW5kcy00MDAuZW90PyNpZWZpeCkgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksdXJsKC4uL3dlYmZvbnRzL2ZhLWJyYW5kcy00MDAud29mZjIpIGZvcm1hdChcIndvZmYyXCIpLHVybCguLi93ZWJmb250cy9mYS1icmFuZHMtNDAwLndvZmYpIGZvcm1hdChcIndvZmZcIiksdXJsKC4uL3dlYmZvbnRzL2ZhLWJyYW5kcy00MDAudHRmKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSx1cmwoLi4vd2ViZm9udHMvZmEtYnJhbmRzLTQwMC5zdmcjZm9udGF3ZXNvbWUpIGZvcm1hdChcInN2Z1wiKX0uZmFie2ZvbnQtZmFtaWx5OkZvbnQgQXdlc29tZVxcIDUgQnJhbmRzfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6Rm9udCBBd2Vzb21lXFwgNSBGcmVlO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6dXJsKC4uL3dlYmZvbnRzL2ZhLXJlZ3VsYXItNDAwLmVvdCk7c3JjOnVybCguLi93ZWJmb250cy9mYS1yZWd1bGFyLTQwMC5lb3Q/I2llZml4KSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSx1cmwoLi4vd2ViZm9udHMvZmEtcmVndWxhci00MDAud29mZjIpIGZvcm1hdChcIndvZmYyXCIpLHVybCguLi93ZWJmb250cy9mYS1yZWd1bGFyLTQwMC53b2ZmKSBmb3JtYXQoXCJ3b2ZmXCIpLHVybCguLi93ZWJmb250cy9mYS1yZWd1bGFyLTQwMC50dGYpIGZvcm1hdChcInRydWV0eXBlXCIpLHVybCguLi93ZWJmb250cy9mYS1yZWd1bGFyLTQwMC5zdmcjZm9udGF3ZXNvbWUpIGZvcm1hdChcInN2Z1wiKX0uZmFye2ZvbnQtd2VpZ2h0OjQwMH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OkZvbnQgQXdlc29tZVxcIDUgRnJlZTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo5MDA7c3JjOnVybCguLi93ZWJmb250cy9mYS1zb2xpZC05MDAuZW90KTtzcmM6dXJsKC4uL3dlYmZvbnRzL2ZhLXNvbGlkLTkwMC5lb3Q/I2llZml4KSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSx1cmwoLi4vd2ViZm9udHMvZmEtc29saWQtOTAwLndvZmYyKSBmb3JtYXQoXCJ3b2ZmMlwiKSx1cmwoLi4vd2ViZm9udHMvZmEtc29saWQtOTAwLndvZmYpIGZvcm1hdChcIndvZmZcIiksdXJsKC4uL3dlYmZvbnRzL2ZhLXNvbGlkLTkwMC50dGYpIGZvcm1hdChcInRydWV0eXBlXCIpLHVybCguLi93ZWJmb250cy9mYS1zb2xpZC05MDAuc3ZnI2ZvbnRhd2Vzb21lKSBmb3JtYXQoXCJzdmdcIil9LmZhLC5mYXIsLmZhc3tmb250LWZhbWlseTpGb250IEF3ZXNvbWVcXCA1IEZyZWV9LmZhLC5mYXN7Zm9udC13ZWlnaHQ6OTAwfVxuIl19 */ \ No newline at end of file diff --git a/ui/static/css/normalize.css b/ui/static/css/normalize.css new file mode 100644 index 0000000..879fb66 --- /dev/null +++ b/ui/static/css/normalize.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL25vcm1hbGl6ZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEVBQTRFLEtBVzFFLGlCQUFrQiw2QkFDYSxDQUNoQyxLQVVDLFFBQVUsQ0FDWCxLQU9DLGFBQWUsQ0FDaEIsR0FRQyxjQUFlLGNBQ0UsQ0FDbEIsR0FXQyx1QkFBd0IsU0FDZCxnQkFDUSxDQUNuQixJQVFDLGdDQUFrQyxhQUNuQixDQUNoQixFQVVDLDRCQUE4QixDQUMvQixZQVFDLG1CQUFvQiwwQkFDTyx5Q0FDM0IsZ0NBQWtDLENBQ25DLFNBUUMsa0JBQW9CLENBQ3JCLGNBVUMsZ0NBQWtDLGFBQ25CLENBQ2hCLE1BT0MsYUFBZSxDQUNoQixRQVNDLGNBQWUsY0FDQSxrQkFDSSx1QkFDTSxDQUMxQixJQUdDLGFBQWdCLENBQ2pCLElBR0MsU0FBWSxDQUNiLElBVUMsaUJBQW1CLENBQ3BCLHNDQWVDLG9CQUFxQixlQUNMLGlCQUNFLFFBQ1IsQ0FDWCxhQVNDLGdCQUFrQixDQUNuQixjQVNDLG1CQUFxQixDQUN0QixnREFVQyx5QkFBMkIsQ0FDNUIsd0hBVUMsa0JBQW1CLFNBQ1IsQ0FDWiw0R0FVQyw2QkFBK0IsQ0FDaEMsU0FPQywwQkFBK0IsQ0FDaEMsT0FVQyxzQkFBdUIsY0FDUixjQUNBLGVBQ0MsVUFDTCxrQkFDUyxDQUNyQixTQU9DLHVCQUF5QixDQUMxQixTQU9DLGFBQWUsQ0FDaEIsNkJBU0Msc0JBQXVCLFNBQ1osQ0FDWixrRkFRQyxXQUFhLENBQ2QsY0FRQyw2QkFBOEIsbUJBQ1QsQ0FDdEIseUNBT0MsdUJBQXlCLENBQzFCLDZCQVFDLDBCQUEyQixZQUNiLENBQ2YsUUFVQyxhQUFlLENBQ2hCLFFBT0MsaUJBQW1CLENBQ3BCLGtCQWtCQyxZQUFjLENBQ2YiLCJmaWxlIjoiLi4vbm9ybWFsaXplLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBub3JtYWxpemUuY3NzIHY4LjAuMSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cblxuLyogRG9jdW1lbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgbGluZSBoZWlnaHQgaW4gYWxsIGJyb3dzZXJzLlxuICogMi4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpbiBpT1MuXG4gKi9cblxuaHRtbCB7XG4gIGxpbmUtaGVpZ2h0OiAxLjE1OyAvKiAxICovXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMiAqL1xufVxuXG4vKiBTZWN0aW9uc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuYm9keSB7XG4gIG1hcmdpbjogMDtcbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIGBtYWluYCBlbGVtZW50IGNvbnNpc3RlbnRseSBpbiBJRS5cbiAqL1xuXG5tYWluIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgZm9udCBzaXplIGFuZCBtYXJnaW4gb24gYGgxYCBlbGVtZW50cyB3aXRoaW4gYHNlY3Rpb25gIGFuZFxuICogYGFydGljbGVgIGNvbnRleHRzIGluIENocm9tZSwgRmlyZWZveCwgYW5kIFNhZmFyaS5cbiAqL1xuXG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxuXG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3guXG4gKiAyLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlIGFuZCBJRS5cbiAqL1xuXG5ociB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiAxICovXG4gIGhlaWdodDogMDsgLyogMSAqL1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLyogMiAqL1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxucHJlIHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlOyAvKiAxICovXG4gIGZvbnQtc2l6ZTogMWVtOyAvKiAyICovXG59XG5cbi8qIFRleHQtbGV2ZWwgc2VtYW50aWNzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqL1xuXG5hIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi8qKlxuICogMS4gUmVtb3ZlIHRoZSBib3R0b20gYm9yZGVyIGluIENocm9tZSA1Ny1cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG4gKi9cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lOyAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKiAyICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5jb2RlLFxua2JkLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8qKlxuICogUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gKiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuICovXG5cbmltZyB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cblxuLyogRm9ybXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ2hhbmdlIHRoZSBmb250IHN0eWxlcyBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gKi9cblxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7IC8qIDEgKi9cbiAgZm9udC1zaXplOiAxMDAlOyAvKiAxICovXG4gIGxpbmUtaGVpZ2h0OiAxLjE1OyAvKiAxICovXG4gIG1hcmdpbjogMDsgLyogMiAqL1xufVxuXG4vKipcbiAqIFNob3cgdGhlIG92ZXJmbG93IGluIElFLlxuICogMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCB7IC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuXG4gKiAxLiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guXG4gKi9cblxuYnV0dG9uLFxuc2VsZWN0IHsgLyogMSAqL1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICovXG5cbmJ1dHRvbixcblt0eXBlPVwiYnV0dG9uXCJdLFxuW3R5cGU9XCJyZXNldFwiXSxcblt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwicmVzZXRcIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cblxuLyoqXG4gKiBSZXN0b3JlIHRoZSBmb2N1cyBzdHlsZXMgdW5zZXQgYnkgdGhlIHByZXZpb3VzIHJ1bGUuXG4gKi9cblxuYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxuW3R5cGU9XCJidXR0b25cIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInJlc2V0XCJdOi1tb3otZm9jdXNyaW5nLFxuW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3Jpbmcge1xuICBvdXRsaW5lOiAxcHggZG90dGVkIEJ1dHRvblRleHQ7XG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5cbmZpZWxkc2V0IHtcbiAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIHRleHQgd3JhcHBpbmcgaW4gRWRnZSBhbmQgSUUuXG4gKiAyLiBDb3JyZWN0IHRoZSBjb2xvciBpbmhlcml0YW5jZSBmcm9tIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gSUUuXG4gKiAzLiBSZW1vdmUgdGhlIHBhZGRpbmcgc28gZGV2ZWxvcGVycyBhcmUgbm90IGNhdWdodCBvdXQgd2hlbiB0aGV5IHplcm8gb3V0XG4gKiAgICBgZmllbGRzZXRgIGVsZW1lbnRzIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5sZWdlbmQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIGNvbG9yOiBpbmhlcml0OyAvKiAyICovXG4gIGRpc3BsYXk6IHRhYmxlOyAvKiAxICovXG4gIG1heC13aWR0aDogMTAwJTsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAzICovXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7IC8qIDEgKi9cbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgdmVydGljYWwgYWxpZ25tZW50IGluIENocm9tZSwgRmlyZWZveCwgYW5kIE9wZXJhLlxuICovXG5cbnByb2dyZXNzIHtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgMTArLlxuICovXG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAuXG4gKi9cblxuW3R5cGU9XCJjaGVja2JveFwiXSxcblt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBjdXJzb3Igc3R5bGUgb2YgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucyBpbiBDaHJvbWUuXG4gKi9cblxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUgYW5kIFNhZmFyaS5cbiAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICovXG5cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gbWFjT1MuXG4gKi9cblxuW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbiAqIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cbiAqL1xuXG46Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDEgKi9cbiAgZm9udDogaW5oZXJpdDsgLyogMiAqL1xufVxuXG4vKiBJbnRlcmFjdGl2ZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLypcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIEVkZ2UsIElFIDEwKywgYW5kIEZpcmVmb3guXG4gKi9cblxuZGV0YWlscyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbnN1bW1hcnkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG5cbi8qIE1pc2NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxuICovXG5cbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSAxMC5cbiAqL1xuXG5baGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4iXX0= */ \ No newline at end of file diff --git a/ui/static/css/style.css b/ui/static/css/style.css new file mode 100644 index 0000000..ca3b105 --- /dev/null +++ b/ui/static/css/style.css @@ -0,0 +1,2 @@ +html{height:100%}body{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}body header{width:1040px;display:grid;grid-template-columns:150px auto auto;grid-template-rows:auto;grid-template-areas:"icon title nav" "icon subtitle nav";grid-column-gap:1rem;margin:1rem auto 0}body header>a{grid-area:icon;justify-self:left}body header>a img{max-width:160px;max-height:70px;display:block}body header>h1{grid-area:title;color:#2f3749;align-self:end;margin:0;font-size:1.5em;font-weight:700}body header>h1 a{text-decoration:none;color:inherit}body header>h2{grid-area:subtitle;align-self:start;font-size:80%;margin:0;color:#9ca7b7;font-weight:lighter}body header>h2 a{text-decoration:none;color:inherit}body header>nav{grid-area:nav;justify-self:end;align-self:center}body header>nav a,body header>nav span{margin-right:1em;text-decoration:none;color:grey;font-size:80%}body header>nav .endpoint-button{color:inherit}body header>nav .endpoint-button.selected{text-decoration:underline}body header>nav .access-button{background-color:#e4e7ec;color:grey;border-radius:5px;padding:.3em .5em;border:1px solid #d4d7df}body header>nav .access-button:active{position:relative;top:1px}body header>nav .access-button.selected{color:#fff;background-color:#999a9b;border:1px solid #848484}body header>nav .login-button{background-color:#435061;color:#fff;font-weight:700;border-radius:5px;padding:.3em 1.25em;border:1px solid #001a3b;-webkit-transition:box-shadow .2s;transition:box-shadow .2s}body header>nav .login-button:active{position:relative;top:1px}form#query{background-color:#eff3f6;color:#333;box-sizing:border-box;width:100%;padding:1em 1em 2em;margin:1em 0 2em;border-top:1px solid #e5e8ea;font-size:90%}form#query div.form-container{display:grid;grid-template-columns:2fr 1fr;grid-template-rows:auto 225px auto;grid-template-areas:"search search" "datasets filters" "errors errors";justify-items:stretch;-webkit-box-align:stretch;align-items:stretch;grid-gap:0 1rem;width:1040px;margin:0 auto}form#query div.form-container fieldset{border-radius:.5em}form#query div.form-container fieldset legend{padding:0 1ex}form#query div.form-container #include-dataset-responses{border:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center}form#query div.form-container #include-dataset-responses section{margin-left:1em}form#query div.form-container #include-dataset-responses section label{margin-right:1em}form#query div.form-container #query-search{grid-area:search;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:center;align-items:center;padding:1em 0;border:none;outline:none}form#query div.form-container #query-search select{padding:0 1em;margin:0}form#query div.form-container #query-search section{position:relative;min-width:50%;margin:0 1em}form#query div.form-container #query-search section input{width:725px;box-sizing:border-box;display:block;padding:.5rem 1.6rem;border:1px solid #ddd;outline:none;background-color:#fff;text-align:center;-webkit-transition:box-shadow .2s;transition:box-shadow .2s}form#query div.form-container #query-search section input::-webkit-input-placeholder{color:#222}form#query div.form-container #query-search section input::-moz-placeholder{color:#222}form#query div.form-container #query-search section input:-ms-input-placeholder{color:#222}form#query div.form-container #query-search section input::-ms-input-placeholder{color:#222}form#query div.form-container #query-search section input::placeholder{color:#222}form#query div.form-container #query-search section input:focus{border:1px solid #51cbee;box-shadow:0 0 5px #51cbee}form#query div.form-container #query-search section label{display:block;position:absolute;top:-1.5em;left:0;width:100%;text-align:center;font-size:80%;opacity:1;visibility:visible;-webkit-transition:opacity .3s,visibility 0ms;transition:opacity .3s,visibility 0ms}form#query div.form-container #query-search section input:placeholder-shown+label{opacity:0;visibility:hidden}form#query div.form-container #query-search button{height:80%;padding:1ex;margin-left:1em;cursor:pointer;text-align:center;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;align-content:center;color:#fff;background-color:#2196f3;outline:none;border:0;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}form#query div.form-container #query-search button:active{position:relative;top:1px}form#query div.form-container #query-search button p{align-self:center;margin:0;padding-left:5px}form#query div.form-container #query-search button i{align-self:center}form#query div.form-container #query-datasets{grid-area:datasets;display:block;position:relative;padding:0;background-color:#fff;border:.1px solid #e8ebef;border-radius:5px;min-height:128px;min-height:8rem;max-height:100%}form#query div.form-container #query-datasets #datasets-header{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:justify;justify-content:space-between;margin:0;padding:.5em 1em;height:18px;border-bottom:.1px solid #e8ebef}form#query div.form-container #query-datasets #datasets-header p{display:inline-block;font-size:90%;margin:0;padding:0}form#query div.form-container #query-datasets #datasets-header p span{cursor:pointer}form#query div.form-container #query-datasets section{overflow:auto;max-height:100%;box-sizing:border-box;padding:.5em 1em 1em;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:start;justify-content:flex-start}form#query div.form-container #query-datasets section label{display:block;-webkit-box-ordinal-group:2;order:1}form#query div.form-container #query-datasets section label.dataset-not-authorized{opacity:.5;text-decoration:line-through;-webkit-box-ordinal-group:3;order:2}form#query div.form-container #query-filters{grid-area:filters;display:block;position:relative;padding:0;background-color:#fff;border:.1px solid #e8ebef;border-radius:5px;overflow:auto;min-height:128px;min-height:8rem;max-height:100%}form#query div.form-container #query-filters #filters-header{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:left;justify-content:left;padding:.5em 1em;height:18px;border-bottom:.1px solid #e8ebef}form#query div.form-container #query-filters #filters-header p{font-size:90%;margin:0;padding:0}form#query div.form-container #query-filters i{cursor:pointer;color:#354052}form#query div.form-container #query-filters i.filter-add{display:inline-block}form#query div.form-container #query-filters section{padding:.5em 1em 1em;margin:.5em 0;display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch}form#query div.form-container #query-filters section input{-webkit-box-flex:1;flex-grow:1;padding:.3em 1em;border:1px solid #ddd;outline:none;-webkit-transition:box-shadow .2s;transition:box-shadow .2s}form#query div.form-container #query-filters section input::-webkit-input-placeholder{color:#222}form#query div.form-container #query-filters section input::-moz-placeholder{color:#222}form#query div.form-container #query-filters section input:-ms-input-placeholder{color:#222}form#query div.form-container #query-filters section input::-ms-input-placeholder{color:#222}form#query div.form-container #query-filters section input::placeholder{color:#222}form#query div.form-container #query-filters section input:focus{box-shadow:0 0 5px #51cbee}form#query div.form-container #query-filters section span{padding:.3em 1em;outline:none;border:1px solid #ddd;line-height:1.15}form#query div.form-container #query-filters section i{margin-left:1ex;align-self:center}form#query div.form-container #query-errors{grid-area:errors;margin:0 auto}form#query div.form-container #query-errors div.error-wrapper{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;margin:2em 0 1em;padding:1.25em 3.5em;border-radius:5px;background-color:#db524b;color:#fff;-webkit-box-pack:center;justify-content:center;position:relative}form#query div.form-container #query-errors div.error-wrapper i{position:absolute;top:8px;left:9px;font-size:20px}form#query div.form-container #query-errors div.error-wrapper code{background-color:#e78d88;display:inline-block;padding:3px 1ex;border-radius:5px;margin:0 .25em}form#query div.form-container #query-errors div.error-wrapper span.bold{font-weight:700;margin-right:.25em}form#query div.form-container #query-errors div.error-wrapper span.query-form{font-weight:700;background-color:#e78d88;display:inline-block;padding:3px 1ex;border-radius:5px;color:#fff;margin-right:.5em;min-width:7.5em;text-align:center}form#query div.form-container #query-errors div.error-wrapper div.small{padding-left:10px;font-size:85%}form#query div.form-container #query-errors div.error-wrapper div.small p{margin-bottom:.5em}form#query div.form-container #query-errors div.error-wrapper div.small ul{margin-top:0;list-style-type:none;text-indent:-10px}main{-webkit-box-flex:1;flex:1;width:1040px;margin:0 auto}main span.label{display:inline;padding:.2em .6em;font-size:75%;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:5px;background-color:grey;color:#fff;border:none}main span.label.label-public{background-color:#5cb85c}main span.label.label-registered{background-color:#f0ad4e}main span.label.label-controlled{background-color:#d9534f}main span.label.label-not_supported{background-color:#ccc}main p{margin:0 0 1em}#info main{padding:0 1em}#info main section{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row;-webkit-box-align:start;align-items:flex-start;padding:1em;border-top:1px solid #ccc;max-width:100%}#info main section>p{padding:0;-webkit-box-flex:1;flex:1;font-size:12px;margin:.15em 0 0}#info main section>a{display:inline-block;margin:0;padding:0;text-decoration:none}#info main section>a .label{font-size:12px}#info main section>span{margin:.15em 1em 0;display:-webkit-box;display:flex;font-size:75%;border-radius:50%;cursor:help;width:18px;height:18px;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;background-color:grey;color:#fff}#info main section>span.label-authorized{background-color:#5cb85c}#info main section>span.label-not_authorized{background-color:#d9534f}#beacon-cookies{position:fixed;z-index:1000;bottom:0;right:0;left:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;color:#fff;background:#24282a;padding:1em 0;opacity:1}#beacon-cookies>div{width:1000px}#beacon-cookies>div h6{font-size:1.5em;margin:0;padding:0}#beacon-cookies>div p{margin:1em 0}#beacon-cookies>div a{display:inline-block;color:#e05540}#beacon-cookies button{width:140px;margin-left:1em;border-radius:3px;height:2em;color:inherit;background-color:#e05540;border:none;cursor:pointer}#beacon-cookies.hide-me{opacity:0;-webkit-transition:opacity 1s;transition:opacity 1s}#beacon-cookies+footer{margin-bottom:9rem}#beacon-cookies.hide-me+footer{margin-bottom:0;-webkit-transition:margin 1.5s;transition:margin 1.5s}footer{margin-top:2em;padding:2em;background-color:#eff3f6;color:#2f3749;font-size:12px;font-weight:lighter;display:-webkit-box;display:flex}footer section{position:relative}footer section:before{content:"|";display:inline-block;margin:0 1em}footer section:first-of-type{margin-left:auto}footer section:first-of-type:before{content:none}footer input,footer label{cursor:pointer}footer a{text-decoration:none;color:grey}footer a i{color:#2f3749;font-size:120%}#beacon-response{white-space:pre-wrap;position:fixed;top:10vh;bottom:10vh;right:10vw;left:10vw;z-index:100;overflow:auto}#beacon-request,#beacon-response{display:none;box-shadow:0 0 50px 0 #c3c3c3;background:#fff;padding:1em;box-sizing:border-box;border-radius:5px}#beacon-request{position:absolute;right:0;bottom:2em;width:60vw;z-index:101;text-align:center}input#beacon-request-trigger:checked~#beacon-request,input#beacon-response-trigger:checked~#beacon-response{display:block}#response-history{display:none}aside{position:fixed;top:10%;bottom:10%;height:80%;z-index:200;box-sizing:border-box;overflow:auto;width:300px;left:calc(-300px + 1.5em);padding:1.5em;border-radius:0 1em 1em 0;box-shadow:0 2px 5px 0 rgba(0,0,0,.2);background-color:#eff3f6;color:#636363;counter-reset:history}aside>span{display:inline-block;float:right;font-size:.7em;cursor:pointer;margin:.5em 0}aside h1{text-align:right;margin:0 0 1em;color:#2f3749;-webkit-transform:rotate(90deg) translate(-170px,-300px);transform:rotate(90deg) translate(-170px,-300px);-webkit-transform-origin:0 -100%;transform-origin:0 -100%;font-size:1em}aside h1 span{border-radius:50%;padding:.5ex 1ex;margin-left:1ex;font-size:.5em;background-color:#2196f3;color:#fff;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:center;transform-origin:center;display:inline-block}aside.open,aside:hover{-webkit-transition:left .3s;transition:left .3s;left:0}aside.open h1,aside:hover h1{font-size:1.5em}aside.open h1,aside.open h1 span,aside:hover h1,aside:hover h1 span{-webkit-transform:none;transform:none}aside section{display:block;margin-bottom:1em;border:1px solid #e5e8ea;border-radius:1em 1em 1ex 1ex;font-weight:lighter;background-color:#fff;position:relative}aside section h2{color:#fff;font-weight:lighter}aside section:hover{box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}aside section:hover h2 i.fas{display:inline-block;color:#fff;margin-right:5px}aside section:before{counter-increment:history;content:counter(history);position:absolute;top:-1ex;left:-1ex;z-index:10;border-radius:40%;padding:.5ex 1ex;font-size:70%;background-color:grey;color:#fff}aside section p.long,aside section pre{word-break:break-all}aside section h2{padding:.3em 1em;border-radius:1em 1em 0 0;margin:0;font-size:1em;text-align:center;position:relative;z-index:5}aside section h2.response-Y{background-color:#36ae47}aside section h2.response-N{background-color:#f06543}aside section h2 i.fas{display:none;position:absolute;right:5px;top:0;-webkit-transform:translateY(50%);transform:translateY(50%);width:1em;cursor:pointer}aside section h2 i.fas:hover{text-shadow:0 0 5px #fff}aside section ul{list-style-type:none;font-weight:lighter;font-size:90%;margin:.5em 0;padding:0}aside section ul li{word-break:break-all;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;border-bottom:1px solid #e5e8ea;padding:.2em 2.5em}aside section ul li span:nth-child(2){color:#a9a9a9}aside section ul li:last-child{border-bottom:none}body{margin:0 auto;min-height:100vh;box-sizing:border-box;font-family:Open Sans,Helvetica Neue,Arial,sans-serif;font-size:14px;color:#636363;line-height:1.4}body,body main#access-levels{width:1140px}body main#access-levels #access-levels-legend{margin-right:50px;padding:.5em;display:-webkit-box;display:flex;-webkit-box-pack:end;justify-content:flex-end}body main#access-levels #access-levels-legend .label{margin:0 1ex}body main#access-levels>nav{display:-webkit-box;display:flex;margin-top:1em;-webkit-box-pack:end;justify-content:flex-end}body main#access-levels>nav input{margin:0 1ex}body main#access-levels .section-title{background-color:#eff3f6;width:100%;height:50px;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:center;align-items:center;margin-top:2em}body main#access-levels .section-title h1{margin-left:1em;font-size:18px}body main#access-levels .section-title h1 small{font-size:14px;font-weight:lighter;margin-left:.5em}body main#access-levels .section-title div.include-check{font-size:12px;font-weight:lighter;margin-right:1em}body main#access-levels .section-content{width:1040px;margin:0 auto}body main#access-levels .section-content ul.collapsed{list-style-type:none;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;margin:2em 0;padding:0}body main#access-levels .section-content ul.collapsed .label{margin:1ex;display:inline-block;font-size:1em}body main#access-levels .section-content ul.expanded{margin:0;padding:0}body main#access-levels .section-content ul.expanded>li{border-top:1px solid #ccc;padding-top:1em;margin-bottom:1em;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:start;justify-content:flex-start}body main#access-levels .section-content ul.expanded>li:first-child{border-top:none;margin-top:2em}body main#access-levels .section-content ul.expanded>li>span{margin-right:1em;min-width:15em;display:inline-block;text-align:right}body main#access-levels .section-content ul.expanded>li ul{list-style-type:none;margin:0;padding:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-pack:start;justify-content:flex-start}body main#access-levels .section-content ul.expanded>li ul .label{margin:0 1ex .5ex 0;display:inline-block;font-size:1em}body main#access-levels .section-content div.datasets{margin:2em auto;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-pack:center;justify-content:center}body main#access-levels .section-content div.datasets p{display:inline-block;text-align:center;padding:1em;margin:0 0 0 1em}body main#access-levels .section-content div.datasets p .label{margin-left:1ex}body main#access-levels .section-content .message{margin:1em}body main#access-levels .section-content .message p{width:70%;padding:.2em;margin:2em auto;border-radius:5px;border:1px solid grey;background-color:#636363;color:#fff;text-align:center;font-weight:lighter}body#response>main{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-align:start;align-items:flex-start;-webkit-box-pack:center;justify-content:center}body#response>main section{min-width:150px;margin:1em;padding:0;border:1px solid #e5e8ea;border-radius:1ex;color:grey;overflow:hidden}body#response>main section h3{font-size:14px;font-weight:400;margin:0;padding:.5em;text-align:center;color:#fff}body#response>main section li{padding:.5em 1em;border-bottom:1px solid #e5e8ea;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;font-size:90%}body#response>main section li:last-of-type{border-bottom:none}body#response>main section li.handover{background-color:#eff3f6;color:#2196f3;position:relative}body#response>main section li.handover .handover-note{overflow:scroll}body#response>main section li.handover .handover-note a{display:inline-block;color:#2196f3;text-decoration:none}body#response>main section li.handover .handover-note p{display:none;position:absolute;left:50%;top:2px;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%);margin:0 auto;padding:.5em 1em;width:100px;height:40px;color:#fff;background-color:#353c47;z-index:99;overflow:scroll;border-radius:5px;border:2px solid #353c47}body#response>main section li.handover .handover-note:after{content:"";width:0;height:0;display:none;position:absolute;z-index:100;border:5px solid transparent;border-top-color:#353c47;left:50%;top:2px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main section li.handover:hover .handover-note:after,body#response>main section li.handover:hover .handover-note p{display:block}body#response>main section li span.variable{display:inline-block;padding-right:.5em}body#response>main section li span.number{display:inline-block}body#response>main section ul{padding:0;margin:0;list-style-type:none}body#response>main section span.number{color:#000;font-weight:700}body#response>main section.exists-Y h3{background-color:#36ae47}body#response>main section.exists-Y h3 span{font-weight:700}body#response>main section.exists-N h3{background-color:#f06543}body#response>main section.exists-N h3 span{font-weight:700}body#response>main.per-variant{margin:0 auto;padding:0}body#response>main.per-variant .noVariantsFound{display:grid;grid-auto-columns:1;grid-auto-rows:2;-webkit-box-pack:center;justify-content:center}body#response>main.per-variant .noVariantsFound section{justify-self:center;width:150px}body#response>main.per-variant .noVariantsFound p{display:inline-block;font-size:80%;color:grey;font-weight:lighter}body#response>main.per-variant .noVariantsFound p span{font-weight:700}body#response>main.per-variant .variantsPanel{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:stretch;align-items:stretch;width:1040px;height:650px;margin:0 auto;padding:0;border:1px solid #eff3f6;border-radius:5px}body#response>main.per-variant .variantsPanel .sidebar-wrapper{background-color:#eff3f6;width:175px;height:100%;overflow:scroll}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-pack:stretch;justify-content:stretch}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton{background-color:#d6dade;min-height:50px;max-height:100px;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:center;justify-content:center;color:#fff;overflow:scroll;cursor:pointer}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton p{display:inline-block;padding:1em;margin:0;text-align:justify}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton:hover{background-color:#ccd0d3}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton.selected{background-color:#1d94ee}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton:first-child{border-top-left-radius:5px}body#response>main.per-variant .variantsPanel .content-wrapper{background-color:#fff;width:990px;height:100%;overflow:scroll;position:relative}body#response>main.per-variant .variantsPanel .content-wrapper .content{display:none;padding:3.5em 1em 1em 3em;width:90%;grid-column:100%;grid-row:50px auto;grid-template-areas:"variant-header" "datasets";grid-gap:1em}body#response>main.per-variant .variantsPanel .content-wrapper .content.selected{display:grid}body#response>main.per-variant .variantsPanel .content-wrapper .content .header{grid-area:variant-header;margin-left:1em;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap}body#response>main.per-variant .variantsPanel .content-wrapper .content .header p{display:inline-block;font-weight:700;margin:0 1em 0 0}body#response>main.per-variant .variantsPanel .content-wrapper .content .header p small{font-weight:lighter;font-size:100%;padding-left:.25em}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div{margin:0;padding:0;text-decoration:none;display:-webkit-box;display:flex}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div .logo{margin:auto .5em;padding:0;position:relative;align-self:center}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div .logo img{width:16px;height:16px;border-radius:30%}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div .logo i{font-size:15px;color:#2196f3}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div .logo:after{content:"";width:0;height:0;display:none;position:absolute;z-index:101;border:8px solid transparent;border-bottom-color:#353c47;left:50%;top:12px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result{display:none;position:absolute;height:500px;width:80%;top:67px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:101;margin:0 auto;align-self:start}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result .transparent{height:10px;margin:0}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result .content-handover{background-color:#353c47;height:100%;color:#fff;font-family:Courier New,Courier,monospace;font-weight:lighter;padding:1em;border-radius:5px;overflow:scroll}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result .content-handover p{margin-left:1em;font-weight:bolder}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small{width:80%}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover{height:auto;padding:1em;overflow:scroll;display:block}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p{font-family:Open Sans,Helvetica Neue,Arial,sans-serif;font-size:90%}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p span{font-weight:700}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p a{text-decoration:none;color:#fff}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div:hover div.logo:after,body#response>main.per-variant .variantsPanel .content-wrapper .content .header div:hover div.result{display:block}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div.missing div img{opacity:.5;filter:alpha(opacity=50)}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div.missing div i{color:#b1cee5}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div.missing:hover div.logo:after,body#response>main.per-variant .variantsPanel .content-wrapper .content .header div.missing:hover div.result{display:none}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses{grid-area:datasets;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-align:start;align-items:flex-start;-webkit-box-pack:start;justify-content:start;overflow:scroll;padding-left:1em}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section{min-width:150px;margin:1em;padding:0;border:1px solid #e5e8ea;border-radius:1ex;color:grey;overflow:hidden}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section h3{font-size:14px;font-weight:400;margin:0;padding:.5em;text-align:center;color:#fff}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li{padding:.5em 1em;border-bottom:1px solid #e5e8ea;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;font-size:90%}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li:last-of-type{border-bottom:none}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover{background-color:#eff3f6;color:#2196f3;position:relative}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note{overflow:scroll}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note a{display:inline-block;color:#2196f3;text-decoration:none}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note p{display:none;position:absolute;left:50%;top:2px;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%);margin:0 auto;padding:.5em 1em;width:100px;height:40px;color:#fff;background-color:#353c47;z-index:99;overflow:scroll;border-radius:5px;border:2px solid #353c47}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note:after{content:"";width:0;height:0;display:none;position:absolute;z-index:100;border:5px solid transparent;border-top-color:#353c47;left:50%;top:2px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover:hover .handover-note:after,body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover:hover .handover-note p{display:block}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li span.variable{display:inline-block;padding-right:.5em}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li span.number{display:inline-block}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section ul{padding:0;margin:0;list-style-type:none}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section span.number{color:#000;font-weight:700}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-Y h3{background-color:#36ae47}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-Y h3 span{font-weight:700}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-N h3{background-color:#f06543}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-N h3 span{font-weight:700}body#response>main.per-sample{margin:0 auto;padding:0}body#response>main.per-sample #samplesPanel{display:grid;grid-template-columns:2fr 4fr;grid-template-areas:"sampleCards variantResults";width:1040px;height:650px;margin-bottom:4em;position:relative}body#response>main.per-sample #samplesPanel #samplesWrapper{grid-area:"sampleCards";overflow:scroll;margin:2em 1em 1.25em 0;border-top:1px solid #e5e8ea;border-bottom:1px solid #e5e8ea}body#response>main.per-sample #samplesPanel #samplesWrapper:before{border:5px solid transparent;border-bottom-color:#e5e8ea;top:11px}body#response>main.per-sample #samplesPanel #samplesWrapper:after,body#response>main.per-sample #samplesPanel #samplesWrapper:before{content:"";width:0;height:0;display:block;position:absolute;z-index:100;left:165px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-sample #samplesPanel #samplesWrapper:after{border:5px solid transparent;border-top-color:#e5e8ea;bottom:-40px}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard{margin:1em;padding:0;width:300px;border:1px solid #e5e8ea;border-radius:5px;color:#636363}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard:hover h3{background-color:#ccd0d3}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard.selected h3{background-color:#1d94ee}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard h3{font-size:14px;font-weight:700;margin:0;padding:.5em;text-align:center;color:#fff;background-color:#d6dade;border-radius:5px 5px 0 0}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:stretch;align-items:stretch}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul{padding:0;margin:0;list-style-type:none;width:50%}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li{padding:.1em .5em .5em;border-bottom:1px solid #eff3f6;font-size:12px}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li.listTitle{text-align:center;font-weight:700;padding:.5em 1em;color:#636363}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li span{display:block}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li span.var{text-align:left;font-size:10px}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li span.val{text-align:right;font-weight:700;color:grey;font-size:11px}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul:first-child{border-right:1px solid #e5e8ea}body#response>main.per-sample #samplesPanel .resultVariants{grid-area:"variantResults";display:none}body#response>main.per-sample #samplesPanel .resultVariants.selected{display:block}body#response>main.per-sample #samplesPanel .resultVariants>p{font-size:15px;font-weight:700;margin:.5em .25em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant{margin:0 auto;padding:0}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .noVariantsFound{display:grid;grid-auto-columns:1;grid-auto-rows:2;-webkit-box-pack:center;justify-content:center}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .noVariantsFound section{justify-self:center;width:150px}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .noVariantsFound p{display:inline-block;font-size:80%;color:grey;font-weight:lighter}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .noVariantsFound p span{font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:stretch;align-items:stretch;width:1040px;height:650px;margin:0 auto;padding:0;border:1px solid #eff3f6;border-radius:5px}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper{background-color:#eff3f6;width:175px;height:100%;overflow:scroll}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-pack:stretch;justify-content:stretch}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton{background-color:#d6dade;min-height:50px;max-height:100px;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:center;justify-content:center;color:#fff;overflow:scroll;cursor:pointer}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton p{display:inline-block;padding:1em;margin:0;text-align:justify}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton:hover{background-color:#ccd0d3}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton.selected{background-color:#1d94ee}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton:first-child{border-top-left-radius:5px}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper{background-color:#fff;width:990px;height:100%;overflow:scroll;position:relative}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content{display:none;padding:3.5em 1em 1em 3em;width:90%;grid-column:100%;grid-row:50px auto;grid-template-areas:"variant-header" "datasets";grid-gap:1em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content.selected{display:grid}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header{grid-area:variant-header;margin-left:1em;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header p{display:inline-block;font-weight:700;margin:0 1em 0 0}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header p small{font-weight:lighter;font-size:100%;padding-left:.25em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div{margin:0;padding:0;text-decoration:none;display:-webkit-box;display:flex}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div .logo{margin:auto .5em;padding:0;position:relative;align-self:center}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div .logo img{width:16px;height:16px;border-radius:30%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div .logo i{font-size:15px;color:#2196f3}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div .logo:after{content:"";width:0;height:0;display:none;position:absolute;z-index:101;border:8px solid transparent;border-bottom-color:#353c47;left:50%;top:12px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result{display:none;position:absolute;height:500px;width:80%;top:67px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:101;margin:0 auto;align-self:start}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result .transparent{height:10px;margin:0}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result .content-handover{background-color:#353c47;height:100%;color:#fff;font-family:Courier New,Courier,monospace;font-weight:lighter;padding:1em;border-radius:5px;overflow:scroll}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result .content-handover p{margin-left:1em;font-weight:bolder}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small{width:80%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover{height:auto;padding:1em;overflow:scroll;display:block}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p{font-family:Open Sans,Helvetica Neue,Arial,sans-serif;font-size:90%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p span{font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p a{text-decoration:none;color:#fff}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div:hover div.logo:after,body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div:hover div.result{display:block}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div.missing div img{opacity:.5;filter:alpha(opacity=50)}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div.missing div i{color:#b1cee5}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div.missing:hover div.logo:after,body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div.missing:hover div.result{display:none}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses{grid-area:datasets;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-align:start;align-items:flex-start;-webkit-box-pack:start;justify-content:start;overflow:scroll;padding-left:1em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section{min-width:150px;margin:1em;padding:0;border:1px solid #e5e8ea;border-radius:1ex;color:grey;overflow:hidden}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section h3{font-size:14px;font-weight:400;margin:0;padding:.5em;text-align:center;color:#fff}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li{padding:.5em 1em;border-bottom:1px solid #e5e8ea;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;font-size:90%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li:last-of-type{border-bottom:none}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover{background-color:#eff3f6;color:#2196f3;position:relative}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note{overflow:scroll}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note a{display:inline-block;color:#2196f3;text-decoration:none}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note p{display:none;position:absolute;left:50%;top:2px;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%);margin:0 auto;padding:.5em 1em;width:100px;height:40px;color:#fff;background-color:#353c47;z-index:99;overflow:scroll;border-radius:5px;border:2px solid #353c47}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note:after{content:"";width:0;height:0;display:none;position:absolute;z-index:100;border:5px solid transparent;border-top-color:#353c47;left:50%;top:2px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover:hover .handover-note:after,body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover:hover .handover-note p{display:block}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li span.variable{display:inline-block;padding-right:.5em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li span.number{display:inline-block}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section ul{padding:0;margin:0;list-style-type:none}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section span.number{color:#000;font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-Y h3{background-color:#36ae47}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-Y h3 span{font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-N h3{background-color:#f06543}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-N h3 span{font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel,body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper{width:auto}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper{flex-shrink:0;width:165px}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .content{width:auto}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper{width:100%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content{padding:2.5em 1.5em 1em 2em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result{top:55px}.handover-note:hover:after,.handover-note:hover p{display:block}@-webkit-keyframes fadeAway{0%{width:100%}to{width:0}}@keyframes fadeAway{0%{width:100%}to{width:0}}ul#messages{position:fixed;bottom:1em;right:1em;z-index:1000;width:300px;list-style-type:none;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;flex-direction:column-reverse}ul#messages li{text-align:center;background:#fff;color:#000;border-radius:1ex;border:1px solid #000;margin:1ex 0;padding:1ex;position:relative;box-sizing:border-box}ul#messages li.hidden{display:none}ul#messages li:after{content:"-";text-indent:-30000px;position:absolute;bottom:1px;right:1px;height:2px;width:calc(100% - 2px);background:#000;border-radius:1ex;-webkit-animation-name:fadeAway;animation-name:fadeAway;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:5s;animation-duration:5s}ul#messages li:hover:after{-webkit-animation:none;animation:none}ul#messages li.message-info{background:#5cb85c;border-color:#5cb85c}ul#messages li.message-info:after{background:#449d44}ul#messages li.message-error{background:#d9534f;border-color:#d9534f}ul#messages li.message-error:after{background:#c9302c}ul#messages li.message-warning{background:#f0ad4e;border-color:#f0ad4e}ul#messages li.message-warning:after{background:#ec971f} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3Njc3MvX2Jhc2Uuc2NzcyIsIi4uL3N0eWxlLmNzcyIsIi4uLy4uL3Njc3MvX3F1ZXJ5LnNjc3MiLCIuLi8uLi9zY3NzL19tYWluLnNjc3MiLCIuLi8uLi9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uLy4uL3Njc3MvX2Nvb2tpZXMuc2NzcyIsIi4uLy4uL3Njc3MvX2Zvb3Rlci5zY3NzIiwiLi4vLi4vc2Nzcy9faGlzdG9yeS5zY3NzIiwiLi4vLi4vc2Nzcy9fbGV2ZWxzLnNjc3MiLCIuLi8uLi9zY3NzL19yZXN1bHQuc2NzcyIsIi4uLy4uL3Njc3MvX2RhdGFzZXRBbGxlbGVSZXNwb25zZXMuc2NzcyIsIi4uLy4uL3Njc3MvX3ZhcmlhbnRzUGFuZWwuc2NzcyIsIi4uLy4uL3Njc3MvX3NhbXBsZXMuc2NzcyIsIi4uLy4uL3Njc3MvX21lc3NhZ2Uuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxLQUNFLFdBQUEsQ0NDRCxBREVELEtBRUUsb0JBQUEsYUFBQSxBQUVBLDRCQUFBLDZCQUFBLHFCQUFBLENDT0QsQURLQyxZQUNJLGFBQUEsQUFFQSxhQUFBLEFBQ0Esc0NBQUEsQUFDQSx3QkFBQSxBQUNBLDREQUFBLEFBRUEscUJBQUEsQUFDQSxrQkFBQSxDQ0pMLEFETUssY0FDSSxlQUFBLEFBQ0EsaUJBQUEsQ0NKVCxBRE1TLGtCQUNJLGdCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxhQUFBLENDSmIsQURRSyxlQUNFLGdCQUFBLEFBQ0EsY0FBQSxBQUNBLGVBQUEsQUFDQSxTQUFBLEFBQ0EsZ0JBQUEsQUFDQSxlQUFBLENDTlAsQURTTyxpQkFBSSxxQkFBQSxBQUNBLGFBQUEsQ0NOWCxBRFVLLGVBQ0UsbUJBQUEsQUFDQSxpQkFBQSxBQUNBLGNBQUEsQUFDQSxTQUFBLEFBQ0EsY0FBQSxBQUNBLG1CQUFBLENDUlAsQURXTyxpQkFDRSxxQkFBQSxBQUNBLGFBQUEsQ0NUVCxBRGNLLGdCQUNFLGNBQUEsQUFDQSxpQkFBQSxBQUNBLGlCQUFBLENDWlAsQURjTyx1Q0FDRSxpQkFBQSxBQUNBLHFCQUFBLEFBQ0EsV0FBQSxBQUNBLGFBQUEsQ0NaVCxBRGVPLGlDQUNFLGFBQUEsQ0NiVCxBRGVTLDBDQUNFLHlCQUFBLENDYlgsQURpQk8sK0JBQ0UseUJBQUEsQUFDQSxXQUFBLEFBQ0Esa0JBQUEsQUFDQSxrQkFBQSxBQUNBLHdCQUFBLENDZlQsQURxQlMsc0NBQ1ksa0JBQUEsQUFBb0IsT0FBQSxDQ2xCekMsQURxQlMsd0NBQ0UsV0FBQSxBQUNBLHlCQUFBLEFBQ0Esd0JBQUEsQ0NuQlgsQUR1Qk8sOEJBQ0UseUJBQUEsQUFDQSxXQUFBLEFBQ0EsZ0JBQUEsQUFDQSxrQkFBQSxBQUNBLG9CQUFBLEFBQ0EseUJBQUEsQUFDQSxrQ0FBQSx5QkFBQSxDQ3JCVCxBRHVCUyxxQ0FDRSxrQkFBQSxBQUFvQixPQUFBLENDcEIvQixBQ3hHRCxXQUdJLHlCQUFBLEFBQ0EsV0FBQSxBQUdBLHNCQUFBLEFBQ0EsV0FBQSxBQUNBLG9CQUFBLEFBQ0gsaUJBQUEsQUFDQSw2QkFBQSxBQUVHLGFBQUEsQ0RzR0gsQUNwR0EsOEJBRUMsYUFBQSxBQUNBLDhCQUFBLEFBRUEsbUNBQUEsQUFFQSx1RUFBQSxBQUdBLHNCQUFBLEFBQ0EsMEJBQUEsb0JBQUEsQUFFQSxnQkFBQSxBQUVBLGFBQUEsQUFDQSxhQUFBLENEeUdELEFDckdDLHVDQUNDLGtCQUFBLENEdUdGLEFDdEdDLDhDQUNDLGFBQUEsQ0R3R0YsQUN6RkMseURBQ0MsU0FBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUNBLHdCQUFBLHVCQUFBLEFBQ0EseUJBQUEsa0JBQUEsQ0QyRkYsQUN6RkUsaUVBQ0MsZUFBQSxDRDJGSCxBQzFGRyx1RUFBUSxnQkFBQSxDRDZGWCxBQ3hGQyw0Q0FDQyxpQkFBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUNBLHlCQUFBLDhCQUFBLEFBQ0EseUJBQUEsbUJBQUEsQUFDQSxjQUFBLEFBQ0EsWUFBQSxBQUNBLFlBQUEsQ0QwRkYsQUN4RkUsbURBQ0MsY0FBQSxBQUNBLFFBQUEsQ0QwRkgsQUN4RkUsb0RBQ0Msa0JBQUEsQUFDQSxjQUFBLEFBQ0EsWUFBQSxDRDBGSCxBQ3hGRywwREFDQyxZQUFBLEFBQ0Esc0JBQUEsQUFDQSxjQUFBLEFBQ0EscUJBQUEsQUFDQSxzQkFBQSxBQUNBLGFBQUEsQUFDQSxzQkFBQSxBQUNBLGtCQUFBLEFBQ0Esa0NBQUEseUJBQUEsQ0QwRkosQUN6RkkscUZBQWlCLFVBQUEsQ0Q0RnJCLEFDNUZJLDRFQUFpQixVQUFBLENENEZyQixBQzVGSSxnRkFBaUIsVUFBQSxDRDRGckIsQUM1RkksaUZBQWlCLFVBQUEsQ0Q0RnJCLEFDNUZJLHVFQUFpQixVQUFBLENENEZyQixBQzNGSSxnRUFBVSx5QkFBQSxBQUF5QywwQkFBQSxDRCtGdkQsQUM3RkcsMERBQ0MsY0FBQSxBQUNBLGtCQUFBLEFBQ0EsV0FBQSxBQUFhLE9BQUEsQUFDYixXQUFBLEFBQWEsa0JBQUEsQUFDYixjQUFBLEFBQ0EsVUFBQSxBQUNBLG1CQUFBLEFBQ0EsOENBQUEscUNBQUEsQ0RpR0osQUM3Rkcsa0ZBQWtDLFVBQUEsQUFBWSxpQkFBQSxDRGlHakQsQUM3RkUsbURBQ0MsV0FBQSxBQUNBLFlBQUEsQUFDQSxnQkFBQSxBQUNBLGVBQUEsQUFDQSxrQkFBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUNBLHFCQUFBLEFBRUEsV0FBQSxBQUNBLHlCQUFBLEFBQ0EsYUFBQSxBQUNBLFNBQUEsQUFDQSxrQkFBQSxBQUVBLHlCQUFBLHNCQUFBLHFCQUFBLGdCQUFBLENENkZILEFDdEZHLDBEQUNBLGtCQUFBLEFBQW9CLE9BQUEsQ0R5RnZCLEFDdEZHLHFEQUNDLGtCQUFBLEFBQ0EsU0FBQSxBQUNBLGdCQUFBLENEd0ZKLEFDdEZHLHFEQUNDLGlCQUFBLENEd0ZKLEFDbkZDLDhDQUNDLG1CQUFBLEFBQ0EsY0FBQSxBQUNBLGtCQUFBLEFBQ0EsVUFBQSxBQUNBLHNCQUFBLEFBQ0EsMEJBQUEsQUFDQSxrQkFBQSxBQUdBLGlCQUFBLGdCQUFBLEFBQ0EsZUFBQSxDRG1GRixBQ3RFRSwrREFDQyxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFDQSx5QkFBQSw4QkFBQSxBQUNBLFNBQUEsQUFDQSxpQkFBQSxBQUNBLFlBQUEsQUFDQSxnQ0FBQSxDRHdFSCxBQ3JFRyxpRUFDQyxxQkFBQSxBQUNBLGNBQUEsQUFDQSxTQUFBLEFBQ0EsU0FBQSxDRHVFSixBQ3JFSSxzRUFDQyxjQUFBLENEdUVMLEFDakVFLHNEQUNDLGNBQUEsQUFDQSxnQkFBQSxBQUNBLHNCQUFBLEFBQ0EscUJBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EsNEJBQUEsNkJBQUEsc0JBQUEsQUFDQSx1QkFBQSwwQkFBQSxDRG1FSCxBQ2pFRyw0REFDQyxjQUFBLEFBQ0EsNEJBQUEsT0FBQSxDRG1FSixBQ2xFSSxtRkFBMkIsV0FBQSxBQUFjLDZCQUFBLEFBQStCLDRCQUFBLE9BQUEsQ0R1RTVFLEFDbEVDLDZDQUNDLGtCQUFBLEFBQ0EsY0FBQSxBQUNBLGtCQUFBLEFBQ0EsVUFBQSxBQUNBLHNCQUFBLEFBQ0EsMEJBQUEsQUFDQSxrQkFBQSxBQUNBLGNBQUEsQUFFQSxpQkFBQSxnQkFBQSxBQUNBLGVBQUEsQ0RtRUYsQUMvREUsNkRBQ0Msb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLHFCQUFBLEFBQ0Esc0JBQUEscUJBQUEsQUFDQSxpQkFBQSxBQUNBLFlBQUEsQUFDQSxnQ0FBQSxDRGlFSCxBQy9ERywrREFDQyxjQUFBLEFBQ0EsU0FBQSxBQUNBLFNBQUEsQ0RpRUosQUM3REUsK0NBQUksZUFBQSxBQUNILGFBQUEsQ0RnRUgsQUMvREUsMERBQWUsb0JBQUEsQ0RrRWpCLEFDaEVFLHFEQUNDLHFCQUFBLEFBQ0EsY0FBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSwwQkFBQSxtQkFBQSxDRG1FSCxBQ2pFRywyREFDQyxtQkFBQSxZQUFBLEFBQ0EsaUJBQUEsQUFDQSxzQkFBQSxBQUNBLGFBQUEsQUFFQSxrQ0FBQSx5QkFBQSxDRGtFSixBQ2pFSSxzRkFBaUIsVUFBQSxDRG9FckIsQUNwRUksNkVBQWlCLFVBQUEsQ0RvRXJCLEFDcEVJLGlGQUFpQixVQUFBLENEb0VyQixBQ3BFSSxrRkFBaUIsVUFBQSxDRG9FckIsQUNwRUksd0VBQWlCLFVBQUEsQ0RvRXJCLEFDbkVJLGlFQUFVLDBCQUFBLENEc0VkLEFDbkVHLDBEQUNDLGlCQUFBLEFBQ0EsYUFBQSxBQUNBLHNCQUFBLEFBQ0EsZ0JBQUEsQ0RxRUosQUNuRUcsdURBQ0MsZ0JBQUEsQUFDQSxpQkFBQSxDRHFFSixBQy9EQyw0Q0FDQyxpQkFBQSxBQUVBLGFBQUEsQ0RnRUYsQUM3REUsOERBQ0Msb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLHFCQUFBLEFBQ0EsaUJBQUEsQUFDQSxxQkFBQSxBQUVBLGtCQUFBLEFBQ0EseUJBQUEsQUFDQSxXQUFBLEFBQ0Esd0JBQUEsdUJBQUEsQUFDQSxpQkFBQSxDRDhESCxBQzVERyxnRUFDQyxrQkFBQSxBQUNBLFFBQUEsQUFDQSxTQUFBLEFBQ0EsY0FBQSxDRDhESixBQzVERyxtRUFDQyx5QkFBQSxBQUNBLHFCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxrQkFBQSxBQUNBLGNBQUEsQ0Q4REosQUMxREcsd0VBQ0MsZ0JBQUEsQUFDQSxrQkFBQSxDRDRESixBQzFERyw4RUFFQyxnQkFBQSxBQUNBLHlCQUFBLEFBQ0EscUJBQUEsQUFDQSxnQkFBQSxBQUVBLGtCQUFBLEFBQ0EsV0FBQSxBQUNBLGtCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxpQkFBQSxDRDBESixBQ3hERyx3RUFDQyxrQkFBQSxBQUNBLGFBQUEsQ0QwREosQUN6REksMEVBQ0Msa0JBQUEsQ0QyREwsQUN6REksMkVBQ0MsYUFBQSxBQUNBLHFCQUFBLEFBQ0EsaUJBQUEsQ0QyREwsQUUvWUQsS0FFQyxtQkFBQSxPQUFBLEFBQ0EsYUFBQSxBQUNBLGFBQUEsQ0ZrWkEsQUVoWkcsZ0JBQ0YsZUFBQSxBQUNBLGtCQUFBLEFBQ0EsY0FBQSxBQUNBLGNBQUEsQUFFQSxrQkFBQSxBQUNBLG1CQUFBLEFBQ0Esd0JBQUEsQUFDQSxrQkFBQSxBQUdBLHNCQUFBLEFBQ0EsV0FBQSxBQUNBLFdBQUEsQ0Y2WkQsQUUzWkMsNkJBQXFCLHdCQ2FSLENIaVpkLEFFN1pDLGlDQUFxQix3QkNhSixDSG1abEIsQUUvWkMsaUNBQXFCLHdCQ2FKLENIcVpsQixBRWphQyxvQ0FBd0IscUJDYUosQ0h1WnJCLEFFbFpHLE9BQUksY0FBQSxDRnFaUCxBRWhaRyxXQUVGLGFBQUEsQ0ZrWkQsQUVoWkMsbUJBQ0Msb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLGNBQUEsQUFDQSx3QkFBQSx1QkFBQSxBQUNBLFlBQUEsQUFFQSwwQkFBQSxBQUVBLGNBQUEsQ0ZnWkYsQUU5WUUscUJBQ0MsVUFBQSxBQUVBLG1CQUFBLE9BQUEsQUFDQSxlQUFBLEFBQ0EsZ0JBQUEsQ0ZpWkgsQUUvWUUscUJBQ0MscUJBQUEsQUFDQSxTQUFBLEFBQ0EsVUFBQSxBQUNBLG9CQUFBLENGaVpILEFFaFpHLDRCQUFTLGNBQUEsQ0ZtWlosQUUvWUUsd0JBQ0MsbUJBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EsY0FBQSxBQUNBLGtCQUFBLEFBQ0EsWUFBQSxBQUNBLFdBQUEsQUFDQSxZQUFBLEFBQ0Esd0JBQUEsdUJBQUEsQUFDQSx5QkFBQSxtQkFBQSxBQUlBLHNCQUFBLEFBQXdCLFVBQUEsQ0ZnWjNCLEFFOVlHLHlDQUFxQix3QkMxRFYsQ0gyY2QsQUVoWkcsNkNBQXlCLHdCQ3pEVixDSDRjbEIsQUlsZkQsZ0JBQ0ksZUFBQSxBQUFnQixhQUFBLEFBQ2hCLFNBQUEsQUFDQSxRQUFBLEFBQVMsT0FBQSxBQUNULG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUNBLHlCQUFBLG1CQUFBLEFBQ0Esd0JBQUEsdUJBQUEsQUFFQSxXQUFBLEFBQWMsbUJBQUEsQUFFZCxjQUFBLEFBd0JBLFNBQUEsQ0orZEgsQUlyZkcsb0JBQ0gsWUFBQSxDSnVmQSxBSXJmQSx1QkFBSyxnQkFBQSxBQUFpQixTQUFBLEFBQVUsU0FBQSxDSjBmaEMsQUl6ZkEsc0JBQUksWUFBQSxDSjRmSixBSTNmQSxzQkFDSSxxQkFBQSxBQUNBLGFBQUEsQ0o2ZkosQUl6ZkcsdUJBQ0gsWUFBQSxBQUNBLGdCQUFBLEFBQ0Esa0JBQUEsQUFDQSxXQUFBLEFBQ0EsY0FBQSxBQUNBLHlCQUFBLEFBQ0EsWUFBQSxBQUNBLGNBQUEsQ0oyZkEsQUl2Zkcsd0JBQVksVUFBQSxBQUFXLDhCQUFBLHFCQUFBLENKMmYxQixBSXZmRCx1QkFBMkIsa0JBQUEsQ0oyZjFCLEFJMWZELCtCQUFtQyxnQkFBQSxBQUFrQiwrQkFBQSxzQkFBQSxDSitmcEQsQUt4aUJELE9BRUksZUFBQSxBQUNBLFlBQUEsQUFHQSx5QkFBQSxBQUNBLGNBQUEsQUFDQSxlQUFBLEFBQ0Esb0JBQUEsQUFFQSxvQkFBQSxZQUFBLENMd2lCSCxBS3RpQkcsZUFBVSxpQkFBQSxDTHlpQmIsQUt4aUJHLHNCQUFrQixZQUFBLEFBQWMscUJBQUEsQUFBc0IsWUFBQSxDTDZpQnpELEFLNWlCRyw2QkFBd0IsZ0JBQUEsQ0wraUIzQixBSzlpQkcsb0NBQWdDLFlBQUEsQ0xpakJuQyxBSy9pQkcsMEJBQWUsY0FBQSxDTGtqQmxCLEFLaGpCRyxTQUNJLHFCQUFBLEFBQ0EsVUFBQSxDTGtqQlAsQUtoakJPLFdBQUcsY0FBQSxBQUFnQixjQUFBLENMb2pCMUIsQUszaUJELGlCQUNtQixxQkFBQSxBQUNmLGVBQUEsQUFBZ0IsU0FBQSxBQUFVLFlBQUEsQUFBYSxXQUFBLEFBQVksVUFBQSxBQUVuRCxZQUFBLEFBR0EsYUFBQSxDTHFqQkgsQUs5aUJELGlDQWJJLGFBQUEsQUFFQSw4QkFBQSxBQUVBLGdCQUFBLEFBQ0EsWUFBQSxBQUVBLHNCQUFBLEFBRUEsaUJBQUEsQ0xpa0JILEFLN2pCRCxnQkFFSSxrQkFBQSxBQUFtQixRQUFBLEFBQVMsV0FBQSxBQUU1QixXQUFBLEFBR0EsWUFBQSxBQUlBLGlCQUFBLENMa2pCSCxBSzdpQkQsNEdBQTJELGFBQUEsQ0xxakIxRCxBTXBuQkQsa0JBQW9CLFlBQUEsQ053bkJuQixBTXRuQkQsTUFFSSxlQUFBLEFBQWdCLFFBQUEsQUFBUyxXQUFBLEFBQ3pCLFdBQUEsQUFDQSxZQUFBLEFBQ0Esc0JBQUEsQUFFQSxjQUFBLEFBQ0EsWUFBQSxBQUVBLDBCQUFBLEFBRUEsY0FBQSxBQUNBLDBCQUFBLEFBRUEsc0NBQUEsQUFLQSx5QkFBQSxBQUNBLGNBQUEsQUFpREEscUJBQUEsQ05xa0JILEFNbm5CRyxXQUFTLHFCQUFBLEFBQXNCLFlBQUEsQUFBYSxlQUFBLEFBQWlCLGVBQUEsQUFBZ0IsYUFBQSxDTjBuQmhGLEFNeG5CRyxTQUNGLGlCQUFBLEFBQ0EsZUFBQSxBQUNBLGNBQUEsQUFnQkEseURBQUEsaURBQUEsQUFDQSxpQ0FBQSx5QkFBQSxBQUtBLGFBQUEsQ04ybUJELEFNaG9CQyxjQUNDLGtCQUFBLEFBQ0EsaUJBQUEsQUFBbUIsZ0JBQUEsQUFDbkIsZUFBQSxBQUNBLHlCQUFBLEFBQ0EsV0FBQSxBQUNBLHlDQUFBLGlDQUFBLHlCQUFBLCtDQUFBLEFBQ0EsaUNBQUEseUJBQUEsQUFDQSxnQ0FBQSx3QkFBQSxBQUNBLG9CQUFBLENObW9CRixBTXBuQkcsdUJBRUYsNEJBQUEsb0JBQUEsQUFDQSxNQUFBLENOcW5CRCxBTW5uQkMsNkJBRUMsZUFBQSxDTnFuQkYsQU1wbkJFLG9FQUZBLHVCQUFBLGNBQUEsQ055bkJGLEFNOW1CRyxjQUNGLGNBQUEsQUFDQSxrQkFBQSxBQUNBLHlCQUFBLEFBQ0EsOEJBQUEsQUFDQSxvQkFBQSxBQUNBLHNCQUFBLEFBV0EsaUJBQUEsQ05zbUJELEFNL21CQyxpQkFBSyxXQUFBLEFBQWMsbUJBQUEsQ05tbkJwQixBTWxuQkMsb0JBQ0MscUNBQUEsQ05vbkJGLEFNbG5CRSw2QkFBVyxxQkFBQSxBQUFzQixXQUFBLEFBQWMsZ0JBQUEsQ051bkJqRCxBTWpuQkMscUJBQ0MsMEJBQUEsQUFDQSx5QkFBQSxBQUNBLGtCQUFBLEFBQW1CLFNBQUEsQUFBVSxVQUFBLEFBQVcsV0FBQSxBQUV4QyxrQkFBQSxBQUNBLGlCQUFBLEFBQ0EsY0FBQSxBQUNBLHNCQUFBLEFBQ0EsVUFBQSxDTnFuQkYsQU1qbkJDLHVDQUNNLG9CQUFBLENOb25CUCxBTWxuQkMsaUJBQ0MsaUJBQUEsQUFDQSwwQkFBQSxBQUNBLFNBQUEsQUFDQSxjQUFBLEFBQ0Esa0JBQUEsQUFDQSxrQkFBQSxBQUFtQixTQUFBLENOcW5CckIsQU1ubkJFLDRCQUFlLHdCQUFBLENOc25CakIsQU1ybkJFLDRCQUFlLHdCQUFBLENOd25CakIsQU10bkJFLHVCQUNDLGFBQUEsQUFDQSxrQkFBQSxBQUFtQixVQUFBLEFBQVcsTUFBQSxBQUFPLGtDQUFBLDBCQUFBLEFBQ3JDLFVBQUEsQUFDQSxjQUFBLENOMm5CSCxBTTFuQkcsNkJBQVUsd0JBQUEsQ042bkJiLEFNeG5CQyxpQkFDQyxxQkFBQSxBQUNBLG9CQUFBLEFBQ0EsY0FBQSxBQUNBLGNBQUEsQUFDQSxTQUFBLENOMG5CRixBTXhuQkUsb0JBQ0MscUJBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EseUJBQUEsOEJBQUEsQUFDQSxnQ0FBQSxBQUNBLGtCQUFBLENOMG5CSCxBTXZuQkcsc0NBQ0MsYUFBQSxDTnluQkosQU10bkJHLCtCQUNDLGtCQUFBLENOd25CSixBTzV3QkQsS0FHQyxjQUFBLEFBQ0EsaUJBQUEsQUFDQSxzQkFBQSxBQUVBLHNEQUFBLEFBQ0EsZUpSaUIsQUlTakIsY0FBQSxBQUNBLGVBQUEsQ1A2d0JBLEFPM3dCQSw2QkFWQSxZQUFBLENQd3hCQSxBTzF3QkMsOENBQ0Msa0JBQUEsQUFDQSxhQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLHFCQUFBLHdCQUFBLENQNHdCRixBTzN3QkUscURBQVMsWUFBQSxDUDh3QlgsQU8xd0JDLDRCQUNDLG9CQUFBLGFBQUEsQUFDQSxlQUFBLEFBQ0EscUJBQUEsd0JBQUEsQ1A0d0JGLEFPM3dCRSxrQ0FBUSxZQUFBLENQOHdCVixBTzF3QkMsdUNBQ0MseUJBQUEsQUFDQSxXQUFBLEFBQ0EsWUFBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSx5QkFBQSw4QkFBQSxBQUNBLHlCQUFBLG1CQUFBLEFBQ0EsY0FBQSxDUDR3QkYsQU8xd0JFLDBDQUNDLGdCQUFBLEFBQ0EsY0FBQSxDUDR3QkgsQU8xd0JHLGdEQUNDLGVBQUEsQUFDQSxvQkFBQSxBQUNBLGdCQUFBLENQNHdCSixBT3h3QkUseURBQ0MsZUFBQSxBQUNBLG9CQUFBLEFBQ0EsZ0JBQUEsQ1Awd0JILEFPdHdCQyx5Q0FDQyxhQUFBLEFBQ0EsYUFBQSxDUHd3QkYsQU90d0JFLHNEQUNDLHFCQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG1CQUFBLEFBRUEsYUFBQSxBQUNBLFNBQUEsQ1B3d0JILEFPcndCRyw2REFDQyxXQUFBLEFBQ0EscUJBQUEsQUFDQSxhQUFBLENQd3dCSixBT253QkUscURBQ0MsU0FBQSxBQUNBLFNBQUEsQ1Bxd0JILEFPbndCRyx3REFDQywwQkFBQSxBQUE0QixnQkFBQSxBQUFpQixrQkFBQSxBQUU3QyxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFDQSx1QkFBQSwwQkFBQSxDUHN3QkosQU9wd0JJLG9FQUFpQixnQkFBQSxBQUFrQixjQUFBLENQd3dCdkMsQU90d0JJLDZEQUNDLGlCQUFBLEFBQ0EsZUFBQSxBQUNBLHFCQUFBLEFBQ0EsZ0JBQUEsQ1B3d0JMLEFPcHdCSSwyREFDQyxxQkFBQSxBQUNBLFNBQUEsQUFBVyxVQUFBLEFBRVgsb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG1CQUFBLEFBRUEsdUJBQUEsMEJBQUEsQ1Bxd0JMLEFPbndCSyxrRUFDQyxvQkFBQSxBQUNBLHFCQUFBLEFBQ0EsYUFBQSxDUHN3Qk4sQU85dkJFLHNEQUNDLGdCQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG1CQUFBLEFBQ0Esd0JBQUEsc0JBQUEsQ1Bnd0JILEFPN3ZCRyx3REFDQyxxQkFBQSxBQUNBLGtCQUFBLEFBQ0EsWUFBQSxBQUNBLGdCQUFBLENQK3ZCSixBTzd2QkksK0RBQ0MsZUFBQSxDUCt2QkwsQU8xdkJFLGtEQUNDLFVBQUEsQ1A0dkJILEFPM3ZCRyxvREFDQyxVQUFBLEFBQ0EsYUFBQSxBQUNBLGdCQUFBLEFBQ0Esa0JBQUEsQUFDQSxzQkFBQSxBQUNBLHlCQUFBLEFBQ0EsV0FBQSxBQUNBLGtCQUFBLEFBQ0EsbUJBQUEsQ1A2dkJKLEFRcjVCRCxtQkFFSSxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEsbUJBQUEsQUFDQSx3QkFBQSx1QkFBQSxBQUVBLHdCQUFBLHNCQUFBLENSczVCSCxBUzM1QkQsMkJBRUksZ0JBQUEsQUFDQSxXQUFBLEFBRUEsVUFBQSxBQUNBLHlCQUFBLEFBQ0Esa0JBQUEsQUFDQSxXQUFBLEFBRUEsZUFBQSxDVDQ1QkgsQVMxNUJHLDhCQUNJLGVBQUEsQUFDQSxnQkFBQSxBQUNBLFNBQUEsQUFDQSxhQUFBLEFBQ0Esa0JBQUEsQUFDQSxVQUFBLENUNDVCUCxBU3o1QkcsOEJBQ0ksaUJBQUEsQUFDQSxnQ0FBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSx5QkFBQSw4QkFBQSxBQUNBLGFBQUEsQ1QyNUJQLEFTejVCTywyQ0FDSSxrQkFBQSxDVDI1QlgsQVN6NUJPLHVDQUNJLHlCQUFBLEFBQ0EsY0FBQSxBQUNBLGlCQUFBLENUNDVCWCxBU3o1Qlcsc0RBRUksZUFBQSxDVDA1QmYsQVN2NUJlLHdEQUFJLHFCQUFBLEFBRUEsY0FBQSxBQUNBLG9CQUFBLENUeTVCbkIsQVNuNUJlLHdEQUNJLGFBQUEsQUFFQSxrQkFBQSxBQUNBLFNBQUEsQUFDQSxRQUFBLEFBQ0Esd0NBQUEsZ0NBQUEsQUFDQSxjQUFBLEFBQ0EsaUJBQUEsQUFDQSxZQUFBLEFBQ0EsWUFBQSxBQUNBLFdBQUEsQUFDQSx5QkFBQSxBQUNBLFdBQUEsQUFDQSxnQkFBQSxBQUNBLGtCQUFBLEFBQ0Esd0JBQUEsQ1RvNUJuQixBU2g1QmUsNERBQ0ksV0FBQSxBQUNBLFFBQUEsQUFDQSxTQUFBLEFBQ0EsYUFBQSxBQUVBLGtCQUFBLEFBQ0EsWUFBQSxBQUlBLDZCQUFBLHlCQUFBLEFBRUEsU0FBQSxBQUNBLFFBQUEsQUFDQSxtQ0FBQSwwQkFBQSxDVGc1Qm5CLEFTeDRCZSxnSUFBd0IsYUFBQSxDVDg0QnZDLEFTejRCTyw0Q0FDSSxxQkFBQSxBQUNBLGtCQUFBLENUMjRCWCxBU3g0Qk8sMENBQ0ksb0JBQUEsQ1QwNEJYLEFTdDRCRyw4QkFDSSxVQUFBLEFBQ0EsU0FBQSxBQUNBLG9CQUFBLENUdzRCUCxBU3I0QkcsdUNBQ0ksV0FBQSxBQUNBLGVBQUEsQ1R1NEJQLEFTbjRCTyx1Q0FBSSx3QkFBQSxDVHM0QlgsQVNyNEJXLDRDQUFPLGVBQUEsQ1R3NEJsQixBU3A0Qk8sdUNBQUssd0JBQUEsQ1R1NEJaLEFTdDRCVyw0Q0FBTyxlQUFBLENUeTRCbEIsQVEvL0JBLCtCQUNDLGNBQUEsQUFDQSxTQUFBLENSaWdDRCxBVTNnQ0QsZ0RBQ0ksYUFBQSxBQUNBLG9CQUFBLEFBQ0EsaUJBQUEsQUFFQSx3QkFBQSxzQkFBQSxDVjRnQ0gsQVUxZ0NHLHdEQUNJLG9CQUFBLEFBQ0EsV0FBQSxDVjRnQ1AsQVV6Z0NHLGtEQUNJLHFCQUFBLEFBQ0EsY0FBQSxBQUNBLFdBQUEsQUFDQSxtQkFBQSxDVjJnQ1AsQVUxZ0NPLHVEQUNJLGVBQUEsQ1Y0Z0NYLEFVdmdDRCw4Q0FDSSxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFDQSwwQkFBQSxvQkFBQSxBQUNBLGFBQUEsQUFDQSxhQUFBLEFBQ0EsY0FBQSxBQUNBLFVBQUEsQUFDQSx5QkFBQSxBQUNBLGlCQUFBLENWeWdDSCxBVXRnQ0csK0RBQ0kseUJBQUEsQUFDQSxZQUFBLEFBQ0EsWUFBQSxBQUNBLGVBQUEsQ1Z3Z0NQLEFVdGdDTyx3RUFDSSxvQkFBQSxhQUFBLEFBQ0EsNEJBQUEsNkJBQUEsd0JBQUEsQUFFQSx5QkFBQSx1QkFBQSxDVnVnQ1gsQVVyZ0NXLHVGQUNJLHlCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxpQkFBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUVBLHdCQUFBLHVCQUFBLEFBQ0EsV0FBQSxBQUNBLGdCQUFBLEFBQ0EsY0FBQSxDVnNnQ2YsQVVwZ0NlLHlGQUNJLHFCQUFBLEFBQ0EsWUFBQSxBQUNBLFNBQUEsQUFDQSxrQkFBQSxDVnNnQ25CLEFVbGdDZSw2RkFDSSx3QkFBQSxDVm9nQ25CLEFVbGdDZSxnR0FDSSx3QkFBQSxDVm9nQ25CLEFVamdDZSxtR0FDSSwwQkFBQSxDVm1nQ25CLEFVNy9CRywrREFDSSxzQkFBQSxBQUNBLFlBQUEsQUFDQSxZQUFBLEFBQ0EsZ0JBQUEsQUFDQSxpQkFBQSxDVisvQlAsQVU1L0JPLHdFQUNJLGFBQUEsQUFNQSwwQkFBQSxBQUNBLFVBQUEsQUFFQSxpQkFBQSxBQUNBLG1CQUFBLEFBQ0EsZ0RBQUEsQUFFQSxZQUFBLENWdS9CWCxBVWxnQ1csaUZBQ0ksWUFBQSxDVm9nQ2YsQVV6L0JXLGdGQUNJLHlCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEsb0JBQUEsQ1YyL0JmLEFVei9CZSxrRkFDSSxxQkFBQSxBQUNBLGdCQUFBLEFBRUEsZ0JBQUEsQ1YyL0JuQixBVXovQm1CLHdGQUNJLG9CQUFBLEFBQ0EsZUFBQSxBQUNBLGtCQUFBLENWMi9CdkIsQVV2L0JlLG9GQUNJLFNBQUEsQUFDQSxVQUFBLEFBQ0EscUJBQUEsQUFDQSxvQkFBQSxZQUFBLENWeS9CbkIsQVV2L0JtQiwwRkFDSSxpQkFBQSxBQUNBLFVBQUEsQUFDQSxrQkFBQSxBQUNBLGlCQUFBLENWeS9CdkIsQVV2L0J1Qiw4RkFDQSxXQUFBLEFBQ0EsWUFBQSxBQUNBLGlCQUFBLENWeS9CdkIsQVV0L0J1Qiw0RkFDSSxlQUFBLEFBQ0EsYUFBQSxDVncvQjNCLEFVci9CdUIsZ0dBQ0ksV0FBQSxBQUNBLFFBQUEsQUFDQSxTQUFBLEFBQ0EsYUFBQSxBQUVBLGtCQUFBLEFBQ0EsWUFBQSxBQUlBLDZCQUFBLDRCQUFBLEFBRUEsU0FBQSxBQUNBLFNBQUEsQUFDQSxtQ0FBQSwwQkFBQSxDVnEvQjNCLEFVaC9CbUIsK0ZBQ0ksYUFBQSxBQUNBLGtCQUFBLEFBQ0EsYUFBQSxBQUNBLFVBQUEsQUFDQSxTQUFBLEFBQ0EsU0FBQSxBQUNBLG1DQUFBLDJCQUFBLEFBQ0EsWUFBQSxBQUNBLGNBQUEsQUFDQSxnQkFBQSxDVmsvQnZCLEFVaC9CdUIsNEdBQ0ksWUFBQSxBQUVBLFFBQUEsQ1ZpL0IzQixBVTkrQnVCLGlIQUNJLHlCQUFBLEFBQ0EsWUFBQSxBQUNBLFdBQUEsQUFDQSwwQ0FBQSxBQUNBLG9CQUFBLEFBQ0EsWUFBQSxBQUNBLGtCQUFBLEFBQ0EsZUFBQSxDVmcvQjNCLEFVOStCMkIsbUhBQ0ksZ0JBQUEsQUFDQSxrQkFBQSxDVmcvQi9CLEFVeitCdUIscUdBQ0ksU0FBQSxDVjIrQjNCLEFVditCMkIsdUhBQ0ksWUFBQSxBQUNBLFlBQUEsQUFDQSxnQkFBQSxBQUNBLGFBQUEsQ1Z5K0IvQixBVXYrQitCLHlIQUNJLHNEQUFBLEFBQ0EsYUFBQSxDVnkrQm5DLEFVeCtCbUMsOEhBQU8sZUFBQSxDVjIrQjFDLEFVMStCbUMsMkhBQUkscUJBQUEsQUFBdUIsVUFBQSxDVjgrQjlELEFVbitCdUIsOE1BQ0ksYUFBQSxDVncrQjNCLEFVbitCdUIsb0dBQ0ksV0FBQSxBQUNBLHdCQUFBLENWcStCM0IsQVVsK0J1QixrR0FDSSxhQUFBLENWbytCM0IsQVU1OUIyQiw4TkFDSSxZQUFBLENWaStCL0IsQVV6OUJXLDJGQUNJLG1CQUFBLEFBRUEsb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG1CQUFBLEFBQ0Esd0JBQUEsdUJBQUEsQUFDQSx1QkFBQSxzQkFBQSxBQUNBLGdCQUFBLEFBQ0EsZ0JBQUEsQ1YwOUJmLEFTcnVDRCxtR0FFSSxnQkFBQSxBQUNBLFdBQUEsQUFFQSxVQUFBLEFBQ0EseUJBQUEsQUFDQSxrQkFBQSxBQUNBLFdBQUEsQUFFQSxlQUFBLENUc3VDSCxBU3B1Q0csc0dBQ0ksZUFBQSxBQUNBLGdCQUFBLEFBQ0EsU0FBQSxBQUNBLGFBQUEsQUFDQSxrQkFBQSxBQUNBLFVBQUEsQ1RzdUNQLEFTbnVDRyxzR0FDSSxpQkFBQSxBQUNBLGdDQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLHlCQUFBLDhCQUFBLEFBQ0EsYUFBQSxDVHF1Q1AsQVNudUNPLG1IQUNJLGtCQUFBLENUcXVDWCxBU251Q08sK0dBQ0kseUJBQUEsQUFDQSxjQUFBLEFBQ0EsaUJBQUEsQ1RzdUNYLEFTbnVDVyw4SEFFSSxlQUFBLENUb3VDZixBU2p1Q2UsZ0lBQUkscUJBQUEsQUFFQSxjQUFBLEFBQ0Esb0JBQUEsQ1RtdUNuQixBUzd0Q2UsZ0lBQ0ksYUFBQSxBQUVBLGtCQUFBLEFBQ0EsU0FBQSxBQUNBLFFBQUEsQUFDQSx3Q0FBQSxnQ0FBQSxBQUNBLGNBQUEsQUFDQSxpQkFBQSxBQUNBLFlBQUEsQUFDQSxZQUFBLEFBQ0EsV0FBQSxBQUNBLHlCQUFBLEFBQ0EsV0FBQSxBQUNBLGdCQUFBLEFBQ0Esa0JBQUEsQUFDQSx3QkFBQSxDVDh0Q25CLEFTMXRDZSxvSUFDSSxXQUFBLEFBQ0EsUUFBQSxBQUNBLFNBQUEsQUFDQSxhQUFBLEFBRUEsa0JBQUEsQUFDQSxZQUFBLEFBSUEsNkJBQUEseUJBQUEsQUFFQSxTQUFBLEFBQ0EsUUFBQSxBQUNBLG1DQUFBLDBCQUFBLENUMHRDbkIsQVNsdENlLGdSQUF3QixhQUFBLENUd3RDdkMsQVNudENPLG9IQUNJLHFCQUFBLEFBQ0Esa0JBQUEsQ1RxdENYLEFTbHRDTyxrSEFDSSxvQkFBQSxDVG90Q1gsQVNodENHLHNHQUNJLFVBQUEsQUFDQSxTQUFBLEFBQ0Esb0JBQUEsQ1RrdENQLEFTL3NDRywrR0FDSSxXQUFBLEFBQ0EsZUFBQSxDVGl0Q1AsQVM3c0NPLCtHQUFJLHdCQUFBLENUZ3RDWCxBUy9zQ1csb0hBQU8sZUFBQSxDVGt0Q2xCLEFTOXNDTywrR0FBSyx3QkFBQSxDVGl0Q1osQVNodENXLG9IQUFPLGVBQUEsQ1RtdENsQixBUWwwQ0EsOEJBQ0MsY0FBQSxBQUNBLFNBQUEsQ1JvMENELEFXdDFDRCw0Q0FDSSxhQUFBLEFBQ0EsOEJBQUEsQUFDQSxpREFBQSxBQUVBLGFBQUEsQUFDQSxhQUFBLEFBQ0Esa0JBQUEsQUFDQSxpQkFBQSxDWHUxQ0gsQVdyMUNHLDREQUNJLHdCQUFBLEFBRUEsZ0JBQUEsQUFDQSx3QkFBQSxBQUVBLDZCQUFBLEFBQ0EsK0JBQUEsQ1hxMUNQLEFXajFDTyxtRUFRSSw2QkFBQSw0QkFBQSxBQUVBLFFBQUEsQ1hvMUNYLEFXLzBDTyxxSUFkSSxXQUFBLEFBQ0EsUUFBQSxBQUNBLFNBQUEsQUFDQSxjQUFBLEFBQ0Esa0JBQUEsQUFDQSxZQUFBLEFBR0EsV0FBQSxBQUlBLG1DQUFBLDBCQUFBLENYODFDWCxBVzUxQ08sa0VBUUksNkJBQUEseUJBQUEsQUFFQSxZQUFBLENYazFDWCxBVzUwQ08sd0VBQ0ksV0FBQSxBQUNBLFVBQUEsQUFDQSxZQUFBLEFBQ0EseUJBQUEsQUFDQSxrQkFBQSxBQUNBLGFBQUEsQ1g4MENYLEFXNTBDVyxpRkFDSSx3QkFBQSxDWDgwQ2YsQVczMENXLG9GQUNJLHdCQUFBLENYNjBDZixBV3owQ1csMkVBQ0ksZUFBQSxBQUNBLGdCQUFBLEFBQ0EsU0FBQSxBQUNBLGFBQUEsQUFDQSxrQkFBQSxBQUNBLFdBQUEsQUFDQSx5QkFBQSxBQUNBLHlCQUFBLENYMjBDZixBV3gwQ1csa0ZBQ0ksb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLHFCQUFBLEFBQ0EsMEJBQUEsbUJBQUEsQ1gwMENmLEFXeDBDZSxxRkFDSSxVQUFBLEFBQ0EsU0FBQSxBQUNBLHFCQUFBLEFBQ0EsU0FBQSxDWDAwQ25CLEFXeDBDbUIsd0ZBQ0ksdUJBQUEsQUFDQSxnQ0FBQSxBQUNBLGNBQUEsQ1gwMEN2QixBV3gwQ3VCLGtHQUNJLGtCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxpQkFBQSxBQUNBLGFBQUEsQ1gwMEMzQixBV3YwQ3VCLDZGQUNJLGFBQUEsQ1h5MEMzQixBV3YwQzJCLGlHQUNJLGdCQUFBLEFBQ0EsY0FBQSxDWHkwQy9CLEFXdjBDMkIsaUdBQ0ksaUJBQUEsQUFDQSxnQkFBQSxBQUNBLFdBQUEsQUFDQSxjQUFBLENYeTBDL0IsQVduMENtQixpR0FDSSw4QkFBQSxDWHEwQ3ZCLEFXNXpDRyw0REFDSSwyQkFBQSxBQUNBLFlBQUEsQ1g4ekNQLEFXNXpDTyxxRUFDSSxhQUFBLENYOHpDWCxBVzV6Q08sOERBQ0ksZUFBQSxBQUNBLGdCQUFBLEFBQ0EsaUJBQUEsQ1g4ekNYLEFXM3pDTyx5RUFDSSxjQUFBLEFBQ0EsU0FBQSxDWDZ6Q1gsQVU3OENELDBGQUNJLGFBQUEsQUFDQSxvQkFBQSxBQUNBLGlCQUFBLEFBRUEsd0JBQUEsc0JBQUEsQ1Y4OENILEFVNThDRyxrR0FDSSxvQkFBQSxBQUNBLFdBQUEsQ1Y4OENQLEFVMzhDRyw0RkFDSSxxQkFBQSxBQUNBLGNBQUEsQUFDQSxXQUFBLEFBQ0EsbUJBQUEsQ1Y2OENQLEFVNThDTyxpR0FDSSxlQUFBLENWODhDWCxBVXo4Q0Qsd0ZBQ0ksb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLHFCQUFBLEFBQ0EsMEJBQUEsb0JBQUEsQUFDQSxhQUFBLEFBQ0EsYUFBQSxBQUNBLGNBQUEsQUFDQSxVQUFBLEFBQ0EseUJBQUEsQUFDQSxpQkFBQSxDVjI4Q0gsQVV4OENHLHlHQUNJLHlCQUFBLEFBQ0EsWUFBQSxBQUNBLFlBQUEsQUFDQSxlQUFBLENWMDhDUCxBVXg4Q08sa0hBQ0ksb0JBQUEsYUFBQSxBQUNBLDRCQUFBLDZCQUFBLHdCQUFBLEFBRUEseUJBQUEsdUJBQUEsQ1Z5OENYLEFVdjhDVyxpSUFDSSx5QkFBQSxBQUNBLGdCQUFBLEFBQ0EsaUJBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFFQSx3QkFBQSx1QkFBQSxBQUNBLFdBQUEsQUFDQSxnQkFBQSxBQUNBLGNBQUEsQ1Z3OENmLEFVdDhDZSxtSUFDSSxxQkFBQSxBQUNBLFlBQUEsQUFDQSxTQUFBLEFBQ0Esa0JBQUEsQ1Z3OENuQixBVXA4Q2UsdUlBQ0ksd0JBQUEsQ1ZzOENuQixBVXA4Q2UsMElBQ0ksd0JBQUEsQ1ZzOENuQixBVW44Q2UsNklBQ0ksMEJBQUEsQ1ZxOENuQixBVS83Q0cseUdBQ0ksc0JBQUEsQUFDQSxZQUFBLEFBQ0EsWUFBQSxBQUNBLGdCQUFBLEFBQ0EsaUJBQUEsQ1ZpOENQLEFVOTdDTyxrSEFDSSxhQUFBLEFBTUEsMEJBQUEsQUFDQSxVQUFBLEFBRUEsaUJBQUEsQUFDQSxtQkFBQSxBQUNBLGdEQUFBLEFBRUEsWUFBQSxDVnk3Q1gsQVVwOENXLDJIQUNJLFlBQUEsQ1ZzOENmLEFVMzdDVywwSEFDSSx5QkFBQSxBQUNBLGdCQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG9CQUFBLENWNjdDZixBVTM3Q2UsNEhBQ0kscUJBQUEsQUFDQSxnQkFBQSxBQUVBLGdCQUFBLENWNjdDbkIsQVUzN0NtQixrSUFDSSxvQkFBQSxBQUNBLGVBQUEsQUFDQSxrQkFBQSxDVjY3Q3ZCLEFVejdDZSw4SEFDSSxTQUFBLEFBQ0EsVUFBQSxBQUNBLHFCQUFBLEFBQ0Esb0JBQUEsWUFBQSxDVjI3Q25CLEFVejdDbUIsb0lBQ0ksaUJBQUEsQUFDQSxVQUFBLEFBQ0Esa0JBQUEsQUFDQSxpQkFBQSxDVjI3Q3ZCLEFVejdDdUIsd0lBQ0EsV0FBQSxBQUNBLFlBQUEsQUFDQSxpQkFBQSxDVjI3Q3ZCLEFVeDdDdUIsc0lBQ0ksZUFBQSxBQUNBLGFBQUEsQ1YwN0MzQixBVXY3Q3VCLDBJQUNJLFdBQUEsQUFDQSxRQUFBLEFBQ0EsU0FBQSxBQUNBLGFBQUEsQUFFQSxrQkFBQSxBQUNBLFlBQUEsQUFJQSw2QkFBQSw0QkFBQSxBQUVBLFNBQUEsQUFDQSxTQUFBLEFBQ0EsbUNBQUEsMEJBQUEsQ1Z1N0MzQixBVWw3Q21CLHlJQUNJLGFBQUEsQUFDQSxrQkFBQSxBQUNBLGFBQUEsQUFDQSxVQUFBLEFBQ0EsU0FBQSxBQUNBLFNBQUEsQUFDQSxtQ0FBQSwyQkFBQSxBQUNBLFlBQUEsQUFDQSxjQUFBLEFBQ0EsZ0JBQUEsQ1ZvN0N2QixBVWw3Q3VCLHNKQUNJLFlBQUEsQUFFQSxRQUFBLENWbTdDM0IsQVVoN0N1QiwySkFDSSx5QkFBQSxBQUNBLFlBQUEsQUFDQSxXQUFBLEFBQ0EsMENBQUEsQUFDQSxvQkFBQSxBQUNBLFlBQUEsQUFDQSxrQkFBQSxBQUNBLGVBQUEsQ1ZrN0MzQixBVWg3QzJCLDZKQUNJLGdCQUFBLEFBQ0Esa0JBQUEsQ1ZrN0MvQixBVTM2Q3VCLCtJQUNJLFNBQUEsQ1Y2NkMzQixBVXo2QzJCLGlLQUNJLFlBQUEsQUFDQSxZQUFBLEFBQ0EsZ0JBQUEsQUFDQSxhQUFBLENWMjZDL0IsQVV6NkMrQixtS0FDSSxzREFBQSxBQUNBLGFBQUEsQ1YyNkNuQyxBVTE2Q21DLHdLQUFPLGVBQUEsQ1Y2NkMxQyxBVTU2Q21DLHFLQUFJLHFCQUFBLEFBQXVCLFVBQUEsQ1ZnN0M5RCxBVXI2Q3VCLGtTQUNJLGFBQUEsQ1YwNkMzQixBVXI2Q3VCLDhJQUNJLFdBQUEsQUFDQSx3QkFBQSxDVnU2QzNCLEFVcDZDdUIsNElBQ0ksYUFBQSxDVnM2QzNCLEFVOTVDMkIsa1RBQ0ksWUFBQSxDVm02Qy9CLEFVMzVDVyxxSUFDSSxtQkFBQSxBQUVBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxtQkFBQSxBQUNBLHdCQUFBLHVCQUFBLEFBQ0EsdUJBQUEsc0JBQUEsQUFDQSxnQkFBQSxBQUNBLGdCQUFBLENWNDVDZixBU3ZxREQsNklBRUksZ0JBQUEsQUFDQSxXQUFBLEFBRUEsVUFBQSxBQUNBLHlCQUFBLEFBQ0Esa0JBQUEsQUFDQSxXQUFBLEFBRUEsZUFBQSxDVHdxREgsQVN0cURHLGdKQUNJLGVBQUEsQUFDQSxnQkFBQSxBQUNBLFNBQUEsQUFDQSxhQUFBLEFBQ0Esa0JBQUEsQUFDQSxVQUFBLENUd3FEUCxBU3JxREcsZ0pBQ0ksaUJBQUEsQUFDQSxnQ0FBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSx5QkFBQSw4QkFBQSxBQUNBLGFBQUEsQ1R1cURQLEFTcnFETyw2SkFDSSxrQkFBQSxDVHVxRFgsQVNycURPLHlKQUNJLHlCQUFBLEFBQ0EsY0FBQSxBQUNBLGlCQUFBLENUd3FEWCxBU3JxRFcsd0tBRUksZUFBQSxDVHNxRGYsQVNucURlLDBLQUFJLHFCQUFBLEFBRUEsY0FBQSxBQUNBLG9CQUFBLENUcXFEbkIsQVMvcERlLDBLQUNJLGFBQUEsQUFFQSxrQkFBQSxBQUNBLFNBQUEsQUFDQSxRQUFBLEFBQ0Esd0NBQUEsZ0NBQUEsQUFDQSxjQUFBLEFBQ0EsaUJBQUEsQUFDQSxZQUFBLEFBQ0EsWUFBQSxBQUNBLFdBQUEsQUFDQSx5QkFBQSxBQUNBLFdBQUEsQUFDQSxnQkFBQSxBQUNBLGtCQUFBLEFBQ0Esd0JBQUEsQ1RncURuQixBUzVwRGUsOEtBQ0ksV0FBQSxBQUNBLFFBQUEsQUFDQSxTQUFBLEFBQ0EsYUFBQSxBQUVBLGtCQUFBLEFBQ0EsWUFBQSxBQUlBLDZCQUFBLHlCQUFBLEFBRUEsU0FBQSxBQUNBLFFBQUEsQUFDQSxtQ0FBQSwwQkFBQSxDVDRwRG5CLEFTcHBEZSxvV0FBd0IsYUFBQSxDVDBwRHZDLEFTcnBETyw4SkFDSSxxQkFBQSxBQUNBLGtCQUFBLENUdXBEWCxBU3BwRE8sNEpBQ0ksb0JBQUEsQ1RzcERYLEFTbHBERyxnSkFDSSxVQUFBLEFBQ0EsU0FBQSxBQUNBLG9CQUFBLENUb3BEUCxBU2pwREcseUpBQ0ksV0FBQSxBQUNBLGVBQUEsQ1RtcERQLEFTL29ETyx5SkFBSSx3QkFBQSxDVGtwRFgsQVNqcERXLDhKQUFPLGVBQUEsQ1RvcERsQixBU2hwRE8seUpBQUssd0JBQUEsQ1RtcERaLEFTbHBEVyw4SkFBTyxlQUFBLENUcXBEbEIsQVc3bkRlLGlNQUNHLFVBQUEsQ1hrb0RsQixBV2hvRGUseUdBQ0ksY0FBQSxBQUNBLFdBQUEsQ1hrb0RuQixBV2pvRG1CLGtIQUNJLFVBQUEsQ1htb0R2QixBV2hvRGUseUdBQ0ksVUFBQSxDWGtvRG5CLEFXam9EbUIsa0hBQ0ksMkJBQUEsQ1htb0R2QixBV2xvRHVCLHlJQUNJLFFBQUEsQ1hvb0QzQixBUTN3REEsa0RBQVcsYUFBQSxDUmt4RFgsQVlsekRELDRCQUNJLEdBQVEsVUFBQSxDWnN6RFQsQVlyekRDLEdBQVEsT0FBQSxDWnd6RFQsQ0FDRixBWTN6REQsb0JBQ0ksR0FBUSxVQUFBLENac3pEVCxBWXJ6REMsR0FBUSxPQUFBLENad3pEVCxDQUNGLEFZdHpERCxZQUVJLGVBQUEsQUFBZ0IsV0FBQSxBQUFZLFVBQUEsQUFDNUIsYUFBQSxBQUNBLFlBQUEsQUFDQSxxQkFBQSxBQUVBLG9CQUFBLGFBQUEsQUFDQSw0QkFBQSw4QkFBQSw2QkFBQSxDWnd6REgsQVl0ekRHLGVBQ0gsa0JBQUEsQUFDQSxnQkFBQSxBQUFtQixXQUFBLEFBQ25CLGtCQUFBLEFBQ0Esc0JBQUEsQUFDQSxhQUFBLEFBQ0EsWUFBQSxBQUVBLGtCQUFBLEFBQ0EscUJBQUEsQ1p5ekRBLEFZdnpEQSxzQkFBVyxZQUFBLENaMHpEWCxBWXh6REEscUJBQ0ksWUFBQSxBQUFjLHFCQUFBLEFBQ2Qsa0JBQUEsQUFBb0IsV0FBQSxBQUFZLFVBQUEsQUFBVyxXQUFBLEFBQVksdUJBQUEsQUFFdkQsZ0JBQUEsQUFDQSxrQkFBQSxBQUVBLGdDQUFBLHdCQUFBLEFBQ0EseUNBQUEsaUNBQUEsQUFDQSxvQ0FBQSw0QkFBQSxBQUNBLDhCQUFBLHFCQUFBLENaNnpESixBWXp6REEsMkJBQWlCLHVCQUFBLGNBQUEsQ1o0ekRqQixBWTF6REEsNEJBQ0ksbUJBQUEsQUFBcUIsb0JBQUEsQ1o2ekR6QixBWTV6REksa0NBQVcsa0JBQUEsQ1orekRmLEFZN3pEQSw2QkFDSSxtQkFBQSxBQUFxQixvQkFBQSxDWmcwRHpCLEFZL3pESSxtQ0FBVyxrQkFBQSxDWmswRGYsQVloMERBLCtCQUNJLG1CQUFBLEFBQXFCLG9CQUFBLENabTBEekIsQVlsMERJLHFDQUFXLGtCQUFBLENacTBEZiIsImZpbGUiOiIuLi9zdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImh0bWwge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbmJvZHkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZm9udC1mYW1pbHk6IFwiT3BlbiBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM2MzYzNjM7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHdpZHRoOiAxMTQwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuYm9keSBoZWFkZXIge1xuICB3aWR0aDogMTA0MHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxNTBweCBhdXRvIGF1dG87XG4gIGdyaWQtdGVtcGxhdGUtcm93czogYXV0bztcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJpY29uIHRpdGxlICAgIG5hdlwiIFwiaWNvbiBzdWJ0aXRsZSBuYXZcIjtcbiAgZ3JpZC1jb2x1bW4tZ2FwOiAxcmVtO1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuYm9keSBoZWFkZXIgPiBhIHtcbiAgZ3JpZC1hcmVhOiBpY29uO1xuICBqdXN0aWZ5LXNlbGY6IGxlZnQ7XG59XG5ib2R5IGhlYWRlciA+IGEgaW1nIHtcbiAgbWF4LXdpZHRoOiAxNjBweDtcbiAgbWF4LWhlaWdodDogNzBweDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5IGhlYWRlciA+IGgxIHtcbiAgZ3JpZC1hcmVhOiB0aXRsZTtcbiAgY29sb3I6ICMyRjM3NDk7XG4gIGFsaWduLXNlbGY6IGVuZDtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDEuNWVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkgaGVhZGVyID4gaDEgYSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5ib2R5IGhlYWRlciA+IGgyIHtcbiAgZ3JpZC1hcmVhOiBzdWJ0aXRsZTtcbiAgYWxpZ24tc2VsZjogc3RhcnQ7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBtYXJnaW46IDA7XG4gIGNvbG9yOiAjOUNBN0I3O1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbn1cbmJvZHkgaGVhZGVyID4gaDIgYSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5ib2R5IGhlYWRlciA+IG5hdiB7XG4gIGdyaWQtYXJlYTogbmF2O1xuICBqdXN0aWZ5LXNlbGY6IGVuZDtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuYm9keSBoZWFkZXIgPiBuYXYgYSwgYm9keSBoZWFkZXIgPiBuYXYgc3BhbiB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBncmV5O1xuICBmb250LXNpemU6IDgwJTtcbn1cbmJvZHkgaGVhZGVyID4gbmF2IC5lbmRwb2ludC1idXR0b24ge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbmJvZHkgaGVhZGVyID4gbmF2IC5lbmRwb2ludC1idXR0b24uc2VsZWN0ZWQge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbmJvZHkgaGVhZGVyID4gbmF2IC5hY2Nlc3MtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U0RTdFQztcbiAgY29sb3I6IGdyZXk7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgcGFkZGluZzogMC4zZW0gMC41ZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNENEQ3REY7XG59XG5ib2R5IGhlYWRlciA+IG5hdiAuYWNjZXNzLWJ1dHRvbjphY3RpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMXB4O1xufVxuYm9keSBoZWFkZXIgPiBuYXYgLmFjY2Vzcy1idXR0b24uc2VsZWN0ZWQge1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5OTlBOUI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM4NDg0ODQ7XG59XG5ib2R5IGhlYWRlciA+IG5hdiAubG9naW4tYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQzNTA2MTtcbiAgY29sb3I6IHdoaXRlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBwYWRkaW5nOiAwLjNlbSAxLjI1ZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDFBM0I7XG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4ycztcbn1cbmJvZHkgaGVhZGVyID4gbmF2IC5sb2dpbi1idXR0b246YWN0aXZlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbn1cblxuZm9ybSNxdWVyeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRkYzRjY7XG4gIGNvbG9yOiAjMzMzO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMWVtIDFlbSAyZW07XG4gIG1hcmdpbjogMWVtIDAgMmVtO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U1RThFQTtcbiAgZm9udC1zaXplOiA5MCU7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMmZyIDFmcjtcbiAgLyogZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIGF1dG8gYXV0byBhdXRvOyAqL1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMjI1cHggYXV0bztcbiAgLyogZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvOyAqL1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInNlYXJjaCBzZWFyY2hcIiBcImRhdGFzZXRzIGZpbHRlcnNcIiBcImVycm9ycyBlcnJvcnNcIjtcbiAganVzdGlmeS1pdGVtczogc3RyZXRjaDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIGdyaWQtZ2FwOiAwIDFyZW07XG4gIHdpZHRoOiAxMDQwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICAvKiAjaWRfZXh0ZW5kZWQgeyAqL1xuICAvKiBcdCY6YmVmb3JlIHsgY29udGVudDogXCJFeHRlbmRlZCBwYXJhbWV0ZXJzXCI7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyB9ICovXG4gIC8qIFx0JiB+ICNzaW1wbGlmZWQtcXVlcnkgeyBkaXNwbGF5OmJsb2NrOyB9ICovXG4gIC8qIFx0JiB+ICNleHRlbmRlZC1xdWVyeSB7IGRpc3BsYXk6bm9uZTsgfSAqL1xuICAvKiBcdCY6Y2hlY2tlZDpiZWZvcmUgeyBjb250ZW50OiBcIlNpbXBsaWZpZWQgcGFyYW1ldGVyc1wiOyBkaXNwbGF5OmlubGluZS1ibG9jazsgfSAqL1xuICAvKiBcdCY6Y2hlY2tlZCB+ICNzaW1wbGlmaWVkLXF1ZXJ5IHsgZGlzcGxheTpub25lOyB9ICovXG4gIC8qIFx0JjpjaGVja2VkIH4gI2V4dGVuZGVkLXF1ZXJ5IHsgZGlzcGxheTpibG9jazsgfSAqL1xuICAvKiB9ICovXG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciBmaWVsZHNldCB7XG4gIGJvcmRlci1yYWRpdXM6IDAuNWVtO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgZmllbGRzZXQgbGVnZW5kIHtcbiAgcGFkZGluZzogMCAxZXg7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjaW5jbHVkZS1kYXRhc2V0LXJlc3BvbnNlcyB7XG4gIGJvcmRlcjogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNpbmNsdWRlLWRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24ge1xuICBtYXJnaW4tbGVmdDogMWVtO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI2luY2x1ZGUtZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsYWJlbCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCB7XG4gIGdyaWQtYXJlYTogc2VhcmNoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMWVtIDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1zZWFyY2ggc2VsZWN0IHtcbiAgcGFkZGluZzogMCAxZW07XG4gIG1hcmdpbjogMDtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1zZWFyY2ggc2VjdGlvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLXdpZHRoOiA1MCU7XG4gIG1hcmdpbjogMCAxZW07XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktc2VhcmNoIHNlY3Rpb24gaW5wdXQge1xuICB3aWR0aDogNzI1cHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAwLjVyZW0gMS42cmVtO1xuICBib3JkZXI6IDFweCBzb2xpZCAjREREREREO1xuICBvdXRsaW5lOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBzZWN0aW9uIGlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjMjIyO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBzZWN0aW9uIGlucHV0OmZvY3VzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzUxY2JlZTtcbiAgYm94LXNoYWRvdzogMCAwIDVweCAjNTFjYmVlO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBzZWN0aW9uIGxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMS41ZW07XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDMwMG1zLCB2aXNpYmlsaXR5IDBtcztcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1zZWFyY2ggc2VjdGlvbiBpbnB1dDpwbGFjZWhvbGRlci1zaG93biArIGxhYmVsIHtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBidXR0b24ge1xuICBoZWlnaHQ6IDgwJTtcbiAgcGFkZGluZzogMWV4O1xuICBtYXJnaW4tbGVmdDogMWVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxOTZmMztcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBidXR0b246YWN0aXZlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1zZWFyY2ggYnV0dG9uIHAge1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktc2VhcmNoIGJ1dHRvbiBpIHtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWRhdGFzZXRzIHtcbiAgZ3JpZC1hcmVhOiBkYXRhc2V0cztcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMC4xcHggc29saWQgI0U4RUJFRjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBtaW4taGVpZ2h0OiA4cmVtO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWRhdGFzZXRzICNkYXRhc2V0cy1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gIGhlaWdodDogMThweDtcbiAgYm9yZGVyLWJvdHRvbTogMC4xcHggc29saWQgI0U4RUJFRjtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1kYXRhc2V0cyAjZGF0YXNldHMtaGVhZGVyIHAge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZGF0YXNldHMgI2RhdGFzZXRzLWhlYWRlciBwIHNwYW4ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZGF0YXNldHMgc2VjdGlvbiB7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiAwLjVlbSAxZW0gMWVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZGF0YXNldHMgc2VjdGlvbiBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvcmRlcjogMTtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1kYXRhc2V0cyBzZWN0aW9uIGxhYmVsLmRhdGFzZXQtbm90LWF1dGhvcml6ZWQge1xuICBvcGFjaXR5OiAwLjU7XG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xuICBvcmRlcjogMjtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1maWx0ZXJzIHtcbiAgZ3JpZC1hcmVhOiBmaWx0ZXJzO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAwLjFweCBzb2xpZCAjRThFQkVGO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBtaW4taGVpZ2h0OiA4cmVtO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWZpbHRlcnMgI2ZpbHRlcnMtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbSAwLjVlbTtcbiAgaGVpZ2h0OiAxOHB4O1xuICBib3JkZXItYm90dG9tOiAwLjFweCBzb2xpZCAjRThFQkVGO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWZpbHRlcnMgI2ZpbHRlcnMtaGVhZGVyIHAge1xuICBmb250LXNpemU6IDkwJTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWZpbHRlcnMgaSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6ICMzNTQwNTI7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBpLmZpbHRlci1hZGQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBzZWN0aW9uIHtcbiAgcGFkZGluZzogMC41ZW0gMWVtIDFlbTtcbiAgbWFyZ2luOiAwLjVlbSAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgLyogaW5wdXQgKyBpIHsgbWFyZ2luLWxlZnQ6MWV4OyB9ICovXG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBzZWN0aW9uIGlucHV0IHtcbiAgZmxleC1ncm93OiAxO1xuICBwYWRkaW5nOiAwLjNlbSAxZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEREREREQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMjAwbXM7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBzZWN0aW9uIGlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjMjIyO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWZpbHRlcnMgc2VjdGlvbiBpbnB1dDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggIzUxY2JlZTtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1maWx0ZXJzIHNlY3Rpb24gc3BhbiB7XG4gIHBhZGRpbmc6IDAuM2VtIDFlbTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0RERERERDtcbiAgbGluZS1oZWlnaHQ6IDEuMTU7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBzZWN0aW9uIGkge1xuICBtYXJnaW4tbGVmdDogMWV4O1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIHtcbiAgZ3JpZC1hcmVhOiBlcnJvcnM7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWVycm9ycyBkaXYuZXJyb3Itd3JhcHBlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgbWFyZ2luOiAyZW0gMCAxZW07XG4gIHBhZGRpbmc6IDEuMjVlbSAzLjVlbTtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjREI1MjRCO1xuICBjb2xvcjogd2hpdGU7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIGkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogOHB4O1xuICBsZWZ0OiA5cHg7XG4gIGZvbnQtc2l6ZTogMjBweDtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1lcnJvcnMgZGl2LmVycm9yLXdyYXBwZXIgY29kZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNzhEODg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4IDFleDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBtYXJnaW46IDAgMC4yNWVtO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWVycm9ycyBkaXYuZXJyb3Itd3JhcHBlciBzcGFuLmJvbGQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1ZW07XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIHNwYW4ucXVlcnktZm9ybSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTc4RDg4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweCAxZXg7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgY29sb3I6IHdoaXRlO1xuICBtYXJnaW4tcmlnaHQ6IDAuNWVtO1xuICBtaW4td2lkdGg6IDcuNWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIGRpdi5zbWFsbCB7XG4gIHBhZGRpbmctbGVmdDogMTBweDtcbiAgZm9udC1zaXplOiA4NSU7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIGRpdi5zbWFsbCBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIGRpdi5zbWFsbCB1bCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgdGV4dC1pbmRlbnQ6IC0xMHB4O1xufVxuXG5tYWluIHtcbiAgZmxleDogMTtcbiAgLyogcHVzaCBmb290ZXIgZG93biAqL1xuICB3aWR0aDogMTA0MHB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cbm1haW4gc3Bhbi5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogMC4yZW0gMC42ZW07XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBsaW5lLWhlaWdodDogMTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgLyogRmFsbGJhY2sgKi9cbiAgYmFja2dyb3VuZC1jb2xvcjogZ3JleTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IG5vbmU7XG4gIC8qXG4gIFx0Ji5sYWJlbC1wdWJsaWMubGFiZWwtbm90X2F1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLXB1YmxpYywgJGxhYmVsLW5vdF9hdXRob3JpemVkKTsgfVxuICBcdCYubGFiZWwtcHVibGljLmxhYmVsLWF1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLXB1YmxpYywgJGxhYmVsLWF1dGhvcml6ZWQpOyB9XG5cbiAgXHQmLmxhYmVsLXJlZ2lzdGVyZWQubGFiZWwtbm90X2F1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLXJlZ2lzdGVyZWQsICRsYWJlbC1ub3RfYXV0aG9yaXplZCk7IH1cbiAgXHQmLmxhYmVsLXJlZ2lzdGVyZWQubGFiZWwtYXV0aG9yaXplZCB7IEBpbmNsdWRlIGxlZnQycmlnaHRHcmFkaWVudCgkbGFiZWwtcmVnaXN0ZXJlZCwgJGxhYmVsLWF1dGhvcml6ZWQpOyB9XG5cbiAgXHQmLmxhYmVsLWNvbnRyb2xsZWQubGFiZWwtbm90X2F1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLWNvbnRyb2xsZWQsICRsYWJlbC1ub3RfYXV0aG9yaXplZCk7IH1cbiAgXHQmLmxhYmVsLWNvbnRyb2xsZWQubGFiZWwtYXV0aG9yaXplZCB7IEBpbmNsdWRlIGxlZnQycmlnaHRHcmFkaWVudCgkbGFiZWwtY29udHJvbGxlZCAsICRsYWJlbC1hdXRob3JpemVkKTsgfVxuXG4gIFx0Ji5sYWJlbC1ub3Rfc3VwcG9ydGVkLmxhYmVsLW5vdF9hdXRob3JpemVkIHsgQGluY2x1ZGUgbGVmdDJyaWdodEdyYWRpZW50KCRsYWJlbC1ub3Rfc3VwcG9ydGVkLCAkbGFiZWwtbm90X2F1dGhvcml6ZWQpOyB9XG4gIFx0Ji5sYWJlbC1ub3Rfc3VwcG9ydGVkLmxhYmVsLWF1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLW5vdF9zdXBwb3J0ZWQsICRsYWJlbC1hdXRob3JpemVkKTsgfVxuICAqL1xufVxubWFpbiBzcGFuLmxhYmVsLmxhYmVsLXB1YmxpYyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG59XG5tYWluIHNwYW4ubGFiZWwubGFiZWwtcmVnaXN0ZXJlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG59XG5tYWluIHNwYW4ubGFiZWwubGFiZWwtY29udHJvbGxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOTUzNGY7XG59XG5tYWluIHNwYW4ubGFiZWwubGFiZWwtbm90X3N1cHBvcnRlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2M7XG59XG5tYWluIHAge1xuICBtYXJnaW46IDAgMCAxZW0gMDtcbn1cblxuI2luZm8gbWFpbiB7XG4gIHBhZGRpbmc6IDAgMWVtO1xufVxuI2luZm8gbWFpbiBzZWN0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm8td3JhcDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIHBhZGRpbmc6IDFlbTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cbiNpbmZvIG1haW4gc2VjdGlvbiA+IHAge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIC8qIG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwOyAqL1xuICBmbGV4OiAxO1xuICBmb250LXNpemU6IDEycHg7XG4gIG1hcmdpbi10b3A6IDAuMTVlbTtcbn1cbiNpbmZvIG1haW4gc2VjdGlvbiA+IGEge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuI2luZm8gbWFpbiBzZWN0aW9uID4gYSAubGFiZWwge1xuICBmb250LXNpemU6IDEycHg7XG59XG4jaW5mbyBtYWluIHNlY3Rpb24gPiBzcGFuIHtcbiAgbWFyZ2luOiAwLjE1ZW0gMWVtIDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGN1cnNvcjogaGVscDtcbiAgd2lkdGg6IDE4cHg7XG4gIGhlaWdodDogMThweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC8qIEZhbGxiYWNrICovXG4gIGJhY2tncm91bmQtY29sb3I6IGdyZXk7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbiNpbmZvIG1haW4gc2VjdGlvbiA+IHNwYW4ubGFiZWwtYXV0aG9yaXplZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG59XG4jaW5mbyBtYWluIHNlY3Rpb24gPiBzcGFuLmxhYmVsLW5vdF9hdXRob3JpemVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0Zjtcbn1cblxuI2JlYWNvbi1jb29raWVzIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAxMDAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQ6ICMyNDI4MmE7XG4gIHBhZGRpbmc6IDFlbSAwO1xuICBvcGFjaXR5OiAxO1xufVxuI2JlYWNvbi1jb29raWVzID4gZGl2IHtcbiAgd2lkdGg6IDEwMDBweDtcbn1cbiNiZWFjb24tY29va2llcyA+IGRpdiBoNiB7XG4gIGZvbnQtc2l6ZTogMS41ZW07XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cbiNiZWFjb24tY29va2llcyA+IGRpdiBwIHtcbiAgbWFyZ2luOiAxZW0gMDtcbn1cbiNiZWFjb24tY29va2llcyA+IGRpdiBhIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogI2UwNTU0MDtcbn1cbiNiZWFjb24tY29va2llcyBidXR0b24ge1xuICB3aWR0aDogMTQwcHg7XG4gIG1hcmdpbi1sZWZ0OiAxZW07XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgaGVpZ2h0OiAyZW07XG4gIGNvbG9yOiBpbmhlcml0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTA1NTQwO1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbiNiZWFjb24tY29va2llcy5oaWRlLW1lIHtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAxcztcbn1cblxuI2JlYWNvbi1jb29raWVzICsgZm9vdGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogOXJlbTtcbn1cblxuI2JlYWNvbi1jb29raWVzLmhpZGUtbWUgKyBmb290ZXIge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICB0cmFuc2l0aW9uOiBtYXJnaW4gMS41cztcbn1cblxuZm9vdGVyIHtcbiAgbWFyZ2luLXRvcDogMmVtO1xuICBwYWRkaW5nOiAyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRkYzRjY7XG4gIGNvbG9yOiAjMkYzNzQ5O1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICAvKiBwdXNoIGl0IHJpZ2h0ICovXG59XG5mb290ZXIgc2VjdGlvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbmZvb3RlciBzZWN0aW9uOjpiZWZvcmUge1xuICBjb250ZW50OiBcInxcIjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDAgMWVtO1xufVxuZm9vdGVyIHNlY3Rpb246Zmlyc3Qtb2YtdHlwZSB7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuZm9vdGVyIHNlY3Rpb246Zmlyc3Qtb2YtdHlwZTo6YmVmb3JlIHtcbiAgY29udGVudDogbm9uZTtcbn1cbmZvb3RlciBsYWJlbCwgZm9vdGVyIGlucHV0IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuZm9vdGVyIGEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBncmV5O1xufVxuZm9vdGVyIGEgaSB7XG4gIGNvbG9yOiAjMkYzNzQ5O1xuICBmb250LXNpemU6IDEyMCU7XG59XG5cbiNiZWFjb24tcmVzcG9uc2Uge1xuICBkaXNwbGF5OiBub25lO1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAxMHZoO1xuICBib3R0b206IDEwdmg7XG4gIHJpZ2h0OiAxMHZ3O1xuICBsZWZ0OiAxMHZ3O1xuICBib3gtc2hhZG93OiAwIDAgNTBweCAwcHggI2MzYzNjMztcbiAgei1pbmRleDogMTAwO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcGFkZGluZzogMWVtO1xuICBvdmVyZmxvdzogYXV0bztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG4jYmVhY29uLXJlcXVlc3Qge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDJlbTtcbiAgYm94LXNoYWRvdzogMCAwIDUwcHggMHB4ICNjM2MzYzM7XG4gIHdpZHRoOiA2MHZ3O1xuICBwYWRkaW5nOiAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHotaW5kZXg6IDEwMTtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5pbnB1dCNiZWFjb24tcmVxdWVzdC10cmlnZ2VyOmNoZWNrZWQgfiAjYmVhY29uLXJlcXVlc3Qge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuaW5wdXQjYmVhY29uLXJlc3BvbnNlLXRyaWdnZXI6Y2hlY2tlZCB+ICNiZWFjb24tcmVzcG9uc2Uge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuI3Jlc3BvbnNlLWhpc3Rvcnkge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5hc2lkZSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAxMCU7XG4gIGJvdHRvbTogMTAlO1xuICBoZWlnaHQ6IDgwJTtcbiAgei1pbmRleDogMjAwO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2lkdGg6IDMwMHB4O1xuICBsZWZ0OiBjYWxjKC0zMDBweCArIDEuNWVtKTtcbiAgcGFkZGluZzogMS41ZW07XG4gIGJvcmRlci1yYWRpdXM6IDAgMWVtIDFlbSAwO1xuICBib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIC8qIHRyYW5zaXRpb246IGxlZnQgMzAwbXM7ICovXG4gIC8qIG9ubHkgb24gaG92ZXIgKi9cbiAgYmFja2dyb3VuZC1jb2xvcjogI0VGRjNGNjtcbiAgY29sb3I6ICM2MzYzNjM7XG4gIC8qIGNsZWFyIGhpc3RvcnkgKi9cbiAgY291bnRlci1yZXNldDogaGlzdG9yeTtcbn1cbmFzaWRlID4gc3BhbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZmxvYXQ6IHJpZ2h0O1xuICBmb250LXNpemU6IDAuN2VtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG1hcmdpbjogMC41ZW0gMDtcbn1cbmFzaWRlIGgxIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIG1hcmdpbjogMCAwIDFlbSAwO1xuICBjb2xvcjogIzJGMzc0OTtcbiAgLyogdHJhbnNpdGlvbjogdHJhbnNmb3JtIDMwMG1zLCAqL1xuICAvKiAgICAgICAgICAgICBmb250LXNpemUgMzAwbXM7ICovXG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKSB0cmFuc2xhdGUoLTE3MHB4LCAtMzAwcHgpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIC0xMDAlO1xuICAvKiB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSkgcm90YXRlKDkwZGVnKTsgKi9cbiAgLyogdHJhbnNmb3JtLW9yaWdpbjogMCAwOyAqL1xuICBmb250LXNpemU6IDFlbTtcbn1cbmFzaWRlIGgxIHNwYW4ge1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHBhZGRpbmc6IDAuNWV4IDFleDtcbiAgbWFyZ2luLWxlZnQ6IDFleDtcbiAgZm9udC1zaXplOiAwLjVlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxOTZmMztcbiAgY29sb3I6IHdoaXRlO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMzAwbXM7XG4gIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuYXNpZGUub3BlbiwgYXNpZGU6aG92ZXIge1xuICB0cmFuc2l0aW9uOiBsZWZ0IDMwMG1zO1xuICBsZWZ0OiAwO1xufVxuYXNpZGUub3BlbiBoMSwgYXNpZGU6aG92ZXIgaDEge1xuICB0cmFuc2Zvcm06IG5vbmU7XG4gIGZvbnQtc2l6ZTogMS41ZW07XG59XG5hc2lkZS5vcGVuIGgxIHNwYW4sIGFzaWRlOmhvdmVyIGgxIHNwYW4ge1xuICB0cmFuc2Zvcm06IG5vbmU7XG59XG5hc2lkZSBzZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U1RThFQTtcbiAgYm9yZGVyLXJhZGl1czogMWVtIDFlbSAxZXggMWV4O1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbmFzaWRlIHNlY3Rpb24gaDIge1xuICBjb2xvcjogd2hpdGU7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xufVxuYXNpZGUgc2VjdGlvbjpob3ZlciB7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbmFzaWRlIHNlY3Rpb246aG92ZXIgaDIgaS5mYXMge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG5hc2lkZSBzZWN0aW9uOjpiZWZvcmUge1xuICBjb3VudGVyLWluY3JlbWVudDogaGlzdG9yeTtcbiAgY29udGVudDogY291bnRlcihoaXN0b3J5KTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0xZXg7XG4gIGxlZnQ6IC0xZXg7XG4gIHotaW5kZXg6IDEwO1xuICBib3JkZXItcmFkaXVzOiA0MCU7XG4gIHBhZGRpbmc6IDAuNWV4IDFleDtcbiAgZm9udC1zaXplOiA3MCU7XG4gIGJhY2tncm91bmQtY29sb3I6IGdyZXk7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbmFzaWRlIHNlY3Rpb24gcC5sb25nLFxuYXNpZGUgc2VjdGlvbiBwcmUge1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG59XG5hc2lkZSBzZWN0aW9uIGgyIHtcbiAgcGFkZGluZzogMC4zZW0gMWVtO1xuICBib3JkZXItcmFkaXVzOiAxZW0gMWVtIDAgMDtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDFlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDU7XG59XG5hc2lkZSBzZWN0aW9uIGgyLnJlc3BvbnNlLVkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzZBRTQ3O1xufVxuYXNpZGUgc2VjdGlvbiBoMi5yZXNwb25zZS1OIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YwNjU0Mztcbn1cbmFzaWRlIHNlY3Rpb24gaDIgaS5mYXMge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA1cHg7XG4gIHRvcDogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwJSk7XG4gIHdpZHRoOiAxZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbmFzaWRlIHNlY3Rpb24gaDIgaS5mYXM6aG92ZXIge1xuICB0ZXh0LXNoYWRvdzogMHB4IDBweCA1cHggd2hpdGU7XG59XG5hc2lkZSBzZWN0aW9uIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbiAgZm9udC1zaXplOiA5MCU7XG4gIG1hcmdpbjogMC41ZW0gMDtcbiAgcGFkZGluZzogMDtcbn1cbmFzaWRlIHNlY3Rpb24gdWwgbGkge1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNUU4RUE7XG4gIHBhZGRpbmc6IDAuMmVtIDIuNWVtO1xufVxuYXNpZGUgc2VjdGlvbiB1bCBsaSBzcGFuOm50aC1jaGlsZCgyKSB7XG4gIGNvbG9yOiBkYXJrZ3JleTtcbn1cbmFzaWRlIHNlY3Rpb24gdWwgbGk6bnRoLWxhc3QtY2hpbGQoMSkge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuXG5ib2R5IHtcbiAgd2lkdGg6IDExNDBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBmb250LWZhbWlseTogXCJPcGVuIFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzYzNjM2MztcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIHtcbiAgd2lkdGg6IDExNDBweDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzICNhY2Nlc3MtbGV2ZWxzLWxlZ2VuZCB7XG4gIG1hcmdpbi1yaWdodDogNTBweDtcbiAgcGFkZGluZzogMC41ZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG59XG5ib2R5IG1haW4jYWNjZXNzLWxldmVscyAjYWNjZXNzLWxldmVscy1sZWdlbmQgLmxhYmVsIHtcbiAgbWFyZ2luOiAwIDFleDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzID4gbmF2IHtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgPiBuYXYgaW5wdXQge1xuICBtYXJnaW46IDAgMWV4O1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tdGl0bGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUZGM0Y2O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA1MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDJlbTtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLXRpdGxlIGgxIHtcbiAgbWFyZ2luLWxlZnQ6IDFlbTtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tdGl0bGUgaDEgc21hbGwge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICBtYXJnaW4tbGVmdDogMC41ZW07XG59XG5ib2R5IG1haW4jYWNjZXNzLWxldmVscyAuc2VjdGlvbi10aXRsZSBkaXYuaW5jbHVkZS1jaGVjayB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IGxpZ2h0ZXI7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB7XG4gIHdpZHRoOiAxMDQwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5jb2xsYXBzZWQge1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIG1hcmdpbjogMmVtIDA7XG4gIHBhZGRpbmc6IDA7XG4gIC8qIGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyAqL1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5jb2xsYXBzZWQgLmxhYmVsIHtcbiAgbWFyZ2luOiAxZXg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIGNvbG9yOmJsYWNrOyAqL1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5leHBhbmRlZCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgdWwuZXhwYW5kZWQgPiBsaSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjO1xuICBwYWRkaW5nLXRvcDogMWVtO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5leHBhbmRlZCA+IGxpOm50aC1jaGlsZCgxKSB7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIG1hcmdpbi10b3A6IDJlbTtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgdWwuZXhwYW5kZWQgPiBsaSA+IHNwYW4ge1xuICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgbWluLXdpZHRoOiAxNWVtO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5leHBhbmRlZCA+IGxpIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgdWwuZXhwYW5kZWQgPiBsaSB1bCAubGFiZWwge1xuICBtYXJnaW46IDAgMWV4IDAuNWV4IDA7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIGNvbG9yOmJsYWNrOyAqL1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCBkaXYuZGF0YXNldHMge1xuICBtYXJnaW46IDJlbSBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgZGl2LmRhdGFzZXRzIHAge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogMWVtO1xuICBtYXJnaW46IDAgMCAwIDFlbTtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgZGl2LmRhdGFzZXRzIHAgLmxhYmVsIHtcbiAgbWFyZ2luLWxlZnQ6IDFleDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgLm1lc3NhZ2Uge1xuICBtYXJnaW46IDFlbTtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgLm1lc3NhZ2UgcCB7XG4gIHdpZHRoOiA3MCU7XG4gIHBhZGRpbmc6IDAuMmVtO1xuICBtYXJnaW46IDJlbSBhdXRvO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGdyZXk7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2MzYzNjM7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbn1cblxuYm9keSNyZXNwb25zZSA+IG1haW4ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uIHtcbiAgLyogZmxleC1iYXNpczozMCU7ICovXG4gIG1pbi13aWR0aDogMTUwcHg7XG4gIG1hcmdpbjogMWVtO1xuICAvKiBtYXJnaW46MWVtIDA7ICovXG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNUU4RUE7XG4gIGJvcmRlci1yYWRpdXM6IDFleDtcbiAgY29sb3I6IGdyZXk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uIGgzIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAuNWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkge1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTVFOEVBO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGZvbnQtc2l6ZTogOTAlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBsaTpsYXN0LW9mLXR5cGUge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBsaS5oYW5kb3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZmYzZjY7XG4gIGNvbG9yOiAjMjE5NmYzO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8qIGhhbmRvdmVyIGxpbmtzICovXG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uIGxpLmhhbmRvdmVyIC5oYW5kb3Zlci1ub3RlIHtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkuaGFuZG92ZXIgLmhhbmRvdmVyLW5vdGUgYSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgY29sb3I6ICMyMTk2ZjM7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkuaGFuZG92ZXIgLmhhbmRvdmVyLW5vdGUgcCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTEwMCUpO1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMC41ZW0gMWVtO1xuICB3aWR0aDogMTAwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgY29sb3I6IHdoaXRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzUzQzQ3O1xuICB6LWluZGV4OiA5OTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjMzUzQzQ3O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBsaS5oYW5kb3ZlciAuaGFuZG92ZXItbm90ZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwMDtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMzNTNDNDc7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiAycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkuaGFuZG92ZXI6aG92ZXIgLmhhbmRvdmVyLW5vdGUgcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBsaS5oYW5kb3Zlcjpob3ZlciAuaGFuZG92ZXItbm90ZTo6YWZ0ZXIge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkgc3Bhbi52YXJpYWJsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1yaWdodDogMC41ZW07XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uIGxpIHNwYW4ubnVtYmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiB1bCB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBzcGFuLm51bWJlciB7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uLmV4aXN0cy1ZIGgzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM2QUU0Nztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24uZXhpc3RzLVkgaDMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbi5leGlzdHMtTiBoMyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGMDY1NDM7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uLmV4aXN0cy1OIGgzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDA7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAubm9WYXJpYW50c0ZvdW5kIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC1hdXRvLWNvbHVtbnM6IDE7XG4gIGdyaWQtYXV0by1yb3dzOiAyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC5ub1ZhcmlhbnRzRm91bmQgc2VjdGlvbiB7XG4gIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICB3aWR0aDogMTUwcHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAubm9WYXJpYW50c0ZvdW5kIHAge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBjb2xvcjogZ3JleTtcbiAgZm9udC13ZWlnaHQ6IGxpZ2h0ZXI7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAubm9WYXJpYW50c0ZvdW5kIHAgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICB3aWR0aDogMTA0MHB4O1xuICBoZWlnaHQ6IDY1MHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0VGRjNGNjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRkYzRjY7XG4gIHdpZHRoOiAxNzVweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBzdHJldGNoO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciAudmFyaWFudEJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNENkRBREU7XG4gIG1pbi1oZWlnaHQ6IDUwcHg7XG4gIG1heC1oZWlnaHQ6IDEwMHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjb2xvcjogd2hpdGU7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXIgLnZhcmlhbnRCdXR0b24gcCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMWVtO1xuICBtYXJnaW46IDA7XG4gIHRleHQtYWxpZ246IGp1c3RpZnk7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyIC52YXJpYW50QnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0NDRDBEMztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXIgLnZhcmlhbnRCdXR0b24uc2VsZWN0ZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUQ5NEVFO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciAudmFyaWFudEJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHdpZHRoOiA5OTBweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogc2Nyb2xsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogMy41ZW0gMWVtIDFlbSAzZW07XG4gIHdpZHRoOiA5MCU7XG4gIGdyaWQtY29sdW1uOiAxMDAlO1xuICBncmlkLXJvdzogNTBweCBhdXRvO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInZhcmlhbnQtaGVhZGVyXCIgXCJkYXRhc2V0c1wiO1xuICBncmlkLWdhcDogMWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudC5zZWxlY3RlZCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIge1xuICBncmlkLWFyZWE6IHZhcmlhbnQtaGVhZGVyO1xuICBtYXJnaW4tbGVmdDogMWVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgcCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbjogMDtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgcCBzbWFsbCB7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICBmb250LXNpemU6IDEwMCU7XG4gIHBhZGRpbmctbGVmdDogMC4yNWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiAubG9nbyB7XG4gIG1hcmdpbjogYXV0byAwLjVlbTtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IC5sb2dvIGltZyB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDMwJTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgLmxvZ28gaSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgY29sb3I6ICMyMTk2ZjM7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IC5sb2dvOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTAxO1xuICBib3JkZXItbGVmdDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkICMzNTNDNDc7XG4gIGJvcmRlci10b3A6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDEycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaGVpZ2h0OiA1MDBweDtcbiAgd2lkdGg6IDgwJTtcbiAgdG9wOiA2N3B4O1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgei1pbmRleDogMTAxO1xuICBtYXJnaW46IDAgYXV0bztcbiAgYWxpZ24tc2VsZjogc3RhcnQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQgLnRyYW5zcGFyZW50IHtcbiAgaGVpZ2h0OiAxMHB4O1xuICBtYXJnaW46IDA7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQgLmNvbnRlbnQtaGFuZG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzUzQzQ3O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbiAgcGFkZGluZzogMWVtO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQgLmNvbnRlbnQtaGFuZG92ZXIgcCB7XG4gIG1hcmdpbi1sZWZ0OiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwge1xuICB3aWR0aDogODAlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiBkaXYucmVzdWx0LnNtYWxsIC5jb250ZW50LWhhbmRvdmVyIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBwYWRkaW5nOiAxZW07XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiBkaXYucmVzdWx0LnNtYWxsIC5jb250ZW50LWhhbmRvdmVyIHAge1xuICBmb250LWZhbWlseTogXCJPcGVuIFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiA5MCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwgLmNvbnRlbnQtaGFuZG92ZXIgcCBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwgLmNvbnRlbnQtaGFuZG92ZXIgcCBhIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogd2hpdGU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2OmhvdmVyIGRpdi5yZXN1bHQge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXY6aG92ZXIgZGl2LmxvZ286OmFmdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2Lm1pc3NpbmcgZGl2IGltZyB7XG4gIG9wYWNpdHk6IDAuNTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUwKTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYubWlzc2luZyBkaXYgaSB7XG4gIGNvbG9yOiAjQjFDRUU1O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdi5taXNzaW5nOmhvdmVyIGRpdi5yZXN1bHQge1xuICBkaXNwbGF5OiBub25lO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdi5taXNzaW5nOmhvdmVyIGRpdi5sb2dvOjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyB7XG4gIGdyaWQtYXJlYTogZGF0YXNldHM7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHN0YXJ0O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xuICBwYWRkaW5nLWxlZnQ6IDFlbTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24ge1xuICAvKiBmbGV4LWJhc2lzOjMwJTsgKi9cbiAgbWluLXdpZHRoOiAxNTBweDtcbiAgbWFyZ2luOiAxZW07XG4gIC8qIG1hcmdpbjoxZW0gMDsgKi9cbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U1RThFQTtcbiAgYm9yZGVyLXJhZGl1czogMWV4O1xuICBjb2xvcjogZ3JleTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gaDMge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMC41ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6IHdoaXRlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaSB7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNUU4RUE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZm9udC1zaXplOiA5MCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpOmxhc3Qtb2YtdHlwZSB7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZjNmNjtcbiAgY29sb3I6ICMyMTk2ZjM7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLyogaGFuZG92ZXIgbGlua3MgKi9cbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkuaGFuZG92ZXIgLmhhbmRvdmVyLW5vdGUge1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaS5oYW5kb3ZlciAuaGFuZG92ZXItbm90ZSBhIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogIzIxOTZmMztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaS5oYW5kb3ZlciAuaGFuZG92ZXItbm90ZSBwIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogMnB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTAwJSk7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gIHdpZHRoOiAxMDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNTNDNDc7XG4gIHotaW5kZXg6IDk5O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICMzNTNDNDc7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyIC5oYW5kb3Zlci1ub3RlOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTAwO1xuICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItdG9wOiA1cHggc29saWQgIzM1M0M0NztcbiAgbGVmdDogNTAlO1xuICB0b3A6IDJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaS5oYW5kb3Zlcjpob3ZlciAuaGFuZG92ZXItbm90ZSBwIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyOmhvdmVyIC5oYW5kb3Zlci1ub3RlOjphZnRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaSBzcGFuLnZhcmlhYmxlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkgc3Bhbi5udW1iZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIHVsIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIHNwYW4ubnVtYmVyIHtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24uZXhpc3RzLVkgaDMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzZBRTQ3O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbi5leGlzdHMtWSBoMyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uLmV4aXN0cy1OIGgzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YwNjU0Mztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24uZXhpc3RzLU4gaDMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyZnIgNGZyO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInNhbXBsZUNhcmRzIHZhcmlhbnRSZXN1bHRzXCI7XG4gIHdpZHRoOiAxMDQwcHg7XG4gIGhlaWdodDogNjUwcHg7XG4gIG1hcmdpbi1ib3R0b206IDRlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciB7XG4gIGdyaWQtYXJlYTogXCJzYW1wbGVDYXJkc1wiO1xuICBvdmVyZmxvdzogc2Nyb2xsO1xuICBtYXJnaW46IDJlbSAxZW0gMS4yNWVtIDA7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRTVFOEVBO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U1RThFQTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXI6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwMDtcbiAgYm9yZGVyOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IDVweCBzb2xpZCAjRTVFOEVBO1xuICBsZWZ0OiAxNjVweDtcbiAgdG9wOiAxMXB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgI3NhbXBsZXNXcmFwcGVyOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwMDtcbiAgYm9yZGVyOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci10b3AtY29sb3I6IDVweCBzb2xpZCAjRTVFOEVBO1xuICBsZWZ0OiAxNjVweDtcbiAgYm90dG9tOiAtNDBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciAucmVzdWx0Q2FyZCB7XG4gIG1hcmdpbjogMWVtO1xuICBwYWRkaW5nOiAwO1xuICB3aWR0aDogMzAwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNUU4RUE7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgY29sb3I6ICM2MzYzNjM7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgI3NhbXBsZXNXcmFwcGVyIC5yZXN1bHRDYXJkOmhvdmVyIGgzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0NDRDBEMztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQuc2VsZWN0ZWQgaDMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUQ5NEVFO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciAucmVzdWx0Q2FyZCBoMyB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMC41ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6IHdoaXRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZEQURFO1xuICBib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQgLmNhcmRCb2R5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQgLmNhcmRCb2R5IHVsIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIHdpZHRoOiA1MCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgI3NhbXBsZXNXcmFwcGVyIC5yZXN1bHRDYXJkIC5jYXJkQm9keSB1bCBsaSB7XG4gIHBhZGRpbmc6IDAuMWVtIDAuNWVtIDAuNWVtO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0VGRjNGNjtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciAucmVzdWx0Q2FyZCAuY2FyZEJvZHkgdWwgbGkubGlzdFRpdGxlIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZzogMC41ZW0gMWVtO1xuICBjb2xvcjogIzYzNjM2Mztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQgLmNhcmRCb2R5IHVsIGxpIHNwYW4ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQgLmNhcmRCb2R5IHVsIGxpIHNwYW4udmFyIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC1zaXplOiAxMHB4O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciAucmVzdWx0Q2FyZCAuY2FyZEJvZHkgdWwgbGkgc3Bhbi52YWwge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjODA4MDgwO1xuICBmb250LXNpemU6IDExcHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgI3NhbXBsZXNXcmFwcGVyIC5yZXN1bHRDYXJkIC5jYXJkQm9keSB1bDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNFNUU4RUE7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIHtcbiAgZ3JpZC1hcmVhOiBcInZhcmlhbnRSZXN1bHRzXCI7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzLnNlbGVjdGVkIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzID4gcCB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbjogMC41ZW0gMC4yNWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQge1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC5ub1ZhcmlhbnRzRm91bmQge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWF1dG8tY29sdW1uczogMTtcbiAgZ3JpZC1hdXRvLXJvd3M6IDI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLm5vVmFyaWFudHNGb3VuZCBzZWN0aW9uIHtcbiAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gIHdpZHRoOiAxNTBweDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC5ub1ZhcmlhbnRzRm91bmQgcCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiA4MCU7XG4gIGNvbG9yOiBncmV5O1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC5ub1ZhcmlhbnRzRm91bmQgcCBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIHdpZHRoOiAxMDQwcHg7XG4gIGhlaWdodDogNjUwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRUZGM0Y2O1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0VGRjNGNjtcbiAgd2lkdGg6IDE3NXB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHN0cmV0Y2g7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyIC52YXJpYW50QnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Q2REFERTtcbiAgbWluLWhlaWdodDogNTBweDtcbiAgbWF4LWhlaWdodDogMTAwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciAudmFyaWFudEJ1dHRvbiBwIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAxZW07XG4gIG1hcmdpbjogMDtcbiAgdGV4dC1hbGlnbjoganVzdGlmeTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXIgLnZhcmlhbnRCdXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0NEMEQzO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciAudmFyaWFudEJ1dHRvbi5zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRDk0RUU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyIC52YXJpYW50QnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgd2lkdGg6IDk5MHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xuICBwYWRkaW5nOiAzLjVlbSAxZW0gMWVtIDNlbTtcbiAgd2lkdGg6IDkwJTtcbiAgZ3JpZC1jb2x1bW46IDEwMCU7XG4gIGdyaWQtcm93OiA1MHB4IGF1dG87XG4gIGdyaWQtdGVtcGxhdGUtYXJlYXM6IFwidmFyaWFudC1oZWFkZXJcIiBcImRhdGFzZXRzXCI7XG4gIGdyaWQtZ2FwOiAxZW07XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50LnNlbGVjdGVkIHtcbiAgZGlzcGxheTogZ3JpZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciB7XG4gIGdyaWQtYXJlYTogdmFyaWFudC1oZWFkZXI7XG4gIG1hcmdpbi1sZWZ0OiAxZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBwIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luOiAwO1xuICBtYXJnaW4tcmlnaHQ6IDFlbTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBwIHNtYWxsIHtcbiAgZm9udC13ZWlnaHQ6IGxpZ2h0ZXI7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1ZW07XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IC5sb2dvIHtcbiAgbWFyZ2luOiBhdXRvIDAuNWVtO1xuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgLmxvZ28gaW1nIHtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogMzAlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiAubG9nbyBpIHtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBjb2xvcjogIzIxOTZmMztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgLmxvZ286OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxMDE7XG4gIGJvcmRlci1sZWZ0OiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiA4cHggc29saWQgIzM1M0M0NztcbiAgYm9yZGVyLXRvcDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogMTJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiBkaXYucmVzdWx0IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDUwMHB4O1xuICB3aWR0aDogODAlO1xuICB0b3A6IDY3cHg7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB6LWluZGV4OiAxMDE7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBhbGlnbi1zZWxmOiBzdGFydDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCAudHJhbnNwYXJlbnQge1xuICBoZWlnaHQ6IDEwcHg7XG4gIG1hcmdpbjogMDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCAuY29udGVudC1oYW5kb3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNTNDNDc7XG4gIGhlaWdodDogMTAwJTtcbiAgY29sb3I6IHdoaXRlO1xuICBmb250LWZhbWlseTogXCJDb3VyaWVyIE5ld1wiLCBDb3VyaWVyLCBtb25vc3BhY2U7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICBwYWRkaW5nOiAxZW07XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCAuY29udGVudC1oYW5kb3ZlciBwIHtcbiAgbWFyZ2luLWxlZnQ6IDFlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdC5zbWFsbCB7XG4gIHdpZHRoOiA4MCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwgLmNvbnRlbnQtaGFuZG92ZXIge1xuICBoZWlnaHQ6IGF1dG87XG4gIHBhZGRpbmc6IDFlbTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwgLmNvbnRlbnQtaGFuZG92ZXIgcCB7XG4gIGZvbnQtZmFtaWx5OiBcIk9wZW4gU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDkwJTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdC5zbWFsbCAuY29udGVudC1oYW5kb3ZlciBwIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdC5zbWFsbCAuY29udGVudC1oYW5kb3ZlciBwIGEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXY6aG92ZXIgZGl2LnJlc3VsdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdjpob3ZlciBkaXYubG9nbzo6YWZ0ZXIge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYubWlzc2luZyBkaXYgaW1nIHtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdi5taXNzaW5nIGRpdiBpIHtcbiAgY29sb3I6ICNCMUNFRTU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2Lm1pc3Npbmc6aG92ZXIgZGl2LnJlc3VsdCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2Lm1pc3Npbmc6aG92ZXIgZGl2LmxvZ286OmFmdGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHtcbiAgZ3JpZC1hcmVhOiBkYXRhc2V0cztcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGp1c3RpZnktY29udGVudDogc3RhcnQ7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIHBhZGRpbmctbGVmdDogMWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiB7XG4gIC8qIGZsZXgtYmFzaXM6MzAlOyAqL1xuICBtaW4td2lkdGg6IDE1MHB4O1xuICBtYXJnaW46IDFlbTtcbiAgLyogbWFyZ2luOjFlbSAwOyAqL1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTVFOEVBO1xuICBib3JkZXItcmFkaXVzOiAxZXg7XG4gIGNvbG9yOiBncmV5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBoMyB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjVlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogd2hpdGU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpIHtcbiAgcGFkZGluZzogMC41ZW0gMWVtO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U1RThFQTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmb250LXNpemU6IDkwJTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGk6bGFzdC1vZi10eXBlIHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkuaGFuZG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmM2Y2O1xuICBjb2xvcjogIzIxOTZmMztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvKiBoYW5kb3ZlciBsaW5rcyAqL1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaS5oYW5kb3ZlciAuaGFuZG92ZXItbm90ZSB7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyIC5oYW5kb3Zlci1ub3RlIGEge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGNvbG9yOiAjMjE5NmYzO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyIC5oYW5kb3Zlci1ub3RlIHAge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiAycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0xMDAlKTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgd2lkdGg6IDEwMHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM1M0M0NztcbiAgei1pbmRleDogOTk7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYm9yZGVyOiAycHggc29saWQgIzM1M0M0Nztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkuaGFuZG92ZXIgLmhhbmRvdmVyLW5vdGU6OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxMDA7XG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci10b3A6IDVweCBzb2xpZCAjMzUzQzQ3O1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogMnB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyOmhvdmVyIC5oYW5kb3Zlci1ub3RlIHAge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkuaGFuZG92ZXI6aG92ZXIgLmhhbmRvdmVyLW5vdGU6OmFmdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpIHNwYW4udmFyaWFibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaSBzcGFuLm51bWJlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gdWwge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gc3Bhbi5udW1iZXIge1xuICBjb2xvcjogYmxhY2s7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbi5leGlzdHMtWSBoMyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNkFFNDc7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uLmV4aXN0cy1ZIGgzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24uZXhpc3RzLU4gaDMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjA2NTQzO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbi5leGlzdHMtTiBoMyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCB7XG4gIHdpZHRoOiBhdXRvO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciB7XG4gIHdpZHRoOiBhdXRvO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciB7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICB3aWR0aDogMTY1cHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5jb250ZW50IHtcbiAgd2lkdGg6IGF1dG87XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IHtcbiAgcGFkZGluZzogMi41ZW0gMS41ZW0gMWVtIDJlbTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCB7XG4gIHRvcDogNTVweDtcbn1cblxuLmhhbmRvdmVyLW5vdGU6aG92ZXIgcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmhhbmRvdmVyLW5vdGU6aG92ZXI6OmFmdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbkBrZXlmcmFtZXMgZmFkZUF3YXkge1xuICAwJSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgMTAwJSB7XG4gICAgd2lkdGg6IDAlO1xuICB9XG59XG51bCNtZXNzYWdlcyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAxZW07XG4gIHJpZ2h0OiAxZW07XG4gIHotaW5kZXg6IDEwMDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG59XG51bCNtZXNzYWdlcyBsaSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyLXJhZGl1czogMWV4O1xuICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcbiAgbWFyZ2luOiAxZXggMDtcbiAgcGFkZGluZzogMWV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8qIFN0b3AgYW5kIHJlc3RhcnQgKi9cbn1cbnVsI21lc3NhZ2VzIGxpLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG51bCNtZXNzYWdlcyBsaTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIi1cIjtcbiAgdGV4dC1pbmRlbnQ6IC0zMDAwMHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMXB4O1xuICByaWdodDogMXB4O1xuICBoZWlnaHQ6IDJweDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDJweCk7XG4gIGJhY2tncm91bmQ6IGJsYWNrO1xuICBib3JkZXItcmFkaXVzOiAxZXg7XG4gIGFuaW1hdGlvbi1uYW1lOiBmYWRlQXdheTtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxO1xuICBhbmltYXRpb24tZHVyYXRpb246IDVzO1xufVxudWwjbWVzc2FnZXMgbGk6aG92ZXI6OmFmdGVyIHtcbiAgYW5pbWF0aW9uOiBub25lO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS1pbmZvIHtcbiAgYmFja2dyb3VuZDogIzVjYjg1YztcbiAgYm9yZGVyLWNvbG9yOiAjNWNiODVjO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS1pbmZvOjphZnRlciB7XG4gIGJhY2tncm91bmQ6ICM0NDlkNDQ7XG59XG51bCNtZXNzYWdlcyBsaS5tZXNzYWdlLWVycm9yIHtcbiAgYmFja2dyb3VuZDogI2Q5NTM0ZjtcbiAgYm9yZGVyLWNvbG9yOiAjZDk1MzRmO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS1lcnJvcjo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiAjYzkzMDJjO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS13YXJuaW5nIHtcbiAgYmFja2dyb3VuZDogI2YwYWQ0ZTtcbiAgYm9yZGVyLWNvbG9yOiAjZjBhZDRlO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS13YXJuaW5nOjphZnRlciB7XG4gIGJhY2tncm91bmQ6ICNlYzk3MWY7XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlLmNzcy5tYXAgKi9cbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdfQ== */ \ No newline at end of file diff --git a/ui/static/css/style.css.map b/ui/static/css/style.css.map new file mode 100644 index 0000000..22d05ae --- /dev/null +++ b/ui/static/css/style.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/_base.scss","../scss/_variables.scss","../scss/_query.scss","../scss/_main.scss","../scss/_cookies.scss","../scss/_footer.scss","../scss/_history.scss","../scss/_levels.scss","../scss/_result.scss","../scss/_datasetAlleleResponses.scss","../scss/_variantsPanel.scss","../scss/_samples.scss","../scss/_message.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EAEE;EACA;EACA;EACA;EACA,WCVgB;EDWhB;EACA;EAGA;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EAAI;EACA;;AAIN;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAMA;EACY;EAAoB;;AAGhC;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EAAoB;;;AE5HhC;EAGI;EACA;EAGA;EACA;EACA;EACH;EACA;EAEG;;AAEH;EAEC;EACA;AACA;EACA;AACA;EACA;EAGA;EACA;EAEA;EAEA;EACA;AAWA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAfA;EACC;;AACD;EACC;;AAeD;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AACA;EAAQ;;AAKV;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAED;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EAAiB;;AACjB;EAAU;EAAyC;;AAEpD;EACC;EACA;EACA;EAAa;EACb;EAAa;EACb;EACA;EACA;EACA;;AAID;EAAkC;EAAY;;AAI/C;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;;AAOA;EACA;EAAoB;;AAGpB;EACC;EACA;EACA;;AAED;EACC;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;;AAaA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AACA;EAA2B;EAAc;EAA+B;;AAK3E;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAIA;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAIF;EAAI;EACH;;AACD;EAAe;;AAEf;EACC;EACA;EACA;EACA;AAuBA;;AArBA;EACC;EACA;EACA;EACA;EAEA;;AACA;EAAiB;;AACjB;EAAU;;AAGX;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;;AAMH;EACC;EAEA;;AAGA;EACC;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAID;EACC;EACA;;AAED;EAEC;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;AAED;EACC;EACA;EACA;;;ACpVN;EAEC;AAAS;EACT;EACA;;AAEG;EACF;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAOD;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AALC;EAAqB,kBFaR;;AEZb;EAAqB,kBFaJ;;AEZjB;EAAqB,kBFaJ;;AEZjB;EAAwB,kBFaJ;;AEKlB;EAAI;;;AAKJ;EAEF;;AAEA;EACC;EACA;EACA;EACA;EAEA;EAEA;;AAEA;EAAM;EACL;AACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EAAS;;AAIV;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGA;EACA;EAAwB;;AAExB;EAAqB,kBF1DV;;AE2DX;EAAyB,kBFzDV;;;AGtCnB;EACI;EAAgB;EAChB;EACA;EAAS;EACT;EACA;EACA;EACA;EAEA;EAAc;EAEd;EAwBA;;AAtBA;EACH;;AAEA;EAAK;EAAiB;EAAU;;AAChC;EAAI;;AACJ;EACI;EACA;;AAID;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIG;EAAY;EAAW;;;AAI3B;EAA2B;;;AAC3B;EAAmC;EAAkB;;;ACzCrD;EAEI;EACA;EAGA;EACA;EACA;EACA;EAEA;AAI4C;;AAF5C;EAAU;;AACV;EAAkB;EAAc;EAAsB;;AACtD;EAAwB;;AACxB;EAAgC;;AAEhC;EAAe;;AAEf;EACI;EACA;;AAEA;EAAG;EAAgB;;;AAS3B;EACI;EAAe;EACf;EAAgB;EAAU;EAAa;EAAY;EACnD;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAIJ;EACI;EACA;EAAmB;EAAS;EAC5B;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAIJ;EAAyD;;;AACzD;EAA2D;;;AC/D3D;EAAoB;;;AAEpB;EAEI;EAAgB;EAAS;EACzB;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;AAEA;AACA;EAEA;EACA;AAEA;EA+CA;;AA9CA;EAAS;EAAsB;EAAa;EAAiB;EAAgB;;AAE7E;EACF;EACA;EACA;AAaA;AACA;EAEA;EACA;AAEA;AACA;EAEA;;AArBA;EACC;EACA;EAAmB;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;;AAeC;EAEF;EACA;;AAEA;EACC;EACA;;AACA;EACA;;AAQC;EACF;EACA;EACA;EACA;EACA;EACA;EAWA;;AATA;EAAK;EAAc;;AACnB;EACC;;AAEA;EAAW;EAAsB;EAAc;;AAMhD;EACC;EACA;EACA;EAAmB;EAAU;EAAW;EAExC;EACA;EACA;EACA;EACA;;AAID;AAAA;EACM;;AAEN;EACC;EACA;EACA;EACA;EACA;EACA;EAAmB;;AAEnB;EAAe;;AACf;EAAe;;AAEf;EACC;EACA;EAAmB;EAAW;EAAO;EACrC;EACA;;AACA;EAAU;;AAKZ;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAGD;EACC;;;ACpJL;EAEC;EACA;EACA;EACA;EAEA;EACA,WNRiB;EMSjB;EACA;;AAEA;EACC;;AAGA;EACC;EACA;EACA;EACA;;AACA;EAAS;;AAIV;EACC;EACA;EACA;;AACA;EAAQ;;AAIT;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAIF;EACC;EACA;EACA;;AAIF;EACC;EACA;;AAEA;EACC;EACA;EACA;EAEA;EACA;AACA;;AAEA;EACC;EACA;EACA;AACA;;AAIF;EACC;EACA;;AAEA;EACC;EAA4B;EAAiB;EAE7C;EACA;EACA;;AAEA;EAAiB;EAAkB;;AAEnC;EACC;EACA;EACA;EACA;;AAID;EACC;EACA;EAAW;EAEX;EACA;EAEA;;AAEA;EACC;EACA;EACA;AACA;;AAOJ;EACC;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAKH;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACxJL;EAEI;EACA;EACA;EAEA;;ACLJ;AACI;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAEJ;EACI;EACA;EACA;AAEA;;AACA;EAEI;;AAGA;EAAI;EAEA;EACA;;AAMJ;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAOJ;EAAmB;;AACnB;EAAwB;;AAKhC;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAIA;EAAI;;AACA;EAAO;;AAIX;EAAK;;AACD;EAAO;;ADtHlB;EACC;EACA;;AEVF;EACI;EACA;EACA;EAEA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIJ;EACI;;AAEJ;EACI;;AAGJ;EACI;;AAMhB;EACI;EACA;EACA;EACA;EACA;;AAGA;EACI;EAMA;EACA;EAEA;EACA;EACA;EAEA;;AAXA;EACI;;AAWJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACA;EACA;EACA;;AAGA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAKR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EAEA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAOR;EACI;;AAIA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;;AACA;EAAO;;AACP;EAAI;EAAuB;;AAOvC;EACI;;AAGJ;EACI;;AAKJ;EACI;EACA;;AAGJ;EACI;;AAIA;EACI;;AAGJ;EACI;;AAQpB;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;;AD3QhB;AACI;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAEJ;EACI;EACA;EACA;AAEA;;AACA;EAEI;;AAGA;EAAI;EAEA;EACA;;AAMJ;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAOJ;EAAmB;;AACnB;EAAwB;;AAKhC;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAIA;EAAI;;AACA;EAAO;;AAIX;EAAK;;AACD;EAAO;;AD/GlB;EACC;EACA;;AGlBF;EACI;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACI;EAEA;EACA;EAEA;EACA;;AAIA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAMZ;EACI;;AASpB;EACI;EACA;;AAEA;EACI;;AAEJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;;ADhJZ;EACI;EACA;EACA;EAEA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIJ;EACI;;AAEJ;EACI;;AAGJ;EACI;;AAMhB;EACI;EACA;EACA;EACA;EACA;;AAGA;EACI;EAMA;EACA;EAEA;EACA;EACA;EAEA;;AAXA;EACI;;AAWJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACA;EACA;EACA;;AAGA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAKR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EAEA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAOR;EACI;;AAIA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;;AACA;EAAO;;AACP;EAAI;EAAuB;;AAOvC;EACI;;AAGJ;EACI;;AAKJ;EACI;EACA;;AAGJ;EACI;;AAIA;EACI;;AAGJ;EACI;;AAQpB;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;;AD3QhB;AACI;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAEJ;EACI;EACA;EACA;AAEA;;AACA;EAEI;;AAGA;EAAI;EAEA;EACA;;AAMJ;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAOJ;EAAmB;;AACnB;EAAwB;;AAKhC;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAIA;EAAI;;AACA;EAAO;;AAIX;EAAK;;AACD;EAAO;;AEsBP;EACI;;AACA;EACG;;AAEH;EACI;EACA;;AACA;EACI;;AAGR;EACI;;AACA;EACI;;AACA;EACI;;;AHxI3B;EAAI;;AACJ;EAAW;;;AIhCZ;EACI;IAAQ;;EACR;IAAQ;;;AAGZ;EAEI;EAAgB;EAAY;EAC5B;EACA;EACA;EAEA;EACA;;AAEA;EACH;EACA;EAAmB;EACnB;EACA;EACA;EACA;EAEA;EACA;AAiBA;;AAfA;EAAW;;AAEX;EACI;EAAc;EACd;EAAoB;EAAY;EAAW;EAAY;EAEvD;EACA;EAEA;EACA;EACA;EACA;;AAIJ;EAAiB;;AAEjB;EACI;EAAqB;;AACrB;EAAW;;AAEf;EACI;EAAqB;;AACrB;EAAW;;AAEf;EACI;EAAqB;;AACrB;EAAW","file":"style.css"} \ No newline at end of file diff --git a/ui/static/css/testing.css b/ui/static/css/testing.css new file mode 100644 index 0000000..2c4ba4c --- /dev/null +++ b/ui/static/css/testing.css @@ -0,0 +1,2 @@ +body{color:#000;font-family:Open Sans,sans-serif}.container{width:300px;height:300px;background-color:grey}.container .box{display:none;padding:1em;background-color:red;color:#fff;width:50%}.container:hover .box{display:block} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Njc3MvdGVzdGluZy5zY3NzIiwiLi4vLi4vdGVzdGluZy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsS0FDSSxXQUFBLGdDQUNBLENBR0osV0FDSSxZQUFBLGFBQ0EscUJBQ0EsQ0FFQSxnQkFDSSxhQUFBLFlBQ0EscUJBQ0EsV0FDQSxTQUNBLENBSUEsc0JBQU0sYUFBQSxDQ0RiIiwiZmlsZSI6Ii4uL3Rlc3RpbmcuY3NzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJib2R5IHtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LWZhbWlseTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZjtcbn1cblxuLmNvbnRhaW5lciB7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAzMDBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogZ3JleTtcbn1cbi5jb250YWluZXIgLmJveCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBhZGRpbmc6IDFlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xuICBjb2xvcjogd2hpdGU7XG4gIHdpZHRoOiA1MCU7XG59XG4uY29udGFpbmVyOmhvdmVyIC5ib3gge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyojIHNvdXJjZU1hcHBpbmdVUkw9dGVzdGluZy5jc3MubWFwICovXG4iXX0= */ \ No newline at end of file diff --git a/ui/static/css/testing.css.map b/ui/static/css/testing.css.map new file mode 100644 index 0000000..8c3d260 --- /dev/null +++ b/ui/static/css/testing.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/testing.scss"],"names":[],"mappings":"AACA;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAIA;EAAM","file":"testing.css"} \ No newline at end of file diff --git a/ui/static/img/beacon_project.png b/ui/static/img/beacon_project.png new file mode 100644 index 0000000..57ee43e Binary files /dev/null and b/ui/static/img/beacon_project.png differ diff --git a/ui/static/img/beacon_project_small.png b/ui/static/img/beacon_project_small.png new file mode 100644 index 0000000..26d5ad7 Binary files /dev/null and b/ui/static/img/beacon_project_small.png differ diff --git a/ui/static/img/eu-flag.jpg b/ui/static/img/eu-flag.jpg new file mode 100644 index 0000000..0ab7d38 Binary files /dev/null and b/ui/static/img/eu-flag.jpg differ diff --git a/ui/static/img/logo.png b/ui/static/img/logo.png new file mode 100644 index 0000000..26d5ad7 Binary files /dev/null and b/ui/static/img/logo.png differ diff --git a/ui/static/js/access_levels.js b/ui/static/js/access_levels.js new file mode 100644 index 0000000..c0cc691 --- /dev/null +++ b/ui/static/js/access_levels.js @@ -0,0 +1,17 @@ +(function(){ // scoping + + var fieldsParam = $( "#fields-param" ), + datasetsParam = $( "#datasets-param" ); + + var reloadParams = function(){ + var url_params = + '?'+ fieldsParam.attr('data-param') +'=' + ((fieldsParam.prop('checked'))?'true':'false') + + '&'+ datasetsParam.attr('data-param') +'=' + ((datasetsParam.prop('checked'))?'true':'false'); + var loc = '//' + location.host + location.pathname; + window.location.href = loc + url_params; + } + + fieldsParam.on('change', reloadParams); + datasetsParam.on('change', reloadParams); + +})(); diff --git a/ui/static/js/beacon.js b/ui/static/js/beacon.js new file mode 100644 index 0000000..e2488ef --- /dev/null +++ b/ui/static/js/beacon.js @@ -0,0 +1,129 @@ +(function(){ // scoping + + // ---------------------------------------------- + // Cookie disclaimer + // ---------------------------------------------- + var cookiePane = document.querySelector('#beacon-cookies'), + cookieButton = null; + if(cookiePane) + cookieButton = cookiePane.querySelector('button'); + if(cookiePane && cookieButton) + cookieButton.addEventListener('click', function(){ + var expires = new Date(new Date().setFullYear(new Date().getFullYear() + 1)); // JS is so shitty + document.cookie = "beacon=consent;path=/;expires="+expires.toGMTString(); + cookiePane.setAttribute("class", 'hide-me'); // set to 1s + setTimeout(function(){ cookiePane.remove(); }, 1100); + return false; + }); + + + // Click/Toggle sidebar panel + $( ".trigger" ).click(function() { + $( this ).parent('div').toggleClass( "open" ); + }); + + // ---------------------------------------------- + // Filters + // ---------------------------------------------- + var filters = $( "#query-filters" ); + + // Utilities + if(typeof(String.prototype.trim)==="undefined"){String.prototype.trim=function(){return String(this).replace(/^\s+|\s+$/g,'');};} + + var make_autocomplete = function(el){ + el.autocomplete({ + minLength: 0 + , delay: 300 + , source: function (request, response) { + + var term = request.term; + if(term.length >= 2){ + var url = "/terms/" + term; + //console.log(url); + $.get(url, response); + } + } + , focus: function() { + // prevent value inserted on focus + return false; + } + // , _renderItem: function( ul, item ){ + // return $( "
  • " ) + // .attr( "data-value", item.value ) + // .append( item.label ) + // .appendTo( ul ); + // } + , select: function( event, ui ) { + el.val(ui.item.value); + // Delete spans from parent + el.parent().find("span").remove(); + $( "" ).html(ui.item.label).insertBefore(el); + el.focus(); + } + }); + } + + filters.delegate( ".filter-add", "click", function() { + + var button = $(''); + button + .addClass("filter-remove") + .addClass("fas") + .addClass("fa-minus-circle"); + + var input = $('', { + "type": "text", + "value": "", + "placeholder": "HP:0011007>=49 or PATO:0000383 or EFO:0009656", + "name": "filters" , + "data-lpignore": "true" + }); + + var section = $('
    '); + + section.append(input); + section.append(button); + filters.append(section); + make_autocomplete(input); + input.focus(); + + }); + + filters.delegate( ".filter-remove", "click", function() { + $( this ).parent('section').remove(); + }); + + + // Autocomplete for the already present one + filters.find('input').each(function(){ make_autocomplete($(this)); }); + + // ---------------------------------------------- + // Datasets + // ---------------------------------------------- + var datasets = $( "#query-datasets" ); + var datasetsSelectors = datasets.find( "input:not([disabled])" ); // enough + $("#datasets-header").delegate( "span", "click", function() { + var content = $( this ).text(); + if( content == 'All' ){ + datasetsSelectors.prop('checked', true); + } + if( content == 'None' ){ + datasetsSelectors.prop('checked', false); + } + }); + + + + + // ---------------------------------------------- + // Escape key to close the API popups + // ---------------------------------------------- + $(document).keyup(function(e) { + //console.log('Key Code', e.keyCode); + if (e.keyCode == 27) { // escape + $('#beacon-response-trigger').prop('checked', false); + $('#beacon-request-trigger').prop('checked', false); + } + }); + +})(); diff --git a/ui/static/js/history.js b/ui/static/js/history.js new file mode 100644 index 0000000..7e123f8 --- /dev/null +++ b/ui/static/js/history.js @@ -0,0 +1,87 @@ +(function(){ // scoping + + // Check support for localStorage + try { localStorage.setItem('somekey', 'somevalue'); localStorage.removeItem('somekey'); } + catch (e) { return ; } // unsupported: exit + + + var key = 'beacon-history'; + + // localStorage handles only strings: Convert to Array with JSON + var history_items = JSON.parse(localStorage.getItem(key)) || []; + + // console.log("History so far", history_items); + + // If we have a response, append to history + var response = document.querySelector('#response-history'); + + // var form = document.querySelector('form#query'); + // var main = document.querySelector('body#response main'); + // var footer = document.querySelector('body#response footer'); + var body = document.querySelector('body'), + form = document.querySelector('body > form'), + main = document.querySelector('body > main'), + footer = document.querySelector('body > footer'); + + if (response){ + var thumbnail = response.cloneNode(true); // deep + + if(form && main && footer){ + thumbnail.removeAttribute('id'); + history_items.push([form.outerHTML,main.outerHTML,thumbnail.outerHTML,footer.outerHTML]); + // console.log("Appending to history"); + localStorage.setItem(key, JSON.stringify(history_items)); + } + } + + // If we do have some history to render + var count = history_items.length; + if ( count > 0 ){ + + // console.log("Rendering history", count); + var container = $(''); + // console.log(container); + + while(count--){ // read count then decrement + var thumb_html = history_items[count][2]; // just the thumbnail + // Convert to JQuery and append + //$(thumb_html).appendTo(container) + var t = $(thumb_html); + t.attr('data-pos', count); + t.appendTo(container); + } + + var clear_history = $('Clear History'); + clear_history.on('click', function(){ + localStorage.removeItem(key); + $('aside').remove(); + }); + clear_history.appendTo(container); + + container.appendTo('body'); + + + // Reloading an item + container.delegate("section h2 i", "click", function() { + var pos = $( this ).parents('section').attr('data-pos'); + //console.log("position", pos); + var [form_html, main_html, thumb_html, footer_html] = history_items[pos]; + body.setAttribute('id','response'); + form.outerHTML = form_html; + main.outerHTML = main_html; + footer.outerHTML = footer_html; + //console.log("Repainting"); + //console.log(history_items[pos]); + + // outerHTML knocked the elements out + // need to re-find them + form = document.querySelector('body > form'); + main = document.querySelector('body > main'); + footer = document.querySelector('body > footer'); + + return false; + }); + + } + +})(); diff --git a/ui/static/js/jquery.min.js b/ui/static/js/jquery.min.js new file mode 100644 index 0000000..4d9b3a2 --- /dev/null +++ b/ui/static/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" + + + +{% if messages %}{% endif %} diff --git a/ui/templates/header.html b/ui/templates/header.html new file mode 100755 index 0000000..2ebf791 --- /dev/null +++ b/ui/templates/header.html @@ -0,0 +1,15 @@ +
    + {{ conf.org_name }} + +

    {{ conf.beacon_name }}

    +

    {{ conf.description|safe }}

    + + +
    diff --git a/ui/templates/index.html b/ui/templates/index.html new file mode 100755 index 0000000..2b6ab7b --- /dev/null +++ b/ui/templates/index.html @@ -0,0 +1,264 @@ + + + + + + {{ conf.beacon_name }} + + + + + + + + + + + + + + + + + + {% include 'header.html' %} + +
    + +

    Beacon v2 examples

    + +

    Listings

    +
    +
    + +
    +
    + +
    +{#
    #} +{# #} +{#
    #} +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +

    Other formats

    +
    +
    + + +
    +
    + + +
    +
    + + + +
    +
    + + +
    +
    + +

    Querying

    +
    +
    + + + + + + + +
    +
    + + + + + + +
    +
    + + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + + +
    +
    + +

    Permissions

    +
    +
    + + + + + +
    +
    + + + + + + +
    +
    + + +
    + +
    + +

    Filters

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +{#
    #} +{# #} +{# #} +{#
    #} +
    + +

    Info

    +
    + Beacon Info + Beacon Info using GA4GH Service-info schema + GA4GH Service-info + GA4GH service-info (alternative) +
    + +

    Other endpoints

    +
    + Beacon Datasets + Beacon Filtering Terms +
    + + {% if session.user %} +
    +

    Beacon v2 authentication token

    +

    Hi, {{ session.user.name }}

    +

    Here is your access token:

    +
    {{ session.access_token }}
    +

    Keep it safe, it is just a temporary page to test the API

    +

    Use it like:

    + curl {{request.url}}api -H 'Authorization: Bearer {{ session.access_token}}' + + {% endif %} + +
    + + {% include 'footer.html' %} + + + diff --git a/ui/templates/privacy.html b/ui/templates/privacy.html new file mode 100644 index 0000000..5d48dbf --- /dev/null +++ b/ui/templates/privacy.html @@ -0,0 +1,71 @@ + + + + + + {{ conf.beacon_name }} | Privacy + + + + + + + + + + + + {% include 'header.html' %} + +
    +

    + {{ request.host }}:{{ request.port }} does not identify users on this site. + It does use cookies, though. +

    + +

    What is a cookie?

    + +

    + Cookies are text files containing small amounts of information + which are downloaded to your device when you visit a website. +
    + They allow a website to remember your preferences and are + therefore useful to improve your online experience. +
    + Find out more + information about cookies. +

    + +

    Types of cookies we use

    + +

    Functional

    + +

    These cookies record the columns you wish to display or hide in the results page.Performance + +

    + These cookies are used to analyse trends, administer the + website, track visitor movements and gather broad demographic + information for aggregate use. +
    + We use the information to compile reports and to help us + improve our websites. +
    + These cookies are not linked to personally identifiable + information. +

    + +

    Session cookie

    + +

    + A session cookie for a website only exists whilst the user is reading + or navigating the website. When the user closes their web browser + these cookies are usually removed. +

    +
    + + {% include "footer.html" %} + + diff --git a/ui/templates/testing.html b/ui/templates/testing.html new file mode 100644 index 0000000..267ec28 --- /dev/null +++ b/ui/templates/testing.html @@ -0,0 +1,124 @@ +{% load static %} + + + + + + + + + + + + + Testing + + + +

    Hello World!

    + +
    +
    +

    This is a test.

    +
    +
    + +
    + + + + +
    +
    +

    Datasets

    +

    All None

    +
    +
    + {% for d in BEACON.datasets %} + {% if d.info.authorized == 'true' %} + + {% else %} + + {% endif %} + {% endfor %} +
    +
    + + + + + + + + + +